mirror of
https://github.com/silverstripe/silverstripe-comments
synced 2024-09-29 04:39:07 +02:00
Compare commits
210 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
2fa40a5fd2 | ||
|
2b46fe88c1 | ||
|
6ce739e723 | ||
|
84dcc1465f | ||
|
671797da4f | ||
|
e09dab4b88 | ||
|
7417453091 | ||
|
277f84392f | ||
|
ca593443d1 | ||
|
67c42b363e | ||
|
7e202debb7 | ||
|
b988465bf1 | ||
|
4a9af98a70 | ||
|
f5157aaf3c | ||
|
dde8ac9bac | ||
|
dda2dcbfff | ||
|
7448c2050a | ||
|
2fccdbe916 | ||
|
5729dc5c70 | ||
|
428b503a70 | ||
|
1dc37ac0c1 | ||
|
1ad761698b | ||
|
e08e51d7f3 | ||
|
0c7b2e987b | ||
|
5d044bd6eb | ||
|
b771bb624a | ||
|
9bfef9e931 | ||
|
2b5bde3d8f | ||
|
57a9617d5b | ||
|
c3ef4d6efc | ||
|
a88bd6fff6 | ||
|
068f283833 | ||
|
bffe690afd | ||
|
6081aeba8f | ||
|
6974bfd8ba | ||
|
b9341d6185 | ||
|
a3f2f3cd48 | ||
|
05a3628471 | ||
|
bf6e56bd10 | ||
|
ff6db7d480 | ||
|
d87dbc8367 | ||
|
6782048463 | ||
|
a3479443df | ||
|
9ef77e393c | ||
|
3dc22e9c39 | ||
|
e7f9e60352 | ||
|
efe5b1ef6f | ||
|
3d6e44aaa1 | ||
|
1d6eae193c | ||
|
7284a920ed | ||
|
536d965d9c | ||
|
1aa560ff74 | ||
|
421e08cba5 | ||
|
91d2db1020 | ||
|
9258ce6fa4 | ||
|
8a3b569653 | ||
|
aa81f8cdd2 | ||
|
6895ac4f9d | ||
|
a3c7943fdd | ||
|
43e221daa8 | ||
|
6d9a808cd4 | ||
|
7eb8ebedf4 | ||
|
305ae6b4b8 | ||
|
066b28bb3d | ||
|
5cee54faca | ||
|
4cfecdfcd6 | ||
|
3a4130302d | ||
|
a4eeec4bba | ||
|
545df1d54f | ||
|
9c3c1e8120 | ||
|
38495c69f0 | ||
|
e6971b82c6 | ||
|
362cb05029 | ||
|
5bda1a7076 | ||
|
175664d5a8 | ||
|
3b37fdb1ae | ||
|
fb15ba7d43 | ||
|
06b243b1e4 | ||
|
668f90d2f9 | ||
|
867d0e8281 | ||
|
c065d0c5de | ||
|
739b211afb | ||
|
d12a71ddff | ||
|
c834e19631 | ||
|
a8d1cf1355 | ||
|
f5f6e8f08f | ||
|
8bc492bb77 | ||
|
68ec979987 | ||
|
f91b13ad96 | ||
|
6972da84a6 | ||
|
99b2ed4dfc | ||
|
1e9d8fcd1b | ||
|
bcbc58f46e | ||
|
e88c7d5154 | ||
|
edfb9d7b74 | ||
|
932ef5d284 | ||
|
82c817c452 | ||
|
aaa9328a72 | ||
|
e2db114158 | ||
|
cfdffb394a | ||
|
d0b6181b48 | ||
|
ce450103ac | ||
|
05c5cb64a7 | ||
|
408845b01a | ||
|
85374a1f76 | ||
|
07b24073dd | ||
|
250e522887 | ||
|
9d9ab35cc6 | ||
|
d5b9a2818c | ||
|
e21a09234a | ||
|
fbfead9c9e | ||
|
b3fe6d82b4 | ||
|
617501efed | ||
|
f4c82f238e | ||
|
c0f0c99e56 | ||
|
f8eeeee4b8 | ||
|
cad9369f7b | ||
|
c16ca56408 | ||
|
67167c0809 | ||
|
8397bb5792 | ||
|
2d0d949fc3 | ||
|
14675b53bf | ||
|
9c4ec173fd | ||
|
82845626bc | ||
|
780ea22b93 | ||
|
f65f5b5697 | ||
|
74a317ab46 | ||
|
161f5f88bd | ||
|
67faa822f7 | ||
|
aec3e2ba5b | ||
|
89204c0c1c | ||
|
d8602d0e02 | ||
|
4d19e6c43e | ||
|
303bdef1c8 | ||
|
1358594070 | ||
|
6fcc040485 | ||
|
8b178b63ac | ||
|
1e4378d212 | ||
|
f0998faafb | ||
|
74afde6d9b | ||
|
9ff1db403e | ||
|
ce1e934d57 | ||
|
005f58f1ee | ||
|
647c634dc4 | ||
|
7d60fc2fe2 | ||
|
18fbdfc94b | ||
|
c4cfc44643 | ||
|
b6a2c608ac | ||
|
d504d4a847 | ||
|
f5c7024aaf | ||
|
3812057b00 | ||
|
20c6a50f12 | ||
|
0535d29f8d | ||
|
7691237fe5 | ||
|
a57c83c121 | ||
|
dc1f8622e0 | ||
|
4ee9720081 | ||
|
d7761290f8 | ||
|
e101b74778 | ||
|
8c08f43376 | ||
|
f74d91041b | ||
|
d38e7c5b67 | ||
|
97461f8f35 | ||
|
def91bb6d1 | ||
|
ec60328a0c | ||
|
c0ca79090b | ||
|
9a57c3802c | ||
|
9f9dc67950 | ||
|
94950ee79c | ||
|
747d4f4402 | ||
|
cf86b2bb21 | ||
|
75d63209aa | ||
|
04a5257e40 | ||
|
19619b083e | ||
|
c0a01dbc91 | ||
|
6d7b14367a | ||
|
77f47af5cb | ||
|
a1a42009cc | ||
|
c7235e1c5d | ||
|
4e23771d79 | ||
|
52b8ea9104 | ||
|
8bd79eac1f | ||
|
f357ca6b7f | ||
|
886c5be21a | ||
|
9dab444f33 | ||
|
2c00421cd2 | ||
|
32ec3bde50 | ||
|
be71d19d9e | ||
|
788cb6e6d1 | ||
|
eca3ac0e94 | ||
|
01cc198a2d | ||
|
06acad661f | ||
|
42a15f7241 | ||
|
c22daa2ee0 | ||
|
614b525c04 | ||
|
02db1cc86e | ||
|
aa46291adf | ||
|
386f8602f0 | ||
|
eb0415a938 | ||
|
a886f68c58 | ||
|
276ddb0c86 | ||
|
cc46ccf89e | ||
|
3e0cae0cc9 | ||
|
4385299f1f | ||
|
abb45aa733 | ||
|
532b49c537 | ||
|
8d5edc7821 | ||
|
90c42ff027 | ||
|
909066c0a8 | ||
|
192ddbb4b5 |
@ -1 +0,0 @@
|
|||||||
comment: false
|
|
@ -1,6 +1,6 @@
|
|||||||
# For more information about the properties used in this file,
|
# For more information about the properties used in
|
||||||
# please see the EditorConfig documentation:
|
# this file, please see the EditorConfig documentation:
|
||||||
# http://editorconfig.org
|
# http://editorconfig.org/
|
||||||
|
|
||||||
[*]
|
[*]
|
||||||
charset = utf-8
|
charset = utf-8
|
||||||
@ -10,8 +10,17 @@ indent_style = space
|
|||||||
insert_final_newline = true
|
insert_final_newline = true
|
||||||
trim_trailing_whitespace = true
|
trim_trailing_whitespace = true
|
||||||
|
|
||||||
[{*.yml,package.json}]
|
[*.md]
|
||||||
indent_size = 2
|
trim_trailing_whitespace = false
|
||||||
|
|
||||||
# The indent size used in the package.json file cannot be changed:
|
[*.{yml,js,json,css,scss,feature}]
|
||||||
# https://github.com/npm/npm/pull/3180#issuecomment-16336516
|
indent_size = 2
|
||||||
|
indent_style = space
|
||||||
|
|
||||||
|
[composer.json]
|
||||||
|
indent_size = 4
|
||||||
|
|
||||||
|
# Don't perform any clean-up on thirdparty files
|
||||||
|
[thirdparty/**]
|
||||||
|
trim_trailing_whitespace = false
|
||||||
|
insert_final_newline = false
|
||||||
|
8
.eslintignore
Normal file
8
.eslintignore
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# Ignore dist files
|
||||||
|
client/dist/
|
||||||
|
|
||||||
|
# Ignore legacy files
|
||||||
|
client/src/legacy/
|
||||||
|
|
||||||
|
# Ignore auto-generated language files
|
||||||
|
client/lang/
|
1
.eslintrc.js
Normal file
1
.eslintrc.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
module.exports = require('@silverstripe/eslint-config/.eslintrc');
|
11
.github/workflows/ci.yml
vendored
Normal file
11
.github/workflows/ci.yml
vendored
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
name: CI
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
pull_request:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
ci:
|
||||||
|
name: CI
|
||||||
|
uses: silverstripe/gha-ci/.github/workflows/ci.yml@v1
|
16
.github/workflows/dispatch-ci.yml
vendored
Normal file
16
.github/workflows/dispatch-ci.yml
vendored
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
name: Dispatch CI
|
||||||
|
|
||||||
|
on:
|
||||||
|
# At 11:10 AM UTC, only on Wednesday and Thursday
|
||||||
|
schedule:
|
||||||
|
- cron: '10 11 * * 3,4'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
dispatch-ci:
|
||||||
|
name: Dispatch CI
|
||||||
|
# Only run cron on the silverstripe account
|
||||||
|
if: (github.event_name == 'schedule' && github.repository_owner == 'silverstripe') || (github.event_name != 'schedule')
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Dispatch CI
|
||||||
|
uses: silverstripe/gha-dispatch-ci@v1
|
17
.github/workflows/keepalive.yml
vendored
Normal file
17
.github/workflows/keepalive.yml
vendored
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
name: Keepalive
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
# The 4th of every month at 10:50am UTC
|
||||||
|
schedule:
|
||||||
|
- cron: '50 10 4 * *'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
keepalive:
|
||||||
|
name: Keepalive
|
||||||
|
# Only run cron on the silverstripe account
|
||||||
|
if: (github.event_name == 'schedule' && github.repository_owner == 'silverstripe') || (github.event_name != 'schedule')
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Keepalive
|
||||||
|
uses: silverstripe/gha-keepalive@v1
|
17
.github/workflows/update-js.yml
vendored
Normal file
17
.github/workflows/update-js.yml
vendored
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
name: Update JS
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
# Run on a schedule of once per quarter
|
||||||
|
schedule:
|
||||||
|
- cron: '0 0 1 */3 *'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
update-js:
|
||||||
|
name: Update JS
|
||||||
|
# Only run cron on the silverstripe account
|
||||||
|
if: (github.event_name == 'schedule' && github.repository_owner == 'silverstripe') || (github.event_name != 'schedule')
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Update JS
|
||||||
|
uses: silverstripe/gha-update-js@v1
|
@ -1,69 +0,0 @@
|
|||||||
inherit: true
|
|
||||||
|
|
||||||
checks:
|
|
||||||
php:
|
|
||||||
verify_property_names: true
|
|
||||||
verify_argument_usable_as_reference: true
|
|
||||||
verify_access_scope_valid: true
|
|
||||||
useless_calls: true
|
|
||||||
use_statement_alias_conflict: true
|
|
||||||
variable_existence: true
|
|
||||||
unused_variables: true
|
|
||||||
unused_properties: true
|
|
||||||
unused_parameters: true
|
|
||||||
unused_methods: true
|
|
||||||
unreachable_code: true
|
|
||||||
too_many_arguments: true
|
|
||||||
sql_injection_vulnerabilities: true
|
|
||||||
simplify_boolean_return: true
|
|
||||||
side_effects_or_types: true
|
|
||||||
security_vulnerabilities: true
|
|
||||||
return_doc_comments: true
|
|
||||||
return_doc_comment_if_not_inferrable: true
|
|
||||||
require_scope_for_properties: true
|
|
||||||
require_scope_for_methods: true
|
|
||||||
require_php_tag_first: true
|
|
||||||
psr2_switch_declaration: true
|
|
||||||
psr2_class_declaration: true
|
|
||||||
property_assignments: true
|
|
||||||
prefer_while_loop_over_for_loop: true
|
|
||||||
precedence_mistakes: true
|
|
||||||
precedence_in_conditions: true
|
|
||||||
phpunit_assertions: true
|
|
||||||
php5_style_constructor: true
|
|
||||||
parse_doc_comments: true
|
|
||||||
parameter_non_unique: true
|
|
||||||
parameter_doc_comments: true
|
|
||||||
param_doc_comment_if_not_inferrable: true
|
|
||||||
optional_parameters_at_the_end: true
|
|
||||||
one_class_per_file: true
|
|
||||||
no_unnecessary_if: true
|
|
||||||
no_trailing_whitespace: true
|
|
||||||
no_property_on_interface: true
|
|
||||||
no_non_implemented_abstract_methods: true
|
|
||||||
no_error_suppression: true
|
|
||||||
no_duplicate_arguments: true
|
|
||||||
no_commented_out_code: true
|
|
||||||
newline_at_end_of_file: true
|
|
||||||
missing_arguments: true
|
|
||||||
method_calls_on_non_object: true
|
|
||||||
instanceof_class_exists: true
|
|
||||||
foreach_traversable: true
|
|
||||||
fix_line_ending: true
|
|
||||||
fix_doc_comments: true
|
|
||||||
duplication: true
|
|
||||||
deprecated_code_usage: true
|
|
||||||
deadlock_detection_in_loops: true
|
|
||||||
code_rating: true
|
|
||||||
closure_use_not_conflicting: true
|
|
||||||
catch_class_exists: true
|
|
||||||
blank_line_after_namespace_declaration: false
|
|
||||||
avoid_multiple_statements_on_same_line: true
|
|
||||||
avoid_duplicate_types: true
|
|
||||||
avoid_conflicting_incrementers: true
|
|
||||||
avoid_closing_tag: true
|
|
||||||
assignment_of_null_return: true
|
|
||||||
argument_type_checks: true
|
|
||||||
|
|
||||||
filter:
|
|
||||||
paths: [src/*, tests/*]
|
|
29
.travis.yml
29
.travis.yml
@ -1,29 +0,0 @@
|
|||||||
language: php
|
|
||||||
dist: trusty
|
|
||||||
|
|
||||||
matrix:
|
|
||||||
include:
|
|
||||||
- php: 5.6
|
|
||||||
env: DB=MYSQL PHPCS_TEST=1 PHPUNIT_TEST=1
|
|
||||||
- php: 7.0
|
|
||||||
env: DB=PGSQL PHPUNIT_TEST=1
|
|
||||||
- php: 7.1
|
|
||||||
env: DB=MYSQL PHPUNIT_COVERAGE_TEST=1
|
|
||||||
- php: 7.2
|
|
||||||
env: DB=MYSQL PHPUNIT_TEST=1
|
|
||||||
|
|
||||||
before_script:
|
|
||||||
- phpenv rehash
|
|
||||||
- phpenv config-rm xdebug.ini
|
|
||||||
- composer validate
|
|
||||||
- composer require silverstripe/installer:4.0.x-dev ezyang/htmlpurifier:* --no-update
|
|
||||||
- if [[ $DB == PGSQL ]]; then composer require --no-update silverstripe/postgresql:2.0.x-dev; fi
|
|
||||||
- composer install --prefer-dist --no-interaction --no-progress --no-suggest --optimize-autoloader --verbose --profile
|
|
||||||
|
|
||||||
script:
|
|
||||||
- if [[ $PHPUNIT_TEST ]]; then vendor/bin/phpunit; fi
|
|
||||||
- if [[ $PHPUNIT_COVERAGE_TEST ]]; then phpdbg -qrr vendor/bin/phpunit --coverage-clover=coverage.xml; fi
|
|
||||||
- if [[ $PHPCS_TEST ]]; then vendor/bin/phpcs src/ tests/ *.php; fi
|
|
||||||
|
|
||||||
after_success:
|
|
||||||
- if [[ $PHPUNIT_COVERAGE_TEST ]]; then bash <(curl -s https://codecov.io/bash) -f coverage.xml; fi
|
|
@ -1,8 +1,9 @@
|
|||||||
[main]
|
[main]
|
||||||
host = https://www.transifex.com
|
host = https://www.transifex.com
|
||||||
|
|
||||||
[silverstripe-comments.master]
|
[o:silverstripe:p:silverstripe-comments:r:master]
|
||||||
file_filter = lang/<lang>.yml
|
file_filter = lang/<lang>.yml
|
||||||
source_file = lang/en.yml
|
source_file = lang/en.yml
|
||||||
source_lang = en
|
source_lang = en
|
||||||
type = YML
|
type = YML
|
||||||
|
|
||||||
|
15
README.md
15
README.md
@ -1,20 +1,19 @@
|
|||||||
# Comments
|
# Comments
|
||||||
|
|
||||||
[![Build Status](https://img.shields.io/travis/silverstripe/silverstripe-comments.svg)](http://travis-ci.org/silverstripe/silverstripe-comments)
|
[![CI](https://github.com/silverstripe/silverstripe-comments/actions/workflows/ci.yml/badge.svg)](https://github.com/silverstripe/silverstripe-comments/actions/workflows/ci.yml)
|
||||||
[![Scrutinizer Code Quality](https://img.shields.io/scrutinizer/g/silverstripe/silverstripe-comments.svg)](https://scrutinizer-ci.com/g/silverstripe/silverstripe-comments/?branch=master)
|
[![Silverstripe supported module](https://img.shields.io/badge/silverstripe-supported-0071C4.svg)](https://www.silverstripe.org/software/addons/silverstripe-commercially-supported-module-list/)
|
||||||
[![Code Coverage](https://img.shields.io/codecov/c/github/silverstripe/silverstripe-comments.svg)](https://codecov.io/gh/silverstripe/silverstripe-comments)
|
|
||||||
|
|
||||||
## Introduction
|
## Introduction
|
||||||
|
|
||||||
This module provides commenting functionality for Pages and other DataObjects on your SilverStripe site.
|
This module provides commenting functionality for Pages and other DataObjects on your Silverstripe site.
|
||||||
|
|
||||||
For more documentation about the module see the provided documentation located inside the docs folder.
|
For more documentation about the module see the provided documentation located inside the docs folder.
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
* SilverStripe ^4.0
|
* Silverstripe ^4.0
|
||||||
|
|
||||||
**Note:** This branch is compatible with SilverStripe 4. For a SilverStripe 3 release, please see the 2.x release line.
|
**Note:** This branch is compatible with Silverstripe 4. For a Silverstripe 3 release, please see the 2.x release line.
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
@ -26,7 +25,7 @@ See docs/en/Installing.md
|
|||||||
|
|
||||||
## Related
|
## Related
|
||||||
|
|
||||||
* [silverstripe/silverstripe-comments-notifications](https://github.com/silverstripe/silverstripe-comments-notifications): Comment admin email notifications module
|
* [silverstripe/comment-notifications](https://github.com/silverstripe/comment-notifications): Comment admin email notifications module
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
@ -40,4 +39,4 @@ and any new translations will be merged back to the project source code.
|
|||||||
Please use https://www.transifex.com/projects/p/silverstripe-comments/ to contribute translations,
|
Please use https://www.transifex.com/projects/p/silverstripe-comments/ to contribute translations,
|
||||||
rather than sending pull requests with YAML files.
|
rather than sending pull requests with YAML files.
|
||||||
|
|
||||||
See the ["i18n" topic](http://doc.silverstripe.org/framework/en/trunk/topics/i18n) on doc.silverstripe.org for more details.
|
See the ["i18n" topic](https://docs.silverstripe.org/en/4/developer_guides/i18n/) on doc.silverstripe.org for more details.
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
\SilverStripe\Dev\Deprecation::notification_version('3.0', 'comments');
|
|
@ -6,6 +6,6 @@ only:
|
|||||||
---
|
---
|
||||||
SilverStripe\CMS\Model\SiteTree:
|
SilverStripe\CMS\Model\SiteTree:
|
||||||
extensions:
|
extensions:
|
||||||
- SilverStripe\Comments\Extensions\CommentsExtension
|
comments: SilverStripe\Comments\Extensions\CommentsExtension
|
||||||
comments:
|
comments:
|
||||||
enabled_cms: true
|
enabled_cms: true
|
||||||
|
3
_config/legacy.yml
Normal file
3
_config/legacy.yml
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
SilverStripe\ORM\DatabaseAdmin:
|
||||||
|
classname_value_remapping:
|
||||||
|
Comment: SilverStripe\Comments\Model\Comment
|
1
client/dist/js/CommentsInterface.js
vendored
Normal file
1
client/dist/js/CommentsInterface.js
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
!function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s="./client/src/legacy/CommentsInterface.js")}({"./client/src/legacy/CommentsInterface.js":function(e,t,n){"use strict";(function(e){!function(e){e(function(){e.validator.methods.url=function(e,t){return this.optional(t)||/^(?:(?:(?:https?|ftp):)?\/\/)?(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[\/?#]\S*)?$/i.test(e)},e(".comments-holder-container form").each(function(){e(this).validate({ignore:":hidden",errorClass:"required",errorElement:"span",invalidHandler:function(t,n){e("html, body").animate({scrollTop:e(n.errorList[0].element).offset().top-30},200)},errorPlacement:function(e,t){e.addClass("message").insertAfter(t)}})}),e(".comment").children(".info").not(window.document.location.hash).nextAll(".comment-replies-container").children(".comment-reply-form-holder").hide(),e(".comments-holder").on("click",".comment-reply-link",function(t){var n=e(".comment-reply-form-holder"),r="#"+e(this).attr("aria-controls"),o=e(r).closest(".comment-reply-form-holder");e(this).attr("aria-expanded",function(e,t){return"true"==t?"false":"true"}),t.preventDefault(),o.is(":visible")?n.slideUp():(n.not(o).slideUp(),o.slideDown())}),e(".comments-holder .comments-list").on("click","div.comment-moderation-options a",function(t){t.stopPropagation();var n=e(this);if(n.hasClass("delete")){var r=ss.i18n._t("CommentsInterface_singlecomment_ss.DELETE_CONFIRMATION");if(!window.confirm(r))return t.preventDefault(),!1}var o=n.parents(".comment:first");e.ajax({url:e(this).attr("href"),cache:!1,success:function(t){n.hasClass("ham")?(o.html(t),o.removeClass("spam")):n.hasClass("approve")?(o.html(t),o.removeClass("unmoderated")):n.hasClass("delete")?o.fadeOut(1e3,function(){o.remove(),0===e(".comments-holder .comments-list").children().length&&e(".no-comments-yet").show()}):n.hasClass("spam")&&o.html(t).addClass("spam")},failure:function(e){var t=ss.i18n._t("CommentsInterface_singlecomment_ss.AJAX_ERROR");alert(t)}}),t.preventDefault()})})}(e)}).call(t,n(0))},0:function(e,t){e.exports=jQuery}});
|
4
client/dist/js/jquery-validation/additional-methods.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/additional-methods.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","./jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return function(){function b(a){return a.replace(/<.[^<>]*?>/g," ").replace(/ | /gi," ").replace(/[.(),;:!?%#$'\"_+=\/\-“”’]*/g,"")}a.validator.addMethod("maxWords",function(a,c,d){return this.optional(c)||b(a).match(/\b\w+\b/g).length<=d},a.validator.format("Please enter {0} words or less.")),a.validator.addMethod("minWords",function(a,c,d){return this.optional(c)||b(a).match(/\b\w+\b/g).length>=d},a.validator.format("Please enter at least {0} words.")),a.validator.addMethod("rangeWords",function(a,c,d){var e=b(a),f=/\b\w+\b/g;return this.optional(c)||e.match(f).length>=d[0]&&e.match(f).length<=d[1]},a.validator.format("Please enter between {0} and {1} words."))}(),a.validator.addMethod("abaRoutingNumber",function(a){var b=0,c=a.split(""),d=c.length;if(9!==d)return!1;for(var e=0;e<d;e+=3)b+=3*parseInt(c[e],10)+7*parseInt(c[e+1],10)+parseInt(c[e+2],10);return 0!==b&&b%10===0},"Please enter a valid routing number."),a.validator.addMethod("accept",function(b,c,d){var e,f,g,h="string"==typeof d?d.replace(/\s/g,""):"image/*",i=this.optional(c);if(i)return i;if("file"===a(c).attr("type")&&(h=h.replace(/[\-\[\]\/\{\}\(\)\+\?\.\\\^\$\|]/g,"\\$&").replace(/,/g,"|").replace(/\/\*/g,"/.*"),c.files&&c.files.length))for(g=new RegExp(".?("+h+")$","i"),e=0;e<c.files.length;e++)if(f=c.files[e],!f.type.match(g))return!1;return!0},a.validator.format("Please enter a value with a valid mimetype.")),a.validator.addMethod("alphanumeric",function(a,b){return this.optional(b)||/^\w+$/i.test(a)},"Letters, numbers, and underscores only please"),a.validator.addMethod("bankaccountNL",function(a,b){if(this.optional(b))return!0;if(!/^[0-9]{9}|([0-9]{2} ){3}[0-9]{3}$/.test(a))return!1;var c,d,e,f=a.replace(/ /g,""),g=0,h=f.length;for(c=0;c<h;c++)d=h-c,e=f.substring(c,c+1),g+=d*e;return g%11===0},"Please specify a valid bank account number"),a.validator.addMethod("bankorgiroaccountNL",function(b,c){return this.optional(c)||a.validator.methods.bankaccountNL.call(this,b,c)||a.validator.methods.giroaccountNL.call(this,b,c)},"Please specify a valid bank or giro account number"),a.validator.addMethod("bic",function(a,b){return this.optional(b)||/^([A-Z]{6}[A-Z2-9][A-NP-Z1-9])(X{3}|[A-WY-Z0-9][A-Z0-9]{2})?$/.test(a.toUpperCase())},"Please specify a valid BIC code"),a.validator.addMethod("cifES",function(a,b){"use strict";function c(a){return a%2===0}if(this.optional(b))return!0;var d,e,f,g,h=new RegExp(/^([ABCDEFGHJKLMNPQRSUVW])(\d{7})([0-9A-J])$/gi),i=a.substring(0,1),j=a.substring(1,8),k=a.substring(8,9),l=0,m=0,n=0;if(9!==a.length||!h.test(a))return!1;for(d=0;d<j.length;d++)e=parseInt(j[d],10),c(d)?(e*=2,n+=e<10?e:e-9):m+=e;return l=m+n,f=(10-l.toString().substr(-1)).toString(),f=parseInt(f,10)>9?"0":f,g="JABCDEFGHI".substr(f,1).toString(),i.match(/[ABEH]/)?k===f:i.match(/[KPQS]/)?k===g:k===f||k===g},"Please specify a valid CIF number."),a.validator.addMethod("cnhBR",function(a){if(a=a.replace(/([~!@#$%^&*()_+=`{}\[\]\-|\\:;'<>,.\/? ])+/g,""),11!==a.length)return!1;var b,c,d,e,f,g,h=0,i=0;if(b=a.charAt(0),new Array(12).join(b)===a)return!1;for(e=0,f=9,g=0;e<9;++e,--f)h+=+(a.charAt(e)*f);for(c=h%11,c>=10&&(c=0,i=2),h=0,e=0,f=1,g=0;e<9;++e,++f)h+=+(a.charAt(e)*f);return d=h%11,d>=10?d=0:d-=i,String(c).concat(d)===a.substr(-2)},"Please specify a valid CNH number"),a.validator.addMethod("cnpjBR",function(a,b){"use strict";if(this.optional(b))return!0;if(a=a.replace(/[^\d]+/g,""),14!==a.length)return!1;if("00000000000000"===a||"11111111111111"===a||"22222222222222"===a||"33333333333333"===a||"44444444444444"===a||"55555555555555"===a||"66666666666666"===a||"77777777777777"===a||"88888888888888"===a||"99999999999999"===a)return!1;for(var c=a.length-2,d=a.substring(0,c),e=a.substring(c),f=0,g=c-7,h=c;h>=1;h--)f+=d.charAt(c-h)*g--,g<2&&(g=9);var i=f%11<2?0:11-f%11;if(i!==parseInt(e.charAt(0),10))return!1;c+=1,d=a.substring(0,c),f=0,g=c-7;for(var j=c;j>=1;j--)f+=d.charAt(c-j)*g--,g<2&&(g=9);return i=f%11<2?0:11-f%11,i===parseInt(e.charAt(1),10)},"Please specify a CNPJ value number"),a.validator.addMethod("cpfBR",function(a,b){"use strict";if(this.optional(b))return!0;if(a=a.replace(/([~!@#$%^&*()_+=`{}\[\]\-|\\:;'<>,.\/? ])+/g,""),11!==a.length)return!1;var c,d,e,f,g=0;if(c=parseInt(a.substring(9,10),10),d=parseInt(a.substring(10,11),10),e=function(a,b){var c=10*a%11;return 10!==c&&11!==c||(c=0),c===b},""===a||"00000000000"===a||"11111111111"===a||"22222222222"===a||"33333333333"===a||"44444444444"===a||"55555555555"===a||"66666666666"===a||"77777777777"===a||"88888888888"===a||"99999999999"===a)return!1;for(f=1;f<=9;f++)g+=parseInt(a.substring(f-1,f),10)*(11-f);if(e(g,c)){for(g=0,f=1;f<=10;f++)g+=parseInt(a.substring(f-1,f),10)*(12-f);return e(g,d)}return!1},"Please specify a valid CPF number"),a.validator.addMethod("creditcard",function(a,b){if(this.optional(b))return"dependency-mismatch";if(/[^0-9 \-]+/.test(a))return!1;var c,d,e=0,f=0,g=!1;if(a=a.replace(/\D/g,""),a.length<13||a.length>19)return!1;for(c=a.length-1;c>=0;c--)d=a.charAt(c),f=parseInt(d,10),g&&(f*=2)>9&&(f-=9),e+=f,g=!g;return e%10===0},"Please enter a valid credit card number."),a.validator.addMethod("creditcardtypes",function(a,b,c){if(/[^0-9\-]+/.test(a))return!1;a=a.replace(/\D/g,"");var d=0;return c.mastercard&&(d|=1),c.visa&&(d|=2),c.amex&&(d|=4),c.dinersclub&&(d|=8),c.enroute&&(d|=16),c.discover&&(d|=32),c.jcb&&(d|=64),c.unknown&&(d|=128),c.all&&(d=255),1&d&&(/^(5[12345])/.test(a)||/^(2[234567])/.test(a))?16===a.length:2&d&&/^(4)/.test(a)?16===a.length:4&d&&/^(3[47])/.test(a)?15===a.length:8&d&&/^(3(0[012345]|[68]))/.test(a)?14===a.length:16&d&&/^(2(014|149))/.test(a)?15===a.length:32&d&&/^(6011)/.test(a)?16===a.length:64&d&&/^(3)/.test(a)?16===a.length:64&d&&/^(2131|1800)/.test(a)?15===a.length:!!(128&d)},"Please enter a valid credit card number."),a.validator.addMethod("currency",function(a,b,c){var d,e="string"==typeof c,f=e?c:c[0],g=!!e||c[1];return f=f.replace(/,/g,""),f=g?f+"]":f+"]?",d="^["+f+"([1-9]{1}[0-9]{0,2}(\\,[0-9]{3})*(\\.[0-9]{0,2})?|[1-9]{1}[0-9]{0,}(\\.[0-9]{0,2})?|0(\\.[0-9]{0,2})?|(\\.[0-9]{1,2})?)$",d=new RegExp(d),this.optional(b)||d.test(a)},"Please specify a valid currency"),a.validator.addMethod("dateFA",function(a,b){return this.optional(b)||/^[1-4]\d{3}\/((0?[1-6]\/((3[0-1])|([1-2][0-9])|(0?[1-9])))|((1[0-2]|(0?[7-9]))\/(30|([1-2][0-9])|(0?[1-9]))))$/.test(a)},a.validator.messages.date),a.validator.addMethod("dateITA",function(a,b){var c,d,e,f,g,h=!1,i=/^\d{1,2}\/\d{1,2}\/\d{4}$/;return i.test(a)?(c=a.split("/"),d=parseInt(c[0],10),e=parseInt(c[1],10),f=parseInt(c[2],10),g=new Date(Date.UTC(f,e-1,d,12,0,0,0)),h=g.getUTCFullYear()===f&&g.getUTCMonth()===e-1&&g.getUTCDate()===d):h=!1,this.optional(b)||h},a.validator.messages.date),a.validator.addMethod("dateNL",function(a,b){return this.optional(b)||/^(0?[1-9]|[12]\d|3[01])[\.\/\-](0?[1-9]|1[012])[\.\/\-]([12]\d)?(\d\d)$/.test(a)},a.validator.messages.date),a.validator.addMethod("extension",function(a,b,c){return c="string"==typeof c?c.replace(/,/g,"|"):"png|jpe?g|gif",this.optional(b)||a.match(new RegExp("\\.("+c+")$","i"))},a.validator.format("Please enter a value with a valid extension.")),a.validator.addMethod("giroaccountNL",function(a,b){return this.optional(b)||/^[0-9]{1,7}$/.test(a)},"Please specify a valid giro account number"),a.validator.addMethod("greaterThan",function(b,c,d){var e=a(d);return this.settings.onfocusout&&e.not(".validate-greaterThan-blur").length&&e.addClass("validate-greaterThan-blur").on("blur.validate-greaterThan",function(){a(c).valid()}),b>e.val()},"Please enter a greater value."),a.validator.addMethod("greaterThanEqual",function(b,c,d){var e=a(d);return this.settings.onfocusout&&e.not(".validate-greaterThanEqual-blur").length&&e.addClass("validate-greaterThanEqual-blur").on("blur.validate-greaterThanEqual",function(){a(c).valid()}),b>=e.val()},"Please enter a greater value."),a.validator.addMethod("iban",function(a,b){if(this.optional(b))return!0;var c,d,e,f,g,h,i,j,k,l=a.replace(/ /g,"").toUpperCase(),m="",n=!0,o="",p="",q=5;if(l.length<q)return!1;if(c=l.substring(0,2),h={AL:"\\d{8}[\\dA-Z]{16}",AD:"\\d{8}[\\dA-Z]{12}",AT:"\\d{16}",AZ:"[\\dA-Z]{4}\\d{20}",BE:"\\d{12}",BH:"[A-Z]{4}[\\dA-Z]{14}",BA:"\\d{16}",BR:"\\d{23}[A-Z][\\dA-Z]",BG:"[A-Z]{4}\\d{6}[\\dA-Z]{8}",CR:"\\d{17}",HR:"\\d{17}",CY:"\\d{8}[\\dA-Z]{16}",CZ:"\\d{20}",DK:"\\d{14}",DO:"[A-Z]{4}\\d{20}",EE:"\\d{16}",FO:"\\d{14}",FI:"\\d{14}",FR:"\\d{10}[\\dA-Z]{11}\\d{2}",GE:"[\\dA-Z]{2}\\d{16}",DE:"\\d{18}",GI:"[A-Z]{4}[\\dA-Z]{15}",GR:"\\d{7}[\\dA-Z]{16}",GL:"\\d{14}",GT:"[\\dA-Z]{4}[\\dA-Z]{20}",HU:"\\d{24}",IS:"\\d{22}",IE:"[\\dA-Z]{4}\\d{14}",IL:"\\d{19}",IT:"[A-Z]\\d{10}[\\dA-Z]{12}",KZ:"\\d{3}[\\dA-Z]{13}",KW:"[A-Z]{4}[\\dA-Z]{22}",LV:"[A-Z]{4}[\\dA-Z]{13}",LB:"\\d{4}[\\dA-Z]{20}",LI:"\\d{5}[\\dA-Z]{12}",LT:"\\d{16}",LU:"\\d{3}[\\dA-Z]{13}",MK:"\\d{3}[\\dA-Z]{10}\\d{2}",MT:"[A-Z]{4}\\d{5}[\\dA-Z]{18}",MR:"\\d{23}",MU:"[A-Z]{4}\\d{19}[A-Z]{3}",MC:"\\d{10}[\\dA-Z]{11}\\d{2}",MD:"[\\dA-Z]{2}\\d{18}",ME:"\\d{18}",NL:"[A-Z]{4}\\d{10}",NO:"\\d{11}",PK:"[\\dA-Z]{4}\\d{16}",PS:"[\\dA-Z]{4}\\d{21}",PL:"\\d{24}",PT:"\\d{21}",RO:"[A-Z]{4}[\\dA-Z]{16}",SM:"[A-Z]\\d{10}[\\dA-Z]{12}",SA:"\\d{2}[\\dA-Z]{18}",RS:"\\d{18}",SK:"\\d{20}",SI:"\\d{15}",ES:"\\d{20}",SE:"\\d{20}",CH:"\\d{5}[\\dA-Z]{12}",TN:"\\d{20}",TR:"\\d{5}[\\dA-Z]{17}",AE:"\\d{3}\\d{16}",GB:"[A-Z]{4}\\d{14}",VG:"[\\dA-Z]{4}\\d{16}"},g=h[c],"undefined"!=typeof g&&(i=new RegExp("^[A-Z]{2}\\d{2}"+g+"$",""),!i.test(l)))return!1;for(d=l.substring(4,l.length)+l.substring(0,4),j=0;j<d.length;j++)e=d.charAt(j),"0"!==e&&(n=!1),n||(m+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".indexOf(e));for(k=0;k<m.length;k++)f=m.charAt(k),p=""+o+f,o=p%97;return 1===o},"Please specify a valid IBAN"),a.validator.addMethod("integer",function(a,b){return this.optional(b)||/^-?\d+$/.test(a)},"A positive or negative non-decimal number please"),a.validator.addMethod("ipv4",function(a,b){return this.optional(b)||/^(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)$/i.test(a)},"Please enter a valid IP v4 address."),a.validator.addMethod("ipv6",function(a,b){return this.optional(b)||/^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i.test(a)},"Please enter a valid IP v6 address."),a.validator.addMethod("lessThan",function(b,c,d){var e=a(d);return this.settings.onfocusout&&e.not(".validate-lessThan-blur").length&&e.addClass("validate-lessThan-blur").on("blur.validate-lessThan",function(){a(c).valid()}),b<e.val()},"Please enter a lesser value."),a.validator.addMethod("lessThanEqual",function(b,c,d){var e=a(d);return this.settings.onfocusout&&e.not(".validate-lessThanEqual-blur").length&&e.addClass("validate-lessThanEqual-blur").on("blur.validate-lessThanEqual",function(){a(c).valid()}),b<=e.val()},"Please enter a lesser value."),a.validator.addMethod("lettersonly",function(a,b){return this.optional(b)||/^[a-z]+$/i.test(a)},"Letters only please"),a.validator.addMethod("letterswithbasicpunc",function(a,b){return this.optional(b)||/^[a-z\-.,()'"\s]+$/i.test(a)},"Letters or punctuation only please"),a.validator.addMethod("maxfiles",function(b,c,d){return!!this.optional(c)||!("file"===a(c).attr("type")&&c.files&&c.files.length>d)},a.validator.format("Please select no more than {0} files.")),a.validator.addMethod("maxsize",function(b,c,d){if(this.optional(c))return!0;if("file"===a(c).attr("type")&&c.files&&c.files.length)for(var e=0;e<c.files.length;e++)if(c.files[e].size>d)return!1;return!0},a.validator.format("File size must not exceed {0} bytes each.")),a.validator.addMethod("maxsizetotal",function(b,c,d){if(this.optional(c))return!0;if("file"===a(c).attr("type")&&c.files&&c.files.length)for(var e=0,f=0;f<c.files.length;f++)if(e+=c.files[f].size,e>d)return!1;return!0},a.validator.format("Total size of all files must not exceed {0} bytes.")),a.validator.addMethod("mobileNL",function(a,b){return this.optional(b)||/^((\+|00(\s|\s?\-\s?)?)31(\s|\s?\-\s?)?(\(0\)[\-\s]?)?|0)6((\s|\s?\-\s?)?[0-9]){8}$/.test(a)},"Please specify a valid mobile number"),a.validator.addMethod("mobileRU",function(a,b){var c=a.replace(/\(|\)|\s+|-/g,"");return this.optional(b)||c.length>9&&/^((\+7|7|8)+([0-9]){10})$/.test(c)},"Please specify a valid mobile number"),a.validator.addMethod("mobileUK",function(a,b){return a=a.replace(/\(|\)|\s+|-/g,""),this.optional(b)||a.length>9&&a.match(/^(?:(?:(?:00\s?|\+)44\s?|0)7(?:[1345789]\d{2}|624)\s?\d{3}\s?\d{3})$/)},"Please specify a valid mobile number"),a.validator.addMethod("netmask",function(a,b){return this.optional(b)||/^(254|252|248|240|224|192|128)\.0\.0\.0|255\.(254|252|248|240|224|192|128|0)\.0\.0|255\.255\.(254|252|248|240|224|192|128|0)\.0|255\.255\.255\.(254|252|248|240|224|192|128|0)/i.test(a)},"Please enter a valid netmask."),a.validator.addMethod("nieES",function(a,b){"use strict";if(this.optional(b))return!0;var c,d=new RegExp(/^[MXYZ]{1}[0-9]{7,8}[TRWAGMYFPDXBNJZSQVHLCKET]{1}$/gi),e="TRWAGMYFPDXBNJZSQVHLCKET",f=a.substr(a.length-1).toUpperCase();return a=a.toString().toUpperCase(),!(a.length>10||a.length<9||!d.test(a))&&(a=a.replace(/^[X]/,"0").replace(/^[Y]/,"1").replace(/^[Z]/,"2"),c=9===a.length?a.substr(0,8):a.substr(0,9),e.charAt(parseInt(c,10)%23)===f)},"Please specify a valid NIE number."),a.validator.addMethod("nifES",function(a,b){"use strict";return!!this.optional(b)||(a=a.toUpperCase(),!!a.match("((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)")&&(/^[0-9]{8}[A-Z]{1}$/.test(a)?"TRWAGMYFPDXBNJZSQVHLCKE".charAt(a.substring(8,0)%23)===a.charAt(8):!!/^[KLM]{1}/.test(a)&&a[8]==="TRWAGMYFPDXBNJZSQVHLCKE".charAt(a.substring(8,1)%23)))},"Please specify a valid NIF number."),a.validator.addMethod("nipPL",function(a){"use strict";if(a=a.replace(/[^0-9]/g,""),10!==a.length)return!1;for(var b=[6,5,7,2,3,4,5,6,7],c=0,d=0;d<9;d++)c+=b[d]*a[d];var e=c%11,f=10===e?0:e;return f===parseInt(a[9],10)},"Please specify a valid NIP number."),a.validator.addMethod("nisBR",function(a){var b,c,d,e,f,g=0;if(a=a.replace(/([~!@#$%^&*()_+=`{}\[\]\-|\\:;'<>,.\/? ])+/g,""),11!==a.length)return!1;for(c=parseInt(a.substring(10,11),10),b=parseInt(a.substring(0,10),10),e=2;e<12;e++)f=e,10===e&&(f=2),11===e&&(f=3),g+=b%10*f,b=parseInt(b/10,10);return d=g%11,d=d>1?11-d:0,c===d},"Please specify a valid NIS/PIS number"),a.validator.addMethod("notEqualTo",function(b,c,d){return this.optional(c)||!a.validator.methods.equalTo.call(this,b,c,d)},"Please enter a different value, values must not be the same."),a.validator.addMethod("nowhitespace",function(a,b){return this.optional(b)||/^\S+$/i.test(a)},"No white space please"),a.validator.addMethod("pattern",function(a,b,c){return!!this.optional(b)||("string"==typeof c&&(c=new RegExp("^(?:"+c+")$")),c.test(a))},"Invalid format."),a.validator.addMethod("phoneNL",function(a,b){return this.optional(b)||/^((\+|00(\s|\s?\-\s?)?)31(\s|\s?\-\s?)?(\(0\)[\-\s]?)?|0)[1-9]((\s|\s?\-\s?)?[0-9]){8}$/.test(a)},"Please specify a valid phone number."),a.validator.addMethod("phonePL",function(a,b){a=a.replace(/\s+/g,"");var c=/^(?:(?:(?:\+|00)?48)|(?:\(\+?48\)))?(?:1[2-8]|2[2-69]|3[2-49]|4[1-68]|5[0-9]|6[0-35-9]|[7-8][1-9]|9[145])\d{7}$/;return this.optional(b)||c.test(a)},"Please specify a valid phone number"),a.validator.addMethod("phonesUK",function(a,b){return a=a.replace(/\(|\)|\s+|-/g,""),this.optional(b)||a.length>9&&a.match(/^(?:(?:(?:00\s?|\+)44\s?|0)(?:1\d{8,9}|[23]\d{9}|7(?:[1345789]\d{8}|624\d{6})))$/)},"Please specify a valid uk phone number"),a.validator.addMethod("phoneUK",function(a,b){return a=a.replace(/\(|\)|\s+|-/g,""),this.optional(b)||a.length>9&&a.match(/^(?:(?:(?:00\s?|\+)44\s?)|(?:\(?0))(?:\d{2}\)?\s?\d{4}\s?\d{4}|\d{3}\)?\s?\d{3}\s?\d{3,4}|\d{4}\)?\s?(?:\d{5}|\d{3}\s?\d{3})|\d{5}\)?\s?\d{4,5})$/)},"Please specify a valid phone number"),a.validator.addMethod("phoneUS",function(a,b){return a=a.replace(/\s+/g,""),this.optional(b)||a.length>9&&a.match(/^(\+?1-?)?(\([2-9]([02-9]\d|1[02-9])\)|[2-9]([02-9]\d|1[02-9]))-?[2-9]\d{2}-?\d{4}$/)},"Please specify a valid phone number"),a.validator.addMethod("postalcodeBR",function(a,b){return this.optional(b)||/^\d{2}.\d{3}-\d{3}?$|^\d{5}-?\d{3}?$/.test(a)},"Informe um CEP válido."),a.validator.addMethod("postalCodeCA",function(a,b){return this.optional(b)||/^[ABCEGHJKLMNPRSTVXY]\d[ABCEGHJKLMNPRSTVWXYZ] *\d[ABCEGHJKLMNPRSTVWXYZ]\d$/i.test(a)},"Please specify a valid postal code"),a.validator.addMethod("postalcodeIT",function(a,b){return this.optional(b)||/^\d{5}$/.test(a)},"Please specify a valid postal code"),a.validator.addMethod("postalcodeNL",function(a,b){return this.optional(b)||/^[1-9][0-9]{3}\s?[a-zA-Z]{2}$/.test(a)},"Please specify a valid postal code"),a.validator.addMethod("postcodeUK",function(a,b){return this.optional(b)||/^((([A-PR-UWYZ][0-9])|([A-PR-UWYZ][0-9][0-9])|([A-PR-UWYZ][A-HK-Y][0-9])|([A-PR-UWYZ][A-HK-Y][0-9][0-9])|([A-PR-UWYZ][0-9][A-HJKSTUW])|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY]))\s?([0-9][ABD-HJLNP-UW-Z]{2})|(GIR)\s?(0AA))$/i.test(a)},"Please specify a valid UK postcode"),a.validator.addMethod("require_from_group",function(b,c,d){var e=a(d[1],c.form),f=e.eq(0),g=f.data("valid_req_grp")?f.data("valid_req_grp"):a.extend({},this),h=e.filter(function(){return g.elementValue(this)}).length>=d[0];return f.data("valid_req_grp",g),a(c).data("being_validated")||(e.data("being_validated",!0),e.each(function(){g.element(this)}),e.data("being_validated",!1)),h},a.validator.format("Please fill at least {0} of these fields.")),a.validator.addMethod("skip_or_fill_minimum",function(b,c,d){var e=a(d[1],c.form),f=e.eq(0),g=f.data("valid_skip")?f.data("valid_skip"):a.extend({},this),h=e.filter(function(){return g.elementValue(this)}).length,i=0===h||h>=d[0];return f.data("valid_skip",g),a(c).data("being_validated")||(e.data("being_validated",!0),e.each(function(){g.element(this)}),e.data("being_validated",!1)),i},a.validator.format("Please either skip these fields or fill at least {0} of them.")),a.validator.addMethod("stateUS",function(a,b,c){var d,e="undefined"==typeof c,f=!e&&"undefined"!=typeof c.caseSensitive&&c.caseSensitive,g=!e&&"undefined"!=typeof c.includeTerritories&&c.includeTerritories,h=!e&&"undefined"!=typeof c.includeMilitary&&c.includeMilitary;return d=g||h?g&&h?"^(A[AEKLPRSZ]|C[AOT]|D[CE]|FL|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEINOPST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$":g?"^(A[KLRSZ]|C[AOT]|D[CE]|FL|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEINOPST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$":"^(A[AEKLPRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])$":"^(A[KLRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])$",d=f?new RegExp(d):new RegExp(d,"i"),this.optional(b)||d.test(a)},"Please specify a valid state"),a.validator.addMethod("strippedminlength",function(b,c,d){return a(b).text().length>=d},a.validator.format("Please enter at least {0} characters")),a.validator.addMethod("time",function(a,b){return this.optional(b)||/^([01]\d|2[0-3]|[0-9])(:[0-5]\d){1,2}$/.test(a)},"Please enter a valid time, between 00:00 and 23:59"),a.validator.addMethod("time12h",function(a,b){return this.optional(b)||/^((0?[1-9]|1[012])(:[0-5]\d){1,2}(\ ?[AP]M))$/i.test(a)},"Please enter a valid time in 12-hour am/pm format"),a.validator.addMethod("url2",function(a,b){return this.optional(b)||/^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)*(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(a)},a.validator.messages.url),a.validator.addMethod("vinUS",function(a){if(17!==a.length)return!1;var b,c,d,e,f,g,h=["A","B","C","D","E","F","G","H","J","K","L","M","N","P","R","S","T","U","V","W","X","Y","Z"],i=[1,2,3,4,5,6,7,8,1,2,3,4,5,7,9,2,3,4,5,6,7,8,9],j=[8,7,6,5,4,3,2,10,0,9,8,7,6,5,4,3,2],k=0;for(b=0;b<17;b++){if(e=j[b],d=a.slice(b,b+1),8===b&&(g=d),isNaN(d)){for(c=0;c<h.length;c++)if(d.toUpperCase()===h[c]){d=i[c],d*=e,isNaN(g)&&8===c&&(g=h[c]);break}}else d*=e;k+=d}return f=k%11,10===f&&(f="X"),f===g},"The specified vehicle identification number (VIN) is invalid."),a.validator.addMethod("zipcodeUS",function(a,b){return this.optional(b)||/^\d{5}(-\d{4})?$/.test(a)},"The specified US ZIP Code is invalid"),a.validator.addMethod("ziprange",function(a,b){return this.optional(b)||/^90[2-5]\d\{2\}-\d{4}$/.test(a)},"Your ZIP-code must be in the range 902xx-xxxx to 905xx-xxxx"),a});
|
4
client/dist/js/jquery-validation/jquery.validate.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/jquery.validate.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){a.extend(a.fn,{validate:function(b){if(!this.length)return void(b&&b.debug&&window.console&&console.warn("Nothing selected, can't validate, returning nothing."));var c=a.data(this[0],"validator");return c?c:(this.attr("novalidate","novalidate"),c=new a.validator(b,this[0]),a.data(this[0],"validator",c),c.settings.onsubmit&&(this.on("click.validate",":submit",function(b){c.submitButton=b.currentTarget,a(this).hasClass("cancel")&&(c.cancelSubmit=!0),void 0!==a(this).attr("formnovalidate")&&(c.cancelSubmit=!0)}),this.on("submit.validate",function(b){function d(){var d,e;return c.submitButton&&(c.settings.submitHandler||c.formSubmitted)&&(d=a("<input type='hidden'/>").attr("name",c.submitButton.name).val(a(c.submitButton).val()).appendTo(c.currentForm)),!(c.settings.submitHandler&&!c.settings.debug)||(e=c.settings.submitHandler.call(c,c.currentForm,b),d&&d.remove(),void 0!==e&&e)}return c.settings.debug&&b.preventDefault(),c.cancelSubmit?(c.cancelSubmit=!1,d()):c.form()?c.pendingRequest?(c.formSubmitted=!0,!1):d():(c.focusInvalid(),!1)})),c)},valid:function(){var b,c,d;return a(this[0]).is("form")?b=this.validate().form():(d=[],b=!0,c=a(this[0].form).validate(),this.each(function(){b=c.element(this)&&b,b||(d=d.concat(c.errorList))}),c.errorList=d),b},rules:function(b,c){var d,e,f,g,h,i,j=this[0],k="undefined"!=typeof this.attr("contenteditable")&&"false"!==this.attr("contenteditable");if(null!=j&&(!j.form&&k&&(j.form=this.closest("form")[0],j.name=this.attr("name")),null!=j.form)){if(b)switch(d=a.data(j.form,"validator").settings,e=d.rules,f=a.validator.staticRules(j),b){case"add":a.extend(f,a.validator.normalizeRule(c)),delete f.messages,e[j.name]=f,c.messages&&(d.messages[j.name]=a.extend(d.messages[j.name],c.messages));break;case"remove":return c?(i={},a.each(c.split(/\s/),function(a,b){i[b]=f[b],delete f[b]}),i):(delete e[j.name],f)}return g=a.validator.normalizeRules(a.extend({},a.validator.classRules(j),a.validator.attributeRules(j),a.validator.dataRules(j),a.validator.staticRules(j)),j),g.required&&(h=g.required,delete g.required,g=a.extend({required:h},g)),g.remote&&(h=g.remote,delete g.remote,g=a.extend(g,{remote:h})),g}}});var b=function(a){return a.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")};a.extend(a.expr.pseudos||a.expr[":"],{blank:function(c){return!b(""+a(c).val())},filled:function(c){var d=a(c).val();return null!==d&&!!b(""+d)},unchecked:function(b){return!a(b).prop("checked")}}),a.validator=function(b,c){this.settings=a.extend(!0,{},a.validator.defaults,b),this.currentForm=c,this.init()},a.validator.format=function(b,c){return 1===arguments.length?function(){var c=a.makeArray(arguments);return c.unshift(b),a.validator.format.apply(this,c)}:void 0===c?b:(arguments.length>2&&c.constructor!==Array&&(c=a.makeArray(arguments).slice(1)),c.constructor!==Array&&(c=[c]),a.each(c,function(a,c){b=b.replace(new RegExp("\\{"+a+"\\}","g"),function(){return c})}),b)},a.extend(a.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",pendingClass:"pending",validClass:"valid",errorElement:"label",focusCleanup:!1,focusInvalid:!0,errorContainer:a([]),errorLabelContainer:a([]),onsubmit:!0,ignore:":hidden",ignoreTitle:!1,onfocusin:function(a){this.lastActive=a,this.settings.focusCleanup&&(this.settings.unhighlight&&this.settings.unhighlight.call(this,a,this.settings.errorClass,this.settings.validClass),this.hideThese(this.errorsFor(a)))},onfocusout:function(a){this.checkable(a)||!(a.name in this.submitted)&&this.optional(a)||this.element(a)},onkeyup:function(b,c){var d=[16,17,18,20,35,36,37,38,39,40,45,144,225];9===c.which&&""===this.elementValue(b)||a.inArray(c.keyCode,d)!==-1||(b.name in this.submitted||b.name in this.invalid)&&this.element(b)},onclick:function(a){a.name in this.submitted?this.element(a):a.parentNode.name in this.submitted&&this.element(a.parentNode)},highlight:function(b,c,d){"radio"===b.type?this.findByName(b.name).addClass(c).removeClass(d):a(b).addClass(c).removeClass(d)},unhighlight:function(b,c,d){"radio"===b.type?this.findByName(b.name).removeClass(c).addClass(d):a(b).removeClass(c).addClass(d)}},setDefaults:function(b){a.extend(a.validator.defaults,b)},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date (ISO).",number:"Please enter a valid number.",digits:"Please enter only digits.",equalTo:"Please enter the same value again.",maxlength:a.validator.format("Please enter no more than {0} characters."),minlength:a.validator.format("Please enter at least {0} characters."),rangelength:a.validator.format("Please enter a value between {0} and {1} characters long."),range:a.validator.format("Please enter a value between {0} and {1}."),max:a.validator.format("Please enter a value less than or equal to {0}."),min:a.validator.format("Please enter a value greater than or equal to {0}."),step:a.validator.format("Please enter a multiple of {0}.")},autoCreateRanges:!1,prototype:{init:function(){function b(b){var c="undefined"!=typeof a(this).attr("contenteditable")&&"false"!==a(this).attr("contenteditable");if(!this.form&&c&&(this.form=a(this).closest("form")[0],this.name=a(this).attr("name")),d===this.form){var e=a.data(this.form,"validator"),f="on"+b.type.replace(/^validate/,""),g=e.settings;g[f]&&!a(this).is(g.ignore)&&g[f].call(e,this,b)}}this.labelContainer=a(this.settings.errorLabelContainer),this.errorContext=this.labelContainer.length&&this.labelContainer||a(this.currentForm),this.containers=a(this.settings.errorContainer).add(this.settings.errorLabelContainer),this.submitted={},this.valueCache={},this.pendingRequest=0,this.pending={},this.invalid={},this.reset();var c,d=this.currentForm,e=this.groups={};a.each(this.settings.groups,function(b,c){"string"==typeof c&&(c=c.split(/\s/)),a.each(c,function(a,c){e[c]=b})}),c=this.settings.rules,a.each(c,function(b,d){c[b]=a.validator.normalizeRule(d)}),a(this.currentForm).on("focusin.validate focusout.validate keyup.validate",":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], [type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], [type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], [type='radio'], [type='checkbox'], [contenteditable], [type='button']",b).on("click.validate","select, option, [type='radio'], [type='checkbox']",b),this.settings.invalidHandler&&a(this.currentForm).on("invalid-form.validate",this.settings.invalidHandler)},form:function(){return this.checkForm(),a.extend(this.submitted,this.errorMap),this.invalid=a.extend({},this.errorMap),this.valid()||a(this.currentForm).triggerHandler("invalid-form",[this]),this.showErrors(),this.valid()},checkForm:function(){this.prepareForm();for(var a=0,b=this.currentElements=this.elements();b[a];a++)this.check(b[a]);return this.valid()},element:function(b){var c,d,e=this.clean(b),f=this.validationTargetFor(e),g=this,h=!0;return void 0===f?delete this.invalid[e.name]:(this.prepareElement(f),this.currentElements=a(f),d=this.groups[f.name],d&&a.each(this.groups,function(a,b){b===d&&a!==f.name&&(e=g.validationTargetFor(g.clean(g.findByName(a))),e&&e.name in g.invalid&&(g.currentElements.push(e),h=g.check(e)&&h))}),c=this.check(f)!==!1,h=h&&c,c?this.invalid[f.name]=!1:this.invalid[f.name]=!0,this.numberOfInvalids()||(this.toHide=this.toHide.add(this.containers)),this.showErrors(),a(b).attr("aria-invalid",!c)),h},showErrors:function(b){if(b){var c=this;a.extend(this.errorMap,b),this.errorList=a.map(this.errorMap,function(a,b){return{message:a,element:c.findByName(b)[0]}}),this.successList=a.grep(this.successList,function(a){return!(a.name in b)})}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors()},resetForm:function(){a.fn.resetForm&&a(this.currentForm).resetForm(),this.invalid={},this.submitted={},this.prepareForm(),this.hideErrors();var b=this.elements().removeData("previousValue").removeAttr("aria-invalid");this.resetElements(b)},resetElements:function(a){var b;if(this.settings.unhighlight)for(b=0;a[b];b++)this.settings.unhighlight.call(this,a[b],this.settings.errorClass,""),this.findByName(a[b].name).removeClass(this.settings.validClass);else a.removeClass(this.settings.errorClass).removeClass(this.settings.validClass)},numberOfInvalids:function(){return this.objectLength(this.invalid)},objectLength:function(a){var b,c=0;for(b in a)void 0!==a[b]&&null!==a[b]&&a[b]!==!1&&c++;return c},hideErrors:function(){this.hideThese(this.toHide)},hideThese:function(a){a.not(this.containers).text(""),this.addWrapper(a).hide()},valid:function(){return 0===this.size()},size:function(){return this.errorList.length},focusInvalid:function(){if(this.settings.focusInvalid)try{a(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").trigger("focus").trigger("focusin")}catch(b){}},findLastActive:function(){var b=this.lastActive;return b&&1===a.grep(this.errorList,function(a){return a.element.name===b.name}).length&&b},elements:function(){var b=this,c={};return a(this.currentForm).find("input, select, textarea, [contenteditable]").not(":submit, :reset, :image, :disabled").not(this.settings.ignore).filter(function(){var d=this.name||a(this).attr("name"),e="undefined"!=typeof a(this).attr("contenteditable")&&"false"!==a(this).attr("contenteditable");return!d&&b.settings.debug&&window.console&&console.error("%o has no name assigned",this),e&&(this.form=a(this).closest("form")[0],this.name=d),this.form===b.currentForm&&(!(d in c||!b.objectLength(a(this).rules()))&&(c[d]=!0,!0))})},clean:function(b){return a(b)[0]},errors:function(){var b=this.settings.errorClass.split(" ").join(".");return a(this.settings.errorElement+"."+b,this.errorContext)},resetInternals:function(){this.successList=[],this.errorList=[],this.errorMap={},this.toShow=a([]),this.toHide=a([])},reset:function(){this.resetInternals(),this.currentElements=a([])},prepareForm:function(){this.reset(),this.toHide=this.errors().add(this.containers)},prepareElement:function(a){this.reset(),this.toHide=this.errorsFor(a)},elementValue:function(b){var c,d,e=a(b),f=b.type,g="undefined"!=typeof e.attr("contenteditable")&&"false"!==e.attr("contenteditable");return"radio"===f||"checkbox"===f?this.findByName(b.name).filter(":checked").val():"number"===f&&"undefined"!=typeof b.validity?b.validity.badInput?"NaN":e.val():(c=g?e.text():e.val(),"file"===f?"C:\\fakepath\\"===c.substr(0,12)?c.substr(12):(d=c.lastIndexOf("/"),d>=0?c.substr(d+1):(d=c.lastIndexOf("\\"),d>=0?c.substr(d+1):c)):"string"==typeof c?c.replace(/\r/g,""):c)},check:function(b){b=this.validationTargetFor(this.clean(b));var c,d,e,f,g=a(b).rules(),h=a.map(g,function(a,b){return b}).length,i=!1,j=this.elementValue(b);"function"==typeof g.normalizer?f=g.normalizer:"function"==typeof this.settings.normalizer&&(f=this.settings.normalizer),f&&(j=f.call(b,j),delete g.normalizer);for(d in g){e={method:d,parameters:g[d]};try{if(c=a.validator.methods[d].call(this,j,b,e.parameters),"dependency-mismatch"===c&&1===h){i=!0;continue}if(i=!1,"pending"===c)return void(this.toHide=this.toHide.not(this.errorsFor(b)));if(!c)return this.formatAndAdd(b,e),!1}catch(k){throw this.settings.debug&&window.console&&console.log("Exception occurred when checking element "+b.id+", check the '"+e.method+"' method.",k),k instanceof TypeError&&(k.message+=". Exception occurred when checking element "+b.id+", check the '"+e.method+"' method."),k}}if(!i)return this.objectLength(g)&&this.successList.push(b),!0},customDataMessage:function(b,c){return a(b).data("msg"+c.charAt(0).toUpperCase()+c.substring(1).toLowerCase())||a(b).data("msg")},customMessage:function(a,b){var c=this.settings.messages[a];return c&&(c.constructor===String?c:c[b])},findDefined:function(){for(var a=0;a<arguments.length;a++)if(void 0!==arguments[a])return arguments[a]},defaultMessage:function(b,c){"string"==typeof c&&(c={method:c});var d=this.findDefined(this.customMessage(b.name,c.method),this.customDataMessage(b,c.method),!this.settings.ignoreTitle&&b.title||void 0,a.validator.messages[c.method],"<strong>Warning: No message defined for "+b.name+"</strong>"),e=/\$?\{(\d+)\}/g;return"function"==typeof d?d=d.call(this,c.parameters,b):e.test(d)&&(d=a.validator.format(d.replace(e,"{$1}"),c.parameters)),d},formatAndAdd:function(a,b){var c=this.defaultMessage(a,b);this.errorList.push({message:c,element:a,method:b.method}),this.errorMap[a.name]=c,this.submitted[a.name]=c},addWrapper:function(a){return this.settings.wrapper&&(a=a.add(a.parent(this.settings.wrapper))),a},defaultShowErrors:function(){var a,b,c;for(a=0;this.errorList[a];a++)c=this.errorList[a],this.settings.highlight&&this.settings.highlight.call(this,c.element,this.settings.errorClass,this.settings.validClass),this.showLabel(c.element,c.message);if(this.errorList.length&&(this.toShow=this.toShow.add(this.containers)),this.settings.success)for(a=0;this.successList[a];a++)this.showLabel(this.successList[a]);if(this.settings.unhighlight)for(a=0,b=this.validElements();b[a];a++)this.settings.unhighlight.call(this,b[a],this.settings.errorClass,this.settings.validClass);this.toHide=this.toHide.not(this.toShow),this.hideErrors(),this.addWrapper(this.toShow).show()},validElements:function(){return this.currentElements.not(this.invalidElements())},invalidElements:function(){return a(this.errorList).map(function(){return this.element})},showLabel:function(b,c){var d,e,f,g,h=this.errorsFor(b),i=this.idOrName(b),j=a(b).attr("aria-describedby");h.length?(h.removeClass(this.settings.validClass).addClass(this.settings.errorClass),h.html(c)):(h=a("<"+this.settings.errorElement+">").attr("id",i+"-error").addClass(this.settings.errorClass).html(c||""),d=h,this.settings.wrapper&&(d=h.hide().show().wrap("<"+this.settings.wrapper+"/>").parent()),this.labelContainer.length?this.labelContainer.append(d):this.settings.errorPlacement?this.settings.errorPlacement.call(this,d,a(b)):d.insertAfter(b),h.is("label")?h.attr("for",i):0===h.parents("label[for='"+this.escapeCssMeta(i)+"']").length&&(f=h.attr("id"),j?j.match(new RegExp("\\b"+this.escapeCssMeta(f)+"\\b"))||(j+=" "+f):j=f,a(b).attr("aria-describedby",j),e=this.groups[b.name],e&&(g=this,a.each(g.groups,function(b,c){c===e&&a("[name='"+g.escapeCssMeta(b)+"']",g.currentForm).attr("aria-describedby",h.attr("id"))})))),!c&&this.settings.success&&(h.text(""),"string"==typeof this.settings.success?h.addClass(this.settings.success):this.settings.success(h,b)),this.toShow=this.toShow.add(h)},errorsFor:function(b){var c=this.escapeCssMeta(this.idOrName(b)),d=a(b).attr("aria-describedby"),e="label[for='"+c+"'], label[for='"+c+"'] *";return d&&(e=e+", #"+this.escapeCssMeta(d).replace(/\s+/g,", #")),this.errors().filter(e)},escapeCssMeta:function(a){return a.replace(/([\\!"#$%&'()*+,.\/:;<=>?@\[\]^`{|}~])/g,"\\$1")},idOrName:function(a){return this.groups[a.name]||(this.checkable(a)?a.name:a.id||a.name)},validationTargetFor:function(b){return this.checkable(b)&&(b=this.findByName(b.name)),a(b).not(this.settings.ignore)[0]},checkable:function(a){return/radio|checkbox/i.test(a.type)},findByName:function(b){return a(this.currentForm).find("[name='"+this.escapeCssMeta(b)+"']")},getLength:function(b,c){switch(c.nodeName.toLowerCase()){case"select":return a("option:selected",c).length;case"input":if(this.checkable(c))return this.findByName(c.name).filter(":checked").length}return b.length},depend:function(a,b){return!this.dependTypes[typeof a]||this.dependTypes[typeof a](a,b)},dependTypes:{"boolean":function(a){return a},string:function(b,c){return!!a(b,c.form).length},"function":function(a,b){return a(b)}},optional:function(b){var c=this.elementValue(b);return!a.validator.methods.required.call(this,c,b)&&"dependency-mismatch"},startRequest:function(b){this.pending[b.name]||(this.pendingRequest++,a(b).addClass(this.settings.pendingClass),this.pending[b.name]=!0)},stopRequest:function(b,c){this.pendingRequest--,this.pendingRequest<0&&(this.pendingRequest=0),delete this.pending[b.name],a(b).removeClass(this.settings.pendingClass),c&&0===this.pendingRequest&&this.formSubmitted&&this.form()?(a(this.currentForm).submit(),this.submitButton&&a("input:hidden[name='"+this.submitButton.name+"']",this.currentForm).remove(),this.formSubmitted=!1):!c&&0===this.pendingRequest&&this.formSubmitted&&(a(this.currentForm).triggerHandler("invalid-form",[this]),this.formSubmitted=!1)},previousValue:function(b,c){return c="string"==typeof c&&c||"remote",a.data(b,"previousValue")||a.data(b,"previousValue",{old:null,valid:!0,message:this.defaultMessage(b,{method:c})})},destroy:function(){this.resetForm(),a(this.currentForm).off(".validate").removeData("validator").find(".validate-equalTo-blur").off(".validate-equalTo").removeClass("validate-equalTo-blur").find(".validate-lessThan-blur").off(".validate-lessThan").removeClass("validate-lessThan-blur").find(".validate-lessThanEqual-blur").off(".validate-lessThanEqual").removeClass("validate-lessThanEqual-blur").find(".validate-greaterThanEqual-blur").off(".validate-greaterThanEqual").removeClass("validate-greaterThanEqual-blur").find(".validate-greaterThan-blur").off(".validate-greaterThan").removeClass("validate-greaterThan-blur")}},classRuleSettings:{required:{required:!0},email:{email:!0},url:{url:!0},date:{date:!0},dateISO:{dateISO:!0},number:{number:!0},digits:{digits:!0},creditcard:{creditcard:!0}},addClassRules:function(b,c){b.constructor===String?this.classRuleSettings[b]=c:a.extend(this.classRuleSettings,b)},classRules:function(b){var c={},d=a(b).attr("class");return d&&a.each(d.split(" "),function(){this in a.validator.classRuleSettings&&a.extend(c,a.validator.classRuleSettings[this])}),c},normalizeAttributeRule:function(a,b,c,d){/min|max|step/.test(c)&&(null===b||/number|range|text/.test(b))&&(d=Number(d),isNaN(d)&&(d=void 0)),d||0===d?a[c]=d:b===c&&"range"!==b&&(a[c]=!0)},attributeRules:function(b){var c,d,e={},f=a(b),g=b.getAttribute("type");for(c in a.validator.methods)"required"===c?(d=b.getAttribute(c),""===d&&(d=!0),d=!!d):d=f.attr(c),this.normalizeAttributeRule(e,g,c,d);return e.maxlength&&/-1|2147483647|524288/.test(e.maxlength)&&delete e.maxlength,e},dataRules:function(b){var c,d,e={},f=a(b),g=b.getAttribute("type");for(c in a.validator.methods)d=f.data("rule"+c.charAt(0).toUpperCase()+c.substring(1).toLowerCase()),""===d&&(d=!0),this.normalizeAttributeRule(e,g,c,d);return e},staticRules:function(b){var c={},d=a.data(b.form,"validator");return d.settings.rules&&(c=a.validator.normalizeRule(d.settings.rules[b.name])||{}),c},normalizeRules:function(b,c){return a.each(b,function(d,e){if(e===!1)return void delete b[d];if(e.param||e.depends){var f=!0;switch(typeof e.depends){case"string":f=!!a(e.depends,c.form).length;break;case"function":f=e.depends.call(c,c)}f?b[d]=void 0===e.param||e.param:(a.data(c.form,"validator").resetElements(a(c)),delete b[d])}}),a.each(b,function(a,d){b[a]="function"==typeof d&&"normalizer"!==a?d(c):d}),a.each(["minlength","maxlength"],function(){b[this]&&(b[this]=Number(b[this]))}),a.each(["rangelength","range"],function(){var a;b[this]&&(Array.isArray(b[this])?b[this]=[Number(b[this][0]),Number(b[this][1])]:"string"==typeof b[this]&&(a=b[this].replace(/[\[\]]/g,"").split(/[\s,]+/),b[this]=[Number(a[0]),Number(a[1])]))}),a.validator.autoCreateRanges&&(null!=b.min&&null!=b.max&&(b.range=[b.min,b.max],delete b.min,delete b.max),null!=b.minlength&&null!=b.maxlength&&(b.rangelength=[b.minlength,b.maxlength],delete b.minlength,delete b.maxlength)),b},normalizeRule:function(b){if("string"==typeof b){var c={};a.each(b.split(/\s/),function(){c[this]=!0}),b=c}return b},addMethod:function(b,c,d){a.validator.methods[b]=c,a.validator.messages[b]=void 0!==d?d:a.validator.messages[b],c.length<3&&a.validator.addClassRules(b,a.validator.normalizeRule(b))},methods:{required:function(b,c,d){if(!this.depend(d,c))return"dependency-mismatch";if("select"===c.nodeName.toLowerCase()){var e=a(c).val();return e&&e.length>0}return this.checkable(c)?this.getLength(b,c)>0:void 0!==b&&null!==b&&b.length>0},email:function(a,b){return this.optional(b)||/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(a)},url:function(a,b){return this.optional(b)||/^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u00a1-\uffff][a-z0-9\u00a1-\uffff_-]{0,62})?[a-z0-9\u00a1-\uffff]\.)+(?:[a-z\u00a1-\uffff]{2,}\.?))(?::\d{2,5})?(?:[\/?#]\S*)?$/i.test(a)},date:function(){var a=!1;return function(b,c){return a||(a=!0,this.settings.debug&&window.console&&console.warn("The `date` method is deprecated and will be removed in version '2.0.0'.\nPlease don't use it, since it relies on the Date constructor, which\nbehaves very differently across browsers and locales. Use `dateISO`\ninstead or one of the locale specific methods in `localizations/`\nand `additional-methods.js`.")),this.optional(c)||!/Invalid|NaN/.test(new Date(b).toString())}}(),dateISO:function(a,b){return this.optional(b)||/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(a)},number:function(a,b){return this.optional(b)||/^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(a)},digits:function(a,b){return this.optional(b)||/^\d+$/.test(a)},minlength:function(a,b,c){var d=Array.isArray(a)?a.length:this.getLength(a,b);return this.optional(b)||d>=c},maxlength:function(a,b,c){var d=Array.isArray(a)?a.length:this.getLength(a,b);return this.optional(b)||d<=c},rangelength:function(a,b,c){var d=Array.isArray(a)?a.length:this.getLength(a,b);return this.optional(b)||d>=c[0]&&d<=c[1]},min:function(a,b,c){return this.optional(b)||a>=c},max:function(a,b,c){return this.optional(b)||a<=c},range:function(a,b,c){return this.optional(b)||a>=c[0]&&a<=c[1]},step:function(b,c,d){var e,f=a(c).attr("type"),g="Step attribute on input type "+f+" is not supported.",h=["text","number","range"],i=new RegExp("\\b"+f+"\\b"),j=f&&!i.test(h.join()),k=function(a){var b=(""+a).match(/(?:\.(\d+))?$/);return b&&b[1]?b[1].length:0},l=function(a){return Math.round(a*Math.pow(10,e))},m=!0;if(j)throw new Error(g);return e=k(d),(k(b)>e||l(b)%l(d)!==0)&&(m=!1),this.optional(c)||m},equalTo:function(b,c,d){var e=a(d);return this.settings.onfocusout&&e.not(".validate-equalTo-blur").length&&e.addClass("validate-equalTo-blur").on("blur.validate-equalTo",function(){a(c).valid()}),b===e.val()},remote:function(b,c,d,e){if(this.optional(c))return"dependency-mismatch";e="string"==typeof e&&e||"remote";var f,g,h,i=this.previousValue(c,e);return this.settings.messages[c.name]||(this.settings.messages[c.name]={}),i.originalMessage=i.originalMessage||this.settings.messages[c.name][e],this.settings.messages[c.name][e]=i.message,d="string"==typeof d&&{url:d}||d,h=a.param(a.extend({data:b},d.data)),i.old===h?i.valid:(i.old=h,f=this,this.startRequest(c),g={},g[c.name]=b,a.ajax(a.extend(!0,{mode:"abort",port:"validate"+c.name,dataType:"json",data:g,context:f.currentForm,success:function(a){var d,g,h,j=a===!0||"true"===a;f.settings.messages[c.name][e]=i.originalMessage,j?(h=f.formSubmitted,f.resetInternals(),f.toHide=f.errorsFor(c),f.formSubmitted=h,f.successList.push(c),f.invalid[c.name]=!1,f.showErrors()):(d={},g=a||f.defaultMessage(c,{method:e,parameters:b}),d[c.name]=i.message=g,f.invalid[c.name]=!0,f.showErrors(d)),i.valid=j,f.stopRequest(c,j)}},d)),"pending")}}});var c,d={};return a.ajaxPrefilter?a.ajaxPrefilter(function(a,b,c){var e=a.port;"abort"===a.mode&&(d[e]&&d[e].abort(),d[e]=c)}):(c=a.ajax,a.ajax=function(b){var e=("mode"in b?b:a.ajaxSettings).mode,f=("port"in b?b:a.ajaxSettings).port;return"abort"===e?(d[f]&&d[f].abort(),d[f]=c.apply(this,arguments),d[f]):c.apply(this,arguments)}),a});
|
4
client/dist/js/jquery-validation/localization/messages_ar.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_ar.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"هذا الحقل إلزامي",remote:"يرجى تصحيح هذا الحقل للمتابعة",email:"رجاء إدخال عنوان بريد إلكتروني صحيح",url:"رجاء إدخال عنوان موقع إلكتروني صحيح",date:"رجاء إدخال تاريخ صحيح",dateISO:"رجاء إدخال تاريخ صحيح (ISO)",number:"رجاء إدخال عدد بطريقة صحيحة",digits:"رجاء إدخال أرقام فقط",creditcard:"رجاء إدخال رقم بطاقة ائتمان صحيح",equalTo:"رجاء إدخال نفس القيمة",extension:"رجاء إدخال ملف بامتداد موافق عليه",maxlength:a.validator.format("الحد الأقصى لعدد الحروف هو {0}"),minlength:a.validator.format("الحد الأدنى لعدد الحروف هو {0}"),rangelength:a.validator.format("عدد الحروف يجب أن يكون بين {0} و {1}"),range:a.validator.format("رجاء إدخال عدد قيمته بين {0} و {1}"),max:a.validator.format("رجاء إدخال عدد أقل من أو يساوي {0}"),min:a.validator.format("رجاء إدخال عدد أكبر من أو يساوي {0}")}),a});
|
4
client/dist/js/jquery-validation/localization/messages_az.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_az.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"Bu xana mütləq doldurulmalıdır.",remote:"Zəhmət olmasa, düzgün məna daxil edin.",email:"Zəhmət olmasa, düzgün elektron poçt daxil edin.",url:"Zəhmət olmasa, düzgün URL daxil edin.",date:"Zəhmət olmasa, düzgün tarix daxil edin.",dateISO:"Zəhmət olmasa, düzgün ISO formatlı tarix daxil edin.",number:"Zəhmət olmasa, düzgün rəqəm daxil edin.",digits:"Zəhmət olmasa, yalnız rəqəm daxil edin.",creditcard:"Zəhmət olmasa, düzgün kredit kart nömrəsini daxil edin.",equalTo:"Zəhmət olmasa, eyni mənanı bir daha daxil edin.",extension:"Zəhmət olmasa, düzgün genişlənməyə malik faylı seçin.",maxlength:a.validator.format("Zəhmət olmasa, {0} simvoldan çox olmayaraq daxil edin."),minlength:a.validator.format("Zəhmət olmasa, {0} simvoldan az olmayaraq daxil edin."),rangelength:a.validator.format("Zəhmət olmasa, {0} - {1} aralığında uzunluğa malik simvol daxil edin."),range:a.validator.format("Zəhmət olmasa, {0} - {1} aralığında rəqəm daxil edin."),max:a.validator.format("Zəhmət olmasa, {0} və ondan kiçik rəqəm daxil edin."),min:a.validator.format("Zəhmət olmasa, {0} və ondan böyük rəqəm daxil edin")}),a});
|
4
client/dist/js/jquery-validation/localization/messages_bg.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_bg.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"Полето е задължително.",remote:"Моля, въведете правилната стойност.",email:"Моля, въведете валиден email.",url:"Моля, въведете валидно URL.",date:"Моля, въведете валидна дата.",dateISO:"Моля, въведете валидна дата (ISO).",number:"Моля, въведете валиден номер.",digits:"Моля, въведете само цифри.",creditcard:"Моля, въведете валиден номер на кредитна карта.",equalTo:"Моля, въведете същата стойност отново.",extension:"Моля, въведете стойност с валидно разширение.",maxlength:a.validator.format("Моля, въведете не повече от {0} символа."),minlength:a.validator.format("Моля, въведете поне {0} символа."),rangelength:a.validator.format("Моля, въведете стойност с дължина между {0} и {1} символа."),range:a.validator.format("Моля, въведете стойност между {0} и {1}."),max:a.validator.format("Моля, въведете стойност по-малка или равна на {0}."),min:a.validator.format("Моля, въведете стойност по-голяма или равна на {0}.")}),a});
|
4
client/dist/js/jquery-validation/localization/messages_bn_BD.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_bn_BD.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"এই তথ্যটি আবশ্যক।",remote:"এই তথ্যটি ঠিক করুন।",email:"অনুগ্রহ করে একটি সঠিক মেইল ঠিকানা লিখুন।",url:"অনুগ্রহ করে একটি সঠিক লিঙ্ক দিন।",date:"তারিখ সঠিক নয়।",dateISO:"অনুগ্রহ করে একটি সঠিক (ISO) তারিখ লিখুন।",number:"অনুগ্রহ করে একটি সঠিক নম্বর লিখুন।",digits:"এখানে শুধু সংখ্যা ব্যবহার করা যাবে।",creditcard:"অনুগ্রহ করে একটি ক্রেডিট কার্ডের সঠিক নম্বর লিখুন।",equalTo:"একই মান আবার লিখুন।",extension:"সঠিক ধরনের ফাইল আপলোড করুন।",maxlength:a.validator.format("{0}টির বেশি অক্ষর লেখা যাবে না।"),minlength:a.validator.format("{0}টির কম অক্ষর লেখা যাবে না।"),rangelength:a.validator.format("{0} থেকে {1} টি অক্ষর সম্বলিত মান লিখুন।"),range:a.validator.format("{0} থেকে {1} এর মধ্যে একটি মান ব্যবহার করুন।"),max:a.validator.format("অনুগ্রহ করে {0} বা তার চাইতে কম মান ব্যবহার করুন।"),min:a.validator.format("অনুগ্রহ করে {0} বা তার চাইতে বেশি মান ব্যবহার করুন।")}),a});
|
4
client/dist/js/jquery-validation/localization/messages_ca.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_ca.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"Aquest camp és obligatori.",remote:"Si us plau, omple aquest camp.",email:"Si us plau, escriu una adreça de correu-e vàlida",url:"Si us plau, escriu una URL vàlida.",date:"Si us plau, escriu una data vàlida.",dateISO:"Si us plau, escriu una data (ISO) vàlida.",number:"Si us plau, escriu un número enter vàlid.",digits:"Si us plau, escriu només dígits.",creditcard:"Si us plau, escriu un número de tarjeta vàlid.",equalTo:"Si us plau, escriu el mateix valor de nou.",extension:"Si us plau, escriu un valor amb una extensió acceptada.",maxlength:a.validator.format("Si us plau, no escriguis més de {0} caracters."),minlength:a.validator.format("Si us plau, no escriguis menys de {0} caracters."),rangelength:a.validator.format("Si us plau, escriu un valor entre {0} i {1} caracters."),range:a.validator.format("Si us plau, escriu un valor entre {0} i {1}."),max:a.validator.format("Si us plau, escriu un valor menor o igual a {0}."),min:a.validator.format("Si us plau, escriu un valor major o igual a {0}.")}),a});
|
4
client/dist/js/jquery-validation/localization/messages_cs.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_cs.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"Tento údaj je povinný.",remote:"Prosím, opravte tento údaj.",email:"Prosím, zadejte platný e-mail.",url:"Prosím, zadejte platné URL.",date:"Prosím, zadejte platné datum.",dateISO:"Prosím, zadejte platné datum (ISO).",number:"Prosím, zadejte číslo.",digits:"Prosím, zadávejte pouze číslice.",creditcard:"Prosím, zadejte číslo kreditní karty.",equalTo:"Prosím, zadejte znovu stejnou hodnotu.",extension:"Prosím, zadejte soubor se správnou příponou.",maxlength:a.validator.format("Prosím, zadejte nejvíce {0} znaků."),minlength:a.validator.format("Prosím, zadejte nejméně {0} znaků."),rangelength:a.validator.format("Prosím, zadejte od {0} do {1} znaků."),range:a.validator.format("Prosím, zadejte hodnotu od {0} do {1}."),max:a.validator.format("Prosím, zadejte hodnotu menší nebo rovnu {0}."),min:a.validator.format("Prosím, zadejte hodnotu větší nebo rovnu {0}."),step:a.validator.format("Musí být násobkem čísla {0}.")}),a});
|
4
client/dist/js/jquery-validation/localization/messages_da.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_da.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"Dette felt er påkrævet.",remote:"Ret venligst dette felt",email:"Indtast en gyldig email-adresse.",url:"Indtast en gyldig URL.",date:"Indtast en gyldig dato.",number:"Indtast et tal.",digits:"Indtast kun cifre.",creditcard:"Indtast et gyldigt kreditkortnummer.",equalTo:"Indtast den samme værdi igen.",time:"Angiv en gyldig tid mellem kl. 00:00 og 23:59.",ipv4:"Angiv venligst en gyldig IPv4-adresse.",ipv6:"Angiv venligst en gyldig IPv6-adresse.",require_from_group:a.validator.format("Angiv mindst {0} af disse felter."),extension:"Indtast venligst en værdi med en gyldig endelse",pattern:"Ugyldigt format",lettersonly:"Angiv venligst kun bogstaver.",nowhitespace:"Må ikke indholde mellemrum",maxlength:a.validator.format("Indtast højst {0} tegn."),minlength:a.validator.format("Indtast mindst {0} tegn."),rangelength:a.validator.format("Indtast mindst {0} og højst {1} tegn."),range:a.validator.format("Angiv en værdi mellem {0} og {1}."),max:a.validator.format("Angiv en værdi der højst er {0}."),min:a.validator.format("Angiv en værdi der mindst er {0}."),minWords:a.validator.format("Indtast venligst mindst {0} ord"),maxWords:a.validator.format("Indtast venligst højst {0} ord"),step:a.validator.format("Angiv en værdi gange {0}."),notEqualTo:"Angiv en anden værdi, værdierne må ikke være det samme.",integer:"Angiv et ikke-decimaltal, der er positivt eller negativt."}),a});
|
4
client/dist/js/jquery-validation/localization/messages_de.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_de.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"Dieses Feld ist ein Pflichtfeld.",maxlength:a.validator.format("Geben Sie bitte maximal {0} Zeichen ein."),minlength:a.validator.format("Geben Sie bitte mindestens {0} Zeichen ein."),rangelength:a.validator.format("Geben Sie bitte mindestens {0} und maximal {1} Zeichen ein."),email:"Geben Sie bitte eine gültige E-Mail-Adresse ein.",url:"Geben Sie bitte eine gültige URL ein.",date:"Geben Sie bitte ein gültiges Datum ein.",number:"Geben Sie bitte eine Nummer ein.",digits:"Geben Sie bitte nur Ziffern ein.",equalTo:"Wiederholen Sie bitte denselben Wert.",range:a.validator.format("Geben Sie bitte einen Wert zwischen {0} und {1} ein."),max:a.validator.format("Geben Sie bitte einen Wert kleiner oder gleich {0} ein."),min:a.validator.format("Geben Sie bitte einen Wert größer oder gleich {0} ein."),creditcard:"Geben Sie bitte eine gültige Kreditkarten-Nummer ein.",remote:"Korrigieren Sie bitte dieses Feld.",dateISO:"Geben Sie bitte ein gültiges Datum ein (ISO-Format).",step:a.validator.format("Geben Sie bitte ein Vielfaches von {0} ein."),maxWords:a.validator.format("Geben Sie bitte {0} Wörter oder weniger ein."),minWords:a.validator.format("Geben Sie bitte mindestens {0} Wörter ein."),rangeWords:a.validator.format("Geben Sie bitte zwischen {0} und {1} Wörtern ein."),accept:"Geben Sie bitte einen Wert mit einem gültigen MIME-Typ ein.",alphanumeric:"Geben Sie bitte nur Buchstaben (keine Umlaute), Zahlen oder Unterstriche ein.",bankaccountNL:"Geben Sie bitte eine gültige Kontonummer ein.",bankorgiroaccountNL:"Geben Sie bitte eine gültige Bank- oder Girokontonummer ein.",bic:"Geben Sie bitte einen gültigen BIC-Code ein.",cifES:"Geben Sie bitte eine gültige CIF-Nummer ein.",cpfBR:"Geben Sie bitte eine gültige CPF-Nummer ein.",creditcardtypes:"Geben Sie bitte eine gültige Kreditkarten-Nummer ein.",currency:"Geben Sie bitte eine gültige Währung ein.",extension:"Geben Sie bitte einen Wert mit einer gültigen Erweiterung ein.",giroaccountNL:"Geben Sie bitte eine gültige Girokontonummer ein.",iban:"Geben Sie bitte eine gültige IBAN ein.",integer:"Geben Sie bitte eine positive oder negative Nicht-Dezimalzahl ein.",ipv4:"Geben Sie bitte eine gültige IPv4-Adresse ein.",ipv6:"Geben Sie bitte eine gültige IPv6-Adresse ein.",lettersonly:"Geben Sie bitte nur Buchstaben ein.",letterswithbasicpunc:"Geben Sie bitte nur Buchstaben oder Interpunktion ein.",mobileNL:"Geben Sie bitte eine gültige Handynummer ein.",mobileUK:"Geben Sie bitte eine gültige Handynummer ein.",netmask:"Geben Sie bitte eine gültige Netzmaske ein.",nieES:"Geben Sie bitte eine gültige NIE-Nummer ein.",nifES:"Geben Sie bitte eine gültige NIF-Nummer ein.",nipPL:"Geben Sie bitte eine gültige NIP-Nummer ein.",notEqualTo:"Geben Sie bitte einen anderen Wert ein. Die Werte dürfen nicht gleich sein.",nowhitespace:"Kein Leerzeichen bitte.",pattern:"Ungültiges Format.",phoneNL:"Geben Sie bitte eine gültige Telefonnummer ein.",phonesUK:"Geben Sie bitte eine gültige britische Telefonnummer ein.",phoneUK:"Geben Sie bitte eine gültige Telefonnummer ein.",phoneUS:"Geben Sie bitte eine gültige Telefonnummer ein.",postalcodeBR:"Geben Sie bitte eine gültige brasilianische Postleitzahl ein.",postalCodeCA:"Geben Sie bitte eine gültige kanadische Postleitzahl ein.",postalcodeIT:"Geben Sie bitte eine gültige italienische Postleitzahl ein.",postalcodeNL:"Geben Sie bitte eine gültige niederländische Postleitzahl ein.",postcodeUK:"Geben Sie bitte eine gültige britische Postleitzahl ein.",require_from_group:a.validator.format("Füllen Sie bitte mindestens {0} dieser Felder aus."),skip_or_fill_minimum:a.validator.format("Überspringen Sie bitte diese Felder oder füllen Sie mindestens {0} von ihnen aus."),stateUS:"Geben Sie bitte einen gültigen US-Bundesstaat ein.",strippedminlength:a.validator.format("Geben Sie bitte mindestens {0} Zeichen ein."),time:"Geben Sie bitte eine gültige Uhrzeit zwischen 00:00 und 23:59 ein.",time12h:"Geben Sie bitte eine gültige Uhrzeit im 12-Stunden-Format ein.",vinUS:"Die angegebene Fahrzeugidentifikationsnummer (VIN) ist ungültig.",zipcodeUS:"Die angegebene US-Postleitzahl ist ungültig.",ziprange:"Ihre Postleitzahl muss im Bereich 902xx-xxxx bis 905xx-xxxx liegen."}),a});
|
4
client/dist/js/jquery-validation/localization/messages_el.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_el.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"Αυτό το πεδίο είναι υποχρεωτικό.",remote:"Παρακαλώ διορθώστε αυτό το πεδίο.",email:"Παρακαλώ εισάγετε μια έγκυρη διεύθυνση email.",url:"Παρακαλώ εισάγετε ένα έγκυρο URL.",date:"Παρακαλώ εισάγετε μια έγκυρη ημερομηνία.",dateISO:"Παρακαλώ εισάγετε μια έγκυρη ημερομηνία (ISO).",number:"Παρακαλώ εισάγετε έναν έγκυρο αριθμό.",digits:"Παρακαλώ εισάγετε μόνο αριθμητικά ψηφία.",creditcard:"Παρακαλώ εισάγετε έναν έγκυρο αριθμό πιστωτικής κάρτας.",equalTo:"Παρακαλώ εισάγετε την ίδια τιμή ξανά.",extension:"Παρακαλώ εισάγετε μια τιμή με έγκυρη επέκταση αρχείου.",maxlength:a.validator.format("Παρακαλώ εισάγετε μέχρι και {0} χαρακτήρες."),minlength:a.validator.format("Παρακαλώ εισάγετε τουλάχιστον {0} χαρακτήρες."),rangelength:a.validator.format("Παρακαλώ εισάγετε μια τιμή με μήκος μεταξύ {0} και {1} χαρακτήρων."),range:a.validator.format("Παρακαλώ εισάγετε μια τιμή μεταξύ {0} και {1}."),max:a.validator.format("Παρακαλώ εισάγετε μια τιμή μικρότερη ή ίση του {0}."),min:a.validator.format("Παρακαλώ εισάγετε μια τιμή μεγαλύτερη ή ίση του {0}.")}),a});
|
4
client/dist/js/jquery-validation/localization/messages_es.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_es.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"Este campo es obligatorio.",remote:"Por favor, rellena este campo.",email:"Por favor, escribe una dirección de correo válida.",url:"Por favor, escribe una URL válida.",date:"Por favor, escribe una fecha válida.",dateISO:"Por favor, escribe una fecha (ISO) válida.",number:"Por favor, escribe un número válido.",digits:"Por favor, escribe sólo dígitos.",creditcard:"Por favor, escribe un número de tarjeta válido.",equalTo:"Por favor, escribe el mismo valor de nuevo.",extension:"Por favor, escribe un valor con una extensión aceptada.",maxlength:a.validator.format("Por favor, no escribas más de {0} caracteres."),minlength:a.validator.format("Por favor, no escribas menos de {0} caracteres."),rangelength:a.validator.format("Por favor, escribe un valor entre {0} y {1} caracteres."),range:a.validator.format("Por favor, escribe un valor entre {0} y {1}."),max:a.validator.format("Por favor, escribe un valor menor o igual a {0}."),min:a.validator.format("Por favor, escribe un valor mayor o igual a {0}."),nifES:"Por favor, escribe un NIF válido.",nieES:"Por favor, escribe un NIE válido.",cifES:"Por favor, escribe un CIF válido."}),a});
|
4
client/dist/js/jquery-validation/localization/messages_es_AR.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_es_AR.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"Este campo es obligatorio.",remote:"Por favor, completá este campo.",email:"Por favor, escribí una dirección de correo válida.",url:"Por favor, escribí una URL válida.",date:"Por favor, escribí una fecha válida.",dateISO:"Por favor, escribí una fecha (ISO) válida.",number:"Por favor, escribí un número entero válido.",digits:"Por favor, escribí sólo dígitos.",creditcard:"Por favor, escribí un número de tarjeta válido.",equalTo:"Por favor, escribí el mismo valor de nuevo.",extension:"Por favor, escribí un valor con una extensión aceptada.",maxlength:a.validator.format("Por favor, no escribas más de {0} caracteres."),minlength:a.validator.format("Por favor, no escribas menos de {0} caracteres."),rangelength:a.validator.format("Por favor, escribí un valor entre {0} y {1} caracteres."),range:a.validator.format("Por favor, escribí un valor entre {0} y {1}."),max:a.validator.format("Por favor, escribí un valor menor o igual a {0}."),min:a.validator.format("Por favor, escribí un valor mayor o igual a {0}."),nifES:"Por favor, escribí un NIF válido.",nieES:"Por favor, escribí un NIE válido.",cifES:"Por favor, escribí un CIF válido."}),a});
|
4
client/dist/js/jquery-validation/localization/messages_es_PE.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_es_PE.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"Este campo es obligatorio.",remote:"Por favor, llene este campo.",email:"Por favor, escriba un correo electrónico válido.",url:"Por favor, escriba una URL válida.",date:"Por favor, escriba una fecha válida.",dateISO:"Por favor, escriba una fecha (ISO) válida.",number:"Por favor, escriba un número válido.",digits:"Por favor, escriba sólo dígitos.",creditcard:"Por favor, escriba un número de tarjeta válido.",equalTo:"Por favor, escriba el mismo valor de nuevo.",extension:"Por favor, escriba un valor con una extensión permitida.",maxlength:a.validator.format("Por favor, no escriba más de {0} caracteres."),minlength:a.validator.format("Por favor, no escriba menos de {0} caracteres."),rangelength:a.validator.format("Por favor, escriba un valor entre {0} y {1} caracteres."),range:a.validator.format("Por favor, escriba un valor entre {0} y {1}."),max:a.validator.format("Por favor, escriba un valor menor o igual a {0}."),min:a.validator.format("Por favor, escriba un valor mayor o igual a {0}."),nifES:"Por favor, escriba un NIF válido.",nieES:"Por favor, escriba un NIE válido.",cifES:"Por favor, escriba un CIF válido."}),a});
|
4
client/dist/js/jquery-validation/localization/messages_et.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_et.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"See väli peab olema täidetud.",maxlength:a.validator.format("Palun sisestage vähem kui {0} tähemärki."),minlength:a.validator.format("Palun sisestage vähemalt {0} tähemärki."),rangelength:a.validator.format("Palun sisestage väärtus vahemikus {0} kuni {1} tähemärki."),email:"Palun sisestage korrektne e-maili aadress.",url:"Palun sisestage korrektne URL.",date:"Palun sisestage korrektne kuupäev.",dateISO:"Palun sisestage korrektne kuupäev (YYYY-MM-DD).",number:"Palun sisestage korrektne number.",digits:"Palun sisestage ainult numbreid.",equalTo:"Palun sisestage sama väärtus uuesti.",range:a.validator.format("Palun sisestage väärtus vahemikus {0} kuni {1}."),max:a.validator.format("Palun sisestage väärtus, mis on väiksem või võrdne arvuga {0}."),min:a.validator.format("Palun sisestage väärtus, mis on suurem või võrdne arvuga {0}."),creditcard:"Palun sisestage korrektne krediitkaardi number."}),a});
|
4
client/dist/js/jquery-validation/localization/messages_eu.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_eu.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"Eremu hau beharrezkoa da.",remote:"Mesedez, bete eremu hau.",email:"Mesedez, idatzi baliozko posta helbide bat.",url:"Mesedez, idatzi baliozko URL bat.",date:"Mesedez, idatzi baliozko data bat.",dateISO:"Mesedez, idatzi baliozko (ISO) data bat.",number:"Mesedez, idatzi baliozko zenbaki oso bat.",digits:"Mesedez, idatzi digituak soilik.",creditcard:"Mesedez, idatzi baliozko txartel zenbaki bat.",equalTo:"Mesedez, idatzi berdina berriro ere.",extension:"Mesedez, idatzi onartutako luzapena duen balio bat.",maxlength:a.validator.format("Mesedez, ez idatzi {0} karaktere baino gehiago."),minlength:a.validator.format("Mesedez, ez idatzi {0} karaktere baino gutxiago."),rangelength:a.validator.format("Mesedez, idatzi {0} eta {1} karaktere arteko balio bat."),range:a.validator.format("Mesedez, idatzi {0} eta {1} arteko balio bat."),max:a.validator.format("Mesedez, idatzi {0} edo txikiagoa den balio bat."),min:a.validator.format("Mesedez, idatzi {0} edo handiagoa den balio bat.")}),a});
|
4
client/dist/js/jquery-validation/localization/messages_fa.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_fa.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"تکمیل این فیلد اجباری است.",remote:"لطفا این فیلد را تصحیح کنید.",email:"لطفا یک ایمیل صحیح وارد کنید.",url:"لطفا آدرس صحیح وارد کنید.",date:"لطفا تاریخ صحیح وارد کنید.",dateFA:"لطفا یک تاریخ صحیح وارد کنید.",dateISO:"لطفا تاریخ صحیح وارد کنید (ISO).",number:"لطفا عدد صحیح وارد کنید.",digits:"لطفا تنها رقم وارد کنید.",creditcard:"لطفا کریدیت کارت صحیح وارد کنید.",equalTo:"لطفا مقدار برابری وارد کنید.",extension:"لطفا مقداری وارد کنید که",alphanumeric:"لطفا مقدار را عدد (انگلیسی) وارد کنید.",maxlength:a.validator.format("لطفا بیشتر از {0} حرف وارد نکنید."),minlength:a.validator.format("لطفا کمتر از {0} حرف وارد نکنید."),rangelength:a.validator.format("لطفا مقداری بین {0} تا {1} حرف وارد کنید."),range:a.validator.format("لطفا مقداری بین {0} تا {1} حرف وارد کنید."),max:a.validator.format("لطفا مقداری کمتر از {0} وارد کنید."),min:a.validator.format("لطفا مقداری بیشتر از {0} وارد کنید."),minWords:a.validator.format("لطفا حداقل {0} کلمه وارد کنید."),maxWords:a.validator.format("لطفا حداکثر {0} کلمه وارد کنید.")}),a});
|
4
client/dist/js/jquery-validation/localization/messages_fi.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_fi.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"Tämä kenttä on pakollinen.",email:"Syötä oikea sähköpostiosoite.",url:"Syötä oikea URL-osoite.",date:"Syötä oikea päivämäärä.",dateISO:"Syötä oikea päivämäärä muodossa VVVV-KK-PP.",number:"Syötä luku.",creditcard:"Syötä voimassa oleva luottokorttinumero.",digits:"Syötä pelkästään numeroita.",equalTo:"Syötä sama arvo uudestaan.",maxlength:a.validator.format("Voit syöttää enintään {0} merkkiä."),minlength:a.validator.format("Vähintään {0} merkkiä."),rangelength:a.validator.format("Syötä vähintään {0} ja enintään {1} merkkiä."),range:a.validator.format("Syötä arvo väliltä {0}–{1}."),max:a.validator.format("Syötä arvo, joka on enintään {0}."),min:a.validator.format("Syötä arvo, joka on vähintään {0}.")}),a});
|
4
client/dist/js/jquery-validation/localization/messages_fr.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_fr.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"Ce champ est obligatoire.",remote:"Veuillez corriger ce champ.",email:"Veuillez fournir une adresse électronique valide.",url:"Veuillez fournir une adresse URL valide.",date:"Veuillez fournir une date valide.",dateISO:"Veuillez fournir une date valide (ISO).",number:"Veuillez fournir un numéro valide.",digits:"Veuillez fournir seulement des chiffres.",creditcard:"Veuillez fournir un numéro de carte de crédit valide.",equalTo:"Veuillez fournir encore la même valeur.",notEqualTo:"Veuillez fournir une valeur différente, les valeurs ne doivent pas être identiques.",extension:"Veuillez fournir une valeur avec une extension valide.",maxlength:a.validator.format("Veuillez fournir au plus {0} caractères."),minlength:a.validator.format("Veuillez fournir au moins {0} caractères."),rangelength:a.validator.format("Veuillez fournir une valeur qui contient entre {0} et {1} caractères."),range:a.validator.format("Veuillez fournir une valeur entre {0} et {1}."),max:a.validator.format("Veuillez fournir une valeur inférieure ou égale à {0}."),min:a.validator.format("Veuillez fournir une valeur supérieure ou égale à {0}."),step:a.validator.format("Veuillez fournir une valeur multiple de {0}."),maxWords:a.validator.format("Veuillez fournir au plus {0} mots."),minWords:a.validator.format("Veuillez fournir au moins {0} mots."),rangeWords:a.validator.format("Veuillez fournir entre {0} et {1} mots."),letterswithbasicpunc:"Veuillez fournir seulement des lettres et des signes de ponctuation.",alphanumeric:"Veuillez fournir seulement des lettres, nombres, espaces et soulignages.",lettersonly:"Veuillez fournir seulement des lettres.",nowhitespace:"Veuillez ne pas inscrire d'espaces blancs.",ziprange:"Veuillez fournir un code postal entre 902xx-xxxx et 905-xx-xxxx.",integer:"Veuillez fournir un nombre non décimal qui est positif ou négatif.",vinUS:"Veuillez fournir un numéro d'identification du véhicule (VIN).",dateITA:"Veuillez fournir une date valide.",time:"Veuillez fournir une heure valide entre 00:00 et 23:59.",phoneUS:"Veuillez fournir un numéro de téléphone valide.",phoneUK:"Veuillez fournir un numéro de téléphone valide.",mobileUK:"Veuillez fournir un numéro de téléphone mobile valide.",strippedminlength:a.validator.format("Veuillez fournir au moins {0} caractères."),email2:"Veuillez fournir une adresse électronique valide.",url2:"Veuillez fournir une adresse URL valide.",creditcardtypes:"Veuillez fournir un numéro de carte de crédit valide.",ipv4:"Veuillez fournir une adresse IP v4 valide.",ipv6:"Veuillez fournir une adresse IP v6 valide.",require_from_group:a.validator.format("Veuillez fournir au moins {0} de ces champs."),nifES:"Veuillez fournir un numéro NIF valide.",nieES:"Veuillez fournir un numéro NIE valide.",cifES:"Veuillez fournir un numéro CIF valide.",postalCodeCA:"Veuillez fournir un code postal valide.",pattern:"Format non valide."}),a});
|
4
client/dist/js/jquery-validation/localization/messages_ge.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_ge.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"ეს ველი სავალდებულოა",remote:"გთხოვთ შეასწოროთ.",email:"გთხოვთ შეიყვანოთ სწორი ფორმატით.",url:"გთხოვთ შეიყვანოთ სწორი ფორმატით.",date:"გთხოვთ შეიყვანოთ სწორი თარიღი.",dateISO:"გთხოვთ შეიყვანოთ სწორი ფორმატით (ISO).",number:"გთხოვთ შეიყვანოთ რიცხვი.",digits:"დაშვებულია მხოლოდ ციფრები.",creditcard:"გთხოვთ შეიყვანოთ სწორი ფორმატის ბარათის კოდი.",equalTo:"გთხოვთ შეიყვანოთ იგივე მნიშვნელობა.",maxlength:a.validator.format("გთხოვთ შეიყვანოთ არა უმეტეს {0} სიმბოლოსი."),minlength:a.validator.format("შეიყვანეთ მინიმუმ {0} სიმბოლო."),rangelength:a.validator.format("გთხოვთ შეიყვანოთ {0} -დან {1} -მდე რაოდენობის სიმბოლოები."),range:a.validator.format("შეიყვანეთ {0} -სა {1} -ს შორის."),max:a.validator.format("გთხოვთ შეიყვანოთ მნიშვნელობა ნაკლები ან ტოლი {0} -ს."),min:a.validator.format("გთხოვთ შეიყვანოთ მნიშვნელობა მეტი ან ტოლი {0} -ს.")}),a});
|
4
client/dist/js/jquery-validation/localization/messages_gl.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_gl.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return function(a){a.extend(a.validator.messages,{required:"Este campo é obrigatorio.",remote:"Por favor, cubre este campo.",email:"Por favor, escribe unha dirección de correo válida.",url:"Por favor, escribe unha URL válida.",date:"Por favor, escribe unha data válida.",dateISO:"Por favor, escribe unha data (ISO) válida.",number:"Por favor, escribe un número válido.",digits:"Por favor, escribe só díxitos.",creditcard:"Por favor, escribe un número de tarxeta válido.",equalTo:"Por favor, escribe o mesmo valor de novo.",extension:"Por favor, escribe un valor cunha extensión aceptada.",maxlength:a.validator.format("Por favor, non escribas máis de {0} caracteres."),minlength:a.validator.format("Por favor, non escribas menos de {0} caracteres."),rangelength:a.validator.format("Por favor, escribe un valor entre {0} e {1} caracteres."),range:a.validator.format("Por favor, escribe un valor entre {0} e {1}."),max:a.validator.format("Por favor, escribe un valor menor ou igual a {0}."),min:a.validator.format("Por favor, escribe un valor maior ou igual a {0}."),nifES:"Por favor, escribe un NIF válido.",nieES:"Por favor, escribe un NIE válido.",cifES:"Por favor, escribe un CIF válido."})}(jQuery),a});
|
4
client/dist/js/jquery-validation/localization/messages_he.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_he.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"השדה הזה הינו שדה חובה",remote:"נא לתקן שדה זה",email:'נא למלא כתובת דוא"ל חוקית',url:"נא למלא כתובת אינטרנט חוקית",date:"נא למלא תאריך חוקי",dateISO:"נא למלא תאריך חוקי (ISO)",number:"נא למלא מספר",digits:"נא למלא רק מספרים",creditcard:"נא למלא מספר כרטיס אשראי חוקי",equalTo:"נא למלא את אותו ערך שוב",extension:"נא למלא ערך עם סיומת חוקית",maxlength:a.validator.format(".נא לא למלא יותר מ- {0} תווים"),minlength:a.validator.format("נא למלא לפחות {0} תווים"),rangelength:a.validator.format("נא למלא ערך בין {0} ל- {1} תווים"),range:a.validator.format("נא למלא ערך בין {0} ל- {1}"),max:a.validator.format("נא למלא ערך קטן או שווה ל- {0}"),min:a.validator.format("נא למלא ערך גדול או שווה ל- {0}")}),a});
|
4
client/dist/js/jquery-validation/localization/messages_hr.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_hr.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"Ovo polje je obavezno.",remote:"Ovo polje treba popraviti.",email:"Unesite ispravnu e-mail adresu.",url:"Unesite ispravan URL.",date:"Unesite ispravan datum.",dateISO:"Unesite ispravan datum (ISO).",number:"Unesite ispravan broj.",digits:"Unesite samo brojeve.",creditcard:"Unesite ispravan broj kreditne kartice.",equalTo:"Unesite ponovo istu vrijednost.",extension:"Unesite vrijednost sa ispravnom ekstenzijom.",maxlength:a.validator.format("Maksimalni broj znakova je {0} ."),minlength:a.validator.format("Minimalni broj znakova je {0} ."),rangelength:a.validator.format("Unesite vrijednost između {0} i {1} znakova."),range:a.validator.format("Unesite vrijednost između {0} i {1}."),max:a.validator.format("Unesite vrijednost manju ili jednaku {0}."),min:a.validator.format("Unesite vrijednost veću ili jednaku {0}.")}),a});
|
4
client/dist/js/jquery-validation/localization/messages_hu.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_hu.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"Kötelező megadni.",maxlength:a.validator.format("Legfeljebb {0} karakter hosszú legyen."),minlength:a.validator.format("Legalább {0} karakter hosszú legyen."),rangelength:a.validator.format("Legalább {0} és legfeljebb {1} karakter hosszú legyen."),email:"Érvényes e-mail címnek kell lennie.",url:"Érvényes URL-nek kell lennie.",date:"Dátumnak kell lennie.",number:"Számnak kell lennie.",digits:"Csak számjegyek lehetnek.",equalTo:"Meg kell egyeznie a két értéknek.",range:a.validator.format("{0} és {1} közé kell esnie."),max:a.validator.format("Nem lehet nagyobb, mint {0}."),min:a.validator.format("Nem lehet kisebb, mint {0}."),creditcard:"Érvényes hitelkártyaszámnak kell lennie.",remote:"Kérem javítsa ki ezt a mezőt.",dateISO:"Kérem írjon be egy érvényes dátumot (ISO).",step:a.validator.format("A {0} egyik többszörösét adja meg.")}),a});
|
4
client/dist/js/jquery-validation/localization/messages_hy_AM.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_hy_AM.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"Պարտադիր լրացման դաշտ",remote:"Ներմուծեք ճիշտ արժեքը",email:"Ներմուծեք վավեր էլեկտրոնային փոստի հասցե",url:"Ներմուծեք վավեր URL",date:"Ներմուծեք վավեր ամսաթիվ",dateISO:"Ներմուծեք ISO ֆորմատով վավեր ամսաթիվ։",number:"Ներմուծեք թիվ",digits:"Ներմուծեք միայն թվեր",creditcard:"Ներմուծեք ճիշտ բանկային քարտի համար",equalTo:"Ներմուծեք միևնուն արժեքը ևս մեկ անգամ",extension:"Ընտրեք ճիշտ ընդլանումով ֆայլ",maxlength:a.validator.format("Ներմուծեք ոչ ավել քան {0} նիշ"),minlength:a.validator.format("Ներմուծեք ոչ պակաս քան {0} նիշ"),rangelength:a.validator.format("Ներմուծեք {0}֊ից {1} երկարությամբ արժեք"),range:a.validator.format("Ներմուծեք թիվ {0}֊ից {1} միջակայքում"),max:a.validator.format("Ներմուծեք թիվ, որը փոքր կամ հավասար է {0}֊ին"),min:a.validator.format("Ներմուծեք թիվ, որը մեծ կամ հավասար է {0}֊ին")}),a});
|
4
client/dist/js/jquery-validation/localization/messages_id.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_id.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"Kolom ini diperlukan.",remote:"Harap benarkan kolom ini.",email:"Silakan masukkan format email yang benar.",url:"Silakan masukkan format URL yang benar.",date:"Silakan masukkan format tanggal yang benar.",dateISO:"Silakan masukkan format tanggal(ISO) yang benar.",number:"Silakan masukkan angka yang benar.",digits:"Harap masukan angka saja.",creditcard:"Harap masukkan format kartu kredit yang benar.",equalTo:"Harap masukkan nilai yg sama dengan sebelumnya.",maxlength:a.validator.format("Input dibatasi hanya {0} karakter."),minlength:a.validator.format("Input tidak kurang dari {0} karakter."),rangelength:a.validator.format("Panjang karakter yg diizinkan antara {0} dan {1} karakter."),range:a.validator.format("Harap masukkan nilai antara {0} dan {1}."),max:a.validator.format("Harap masukkan nilai lebih kecil atau sama dengan {0}."),min:a.validator.format("Harap masukkan nilai lebih besar atau sama dengan {0}.")}),a});
|
4
client/dist/js/jquery-validation/localization/messages_is.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_is.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"Þessi reitur er nauðsynlegur.",remote:"Lagaðu þennan reit.",maxlength:a.validator.format("Sláðu inn mest {0} stafi."),minlength:a.validator.format("Sláðu inn minnst {0} stafi."),rangelength:a.validator.format("Sláðu inn minnst {0} og mest {1} stafi."),email:"Sláðu inn gilt netfang.",url:"Sláðu inn gilda vefslóð.",date:"Sláðu inn gilda dagsetningu.",number:"Sláðu inn tölu.",digits:"Sláðu inn tölustafi eingöngu.",equalTo:"Sláðu sama gildi inn aftur.",range:a.validator.format("Sláðu inn gildi milli {0} og {1}."),max:a.validator.format("Sláðu inn gildi sem er minna en eða jafnt og {0}."),min:a.validator.format("Sláðu inn gildi sem er stærra en eða jafnt og {0}."),creditcard:"Sláðu inn gilt greiðslukortanúmer."}),a});
|
4
client/dist/js/jquery-validation/localization/messages_it.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_it.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"Campo obbligatorio",remote:"Controlla questo campo",email:"Inserisci un indirizzo email valido",url:"Inserisci un indirizzo web valido",date:"Inserisci una data valida",dateISO:"Inserisci una data valida (ISO)",number:"Inserisci un numero valido",digits:"Inserisci solo numeri",creditcard:"Inserisci un numero di carta di credito valido",equalTo:"Il valore non corrisponde",extension:"Inserisci un valore con un'estensione valida",maxlength:a.validator.format("Non inserire più di {0} caratteri"),minlength:a.validator.format("Inserisci almeno {0} caratteri"),rangelength:a.validator.format("Inserisci un valore compreso tra {0} e {1} caratteri"),range:a.validator.format("Inserisci un valore compreso tra {0} e {1}"),max:a.validator.format("Inserisci un valore minore o uguale a {0}"),min:a.validator.format("Inserisci un valore maggiore o uguale a {0}"),nifES:"Inserisci un NIF valido",nieES:"Inserisci un NIE valido",cifES:"Inserisci un CIF valido",currency:"Inserisci una valuta valida"}),a});
|
4
client/dist/js/jquery-validation/localization/messages_ja.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_ja.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"このフィールドは必須です。",remote:"このフィールドを修正してください。",email:"有効なEメールアドレスを入力してください。",url:"有効なURLを入力してください。",date:"有効な日付を入力してください。",dateISO:"有効な日付(ISO)を入力してください。",number:"有効な数字を入力してください。",digits:"数字のみを入力してください。",creditcard:"有効なクレジットカード番号を入力してください。",equalTo:"同じ値をもう一度入力してください。",extension:"有効な拡張子を含む値を入力してください。",maxlength:a.validator.format("{0} 文字以内で入力してください。"),minlength:a.validator.format("{0} 文字以上で入力してください。"),rangelength:a.validator.format("{0} 文字から {1} 文字までの値を入力してください。"),range:a.validator.format("{0} から {1} までの値を入力してください。"),step:a.validator.format("{0} の倍数を入力してください。"),max:a.validator.format("{0} 以下の値を入力してください。"),min:a.validator.format("{0} 以上の値を入力してください。")}),a});
|
4
client/dist/js/jquery-validation/localization/messages_ka.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_ka.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"ამ ველის შევსება აუცილებელია.",remote:"გთხოვთ მიუთითოთ სწორი მნიშვნელობა.",email:"გთხოვთ მიუთითოთ ელ-ფოსტის კორექტული მისამართი.",url:"გთხოვთ მიუთითოთ კორექტული URL.",date:"გთხოვთ მიუთითოთ კორექტული თარიღი.",dateISO:"გთხოვთ მიუთითოთ კორექტული თარიღი ISO ფორმატში.",number:"გთხოვთ მიუთითოთ ციფრი.",digits:"გთხოვთ მიუთითოთ მხოლოდ ციფრები.",creditcard:"გთხოვთ მიუთითოთ საკრედიტო ბარათის კორექტული ნომერი.",equalTo:"გთხოვთ მიუთითოთ ასეთივე მნიშვნელობა კიდევ ერთხელ.",extension:"გთხოვთ აირჩიოთ ფაილი კორექტული გაფართოებით.",maxlength:a.validator.format("დასაშვებია არაუმეტეს {0} სიმბოლო."),minlength:a.validator.format("აუცილებელია შეიყვანოთ მინიმუმ {0} სიმბოლო."),rangelength:a.validator.format("ტექსტში სიმბოლოების რაოდენობა უნდა იყოს {0}-დან {1}-მდე."),range:a.validator.format("გთხოვთ შეიყვანოთ ციფრი {0}-დან {1}-მდე."),max:a.validator.format("გთხოვთ შეიყვანოთ ციფრი რომელიც ნაკლებია ან უდრის {0}-ს."),min:a.validator.format("გთხოვთ შეიყვანოთ ციფრი რომელიც მეტია ან უდრის {0}-ს.")}),a});
|
4
client/dist/js/jquery-validation/localization/messages_kk.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_kk.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"Бұл өрісті міндетті түрде толтырыңыз.",remote:"Дұрыс мағына енгізуіңізді сұраймыз.",email:"Нақты электронды поштаңызды енгізуіңізді сұраймыз.",url:"Нақты URL-ды енгізуіңізді сұраймыз.",date:"Нақты URL-ды енгізуіңізді сұраймыз.",dateISO:"Нақты ISO форматымен сәйкес датасын енгізуіңізді сұраймыз.",number:"Күнді енгізуіңізді сұраймыз.",digits:"Тек қана сандарды енгізуіңізді сұраймыз.",creditcard:"Несие картасының нөмірін дұрыс енгізуіңізді сұраймыз.",equalTo:"Осы мәнді қайта енгізуіңізді сұраймыз.",extension:"Файлдың кеңейтуін дұрыс таңдаңыз.",maxlength:a.validator.format("Ұзындығы {0} символдан көр болмасын."),minlength:a.validator.format("Ұзындығы {0} символдан аз болмасын."),rangelength:a.validator.format("Ұзындығы {0}-{1} дейін мән енгізуіңізді сұраймыз."),range:a.validator.format("Пожалуйста, введите число от {0} до {1}. - {0} - {1} санын енгізуіңізді сұраймыз."),max:a.validator.format("{0} аз немесе тең санын енгізуіңіді сұраймыз."),min:a.validator.format("{0} көп немесе тең санын енгізуіңізді сұраймыз.")}),a});
|
4
client/dist/js/jquery-validation/localization/messages_ko.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_ko.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"필수 항목입니다.",remote:"항목을 수정하세요.",email:"유효하지 않은 E-Mail주소입니다.",url:"유효하지 않은 URL입니다.",date:"올바른 날짜를 입력하세요.",dateISO:"올바른 날짜(ISO)를 입력하세요.",number:"유효한 숫자가 아닙니다.",digits:"숫자만 입력 가능합니다.",creditcard:"신용카드 번호가 바르지 않습니다.",equalTo:"같은 값을 다시 입력하세요.",extension:"올바른 확장자가 아닙니다.",maxlength:a.validator.format("{0}자를 넘을 수 없습니다. "),minlength:a.validator.format("{0}자 이상 입력하세요."),rangelength:a.validator.format("문자 길이가 {0} 에서 {1} 사이의 값을 입력하세요."),range:a.validator.format("{0} 에서 {1} 사이의 값을 입력하세요."),max:a.validator.format("{0} 이하의 값을 입력하세요."),min:a.validator.format("{0} 이상의 값을 입력하세요.")}),a});
|
4
client/dist/js/jquery-validation/localization/messages_lt.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_lt.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"Šis laukas yra privalomas.",remote:"Prašau pataisyti šį lauką.",email:"Prašau įvesti teisingą elektroninio pašto adresą.",url:"Prašau įvesti teisingą URL.",date:"Prašau įvesti teisingą datą.",dateISO:"Prašau įvesti teisingą datą (ISO).",number:"Prašau įvesti teisingą skaičių.",digits:"Prašau naudoti tik skaitmenis.",creditcard:"Prašau įvesti teisingą kreditinės kortelės numerį.",equalTo:"Prašau įvestį tą pačią reikšmę dar kartą.",extension:"Prašau įvesti reikšmę su teisingu plėtiniu.",maxlength:a.validator.format("Prašau įvesti ne daugiau kaip {0} simbolių."),minlength:a.validator.format("Prašau įvesti bent {0} simbolius."),rangelength:a.validator.format("Prašau įvesti reikšmes, kurių ilgis nuo {0} iki {1} simbolių."),range:a.validator.format("Prašau įvesti reikšmę intervale nuo {0} iki {1}."),max:a.validator.format("Prašau įvesti reikšmę mažesnę arba lygią {0}."),min:a.validator.format("Prašau įvesti reikšmę didesnę arba lygią {0}.")}),a});
|
4
client/dist/js/jquery-validation/localization/messages_lv.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_lv.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"Šis lauks ir obligāts.",remote:"Lūdzu, pārbaudiet šo lauku.",email:"Lūdzu, ievadiet derīgu e-pasta adresi.",url:"Lūdzu, ievadiet derīgu URL adresi.",date:"Lūdzu, ievadiet derīgu datumu.",dateISO:"Lūdzu, ievadiet derīgu datumu (ISO).",number:"Lūdzu, ievadiet derīgu numuru.",digits:"Lūdzu, ievadiet tikai ciparus.",creditcard:"Lūdzu, ievadiet derīgu kredītkartes numuru.",equalTo:"Lūdzu, ievadiet to pašu vēlreiz.",extension:"Lūdzu, ievadiet vērtību ar derīgu paplašinājumu.",maxlength:a.validator.format("Lūdzu, ievadiet ne vairāk kā {0} rakstzīmes."),minlength:a.validator.format("Lūdzu, ievadiet vismaz {0} rakstzīmes."),rangelength:a.validator.format("Lūdzu ievadiet {0} līdz {1} rakstzīmes."),range:a.validator.format("Lūdzu, ievadiet skaitli no {0} līdz {1}."),max:a.validator.format("Lūdzu, ievadiet skaitli, kurš ir mazāks vai vienāds ar {0}."),min:a.validator.format("Lūdzu, ievadiet skaitli, kurš ir lielāks vai vienāds ar {0}.")}),a});
|
4
client/dist/js/jquery-validation/localization/messages_mk.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_mk.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"Полето е задолжително.",remote:"Поправете го ова поле",email:"Внесете правилна e-mail адреса",url:"Внесете правилен URL.",date:"Внесете правилен датум",dateISO:"Внесете правилен датум (ISO).",number:"Внесете правилен број.",digits:"Внесете само бројки.",creditcard:"Внесете правилен број на кредитната картичка.",equalTo:"Внесете ја истата вредност повторно.",extension:"Внесете вредност со соодветна екстензија.",maxlength:a.validator.format("Внесете максимално {0} знаци."),minlength:a.validator.format("Внесете барем {0} знаци."),rangelength:a.validator.format("Внесете вредност со должина помеѓу {0} и {1} знаци."),range:a.validator.format("Внесете вредност помеѓу {0} и {1}."),max:a.validator.format("Внесете вредност помала или еднаква на {0}."),min:a.validator.format("Внесете вредност поголема или еднаква на {0}")}),a});
|
4
client/dist/js/jquery-validation/localization/messages_my.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_my.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"Medan ini diperlukan.",remote:"Sila betulkan medan ini.",email:"Sila masukkan alamat emel yang betul.",url:"Sila masukkan URL yang betul.",date:"Sila masukkan tarikh yang betul.",dateISO:"Sila masukkan tarikh(ISO) yang betul.",number:"Sila masukkan nombor yang betul.",digits:"Sila masukkan nilai digit sahaja.",creditcard:"Sila masukkan nombor kredit kad yang betul.",equalTo:"Sila masukkan nilai yang sama semula.",extension:"Sila masukkan nilai yang telah diterima.",maxlength:a.validator.format("Sila masukkan tidak lebih dari {0} aksara."),minlength:a.validator.format("Sila masukkan sekurang-kurangnya {0} aksara."),rangelength:a.validator.format("Sila masukkan antara {0} dan {1} panjang aksara."),range:a.validator.format("Sila masukkan nilai antara {0} dan {1} aksara."),max:a.validator.format("Sila masukkan nilai yang kurang atau sama dengan {0}."),min:a.validator.format("Sila masukkan nilai yang lebih atau sama dengan {0}.")}),a});
|
4
client/dist/js/jquery-validation/localization/messages_nl.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_nl.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"Dit is een verplicht veld.",remote:"Controleer dit veld.",email:"Vul hier een geldig e-mailadres in.",url:"Vul hier een geldige URL in.",date:"Vul hier een geldige datum in.",dateISO:"Vul hier een geldige datum in (ISO-formaat).",number:"Vul hier een geldig getal in.",digits:"Vul hier alleen getallen in.",creditcard:"Vul hier een geldig creditcardnummer in.",equalTo:"Vul hier dezelfde waarde in.",extension:"Vul hier een waarde in met een geldige extensie.",maxlength:a.validator.format("Vul hier maximaal {0} tekens in."),minlength:a.validator.format("Vul hier minimaal {0} tekens in."),rangelength:a.validator.format("Vul hier een waarde in van minimaal {0} en maximaal {1} tekens."),range:a.validator.format("Vul hier een waarde in van minimaal {0} en maximaal {1}."),max:a.validator.format("Vul hier een waarde in kleiner dan of gelijk aan {0}."),min:a.validator.format("Vul hier een waarde in groter dan of gelijk aan {0}."),step:a.validator.format("Vul hier een veelvoud van {0} in."),iban:"Vul hier een geldig IBAN in.",dateNL:"Vul hier een geldige datum in.",phoneNL:"Vul hier een geldig Nederlands telefoonnummer in.",mobileNL:"Vul hier een geldig Nederlands mobiel telefoonnummer in.",postalcodeNL:"Vul hier een geldige postcode in.",bankaccountNL:"Vul hier een geldig bankrekeningnummer in.",giroaccountNL:"Vul hier een geldig gironummer in.",bankorgiroaccountNL:"Vul hier een geldig bank- of gironummer in."}),a});
|
4
client/dist/js/jquery-validation/localization/messages_no.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_no.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"Angi en verdi.",remote:"Ugyldig verdi.",email:"Angi en gyldig epostadresse.",url:"Angi en gyldig URL.",date:"Angi en gyldig dato.",dateISO:"Angi en gyldig dato (&ARING;&ARING;&ARING;&ARING;-MM-DD).",number:"Angi et gyldig tall.",digits:"Skriv kun tall.",equalTo:"Skriv samme verdi igjen.",maxlength:a.validator.format("Maksimalt {0} tegn."),minlength:a.validator.format("Minimum {0} tegn."),rangelength:a.validator.format("Angi minimum {0} og maksimum {1} tegn."),range:a.validator.format("Angi en verdi mellom {0} og {1}."),max:a.validator.format("Angi en verdi som er mindre eller lik {0}."),min:a.validator.format("Angi en verdi som er større eller lik {0}."),step:a.validator.format("Angi en verdi ganger {0}."),creditcard:"Angi et gyldig kredittkortnummer."}),a});
|
4
client/dist/js/jquery-validation/localization/messages_pl.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_pl.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"To pole jest wymagane.",remote:"Proszę o wypełnienie tego pola.",email:"Proszę o podanie prawidłowego adresu email.",url:"Proszę o podanie prawidłowego URL.",date:"Proszę o podanie prawidłowej daty.",dateISO:"Proszę o podanie prawidłowej daty (ISO).",number:"Proszę o podanie prawidłowej liczby.",digits:"Proszę o podanie samych cyfr.",creditcard:"Proszę o podanie prawidłowej karty kredytowej.",equalTo:"Proszę o podanie tej samej wartości ponownie.",extension:"Proszę o podanie wartości z prawidłowym rozszerzeniem.",nipPL:"Proszę o podanie prawidłowego numeru NIP.",phonePL:"Proszę o podanie prawidłowego numeru telefonu",maxlength:a.validator.format("Proszę o podanie nie więcej niż {0} znaków."),minlength:a.validator.format("Proszę o podanie przynajmniej {0} znaków."),rangelength:a.validator.format("Proszę o podanie wartości o długości od {0} do {1} znaków."),range:a.validator.format("Proszę o podanie wartości z przedziału od {0} do {1}."),max:a.validator.format("Proszę o podanie wartości mniejszej bądź równej {0}."),min:a.validator.format("Proszę o podanie wartości większej bądź równej {0}."),pattern:a.validator.format("Pole zawiera niedozwolone znaki.")}),a});
|
4
client/dist/js/jquery-validation/localization/messages_pt_BR.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_pt_BR.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"Este campo é requerido.",remote:"Por favor, corrija este campo.",email:"Por favor, forneça um endereço de email válido.",url:"Por favor, forneça uma URL válida.",date:"Por favor, forneça uma data válida.",dateISO:"Por favor, forneça uma data válida (ISO).",number:"Por favor, forneça um número válido.",digits:"Por favor, forneça somente dígitos.",creditcard:"Por favor, forneça um cartão de crédito válido.",equalTo:"Por favor, forneça o mesmo valor novamente.",maxlength:a.validator.format("Por favor, forneça não mais que {0} caracteres."),minlength:a.validator.format("Por favor, forneça ao menos {0} caracteres."),rangelength:a.validator.format("Por favor, forneça um valor entre {0} e {1} caracteres de comprimento."),range:a.validator.format("Por favor, forneça um valor entre {0} e {1}."),max:a.validator.format("Por favor, forneça um valor menor ou igual a {0}."),min:a.validator.format("Por favor, forneça um valor maior ou igual a {0}."),step:a.validator.format("Por favor, forneça um valor múltiplo de {0}."),maxWords:a.validator.format("Por favor, forneça com {0} palavras ou menos."),minWords:a.validator.format("Por favor, forneça pelo menos {0} palavras."),rangeWords:a.validator.format("Por favor, forneça entre {0} e {1} palavras."),accept:"Por favor, forneça um tipo válido.",alphanumeric:"Por favor, forneça somente com letras, números e sublinhados.",bankaccountNL:"Por favor, forneça com um número de conta bancária válida.",bankorgiroaccountNL:"Por favor, forneça um banco válido ou número de conta.",bic:"Por favor, forneça um código BIC válido.",cifES:"Por favor, forneça um código CIF válido.",creditcardtypes:"Por favor, forneça um número de cartão de crédito válido.",currency:"Por favor, forneça uma moeda válida.",dateFA:"Por favor, forneça uma data correta.",dateITA:"Por favor, forneça uma data correta.",dateNL:"Por favor, forneça uma data correta.",extension:"Por favor, forneça um valor com uma extensão válida.",giroaccountNL:"Por favor, forneça um número de conta corrente válido.",iban:"Por favor, forneça um código IBAN válido.",integer:"Por favor, forneça um número não decimal.",ipv4:"Por favor, forneça um IPv4 válido.",ipv6:"Por favor, forneça um IPv6 válido.",lettersonly:"Por favor, forneça apenas com letras.",letterswithbasicpunc:"Por favor, forneça apenas letras ou pontuações.",mobileNL:"Por favor, forneceça um número válido de telefone.",mobileUK:"Por favor, forneceça um número válido de telefone.",nieES:"Por favor, forneça um NIE válido.",nifES:"Por favor, forneça um NIF válido.",nowhitespace:"Por favor, não utilize espaços em branco.",pattern:"O formato fornecido é inválido.",phoneNL:"Por favor, forneça um número de telefone válido.",phoneUK:"Por favor, forneça um número de telefone válido.",phoneUS:"Por favor, forneça um número de telefone válido.",phonesUK:"Por favor, forneça um número de telefone válido.",postalCodeCA:"Por favor, forneça um número de código postal válido.",postalcodeIT:"Por favor, forneça um número de código postal válido.",postalcodeNL:"Por favor, forneça um número de código postal válido.",postcodeUK:"Por favor, forneça um número de código postal válido.",postalcodeBR:"Por favor, forneça um CEP válido.",require_from_group:a.validator.format("Por favor, forneça pelo menos {0} destes campos."),skip_or_fill_minimum:a.validator.format("Por favor, optar entre ignorar esses campos ou preencher pelo menos {0} deles."),stateUS:"Por favor, forneça um estado válido.",strippedminlength:a.validator.format("Por favor, forneça pelo menos {0} caracteres."),time:"Por favor, forneça um horário válido, no intervado de 00:00 a 23:59.",time12h:"Por favor, forneça um horário válido, no intervado de 01:00 a 12:59 am/pm.",url2:"Por favor, forneça uma URL válida.",vinUS:"O número de identificação de veículo informado (VIN) é inválido.",zipcodeUS:"Por favor, forneça um código postal americano válido.",ziprange:"O código postal deve estar entre 902xx-xxxx e 905xx-xxxx",cpfBR:"Por favor, forneça um CPF válido.",nisBR:"Por favor, forneça um NIS/PIS válido",cnhBR:"Por favor, forneça um CNH válido.",cnpjBR:"Por favor, forneça um CNPJ válido."}),a});
|
4
client/dist/js/jquery-validation/localization/messages_pt_PT.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_pt_PT.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"Campo de preenchimento obrigatório.",remote:"Por favor, corrija este campo.",email:"Por favor, introduza um endereço eletrónico válido.",url:"Por favor, introduza um URL válido.",date:"Por favor, introduza uma data válida.",dateISO:"Por favor, introduza uma data válida (ISO).",number:"Por favor, introduza um número válido.",digits:"Por favor, introduza apenas dígitos.",creditcard:"Por favor, introduza um número de cartão de crédito válido.",equalTo:"Por favor, introduza de novo o mesmo valor.",extension:"Por favor, introduza um ficheiro com uma extensão válida.",maxlength:a.validator.format("Por favor, não introduza mais do que {0} caracteres."),minlength:a.validator.format("Por favor, introduza pelo menos {0} caracteres."),rangelength:a.validator.format("Por favor, introduza entre {0} e {1} caracteres."),range:a.validator.format("Por favor, introduza um valor entre {0} e {1}."),max:a.validator.format("Por favor, introduza um valor menor ou igual a {0}."),min:a.validator.format("Por favor, introduza um valor maior ou igual a {0}."),nifES:"Por favor, introduza um NIF válido.",nieES:"Por favor, introduza um NIE válido.",cifES:"Por favor, introduza um CIF válido."}),a});
|
4
client/dist/js/jquery-validation/localization/messages_ro.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_ro.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"Acest câmp este obligatoriu.",remote:"Te rugăm să completezi acest câmp.",email:"Te rugăm să introduci o adresă de email validă",url:"Te rugăm sa introduci o adresă URL validă.",date:"Te rugăm să introduci o dată corectă.",dateISO:"Te rugăm să introduci o dată (ISO) corectă.",number:"Te rugăm să introduci un număr întreg valid.",digits:"Te rugăm să introduci doar cifre.",creditcard:"Te rugăm să introduci un numar de carte de credit valid.",equalTo:"Te rugăm să reintroduci valoarea.",extension:"Te rugăm să introduci o valoare cu o extensie validă.",maxlength:a.validator.format("Te rugăm să nu introduci mai mult de {0} caractere."),minlength:a.validator.format("Te rugăm să introduci cel puțin {0} caractere."),rangelength:a.validator.format("Te rugăm să introduci o valoare între {0} și {1} caractere."),range:a.validator.format("Te rugăm să introduci o valoare între {0} și {1}."),max:a.validator.format("Te rugăm să introduci o valoare egal sau mai mică decât {0}."),min:a.validator.format("Te rugăm să introduci o valoare egal sau mai mare decât {0}.")}),a});
|
4
client/dist/js/jquery-validation/localization/messages_ru.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_ru.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"Это поле необходимо заполнить.",remote:"Пожалуйста, введите правильное значение.",email:"Пожалуйста, введите корректный адрес электронной почты.",url:"Пожалуйста, введите корректный URL.",date:"Пожалуйста, введите корректную дату.",dateISO:"Пожалуйста, введите корректную дату в формате ISO.",number:"Пожалуйста, введите число.",digits:"Пожалуйста, вводите только цифры.",creditcard:"Пожалуйста, введите правильный номер кредитной карты.",equalTo:"Пожалуйста, введите такое же значение ещё раз.",extension:"Пожалуйста, выберите файл с правильным расширением.",maxlength:a.validator.format("Пожалуйста, введите не больше {0} символов."),minlength:a.validator.format("Пожалуйста, введите не меньше {0} символов."),rangelength:a.validator.format("Пожалуйста, введите значение длиной от {0} до {1} символов."),range:a.validator.format("Пожалуйста, введите число от {0} до {1}."),max:a.validator.format("Пожалуйста, введите число, меньшее или равное {0}."),min:a.validator.format("Пожалуйста, введите число, большее или равное {0}.")}),a});
|
4
client/dist/js/jquery-validation/localization/messages_sd.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_sd.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"هنن جاين جي ضرورت آهي",remote:"هنن جاين جي ضرورت آهي",email:"لکيل اي ميل غلط آهي",url:"لکيل ايڊريس غلط آهي",date:"لکيل تاريخ غلط آهي",dateISO:"جي معيار جي مطابق نه آهي (ISO) لکيل تاريخ",number:"لکيل انگ صحيح ناهي",digits:"رڳو انگ داخل ڪري سگهجي ٿو",creditcard:"لکيل ڪارڊ نمبر صحيح نه آهي",equalTo:"داخل ٿيل ڀيٽ صحيح نه آهي",extension:"لکيل غلط آهي",maxlength:a.validator.format("وڌ کان وڌ {0} جي داخلا ڪري سگهجي ٿي"),minlength:a.validator.format("گهٽ ۾ گهٽ {0} جي داخلا ڪرڻ ضروري آهي"),rangelength:a.validator.format("داخلا جو {0} ۽ {1}جي وچ ۾ هجڻ ضروري آهي"),range:a.validator.format("داخلا جو {0} ۽ {1}جي وچ ۾ هجڻ ضروري آهي"),max:a.validator.format("وڌ کان وڌ {0} جي داخلا ڪري سگهجي ٿي"),min:a.validator.format("گهٽ ۾ گهٽ {0} جي داخلا ڪرڻ ضروري آهي")}),a});
|
4
client/dist/js/jquery-validation/localization/messages_si.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_si.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"To polje je obvezno.",remote:"Vpis v tem polju ni v pravi obliki.",email:"Prosimo, vnesite pravi email naslov.",url:"Prosimo, vnesite pravi URL.",date:"Prosimo, vnesite pravi datum.",dateISO:"Prosimo, vnesite pravi datum (ISO).",number:"Prosimo, vnesite pravo številko.",digits:"Prosimo, vnesite samo številke.",creditcard:"Prosimo, vnesite pravo številko kreditne kartice.",equalTo:"Prosimo, ponovno vnesite enako vsebino.",extension:"Prosimo, vnesite vsebino z pravo končnico.",maxlength:a.validator.format("Prosimo, da ne vnašate več kot {0} znakov."),minlength:a.validator.format("Prosimo, vnesite vsaj {0} znakov."),rangelength:a.validator.format("Prosimo, vnesite od {0} do {1} znakov."),range:a.validator.format("Prosimo, vnesite vrednost med {0} in {1}."),max:a.validator.format("Prosimo, vnesite vrednost manjšo ali enako {0}."),min:a.validator.format("Prosimo, vnesite vrednost večjo ali enako {0}.")}),a});
|
4
client/dist/js/jquery-validation/localization/messages_sk.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_sk.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"Povinné zadať.",maxlength:a.validator.format("Maximálne {0} znakov."),minlength:a.validator.format("Minimálne {0} znakov."),rangelength:a.validator.format("Minimálne {0} a maximálne {1} znakov."),email:"E-mailová adresa musí byť platná.",url:"URL musí byť platná.",date:"Musí byť dátum.",number:"Musí byť číslo.",digits:"Môže obsahovať iba číslice.",equalTo:"Dve hodnoty sa musia rovnať.",range:a.validator.format("Musí byť medzi {0} a {1}."),max:a.validator.format("Nemôže byť viac ako {0}."),min:a.validator.format("Nemôže byť menej ako {0}."),creditcard:"Číslo platobnej karty musí byť platné.",step:a.validator.format("Musí byť násobkom čísla {0}.")}),a});
|
4
client/dist/js/jquery-validation/localization/messages_sl.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_sl.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"To polje je obvezno.",remote:"Prosimo popravite to polje.",email:"Prosimo vnesite veljaven email naslov.",url:"Prosimo vnesite veljaven URL naslov.",date:"Prosimo vnesite veljaven datum.",dateISO:"Prosimo vnesite veljaven ISO datum.",number:"Prosimo vnesite veljavno število.",digits:"Prosimo vnesite samo števila.",creditcard:"Prosimo vnesite veljavno številko kreditne kartice.",equalTo:"Prosimo ponovno vnesite vrednost.",extension:"Prosimo vnesite vrednost z veljavno končnico.",maxlength:a.validator.format("Prosimo vnesite največ {0} znakov."),minlength:a.validator.format("Prosimo vnesite najmanj {0} znakov."),rangelength:a.validator.format("Prosimo vnesite najmanj {0} in največ {1} znakov."),range:a.validator.format("Prosimo vnesite vrednost med {0} in {1}."),max:a.validator.format("Prosimo vnesite vrednost manjše ali enako {0}."),min:a.validator.format("Prosimo vnesite vrednost večje ali enako {0}.")}),a});
|
4
client/dist/js/jquery-validation/localization/messages_sr.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_sr.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"Поље је обавезно.",remote:"Средите ово поље.",email:"Унесите исправну и-мејл адресу.",url:"Унесите исправан URL.",date:"Унесите исправан датум.",dateISO:"Унесите исправан датум (ISO).",number:"Унесите исправан број.",digits:"Унесите само цифе.",creditcard:"Унесите исправан број кредитне картице.",equalTo:"Унесите исту вредност поново.",extension:"Унесите вредност са одговарајућом екстензијом.",maxlength:a.validator.format("Унесите мање од {0} карактера."),minlength:a.validator.format("Унесите барем {0} карактера."),rangelength:a.validator.format("Унесите вредност дугачку између {0} и {1} карактера."),range:a.validator.format("Унесите вредност између {0} и {1}."),max:a.validator.format("Унесите вредност мању или једнаку {0}."),min:a.validator.format("Унесите вредност већу или једнаку {0}."),step:a.validator.format("Унесите вредност која је умножак броја {0}.")}),a});
|
4
client/dist/js/jquery-validation/localization/messages_sr_lat.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_sr_lat.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"Polje je obavezno.",remote:"Sredite ovo polje.",email:"Unesite ispravnu e-mail adresu",url:"Unesite ispravan URL.",date:"Unesite ispravan datum.",dateISO:"Unesite ispravan datum (ISO).",number:"Unesite ispravan broj.",digits:"Unesite samo cifre.",creditcard:"Unesite ispravan broj kreditne kartice.",equalTo:"Unesite istu vrednost ponovo.",extension:"Unesite vrednost sa odgovarajućom ekstenzijom.",maxlength:a.validator.format("Unesite manje od {0} karaktera."),minlength:a.validator.format("Unesite barem {0} karaktera."),rangelength:a.validator.format("Unesite vrednost dugačku između {0} i {1} karaktera."),range:a.validator.format("Unesite vrednost između {0} i {1}."),max:a.validator.format("Unesite vrednost manju ili jednaku {0}."),min:a.validator.format("Unesite vrednost veću ili jednaku {0}."),step:a.validator.format("Unesite vrednost koja je umnožak broja {0}.")}),a});
|
4
client/dist/js/jquery-validation/localization/messages_sv.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_sv.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"Detta fält är obligatoriskt.",remote:"Var snäll och åtgärda detta fält.",maxlength:a.validator.format("Du får ange högst {0} tecken."),minlength:a.validator.format("Du måste ange minst {0} tecken."),rangelength:a.validator.format("Ange minst {0} och max {1} tecken."),email:"Ange en korrekt e-postadress.",url:"Ange en korrekt URL.",date:"Ange ett korrekt datum.",dateISO:"Ange ett korrekt datum (ÅÅÅÅ-MM-DD).",number:"Ange ett korrekt nummer.",digits:"Ange endast siffror.",equalTo:"Ange samma värde igen.",range:a.validator.format("Ange ett värde mellan {0} och {1}."),max:a.validator.format("Ange ett värde som är mindre eller lika med {0}."),min:a.validator.format("Ange ett värde som är större eller lika med {0}."),creditcard:"Ange ett korrekt kreditkortsnummer.",pattern:"Ogiltigt format."}),a});
|
4
client/dist/js/jquery-validation/localization/messages_th.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_th.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"โปรดระบุ",remote:"โปรดแก้ไขให้ถูกต้อง",email:"โปรดระบุที่อยู่อีเมล์ที่ถูกต้อง",url:"โปรดระบุ URL ที่ถูกต้อง",date:"โปรดระบุวันที่ ที่ถูกต้อง",dateISO:"โปรดระบุวันที่ ที่ถูกต้อง (ระบบ ISO).",number:"โปรดระบุทศนิยมที่ถูกต้อง",digits:"โปรดระบุจำนวนเต็มที่ถูกต้อง",creditcard:"โปรดระบุรหัสบัตรเครดิตที่ถูกต้อง",equalTo:"โปรดระบุค่าเดิมอีกครั้ง",extension:"โปรดระบุค่าที่มีส่วนขยายที่ถูกต้อง",maxlength:a.validator.format("โปรดอย่าระบุค่าที่ยาวกว่า {0} อักขระ"),minlength:a.validator.format("โปรดอย่าระบุค่าที่สั้นกว่า {0} อักขระ"),rangelength:a.validator.format("โปรดอย่าระบุค่าความยาวระหว่าง {0} ถึง {1} อักขระ"),range:a.validator.format("โปรดระบุค่าระหว่าง {0} และ {1}"),max:a.validator.format("โปรดระบุค่าน้อยกว่าหรือเท่ากับ {0}"),min:a.validator.format("โปรดระบุค่ามากกว่าหรือเท่ากับ {0}")}),a});
|
4
client/dist/js/jquery-validation/localization/messages_tj.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_tj.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"Ворид кардани ин филд маҷбури аст.",remote:"Илтимос, маълумоти саҳеҳ ворид кунед.",email:"Илтимос, почтаи электронии саҳеҳ ворид кунед.",url:"Илтимос, URL адреси саҳеҳ ворид кунед.",date:"Илтимос, таърихи саҳеҳ ворид кунед.",dateISO:"Илтимос, таърихи саҳеҳи (ISO)ӣ ворид кунед.",number:"Илтимос, рақамҳои саҳеҳ ворид кунед.",digits:"Илтимос, танҳо рақам ворид кунед.",creditcard:"Илтимос, кредит карди саҳеҳ ворид кунед.",equalTo:"Илтимос, миқдори баробар ворид кунед.",extension:"Илтимос, қофияи файлро дуруст интихоб кунед",maxlength:a.validator.format("Илтимос, бештар аз {0} рамз ворид накунед."),minlength:a.validator.format("Илтимос, камтар аз {0} рамз ворид накунед."),rangelength:a.validator.format("Илтимос, камтар аз {0} ва зиёда аз {1} рамз ворид кунед."),range:a.validator.format("Илтимос, аз {0} то {1} рақам зиёд ворид кунед."),max:a.validator.format("Илтимос, бештар аз {0} рақам ворид накунед."),min:a.validator.format("Илтимос, камтар аз {0} рақам ворид накунед.")}),a});
|
4
client/dist/js/jquery-validation/localization/messages_tr.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_tr.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"Bu alanın doldurulması zorunludur.",remote:"Lütfen bu alanı düzeltin.",email:"Lütfen geçerli bir e-posta adresi giriniz.",url:"Lütfen geçerli bir web adresi (URL) giriniz.",date:"Lütfen geçerli bir tarih giriniz.",dateISO:"Lütfen geçerli bir tarih giriniz(ISO formatında)",number:"Lütfen geçerli bir sayı giriniz.",digits:"Lütfen sadece sayısal karakterler giriniz.",creditcard:"Lütfen geçerli bir kredi kartı giriniz.",equalTo:"Lütfen aynı değeri tekrar giriniz.",extension:"Lütfen geçerli uzantıya sahip bir değer giriniz.",phone:"Lütfen geçerli bir telefon numarası giriniz.",maxlength:a.validator.format("Lütfen en fazla {0} karakter uzunluğunda bir değer giriniz."),minlength:a.validator.format("Lütfen en az {0} karakter uzunluğunda bir değer giriniz."),rangelength:a.validator.format("Lütfen en az {0} ve en fazla {1} uzunluğunda bir değer giriniz."),range:a.validator.format("Lütfen {0} ile {1} arasında bir değer giriniz."),max:a.validator.format("Lütfen {0} değerine eşit ya da daha küçük bir değer giriniz."),min:a.validator.format("Lütfen {0} değerine eşit ya da daha büyük bir değer giriniz."),require_from_group:a.validator.format("Lütfen bu alanların en az {0} tanesini doldurunuz.")}),a});
|
4
client/dist/js/jquery-validation/localization/messages_uk.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_uk.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"Це поле необхідно заповнити.",remote:"Будь ласка, введіть правильне значення.",email:"Будь ласка, введіть коректну адресу електронної пошти.",url:"Будь ласка, введіть коректний URL.",date:"Будь ласка, введіть коректну дату.",dateISO:"Будь ласка, введіть коректну дату у форматі ISO.",number:"Будь ласка, введіть число.",digits:"Вводите потрібно лише цифри.",creditcard:"Будь ласка, введіть правильний номер кредитної карти.",equalTo:"Будь ласка, введіть таке ж значення ще раз.",extension:"Будь ласка, виберіть файл з правильним розширенням.",maxlength:a.validator.format("Будь ласка, введіть не більше {0} символів."),minlength:a.validator.format("Будь ласка, введіть не менше {0} символів."),rangelength:a.validator.format("Будь ласка, введіть значення довжиною від {0} до {1} символів."),range:a.validator.format("Будь ласка, введіть число від {0} до {1}."),max:a.validator.format("Будь ласка, введіть число, менше або рівно {0}."),min:a.validator.format("Будь ласка, введіть число, більше або рівно {0}.")}),a});
|
4
client/dist/js/jquery-validation/localization/messages_ur.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_ur.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"ان معلومات کا اندراج ضروری ہے",remote:"ان معلومات کا اندراج ضروری ہے",email:"درج کی ہوئی ای میل درست نہیں ہے",url:"درج کیا گیا پتہ درست نہیں ہے",date:"درج کی گئی تاریخ درست نہیں ہے",dateISO:"معیار کے مطابق نہیں ہے (ISO) درج کی گئی تاریخ",number:"درج کیےگئے ہندسے درست نہیں ہیں",digits:"صرف ہندسے اندراج کئے جاسکتے ہیں",creditcard:"درج کیا گیا کارڈ نمبر درست نہیں ہے",equalTo:"اندراج کا موازنہ درست نہیں ہے",extension:"اندراج درست نہیں ہے",maxlength:a.validator.format("زیادہ سے زیادہ {0} کا اندراج کر سکتے ہیں"),minlength:a.validator.format("کم سے کم {0} کا اندراج کرنا ضروری ہے"),rangelength:a.validator.format("اندراج کا {0} اور {1}کے درمیان ہونا ضروری ہے"),range:a.validator.format("اندراج کا {0} اور {1} کے درمیان ہونا ضروری ہے"),max:a.validator.format("زیادہ سے زیادہ {0} کا اندراج کر سکتے ہیں"),min:a.validator.format("کم سے کم {0} کا اندراج کرنا ضروری ہے")}),a});
|
4
client/dist/js/jquery-validation/localization/messages_vi.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_vi.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"Hãy nhập.",remote:"Hãy sửa cho đúng.",email:"Hãy nhập email.",url:"Hãy nhập URL.",date:"Hãy nhập ngày.",dateISO:"Hãy nhập ngày (ISO).",number:"Hãy nhập số.",digits:"Hãy nhập chữ số.",creditcard:"Hãy nhập số thẻ tín dụng.",equalTo:"Hãy nhập thêm lần nữa.",extension:"Phần mở rộng không đúng.",maxlength:a.validator.format("Hãy nhập từ {0} kí tự trở xuống."),minlength:a.validator.format("Hãy nhập từ {0} kí tự trở lên."),rangelength:a.validator.format("Hãy nhập từ {0} đến {1} kí tự."),range:a.validator.format("Hãy nhập từ {0} đến {1}."),max:a.validator.format("Hãy nhập từ {0} trở xuống."),min:a.validator.format("Hãy nhập từ {0} trở lên.")}),a});
|
4
client/dist/js/jquery-validation/localization/messages_zh.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_zh.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"这是必填字段",remote:"请修正此字段",email:"请输入有效的电子邮件地址",url:"请输入有效的网址",date:"请输入有效的日期",dateISO:"请输入有效的日期 (YYYY-MM-DD)",number:"请输入有效的数字",digits:"只能输入数字",creditcard:"请输入有效的信用卡号码",equalTo:"你的输入不相同",extension:"请输入有效的后缀",maxlength:a.validator.format("最多可以输入 {0} 个字符"),minlength:a.validator.format("最少要输入 {0} 个字符"),rangelength:a.validator.format("请输入长度在 {0} 到 {1} 之间的字符串"),range:a.validator.format("请输入范围在 {0} 到 {1} 之间的数值"),step:a.validator.format("请输入 {0} 的整数倍值"),max:a.validator.format("请输入不大于 {0} 的数值"),min:a.validator.format("请输入不小于 {0} 的数值")}),a});
|
4
client/dist/js/jquery-validation/localization/messages_zh_TW.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/messages_zh_TW.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"必須填寫",remote:"請修正此欄位",email:"請輸入有效的電子郵件",url:"請輸入有效的網址",date:"請輸入有效的日期",dateISO:"請輸入有效的日期 (YYYY-MM-DD)",number:"請輸入正確的數值",digits:"只可輸入數字",creditcard:"請輸入有效的信用卡號碼",equalTo:"請重複輸入一次",extension:"請輸入有效的後綴",maxlength:a.validator.format("最多 {0} 個字"),minlength:a.validator.format("最少 {0} 個字"),rangelength:a.validator.format("請輸入長度為 {0} 至 {1} 之間的字串"),range:a.validator.format("請輸入 {0} 至 {1} 之間的數值"),step:a.validator.format("請輸入 {0} 的整數倍值"),max:a.validator.format("請輸入不大於 {0} 的數值"),min:a.validator.format("請輸入不小於 {0} 的數值")}),a});
|
4
client/dist/js/jquery-validation/localization/methods_de.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/methods_de.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.methods,{date:function(a,b){return this.optional(b)||/^\d\d?\.\d\d?\.\d\d\d?\d?$/.test(a)},number:function(a,b){return this.optional(b)||/^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test(a)}}),a});
|
4
client/dist/js/jquery-validation/localization/methods_es_CL.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/methods_es_CL.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.methods,{date:function(a,b){return this.optional(b)||/^\d\d?\-\d\d?\-\d\d\d?\d?$/.test(a)},number:function(a,b){return this.optional(b)||/^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test(a)}}),a});
|
4
client/dist/js/jquery-validation/localization/methods_fi.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/methods_fi.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.methods,{date:function(a,b){return this.optional(b)||/^\d{1,2}\.\d{1,2}\.\d{4}$/.test(a)},number:function(a,b){return this.optional(b)||/^-?(?:\d+)(?:,\d+)?$/.test(a)}}),a});
|
4
client/dist/js/jquery-validation/localization/methods_it.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/methods_it.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.methods,{date:function(a,b){return this.optional(b)||/^\d\d?\-\d\d?\-\d\d\d?\d?$/.test(a)},number:function(a,b){return this.optional(b)||/^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test(a)}}),a});
|
4
client/dist/js/jquery-validation/localization/methods_nl.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/methods_nl.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.methods,{date:function(a,b){return this.optional(b)||/^\d\d?[\.\/\-]\d\d?[\.\/\-]\d\d\d?\d?$/.test(a)},number:function(a,b){return this.optional(b)||/^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test(a)}}),a});
|
4
client/dist/js/jquery-validation/localization/methods_pt.min.js
vendored
Normal file
4
client/dist/js/jquery-validation/localization/methods_pt.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/*! jQuery Validation Plugin - v1.19.3 - 1/9/2021
|
||||||
|
* https://jqueryvalidation.org/
|
||||||
|
* Copyright (c) 2021 Jörn Zaefferer; Licensed MIT */
|
||||||
|
!function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.methods,{date:function(a,b){return this.optional(b)||/^\d\d?\/\d\d?\/\d\d\d?\d?$/.test(a)}}),a});
|
2
client/dist/js/jquery.min.js
vendored
Normal file
2
client/dist/js/jquery.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
client/dist/styles/cms.css
vendored
Normal file
1
client/dist/styles/cms.css
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
.cms table.ss-gridfield-table tr.spam{background-color:#ffd8d8}.cms table.ss-gridfield-table tr.spam:hover{background-color:#fff2f2}
|
4
client/lang/src/en.json
Normal file
4
client/lang/src/en.json
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"CommentsInterface_singlecomment_ss.DELETE_CONFIRMATION": "Are you sure you want to delete this comment?",
|
||||||
|
"CommentsInterface_singlecomment_ss.AJAX_ERROR": "An error occurred whilst updating the comment",
|
||||||
|
}
|
133
client/src/legacy/CommentsInterface.js
Executable file
133
client/src/legacy/CommentsInterface.js
Executable file
@ -0,0 +1,133 @@
|
|||||||
|
/**
|
||||||
|
* @package comments
|
||||||
|
*/
|
||||||
|
(function($) {
|
||||||
|
// The above closure encapsulates the $ variable away from the global scope
|
||||||
|
// and the one below is the `$(document).ready(...)` shorthand.
|
||||||
|
$(function() {
|
||||||
|
// Override the default URL validator in order to extend it to allow protocol-less URLs
|
||||||
|
$.validator.methods.url = function( value, element ) {
|
||||||
|
// This line is copied directly from the jQuery.validation source (version 1.19.0)
|
||||||
|
// the only change is a single question mark added here ---------v
|
||||||
|
return this.optional( element ) || /^(?:(?:(?:https?|ftp):)?\/\/)?(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[/?#]\S*)?$/i.test( value );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enable form validation
|
||||||
|
*/
|
||||||
|
$('.comments-holder-container form').each(function() {
|
||||||
|
$(this).validate({
|
||||||
|
|
||||||
|
// Ignore hidden elements in this form
|
||||||
|
ignore: ':hidden',
|
||||||
|
|
||||||
|
// Use default 'required' for error labels
|
||||||
|
errorClass: "required",
|
||||||
|
|
||||||
|
// Use span instead of labels
|
||||||
|
errorElement: "span",
|
||||||
|
|
||||||
|
// On error, scroll to the invalid element
|
||||||
|
invalidHandler : function(form, validator){
|
||||||
|
$('html, body').animate({
|
||||||
|
scrollTop: $(validator.errorList[0].element).offset().top - 30
|
||||||
|
}, 200);
|
||||||
|
},
|
||||||
|
|
||||||
|
// Ensure any new error message has the correct class and placement
|
||||||
|
errorPlacement: function(error, element) {
|
||||||
|
error
|
||||||
|
.addClass('message')
|
||||||
|
.insertAfter(element);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hide comment reply forms by default (unless visiting via permalink)
|
||||||
|
*/
|
||||||
|
$(".comment")
|
||||||
|
.children('.info')
|
||||||
|
.not(window.document.location.hash)
|
||||||
|
.nextAll(".comment-replies-container")
|
||||||
|
.children(".comment-reply-form-holder")
|
||||||
|
.hide();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Toggle on/off reply form
|
||||||
|
*/
|
||||||
|
$('.comments-holder').on('click', '.comment-reply-link', function(e) {
|
||||||
|
var allForms = $('.comment-reply-form-holder');
|
||||||
|
var formID = '#' + $(this).attr('aria-controls');
|
||||||
|
var form = $(formID).closest('.comment-reply-form-holder');
|
||||||
|
|
||||||
|
$(this).attr('aria-expanded', function (i, attr) {
|
||||||
|
return attr == 'true' ? 'false' : 'true'
|
||||||
|
});
|
||||||
|
|
||||||
|
// Prevent focus
|
||||||
|
e.preventDefault();
|
||||||
|
|
||||||
|
if(form.is(':visible')) {
|
||||||
|
allForms.slideUp();
|
||||||
|
} else {
|
||||||
|
allForms.not(form).slideUp();
|
||||||
|
form.slideDown();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clicking one of the metalinks performs the operation via ajax
|
||||||
|
* this inclues the spam and approve links
|
||||||
|
*/
|
||||||
|
$('.comments-holder .comments-list').on('click', 'div.comment-moderation-options a', function(e) {
|
||||||
|
e.stopPropagation();
|
||||||
|
|
||||||
|
var link = $(this);
|
||||||
|
if (link.hasClass('delete')) {
|
||||||
|
var confirmationMsg = ss.i18n._t('CommentsInterface_singlecomment_ss.DELETE_CONFIRMATION');
|
||||||
|
var confirmation = window.confirm(confirmationMsg);
|
||||||
|
if (!confirmation) {
|
||||||
|
e.preventDefault();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var comment = link.parents('.comment:first');
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: $(this).attr('href'),
|
||||||
|
cache: false,
|
||||||
|
success: function(html){
|
||||||
|
if(link.hasClass('ham')) {
|
||||||
|
// comment has been marked as not spam
|
||||||
|
comment.html(html);
|
||||||
|
comment.removeClass('spam');
|
||||||
|
}
|
||||||
|
else if(link.hasClass('approve')) {
|
||||||
|
// comment has been approved
|
||||||
|
comment.html(html);
|
||||||
|
comment.removeClass('unmoderated');
|
||||||
|
}
|
||||||
|
else if(link.hasClass('delete')) {
|
||||||
|
comment.fadeOut(1000, function() {
|
||||||
|
comment.remove();
|
||||||
|
|
||||||
|
if($('.comments-holder .comments-list').children().length === 0) {
|
||||||
|
$('.no-comments-yet').show();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else if(link.hasClass('spam')) {
|
||||||
|
comment.html(html).addClass('spam');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
failure: function(html) {
|
||||||
|
var errorMsg = ss.i18n._t('CommentsInterface_singlecomment_ss.AJAX_ERROR');
|
||||||
|
alert(errorMsg);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
e.preventDefault();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
})(jQuery);
|
@ -13,25 +13,24 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"require": {
|
"require": {
|
||||||
"silverstripe/framework": "^4.0",
|
"php": "^7.4 || ^8.0",
|
||||||
"colymba/gridfield-bulk-editing-tools": "^3.0"
|
"silverstripe/framework": "^4.13",
|
||||||
|
"colymba/gridfield-bulk-editing-tools": "^3.0.0-beta4"
|
||||||
},
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
"ezyang/htmlpurifier": "Standards compliant HTML filter written in PHP",
|
"ezyang/htmlpurifier": "Standards compliant HTML filter written in PHP",
|
||||||
"silverstripe/cms": "The SilverStripe Content Management System"
|
"silverstripe/cms": "The SilverStripe Content Management System"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"phpunit/phpunit": "^5.7",
|
"phpunit/phpunit": "^9.5",
|
||||||
"squizlabs/php_codesniffer": "^3.0"
|
"squizlabs/php_codesniffer": "^3.0",
|
||||||
|
"ezyang/htmlpurifier": "^4.14"
|
||||||
},
|
},
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
|
||||||
"dev-master": "3.x-dev"
|
|
||||||
},
|
|
||||||
"expose": [
|
"expose": [
|
||||||
"css",
|
"client/dist",
|
||||||
"javascript",
|
"client/lang",
|
||||||
"thirdparty"
|
"css"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
@ -1,76 +1 @@
|
|||||||
/******/ (function(modules) { // webpackBootstrap
|
/** Deprecated. Remove in 4.0 release. */
|
||||||
/******/ // The module cache
|
|
||||||
/******/ var installedModules = {};
|
|
||||||
/******/
|
|
||||||
/******/ // The require function
|
|
||||||
/******/ function __webpack_require__(moduleId) {
|
|
||||||
/******/
|
|
||||||
/******/ // Check if module is in cache
|
|
||||||
/******/ if(installedModules[moduleId]) {
|
|
||||||
/******/ return installedModules[moduleId].exports;
|
|
||||||
/******/ }
|
|
||||||
/******/ // Create a new module (and put it into the cache)
|
|
||||||
/******/ var module = installedModules[moduleId] = {
|
|
||||||
/******/ i: moduleId,
|
|
||||||
/******/ l: false,
|
|
||||||
/******/ exports: {}
|
|
||||||
/******/ };
|
|
||||||
/******/
|
|
||||||
/******/ // Execute the module function
|
|
||||||
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
|
||||||
/******/
|
|
||||||
/******/ // Flag the module as loaded
|
|
||||||
/******/ module.l = true;
|
|
||||||
/******/
|
|
||||||
/******/ // Return the exports of the module
|
|
||||||
/******/ return module.exports;
|
|
||||||
/******/ }
|
|
||||||
/******/
|
|
||||||
/******/
|
|
||||||
/******/ // expose the modules object (__webpack_modules__)
|
|
||||||
/******/ __webpack_require__.m = modules;
|
|
||||||
/******/
|
|
||||||
/******/ // expose the module cache
|
|
||||||
/******/ __webpack_require__.c = installedModules;
|
|
||||||
/******/
|
|
||||||
/******/ // identity function for calling harmony imports with the correct context
|
|
||||||
/******/ __webpack_require__.i = function(value) { return value; };
|
|
||||||
/******/
|
|
||||||
/******/ // define getter function for harmony exports
|
|
||||||
/******/ __webpack_require__.d = function(exports, name, getter) {
|
|
||||||
/******/ if(!__webpack_require__.o(exports, name)) {
|
|
||||||
/******/ Object.defineProperty(exports, name, {
|
|
||||||
/******/ configurable: false,
|
|
||||||
/******/ enumerable: true,
|
|
||||||
/******/ get: getter
|
|
||||||
/******/ });
|
|
||||||
/******/ }
|
|
||||||
/******/ };
|
|
||||||
/******/
|
|
||||||
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
|
||||||
/******/ __webpack_require__.n = function(module) {
|
|
||||||
/******/ var getter = module && module.__esModule ?
|
|
||||||
/******/ function getDefault() { return module['default']; } :
|
|
||||||
/******/ function getModuleExports() { return module; };
|
|
||||||
/******/ __webpack_require__.d(getter, 'a', getter);
|
|
||||||
/******/ return getter;
|
|
||||||
/******/ };
|
|
||||||
/******/
|
|
||||||
/******/ // Object.prototype.hasOwnProperty.call
|
|
||||||
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
|
|
||||||
/******/
|
|
||||||
/******/ // __webpack_public_path__
|
|
||||||
/******/ __webpack_require__.p = "";
|
|
||||||
/******/
|
|
||||||
/******/ // Load entry module and return exports
|
|
||||||
/******/ return __webpack_require__(__webpack_require__.s = 0);
|
|
||||||
/******/ })
|
|
||||||
/************************************************************************/
|
|
||||||
/******/ ([
|
|
||||||
/* 0 */
|
|
||||||
/***/ (function(module, exports) {
|
|
||||||
|
|
||||||
// removed by extract-text-webpack-plugin
|
|
||||||
|
|
||||||
/***/ })
|
|
||||||
/******/ ]);
|
|
||||||
|
@ -1,7 +0,0 @@
|
|||||||
{
|
|
||||||
"version": 3,
|
|
||||||
"mappings": "AAAA,0BAA2B;EAC1B,KAAK,EAAE,IAAI;;AAEX,iCAAO;EACN,KAAK,EAAE,IAAI;;AAGZ;kCACQ;EACP,SAAS,EAAE,KAAK;;AAGjB,+BAAK;EACJ,KAAK,EAAE,IAAI;EACX,YAAY,EAAE,GAAG;;AAGlB,qCAAW;EACV,WAAW,EAAE,IAAI;EACjB,aAAa,EAAE,CAAC;;AAGd,qCAAW;EACP,MAAM,EAAE,cAAc;EACtB,OAAO,EAAE,IAAI;EACb,UAAU,EAAE,MAAM;;AAGzB,yCAAe;EACd,MAAM,EAAE,CAAC;;AAGV,yCAAe;EACd,MAAM,EAAE,MAAM;;AAIf,2CAAiB;EAChB,UAAU,EAAE,IAAI;;AAEhB,sDAAU;EACT,WAAW,EAAE,MAAM;;AAIrB,+CAAqB;EACpB,UAAU,EAAE,GAAG;EACf,UAAU,EAAE,KAAK;;AAEjB,6DAAc;EACb,MAAM,EAAE,WAAW;;AAEnB,gEAAG;EACF,OAAO,EAAE,MAAM;EACf,eAAe,EAAE,IAAI;EACrB,WAAW,EAAE,IAAI;;AAEjB,4EAAc;EACb,WAAW,EAAE,CAAC;;AAGf,qFAAuB;EACtB,KAAK,EAAE,KAAK;;AAId,+DAAE;EACD,gBAAgB,EAAE,IAAI;;AAEtB,6EAAgB;EACf,cAAc,EAAE,UAAU;;AAM9B,2CAAiB;EAChB,OAAO,EAAE,YAAY;EACrB,UAAU,EAAE,IAAI;;;AAKlB,QAAS;EACR,KAAK,EAAC,IAAI;EACV,eAAe,EAAE,IAAI;EACrB,QAAQ,EAAE,MAAM;EAChB,OAAO,EAAE,aAAa;EACtB,QAAQ,EAAE,QAAQ;;AAGjB,6BAAQ;EACP,OAAO,EAAE,QAAQ;EACjB,KAAK,EAAE,KAAK;EACZ,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,KAAK;EACV,KAAK,EAAE,KAAK;EACZ,SAAS,EAAE,GAAG;EACd,WAAW,EAAE,IAAI;;AAGlB,uCAAgB;EACf,MAAM,EAAE,cAAc;;AAMvB,2BAAc;EACb,MAAM,EAAE,iBAAiB;;AAIxB,qBAAa;EACT,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,MAAM,EAAE,IAAI;;AAGnB,sBAAc;EACb,gBAAgB,EAAE,IAAI;EACtB,MAAM,EAAE,cAAc;EACtB,UAAU,EAAE,IAAI;EAChB,MAAM,EAAE,CAAC;EACT,OAAO,EAAE,aAAa;EAChB,UAAU,EAAE,KAAK;EACvB,WAAW,EAAE,GAAG;EAChB,WAAW,EAAE,QAAQ;EACrB,WAAW,EAAE,QAAQ;EACrB,SAAS,EAAE,UAAU;;AAErB,mCAAa;EACZ,aAAa,EAAE,CAAC;;AAIf,kCAA0B;EAEtB,OAAO,EAAE,cAAc;EAGvB,UAAU,EAAE,KAAK;;AAGxB,cAAM;EACL,SAAS,EAAE,IAAI;;AAEf,qBAAS;EACR,OAAO,EAAE,8BAA8B;;AAKxC,oCAAgB;EACf,MAAM,EAAE,gBAAgB;;AAI1B,cAAM;EACL,aAAa,EAAE,IAAI;;AAGpB,sBAAgB;EACf,MAAM,EAAE,iBAAiB;EACzB,aAAa,EAAE,GAAG;EAClB,OAAO,EAAE,aAAa;;AAGvB,mCAA2B;EAC1B,KAAK,EAAE,IAAI;EACX,YAAY,EAAE,IAAI;EAClB,MAAM,EAAE,UAAU;EAClB,WAAW,EAAE,eAAe;;AAE5B,8DAA2B;EAC1B,OAAO,EAAE,MAAM;;AAEhB,2DAAwB;EACvB,OAAO,EAAE,UAAU;;;AAKtB,yBAA0B;EACzB,WAAW,EAAE,CAAC;;;AAGf,mBAAoB;EACnB,KAAK,EAAE,KAAK;;;AAGb,2BAA4B;EAC3B,KAAK,EAAE,IAAI;;;AAGZ,qBAAsB;EACrB,MAAM,EAAE,WAAW;;AAEnB,wCAAmB;EAClB,YAAY,EAAE,IAAI;;;AAIpB,uBAAwB;EACvB,UAAU,EAAE,IAAI",
|
|
||||||
"sources": ["../scss/comments.scss"],
|
|
||||||
"names": [],
|
|
||||||
"file": "comments.css"
|
|
||||||
}
|
|
@ -10,6 +10,16 @@ Then run a database rebuild by visiting `dev/build`. This will add the required
|
|||||||
|
|
||||||
## Enabling Commenting
|
## Enabling Commenting
|
||||||
|
|
||||||
Out of the box the module adds commenting support to all pages on your site. This functionality can be turned on and off on a per page basis in the CMS under the `Behaviour` tab for a given page. Once the `Allow Comments` checkbox is ticked, republish and view the webpage.
|
Out of the box the module adds commenting support to all pages on your site. This functionality can be turned on and off on a per page basis in the CMS under the `Behaviour` tab for a given page. Once the `Allow comments` checkbox is ticked, republish and view the webpage.
|
||||||
|
|
||||||
For more configuration options see [Configuration](Configuration.md).
|
For more configuration options see [Configuration](Configuration.md).
|
||||||
|
|
||||||
|
## Displaying Comments
|
||||||
|
|
||||||
|
To display form and comments simply add
|
||||||
|
|
||||||
|
```sh
|
||||||
|
{$CommentsForm}
|
||||||
|
```
|
||||||
|
|
||||||
|
to your `.ss` file.
|
||||||
|
@ -1,221 +0,0 @@
|
|||||||
/**
|
|
||||||
* @package comments
|
|
||||||
*/
|
|
||||||
(function($) {
|
|
||||||
$.entwine( "ss.comments", function($) {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Enable form validation
|
|
||||||
*/
|
|
||||||
$('.comments-holder-container form').entwine({
|
|
||||||
onmatch: function() {
|
|
||||||
|
|
||||||
// @todo Reinstate preview-comment functionality
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Validate
|
|
||||||
*/
|
|
||||||
$(this).validate({
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Ignore hidden elements in this form
|
|
||||||
*/
|
|
||||||
ignore: ':hidden',
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Use default 'required' for error labels
|
|
||||||
*/
|
|
||||||
errorClass: "required",
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Use span instead of labels
|
|
||||||
*/
|
|
||||||
errorElement: "span",
|
|
||||||
|
|
||||||
/**
|
|
||||||
* On error, scroll to the invalid element
|
|
||||||
*/
|
|
||||||
invalidHandler : function(form, validator){
|
|
||||||
$('html, body').animate({
|
|
||||||
scrollTop: $(validator.errorList[0].element).offset().top - 30
|
|
||||||
}, 200);
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Ensure any new error message has the correct class and placement
|
|
||||||
*/
|
|
||||||
errorPlacement: function(error, element) {
|
|
||||||
error
|
|
||||||
.addClass('message')
|
|
||||||
.insertAfter(element);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
this._super();
|
|
||||||
},
|
|
||||||
onunmatch: function() {
|
|
||||||
this._super();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Comment reply form
|
|
||||||
*/
|
|
||||||
$( ".comment-replies-container .comment-reply-form-holder" ).entwine({
|
|
||||||
onmatch: function() {
|
|
||||||
// If and only if this is not the currently selected form, hide it on page load
|
|
||||||
var selectedHash = window.document.location.hash.substr(1),
|
|
||||||
form = $(this).children('.reply-form');
|
|
||||||
if( !selectedHash || selectedHash !== form.prop( 'id' ) ) {
|
|
||||||
this.hide();
|
|
||||||
}
|
|
||||||
this._super();
|
|
||||||
},
|
|
||||||
onunmatch: function() {
|
|
||||||
this._super();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Toggle on/off reply form
|
|
||||||
*/
|
|
||||||
$( ".comment-reply-link" ).entwine({
|
|
||||||
onclick: function( e ) {
|
|
||||||
var allForms = $( ".comment-reply-form-holder" ),
|
|
||||||
formID = '#' + $( this ).attr('aria-controls');
|
|
||||||
form = $(formID).closest('.comment-reply-form-holder');
|
|
||||||
|
|
||||||
$(this).attr('aria-expanded', function (i, attr) {
|
|
||||||
return attr == 'true' ? 'false' : 'true'
|
|
||||||
});
|
|
||||||
|
|
||||||
// Prevent focus
|
|
||||||
e.preventDefault();
|
|
||||||
|
|
||||||
if(form.is(':visible')) {
|
|
||||||
allForms.slideUp();
|
|
||||||
} else {
|
|
||||||
allForms.not(form).slideUp();
|
|
||||||
form.slideDown();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Preview comment by fetching it from the server via ajax.
|
|
||||||
*/
|
|
||||||
/* @todo Migrate to work with nested comments
|
|
||||||
$(':submit[name=action_doPreviewComment]', form).click(function(e) {
|
|
||||||
e.preventDefault();
|
|
||||||
|
|
||||||
if(!form.validate().valid()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
previewEl.show().addClass('loading').find('.middleColumn').html(' ');
|
|
||||||
|
|
||||||
form.ajaxSubmit({
|
|
||||||
success: function(response) {
|
|
||||||
var responseEl = $(response);
|
|
||||||
if(responseEl.is('form')) {
|
|
||||||
// Validation failed, renders form instead of single comment
|
|
||||||
form.find(".data-fields").replaceWith(responseEl.find(".data-fields"));
|
|
||||||
} else {
|
|
||||||
// Default behaviour
|
|
||||||
previewEl.removeClass('loading').find('.middleColumn').html(responseEl);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
data: {'action_doPreviewComment': 1}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Hide outdated preview on form changes
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
$(':input', form).on('change keydown', function() {
|
|
||||||
previewEl.removeClass('loading').hide();
|
|
||||||
});*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clicking one of the metalinks performs the operation via ajax
|
|
||||||
* this inclues the spam and approve links
|
|
||||||
*/
|
|
||||||
|
|
||||||
$('.comments-holder .comments-list').on('click', 'div.comment-moderation-options a', function(e) {
|
|
||||||
var link = $(this);
|
|
||||||
if (link.hasClass('delete')) {
|
|
||||||
var confirmationMsg = ss.i18n._t('CommentsInterface_singlecomment_ss.DELETE_CONFIRMATION');
|
|
||||||
var confirmation = window.confirm(confirmationMsg);
|
|
||||||
if (!confirmation) {
|
|
||||||
e.preventDefault();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var comment = link.parents('.comment:first');
|
|
||||||
|
|
||||||
$.ajax({
|
|
||||||
url: $(this).attr('href'),
|
|
||||||
cache: false,
|
|
||||||
success: function(html){
|
|
||||||
if(link.hasClass('ham')) {
|
|
||||||
// comment has been marked as not spam
|
|
||||||
comment.html(html);
|
|
||||||
comment.removeClass('spam');
|
|
||||||
}
|
|
||||||
else if(link.hasClass('approve')) {
|
|
||||||
// comment has been approved
|
|
||||||
comment.html(html);
|
|
||||||
comment.removeClass('unmoderated');
|
|
||||||
}
|
|
||||||
else if(link.hasClass('delete')) {
|
|
||||||
comment.fadeOut(1000, function() {
|
|
||||||
comment.remove();
|
|
||||||
|
|
||||||
if(commentsList.children().length === 0) {
|
|
||||||
noCommentsYet.show();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
else if(link.hasClass('spam')) {
|
|
||||||
comment.html(html).addClass('spam');
|
|
||||||
}
|
|
||||||
},
|
|
||||||
failure: function(html) {
|
|
||||||
var errorMsg = ss.i18n._t('CommentsInterface_singlecomment_ss.AJAX_ERROR');
|
|
||||||
alert(errorMsg);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
e.preventDefault();
|
|
||||||
});
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Ajax pagination
|
|
||||||
*/
|
|
||||||
/* @todo Migrate to work with nested comments
|
|
||||||
pagination.find('a').on('click', function(){
|
|
||||||
commentsList.addClass('loading');
|
|
||||||
$.ajax({
|
|
||||||
url: $(this).attr('href'),
|
|
||||||
cache: false,
|
|
||||||
success: function(html){
|
|
||||||
html = $(html);
|
|
||||||
commentsList.hide().html(html.find('.comments-list:first').html()).fadeIn();
|
|
||||||
pagination.hide().html(html.find('.comments-pagination:first').html()).fadeIn();
|
|
||||||
commentsList.removeClass('loading');
|
|
||||||
$('html, body').animate({
|
|
||||||
scrollTop: commentsList.offset().top - 30
|
|
||||||
}, 200);
|
|
||||||
},
|
|
||||||
failure: function(html) {
|
|
||||||
alert('Error loading comments');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return false;
|
|
||||||
});*/
|
|
||||||
});
|
|
||||||
})(jQuery);
|
|
||||||
|
|
||||||
|
|
22
lang/ar.yml
Normal file
22
lang/ar.yml
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
ar:
|
||||||
|
CommentInterface:
|
||||||
|
PREVIEW: معاينة
|
||||||
|
PREVIEWLABEL: معاينة
|
||||||
|
CommentsInterface_ss:
|
||||||
|
COMMENTS: التعليقات
|
||||||
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
|
MENUTITLE: التعليقات
|
||||||
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
|
COMMENTS: التعليقات
|
||||||
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
|
COMMENTOPTIONS: التعليقات
|
||||||
|
COMMENTSTABSET: التعليقات
|
||||||
|
SilverStripe\Comments\Model\Comment:
|
||||||
|
COMMENT: تعليق
|
||||||
|
EMAIL: 'البريد الإلكتروني'
|
||||||
|
'ON': في
|
||||||
|
OPTIONS: الخيارات
|
||||||
|
PARENTTITLE: والد
|
||||||
|
PLURALNAME: التعليقات
|
||||||
|
SINGULARNAME: تعليق
|
||||||
|
URL: الرابط
|
18
lang/bg.yml
Normal file
18
lang/bg.yml
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
bg:
|
||||||
|
CommentInterface:
|
||||||
|
PREVIEW: Преглед
|
||||||
|
PREVIEWLABEL: Преглед
|
||||||
|
CommentsInterface_ss:
|
||||||
|
COMMENTS: Коментари
|
||||||
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
|
MENUTITLE: Коментари
|
||||||
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
|
COMMENTS: Коментари
|
||||||
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
|
COMMENTOPTIONS: Коментари
|
||||||
|
COMMENTSTABSET: Коментари
|
||||||
|
SilverStripe\Comments\Model\Comment:
|
||||||
|
EMAIL: Еmail
|
||||||
|
'ON': на
|
||||||
|
PLURALNAME: Коментари
|
||||||
|
URL: URL
|
19
lang/cs.yml
Normal file
19
lang/cs.yml
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
cs:
|
||||||
|
CommentInterface:
|
||||||
|
POST: Post
|
||||||
|
PREVIEW: Náhled
|
||||||
|
PREVIEWLABEL: Náhled
|
||||||
|
CommentsInterface_ss:
|
||||||
|
COMMENTS: Komentáře
|
||||||
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
|
MENUTITLE: Komentáře
|
||||||
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
|
COMMENTS: Komentáře
|
||||||
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
|
COMMENTOPTIONS: Komentáře
|
||||||
|
COMMENTSTABSET: Komentáře
|
||||||
|
SilverStripe\Comments\Model\Comment:
|
||||||
|
EMAIL: E-mail
|
||||||
|
'ON': v
|
||||||
|
PLURALNAME: Komentáře
|
||||||
|
URL: URL
|
26
lang/cs_CZ.yml
Normal file
26
lang/cs_CZ.yml
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
cs_CZ:
|
||||||
|
CommentInterface:
|
||||||
|
COMMENT_MESSAGE_REQUIRED: 'Prosím vložte Váš komentář'
|
||||||
|
COMMENT_MESSAGE_URL: 'Prosím zadejte platnou URL adresu'
|
||||||
|
EMAILADDRESS_MESSAGE_EMAIL: 'Prosím zadejte platnou emailovou adresu'
|
||||||
|
EMAILADDRESS_MESSAGE_REQUIRED: 'Prosím zadejte Vaší emailovou adresu'
|
||||||
|
PREVIEW: Náhled
|
||||||
|
PREVIEWLABEL: Náhled
|
||||||
|
YOURNAME: 'Vaše jméno'
|
||||||
|
YOURNAME_MESSAGE_REQUIRED: 'Prosím zadejte Vaše jméno'
|
||||||
|
Comments:
|
||||||
|
COMMENTSREQUIRELOGIN: 'Vyžadováno přihlášení pro komentování'
|
||||||
|
CommentsAdmin:
|
||||||
|
NewComments: Nový
|
||||||
|
SpamComments: Spam
|
||||||
|
CommentsInterface_singlecomment_ss:
|
||||||
|
ISNTSPAM: 'Není spam'
|
||||||
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
|
NewComments: Nový
|
||||||
|
SpamComments: Spam
|
||||||
|
SilverStripe\Comments\Admin\CommentsGridFieldAction:
|
||||||
|
SPAM: Spam
|
||||||
|
SilverStripe\Comments\Admin\CommentsGridFieldConfig:
|
||||||
|
SPAM: Spam
|
||||||
|
SilverStripe\Comments\Admin\CommentsGridFieldSpamAction:
|
||||||
|
SPAM: Spam
|
18
lang/da.yml
Normal file
18
lang/da.yml
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
da:
|
||||||
|
CommentInterface:
|
||||||
|
PREVIEW: Forhåndsvisning
|
||||||
|
PREVIEWLABEL: Forhåndsvisning
|
||||||
|
CommentsInterface_ss:
|
||||||
|
COMMENTS: Kommentarer
|
||||||
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
|
MENUTITLE: Kommentarer
|
||||||
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
|
COMMENTS: Kommentarer
|
||||||
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
|
COMMENTOPTIONS: Kommentarer
|
||||||
|
COMMENTSTABSET: Kommentarer
|
||||||
|
SilverStripe\Comments\Model\Comment:
|
||||||
|
EMAIL: Email
|
||||||
|
'ON': 'd. '
|
||||||
|
PLURALNAME: Kommentarer
|
||||||
|
URL: URL
|
34
lang/de.yml
34
lang/de.yml
@ -9,15 +9,16 @@ de:
|
|||||||
PREVIEWLABEL: Vorschau
|
PREVIEWLABEL: Vorschau
|
||||||
YOURNAME: Name
|
YOURNAME: Name
|
||||||
YOURNAME_MESSAGE_REQUIRED: 'Bitte geben Sie Ihren Namen ein'
|
YOURNAME_MESSAGE_REQUIRED: 'Bitte geben Sie Ihren Namen ein'
|
||||||
|
Comments:
|
||||||
|
COMMENTSREQUIRELOGIN: 'Einloggen, um zu kommentieren'
|
||||||
CommentsAdmin:
|
CommentsAdmin:
|
||||||
NeedsModeration: 'Benötigt Moderation'
|
Comments: Genehmigt
|
||||||
NewComments: Neu
|
NewComments: Neu
|
||||||
SpamComments: Spam
|
SpamComments: Spam
|
||||||
CommentsInterface_pendingcomment_ss:
|
CommentsInterface_pendingcomment_ss:
|
||||||
AWAITINGMODERATION: 'Ihr Kommentar wurde gespeichert und wird durch einen Moderator freigeschaltet.'
|
AWAITINGMODERATION: 'Ihr Kommentar wurde gespeichert und wird durch einen Moderator freigeschaltet.'
|
||||||
CommentsInterface_singlecomment_ss:
|
CommentsInterface_singlecomment_ss:
|
||||||
ISNTSPAM: 'kein Spam'
|
REPLYTO: 'Antworten an'
|
||||||
PBY: 'Geschrieben von'
|
|
||||||
CommentsInterface_ss:
|
CommentsInterface_ss:
|
||||||
AWAITINGMODERATION: 'Ihr Kommentar wurde gespeichert und wird durch einen Moderator freigeschaltet.'
|
AWAITINGMODERATION: 'Ihr Kommentar wurde gespeichert und wird durch einen Moderator freigeschaltet.'
|
||||||
COMMENTLOGINERROR: 'Sie können diese Seite nur kommentieren, wenn Sie eingeloggt sind'
|
COMMENTLOGINERROR: 'Sie können diese Seite nur kommentieren, wenn Sie eingeloggt sind'
|
||||||
@ -33,18 +34,26 @@ de:
|
|||||||
PREV: zurück
|
PREV: zurück
|
||||||
RSSFEEDALLCOMMENTS: 'RSS Feed für alle Kommentare'
|
RSSFEEDALLCOMMENTS: 'RSS Feed für alle Kommentare'
|
||||||
RSSFEEDCOMMENTS: 'RSS Feed für Kommentare auf dieser Seite'
|
RSSFEEDCOMMENTS: 'RSS Feed für Kommentare auf dieser Seite'
|
||||||
PageCommentInterface:
|
|
||||||
DELETEALLCOMMENTS: 'Alle Kommentare auf dieser Seite entfernen'
|
|
||||||
SilverStripe\Comments\Admin\CommentAdmin:
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
ADMIN_PERMISSION: 'Zugang zum Bereich ''Kommentare'''
|
ADMIN_PERMISSION: 'Zugang zum Bereich ''Kommentare'''
|
||||||
|
ApprovedComments: 'Gehnehmigt ({count})'
|
||||||
|
Comments: Genehmigt
|
||||||
MENUTITLE: Kommentare
|
MENUTITLE: Kommentare
|
||||||
Moderated: Moderiert
|
|
||||||
NeedsModeration: 'Benötigt Moderation'
|
|
||||||
NewComments: Neu
|
NewComments: Neu
|
||||||
SpamComments: Spam
|
SpamComments: Spam
|
||||||
SilverStripe\Comments\Admin\CommentsGridFieldAction:
|
SilverStripe\Comments\Admin\CommentsGridFieldAction:
|
||||||
|
APPROVE: Genehmigen
|
||||||
|
COMMENTAPPROVED: 'Kommentar genehmigt.'
|
||||||
|
COMMENTMARKEDSPAM: 'Commentar als Spam markiert.'
|
||||||
SPAM: Spam
|
SPAM: Spam
|
||||||
|
SilverStripe\Comments\Admin\CommentsGridFieldApproveAction:
|
||||||
|
APPROVE: Genehmigen
|
||||||
|
COMMENTAPPROVED: 'Kommentar genehmigt.'
|
||||||
SilverStripe\Comments\Admin\CommentsGridFieldConfig:
|
SilverStripe\Comments\Admin\CommentsGridFieldConfig:
|
||||||
|
APPROVE: Genehmigen
|
||||||
|
SPAM: Spam
|
||||||
|
SilverStripe\Comments\Admin\CommentsGridFieldSpamAction:
|
||||||
|
COMMENTMARKEDSPAM: 'Commentar als Spam markiert.'
|
||||||
SPAM: Spam
|
SPAM: Spam
|
||||||
SilverStripe\Comments\Controllers\CommentingController:
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
COMMENTS: Kommentare
|
COMMENTS: Kommentare
|
||||||
@ -53,20 +62,27 @@ de:
|
|||||||
RSSTITLE: 'Kommentare RSS Feed'
|
RSSTITLE: 'Kommentare RSS Feed'
|
||||||
WEBSITEURL: 'Website URL'
|
WEBSITEURL: 'Website URL'
|
||||||
SilverStripe\Comments\Extensions\CommentsExtension:
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
|
COMMENTMODERATION: Kommentarmoderation
|
||||||
COMMENTOPTIONS: Kommentare
|
COMMENTOPTIONS: Kommentare
|
||||||
|
COMMENTSTABSET: Kommentare
|
||||||
|
MODERATIONREQUIRED_NONE: 'Keine Moderation benötigt'
|
||||||
|
MODERATIONREQUIRED_NONMEMBERSONLY: 'Nur Nicht-Mitglieder moderieren'
|
||||||
|
MODERATIONREQUIRED_REQUIRED: 'Alle Kommentare moderieren'
|
||||||
SilverStripe\Comments\Model\Comment:
|
SilverStripe\Comments\Model\Comment:
|
||||||
ALLOWCOMMENTS: 'Kommentare Erlauben'
|
|
||||||
COMMENT: Kommentar
|
COMMENT: Kommentar
|
||||||
COMMENTBY: 'Kommentar von ''%s'''
|
COMMENTBY: 'Kommentar von ''%s'''
|
||||||
CREATED: 'Datum geschrieben'
|
CREATED: 'Datum geschrieben'
|
||||||
EMAIL: E-Mail
|
EMAIL: E-Mail
|
||||||
ISSPAM: 'Spam?'
|
ISSPAM: 'Spam?'
|
||||||
MODERATED: 'Moderiert?'
|
MODERATED: 'Moderiert?'
|
||||||
NAME: 'Autor Name'
|
|
||||||
'ON': am
|
'ON': am
|
||||||
OPTIONS: Optionen
|
OPTIONS: Optionen
|
||||||
OPTION_DESCRIPTION: 'Unmoderierte und Spam-Kommentare werden nicht angezeigt, bis sie freigeschaltet sind'
|
OPTION_DESCRIPTION: 'Unmoderierte und Spam-Kommentare werden nicht angezeigt, bis sie freigeschaltet sind'
|
||||||
PARENTTITLE: Parent
|
PARENTTITLE: Parent
|
||||||
PLURALNAME: Kommentare
|
PLURALNAME: Kommentare
|
||||||
|
PLURALS:
|
||||||
|
one: 'Ein Kommentar'
|
||||||
|
other: '{count} Kommentare'
|
||||||
|
ParentComment_Title: 'Dieser Kommentar ist eine Antwort auf'
|
||||||
SINGULARNAME: Kommentar
|
SINGULARNAME: Kommentar
|
||||||
URL: URL
|
URL: URL
|
||||||
|
17
lang/el.yml
Normal file
17
lang/el.yml
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
el:
|
||||||
|
CommentInterface:
|
||||||
|
PREVIEW: Προεπισκόπιση
|
||||||
|
PREVIEWLABEL: Προεπισκόπιση
|
||||||
|
CommentsInterface_ss:
|
||||||
|
COMMENTS: Σχόλια
|
||||||
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
|
MENUTITLE: Σχόλια
|
||||||
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
|
COMMENTS: Σχόλια
|
||||||
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
|
COMMENTOPTIONS: Σχόλια
|
||||||
|
COMMENTSTABSET: Σχόλια
|
||||||
|
SilverStripe\Comments\Model\Comment:
|
||||||
|
EMAIL: Email
|
||||||
|
PLURALNAME: Σχόλια
|
||||||
|
URL: URL
|
20
lang/en.yml
20
lang/en.yml
@ -18,10 +18,10 @@ en:
|
|||||||
CommentsInterface_pendingcomment_ss:
|
CommentsInterface_pendingcomment_ss:
|
||||||
AWAITINGMODERATION: 'Your comment has been submitted and is now awaiting moderation.'
|
AWAITINGMODERATION: 'Your comment has been submitted and is now awaiting moderation.'
|
||||||
CommentsInterface_singlecomment_ss:
|
CommentsInterface_singlecomment_ss:
|
||||||
APPROVE: 'approve it'
|
APPROVE: 'Approve it'
|
||||||
ISNTSPAM: 'not spam'
|
ISNTSPAM: 'Not spam'
|
||||||
ISSPAM: 'spam it'
|
ISSPAM: 'Spam it'
|
||||||
REMCOM: 'reject it'
|
REMCOM: 'Reject it'
|
||||||
REPLYTO: 'Reply to'
|
REPLYTO: 'Reply to'
|
||||||
CommentsInterface_ss:
|
CommentsInterface_ss:
|
||||||
AWAITINGMODERATION: 'Your comment has been submitted and is now awaiting moderation.'
|
AWAITINGMODERATION: 'Your comment has been submitted and is now awaiting moderation.'
|
||||||
@ -50,9 +50,17 @@ en:
|
|||||||
COMMENTAPPROVED: 'Comment approved.'
|
COMMENTAPPROVED: 'Comment approved.'
|
||||||
COMMENTMARKEDSPAM: 'Comment marked as spam.'
|
COMMENTMARKEDSPAM: 'Comment marked as spam.'
|
||||||
SPAM: Spam
|
SPAM: Spam
|
||||||
|
SilverStripe\Comments\Admin\CommentsGridFieldApproveAction:
|
||||||
|
APPROVE: Approve
|
||||||
|
COMMENTAPPROVED: 'Comment approved.'
|
||||||
|
SilverStripe\Comments\Admin\CommentsGridFieldBulkAction\CommentHandler:
|
||||||
|
CHANGES_APPLIED: 'Changes applied'
|
||||||
SilverStripe\Comments\Admin\CommentsGridFieldConfig:
|
SilverStripe\Comments\Admin\CommentsGridFieldConfig:
|
||||||
APPROVE: Approve
|
APPROVE: Approve
|
||||||
SPAM: Spam
|
SPAM: Spam
|
||||||
|
SilverStripe\Comments\Admin\CommentsGridFieldSpamAction:
|
||||||
|
COMMENTMARKEDSPAM: 'Comment marked as spam.'
|
||||||
|
SPAM: Spam
|
||||||
SilverStripe\Comments\Controllers\CommentingController:
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
COMMENTS: Comments
|
COMMENTS: Comments
|
||||||
EMAILADDRESS: 'Your email address (will not be published)'
|
EMAILADDRESS: 'Your email address (will not be published)'
|
||||||
@ -67,14 +75,14 @@ en:
|
|||||||
MODERATIONREQUIRED_NONMEMBERSONLY: 'Only moderate non-members'
|
MODERATIONREQUIRED_NONMEMBERSONLY: 'Only moderate non-members'
|
||||||
MODERATIONREQUIRED_REQUIRED: 'Moderate all comments'
|
MODERATIONREQUIRED_REQUIRED: 'Moderate all comments'
|
||||||
SilverStripe\Comments\Model\Comment:
|
SilverStripe\Comments\Model\Comment:
|
||||||
ALLOWCOMMENTS: 'Allow Comments'
|
ALLOWCOMMENTS: 'Allow comments'
|
||||||
COMMENT: Comment
|
COMMENT: Comment
|
||||||
COMMENTBY: 'Comment by %s'
|
COMMENTBY: 'Comment by %s'
|
||||||
CREATED: 'Date posted'
|
CREATED: 'Date posted'
|
||||||
EMAIL: Email
|
EMAIL: Email
|
||||||
ISSPAM: 'Spam?'
|
ISSPAM: 'Spam?'
|
||||||
MODERATED: 'Moderated?'
|
MODERATED: 'Moderated?'
|
||||||
NAME: 'Author Name'
|
NAME: 'Author name'
|
||||||
'ON': 'on'
|
'ON': 'on'
|
||||||
OPTIONS: Options
|
OPTIONS: Options
|
||||||
OPTION_DESCRIPTION: 'Unmoderated and spam comments will not be displayed until approved'
|
OPTION_DESCRIPTION: 'Unmoderated and spam comments will not be displayed until approved'
|
||||||
|
15
lang/en_GB.yml
Normal file
15
lang/en_GB.yml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
en_GB:
|
||||||
|
CommentsInterface_ss:
|
||||||
|
COMMENTS: Comments
|
||||||
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
|
MENUTITLE: Comments
|
||||||
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
|
COMMENTS: Comments
|
||||||
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
|
COMMENTOPTIONS: Comments
|
||||||
|
COMMENTSTABSET: Comments
|
||||||
|
SilverStripe\Comments\Model\Comment:
|
||||||
|
EMAIL: Email
|
||||||
|
'ON': 'on'
|
||||||
|
OPTIONS: Options
|
||||||
|
PLURALNAME: Comments
|
27
lang/eo.yml
27
lang/eo.yml
@ -12,19 +12,16 @@ eo:
|
|||||||
Comments:
|
Comments:
|
||||||
COMMENTSREQUIRELOGIN: 'Necesas ensaluti por komenti'
|
COMMENTSREQUIRELOGIN: 'Necesas ensaluti por komenti'
|
||||||
CommentsAdmin:
|
CommentsAdmin:
|
||||||
ApprovedComments: Aprobita
|
|
||||||
Comments: Aprobita
|
Comments: Aprobita
|
||||||
NeedsModeration: 'Bezonas kontrolon'
|
|
||||||
NewComments: Nova
|
NewComments: Nova
|
||||||
SpamComments: Spamo
|
SpamComments: Spamo
|
||||||
CommentsInterface_pendingcomment_ss:
|
CommentsInterface_pendingcomment_ss:
|
||||||
AWAITINGMODERATION: 'Via komento afiŝiĝis kaj nun atendas kontrolon.'
|
AWAITINGMODERATION: 'Via komento afiŝiĝis kaj nun atendas kontrolon.'
|
||||||
CommentsInterface_singlecomment_ss:
|
CommentsInterface_singlecomment_ss:
|
||||||
APPROVE: 'aprobi ĝin'
|
APPROVE: 'Aprobi ĝin'
|
||||||
ISNTSPAM: 'ne spamo'
|
ISNTSPAM: 'Ne spamo'
|
||||||
ISSPAM: 'spamigi ĝin'
|
ISSPAM: 'Trakti kiel spamon'
|
||||||
PBY: 'Afiŝita de'
|
REMCOM: 'Malakcepti ĝin'
|
||||||
REMCOM: 'malakcepti ĝin'
|
|
||||||
REPLYTO: 'Respondi al'
|
REPLYTO: 'Respondi al'
|
||||||
CommentsInterface_ss:
|
CommentsInterface_ss:
|
||||||
AWAITINGMODERATION: 'Via komento afiŝiĝis kaj nun atendas kontrolon.'
|
AWAITINGMODERATION: 'Via komento afiŝiĝis kaj nun atendas kontrolon.'
|
||||||
@ -41,15 +38,11 @@ eo:
|
|||||||
PREV: antaŭa
|
PREV: antaŭa
|
||||||
RSSFEEDALLCOMMENTS: 'RSS-fluo por ĉiuj komentoj'
|
RSSFEEDALLCOMMENTS: 'RSS-fluo por ĉiuj komentoj'
|
||||||
RSSFEEDCOMMENTS: 'RSS-fluo por komentoj pri ĉi tiu paĝo'
|
RSSFEEDCOMMENTS: 'RSS-fluo por komentoj pri ĉi tiu paĝo'
|
||||||
PageCommentInterface:
|
|
||||||
DELETEALLCOMMENTS: 'Forigi ĉiujn komentojn pri ĉi tiu paĝo'
|
|
||||||
SilverStripe\Comments\Admin\CommentAdmin:
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
ADMIN_PERMISSION: 'Aliro al sekcio ''Komentoj'''
|
ADMIN_PERMISSION: 'Aliro al sekcio ''Komentoj'''
|
||||||
ApprovedComments: Aprobita
|
ApprovedComments: Aprobita
|
||||||
Comments: Aprobita
|
Comments: Aprobita
|
||||||
MENUTITLE: Komentoj
|
MENUTITLE: Komentoj
|
||||||
Moderated: Kontrolata
|
|
||||||
NeedsModeration: 'Bezonas kontrolon'
|
|
||||||
NewComments: Nova
|
NewComments: Nova
|
||||||
SpamComments: Spamo
|
SpamComments: Spamo
|
||||||
SilverStripe\Comments\Admin\CommentsGridFieldAction:
|
SilverStripe\Comments\Admin\CommentsGridFieldAction:
|
||||||
@ -57,9 +50,17 @@ eo:
|
|||||||
COMMENTAPPROVED: 'Komento aprobita.'
|
COMMENTAPPROVED: 'Komento aprobita.'
|
||||||
COMMENTMARKEDSPAM: 'Markis komenton kiel spamon'
|
COMMENTMARKEDSPAM: 'Markis komenton kiel spamon'
|
||||||
SPAM: Spamo
|
SPAM: Spamo
|
||||||
|
SilverStripe\Comments\Admin\CommentsGridFieldApproveAction:
|
||||||
|
APPROVE: Aprobi
|
||||||
|
COMMENTAPPROVED: 'Komento aprobita.'
|
||||||
|
SilverStripe\Comments\Admin\CommentsGridFieldBulkAction\CommentHandler:
|
||||||
|
CHANGES_APPLIED: 'Aplikis la ŝanĝojn'
|
||||||
SilverStripe\Comments\Admin\CommentsGridFieldConfig:
|
SilverStripe\Comments\Admin\CommentsGridFieldConfig:
|
||||||
APPROVE: Aprobi
|
APPROVE: Aprobi
|
||||||
SPAM: Spamo
|
SPAM: Spamo
|
||||||
|
SilverStripe\Comments\Admin\CommentsGridFieldSpamAction:
|
||||||
|
COMMENTMARKEDSPAM: 'Markis komenton kiel spamon'
|
||||||
|
SPAM: Spamo
|
||||||
SilverStripe\Comments\Controllers\CommentingController:
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
COMMENTS: Komentoj
|
COMMENTS: Komentoj
|
||||||
EMAILADDRESS: 'Via retadreso (ne publikiĝos)'
|
EMAILADDRESS: 'Via retadreso (ne publikiĝos)'
|
||||||
@ -67,6 +68,7 @@ eo:
|
|||||||
RSSTITLE: 'RSS-fluo de komentoj'
|
RSSTITLE: 'RSS-fluo de komentoj'
|
||||||
WEBSITEURL: 'Via reteja URL'
|
WEBSITEURL: 'Via reteja URL'
|
||||||
SilverStripe\Comments\Extensions\CommentsExtension:
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
|
COMMENTMODERATION: 'Kontroli komentojn'
|
||||||
COMMENTOPTIONS: Komentoj
|
COMMENTOPTIONS: Komentoj
|
||||||
COMMENTSTABSET: Komentoj
|
COMMENTSTABSET: Komentoj
|
||||||
MODERATIONREQUIRED_NONE: 'Kontrolado ne bezonatas'
|
MODERATIONREQUIRED_NONE: 'Kontrolado ne bezonatas'
|
||||||
@ -86,6 +88,9 @@ eo:
|
|||||||
OPTION_DESCRIPTION: 'Ne vidigos nekontrolitajn aŭ spamajn komentojn antaŭ aprobo'
|
OPTION_DESCRIPTION: 'Ne vidigos nekontrolitajn aŭ spamajn komentojn antaŭ aprobo'
|
||||||
PARENTTITLE: Patra
|
PARENTTITLE: Patra
|
||||||
PLURALNAME: Komentoj
|
PLURALNAME: Komentoj
|
||||||
|
PLURALS:
|
||||||
|
one: 'Unu komento'
|
||||||
|
other: '{count} komentoj'
|
||||||
ParentComment_Title: 'Tiu komento estas respondo al la suba'
|
ParentComment_Title: 'Tiu komento estas respondo al la suba'
|
||||||
SINGULARNAME: Komento
|
SINGULARNAME: Komento
|
||||||
URL: URL
|
URL: URL
|
||||||
|
14
lang/es.yml
14
lang/es.yml
@ -9,12 +9,8 @@ es:
|
|||||||
PREVIEWLABEL: 'Vista previa'
|
PREVIEWLABEL: 'Vista previa'
|
||||||
YOURNAME: 'Su nombre'
|
YOURNAME: 'Su nombre'
|
||||||
YOURNAME_MESSAGE_REQUIRED: 'Por favor, ingrese su nombre'
|
YOURNAME_MESSAGE_REQUIRED: 'Por favor, ingrese su nombre'
|
||||||
CommentsAdmin:
|
|
||||||
NeedsModeration: 'Necesita moderación'
|
|
||||||
CommentsInterface_pendingcomment_ss:
|
CommentsInterface_pendingcomment_ss:
|
||||||
AWAITINGMODERATION: 'Se envió su comentario y ahora está esperando la moderación.'
|
AWAITINGMODERATION: 'Se envió su comentario y ahora está esperando la moderación.'
|
||||||
CommentsInterface_singlecomment_ss:
|
|
||||||
PBY: 'Publicado por'
|
|
||||||
CommentsInterface_ss:
|
CommentsInterface_ss:
|
||||||
AWAITINGMODERATION: 'Se envió su comentario y ahora está esperando la moderación.'
|
AWAITINGMODERATION: 'Se envió su comentario y ahora está esperando la moderación.'
|
||||||
COMMENTLOGINERROR: 'Ud no puede comentar hasta que haya iniciado sesión'
|
COMMENTLOGINERROR: 'Ud no puede comentar hasta que haya iniciado sesión'
|
||||||
@ -28,27 +24,25 @@ es:
|
|||||||
NOCOMMENTSYET: 'Nadie comentó en esta página todavía.'
|
NOCOMMENTSYET: 'Nadie comentó en esta página todavía.'
|
||||||
POSTCOM: 'Publicar su mensaje'
|
POSTCOM: 'Publicar su mensaje'
|
||||||
PREV: anterior
|
PREV: anterior
|
||||||
PageCommentInterface:
|
|
||||||
DELETEALLCOMMENTS: 'Eliminar todos los comentarios de esta página'
|
|
||||||
SilverStripe\Comments\Admin\CommentAdmin:
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
ADMIN_PERMISSION: 'Acceder a la sección ''Comentarios'''
|
ADMIN_PERMISSION: 'Acceder a la sección ''Comentarios'''
|
||||||
MENUTITLE: Comentarios
|
MENUTITLE: Comentarios
|
||||||
Moderated: Moderado
|
|
||||||
NeedsModeration: 'Necesita moderación'
|
|
||||||
SilverStripe\Comments\Controllers\CommentingController:
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
COMMENTS: Comentarios
|
COMMENTS: Comentarios
|
||||||
EMAILADDRESS: 'Su dirección de correo (no se publicará)'
|
EMAILADDRESS: 'Su dirección de correo (no se publicará)'
|
||||||
PERMISSIONFAILURE: 'Ud no puede publicar comentarios en esta página. Por favor asegúrese que haya iniciado sesión y que tenga el adecuado nivel de permisos.'
|
PERMISSIONFAILURE: 'Ud no puede publicar comentarios en esta página. Por favor asegúrese que haya iniciado sesión y que tenga el adecuado nivel de permisos.'
|
||||||
WEBSITEURL: 'URL de su sitio Web'
|
WEBSITEURL: 'URL de su sitio Web'
|
||||||
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
|
COMMENTOPTIONS: Comentarios
|
||||||
|
COMMENTSTABSET: Comentarios
|
||||||
SilverStripe\Comments\Model\Comment:
|
SilverStripe\Comments\Model\Comment:
|
||||||
ALLOWCOMMENTS: 'Permitir comentarios'
|
|
||||||
COMMENT: Comentario
|
COMMENT: Comentario
|
||||||
COMMENTBY: 'Comentario por %s'
|
COMMENTBY: 'Comentario por %s'
|
||||||
CREATED: 'Fecha de publicación'
|
CREATED: 'Fecha de publicación'
|
||||||
EMAIL: Email
|
EMAIL: Email
|
||||||
ISSPAM: '¿Spam?'
|
ISSPAM: '¿Spam?'
|
||||||
MODERATED: '¿Moderado?'
|
MODERATED: '¿Moderado?'
|
||||||
NAME: 'Nombre del autor'
|
'ON': en
|
||||||
PARENTTITLE: Padre
|
PARENTTITLE: Padre
|
||||||
PLURALNAME: Comentarios
|
PLURALNAME: Comentarios
|
||||||
SINGULARNAME: Comentario
|
SINGULARNAME: Comentario
|
||||||
|
19
lang/es_MX.yml
Normal file
19
lang/es_MX.yml
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
es_MX:
|
||||||
|
CommentInterface:
|
||||||
|
PREVIEW: Previo
|
||||||
|
PREVIEWLABEL: Previo
|
||||||
|
CommentsInterface_ss:
|
||||||
|
COMMENTS: Comentarios
|
||||||
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
|
MENUTITLE: Comentarios
|
||||||
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
|
COMMENTS: Comentarios
|
||||||
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
|
COMMENTOPTIONS: Comentarios
|
||||||
|
COMMENTSTABSET: Comentarios
|
||||||
|
SilverStripe\Comments\Model\Comment:
|
||||||
|
EMAIL: Email
|
||||||
|
'ON': en
|
||||||
|
OPTIONS: Options
|
||||||
|
PLURALNAME: Comentarios
|
||||||
|
URL: URL
|
19
lang/et_EE.yml
Normal file
19
lang/et_EE.yml
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
et_EE:
|
||||||
|
CommentInterface:
|
||||||
|
PREVIEW: Eelvaade
|
||||||
|
PREVIEWLABEL: Eelvaade
|
||||||
|
CommentsInterface_ss:
|
||||||
|
COMMENTS: Komentaarid
|
||||||
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
|
MENUTITLE: Komentaarid
|
||||||
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
|
COMMENTS: Komentaarid
|
||||||
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
|
COMMENTOPTIONS: Komentaarid
|
||||||
|
COMMENTSTABSET: Komentaarid
|
||||||
|
SilverStripe\Comments\Model\Comment:
|
||||||
|
EMAIL: Email
|
||||||
|
'ON': '-'
|
||||||
|
OPTIONS: Options
|
||||||
|
PLURALNAME: Komentaarid
|
||||||
|
URL: URL
|
@ -12,19 +12,12 @@ fa_IR:
|
|||||||
Comments:
|
Comments:
|
||||||
COMMENTSREQUIRELOGIN: 'درج دیدگاه نیازمند ورود شما به سایت است'
|
COMMENTSREQUIRELOGIN: 'درج دیدگاه نیازمند ورود شما به سایت است'
|
||||||
CommentsAdmin:
|
CommentsAdmin:
|
||||||
ApprovedComments: 'تایید شده'
|
|
||||||
Comments: 'تایید شده'
|
Comments: 'تایید شده'
|
||||||
NeedsModeration: 'نیازمند مدیریت'
|
|
||||||
NewComments: تازه
|
NewComments: تازه
|
||||||
SpamComments: هرزنوشت
|
SpamComments: هرزنوشت
|
||||||
CommentsInterface_pendingcomment_ss:
|
CommentsInterface_pendingcomment_ss:
|
||||||
AWAITINGMODERATION: 'دیدگاه شما ارسال شده و هماکنون در انتظار بررسی است.'
|
AWAITINGMODERATION: 'دیدگاه شما ارسال شده و هماکنون در انتظار بررسی است.'
|
||||||
CommentsInterface_singlecomment_ss:
|
CommentsInterface_singlecomment_ss:
|
||||||
APPROVE: 'تایید کن'
|
|
||||||
ISNTSPAM: 'هرزنوشت نیست'
|
|
||||||
ISSPAM: هرزنوشته
|
|
||||||
PBY: 'ارسال شده توسط'
|
|
||||||
REMCOM: 'رد کردن'
|
|
||||||
REPLYTO: 'ارسال پاسخ به'
|
REPLYTO: 'ارسال پاسخ به'
|
||||||
CommentsInterface_ss:
|
CommentsInterface_ss:
|
||||||
AWAITINGMODERATION: 'دیدگاه شما ارسال شده و هماکنون در انتظار بررسی است.'
|
AWAITINGMODERATION: 'دیدگاه شما ارسال شده و هماکنون در انتظار بررسی است.'
|
||||||
@ -41,15 +34,11 @@ fa_IR:
|
|||||||
PREV: پیشین
|
PREV: پیشین
|
||||||
RSSFEEDALLCOMMENTS: 'خوراک آراساس تمامی دیدگاهها'
|
RSSFEEDALLCOMMENTS: 'خوراک آراساس تمامی دیدگاهها'
|
||||||
RSSFEEDCOMMENTS: 'خوراک آراساس دیدگاههای این صفحه'
|
RSSFEEDCOMMENTS: 'خوراک آراساس دیدگاههای این صفحه'
|
||||||
PageCommentInterface:
|
|
||||||
DELETEALLCOMMENTS: 'حذف تمامی دیدگاهها در این صفحه'
|
|
||||||
SilverStripe\Comments\Admin\CommentAdmin:
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
ADMIN_PERMISSION: 'دسترسی به بخش ''دیدگاهها'''
|
ADMIN_PERMISSION: 'دسترسی به بخش ''دیدگاهها'''
|
||||||
ApprovedComments: 'تایید شده'
|
ApprovedComments: 'تایید شده'
|
||||||
Comments: 'تایید شده'
|
Comments: 'تایید شده'
|
||||||
MENUTITLE: دیدگاهها
|
MENUTITLE: دیدگاهها
|
||||||
Moderated: 'مدیریت شده'
|
|
||||||
NeedsModeration: 'نیازمند مدیریت'
|
|
||||||
NewComments: تازه
|
NewComments: تازه
|
||||||
SpamComments: هرزنوشت
|
SpamComments: هرزنوشت
|
||||||
SilverStripe\Comments\Admin\CommentsGridFieldAction:
|
SilverStripe\Comments\Admin\CommentsGridFieldAction:
|
||||||
@ -57,9 +46,15 @@ fa_IR:
|
|||||||
COMMENTAPPROVED: 'دیدگاه تایید شد.'
|
COMMENTAPPROVED: 'دیدگاه تایید شد.'
|
||||||
COMMENTMARKEDSPAM: 'دیدگاه به عنوان هرزنوشت علامتگذاری شد.'
|
COMMENTMARKEDSPAM: 'دیدگاه به عنوان هرزنوشت علامتگذاری شد.'
|
||||||
SPAM: هرزنوشت
|
SPAM: هرزنوشت
|
||||||
|
SilverStripe\Comments\Admin\CommentsGridFieldApproveAction:
|
||||||
|
APPROVE: تایید
|
||||||
|
COMMENTAPPROVED: 'دیدگاه تایید شد.'
|
||||||
SilverStripe\Comments\Admin\CommentsGridFieldConfig:
|
SilverStripe\Comments\Admin\CommentsGridFieldConfig:
|
||||||
APPROVE: تایید
|
APPROVE: تایید
|
||||||
SPAM: هرزنوشت
|
SPAM: هرزنوشت
|
||||||
|
SilverStripe\Comments\Admin\CommentsGridFieldSpamAction:
|
||||||
|
COMMENTMARKEDSPAM: 'دیدگاه به عنوان هرزنوشت علامتگذاری شد.'
|
||||||
|
SPAM: هرزنوشت
|
||||||
SilverStripe\Comments\Controllers\CommentingController:
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
COMMENTS: دیدگاهها
|
COMMENTS: دیدگاهها
|
||||||
EMAILADDRESS: 'ایمیل شما (منتشر نخواهد شد)'
|
EMAILADDRESS: 'ایمیل شما (منتشر نخواهد شد)'
|
||||||
@ -68,18 +63,17 @@ fa_IR:
|
|||||||
WEBSITEURL: 'نشانی وبسایت شما'
|
WEBSITEURL: 'نشانی وبسایت شما'
|
||||||
SilverStripe\Comments\Extensions\CommentsExtension:
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
COMMENTOPTIONS: دیدگاهها
|
COMMENTOPTIONS: دیدگاهها
|
||||||
|
COMMENTSTABSET: دیدگاهها
|
||||||
MODERATIONREQUIRED_NONE: 'نیاز به مدیریت ندارد'
|
MODERATIONREQUIRED_NONE: 'نیاز به مدیریت ندارد'
|
||||||
MODERATIONREQUIRED_NONMEMBERSONLY: 'تنها مدیریت کاربران غیر عضو'
|
MODERATIONREQUIRED_NONMEMBERSONLY: 'تنها مدیریت کاربران غیر عضو'
|
||||||
MODERATIONREQUIRED_REQUIRED: 'مدیریت تمامی دیدگاهها'
|
MODERATIONREQUIRED_REQUIRED: 'مدیریت تمامی دیدگاهها'
|
||||||
SilverStripe\Comments\Model\Comment:
|
SilverStripe\Comments\Model\Comment:
|
||||||
ALLOWCOMMENTS: 'اجازه نشر دیدگاه'
|
|
||||||
COMMENT: دیدگاه
|
COMMENT: دیدگاه
|
||||||
COMMENTBY: 'دیدگاه توسط %s'
|
COMMENTBY: 'دیدگاه توسط %s'
|
||||||
CREATED: 'تاریخ ارسال'
|
CREATED: 'تاریخ ارسال'
|
||||||
EMAIL: ایمیل
|
EMAIL: ایمیل
|
||||||
ISSPAM: هرزنوشت؟
|
ISSPAM: هرزنوشت؟
|
||||||
MODERATED: 'مدیریت شده؟'
|
MODERATED: 'مدیریت شده؟'
|
||||||
NAME: 'نام نگارنده'
|
|
||||||
'ON': در
|
'ON': در
|
||||||
OPTIONS: گزینهها
|
OPTIONS: گزینهها
|
||||||
OPTION_DESCRIPTION: 'دیدگاههای مدیریت نشده و هرزنوشتها تا زمان تایید به نمایش در نخواهند آمد'
|
OPTION_DESCRIPTION: 'دیدگاههای مدیریت نشده و هرزنوشتها تا زمان تایید به نمایش در نخواهند آمد'
|
||||||
|
19
lang/fi.yml
19
lang/fi.yml
@ -12,19 +12,12 @@ fi:
|
|||||||
Comments:
|
Comments:
|
||||||
COMMENTSREQUIRELOGIN: 'Vaadi kirjautuminen kommentointiin'
|
COMMENTSREQUIRELOGIN: 'Vaadi kirjautuminen kommentointiin'
|
||||||
CommentsAdmin:
|
CommentsAdmin:
|
||||||
ApprovedComments: Hyväksytty
|
|
||||||
Comments: Hyväksytty
|
Comments: Hyväksytty
|
||||||
NeedsModeration: 'Tarvitsee moderointia'
|
|
||||||
NewComments: Uusi
|
NewComments: Uusi
|
||||||
SpamComments: Spämmiä
|
SpamComments: Spämmiä
|
||||||
CommentsInterface_pendingcomment_ss:
|
CommentsInterface_pendingcomment_ss:
|
||||||
AWAITINGMODERATION: 'Kommenttisi on lähetetty ja odottaa moderointia.'
|
AWAITINGMODERATION: 'Kommenttisi on lähetetty ja odottaa moderointia.'
|
||||||
CommentsInterface_singlecomment_ss:
|
CommentsInterface_singlecomment_ss:
|
||||||
APPROVE: 'hyväksy se'
|
|
||||||
ISNTSPAM: 'ei spämmiä'
|
|
||||||
ISSPAM: 'merkitse spämmiksi'
|
|
||||||
PBY: Lähettänyt
|
|
||||||
REMCOM: 'hylkää se'
|
|
||||||
REPLYTO: Vastausosoite
|
REPLYTO: Vastausosoite
|
||||||
CommentsInterface_ss:
|
CommentsInterface_ss:
|
||||||
AWAITINGMODERATION: 'Kommenttisi on lähetetty ja odottaa moderointia.'
|
AWAITINGMODERATION: 'Kommenttisi on lähetetty ja odottaa moderointia.'
|
||||||
@ -41,15 +34,11 @@ fi:
|
|||||||
PREV: edellinen
|
PREV: edellinen
|
||||||
RSSFEEDALLCOMMENTS: 'RSS-syöte kaikista kommenteista'
|
RSSFEEDALLCOMMENTS: 'RSS-syöte kaikista kommenteista'
|
||||||
RSSFEEDCOMMENTS: 'RSS-syöte tämän sivun kommenteista'
|
RSSFEEDCOMMENTS: 'RSS-syöte tämän sivun kommenteista'
|
||||||
PageCommentInterface:
|
|
||||||
DELETEALLCOMMENTS: 'Poista kaikki tämän sivun kommentit'
|
|
||||||
SilverStripe\Comments\Admin\CommentAdmin:
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
ADMIN_PERMISSION: 'Pääsy Comments-osioon'
|
ADMIN_PERMISSION: 'Pääsy Comments-osioon'
|
||||||
ApprovedComments: Hyväksytty
|
ApprovedComments: Hyväksytty
|
||||||
Comments: Hyväksytty
|
Comments: Hyväksytty
|
||||||
MENUTITLE: Kommentit
|
MENUTITLE: Kommentit
|
||||||
Moderated: Moderoitu
|
|
||||||
NeedsModeration: 'Tarvitsee moderointia'
|
|
||||||
NewComments: Uusi
|
NewComments: Uusi
|
||||||
SpamComments: Spämmiä
|
SpamComments: Spämmiä
|
||||||
SilverStripe\Comments\Admin\CommentsGridFieldAction:
|
SilverStripe\Comments\Admin\CommentsGridFieldAction:
|
||||||
@ -57,9 +46,15 @@ fi:
|
|||||||
COMMENTAPPROVED: 'Kommentti hyväksytty'
|
COMMENTAPPROVED: 'Kommentti hyväksytty'
|
||||||
COMMENTMARKEDSPAM: 'Kommentti merkitty spämmiksi.'
|
COMMENTMARKEDSPAM: 'Kommentti merkitty spämmiksi.'
|
||||||
SPAM: Spämmiä
|
SPAM: Spämmiä
|
||||||
|
SilverStripe\Comments\Admin\CommentsGridFieldApproveAction:
|
||||||
|
APPROVE: Hyväksy
|
||||||
|
COMMENTAPPROVED: 'Kommentti hyväksytty'
|
||||||
SilverStripe\Comments\Admin\CommentsGridFieldConfig:
|
SilverStripe\Comments\Admin\CommentsGridFieldConfig:
|
||||||
APPROVE: Hyväksy
|
APPROVE: Hyväksy
|
||||||
SPAM: Spämmiä
|
SPAM: Spämmiä
|
||||||
|
SilverStripe\Comments\Admin\CommentsGridFieldSpamAction:
|
||||||
|
COMMENTMARKEDSPAM: 'Kommentti merkitty spämmiksi.'
|
||||||
|
SPAM: Spämmiä
|
||||||
SilverStripe\Comments\Controllers\CommentingController:
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
COMMENTS: Kommentit
|
COMMENTS: Kommentit
|
||||||
EMAILADDRESS: 'Sähköpostiosoitteesi (ei julkaista)'
|
EMAILADDRESS: 'Sähköpostiosoitteesi (ei julkaista)'
|
||||||
@ -73,14 +68,12 @@ fi:
|
|||||||
MODERATIONREQUIRED_NONMEMBERSONLY: 'Moderoi vain ei-jäsenet'
|
MODERATIONREQUIRED_NONMEMBERSONLY: 'Moderoi vain ei-jäsenet'
|
||||||
MODERATIONREQUIRED_REQUIRED: 'Moderoi kaikki kommentit'
|
MODERATIONREQUIRED_REQUIRED: 'Moderoi kaikki kommentit'
|
||||||
SilverStripe\Comments\Model\Comment:
|
SilverStripe\Comments\Model\Comment:
|
||||||
ALLOWCOMMENTS: 'Salli kommentointi'
|
|
||||||
COMMENT: Komentti
|
COMMENT: Komentti
|
||||||
COMMENTBY: 'Kommentoija: %s'
|
COMMENTBY: 'Kommentoija: %s'
|
||||||
CREATED: Kirjoitettu
|
CREATED: Kirjoitettu
|
||||||
EMAIL: Sähköposti
|
EMAIL: Sähköposti
|
||||||
ISSPAM: 'Spämmiä?'
|
ISSPAM: 'Spämmiä?'
|
||||||
MODERATED: 'Moderoitu?'
|
MODERATED: 'Moderoitu?'
|
||||||
NAME: 'Kirjoittajan nimi'
|
|
||||||
'ON': pvm
|
'ON': pvm
|
||||||
OPTIONS: Asetukset
|
OPTIONS: Asetukset
|
||||||
OPTION_DESCRIPTION: 'Moderoimattomat ja roskakommentit eivät näy ennen hyväksymistä'
|
OPTION_DESCRIPTION: 'Moderoimattomat ja roskakommentit eivät näy ennen hyväksymistä'
|
||||||
|
15
lang/fi_FI.yml
Normal file
15
lang/fi_FI.yml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
fi_FI:
|
||||||
|
CommentsInterface_ss:
|
||||||
|
COMMENTS: Kommentit
|
||||||
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
|
MENUTITLE: Kommentit
|
||||||
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
|
COMMENTS: Kommentit
|
||||||
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
|
COMMENTOPTIONS: Kommentit
|
||||||
|
COMMENTSTABSET: Kommentit
|
||||||
|
SilverStripe\Comments\Model\Comment:
|
||||||
|
EMAIL: Sähköposti
|
||||||
|
OPTIONS: Valinnat
|
||||||
|
PLURALNAME: Kommentit
|
||||||
|
URL: URL-osoite
|
14
lang/fr.yml
14
lang/fr.yml
@ -9,12 +9,8 @@ fr:
|
|||||||
PREVIEWLABEL: Aperçu
|
PREVIEWLABEL: Aperçu
|
||||||
YOURNAME: 'Votre Nom'
|
YOURNAME: 'Votre Nom'
|
||||||
YOURNAME_MESSAGE_REQUIRED: 'Saisissez votre nom'
|
YOURNAME_MESSAGE_REQUIRED: 'Saisissez votre nom'
|
||||||
CommentsAdmin:
|
|
||||||
NeedsModeration: 'Besoin de Modération'
|
|
||||||
CommentsInterface_pendingcomment_ss:
|
CommentsInterface_pendingcomment_ss:
|
||||||
AWAITINGMODERATION: 'Votre commentaire a été soumis à modération.'
|
AWAITINGMODERATION: 'Votre commentaire a été soumis à modération.'
|
||||||
CommentsInterface_singlecomment_ss:
|
|
||||||
PBY: 'Posté par'
|
|
||||||
CommentsInterface_ss:
|
CommentsInterface_ss:
|
||||||
AWAITINGMODERATION: 'Votre commentaire a été soumis à modération.'
|
AWAITINGMODERATION: 'Votre commentaire a été soumis à modération.'
|
||||||
COMMENTLOGINERROR: 'Vous ne pouvez pas poster de commentaires sans être connecté'
|
COMMENTLOGINERROR: 'Vous ne pouvez pas poster de commentaires sans être connecté'
|
||||||
@ -22,6 +18,7 @@ fr:
|
|||||||
COMMENTPOSTLOGIN: 'Se connecter'
|
COMMENTPOSTLOGIN: 'Se connecter'
|
||||||
COMMENTS: Commentaires
|
COMMENTS: Commentaires
|
||||||
COMMENTSDISABLED: 'La publication de commentaires est désactivée'
|
COMMENTSDISABLED: 'La publication de commentaires est désactivée'
|
||||||
|
DELETEALLCOMMENTS: 'Supprimer tout les commentaires de cette page'
|
||||||
LOGINTOPOSTCOMMENT: 'Connectez vous pour poster un commentaire'
|
LOGINTOPOSTCOMMENT: 'Connectez vous pour poster un commentaire'
|
||||||
NEXT: suivant
|
NEXT: suivant
|
||||||
NOCOMMENTSYET: 'Il n''y a pas encore de commentaire.'
|
NOCOMMENTSYET: 'Il n''y a pas encore de commentaire.'
|
||||||
@ -29,12 +26,8 @@ fr:
|
|||||||
PREV: précédent
|
PREV: précédent
|
||||||
RSSFEEDALLCOMMENTS: 'Flux RSS de tous les commentaires'
|
RSSFEEDALLCOMMENTS: 'Flux RSS de tous les commentaires'
|
||||||
RSSFEEDCOMMENTS: 'Flux RSS de commentaires de cette page'
|
RSSFEEDCOMMENTS: 'Flux RSS de commentaires de cette page'
|
||||||
PageCommentInterface:
|
|
||||||
DELETEALLCOMMENTS: 'Supprimer tout les commentaires de cette page'
|
|
||||||
SilverStripe\Comments\Admin\CommentAdmin:
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
MENUTITLE: Commentaires
|
MENUTITLE: Commentaires
|
||||||
Moderated: Modéré
|
|
||||||
NeedsModeration: 'Besoin de modération'
|
|
||||||
SilverStripe\Comments\Controllers\CommentingController:
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
COMMENTS: Commentaires
|
COMMENTS: Commentaires
|
||||||
EMAILADDRESS: 'Votre adresse e-mail (ne sera pas publiée)'
|
EMAILADDRESS: 'Votre adresse e-mail (ne sera pas publiée)'
|
||||||
@ -43,15 +36,16 @@ fr:
|
|||||||
WEBSITEURL: 'URl de votre site web'
|
WEBSITEURL: 'URl de votre site web'
|
||||||
SilverStripe\Comments\Extensions\CommentsExtension:
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
COMMENTOPTIONS: Commentaires
|
COMMENTOPTIONS: Commentaires
|
||||||
|
COMMENTSTABSET: Commentaires
|
||||||
SilverStripe\Comments\Model\Comment:
|
SilverStripe\Comments\Model\Comment:
|
||||||
ALLOWCOMMENTS: 'Autoriser Commentaires'
|
|
||||||
COMMENT: Commentaire
|
COMMENT: Commentaire
|
||||||
COMMENTBY: 'Commentaire par %s'
|
COMMENTBY: 'Commentaire par %s'
|
||||||
CREATED: 'Date de publication'
|
CREATED: 'Date de publication'
|
||||||
EMAIL: Email
|
EMAIL: Email
|
||||||
ISSPAM: 'Spam?'
|
ISSPAM: 'Spam?'
|
||||||
MODERATED: 'Modéré?'
|
MODERATED: 'Modéré?'
|
||||||
NAME: 'Nom de l''Auteur'
|
'ON': sur
|
||||||
|
OPTIONS: Options
|
||||||
PARENTTITLE: Parent
|
PARENTTITLE: Parent
|
||||||
PLURALNAME: Commentaires
|
PLURALNAME: Commentaires
|
||||||
SINGULARNAME: Commentaire
|
SINGULARNAME: Commentaire
|
||||||
|
16
lang/gl_ES.yml
Normal file
16
lang/gl_ES.yml
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
gl_ES:
|
||||||
|
CommentInterface:
|
||||||
|
PREVIEW: Previsualizar
|
||||||
|
PREVIEWLABEL: Previsualizar
|
||||||
|
CommentsInterface_ss:
|
||||||
|
COMMENTS: Comentarios
|
||||||
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
|
MENUTITLE: Comentarios
|
||||||
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
|
COMMENTS: Comentarios
|
||||||
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
|
COMMENTOPTIONS: Comentarios
|
||||||
|
COMMENTSTABSET: Comentarios
|
||||||
|
SilverStripe\Comments\Model\Comment:
|
||||||
|
EMAIL: Correo-e
|
||||||
|
PLURALNAME: Comentarios
|
17
lang/he_IL.yml
Normal file
17
lang/he_IL.yml
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
he_IL:
|
||||||
|
CommentInterface:
|
||||||
|
PREVIEW: 'תצוגה מקדימה'
|
||||||
|
PREVIEWLABEL: 'תצוגה מקדימה'
|
||||||
|
CommentsInterface_ss:
|
||||||
|
COMMENTS: תגובות
|
||||||
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
|
MENUTITLE: תגובות
|
||||||
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
|
COMMENTS: תגובות
|
||||||
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
|
COMMENTOPTIONS: תגובות
|
||||||
|
COMMENTSTABSET: תגובות
|
||||||
|
SilverStripe\Comments\Model\Comment:
|
||||||
|
EMAIL: 'דואר אלקטרוני'
|
||||||
|
PLURALNAME: תגובות
|
||||||
|
URL: 'כתובת הדף'
|
20
lang/hr.yml
20
lang/hr.yml
@ -12,19 +12,12 @@ hr:
|
|||||||
Comments:
|
Comments:
|
||||||
COMMENTSREQUIRELOGIN: 'Zahtjeva prijavu za komentiranje'
|
COMMENTSREQUIRELOGIN: 'Zahtjeva prijavu za komentiranje'
|
||||||
CommentsAdmin:
|
CommentsAdmin:
|
||||||
ApprovedComments: Odobren
|
|
||||||
Comments: Odobren
|
Comments: Odobren
|
||||||
NeedsModeration: 'Zahtjeva moderaciju'
|
|
||||||
NewComments: Novo
|
NewComments: Novo
|
||||||
SpamComments: Spam
|
SpamComments: Spam
|
||||||
CommentsInterface_pendingcomment_ss:
|
CommentsInterface_pendingcomment_ss:
|
||||||
AWAITINGMODERATION: 'Vaš komentar je zaprimljen i čeka odobrenje.'
|
AWAITINGMODERATION: 'Vaš komentar je zaprimljen i čeka odobrenje.'
|
||||||
CommentsInterface_singlecomment_ss:
|
CommentsInterface_singlecomment_ss:
|
||||||
APPROVE: 'odobri ga'
|
|
||||||
ISNTSPAM: 'nije spam'
|
|
||||||
ISSPAM: 'Spamaj ga'
|
|
||||||
PBY: Objavio
|
|
||||||
REMCOM: 'odbaci ga'
|
|
||||||
REPLYTO: 'Odgovori na'
|
REPLYTO: 'Odgovori na'
|
||||||
CommentsInterface_ss:
|
CommentsInterface_ss:
|
||||||
AWAITINGMODERATION: 'Vaš komentar je zaprimljen i čeka odobrenje.'
|
AWAITINGMODERATION: 'Vaš komentar je zaprimljen i čeka odobrenje.'
|
||||||
@ -41,15 +34,11 @@ hr:
|
|||||||
PREV: prethodni
|
PREV: prethodni
|
||||||
RSSFEEDALLCOMMENTS: 'RSS kanal za sve komentare'
|
RSSFEEDALLCOMMENTS: 'RSS kanal za sve komentare'
|
||||||
RSSFEEDCOMMENTS: 'RSS kanal za sve komentare na ovoj stranici'
|
RSSFEEDCOMMENTS: 'RSS kanal za sve komentare na ovoj stranici'
|
||||||
PageCommentInterface:
|
|
||||||
DELETEALLCOMMENTS: 'Obriši sve komentare na ovoj stranici'
|
|
||||||
SilverStripe\Comments\Admin\CommentAdmin:
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
ADMIN_PERMISSION: 'Pristup ''Comments'' sekciji'
|
ADMIN_PERMISSION: 'Pristup ''Comments'' sekciji'
|
||||||
ApprovedComments: Odobren
|
ApprovedComments: Odobren
|
||||||
Comments: Odobren
|
Comments: Odobren
|
||||||
MENUTITLE: Komentari
|
MENUTITLE: Komentari
|
||||||
Moderated: Moderiran
|
|
||||||
NeedsModeration: 'Zahtjeva moderaciju'
|
|
||||||
NewComments: Novo
|
NewComments: Novo
|
||||||
SpamComments: Spam
|
SpamComments: Spam
|
||||||
SilverStripe\Comments\Admin\CommentsGridFieldAction:
|
SilverStripe\Comments\Admin\CommentsGridFieldAction:
|
||||||
@ -57,9 +46,15 @@ hr:
|
|||||||
COMMENTAPPROVED: 'Komentar odobren.'
|
COMMENTAPPROVED: 'Komentar odobren.'
|
||||||
COMMENTMARKEDSPAM: 'Komentar označen kao spam.'
|
COMMENTMARKEDSPAM: 'Komentar označen kao spam.'
|
||||||
SPAM: SPam
|
SPAM: SPam
|
||||||
|
SilverStripe\Comments\Admin\CommentsGridFieldApproveAction:
|
||||||
|
APPROVE: Odobri
|
||||||
|
COMMENTAPPROVED: 'Komentar odobren.'
|
||||||
SilverStripe\Comments\Admin\CommentsGridFieldConfig:
|
SilverStripe\Comments\Admin\CommentsGridFieldConfig:
|
||||||
APPROVE: Odobri
|
APPROVE: Odobri
|
||||||
SPAM: Spam
|
SPAM: Spam
|
||||||
|
SilverStripe\Comments\Admin\CommentsGridFieldSpamAction:
|
||||||
|
COMMENTMARKEDSPAM: 'Komentar označen kao spam.'
|
||||||
|
SPAM: Spam
|
||||||
SilverStripe\Comments\Controllers\CommentingController:
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
COMMENTS: Komentari
|
COMMENTS: Komentari
|
||||||
EMAILADDRESS: 'Vaša email adresa (neće biti objavljena)'
|
EMAILADDRESS: 'Vaša email adresa (neće biti objavljena)'
|
||||||
@ -68,18 +63,17 @@ hr:
|
|||||||
WEBSITEURL: 'Vaša web adresa'
|
WEBSITEURL: 'Vaša web adresa'
|
||||||
SilverStripe\Comments\Extensions\CommentsExtension:
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
COMMENTOPTIONS: Komentari
|
COMMENTOPTIONS: Komentari
|
||||||
|
COMMENTSTABSET: Komentari
|
||||||
MODERATIONREQUIRED_NONE: 'Nije potrebna moderacija'
|
MODERATIONREQUIRED_NONE: 'Nije potrebna moderacija'
|
||||||
MODERATIONREQUIRED_NONMEMBERSONLY: 'Samo moderiraj goste'
|
MODERATIONREQUIRED_NONMEMBERSONLY: 'Samo moderiraj goste'
|
||||||
MODERATIONREQUIRED_REQUIRED: 'Moderiraj sve komentare'
|
MODERATIONREQUIRED_REQUIRED: 'Moderiraj sve komentare'
|
||||||
SilverStripe\Comments\Model\Comment:
|
SilverStripe\Comments\Model\Comment:
|
||||||
ALLOWCOMMENTS: 'Dozvoli komentare'
|
|
||||||
COMMENT: Komentar
|
COMMENT: Komentar
|
||||||
COMMENTBY: 'Komentar od %s'
|
COMMENTBY: 'Komentar od %s'
|
||||||
CREATED: 'Datum objave'
|
CREATED: 'Datum objave'
|
||||||
EMAIL: Email
|
EMAIL: Email
|
||||||
ISSPAM: 'Spam?'
|
ISSPAM: 'Spam?'
|
||||||
MODERATED: 'Moderirano?'
|
MODERATED: 'Moderirano?'
|
||||||
NAME: 'Ime autora'
|
|
||||||
'ON': na
|
'ON': na
|
||||||
OPTIONS: Opcije
|
OPTIONS: Opcije
|
||||||
OPTION_DESCRIPTION: 'Nemoderirani i spam komentari neće biti objavljeni dok se ne odobre'
|
OPTION_DESCRIPTION: 'Nemoderirani i spam komentari neće biti objavljeni dok se ne odobre'
|
||||||
|
14
lang/hu.yml
14
lang/hu.yml
@ -9,12 +9,8 @@ hu:
|
|||||||
PREVIEWLABEL: Előnézet
|
PREVIEWLABEL: Előnézet
|
||||||
YOURNAME: 'Az Ön neve'
|
YOURNAME: 'Az Ön neve'
|
||||||
YOURNAME_MESSAGE_REQUIRED: 'Kérjük adja meg nevét'
|
YOURNAME_MESSAGE_REQUIRED: 'Kérjük adja meg nevét'
|
||||||
CommentsAdmin:
|
|
||||||
NeedsModeration: 'Moderálás szükséges'
|
|
||||||
CommentsInterface_pendingcomment_ss:
|
CommentsInterface_pendingcomment_ss:
|
||||||
AWAITINGMODERATION: 'Hozzászólását moderálásra továbbítottuk'
|
AWAITINGMODERATION: 'Hozzászólását moderálásra továbbítottuk'
|
||||||
CommentsInterface_singlecomment_ss:
|
|
||||||
PBY: Feladó
|
|
||||||
CommentsInterface_ss:
|
CommentsInterface_ss:
|
||||||
AWAITINGMODERATION: 'Hozzászólását moderálásra továbbítottuk'
|
AWAITINGMODERATION: 'Hozzászólását moderálásra továbbítottuk'
|
||||||
COMMENTLOGINERROR: 'A hozzászóláshoz be kell jelentkeznie'
|
COMMENTLOGINERROR: 'A hozzászóláshoz be kell jelentkeznie'
|
||||||
@ -22,6 +18,7 @@ hu:
|
|||||||
COMMENTPOSTLOGIN: Bejelentkezés
|
COMMENTPOSTLOGIN: Bejelentkezés
|
||||||
COMMENTS: Hozzászólások
|
COMMENTS: Hozzászólások
|
||||||
COMMENTSDISABLED: 'A hozzászólások le vannak tiltva '
|
COMMENTSDISABLED: 'A hozzászólások le vannak tiltva '
|
||||||
|
DELETEALLCOMMENTS: 'Oldal összes hozzászólásának törlése'
|
||||||
LOGINTOPOSTCOMMENT: 'A hozzászóláshoz jelentkezzen be '
|
LOGINTOPOSTCOMMENT: 'A hozzászóláshoz jelentkezzen be '
|
||||||
NEXT: következő
|
NEXT: következő
|
||||||
NOCOMMENTSYET: 'Nem érkeztek hozzászólások'
|
NOCOMMENTSYET: 'Nem érkeztek hozzászólások'
|
||||||
@ -29,28 +26,25 @@ hu:
|
|||||||
PREV: előző
|
PREV: előző
|
||||||
RSSFEEDALLCOMMENTS: 'Összes hozzászólás RSS-ben'
|
RSSFEEDALLCOMMENTS: 'Összes hozzászólás RSS-ben'
|
||||||
RSSFEEDCOMMENTS: 'Oldal hozzászólásai RSS-ben'
|
RSSFEEDCOMMENTS: 'Oldal hozzászólásai RSS-ben'
|
||||||
PageCommentInterface:
|
|
||||||
DELETEALLCOMMENTS: 'Oldal összes hozzászólásának törlése'
|
|
||||||
SilverStripe\Comments\Admin\CommentAdmin:
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
ADMIN_PERMISSION: '''Hozzászólások'' mező elérése'
|
ADMIN_PERMISSION: '''Hozzászólások'' mező elérése'
|
||||||
MENUTITLE: Hozzászólások
|
MENUTITLE: Hozzászólások
|
||||||
Moderated: Moderált
|
|
||||||
NeedsModeration: 'Moderálás szükséges'
|
|
||||||
SilverStripe\Comments\Controllers\CommentingController:
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
COMMENTS: 'A hosszászólás szövege'
|
COMMENTS: 'A hosszászólás szövege'
|
||||||
EMAILADDRESS: 'Az Ön e-mail címe (nem látható)'
|
EMAILADDRESS: 'Az Ön e-mail címe (nem látható)'
|
||||||
PERMISSIONFAILURE: 'Ön csak a bejelentkezést követően, és a megfelelő jogosultság birtokában hozhat létre hozzászólást.'
|
PERMISSIONFAILURE: 'Ön csak a bejelentkezést követően, és a megfelelő jogosultság birtokában hozhat létre hozzászólást.'
|
||||||
RSSTITLE: 'Hozzászólások RSS-ben'
|
RSSTITLE: 'Hozzászólások RSS-ben'
|
||||||
WEBSITEURL: 'Az Ön webcíme'
|
WEBSITEURL: 'Az Ön webcíme'
|
||||||
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
|
COMMENTOPTIONS: Hozzászólások
|
||||||
|
COMMENTSTABSET: Hozzászólások
|
||||||
SilverStripe\Comments\Model\Comment:
|
SilverStripe\Comments\Model\Comment:
|
||||||
ALLOWCOMMENTS: 'Hozzászólások engedélyezve'
|
|
||||||
COMMENT: Hozzászólás
|
COMMENT: Hozzászólás
|
||||||
COMMENTBY: 'Létrehozta %s'
|
COMMENTBY: 'Létrehozta %s'
|
||||||
CREATED: 'Létrehozás dátuma'
|
CREATED: 'Létrehozás dátuma'
|
||||||
EMAIL: E-mail
|
EMAIL: E-mail
|
||||||
ISSPAM: 'SPAM?'
|
ISSPAM: 'SPAM?'
|
||||||
MODERATED: 'Moderált?'
|
MODERATED: 'Moderált?'
|
||||||
NAME: 'Hozzászóló neve'
|
|
||||||
PARENTTITLE: Szülő
|
PARENTTITLE: Szülő
|
||||||
PLURALNAME: Hozzászólások
|
PLURALNAME: Hozzászólások
|
||||||
SINGULARNAME: Hozzászólás
|
SINGULARNAME: Hozzászólás
|
||||||
|
14
lang/id.yml
14
lang/id.yml
@ -9,12 +9,8 @@ id:
|
|||||||
PREVIEWLABEL: Pratinjau
|
PREVIEWLABEL: Pratinjau
|
||||||
YOURNAME: 'Nama Anda'
|
YOURNAME: 'Nama Anda'
|
||||||
YOURNAME_MESSAGE_REQUIRED: 'Isikan nama Anda'
|
YOURNAME_MESSAGE_REQUIRED: 'Isikan nama Anda'
|
||||||
CommentsAdmin:
|
|
||||||
NeedsModeration: 'Perlu Moderasi'
|
|
||||||
CommentsInterface_pendingcomment_ss:
|
CommentsInterface_pendingcomment_ss:
|
||||||
AWAITINGMODERATION: 'Komentar Anda sudah terkirim dan menunggu moderasi.'
|
AWAITINGMODERATION: 'Komentar Anda sudah terkirim dan menunggu moderasi.'
|
||||||
CommentsInterface_singlecomment_ss:
|
|
||||||
PBY: 'Komentar oleh'
|
|
||||||
CommentsInterface_ss:
|
CommentsInterface_ss:
|
||||||
AWAITINGMODERATION: 'Komentar Anda sudah terkirim dan menunggu moderasi.'
|
AWAITINGMODERATION: 'Komentar Anda sudah terkirim dan menunggu moderasi.'
|
||||||
COMMENTLOGINERROR: 'Anda tidak dapat mengomentari jika belum login'
|
COMMENTLOGINERROR: 'Anda tidak dapat mengomentari jika belum login'
|
||||||
@ -22,6 +18,7 @@ id:
|
|||||||
COMMENTPOSTLOGIN: 'Login di Sini'
|
COMMENTPOSTLOGIN: 'Login di Sini'
|
||||||
COMMENTS: Komentar
|
COMMENTS: Komentar
|
||||||
COMMENTSDISABLED: 'Komentar sedang dinonaktifkan'
|
COMMENTSDISABLED: 'Komentar sedang dinonaktifkan'
|
||||||
|
DELETEALLCOMMENTS: 'Hapus semua komentar di laman ini'
|
||||||
LOGINTOPOSTCOMMENT: 'Login untuk berkomentar'
|
LOGINTOPOSTCOMMENT: 'Login untuk berkomentar'
|
||||||
NEXT: selanjutnya
|
NEXT: selanjutnya
|
||||||
NOCOMMENTSYET: 'Belum ada yang berkomentar.'
|
NOCOMMENTSYET: 'Belum ada yang berkomentar.'
|
||||||
@ -29,27 +26,24 @@ id:
|
|||||||
PREV: sebelumnya
|
PREV: sebelumnya
|
||||||
RSSFEEDALLCOMMENTS: 'Sindikasi RSS untuk semua komentar'
|
RSSFEEDALLCOMMENTS: 'Sindikasi RSS untuk semua komentar'
|
||||||
RSSFEEDCOMMENTS: 'Sindikasi RSS untuk komentar di laman ini'
|
RSSFEEDCOMMENTS: 'Sindikasi RSS untuk komentar di laman ini'
|
||||||
PageCommentInterface:
|
|
||||||
DELETEALLCOMMENTS: 'Hapus semua komentar di laman ini'
|
|
||||||
SilverStripe\Comments\Admin\CommentAdmin:
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
MENUTITLE: Komentar
|
MENUTITLE: Komentar
|
||||||
Moderated: Dimoderasi
|
|
||||||
NeedsModeration: 'Perlu Moderasi'
|
|
||||||
SilverStripe\Comments\Controllers\CommentingController:
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
COMMENTS: Komentar
|
COMMENTS: Komentar
|
||||||
EMAILADDRESS: 'Alamat email Anda (tidak akan diterbitkan)'
|
EMAILADDRESS: 'Alamat email Anda (tidak akan diterbitkan)'
|
||||||
PERMISSIONFAILURE: 'Anda tidak dapat mengomentari laman ini. Mohon pastikan Anda sudah login dan mendapatkan hak akses yang sesuai.'
|
PERMISSIONFAILURE: 'Anda tidak dapat mengomentari laman ini. Mohon pastikan Anda sudah login dan mendapatkan hak akses yang sesuai.'
|
||||||
RSSTITLE: 'Sindikasi RSS Komentar'
|
RSSTITLE: 'Sindikasi RSS Komentar'
|
||||||
WEBSITEURL: 'URL situs Anda'
|
WEBSITEURL: 'URL situs Anda'
|
||||||
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
|
COMMENTOPTIONS: Komentar
|
||||||
|
COMMENTSTABSET: Komentar
|
||||||
SilverStripe\Comments\Model\Comment:
|
SilverStripe\Comments\Model\Comment:
|
||||||
ALLOWCOMMENTS: 'Bolehkan Komentar'
|
|
||||||
COMMENT: Komentar
|
COMMENT: Komentar
|
||||||
COMMENTBY: 'Komentar oleh %s'
|
COMMENTBY: 'Komentar oleh %s'
|
||||||
CREATED: 'Tanggal kirim'
|
CREATED: 'Tanggal kirim'
|
||||||
EMAIL: Email
|
EMAIL: Email
|
||||||
ISSPAM: 'Spam?'
|
ISSPAM: 'Spam?'
|
||||||
MODERATED: 'Moderasi?'
|
MODERATED: 'Moderasi?'
|
||||||
NAME: 'Nama Penulis'
|
|
||||||
PARENTTITLE: Induk
|
PARENTTITLE: Induk
|
||||||
PLURALNAME: Komentar
|
PLURALNAME: Komentar
|
||||||
SINGULARNAME: Komentar
|
SINGULARNAME: Komentar
|
||||||
|
15
lang/is.yml
Normal file
15
lang/is.yml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
is:
|
||||||
|
CommentsInterface_ss:
|
||||||
|
COMMENTS: Athugasemdir
|
||||||
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
|
MENUTITLE: Athugasemdir
|
||||||
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
|
COMMENTS: Athugasemdir
|
||||||
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
|
COMMENTOPTIONS: Athugasemdir
|
||||||
|
COMMENTSTABSET: Athugasemdir
|
||||||
|
SilverStripe\Comments\Model\Comment:
|
||||||
|
EMAIL: Tölvupóstur
|
||||||
|
'ON': á
|
||||||
|
PLURALNAME: Athugasemdir
|
||||||
|
URL: 'Veffang (URL)'
|
22
lang/it.yml
Normal file
22
lang/it.yml
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
it:
|
||||||
|
CommentInterface:
|
||||||
|
PREVIEW: Anteprima
|
||||||
|
PREVIEWLABEL: Anteprima
|
||||||
|
CommentsInterface_ss:
|
||||||
|
COMMENTS: Commenti
|
||||||
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
|
MENUTITLE: Commenti
|
||||||
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
|
COMMENTS: Commenti
|
||||||
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
|
COMMENTOPTIONS: Commenti
|
||||||
|
COMMENTSTABSET: Commenti
|
||||||
|
SilverStripe\Comments\Model\Comment:
|
||||||
|
COMMENT: Commento
|
||||||
|
EMAIL: E-mail
|
||||||
|
'ON': il
|
||||||
|
OPTIONS: Opzioni
|
||||||
|
PARENTTITLE: Parente
|
||||||
|
PLURALNAME: Commenti
|
||||||
|
SINGULARNAME: Commento
|
||||||
|
URL: URL
|
18
lang/ja.yml
Normal file
18
lang/ja.yml
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
ja:
|
||||||
|
CommentInterface:
|
||||||
|
PREVIEW: プレビュー
|
||||||
|
PREVIEWLABEL: プレビュー
|
||||||
|
CommentsInterface_ss:
|
||||||
|
COMMENTS: コメント
|
||||||
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
|
MENUTITLE: コメント
|
||||||
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
|
COMMENTS: コメント
|
||||||
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
|
COMMENTOPTIONS: コメント
|
||||||
|
COMMENTSTABSET: コメント
|
||||||
|
SilverStripe\Comments\Model\Comment:
|
||||||
|
EMAIL: メール
|
||||||
|
OPTIONS: オプション
|
||||||
|
PLURALNAME: コメント
|
||||||
|
URL: URL
|
16
lang/ja_JP.yml
Normal file
16
lang/ja_JP.yml
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
ja_JP:
|
||||||
|
CommentInterface:
|
||||||
|
PREVIEW: プレビュー
|
||||||
|
PREVIEWLABEL: プレビュー
|
||||||
|
CommentsInterface_ss:
|
||||||
|
COMMENTS: コメント
|
||||||
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
|
MENUTITLE: コメント
|
||||||
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
|
COMMENTS: コメント
|
||||||
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
|
COMMENTOPTIONS: コメント
|
||||||
|
COMMENTSTABSET: コメント
|
||||||
|
SilverStripe\Comments\Model\Comment:
|
||||||
|
EMAIL: メールアドレス
|
||||||
|
PLURALNAME: コメント
|
17
lang/ko.yml
Normal file
17
lang/ko.yml
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
ko:
|
||||||
|
CommentInterface:
|
||||||
|
PREVIEW: 미리보기
|
||||||
|
PREVIEWLABEL: 미리보기
|
||||||
|
CommentsInterface_ss:
|
||||||
|
COMMENTS: 코멘트
|
||||||
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
|
MENUTITLE: 코멘트
|
||||||
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
|
COMMENTS: 코멘트
|
||||||
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
|
COMMENTOPTIONS: 코멘트
|
||||||
|
COMMENTSTABSET: 코멘트
|
||||||
|
SilverStripe\Comments\Model\Comment:
|
||||||
|
EMAIL: 이메일
|
||||||
|
PLURALNAME: 코멘트
|
||||||
|
URL: URL
|
21
lang/lt.yml
21
lang/lt.yml
@ -12,19 +12,11 @@ lt:
|
|||||||
Comments:
|
Comments:
|
||||||
COMMENTSREQUIRELOGIN: 'Būtina prisijungti komentavimui'
|
COMMENTSREQUIRELOGIN: 'Būtina prisijungti komentavimui'
|
||||||
CommentsAdmin:
|
CommentsAdmin:
|
||||||
ApprovedComments: Patvirtinti
|
|
||||||
Comments: Patvirtinti
|
Comments: Patvirtinti
|
||||||
NeedsModeration: 'Laukia patvirtinimo'
|
|
||||||
NewComments: Nauji
|
NewComments: Nauji
|
||||||
SpamComments: Šlamštas
|
SpamComments: Šlamštas
|
||||||
CommentsInterface_pendingcomment_ss:
|
CommentsInterface_pendingcomment_ss:
|
||||||
AWAITINGMODERATION: 'Jūsų komentaras išsiųstas ir laukia patvirtinimo.'
|
AWAITINGMODERATION: 'Jūsų komentaras išsiųstas ir laukia patvirtinimo.'
|
||||||
CommentsInterface_singlecomment_ss:
|
|
||||||
APPROVE: patvirtinti
|
|
||||||
ISNTSPAM: 'ne šlamštas'
|
|
||||||
ISSPAM: šlamštas
|
|
||||||
PBY: Paskelbė
|
|
||||||
REMCOM: ištrinti
|
|
||||||
CommentsInterface_ss:
|
CommentsInterface_ss:
|
||||||
AWAITINGMODERATION: 'Jūsų komentaras išsiųstas ir laukia patvirtinimo.'
|
AWAITINGMODERATION: 'Jūsų komentaras išsiųstas ir laukia patvirtinimo.'
|
||||||
COMMENTLOGINERROR: 'Negalite rašyti komentarų, jeigu nesate prisijungę'
|
COMMENTLOGINERROR: 'Negalite rašyti komentarų, jeigu nesate prisijungę'
|
||||||
@ -40,17 +32,19 @@ lt:
|
|||||||
PREV: ankstesni
|
PREV: ankstesni
|
||||||
RSSFEEDALLCOMMENTS: 'Visų komentarų RSS'
|
RSSFEEDALLCOMMENTS: 'Visų komentarų RSS'
|
||||||
RSSFEEDCOMMENTS: 'Šio puslapio komentarų RSS'
|
RSSFEEDCOMMENTS: 'Šio puslapio komentarų RSS'
|
||||||
PageCommentInterface:
|
|
||||||
DELETEALLCOMMENTS: 'Ištrinti visus komentarus šiame puslapyje'
|
|
||||||
SilverStripe\Comments\Admin\CommentAdmin:
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
ADMIN_PERMISSION: 'Patekti į ''Komentarų'' dalį'
|
ADMIN_PERMISSION: 'Patekti į ''Komentarų'' dalį'
|
||||||
ApprovedComments: Patvirtinti
|
ApprovedComments: Patvirtinti
|
||||||
Comments: Patvirtinti
|
Comments: Patvirtinti
|
||||||
MENUTITLE: Komentarai
|
MENUTITLE: Komentarai
|
||||||
Moderated: Patvirtinti
|
|
||||||
NeedsModeration: 'Laukia patvirtinimo'
|
|
||||||
NewComments: Nauji
|
NewComments: Nauji
|
||||||
SpamComments: Šlamštas
|
SpamComments: Šlamštas
|
||||||
|
SilverStripe\Comments\Admin\CommentsGridFieldAction:
|
||||||
|
SPAM: Šlamštas
|
||||||
|
SilverStripe\Comments\Admin\CommentsGridFieldConfig:
|
||||||
|
SPAM: Šlamštas
|
||||||
|
SilverStripe\Comments\Admin\CommentsGridFieldSpamAction:
|
||||||
|
SPAM: Šlamštas
|
||||||
SilverStripe\Comments\Controllers\CommentingController:
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
COMMENTS: Komentarai
|
COMMENTS: Komentarai
|
||||||
EMAILADDRESS: 'Jūsų el.pašto adresas (nebus skelbiamas)'
|
EMAILADDRESS: 'Jūsų el.pašto adresas (nebus skelbiamas)'
|
||||||
@ -59,18 +53,17 @@ lt:
|
|||||||
WEBSITEURL: 'Jūsų svetainės nuoroda'
|
WEBSITEURL: 'Jūsų svetainės nuoroda'
|
||||||
SilverStripe\Comments\Extensions\CommentsExtension:
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
COMMENTOPTIONS: Komentarai
|
COMMENTOPTIONS: Komentarai
|
||||||
|
COMMENTSTABSET: Komentarai
|
||||||
MODERATIONREQUIRED_NONE: 'Nereikalauja patvirtinimo'
|
MODERATIONREQUIRED_NONE: 'Nereikalauja patvirtinimo'
|
||||||
MODERATIONREQUIRED_NONMEMBERSONLY: 'Tvirtinti tik neregistruotų vartotojų'
|
MODERATIONREQUIRED_NONMEMBERSONLY: 'Tvirtinti tik neregistruotų vartotojų'
|
||||||
MODERATIONREQUIRED_REQUIRED: 'Tvirtinti visus komentarus'
|
MODERATIONREQUIRED_REQUIRED: 'Tvirtinti visus komentarus'
|
||||||
SilverStripe\Comments\Model\Comment:
|
SilverStripe\Comments\Model\Comment:
|
||||||
ALLOWCOMMENTS: 'Leisti komentarus'
|
|
||||||
COMMENT: Komentaras
|
COMMENT: Komentaras
|
||||||
COMMENTBY: 'Komentarą parašė ''%s'''
|
COMMENTBY: 'Komentarą parašė ''%s'''
|
||||||
CREATED: 'Paskelbimo data'
|
CREATED: 'Paskelbimo data'
|
||||||
EMAIL: 'E. paštas'
|
EMAIL: 'E. paštas'
|
||||||
ISSPAM: 'Šlamštas?'
|
ISSPAM: 'Šlamštas?'
|
||||||
MODERATED: 'Patvirtintas?'
|
MODERATED: 'Patvirtintas?'
|
||||||
NAME: 'Autoriaus Vardas'
|
|
||||||
'ON': į
|
'ON': į
|
||||||
OPTION_DESCRIPTION: 'Nepatvirtinti komentarai nebus rodomi, kol jie atskirai nebus patvirtinti'
|
OPTION_DESCRIPTION: 'Nepatvirtinti komentarai nebus rodomi, kol jie atskirai nebus patvirtinti'
|
||||||
PARENTTITLE: Priklauso
|
PARENTTITLE: Priklauso
|
||||||
|
21
lang/mi.yml
Normal file
21
lang/mi.yml
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
mi:
|
||||||
|
CommentInterface:
|
||||||
|
PREVIEW: Arokite
|
||||||
|
PREVIEWLABEL: Arokite
|
||||||
|
CommentsInterface_ss:
|
||||||
|
COMMENTS: 'Ngā Tākupu'
|
||||||
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
|
MENUTITLE: 'Ngā Tākupu'
|
||||||
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
|
COMMENTS: 'Ngā Tākupu'
|
||||||
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
|
COMMENTOPTIONS: 'Ngā Tākupu'
|
||||||
|
COMMENTSTABSET: 'Ngā Tākupu'
|
||||||
|
SilverStripe\Comments\Model\Comment:
|
||||||
|
COMMENT: Tākupu
|
||||||
|
EMAIL: Īmēra
|
||||||
|
OPTIONS: 'Ngā Kōwhiringa'
|
||||||
|
PARENTTITLE: Matua
|
||||||
|
PLURALNAME: 'Ngā Tākupu'
|
||||||
|
SINGULARNAME: Tākupu
|
||||||
|
URL: PRO
|
20
lang/nb.yml
20
lang/nb.yml
@ -1,19 +1,20 @@
|
|||||||
nb:
|
nb:
|
||||||
CommentInterface:
|
CommentInterface:
|
||||||
|
EMAILADDRESS_MESSAGE_REQUIRED: 'Vennligst fyll inn din e-postadresse'
|
||||||
POST: 'Legg ut'
|
POST: 'Legg ut'
|
||||||
|
PREVIEW: Forhåndsvisning
|
||||||
|
PREVIEWLABEL: Forhåndsvisning
|
||||||
YOURNAME: Navn
|
YOURNAME: Navn
|
||||||
CommentsAdmin:
|
|
||||||
NeedsModeration: 'Trenger moderering'
|
|
||||||
CommentsInterface_pendingcomment_ss:
|
CommentsInterface_pendingcomment_ss:
|
||||||
AWAITINGMODERATION: 'Kommentaren din har blitt lagret og er lagt i kø for moderering.'
|
AWAITINGMODERATION: 'Kommentaren din har blitt lagret og er lagt i kø for moderering.'
|
||||||
CommentsInterface_singlecomment_ss:
|
|
||||||
PBY: 'Skrevet av'
|
|
||||||
CommentsInterface_ss:
|
CommentsInterface_ss:
|
||||||
|
AWAITINGMODERATION: 'Kommentaren din har blitt lagret og er lagt i kø for moderering.'
|
||||||
COMMENTLOGINERROR: 'Du kan ikke skrive kommentarer før du har logget inn'
|
COMMENTLOGINERROR: 'Du kan ikke skrive kommentarer før du har logget inn'
|
||||||
COMMENTPERMISSIONERROR: 'og at du har et passende tilgangsnivå'
|
COMMENTPERMISSIONERROR: 'og at du har et passende tilgangsnivå'
|
||||||
COMMENTPOSTLOGIN: 'Logg inn her'
|
COMMENTPOSTLOGIN: 'Logg inn her'
|
||||||
COMMENTS: Kommentarer
|
COMMENTS: Kommentarer
|
||||||
COMMENTSDISABLED: 'Kommentarskriving har blitt slått av'
|
COMMENTSDISABLED: 'Kommentarskriving har blitt slått av'
|
||||||
|
DELETEALLCOMMENTS: 'Fjern alle kommentarer på denne siden'
|
||||||
LOGINTOPOSTCOMMENT: 'Logg inn for å skrive en kommentar'
|
LOGINTOPOSTCOMMENT: 'Logg inn for å skrive en kommentar'
|
||||||
NEXT: neste
|
NEXT: neste
|
||||||
NOCOMMENTSYET: 'Ingen har skrevet en kommentar ennå.'
|
NOCOMMENTSYET: 'Ingen har skrevet en kommentar ennå.'
|
||||||
@ -21,23 +22,22 @@ nb:
|
|||||||
PREV: forrige
|
PREV: forrige
|
||||||
RSSFEEDALLCOMMENTS: 'RSS-feed for alle kommentarer'
|
RSSFEEDALLCOMMENTS: 'RSS-feed for alle kommentarer'
|
||||||
RSSFEEDCOMMENTS: 'RSS-feed for kommentarer på denne siden'
|
RSSFEEDCOMMENTS: 'RSS-feed for kommentarer på denne siden'
|
||||||
PageCommentInterface:
|
|
||||||
DELETEALLCOMMENTS: 'Fjern alle kommentarer på denne siden'
|
|
||||||
SilverStripe\Comments\Admin\CommentAdmin:
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
MENUTITLE: Kommentarer
|
MENUTITLE: Kommentarer
|
||||||
Moderated: Moderert
|
|
||||||
NeedsModeration: 'Trenger moderering'
|
|
||||||
SilverStripe\Comments\Controllers\CommentingController:
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
COMMENTS: Kommentar
|
COMMENTS: Kommentar
|
||||||
EMAILADDRESS: 'Epostadresse (blir ikke publisert)'
|
EMAILADDRESS: 'Epostadresse (blir ikke publisert)'
|
||||||
PERMISSIONFAILURE: 'Du kan ikke kommentere på denne siden. Vennligst sjekk at du er innlogget og har et passende tilgangsnivå.'
|
PERMISSIONFAILURE: 'Du kan ikke kommentere på denne siden. Vennligst sjekk at du er innlogget og har et passende tilgangsnivå.'
|
||||||
RSSTITLE: 'RSS-feed for kommentarer'
|
RSSTITLE: 'RSS-feed for kommentarer'
|
||||||
WEBSITEURL: Hjemmeside
|
WEBSITEURL: Hjemmeside
|
||||||
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
|
COMMENTOPTIONS: Kommentarer
|
||||||
|
COMMENTSTABSET: Kommentarer
|
||||||
SilverStripe\Comments\Model\Comment:
|
SilverStripe\Comments\Model\Comment:
|
||||||
ALLOWCOMMENTS: 'Tillat kommentarer'
|
|
||||||
COMMENT: Kommentar
|
COMMENT: Kommentar
|
||||||
|
EMAIL: Epost
|
||||||
ISSPAM: 'Spam?'
|
ISSPAM: 'Spam?'
|
||||||
MODERATED: 'Moderert?'
|
MODERATED: 'Moderert?'
|
||||||
NAME: Navn
|
|
||||||
PLURALNAME: Kommentarer
|
PLURALNAME: Kommentarer
|
||||||
SINGULARNAME: Kommentar
|
SINGULARNAME: Kommentar
|
||||||
|
URL: Nettadresse
|
||||||
|
37
lang/nl.yml
37
lang/nl.yml
@ -1,19 +1,30 @@
|
|||||||
nl:
|
nl:
|
||||||
CommentInterface:
|
CommentInterface:
|
||||||
|
COMMENT_MESSAGE_REQUIRED: 'Plaats een reactie'
|
||||||
|
COMMENT_MESSAGE_URL: 'Vul een geldige URL in'
|
||||||
|
EMAILADDRESS_MESSAGE_EMAIL: 'Gelieve een geldig email adres in te voeren'
|
||||||
|
EMAILADDRESS_MESSAGE_REQUIRED: 'Gelieve een email adres in te voeren.'
|
||||||
POST: 'Plaats reactie'
|
POST: 'Plaats reactie'
|
||||||
|
PREVIEW: Voorbeeld
|
||||||
|
PREVIEWLABEL: Voorbeeld
|
||||||
YOURNAME: Naam
|
YOURNAME: Naam
|
||||||
|
YOURNAME_MESSAGE_REQUIRED: 'Gelieve een naam in te voeren.'
|
||||||
|
Comments:
|
||||||
|
COMMENTSREQUIRELOGIN: 'Log in om een reactie te plaatsen'
|
||||||
CommentsAdmin:
|
CommentsAdmin:
|
||||||
NeedsModeration: 'Wacht op moderatie'
|
Comments: Goedgekeurd
|
||||||
|
NewComments: Nieuw
|
||||||
|
SpamComments: Spam
|
||||||
CommentsInterface_pendingcomment_ss:
|
CommentsInterface_pendingcomment_ss:
|
||||||
AWAITINGMODERATION: 'Je reactie is verstuurd en is in afwachting van moderatie.'
|
AWAITINGMODERATION: 'Je reactie is verstuurd en is in afwachting van moderatie.'
|
||||||
CommentsInterface_singlecomment_ss:
|
|
||||||
PBY: 'Geplaatst door'
|
|
||||||
CommentsInterface_ss:
|
CommentsInterface_ss:
|
||||||
|
AWAITINGMODERATION: 'Je reactie is verstuurd en is in afwachting van moderatie.'
|
||||||
COMMENTLOGINERROR: 'Je moet ingelogd zijn om reacties te kunnen plaatsen'
|
COMMENTLOGINERROR: 'Je moet ingelogd zijn om reacties te kunnen plaatsen'
|
||||||
COMMENTPERMISSIONERROR: 'en controleer je gebruikersrechten'
|
COMMENTPERMISSIONERROR: 'en controleer je gebruikersrechten'
|
||||||
COMMENTPOSTLOGIN: Inloggen
|
COMMENTPOSTLOGIN: Inloggen
|
||||||
COMMENTS: Reacties
|
COMMENTS: Reacties
|
||||||
COMMENTSDISABLED: 'Reacties plaatsen is uitgeschakeld'
|
COMMENTSDISABLED: 'Reacties plaatsen is uitgeschakeld'
|
||||||
|
DELETEALLCOMMENTS: 'Verwijder alle reacties op deze pagina'
|
||||||
LOGINTOPOSTCOMMENT: 'Log in om een reactie te plaatsen'
|
LOGINTOPOSTCOMMENT: 'Log in om een reactie te plaatsen'
|
||||||
NEXT: volgende
|
NEXT: volgende
|
||||||
NOCOMMENTSYET: 'Er zijn nog geen reacties.'
|
NOCOMMENTSYET: 'Er zijn nog geen reacties.'
|
||||||
@ -21,12 +32,17 @@ nl:
|
|||||||
PREV: vorige
|
PREV: vorige
|
||||||
RSSFEEDALLCOMMENTS: 'RSS feed voor alle reacties'
|
RSSFEEDALLCOMMENTS: 'RSS feed voor alle reacties'
|
||||||
RSSFEEDCOMMENTS: 'RSS feed voor reacties op deze pagina'
|
RSSFEEDCOMMENTS: 'RSS feed voor reacties op deze pagina'
|
||||||
PageCommentInterface:
|
|
||||||
DELETEALLCOMMENTS: 'Verwijder alle reacties op deze pagina'
|
|
||||||
SilverStripe\Comments\Admin\CommentAdmin:
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
|
Comments: Goedgekeurd
|
||||||
MENUTITLE: Reacties
|
MENUTITLE: Reacties
|
||||||
Moderated: Gemodereerd
|
NewComments: Nieuw
|
||||||
NeedsModeration: 'Wacht op moderatie'
|
SpamComments: Spam
|
||||||
|
SilverStripe\Comments\Admin\CommentsGridFieldAction:
|
||||||
|
SPAM: Spam
|
||||||
|
SilverStripe\Comments\Admin\CommentsGridFieldConfig:
|
||||||
|
SPAM: Spam
|
||||||
|
SilverStripe\Comments\Admin\CommentsGridFieldSpamAction:
|
||||||
|
SPAM: Spam
|
||||||
SilverStripe\Comments\Controllers\CommentingController:
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
COMMENTS: Reacties
|
COMMENTS: Reacties
|
||||||
EMAILADDRESS: 'E-mail adres (wordt niet gepubliceerd)'
|
EMAILADDRESS: 'E-mail adres (wordt niet gepubliceerd)'
|
||||||
@ -35,12 +51,15 @@ nl:
|
|||||||
WEBSITEURL: 'Website URL'
|
WEBSITEURL: 'Website URL'
|
||||||
SilverStripe\Comments\Extensions\CommentsExtension:
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
COMMENTOPTIONS: Reacties
|
COMMENTOPTIONS: Reacties
|
||||||
|
COMMENTSTABSET: Reacties
|
||||||
SilverStripe\Comments\Model\Comment:
|
SilverStripe\Comments\Model\Comment:
|
||||||
ALLOWCOMMENTS: 'Reacties toestaan'
|
|
||||||
COMMENT: Reactie
|
COMMENT: Reactie
|
||||||
|
EMAIL: E-mail
|
||||||
ISSPAM: 'Spam?'
|
ISSPAM: 'Spam?'
|
||||||
MODERATED: 'Gemodereerd?'
|
MODERATED: 'Gemodereerd?'
|
||||||
NAME: Auteur
|
|
||||||
'ON': op
|
'ON': op
|
||||||
|
OPTIONS: Instellingen
|
||||||
|
PARENTTITLE: Bovenliggende
|
||||||
PLURALNAME: Reacties
|
PLURALNAME: Reacties
|
||||||
SINGULARNAME: Reactie
|
SINGULARNAME: Reactie
|
||||||
|
URL: URL
|
||||||
|
20
lang/pl.yml
Normal file
20
lang/pl.yml
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
pl:
|
||||||
|
CommentInterface:
|
||||||
|
EMAILADDRESS_MESSAGE_REQUIRED: 'Proszę podać adres email'
|
||||||
|
POST: Post
|
||||||
|
PREVIEW: Podgląd
|
||||||
|
PREVIEWLABEL: Podgląd
|
||||||
|
CommentsInterface_ss:
|
||||||
|
COMMENTS: Komentarze
|
||||||
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
|
MENUTITLE: Komentarze
|
||||||
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
|
COMMENTS: Komentarze
|
||||||
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
|
COMMENTOPTIONS: Komentarze
|
||||||
|
COMMENTSTABSET: Komentarze
|
||||||
|
SilverStripe\Comments\Model\Comment:
|
||||||
|
EMAIL: Email
|
||||||
|
'ON': Opublikowano
|
||||||
|
PLURALNAME: Komentarze
|
||||||
|
URL: 'Adres URL'
|
@ -12,19 +12,11 @@ pl_PL:
|
|||||||
Comments:
|
Comments:
|
||||||
COMMENTSREQUIRELOGIN: 'Zaloguj się aby dodać komentarz'
|
COMMENTSREQUIRELOGIN: 'Zaloguj się aby dodać komentarz'
|
||||||
CommentsAdmin:
|
CommentsAdmin:
|
||||||
ApprovedComments: Zatwierdzone
|
|
||||||
Comments: Zatwierdzone
|
Comments: Zatwierdzone
|
||||||
NeedsModeration: 'Wymagają moderacji'
|
|
||||||
NewComments: Nowe
|
NewComments: Nowe
|
||||||
SpamComments: Spam
|
SpamComments: Spam
|
||||||
CommentsInterface_pendingcomment_ss:
|
CommentsInterface_pendingcomment_ss:
|
||||||
AWAITINGMODERATION: 'Twój komentarz został wysłany i czeka na akceptację przez moderatora.'
|
AWAITINGMODERATION: 'Twój komentarz został wysłany i czeka na akceptację przez moderatora.'
|
||||||
CommentsInterface_singlecomment_ss:
|
|
||||||
APPROVE: zatwierdź
|
|
||||||
ISNTSPAM: 'nie spam'
|
|
||||||
ISSPAM: 'oznacz spam'
|
|
||||||
PBY: 'Dodany przez'
|
|
||||||
REMCOM: odrzuć
|
|
||||||
CommentsInterface_ss:
|
CommentsInterface_ss:
|
||||||
AWAITINGMODERATION: 'Twój komentarz został wysłany i czeka na akceptację przez moderatora.'
|
AWAITINGMODERATION: 'Twój komentarz został wysłany i czeka na akceptację przez moderatora.'
|
||||||
COMMENTLOGINERROR: 'Nie można dodać komentarza dopóki nie będziesz zalogowany'
|
COMMENTLOGINERROR: 'Nie można dodać komentarza dopóki nie będziesz zalogowany'
|
||||||
@ -40,17 +32,19 @@ pl_PL:
|
|||||||
PREV: poprzedni
|
PREV: poprzedni
|
||||||
RSSFEEDALLCOMMENTS: 'Kanał RSS dla wszystkich komentarzy'
|
RSSFEEDALLCOMMENTS: 'Kanał RSS dla wszystkich komentarzy'
|
||||||
RSSFEEDCOMMENTS: 'Kanał RSS dla komentarzy na tej stronie'
|
RSSFEEDCOMMENTS: 'Kanał RSS dla komentarzy na tej stronie'
|
||||||
PageCommentInterface:
|
|
||||||
DELETEALLCOMMENTS: 'Usuń wszystkie komentarze na tej stronie'
|
|
||||||
SilverStripe\Comments\Admin\CommentAdmin:
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
ADMIN_PERMISSION: 'Dostęp do sekcji "Komentarze"'
|
ADMIN_PERMISSION: 'Dostęp do sekcji "Komentarze"'
|
||||||
ApprovedComments: Zatwierdzone
|
ApprovedComments: Zatwierdzone
|
||||||
Comments: Zatwierdzone
|
Comments: Zatwierdzone
|
||||||
MENUTITLE: Komentarze
|
MENUTITLE: Komentarze
|
||||||
Moderated: Moderowane
|
|
||||||
NeedsModeration: 'Wymaga moderacji'
|
|
||||||
NewComments: Nowy
|
NewComments: Nowy
|
||||||
SpamComments: Spam
|
SpamComments: Spam
|
||||||
|
SilverStripe\Comments\Admin\CommentsGridFieldAction:
|
||||||
|
SPAM: Spam
|
||||||
|
SilverStripe\Comments\Admin\CommentsGridFieldConfig:
|
||||||
|
SPAM: Spam
|
||||||
|
SilverStripe\Comments\Admin\CommentsGridFieldSpamAction:
|
||||||
|
SPAM: Spam
|
||||||
SilverStripe\Comments\Controllers\CommentingController:
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
COMMENTS: Komentarze
|
COMMENTS: Komentarze
|
||||||
EMAILADDRESS: 'Twój adres email (nie będzie widoczny)'
|
EMAILADDRESS: 'Twój adres email (nie będzie widoczny)'
|
||||||
@ -59,19 +53,19 @@ pl_PL:
|
|||||||
WEBSITEURL: 'Adres Twojej strony'
|
WEBSITEURL: 'Adres Twojej strony'
|
||||||
SilverStripe\Comments\Extensions\CommentsExtension:
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
COMMENTOPTIONS: Komentarze
|
COMMENTOPTIONS: Komentarze
|
||||||
|
COMMENTSTABSET: Komentarze
|
||||||
MODERATIONREQUIRED_NONE: 'Komentarze nie wymagają moderacji'
|
MODERATIONREQUIRED_NONE: 'Komentarze nie wymagają moderacji'
|
||||||
MODERATIONREQUIRED_NONMEMBERSONLY: 'Moderuj tylko niezarejestrowanych użytkowników'
|
MODERATIONREQUIRED_NONMEMBERSONLY: 'Moderuj tylko niezarejestrowanych użytkowników'
|
||||||
MODERATIONREQUIRED_REQUIRED: 'Moderuj wszystkie komentarze'
|
MODERATIONREQUIRED_REQUIRED: 'Moderuj wszystkie komentarze'
|
||||||
SilverStripe\Comments\Model\Comment:
|
SilverStripe\Comments\Model\Comment:
|
||||||
ALLOWCOMMENTS: 'Zezwól na komentarze'
|
|
||||||
COMMENT: Komentarz
|
COMMENT: Komentarz
|
||||||
COMMENTBY: 'Komentarz %s'
|
COMMENTBY: 'Komentarz %s'
|
||||||
CREATED: 'Data opublikowania'
|
CREATED: 'Data opublikowania'
|
||||||
EMAIL: Email
|
EMAIL: Email
|
||||||
ISSPAM: 'Spam?'
|
ISSPAM: 'Spam?'
|
||||||
MODERATED: 'Moderowane?'
|
MODERATED: 'Moderowane?'
|
||||||
NAME: Autor
|
|
||||||
'ON': na
|
'ON': na
|
||||||
|
OPTIONS: Opcje
|
||||||
OPTION_DESCRIPTION: 'Niemoderowane i oznaczone jako spam komentarze nie będą wyświetlane do momentu zatwierdzenia'
|
OPTION_DESCRIPTION: 'Niemoderowane i oznaczone jako spam komentarze nie będą wyświetlane do momentu zatwierdzenia'
|
||||||
PARENTTITLE: Rodzic
|
PARENTTITLE: Rodzic
|
||||||
PLURALNAME: Komentarze
|
PLURALNAME: Komentarze
|
||||||
|
16
lang/pt.yml
Normal file
16
lang/pt.yml
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
pt:
|
||||||
|
CommentInterface:
|
||||||
|
PREVIEW: Pré-visualização
|
||||||
|
PREVIEWLABEL: Pré-visualização
|
||||||
|
CommentsInterface_ss:
|
||||||
|
COMMENTS: Comentários
|
||||||
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
|
MENUTITLE: Comentários
|
||||||
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
|
COMMENTS: Comentários
|
||||||
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
|
COMMENTOPTIONS: Comentários
|
||||||
|
COMMENTSTABSET: Comentários
|
||||||
|
SilverStripe\Comments\Model\Comment:
|
||||||
|
'ON': em
|
||||||
|
PLURALNAME: Comentários
|
15
lang/pt_PT.yml
Normal file
15
lang/pt_PT.yml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
pt_PT:
|
||||||
|
CommentsInterface_ss:
|
||||||
|
COMMENTS: Comentários
|
||||||
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
|
MENUTITLE: Comentários
|
||||||
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
|
COMMENTS: Comentários
|
||||||
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
|
COMMENTOPTIONS: Comentários
|
||||||
|
COMMENTSTABSET: Comentários
|
||||||
|
SilverStripe\Comments\Model\Comment:
|
||||||
|
EMAIL: Email
|
||||||
|
'ON': em
|
||||||
|
OPTIONS: Options
|
||||||
|
PLURALNAME: Comentários
|
15
lang/ro.yml
15
lang/ro.yml
@ -9,12 +9,8 @@ ro:
|
|||||||
PREVIEWLABEL: 'Vizualizare înaintea publicării'
|
PREVIEWLABEL: 'Vizualizare înaintea publicării'
|
||||||
YOURNAME: 'Numele dvs.'
|
YOURNAME: 'Numele dvs.'
|
||||||
YOURNAME_MESSAGE_REQUIRED: 'Vă rugăm să vă introduceți numele'
|
YOURNAME_MESSAGE_REQUIRED: 'Vă rugăm să vă introduceți numele'
|
||||||
CommentsAdmin:
|
|
||||||
NeedsModeration: 'Necesită moderare'
|
|
||||||
CommentsInterface_pendingcomment_ss:
|
CommentsInterface_pendingcomment_ss:
|
||||||
AWAITINGMODERATION: 'Comentariul dvs. a fost trimis și așteaptă să fie moderat.'
|
AWAITINGMODERATION: 'Comentariul dvs. a fost trimis și așteaptă să fie moderat.'
|
||||||
CommentsInterface_singlecomment_ss:
|
|
||||||
PBY: 'Publicat de'
|
|
||||||
CommentsInterface_ss:
|
CommentsInterface_ss:
|
||||||
AWAITINGMODERATION: 'Comentariul dvs. a fost trimis și așteaptă să fie moderat.'
|
AWAITINGMODERATION: 'Comentariul dvs. a fost trimis și așteaptă să fie moderat.'
|
||||||
COMMENTLOGINERROR: 'Publicarea de comentarii necesită autentificare pe site'
|
COMMENTLOGINERROR: 'Publicarea de comentarii necesită autentificare pe site'
|
||||||
@ -22,6 +18,7 @@ ro:
|
|||||||
COMMENTPOSTLOGIN: Autentificare
|
COMMENTPOSTLOGIN: Autentificare
|
||||||
COMMENTS: Comentarii
|
COMMENTS: Comentarii
|
||||||
COMMENTSDISABLED: 'Postarea de comentarii a fost dezactivată'
|
COMMENTSDISABLED: 'Postarea de comentarii a fost dezactivată'
|
||||||
|
DELETEALLCOMMENTS: 'Ştergeţi toate comentariile de pe această pagină'
|
||||||
LOGINTOPOSTCOMMENT: 'Autentificaţi-vă pentru a publica un comentariu'
|
LOGINTOPOSTCOMMENT: 'Autentificaţi-vă pentru a publica un comentariu'
|
||||||
NEXT: următorul
|
NEXT: următorul
|
||||||
NOCOMMENTSYET: 'Nimeni nu a comentat încă pe aceasta pagină.'
|
NOCOMMENTSYET: 'Nimeni nu a comentat încă pe aceasta pagină.'
|
||||||
@ -29,27 +26,25 @@ ro:
|
|||||||
PREV: anteriorul
|
PREV: anteriorul
|
||||||
RSSFEEDALLCOMMENTS: 'RSS pentru toate comentariile'
|
RSSFEEDALLCOMMENTS: 'RSS pentru toate comentariile'
|
||||||
RSSFEEDCOMMENTS: 'RSS pentru comentariile de pe această pagină'
|
RSSFEEDCOMMENTS: 'RSS pentru comentariile de pe această pagină'
|
||||||
PageCommentInterface:
|
|
||||||
DELETEALLCOMMENTS: 'Ştergeţi toate comentariile de pe această pagină'
|
|
||||||
SilverStripe\Comments\Admin\CommentAdmin:
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
MENUTITLE: Commentarii
|
MENUTITLE: Commentarii
|
||||||
Moderated: Moderat
|
|
||||||
NeedsModeration: 'Necesită moderare'
|
|
||||||
SilverStripe\Comments\Controllers\CommentingController:
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
COMMENTS: Commentarii
|
COMMENTS: Commentarii
|
||||||
EMAILADDRESS: 'Adresa dvs. de e-mail (nu va fi publicată)'
|
EMAILADDRESS: 'Adresa dvs. de e-mail (nu va fi publicată)'
|
||||||
PERMISSIONFAILURE: 'Nu puteţi publica comentarii pe această pagină. Vă rugăm să vă asiguaţi că sunteți autentificat și că aveşi nivelul de permisiune corespunzător.'
|
PERMISSIONFAILURE: 'Nu puteţi publica comentarii pe această pagină. Vă rugăm să vă asiguaţi că sunteți autentificat și că aveşi nivelul de permisiune corespunzător.'
|
||||||
RSSTITLE: 'RSS feed pentru comentarii'
|
RSSTITLE: 'RSS feed pentru comentarii'
|
||||||
WEBSITEURL: 'URL Site web'
|
WEBSITEURL: 'URL Site web'
|
||||||
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
|
COMMENTOPTIONS: Comentarii
|
||||||
|
COMMENTSTABSET: Comentarii
|
||||||
SilverStripe\Comments\Model\Comment:
|
SilverStripe\Comments\Model\Comment:
|
||||||
ALLOWCOMMENTS: 'Acceptare comentarii'
|
|
||||||
COMMENT: Comentariu
|
COMMENT: Comentariu
|
||||||
COMMENTBY: 'Comentat de %s'
|
COMMENTBY: 'Comentat de %s'
|
||||||
CREATED: 'Data publicării'
|
CREATED: 'Data publicării'
|
||||||
EMAIL: E-mail
|
EMAIL: E-mail
|
||||||
ISSPAM: 'Spam?'
|
ISSPAM: 'Spam?'
|
||||||
MODERATED: 'Moderare?'
|
MODERATED: 'Moderare?'
|
||||||
NAME: 'Nume autor'
|
'ON': pe
|
||||||
PARENTTITLE: Părinte
|
PARENTTITLE: Părinte
|
||||||
PLURALNAME: Comentarii
|
PLURALNAME: Comentarii
|
||||||
SINGULARNAME: Comentariu
|
SINGULARNAME: Comentariu
|
||||||
|
20
lang/ru.yml
20
lang/ru.yml
@ -12,19 +12,12 @@ ru:
|
|||||||
Comments:
|
Comments:
|
||||||
COMMENTSREQUIRELOGIN: 'Необходимо войти в систему для комментирования'
|
COMMENTSREQUIRELOGIN: 'Необходимо войти в систему для комментирования'
|
||||||
CommentsAdmin:
|
CommentsAdmin:
|
||||||
ApprovedComments: Одобренные
|
|
||||||
Comments: Одобрен
|
Comments: Одобрен
|
||||||
NeedsModeration: 'Необходима Проверка'
|
|
||||||
NewComments: Новые
|
NewComments: Новые
|
||||||
SpamComments: Спам
|
SpamComments: Спам
|
||||||
CommentsInterface_pendingcomment_ss:
|
CommentsInterface_pendingcomment_ss:
|
||||||
AWAITINGMODERATION: 'Ваш комментарий отправлен и ожидает проверки.'
|
AWAITINGMODERATION: 'Ваш комментарий отправлен и ожидает проверки.'
|
||||||
CommentsInterface_singlecomment_ss:
|
CommentsInterface_singlecomment_ss:
|
||||||
APPROVE: Одобрить
|
|
||||||
ISNTSPAM: 'не спам'
|
|
||||||
ISSPAM: 'это спам'
|
|
||||||
PBY: 'Автор:'
|
|
||||||
REMCOM: удалить
|
|
||||||
REPLYTO: Ответить
|
REPLYTO: Ответить
|
||||||
CommentsInterface_ss:
|
CommentsInterface_ss:
|
||||||
AWAITINGMODERATION: 'Ваш комментарий отправлен и ожидает проверки.'
|
AWAITINGMODERATION: 'Ваш комментарий отправлен и ожидает проверки.'
|
||||||
@ -41,15 +34,11 @@ ru:
|
|||||||
PREV: предыдущие
|
PREV: предыдущие
|
||||||
RSSFEEDALLCOMMENTS: 'RSS лента для всех комментариев'
|
RSSFEEDALLCOMMENTS: 'RSS лента для всех комментариев'
|
||||||
RSSFEEDCOMMENTS: 'RSS лента для комментариев на этой странице'
|
RSSFEEDCOMMENTS: 'RSS лента для комментариев на этой странице'
|
||||||
PageCommentInterface:
|
|
||||||
DELETEALLCOMMENTS: 'Удалить все комментарии на этой странице'
|
|
||||||
SilverStripe\Comments\Admin\CommentAdmin:
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
ADMIN_PERMISSION: 'Доступ к разделу ''Комментарии'''
|
ADMIN_PERMISSION: 'Доступ к разделу ''Комментарии'''
|
||||||
ApprovedComments: Одобренные
|
ApprovedComments: Одобренные
|
||||||
Comments: Одобрен
|
Comments: Одобрен
|
||||||
MENUTITLE: Комментарии
|
MENUTITLE: Комментарии
|
||||||
Moderated: Проверен
|
|
||||||
NeedsModeration: 'Необходима Проверка'
|
|
||||||
NewComments: Новый
|
NewComments: Новый
|
||||||
SpamComments: Спам
|
SpamComments: Спам
|
||||||
SilverStripe\Comments\Admin\CommentsGridFieldAction:
|
SilverStripe\Comments\Admin\CommentsGridFieldAction:
|
||||||
@ -57,9 +46,15 @@ ru:
|
|||||||
COMMENTAPPROVED: 'Комментарий одобрен.'
|
COMMENTAPPROVED: 'Комментарий одобрен.'
|
||||||
COMMENTMARKEDSPAM: 'Комментарий помечен как спам.'
|
COMMENTMARKEDSPAM: 'Комментарий помечен как спам.'
|
||||||
SPAM: Спам
|
SPAM: Спам
|
||||||
|
SilverStripe\Comments\Admin\CommentsGridFieldApproveAction:
|
||||||
|
APPROVE: Одобрить
|
||||||
|
COMMENTAPPROVED: 'Комментарий одобрен.'
|
||||||
SilverStripe\Comments\Admin\CommentsGridFieldConfig:
|
SilverStripe\Comments\Admin\CommentsGridFieldConfig:
|
||||||
APPROVE: Одобрить
|
APPROVE: Одобрить
|
||||||
SPAM: Спам
|
SPAM: Спам
|
||||||
|
SilverStripe\Comments\Admin\CommentsGridFieldSpamAction:
|
||||||
|
COMMENTMARKEDSPAM: 'Комментарий помечен как спам.'
|
||||||
|
SPAM: Спам
|
||||||
SilverStripe\Comments\Controllers\CommentingController:
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
COMMENTS: Комментарии
|
COMMENTS: Комментарии
|
||||||
EMAILADDRESS: 'Ваш электронный адрес (не будет опубликован)'
|
EMAILADDRESS: 'Ваш электронный адрес (не будет опубликован)'
|
||||||
@ -68,18 +63,17 @@ ru:
|
|||||||
WEBSITEURL: 'Адрес вашего сайта'
|
WEBSITEURL: 'Адрес вашего сайта'
|
||||||
SilverStripe\Comments\Extensions\CommentsExtension:
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
COMMENTOPTIONS: Комментарии
|
COMMENTOPTIONS: Комментарии
|
||||||
|
COMMENTSTABSET: Комментарии
|
||||||
MODERATIONREQUIRED_NONE: 'Проверка не требуется'
|
MODERATIONREQUIRED_NONE: 'Проверка не требуется'
|
||||||
MODERATIONREQUIRED_NONMEMBERSONLY: 'Проверка требуется только для незарегистрированных пользователей'
|
MODERATIONREQUIRED_NONMEMBERSONLY: 'Проверка требуется только для незарегистрированных пользователей'
|
||||||
MODERATIONREQUIRED_REQUIRED: 'Проверка требуется для всех комментариев'
|
MODERATIONREQUIRED_REQUIRED: 'Проверка требуется для всех комментариев'
|
||||||
SilverStripe\Comments\Model\Comment:
|
SilverStripe\Comments\Model\Comment:
|
||||||
ALLOWCOMMENTS: 'Разрешить комментарии'
|
|
||||||
COMMENT: Комментарий
|
COMMENT: Комментарий
|
||||||
COMMENTBY: 'Комментарий автора %s'
|
COMMENTBY: 'Комментарий автора %s'
|
||||||
CREATED: 'Дата добавления'
|
CREATED: 'Дата добавления'
|
||||||
EMAIL: Email
|
EMAIL: Email
|
||||||
ISSPAM: 'Спам?'
|
ISSPAM: 'Спам?'
|
||||||
MODERATED: 'Проверено?'
|
MODERATED: 'Проверено?'
|
||||||
NAME: Автор
|
|
||||||
'ON': на
|
'ON': на
|
||||||
OPTIONS: Опции
|
OPTIONS: Опции
|
||||||
OPTION_DESCRIPTION: 'Комментарии не будут отображаться пока не будут одобрены модератором'
|
OPTION_DESCRIPTION: 'Комментарии не будут отображаться пока не будут одобрены модератором'
|
||||||
|
30
lang/sk.yml
30
lang/sk.yml
@ -12,19 +12,16 @@ sk:
|
|||||||
Comments:
|
Comments:
|
||||||
COMMENTSREQUIRELOGIN: 'Vyžadovať prihlásenie na pridávanie komentárov'
|
COMMENTSREQUIRELOGIN: 'Vyžadovať prihlásenie na pridávanie komentárov'
|
||||||
CommentsAdmin:
|
CommentsAdmin:
|
||||||
ApprovedComments: Schválené
|
|
||||||
Comments: Schválené
|
Comments: Schválené
|
||||||
NeedsModeration: 'Vyžaduje schválenie'
|
|
||||||
NewComments: Nové
|
NewComments: Nové
|
||||||
SpamComments: Spam
|
SpamComments: Spam
|
||||||
CommentsInterface_pendingcomment_ss:
|
CommentsInterface_pendingcomment_ss:
|
||||||
AWAITINGMODERATION: 'Váš komentár bol odoslaný a čaká na kontrolu.'
|
AWAITINGMODERATION: 'Váš komentár bol odoslaný a čaká na kontrolu.'
|
||||||
CommentsInterface_singlecomment_ss:
|
CommentsInterface_singlecomment_ss:
|
||||||
APPROVE: Schváliť
|
APPROVE: 'Schváľte to'
|
||||||
ISNTSPAM: 'nie je spam'
|
ISNTSPAM: 'Nie je to spam'
|
||||||
ISSPAM: 'je spam'
|
ISSPAM: 'Je to spam'
|
||||||
PBY: Napísal
|
REMCOM: 'Odmietnite to'
|
||||||
REMCOM: Odmietnuť
|
|
||||||
REPLYTO: Odpovedať
|
REPLYTO: Odpovedať
|
||||||
CommentsInterface_ss:
|
CommentsInterface_ss:
|
||||||
AWAITINGMODERATION: 'Váš komentár bol odoslaný a čaká na kontrolu.'
|
AWAITINGMODERATION: 'Váš komentár bol odoslaný a čaká na kontrolu.'
|
||||||
@ -41,15 +38,11 @@ sk:
|
|||||||
PREV: predchádzajúce
|
PREV: predchádzajúce
|
||||||
RSSFEEDALLCOMMENTS: 'RSS kanál pre všetky komentáre'
|
RSSFEEDALLCOMMENTS: 'RSS kanál pre všetky komentáre'
|
||||||
RSSFEEDCOMMENTS: 'RSS kanál pre komentáre na tejto stránke'
|
RSSFEEDCOMMENTS: 'RSS kanál pre komentáre na tejto stránke'
|
||||||
PageCommentInterface:
|
|
||||||
DELETEALLCOMMENTS: 'Odstrániť všetky komentáre na tejto stránke'
|
|
||||||
SilverStripe\Comments\Admin\CommentAdmin:
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
ADMIN_PERMISSION: 'Prístup k sekcii ''Komentáre'''
|
ADMIN_PERMISSION: 'Prístup k sekcii ''Komentáre'''
|
||||||
ApprovedComments: Schválené
|
ApprovedComments: Schválené
|
||||||
Comments: Schválené
|
Comments: Schválené
|
||||||
MENUTITLE: Komentáre
|
MENUTITLE: Komentáre
|
||||||
Moderated: Odsúhlasený
|
|
||||||
NeedsModeration: 'Vyžaduje odsúhlasenie'
|
|
||||||
NewComments: Nové
|
NewComments: Nové
|
||||||
SpamComments: Spam
|
SpamComments: Spam
|
||||||
SilverStripe\Comments\Admin\CommentsGridFieldAction:
|
SilverStripe\Comments\Admin\CommentsGridFieldAction:
|
||||||
@ -57,9 +50,17 @@ sk:
|
|||||||
COMMENTAPPROVED: 'Komentár schválený.'
|
COMMENTAPPROVED: 'Komentár schválený.'
|
||||||
COMMENTMARKEDSPAM: 'Komentár označený ako spam.'
|
COMMENTMARKEDSPAM: 'Komentár označený ako spam.'
|
||||||
SPAM: Spam
|
SPAM: Spam
|
||||||
|
SilverStripe\Comments\Admin\CommentsGridFieldApproveAction:
|
||||||
|
APPROVE: Schváliť
|
||||||
|
COMMENTAPPROVED: 'Komentár schválený.'
|
||||||
|
SilverStripe\Comments\Admin\CommentsGridFieldBulkAction\CommentHandler:
|
||||||
|
CHANGES_APPLIED: 'Zmeny boli aplikované'
|
||||||
SilverStripe\Comments\Admin\CommentsGridFieldConfig:
|
SilverStripe\Comments\Admin\CommentsGridFieldConfig:
|
||||||
APPROVE: Schváliť
|
APPROVE: Schváliť
|
||||||
SPAM: Spam
|
SPAM: Spam
|
||||||
|
SilverStripe\Comments\Admin\CommentsGridFieldSpamAction:
|
||||||
|
COMMENTMARKEDSPAM: 'Komentár označený ako spam.'
|
||||||
|
SPAM: Spam
|
||||||
SilverStripe\Comments\Controllers\CommentingController:
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
COMMENTS: Komentáre
|
COMMENTS: Komentáre
|
||||||
EMAILADDRESS: 'Váš e-mail (nebude zverejnený)'
|
EMAILADDRESS: 'Váš e-mail (nebude zverejnený)'
|
||||||
@ -67,7 +68,9 @@ sk:
|
|||||||
RSSTITLE: 'RSS feed komentárov'
|
RSSTITLE: 'RSS feed komentárov'
|
||||||
WEBSITEURL: 'Vaša web stránka'
|
WEBSITEURL: 'Vaša web stránka'
|
||||||
SilverStripe\Comments\Extensions\CommentsExtension:
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
|
COMMENTMODERATION: 'Moderovanie komentárov'
|
||||||
COMMENTOPTIONS: Komentáre
|
COMMENTOPTIONS: Komentáre
|
||||||
|
COMMENTSTABSET: Komentáre
|
||||||
MODERATIONREQUIRED_NONE: 'Nevyžadovať odsúhlasenie'
|
MODERATIONREQUIRED_NONE: 'Nevyžadovať odsúhlasenie'
|
||||||
MODERATIONREQUIRED_NONMEMBERSONLY: 'Vyžadovať odsúhlasenie len od neprihlásených užívateľov'
|
MODERATIONREQUIRED_NONMEMBERSONLY: 'Vyžadovať odsúhlasenie len od neprihlásených užívateľov'
|
||||||
MODERATIONREQUIRED_REQUIRED: 'Odsúhlasiť všetky komentáre'
|
MODERATIONREQUIRED_REQUIRED: 'Odsúhlasiť všetky komentáre'
|
||||||
@ -85,6 +88,11 @@ sk:
|
|||||||
OPTION_DESCRIPTION: 'Neodsúhlasené a spamové komentáre nebudú zobrazené'
|
OPTION_DESCRIPTION: 'Neodsúhlasené a spamové komentáre nebudú zobrazené'
|
||||||
PARENTTITLE: 'Komentovaný príspevok'
|
PARENTTITLE: 'Komentovaný príspevok'
|
||||||
PLURALNAME: Komentáre
|
PLURALNAME: Komentáre
|
||||||
|
PLURALS:
|
||||||
|
few: '{count} komentáre'
|
||||||
|
many: '{count} komentárov'
|
||||||
|
one: Komentár
|
||||||
|
other: '{count} komentárov'
|
||||||
ParentComment_Title: 'Tento komentár je odpoveď na komentár zobrazený nižšie'
|
ParentComment_Title: 'Tento komentár je odpoveď na komentár zobrazený nižšie'
|
||||||
SINGULARNAME: Komentár
|
SINGULARNAME: Komentár
|
||||||
URL: 'Web adresa'
|
URL: 'Web adresa'
|
||||||
|
@ -12,19 +12,12 @@ sk_SK:
|
|||||||
Comments:
|
Comments:
|
||||||
COMMENTSREQUIRELOGIN: 'Vyžadovať prihlásenie na pridávanie komentárov'
|
COMMENTSREQUIRELOGIN: 'Vyžadovať prihlásenie na pridávanie komentárov'
|
||||||
CommentsAdmin:
|
CommentsAdmin:
|
||||||
ApprovedComments: Schválené
|
|
||||||
Comments: Schválené
|
Comments: Schválené
|
||||||
NeedsModeration: 'Vyžaduje schválenie'
|
|
||||||
NewComments: Nové
|
NewComments: Nové
|
||||||
SpamComments: Spam
|
SpamComments: Spam
|
||||||
CommentsInterface_pendingcomment_ss:
|
CommentsInterface_pendingcomment_ss:
|
||||||
AWAITINGMODERATION: 'Váš komentár bol odoslaný a čaká na kontrolu.'
|
AWAITINGMODERATION: 'Váš komentár bol odoslaný a čaká na kontrolu.'
|
||||||
CommentsInterface_singlecomment_ss:
|
CommentsInterface_singlecomment_ss:
|
||||||
APPROVE: Schváliť
|
|
||||||
ISNTSPAM: 'nie je spam'
|
|
||||||
ISSPAM: 'je spam'
|
|
||||||
PBY: Napísal
|
|
||||||
REMCOM: Odmietnuť
|
|
||||||
REPLYTO: Odpovedať
|
REPLYTO: Odpovedať
|
||||||
CommentsInterface_ss:
|
CommentsInterface_ss:
|
||||||
AWAITINGMODERATION: 'Váš komentár bol odoslaný a čaká na kontrolu.'
|
AWAITINGMODERATION: 'Váš komentár bol odoslaný a čaká na kontrolu.'
|
||||||
@ -41,15 +34,11 @@ sk_SK:
|
|||||||
PREV: predchádzajúce
|
PREV: predchádzajúce
|
||||||
RSSFEEDALLCOMMENTS: 'RSS kanál pre všetky komentáre'
|
RSSFEEDALLCOMMENTS: 'RSS kanál pre všetky komentáre'
|
||||||
RSSFEEDCOMMENTS: 'RSS kanál pre komentáre na tejto stránke'
|
RSSFEEDCOMMENTS: 'RSS kanál pre komentáre na tejto stránke'
|
||||||
PageCommentInterface:
|
|
||||||
DELETEALLCOMMENTS: 'Odstrániť všetky komentáre na tejto stránke'
|
|
||||||
SilverStripe\Comments\Admin\CommentAdmin:
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
ADMIN_PERMISSION: 'Prístup k sekcii ''Komentáre'''
|
ADMIN_PERMISSION: 'Prístup k sekcii ''Komentáre'''
|
||||||
ApprovedComments: Schválené
|
ApprovedComments: Schválené
|
||||||
Comments: Schválené
|
Comments: Schválené
|
||||||
MENUTITLE: Komentáre
|
MENUTITLE: Komentáre
|
||||||
Moderated: Odsúhlasený
|
|
||||||
NeedsModeration: 'Vyžaduje odsúhlasenie'
|
|
||||||
NewComments: Nové
|
NewComments: Nové
|
||||||
SpamComments: Spam
|
SpamComments: Spam
|
||||||
SilverStripe\Comments\Admin\CommentsGridFieldAction:
|
SilverStripe\Comments\Admin\CommentsGridFieldAction:
|
||||||
@ -57,9 +46,15 @@ sk_SK:
|
|||||||
COMMENTAPPROVED: 'Komentár schválený.'
|
COMMENTAPPROVED: 'Komentár schválený.'
|
||||||
COMMENTMARKEDSPAM: 'Komentár označený ako spam.'
|
COMMENTMARKEDSPAM: 'Komentár označený ako spam.'
|
||||||
SPAM: Spam
|
SPAM: Spam
|
||||||
|
SilverStripe\Comments\Admin\CommentsGridFieldApproveAction:
|
||||||
|
APPROVE: Schváliť
|
||||||
|
COMMENTAPPROVED: 'Komentár schválený.'
|
||||||
SilverStripe\Comments\Admin\CommentsGridFieldConfig:
|
SilverStripe\Comments\Admin\CommentsGridFieldConfig:
|
||||||
APPROVE: Schváliť
|
APPROVE: Schváliť
|
||||||
SPAM: Spam
|
SPAM: Spam
|
||||||
|
SilverStripe\Comments\Admin\CommentsGridFieldSpamAction:
|
||||||
|
COMMENTMARKEDSPAM: 'Komentár označený ako spam.'
|
||||||
|
SPAM: Spam
|
||||||
SilverStripe\Comments\Controllers\CommentingController:
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
COMMENTS: Komentáre
|
COMMENTS: Komentáre
|
||||||
EMAILADDRESS: 'Váš e-mail (nebude zverejnený)'
|
EMAILADDRESS: 'Váš e-mail (nebude zverejnený)'
|
||||||
@ -68,18 +63,17 @@ sk_SK:
|
|||||||
WEBSITEURL: 'Vaša web stránka'
|
WEBSITEURL: 'Vaša web stránka'
|
||||||
SilverStripe\Comments\Extensions\CommentsExtension:
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
COMMENTOPTIONS: Komentáre
|
COMMENTOPTIONS: Komentáre
|
||||||
|
COMMENTSTABSET: Komentáre
|
||||||
MODERATIONREQUIRED_NONE: 'Nevyžadovať odsúhlasenie'
|
MODERATIONREQUIRED_NONE: 'Nevyžadovať odsúhlasenie'
|
||||||
MODERATIONREQUIRED_NONMEMBERSONLY: 'Vyžadovať odsúhlasenie len od neprihlásených užívateľov'
|
MODERATIONREQUIRED_NONMEMBERSONLY: 'Vyžadovať odsúhlasenie len od neprihlásených užívateľov'
|
||||||
MODERATIONREQUIRED_REQUIRED: 'Odsúhlasiť všetky komentáre'
|
MODERATIONREQUIRED_REQUIRED: 'Odsúhlasiť všetky komentáre'
|
||||||
SilverStripe\Comments\Model\Comment:
|
SilverStripe\Comments\Model\Comment:
|
||||||
ALLOWCOMMENTS: 'Povoliť komentáre'
|
|
||||||
COMMENT: Komentár
|
COMMENT: Komentár
|
||||||
COMMENTBY: 'Komentáre od %s'
|
COMMENTBY: 'Komentáre od %s'
|
||||||
CREATED: 'Dátum zverejnenia'
|
CREATED: 'Dátum zverejnenia'
|
||||||
EMAIL: E-mail
|
EMAIL: E-mail
|
||||||
ISSPAM: 'Spam?'
|
ISSPAM: 'Spam?'
|
||||||
MODERATED: 'Odsúhlasený?'
|
MODERATED: 'Odsúhlasený?'
|
||||||
NAME: 'Meno autora'
|
|
||||||
'ON': na
|
'ON': na
|
||||||
OPTIONS: Možnosti
|
OPTIONS: Možnosti
|
||||||
OPTION_DESCRIPTION: 'Neodsúhlasené a spamové komentáre nebudú zobrazené'
|
OPTION_DESCRIPTION: 'Neodsúhlasené a spamové komentáre nebudú zobrazené'
|
||||||
|
19
lang/sl.yml
Normal file
19
lang/sl.yml
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
sl:
|
||||||
|
CommentInterface:
|
||||||
|
PREVIEW: Predogled
|
||||||
|
PREVIEWLABEL: Predogled
|
||||||
|
CommentsInterface_ss:
|
||||||
|
COMMENTS: Komentarji
|
||||||
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
|
MENUTITLE: Komentarji
|
||||||
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
|
COMMENTS: Komentarji
|
||||||
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
|
COMMENTOPTIONS: Komentarji
|
||||||
|
COMMENTSTABSET: Komentarji
|
||||||
|
SilverStripe\Comments\Model\Comment:
|
||||||
|
EMAIL: E-pošta
|
||||||
|
OPTIONS: Možnosti
|
||||||
|
PARENTTITLE: 'Nadrejeno pravilo'
|
||||||
|
PLURALNAME: Komentarji
|
||||||
|
URL: URL
|
18
lang/sr.yml
Normal file
18
lang/sr.yml
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
sr:
|
||||||
|
CommentInterface:
|
||||||
|
PREVIEW: 'Претходни преглед'
|
||||||
|
PREVIEWLABEL: 'Претходни преглед'
|
||||||
|
CommentsInterface_ss:
|
||||||
|
COMMENTS: Коментари
|
||||||
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
|
MENUTITLE: Коментари
|
||||||
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
|
COMMENTS: Коментари
|
||||||
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
|
COMMENTOPTIONS: Коментари
|
||||||
|
COMMENTSTABSET: Коментари
|
||||||
|
SilverStripe\Comments\Model\Comment:
|
||||||
|
EMAIL: Е-пошта
|
||||||
|
'ON': у
|
||||||
|
PLURALNAME: Коментари
|
||||||
|
URL: URL
|
@ -9,12 +9,8 @@ sr@latin:
|
|||||||
PREVIEWLABEL: Prikaz
|
PREVIEWLABEL: Prikaz
|
||||||
YOURNAME: 'Vaše ime'
|
YOURNAME: 'Vaše ime'
|
||||||
YOURNAME_MESSAGE_REQUIRED: 'Molimo Vas da unesete Vaše ime'
|
YOURNAME_MESSAGE_REQUIRED: 'Molimo Vas da unesete Vaše ime'
|
||||||
CommentsAdmin:
|
|
||||||
NeedsModeration: 'Potrebno uređivanje'
|
|
||||||
CommentsInterface_pendingcomment_ss:
|
CommentsInterface_pendingcomment_ss:
|
||||||
AWAITINGMODERATION: 'Vaš komentar je prosleđen i sada čeka uređivanje.'
|
AWAITINGMODERATION: 'Vaš komentar je prosleđen i sada čeka uređivanje.'
|
||||||
CommentsInterface_singlecomment_ss:
|
|
||||||
PBY: Objavio
|
|
||||||
CommentsInterface_ss:
|
CommentsInterface_ss:
|
||||||
AWAITINGMODERATION: 'Vaš komentar je prosleđen i sada čeka uređivanje.'
|
AWAITINGMODERATION: 'Vaš komentar je prosleđen i sada čeka uređivanje.'
|
||||||
COMMENTLOGINERROR: 'Ne možete objavljivati komentare dok se ne prijavite'
|
COMMENTLOGINERROR: 'Ne možete objavljivati komentare dok se ne prijavite'
|
||||||
@ -22,6 +18,7 @@ sr@latin:
|
|||||||
COMMENTPOSTLOGIN: 'Prijavite se ovde'
|
COMMENTPOSTLOGIN: 'Prijavite se ovde'
|
||||||
COMMENTS: Komentari
|
COMMENTS: Komentari
|
||||||
COMMENTSDISABLED: 'Objavljivanje komentara je onemogućeno'
|
COMMENTSDISABLED: 'Objavljivanje komentara je onemogućeno'
|
||||||
|
DELETEALLCOMMENTS: 'Obriši sve komentare na ovoj strani'
|
||||||
LOGINTOPOSTCOMMENT: 'Prijavite se da biste objavili komentar'
|
LOGINTOPOSTCOMMENT: 'Prijavite se da biste objavili komentar'
|
||||||
NEXT: sledeći
|
NEXT: sledeći
|
||||||
NOCOMMENTSYET: 'Niko još uvek nije objavio komentar na ovoj strani'
|
NOCOMMENTSYET: 'Niko još uvek nije objavio komentar na ovoj strani'
|
||||||
@ -29,27 +26,24 @@ sr@latin:
|
|||||||
PREV: prethodni
|
PREV: prethodni
|
||||||
RSSFEEDALLCOMMENTS: 'RSS feed za sve komentare'
|
RSSFEEDALLCOMMENTS: 'RSS feed za sve komentare'
|
||||||
RSSFEEDCOMMENTS: 'RSS feed za komentare na ovoj strani'
|
RSSFEEDCOMMENTS: 'RSS feed za komentare na ovoj strani'
|
||||||
PageCommentInterface:
|
|
||||||
DELETEALLCOMMENTS: 'Obriši sve komentare na ovoj strani'
|
|
||||||
SilverStripe\Comments\Admin\CommentAdmin:
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
MENUTITLE: Komentari
|
MENUTITLE: Komentari
|
||||||
Moderated: Uređen
|
|
||||||
NeedsModeration: 'Potrebno uređivanje'
|
|
||||||
SilverStripe\Comments\Controllers\CommentingController:
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
COMMENTS: Komentari
|
COMMENTS: Komentari
|
||||||
EMAILADDRESS: 'Vaša adresa elektronske pošte (neće biti objavljeno)'
|
EMAILADDRESS: 'Vaša adresa elektronske pošte (neće biti objavljeno)'
|
||||||
PERMISSIONFAILURE: 'Niste u mogućnosti da objavljujete komentare na ovoj strani. Molimo Vas da proverite da li ste prijavljeni i da li imate odgovarajući nivo ovlašćenja.'
|
PERMISSIONFAILURE: 'Niste u mogućnosti da objavljujete komentare na ovoj strani. Molimo Vas da proverite da li ste prijavljeni i da li imate odgovarajući nivo ovlašćenja.'
|
||||||
RSSTITLE: 'RSS Feed komentara'
|
RSSTITLE: 'RSS Feed komentara'
|
||||||
WEBSITEURL: 'URL Vašeg sajta'
|
WEBSITEURL: 'URL Vašeg sajta'
|
||||||
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
|
COMMENTOPTIONS: Komentari
|
||||||
|
COMMENTSTABSET: Komentari
|
||||||
SilverStripe\Comments\Model\Comment:
|
SilverStripe\Comments\Model\Comment:
|
||||||
ALLOWCOMMENTS: 'Dozvoli komentare'
|
|
||||||
COMMENT: Komentar
|
COMMENT: Komentar
|
||||||
COMMENTBY: 'Autor komentara %s'
|
COMMENTBY: 'Autor komentara %s'
|
||||||
CREATED: 'Datum objavljivanja'
|
CREATED: 'Datum objavljivanja'
|
||||||
EMAIL: 'Elektronska pošta'
|
EMAIL: 'Elektronska pošta'
|
||||||
ISSPAM: 'Zlonameran?'
|
ISSPAM: 'Zlonameran?'
|
||||||
MODERATED: 'Uređen?'
|
MODERATED: 'Uređen?'
|
||||||
NAME: 'Ime autora'
|
|
||||||
PARENTTITLE: Roditelj
|
PARENTTITLE: Roditelj
|
||||||
PLURALNAME: Komentari
|
PLURALNAME: Komentari
|
||||||
SINGULARNAME: Komentar
|
SINGULARNAME: Komentar
|
||||||
|
17
lang/sr_RS@latin.yml
Normal file
17
lang/sr_RS@latin.yml
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
sr_RS@latin:
|
||||||
|
CommentInterface:
|
||||||
|
PREVIEW: 'Prethodni pregled'
|
||||||
|
PREVIEWLABEL: 'Prethodni pregled'
|
||||||
|
CommentsInterface_ss:
|
||||||
|
COMMENTS: Komentari
|
||||||
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
|
MENUTITLE: Komentari
|
||||||
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
|
COMMENTS: Komentari
|
||||||
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
|
COMMENTOPTIONS: Komentari
|
||||||
|
COMMENTSTABSET: Komentari
|
||||||
|
SilverStripe\Comments\Model\Comment:
|
||||||
|
EMAIL: E-pošta
|
||||||
|
PLURALNAME: Komentari
|
||||||
|
URL: URL
|
16
lang/sv.yml
16
lang/sv.yml
@ -9,12 +9,8 @@ sv:
|
|||||||
PREVIEWLABEL: Förhandsgranska
|
PREVIEWLABEL: Förhandsgranska
|
||||||
YOURNAME: 'Ditt namn'
|
YOURNAME: 'Ditt namn'
|
||||||
YOURNAME_MESSAGE_REQUIRED: 'Var vänlig och skriv in ditt namn'
|
YOURNAME_MESSAGE_REQUIRED: 'Var vänlig och skriv in ditt namn'
|
||||||
CommentsAdmin:
|
|
||||||
NeedsModeration: 'Kräver moderering'
|
|
||||||
CommentsInterface_pendingcomment_ss:
|
CommentsInterface_pendingcomment_ss:
|
||||||
AWAITINGMODERATION: 'Din kommentar har skickats och väntar nu på moderering'
|
AWAITINGMODERATION: 'Din kommentar har skickats och väntar nu på moderering'
|
||||||
CommentsInterface_singlecomment_ss:
|
|
||||||
PBY: 'Skriven av'
|
|
||||||
CommentsInterface_ss:
|
CommentsInterface_ss:
|
||||||
AWAITINGMODERATION: 'Din kommentar har skickats och väntar nu på moderering'
|
AWAITINGMODERATION: 'Din kommentar har skickats och väntar nu på moderering'
|
||||||
COMMENTLOGINERROR: 'Du måste logga in för att kunna skriva kommentarer'
|
COMMENTLOGINERROR: 'Du måste logga in för att kunna skriva kommentarer'
|
||||||
@ -22,6 +18,7 @@ sv:
|
|||||||
COMMENTPOSTLOGIN: 'Logga in'
|
COMMENTPOSTLOGIN: 'Logga in'
|
||||||
COMMENTS: Kommentarer
|
COMMENTS: Kommentarer
|
||||||
COMMENTSDISABLED: 'Möjligheten att skriva kommentarer har spärrats'
|
COMMENTSDISABLED: 'Möjligheten att skriva kommentarer har spärrats'
|
||||||
|
DELETEALLCOMMENTS: 'Radera alla kommenterar på den här sidan'
|
||||||
LOGINTOPOSTCOMMENT: 'Logga in för att skriva en kommentar'
|
LOGINTOPOSTCOMMENT: 'Logga in för att skriva en kommentar'
|
||||||
NEXT: nästa
|
NEXT: nästa
|
||||||
NOCOMMENTSYET: 'Inga har kommenterat på denna sida ännu'
|
NOCOMMENTSYET: 'Inga har kommenterat på denna sida ännu'
|
||||||
@ -29,27 +26,26 @@ sv:
|
|||||||
PREV: föregående
|
PREV: föregående
|
||||||
RSSFEEDALLCOMMENTS: 'RSS-flöde för samtliga kommentarer'
|
RSSFEEDALLCOMMENTS: 'RSS-flöde för samtliga kommentarer'
|
||||||
RSSFEEDCOMMENTS: 'RSS-flöde för kommentarer på denna sida'
|
RSSFEEDCOMMENTS: 'RSS-flöde för kommentarer på denna sida'
|
||||||
PageCommentInterface:
|
|
||||||
DELETEALLCOMMENTS: 'Radera alla kommenterar på den här sidan'
|
|
||||||
SilverStripe\Comments\Admin\CommentAdmin:
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
MENUTITLE: Kommentarer
|
MENUTITLE: Kommentarer
|
||||||
Moderated: Modererad
|
|
||||||
NeedsModeration: 'Kräver moderering'
|
|
||||||
SilverStripe\Comments\Controllers\CommentingController:
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
COMMENTS: Kommentarer
|
COMMENTS: Kommentarer
|
||||||
EMAILADDRESS: 'Din e-postadress (kommer inte att publiceras)'
|
EMAILADDRESS: 'Din e-postadress (kommer inte att publiceras)'
|
||||||
PERMISSIONFAILURE: 'Du kan inte skriva kommentarer på denna sida. Vänligen kontrollera att du är inloggad och har de användarrättigheter som krävs.'
|
PERMISSIONFAILURE: 'Du kan inte skriva kommentarer på denna sida. Vänligen kontrollera att du är inloggad och har de användarrättigheter som krävs.'
|
||||||
RSSTITLE: 'RSS-flöde med kommentarer'
|
RSSTITLE: 'RSS-flöde med kommentarer'
|
||||||
WEBSITEURL: 'Din hemsidas URL'
|
WEBSITEURL: 'Din hemsidas URL'
|
||||||
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
|
COMMENTOPTIONS: Kommentarer
|
||||||
|
COMMENTSTABSET: Kommentarer
|
||||||
SilverStripe\Comments\Model\Comment:
|
SilverStripe\Comments\Model\Comment:
|
||||||
ALLOWCOMMENTS: 'Tillåt kommentarer'
|
|
||||||
COMMENT: Kommentarer
|
COMMENT: Kommentarer
|
||||||
COMMENTBY: 'Kommentar av %s'
|
COMMENTBY: 'Kommentar av %s'
|
||||||
CREATED: Datum
|
CREATED: Datum
|
||||||
EMAIL: E-post
|
EMAIL: E-post
|
||||||
ISSPAM: 'Spam?'
|
ISSPAM: 'Spam?'
|
||||||
MODERATED: 'Modererad?'
|
MODERATED: 'Modererad?'
|
||||||
NAME: Författare
|
'ON': den
|
||||||
|
OPTIONS: Alternativ
|
||||||
PARENTTITLE: 'Överordnad sida'
|
PARENTTITLE: 'Överordnad sida'
|
||||||
PLURALNAME: Kommentarer
|
PLURALNAME: Kommentarer
|
||||||
SINGULARNAME: Kommentar
|
SINGULARNAME: Kommentar
|
||||||
|
16
lang/th.yml
Normal file
16
lang/th.yml
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
th:
|
||||||
|
CommentInterface:
|
||||||
|
PREVIEW: ดูตัวอย่าง
|
||||||
|
PREVIEWLABEL: ดูตัวอย่าง
|
||||||
|
CommentsInterface_ss:
|
||||||
|
COMMENTS: ความคิดเห็น
|
||||||
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
|
MENUTITLE: ความคิดเห็น
|
||||||
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
|
COMMENTS: ความคิดเห็น
|
||||||
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
|
COMMENTOPTIONS: ความคิดเห็น
|
||||||
|
COMMENTSTABSET: ความคิดเห็น
|
||||||
|
SilverStripe\Comments\Model\Comment:
|
||||||
|
EMAIL: อีเมล
|
||||||
|
PLURALNAME: ความคิดเห็น
|
17
lang/tr.yml
Normal file
17
lang/tr.yml
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
tr:
|
||||||
|
CommentInterface:
|
||||||
|
PREVIEW: Önizleme
|
||||||
|
PREVIEWLABEL: Önizleme
|
||||||
|
CommentsInterface_ss:
|
||||||
|
COMMENTS: Yorumlar
|
||||||
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
|
MENUTITLE: Yorumlar
|
||||||
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
|
COMMENTS: Yorumlar
|
||||||
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
|
COMMENTOPTIONS: Yorumlar
|
||||||
|
COMMENTSTABSET: Yorumlar
|
||||||
|
SilverStripe\Comments\Model\Comment:
|
||||||
|
EMAIL: Eposta
|
||||||
|
'ON': üzerinde
|
||||||
|
PLURALNAME: Yorumlar
|
21
lang/zh.yml
Normal file
21
lang/zh.yml
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
zh:
|
||||||
|
CommentInterface:
|
||||||
|
PREVIEW: 预览
|
||||||
|
PREVIEWLABEL: 预览
|
||||||
|
CommentsInterface_ss:
|
||||||
|
COMMENTS: 评论
|
||||||
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
|
MENUTITLE: 评论
|
||||||
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
|
COMMENTS: 评论
|
||||||
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
|
COMMENTOPTIONS: 评论
|
||||||
|
COMMENTSTABSET: 评论
|
||||||
|
SilverStripe\Comments\Model\Comment:
|
||||||
|
COMMENT: 评论
|
||||||
|
EMAIL: 电子邮件
|
||||||
|
OPTIONS: 选项
|
||||||
|
PARENTTITLE: 父
|
||||||
|
PLURALNAME: 评论
|
||||||
|
SINGULARNAME: 评论
|
||||||
|
URL: 网址
|
14
lang/zh_TW.yml
Normal file
14
lang/zh_TW.yml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
zh_TW:
|
||||||
|
CommentsInterface_ss:
|
||||||
|
COMMENTS: 意見
|
||||||
|
SilverStripe\Comments\Admin\CommentAdmin:
|
||||||
|
MENUTITLE: 意見
|
||||||
|
SilverStripe\Comments\Controllers\CommentingController:
|
||||||
|
COMMENTS: 意見
|
||||||
|
SilverStripe\Comments\Extensions\CommentsExtension:
|
||||||
|
COMMENTOPTIONS: 意見
|
||||||
|
COMMENTSTABSET: 意見
|
||||||
|
SilverStripe\Comments\Model\Comment:
|
||||||
|
EMAIL: 電子郵件
|
||||||
|
PLURALNAME: 意見
|
||||||
|
URL: 網址
|
19
package.json
19
package.json
@ -6,13 +6,13 @@
|
|||||||
"test": "tests"
|
"test": "tests"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^6.x"
|
"node": "^10.x"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "yarn && NODE_ENV=production webpack -p --bail --progress",
|
"build": "yarn && NODE_ENV=production webpack -p --bail --progress",
|
||||||
"watch": "yarn && NODE_ENV=development webpack --watch --progress",
|
"watch": "yarn && NODE_ENV=development webpack --watch --progress",
|
||||||
"css": "yarn && WEBPACK_CHILD=css webpack -p --bail --progress",
|
"css": "yarn && WEBPACK_CHILD=css webpack -p --bail --progress",
|
||||||
"test": "jest",
|
"test": "true",
|
||||||
"coverage": "jest --coverage",
|
"coverage": "jest --coverage",
|
||||||
"lint": "eslint client/src && sass-lint -v client/src"
|
"lint": "eslint client/src && sass-lint -v client/src"
|
||||||
},
|
},
|
||||||
@ -31,24 +31,23 @@
|
|||||||
},
|
},
|
||||||
"homepage": "https://github.com/silverstripe/silverstripe-comments",
|
"homepage": "https://github.com/silverstripe/silverstripe-comments",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"jquery": "^3.6.0",
|
||||||
|
"jquery-validation": "^1.19.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@silverstripe/webpack-config": "^0.2.7",
|
"@silverstripe/eslint-config": "^0.0.6",
|
||||||
"babel-core": "^6.7.4",
|
"@silverstripe/webpack-config": "^1.3",
|
||||||
"babel-jest": "^19.0.0",
|
"babel-jest": "^19.0.0",
|
||||||
"babel-preset-es2015": "^6.6.0",
|
"babel-preset-es2015": "^6.6.0",
|
||||||
"babel-preset-es2016": "^6.24.1",
|
"babel-preset-es2016": "^6.24.1",
|
||||||
"babel-preset-react": "^6.5.0",
|
"babel-preset-react": "^6.5.0",
|
||||||
"eslint": "^2.5.3",
|
"copy-webpack-plugin": "^4",
|
||||||
"eslint-config-airbnb": "^6.2.0",
|
|
||||||
"eslint-plugin-react": "^4.2.3",
|
|
||||||
"jest-cli": "^19.0.2",
|
"jest-cli": "^19.0.2",
|
||||||
|
"node-dir": "^0.1.17",
|
||||||
"react-addons-test-utils": "^15.3.1",
|
"react-addons-test-utils": "^15.3.1",
|
||||||
"redux-logger": "^2.6.1",
|
"redux-logger": "^2.6.1",
|
||||||
"redux-mock-store": "^1.2.3",
|
"redux-mock-store": "^1.2.3",
|
||||||
"redux-thunk": "^2.2.0",
|
"redux-thunk": "^2.2.0"
|
||||||
"sass-lint": "^1.10.2"
|
|
||||||
},
|
},
|
||||||
"babel": {
|
"babel": {
|
||||||
"presets": [
|
"presets": [
|
||||||
|
@ -2,21 +2,12 @@
|
|||||||
<ruleset name="SilverStripe">
|
<ruleset name="SilverStripe">
|
||||||
<description>CodeSniffer ruleset for SilverStripe coding conventions.</description>
|
<description>CodeSniffer ruleset for SilverStripe coding conventions.</description>
|
||||||
|
|
||||||
|
<file>src</file>
|
||||||
|
<file>tests</file>
|
||||||
|
|
||||||
<!-- base rules are PSR-2 -->
|
<!-- base rules are PSR-2 -->
|
||||||
<rule ref="PSR2" >
|
<rule ref="PSR2" >
|
||||||
<!-- Current exclusions -->
|
<!-- Current exclusions -->
|
||||||
<exclude name="PSR1.Methods.CamelCapsMethodName" />
|
<exclude name="PSR1.Methods.CamelCapsMethodName" />
|
||||||
<exclude name="PSR1.Files.SideEffects.FoundWithSymbols" />
|
|
||||||
<exclude name="PSR2.Classes.PropertyDeclaration" />
|
|
||||||
<exclude name="PSR2.ControlStructures.SwitchDeclaration" /> <!-- causes php notice while linting -->
|
|
||||||
<exclude name="PSR2.ControlStructures.SwitchDeclaration.WrongOpenercase" />
|
|
||||||
<exclude name="PSR2.ControlStructures.SwitchDeclaration.WrongOpenerdefault" />
|
|
||||||
<exclude name="PSR2.ControlStructures.SwitchDeclaration.TerminatingComment" />
|
|
||||||
<exclude name="PSR2.Methods.MethodDeclaration.Underscore" />
|
|
||||||
<exclude name="Squiz.Scope.MethodScope" />
|
|
||||||
<exclude name="Squiz.Classes.ValidClassName.NotCamelCaps" />
|
|
||||||
<exclude name="Generic.Files.LineLength.TooLong" />
|
|
||||||
<exclude name="PEAR.Functions.ValidDefaultValue.NotAtEnd" />
|
|
||||||
</rule>
|
</rule>
|
||||||
|
|
||||||
</ruleset>
|
</ruleset>
|
@ -1,8 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<phpunit bootstrap="vendor/silverstripe/cms/tests/bootstrap.php" colors="true">
|
<phpunit bootstrap="vendor/silverstripe/cms/tests/bootstrap.php" colors="true">
|
||||||
|
<testsuites>
|
||||||
<testsuite name="Default">
|
<testsuite name="Default">
|
||||||
<directory>tests</directory>
|
<directory>tests</directory>
|
||||||
</testsuite>
|
</testsuite>
|
||||||
|
</testsuites>
|
||||||
<filter>
|
<filter>
|
||||||
<whitelist addUncoveredFilesFromWhitelist="true">
|
<whitelist addUncoveredFilesFromWhitelist="true">
|
||||||
<directory suffix=".php">src/</directory>
|
<directory suffix=".php">src/</directory>
|
||||||
|
@ -3,15 +3,13 @@
|
|||||||
namespace SilverStripe\Comments\Admin;
|
namespace SilverStripe\Comments\Admin;
|
||||||
|
|
||||||
use SilverStripe\Admin\LeftAndMain;
|
use SilverStripe\Admin\LeftAndMain;
|
||||||
use SilverStripe\Comments\Admin\CommentsGridField;
|
|
||||||
use SilverStripe\Comments\Model\Comment;
|
use SilverStripe\Comments\Model\Comment;
|
||||||
use SilverStripe\Forms\Tab;
|
|
||||||
use SilverStripe\Forms\TabSet;
|
|
||||||
use SilverStripe\Forms\FieldList;
|
use SilverStripe\Forms\FieldList;
|
||||||
use SilverStripe\Forms\Form;
|
use SilverStripe\Forms\Form;
|
||||||
|
use SilverStripe\Forms\Tab;
|
||||||
|
use SilverStripe\Forms\TabSet;
|
||||||
use SilverStripe\Security\PermissionProvider;
|
use SilverStripe\Security\PermissionProvider;
|
||||||
use SilverStripe\Security\Security;
|
use SilverStripe\Security\Security;
|
||||||
use SilverStripe\View\SSViewer;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Comment administration system within the CMS
|
* Comment administration system within the CMS
|
||||||
@ -28,7 +26,7 @@ class CommentAdmin extends LeftAndMain implements PermissionProvider
|
|||||||
|
|
||||||
private static $menu_icon_class = 'font-icon-comment';
|
private static $menu_icon_class = 'font-icon-comment';
|
||||||
|
|
||||||
private static $allowed_actions = array(
|
private static $allowed_actions = [
|
||||||
'approvedmarked',
|
'approvedmarked',
|
||||||
'deleteall',
|
'deleteall',
|
||||||
'deletemarked',
|
'deletemarked',
|
||||||
@ -37,18 +35,18 @@ class CommentAdmin extends LeftAndMain implements PermissionProvider
|
|||||||
'spammarked',
|
'spammarked',
|
||||||
'EditForm',
|
'EditForm',
|
||||||
'unmoderated'
|
'unmoderated'
|
||||||
);
|
];
|
||||||
|
|
||||||
private static $required_permission_codes = 'CMS_ACCESS_CommentAdmin';
|
private static $required_permission_codes = 'CMS_ACCESS_CommentAdmin';
|
||||||
|
|
||||||
public function providePermissions()
|
public function providePermissions()
|
||||||
{
|
{
|
||||||
return array(
|
return [
|
||||||
"CMS_ACCESS_CommentAdmin" => array(
|
'CMS_ACCESS_CommentAdmin' => [
|
||||||
'name' => _t(__CLASS__ . '.ADMIN_PERMISSION', "Access to 'Comments' section"),
|
'name' => _t(__CLASS__ . '.ADMIN_PERMISSION', "Access to 'Comments' section"),
|
||||||
'category' => _t('SilverStripe\\Security\\Permission.CMS_ACCESS_CATEGORY', 'CMS Access')
|
'category' => _t('SilverStripe\\Security\\Permission.CMS_ACCESS_CATEGORY', 'CMS Access')
|
||||||
)
|
],
|
||||||
);
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -69,7 +67,7 @@ class CommentAdmin extends LeftAndMain implements PermissionProvider
|
|||||||
|
|
||||||
$newComments = Comment::get()->filter('Moderated', 0);
|
$newComments = Comment::get()->filter('Moderated', 0);
|
||||||
|
|
||||||
$newGrid = new CommentsGridField(
|
$newGrid = CommentsGridField::create(
|
||||||
'NewComments',
|
'NewComments',
|
||||||
'',
|
'',
|
||||||
$newComments,
|
$newComments,
|
||||||
@ -78,7 +76,7 @@ class CommentAdmin extends LeftAndMain implements PermissionProvider
|
|||||||
|
|
||||||
$approvedComments = Comment::get()->filter('Moderated', 1)->filter('IsSpam', 0);
|
$approvedComments = Comment::get()->filter('Moderated', 1)->filter('IsSpam', 0);
|
||||||
|
|
||||||
$approvedGrid = new CommentsGridField(
|
$approvedGrid = CommentsGridField::create(
|
||||||
'ApprovedComments',
|
'ApprovedComments',
|
||||||
'',
|
'',
|
||||||
$approvedComments,
|
$approvedComments,
|
||||||
@ -87,7 +85,7 @@ class CommentAdmin extends LeftAndMain implements PermissionProvider
|
|||||||
|
|
||||||
$spamComments = Comment::get()->filter('Moderated', 1)->filter('IsSpam', 1);
|
$spamComments = Comment::get()->filter('Moderated', 1)->filter('IsSpam', 1);
|
||||||
|
|
||||||
$spamGrid = new CommentsGridField(
|
$spamGrid = CommentsGridField::create(
|
||||||
'SpamComments',
|
'SpamComments',
|
||||||
'',
|
'',
|
||||||
$spamComments,
|
$spamComments,
|
||||||
@ -102,7 +100,7 @@ class CommentAdmin extends LeftAndMain implements PermissionProvider
|
|||||||
_t(
|
_t(
|
||||||
__CLASS__.'.NewComments',
|
__CLASS__.'.NewComments',
|
||||||
'New ({count})',
|
'New ({count})',
|
||||||
['count' => count($newComments)]
|
['count' => count($newComments ?? [])]
|
||||||
),
|
),
|
||||||
$newGrid
|
$newGrid
|
||||||
),
|
),
|
||||||
@ -111,7 +109,7 @@ class CommentAdmin extends LeftAndMain implements PermissionProvider
|
|||||||
_t(
|
_t(
|
||||||
__CLASS__.'.ApprovedComments',
|
__CLASS__.'.ApprovedComments',
|
||||||
'Approved ({count})',
|
'Approved ({count})',
|
||||||
['count' => count($approvedComments)]
|
['count' => count($approvedComments ?? [])]
|
||||||
),
|
),
|
||||||
$approvedGrid
|
$approvedGrid
|
||||||
),
|
),
|
||||||
@ -120,7 +118,7 @@ class CommentAdmin extends LeftAndMain implements PermissionProvider
|
|||||||
_t(
|
_t(
|
||||||
__CLASS__.'.SpamComments',
|
__CLASS__.'.SpamComments',
|
||||||
'Spam ({count})',
|
'Spam ({count})',
|
||||||
['count' => count($spamComments)]
|
['count' => count($spamComments ?? [])]
|
||||||
),
|
),
|
||||||
$spamGrid
|
$spamGrid
|
||||||
)
|
)
|
||||||
@ -136,7 +134,7 @@ class CommentAdmin extends LeftAndMain implements PermissionProvider
|
|||||||
$actions
|
$actions
|
||||||
);
|
);
|
||||||
|
|
||||||
$form->addExtraClass('cms-edit-form');
|
$form->addExtraClass('cms-edit-form fill-height');
|
||||||
$form->setTemplate($this->getTemplatesWithSuffix('_EditForm'));
|
$form->setTemplate($this->getTemplatesWithSuffix('_EditForm'));
|
||||||
|
|
||||||
if ($form->Fields()->hasTabset()) {
|
if ($form->Fields()->hasTabset()) {
|
||||||
|
@ -2,12 +2,26 @@
|
|||||||
|
|
||||||
namespace SilverStripe\Comments\Admin;
|
namespace SilverStripe\Comments\Admin;
|
||||||
|
|
||||||
use SilverStripe\Forms\FormField;
|
|
||||||
use SilverStripe\Forms\GridField\GridField;
|
use SilverStripe\Forms\GridField\GridField;
|
||||||
|
use SilverStripe\Forms\GridField\GridFieldConfig;
|
||||||
|
use SilverStripe\ORM\SS_List;
|
||||||
use SilverStripe\View\HTML;
|
use SilverStripe\View\HTML;
|
||||||
|
|
||||||
class CommentsGridField extends GridField
|
class CommentsGridField extends GridField
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* @param string $name
|
||||||
|
* @param string $title
|
||||||
|
* @param SS_List $dataList
|
||||||
|
* @param GridFieldConfig $config
|
||||||
|
*/
|
||||||
|
public function __construct($name, $title = null, SS_List $dataList = null, GridFieldConfig $config = null)
|
||||||
|
{
|
||||||
|
parent::__construct($name, $title, $dataList, $config);
|
||||||
|
|
||||||
|
$this->addExtraClass('grid-field__filter-buttons');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace SilverStripe\Comments\Admin;
|
namespace SilverStripe\Comments\Admin;
|
||||||
|
|
||||||
|
use SilverStripe\Dev\Deprecation;
|
||||||
use SilverStripe\Comments\Model\Comment;
|
use SilverStripe\Comments\Model\Comment;
|
||||||
use SilverStripe\Control\Controller;
|
use SilverStripe\Control\Controller;
|
||||||
use SilverStripe\Forms\GridField\GridField;
|
use SilverStripe\Forms\GridField\GridField;
|
||||||
@ -9,14 +10,26 @@ use SilverStripe\Forms\GridField\GridField_ActionProvider;
|
|||||||
use SilverStripe\Forms\GridField\GridField_ColumnProvider;
|
use SilverStripe\Forms\GridField\GridField_ColumnProvider;
|
||||||
use SilverStripe\Forms\GridField\GridField_FormAction;
|
use SilverStripe\Forms\GridField\GridField_FormAction;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated 3.2.0 Use CommentsGridFieldApproveAction CommentsGridFieldSpamAction instead
|
||||||
|
*/
|
||||||
class CommentsGridFieldAction implements GridField_ColumnProvider, GridField_ActionProvider
|
class CommentsGridFieldAction implements GridField_ColumnProvider, GridField_ActionProvider
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
Deprecation::notice(
|
||||||
|
'3.2.0',
|
||||||
|
'Use CommentsGridFieldApproveAction CommentsGridFieldSpamAction instead',
|
||||||
|
Deprecation::SCOPE_CLASS
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
public function augmentColumns($gridField, &$columns)
|
public function augmentColumns($gridField, &$columns)
|
||||||
{
|
{
|
||||||
if (!in_array('Actions', $columns)) {
|
if (!in_array('Actions', $columns ?? [])) {
|
||||||
$columns[] = 'Actions';
|
$columns[] = 'Actions';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -26,7 +39,7 @@ class CommentsGridFieldAction implements GridField_ColumnProvider, GridField_Act
|
|||||||
*/
|
*/
|
||||||
public function getColumnAttributes($gridField, $record, $columnName)
|
public function getColumnAttributes($gridField, $record, $columnName)
|
||||||
{
|
{
|
||||||
return array('class' => 'col-buttons');
|
return ['class' => 'col-buttons'];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -34,8 +47,8 @@ class CommentsGridFieldAction implements GridField_ColumnProvider, GridField_Act
|
|||||||
*/
|
*/
|
||||||
public function getColumnMetadata($gridField, $columnName)
|
public function getColumnMetadata($gridField, $columnName)
|
||||||
{
|
{
|
||||||
if ($columnName == 'Actions') {
|
if ($columnName === 'Actions') {
|
||||||
return array('title' => '');
|
return ['title' => ''];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -44,7 +57,7 @@ class CommentsGridFieldAction implements GridField_ColumnProvider, GridField_Act
|
|||||||
*/
|
*/
|
||||||
public function getColumnsHandled($gridField)
|
public function getColumnsHandled($gridField)
|
||||||
{
|
{
|
||||||
return array('Actions');
|
return ['Actions'];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -64,7 +77,7 @@ class CommentsGridFieldAction implements GridField_ColumnProvider, GridField_Act
|
|||||||
'CustomAction' . $record->ID . 'Spam',
|
'CustomAction' . $record->ID . 'Spam',
|
||||||
_t(__CLASS__ . '.SPAM', 'Spam'),
|
_t(__CLASS__ . '.SPAM', 'Spam'),
|
||||||
'spam',
|
'spam',
|
||||||
array('RecordID' => $record->ID)
|
['RecordID' => $record->ID]
|
||||||
)
|
)
|
||||||
->addExtraClass('btn btn-secondary grid-field__icon-action')
|
->addExtraClass('btn btn-secondary grid-field__icon-action')
|
||||||
->Field();
|
->Field();
|
||||||
@ -76,7 +89,7 @@ class CommentsGridFieldAction implements GridField_ColumnProvider, GridField_Act
|
|||||||
'CustomAction' . $record->ID . 'Approve',
|
'CustomAction' . $record->ID . 'Approve',
|
||||||
_t(__CLASS__ . '.APPROVE', 'Approve'),
|
_t(__CLASS__ . '.APPROVE', 'Approve'),
|
||||||
'approve',
|
'approve',
|
||||||
array('RecordID' => $record->ID)
|
['RecordID' => $record->ID]
|
||||||
)
|
)
|
||||||
->addExtraClass('btn btn-secondary grid-field__icon-action')
|
->addExtraClass('btn btn-secondary grid-field__icon-action')
|
||||||
->Field();
|
->Field();
|
||||||
@ -90,7 +103,7 @@ class CommentsGridFieldAction implements GridField_ColumnProvider, GridField_Act
|
|||||||
*/
|
*/
|
||||||
public function getActions($gridField)
|
public function getActions($gridField)
|
||||||
{
|
{
|
||||||
return array('spam', 'approve');
|
return ['spam', 'approve'];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -98,7 +111,8 @@ class CommentsGridFieldAction implements GridField_ColumnProvider, GridField_Act
|
|||||||
*/
|
*/
|
||||||
public function handleAction(GridField $gridField, $actionName, $arguments, $data)
|
public function handleAction(GridField $gridField, $actionName, $arguments, $data)
|
||||||
{
|
{
|
||||||
if ($actionName == 'spam') {
|
if ($actionName === 'spam') {
|
||||||
|
/** @var Comment $comment */
|
||||||
$comment = Comment::get()->byID($arguments['RecordID']);
|
$comment = Comment::get()->byID($arguments['RecordID']);
|
||||||
$comment->markSpam();
|
$comment->markSpam();
|
||||||
|
|
||||||
@ -109,7 +123,8 @@ class CommentsGridFieldAction implements GridField_ColumnProvider, GridField_Act
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($actionName == 'approve') {
|
if ($actionName === 'approve') {
|
||||||
|
/** @var Comment $comment */
|
||||||
$comment = Comment::get()->byID($arguments['RecordID']);
|
$comment = Comment::get()->byID($arguments['RecordID']);
|
||||||
$comment->markApproved();
|
$comment->markApproved();
|
||||||
|
|
||||||
|
140
src/Admin/CommentsGridFieldApproveAction.php
Normal file
140
src/Admin/CommentsGridFieldApproveAction.php
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace SilverStripe\Comments\Admin;
|
||||||
|
|
||||||
|
use SilverStripe\Comments\Model\Comment;
|
||||||
|
use SilverStripe\Control\Controller;
|
||||||
|
use SilverStripe\Forms\GridField\GridField;
|
||||||
|
use SilverStripe\Forms\GridField\GridField_ActionMenuItem;
|
||||||
|
use SilverStripe\Forms\GridField\GridField_ActionProvider;
|
||||||
|
use SilverStripe\Forms\GridField\GridField_ColumnProvider;
|
||||||
|
use SilverStripe\Forms\GridField\GridField_FormAction;
|
||||||
|
|
||||||
|
class CommentsGridFieldApproveAction implements
|
||||||
|
GridField_ColumnProvider,
|
||||||
|
GridField_ActionProvider,
|
||||||
|
GridField_ActionMenuItem
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function augmentColumns($gridField, &$columns)
|
||||||
|
{
|
||||||
|
if (!in_array('Actions', $columns ?? [])) {
|
||||||
|
$columns[] = 'Actions';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTitle($gridField, $record, $columnName)
|
||||||
|
{
|
||||||
|
return _t(__CLASS__ . '.APPROVE', 'Approve');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getExtraData($gridField, $record, $columnName)
|
||||||
|
{
|
||||||
|
|
||||||
|
$field = $this->getApproveAction($gridField, $record, $columnName);
|
||||||
|
|
||||||
|
if ($field) {
|
||||||
|
return $field->getAttributes();
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
public function getGroup($gridField, $record, $columnName)
|
||||||
|
{
|
||||||
|
$field = $this->getApproveAction($gridField, $record, $columnName);
|
||||||
|
|
||||||
|
return $field ? GridField_ActionMenuItem::DEFAULT_GROUP: null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function getColumnAttributes($gridField, $record, $columnName)
|
||||||
|
{
|
||||||
|
return ['class' => 'col-buttons grid-field__col-compact'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function getColumnMetadata($gridField, $columnName)
|
||||||
|
{
|
||||||
|
if ($columnName === 'Actions') {
|
||||||
|
return ['title' => ''];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function getColumnsHandled($gridField)
|
||||||
|
{
|
||||||
|
return ['Actions'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function getColumnContent($gridField, $record, $columnName)
|
||||||
|
{
|
||||||
|
if (!$record->canEdit()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$field = $this->getApproveAction($gridField, $record, $columnName);
|
||||||
|
|
||||||
|
return $field ? $field->Field() : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the FormAction object, used by other methods to get properties
|
||||||
|
*
|
||||||
|
* @return GridField_FormAction|null
|
||||||
|
*/
|
||||||
|
public function getApproveAction($gridField, $record, $columnName)
|
||||||
|
{
|
||||||
|
$field = GridField_FormAction::create(
|
||||||
|
$gridField,
|
||||||
|
'CustomAction' . $record->ID . 'Approve',
|
||||||
|
_t(__CLASS__ . '.APPROVE', 'Approve'),
|
||||||
|
'approve',
|
||||||
|
['RecordID' => $record->ID]
|
||||||
|
)
|
||||||
|
->addExtraClass(implode(' ', [
|
||||||
|
'btn',
|
||||||
|
'btn-secondary',
|
||||||
|
'grid-field__icon-action',
|
||||||
|
'action-menu--handled',
|
||||||
|
'font-icon-check-mark',
|
||||||
|
]))
|
||||||
|
->setAttribute('classNames', 'font-icon-check-mark');
|
||||||
|
|
||||||
|
return ($record->IsSpam || !$record->Moderated) ? $field : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function getActions($gridField)
|
||||||
|
{
|
||||||
|
return ['approve'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function handleAction(GridField $gridField, $actionName, $arguments, $data)
|
||||||
|
{
|
||||||
|
/** @var Comment $comment */
|
||||||
|
$comment = Comment::get()->byID($arguments['RecordID']);
|
||||||
|
$comment->markApproved();
|
||||||
|
|
||||||
|
// output a success message to the user
|
||||||
|
Controller::curr()->getResponse()->setStatusCode(
|
||||||
|
200,
|
||||||
|
_t(__CLASS__ . '.COMMENTAPPROVED', 'Comment approved.')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
28
src/Admin/CommentsGridFieldBulkAction/ApproveHandler.php
Normal file
28
src/Admin/CommentsGridFieldBulkAction/ApproveHandler.php
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace SilverStripe\Comments\Admin\CommentsGridFieldBulkAction;
|
||||||
|
|
||||||
|
use SilverStripe\Comments\Model\Comment;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A {@link Handler} for bulk approving comments
|
||||||
|
*/
|
||||||
|
class ApproveHandler extends CommentHandler
|
||||||
|
{
|
||||||
|
private static $url_segment = 'approve';
|
||||||
|
|
||||||
|
protected $buttonClasses = 'font-icon-tick';
|
||||||
|
|
||||||
|
protected $label = 'Approve';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Comment $comment
|
||||||
|
*
|
||||||
|
* @return Comment
|
||||||
|
*/
|
||||||
|
public function updateComment($comment)
|
||||||
|
{
|
||||||
|
$comment->markApproved();
|
||||||
|
return $comment;
|
||||||
|
}
|
||||||
|
}
|
49
src/Admin/CommentsGridFieldBulkAction/CommentHandler.php
Normal file
49
src/Admin/CommentsGridFieldBulkAction/CommentHandler.php
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace SilverStripe\Comments\Admin\CommentsGridFieldBulkAction;
|
||||||
|
|
||||||
|
use Colymba\BulkManager\BulkAction\Handler;
|
||||||
|
use Colymba\BulkTools\HTTPBulkToolsResponse;
|
||||||
|
use SilverStripe\Comments\Model\Comment;
|
||||||
|
use SilverStripe\Core\Convert;
|
||||||
|
use SilverStripe\Control\HTTPRequest;
|
||||||
|
use SilverStripe\Control\HTTPResponse;
|
||||||
|
|
||||||
|
abstract class CommentHandler extends Handler
|
||||||
|
{
|
||||||
|
protected $xhr = true;
|
||||||
|
|
||||||
|
protected $destructive = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param HTTPRequest $request
|
||||||
|
* @return HTTPResponse
|
||||||
|
*/
|
||||||
|
public function index(HTTPRequest $request)
|
||||||
|
{
|
||||||
|
$ids = [];
|
||||||
|
|
||||||
|
$response = new HTTPBulkToolsResponse(
|
||||||
|
true,
|
||||||
|
$this->gridField,
|
||||||
|
200
|
||||||
|
);
|
||||||
|
|
||||||
|
foreach ($this->getRecords() as $comment) {
|
||||||
|
array_push($ids, $comment->ID);
|
||||||
|
$this->updateComment($comment);
|
||||||
|
$response->addSuccessRecord($comment);
|
||||||
|
}
|
||||||
|
|
||||||
|
$response->setMessage(_t(__CLASS__ . '.CHANGES_APPLIED', 'Changes applied'));
|
||||||
|
|
||||||
|
return $response;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Comment $comment
|
||||||
|
*
|
||||||
|
* @return Comment
|
||||||
|
*/
|
||||||
|
abstract public function updateComment($comment);
|
||||||
|
}
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace SilverStripe\Comments\Admin\CommentsGridFieldBulkAction;
|
namespace SilverStripe\Comments\Admin\CommentsGridFieldBulkAction;
|
||||||
|
|
||||||
|
use SilverStripe\Dev\Deprecation;
|
||||||
use Colymba\BulkManager\BulkAction\Handler as GridFieldBulkActionHandler;
|
use Colymba\BulkManager\BulkAction\Handler as GridFieldBulkActionHandler;
|
||||||
use SilverStripe\Core\Convert;
|
use SilverStripe\Core\Convert;
|
||||||
use SilverStripe\Control\HTTPRequest;
|
use SilverStripe\Control\HTTPRequest;
|
||||||
@ -10,7 +11,7 @@ use SilverStripe\Control\HTTPResponse;
|
|||||||
/**
|
/**
|
||||||
* A {@link GridFieldBulkActionHandler} for bulk marking comments as spam
|
* A {@link GridFieldBulkActionHandler} for bulk marking comments as spam
|
||||||
*
|
*
|
||||||
* @package comments
|
* @deprecated 3.1.0 Use concrete Spam or Approve handlers instead
|
||||||
*/
|
*/
|
||||||
class Handler extends GridFieldBulkActionHandler
|
class Handler extends GridFieldBulkActionHandler
|
||||||
{
|
{
|
||||||
@ -28,6 +29,11 @@ class Handler extends GridFieldBulkActionHandler
|
|||||||
* @param HTTPRequest $request
|
* @param HTTPRequest $request
|
||||||
* @return HTTPResponse
|
* @return HTTPResponse
|
||||||
*/
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
Deprecation::notice('3.1.0', 'Use concrete Spam or Approve handlers instead', Deprecation::SCOPE_CLASS);
|
||||||
|
}
|
||||||
|
|
||||||
public function spam(HTTPRequest $request)
|
public function spam(HTTPRequest $request)
|
||||||
{
|
{
|
||||||
$ids = array();
|
$ids = array();
|
||||||
@ -37,7 +43,7 @@ class Handler extends GridFieldBulkActionHandler
|
|||||||
$record->markSpam();
|
$record->markSpam();
|
||||||
}
|
}
|
||||||
|
|
||||||
$response = new HTTPResponse(Convert::raw2json(array(
|
$response = new HTTPResponse(json_encode(array(
|
||||||
'done' => true,
|
'done' => true,
|
||||||
'records' => $ids
|
'records' => $ids
|
||||||
)));
|
)));
|
||||||
@ -60,7 +66,7 @@ class Handler extends GridFieldBulkActionHandler
|
|||||||
$record->markApproved();
|
$record->markApproved();
|
||||||
}
|
}
|
||||||
|
|
||||||
$response = new HTTPResponse(Convert::raw2json(array(
|
$response = new HTTPResponse(json_encode(array(
|
||||||
'done' => true,
|
'done' => true,
|
||||||
'records' => $ids
|
'records' => $ids
|
||||||
)));
|
)));
|
||||||
|
28
src/Admin/CommentsGridFieldBulkAction/SpamHandler.php
Normal file
28
src/Admin/CommentsGridFieldBulkAction/SpamHandler.php
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace SilverStripe\Comments\Admin\CommentsGridFieldBulkAction;
|
||||||
|
|
||||||
|
use SilverStripe\Comments\Model\Comment;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A {@link Handler} for bulk marking comments as spam
|
||||||
|
*/
|
||||||
|
class SpamHandler extends CommentHandler
|
||||||
|
{
|
||||||
|
private static $url_segment = 'spam';
|
||||||
|
|
||||||
|
protected $buttonClasses = 'font-icon-cross-mark';
|
||||||
|
|
||||||
|
protected $label = 'Spam';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Comment $comment
|
||||||
|
*
|
||||||
|
* @return Comment
|
||||||
|
*/
|
||||||
|
public function updateComment($comment)
|
||||||
|
{
|
||||||
|
$comment->markSpam();
|
||||||
|
return $comment;
|
||||||
|
}
|
||||||
|
}
|
@ -3,8 +3,10 @@
|
|||||||
namespace SilverStripe\Comments\Admin;
|
namespace SilverStripe\Comments\Admin;
|
||||||
|
|
||||||
use Colymba\BulkManager\BulkManager;
|
use Colymba\BulkManager\BulkManager;
|
||||||
use SilverStripe\Comments\Admin\CommentsGridFieldBulkAction\Handler;
|
use SilverStripe\Comments\Admin\CommentsGridFieldBulkAction\ApproveHandler;
|
||||||
|
use SilverStripe\Comments\Admin\CommentsGridFieldBulkAction\SpamHandler;
|
||||||
use SilverStripe\Core\Convert;
|
use SilverStripe\Core\Convert;
|
||||||
|
use SilverStripe\Forms\GridField\GridField_ActionMenu;
|
||||||
use SilverStripe\Forms\GridField\GridFieldConfig_RecordEditor;
|
use SilverStripe\Forms\GridField\GridFieldConfig_RecordEditor;
|
||||||
use SilverStripe\Forms\GridField\GridFieldDataColumns;
|
use SilverStripe\Forms\GridField\GridFieldDataColumns;
|
||||||
|
|
||||||
@ -16,47 +18,37 @@ class CommentsGridFieldConfig extends GridFieldConfig_RecordEditor
|
|||||||
|
|
||||||
// $this->addComponent(new GridFieldExportButton());
|
// $this->addComponent(new GridFieldExportButton());
|
||||||
|
|
||||||
$this->addComponent(new CommentsGridFieldAction());
|
$this->addComponents([
|
||||||
|
new CommentsGridFieldSpamAction(),
|
||||||
|
new CommentsGridFieldApproveAction(),
|
||||||
|
]);
|
||||||
|
|
||||||
// Format column
|
// Format column
|
||||||
|
/** @var GridFieldDataColumns $columns */
|
||||||
$columns = $this->getComponentByType(GridFieldDataColumns::class);
|
$columns = $this->getComponentByType(GridFieldDataColumns::class);
|
||||||
$columns->setFieldFormatting(array(
|
$columns->setFieldFormatting([
|
||||||
'ParentTitle' => function ($value, &$item) {
|
'Parent.Title' => function ($value, &$item) {
|
||||||
|
if ($link = $item->Link()) {
|
||||||
return sprintf(
|
return sprintf(
|
||||||
'<a href="%s" class="cms-panel-link external-link action" target="_blank">%s</a>',
|
'<a href="%s" class="cms-panel-link external-link action" target="_blank">%s</a>',
|
||||||
Convert::raw2att($item->Link()),
|
Convert::raw2att($link),
|
||||||
$item->obj('ParentTitle')->forTemplate()
|
$item->obj('ParentTitle')->forTemplate()
|
||||||
);
|
);
|
||||||
|
} else {
|
||||||
|
return $item->obj('ParentTitle')->forTemplate();
|
||||||
}
|
}
|
||||||
));
|
}
|
||||||
|
]);
|
||||||
|
|
||||||
// Add bulk option
|
// Add bulk option
|
||||||
$manager = new BulkManager();
|
$manager = BulkManager::create(null, false);
|
||||||
|
|
||||||
$manager->addBulkAction(
|
$spamAction = SpamHandler::create()->setLabel(_t(__CLASS__ . '.SPAM', 'Spam'));
|
||||||
'spam',
|
$approveAction = ApproveHandler::create()->setLabel(_t(__CLASS__ . '.APPROVE', 'Approve'));
|
||||||
_t(__CLASS__ . '.SPAM', 'Spam'),
|
|
||||||
Handler::class,
|
|
||||||
array(
|
|
||||||
'isAjax' => true,
|
|
||||||
'icon' => 'cross',
|
|
||||||
'isDestructive' => false
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
$manager->addBulkAction(
|
$manager
|
||||||
'approve',
|
->addBulkAction($spamAction)
|
||||||
_t(__CLASS__ . '.APPROVE', 'Approve'),
|
->addBulkAction($approveAction);
|
||||||
Handler::class,
|
|
||||||
array(
|
|
||||||
'isAjax' => true,
|
|
||||||
'icon' => 'cross',
|
|
||||||
'isDestructive' => false
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
$manager->removeBulkAction('bulkEdit');
|
|
||||||
$manager->removeBulkAction('unLink');
|
|
||||||
|
|
||||||
$this->addComponent($manager);
|
$this->addComponent($manager);
|
||||||
}
|
}
|
||||||
|
141
src/Admin/CommentsGridFieldSpamAction.php
Normal file
141
src/Admin/CommentsGridFieldSpamAction.php
Normal file
@ -0,0 +1,141 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace SilverStripe\Comments\Admin;
|
||||||
|
|
||||||
|
use SilverStripe\Comments\Model\Comment;
|
||||||
|
use SilverStripe\Control\Controller;
|
||||||
|
use SilverStripe\Forms\GridField\GridField;
|
||||||
|
use SilverStripe\Forms\GridField\GridField_ActionMenuItem;
|
||||||
|
use SilverStripe\Forms\GridField\GridField_ActionProvider;
|
||||||
|
use SilverStripe\Forms\GridField\GridField_ColumnProvider;
|
||||||
|
use SilverStripe\Forms\GridField\GridField_FormAction;
|
||||||
|
|
||||||
|
class CommentsGridFieldSpamAction implements
|
||||||
|
GridField_ColumnProvider,
|
||||||
|
GridField_ActionProvider,
|
||||||
|
GridField_ActionMenuItem
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function augmentColumns($gridField, &$columns)
|
||||||
|
{
|
||||||
|
if (!in_array('Actions', $columns ?? [])) {
|
||||||
|
$columns[] = 'Actions';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTitle($gridField, $record, $columnName)
|
||||||
|
{
|
||||||
|
return _t(__CLASS__ . '.SPAM', 'Spam');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getExtraData($gridField, $record, $columnName)
|
||||||
|
{
|
||||||
|
|
||||||
|
$field = $this->getSpamAction($gridField, $record, $columnName);
|
||||||
|
|
||||||
|
if ($field) {
|
||||||
|
return $field->getAttributes();
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getGroup($gridField, $record, $columnName)
|
||||||
|
{
|
||||||
|
$field = $this->getSpamAction($gridField, $record, $columnName);
|
||||||
|
|
||||||
|
return $field ? GridField_ActionMenuItem::DEFAULT_GROUP: null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function getColumnAttributes($gridField, $record, $columnName)
|
||||||
|
{
|
||||||
|
return ['class' => 'col-buttons grid-field__col-compact'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function getColumnMetadata($gridField, $columnName)
|
||||||
|
{
|
||||||
|
if ($columnName === 'Actions') {
|
||||||
|
return ['title' => ''];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function getColumnsHandled($gridField)
|
||||||
|
{
|
||||||
|
return ['Actions'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function getColumnContent($gridField, $record, $columnName)
|
||||||
|
{
|
||||||
|
if (!$record->canEdit()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$field = $this->getSpamAction($gridField, $record, $columnName);
|
||||||
|
|
||||||
|
return $field ? $field->Field() : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the FormAction object, used by other methods to get properties
|
||||||
|
*
|
||||||
|
* @return GridField_FormAction|null
|
||||||
|
*/
|
||||||
|
public function getSpamAction($gridField, $record, $columnName)
|
||||||
|
{
|
||||||
|
$field = GridField_FormAction::create(
|
||||||
|
$gridField,
|
||||||
|
'CustomAction' . $record->ID . 'Spam',
|
||||||
|
_t(__CLASS__ . '.SPAM', 'Spam'),
|
||||||
|
'spam',
|
||||||
|
['RecordID' => $record->ID]
|
||||||
|
)
|
||||||
|
->addExtraClass(implode(' ', [
|
||||||
|
'btn',
|
||||||
|
'btn-secondary',
|
||||||
|
'grid-field__icon-action',
|
||||||
|
'action-menu--handled',
|
||||||
|
'font-icon-cross-mark',
|
||||||
|
]))
|
||||||
|
->setAttribute('classNames', 'font-icon-cross-mark');
|
||||||
|
return (!$record->IsSpam || !$record->Moderated) ? $field : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function getActions($gridField)
|
||||||
|
{
|
||||||
|
return ['spam'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function handleAction(GridField $gridField, $actionName, $arguments, $data)
|
||||||
|
{
|
||||||
|
/** @var Comment $comment */
|
||||||
|
$comment = Comment::get()->byID($arguments['RecordID']);
|
||||||
|
$comment->markSpam();
|
||||||
|
|
||||||
|
// output a success message to the user
|
||||||
|
Controller::curr()->getResponse()->setStatusCode(
|
||||||
|
200,
|
||||||
|
_t(__CLASS__ . '.COMMENTMARKEDSPAM', 'Comment marked as spam.')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -4,20 +4,22 @@ namespace SilverStripe\Comments\Controllers;
|
|||||||
|
|
||||||
use SilverStripe\CMS\Model\SiteTree;
|
use SilverStripe\CMS\Model\SiteTree;
|
||||||
use SilverStripe\Comments\Extensions\CommentsExtension;
|
use SilverStripe\Comments\Extensions\CommentsExtension;
|
||||||
|
use SilverStripe\Comments\Forms\CommentForm;
|
||||||
use SilverStripe\Comments\Model\Comment;
|
use SilverStripe\Comments\Model\Comment;
|
||||||
use SilverStripe\Control\Director;
|
|
||||||
use SilverStripe\Control\Controller;
|
use SilverStripe\Control\Controller;
|
||||||
use SilverStripe\Control\Email\Email;
|
use SilverStripe\Control\Director;
|
||||||
use SilverStripe\Control\HTTP;
|
use SilverStripe\Control\HTTP;
|
||||||
use SilverStripe\Control\HTTPRequest;
|
use SilverStripe\Control\HTTPRequest;
|
||||||
|
use SilverStripe\Control\HTTPResponse;
|
||||||
|
use SilverStripe\Control\HTTPResponse_Exception;
|
||||||
use SilverStripe\Control\RSS\RSSFeed;
|
use SilverStripe\Control\RSS\RSSFeed;
|
||||||
use SilverStripe\Control\Session;
|
|
||||||
use SilverStripe\ORM\DataObject;
|
|
||||||
use SilverStripe\ORM\PaginatedList;
|
|
||||||
use SilverStripe\Security\Member;
|
|
||||||
use SilverStripe\Security\Security;
|
|
||||||
use SilverStripe\Core\Injector\Injector;
|
use SilverStripe\Core\Injector\Injector;
|
||||||
use SilverStripe\Comments\Forms\CommentForm;
|
use SilverStripe\Forms\Form;
|
||||||
|
use SilverStripe\ORM\DataObject;
|
||||||
|
use SilverStripe\ORM\FieldType\DBHTMLText;
|
||||||
|
use SilverStripe\ORM\PaginatedList;
|
||||||
|
use SilverStripe\Security\Security;
|
||||||
|
use SilverStripe\Control\Middleware\HTTPCacheControlMiddleware;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @package comments
|
* @package comments
|
||||||
@ -27,7 +29,7 @@ class CommentingController extends Controller
|
|||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
private static $allowed_actions = array(
|
private static $allowed_actions = [
|
||||||
'delete',
|
'delete',
|
||||||
'spam',
|
'spam',
|
||||||
'ham',
|
'ham',
|
||||||
@ -36,15 +38,15 @@ class CommentingController extends Controller
|
|||||||
'CommentsForm',
|
'CommentsForm',
|
||||||
'reply',
|
'reply',
|
||||||
'doPostComment',
|
'doPostComment',
|
||||||
'doPreviewComment'
|
'doPreviewComment',
|
||||||
);
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
private static $url_handlers = array(
|
private static $url_handlers = [
|
||||||
'reply/$ParentCommentID//$ID/$OtherID' => 'reply',
|
'reply/$ParentCommentID//$ID/$OtherID' => 'reply',
|
||||||
);
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fields required for this form
|
* Fields required for this form
|
||||||
@ -52,11 +54,11 @@ class CommentingController extends Controller
|
|||||||
* @var array
|
* @var array
|
||||||
* @config
|
* @config
|
||||||
*/
|
*/
|
||||||
private static $required_fields = array(
|
private static $required_fields = [
|
||||||
'Name',
|
'Name',
|
||||||
'Email',
|
'Email',
|
||||||
'Comment'
|
'Comment',
|
||||||
);
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parent class this commenting form is for
|
* Parent class this commenting form is for
|
||||||
@ -70,21 +72,21 @@ class CommentingController extends Controller
|
|||||||
*
|
*
|
||||||
* @var DataObject
|
* @var DataObject
|
||||||
*/
|
*/
|
||||||
private $ownerRecord = null;
|
private $ownerRecord;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parent controller record
|
* Parent controller record
|
||||||
*
|
*
|
||||||
* @var Controller
|
* @var Controller
|
||||||
*/
|
*/
|
||||||
private $ownerController = null;
|
private $ownerController;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Backup url to return to
|
* Backup url to return to
|
||||||
*
|
*
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
protected $fallbackReturnURL = null;
|
protected $fallbackReturnURL;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the parent class name to use
|
* Set the parent class name to use
|
||||||
@ -114,7 +116,7 @@ class CommentingController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function encodeClassName($input)
|
public function encodeClassName($input)
|
||||||
{
|
{
|
||||||
return str_replace('\\', '-', $input);
|
return str_replace('\\', '-', $input ?? '');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -125,7 +127,7 @@ class CommentingController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function decodeClassName($input)
|
public function decodeClassName($input)
|
||||||
{
|
{
|
||||||
return str_replace('-', '\\', $input);
|
return str_replace('-', '\\', $input ?? '');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -178,6 +180,7 @@ class CommentingController extends Controller
|
|||||||
{
|
{
|
||||||
// If possible use the current record
|
// If possible use the current record
|
||||||
if ($record = $this->getOwnerRecord()) {
|
if ($record = $this->getOwnerRecord()) {
|
||||||
|
/** @var DataObject|CommentsExtension $record */
|
||||||
return $record->getCommentsOption($key);
|
return $record->getCommentsOption($key);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -198,6 +201,7 @@ class CommentingController extends Controller
|
|||||||
public function getOptions()
|
public function getOptions()
|
||||||
{
|
{
|
||||||
if ($record = $this->getOwnerRecord()) {
|
if ($record = $this->getOwnerRecord()) {
|
||||||
|
/** @var DataObject|CommentsExtension $record */
|
||||||
return $record->getCommentsOptions();
|
return $record->getCommentsOptions();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -226,7 +230,7 @@ class CommentingController extends Controller
|
|||||||
/**
|
/**
|
||||||
* Outputs the RSS feed of comments
|
* Outputs the RSS feed of comments
|
||||||
*
|
*
|
||||||
* @return HTMLText
|
* @return DBHTMLText
|
||||||
*/
|
*/
|
||||||
public function rss()
|
public function rss()
|
||||||
{
|
{
|
||||||
@ -252,10 +256,10 @@ class CommentingController extends Controller
|
|||||||
$class = SiteTree::class;
|
$class = SiteTree::class;
|
||||||
}
|
}
|
||||||
|
|
||||||
$comments = Comment::get()->filter(array(
|
$comments = Comment::get()->filter([
|
||||||
'Moderated' => 1,
|
'Moderated' => 1,
|
||||||
'IsSpam' => 0,
|
'IsSpam' => 0,
|
||||||
));
|
]);
|
||||||
|
|
||||||
// Check if class filter
|
// Check if class filter
|
||||||
if ($class) {
|
if ($class) {
|
||||||
@ -275,10 +279,10 @@ class CommentingController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
$title = _t(__CLASS__ . '.RSSTITLE', "Comments RSS Feed");
|
$title = _t(__CLASS__ . '.RSSTITLE', "Comments RSS Feed");
|
||||||
$comments = new PaginatedList($comments, $request);
|
$comments = PaginatedList::create($comments, $request);
|
||||||
$comments->setPageLength($this->getOption('comments_per_page'));
|
$comments->setPageLength($this->getOption('comments_per_page'));
|
||||||
|
|
||||||
return new RSSFeed(
|
return RSSFeed::create(
|
||||||
$comments,
|
$comments,
|
||||||
$link,
|
$link,
|
||||||
$title,
|
$title,
|
||||||
@ -375,6 +379,9 @@ class CommentingController extends Controller
|
|||||||
* Redirect back to referer if available, ensuring that only site URLs
|
* Redirect back to referer if available, ensuring that only site URLs
|
||||||
* are allowed to avoid phishing. If it's an AJAX request render the
|
* are allowed to avoid phishing. If it's an AJAX request render the
|
||||||
* comment in it's new state
|
* comment in it's new state
|
||||||
|
*
|
||||||
|
* @param Comment $comment
|
||||||
|
* @return DBHTMLText|HTTPResponse|false
|
||||||
*/
|
*/
|
||||||
private function renderChangedCommentState($comment)
|
private function renderChangedCommentState($comment)
|
||||||
{
|
{
|
||||||
@ -383,22 +390,22 @@ class CommentingController extends Controller
|
|||||||
// Render comment using AJAX
|
// Render comment using AJAX
|
||||||
if ($this->request->isAjax()) {
|
if ($this->request->isAjax()) {
|
||||||
return $comment->renderWith('Includes/CommentsInterface_singlecomment');
|
return $comment->renderWith('Includes/CommentsInterface_singlecomment');
|
||||||
} else {
|
}
|
||||||
|
|
||||||
// Redirect to either the comment or start of the page
|
// Redirect to either the comment or start of the page
|
||||||
if (empty($referer)) {
|
if (empty($referer)) {
|
||||||
return $this->redirectBack();
|
return $this->redirectBack();
|
||||||
} else {
|
}
|
||||||
|
|
||||||
// Redirect to the comment, but check for phishing
|
// Redirect to the comment, but check for phishing
|
||||||
$url = $referer . '#comment-' . $comment->ID;
|
$url = $referer . '#comment-' . $comment->ID;
|
||||||
// absolute redirection URLs not located on this site may cause phishing
|
// absolute redirection URLs not located on this site may cause phishing
|
||||||
if (Director::is_site_url($url)) {
|
if (Director::is_site_url($url)) {
|
||||||
return $this->redirect($url);
|
return $this->redirect($url);
|
||||||
} else {
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the comment referenced in the URL (by ID). Permission checking
|
* Returns the comment referenced in the URL (by ID). Permission checking
|
||||||
@ -411,6 +418,7 @@ class CommentingController extends Controller
|
|||||||
$id = isset($this->urlParams['ID']) ? $this->urlParams['ID'] : false;
|
$id = isset($this->urlParams['ID']) ? $this->urlParams['ID'] : false;
|
||||||
|
|
||||||
if ($id) {
|
if ($id) {
|
||||||
|
/** @var Comment $comment */
|
||||||
$comment = Comment::get()->byId($id);
|
$comment = Comment::get()->byId($id);
|
||||||
if ($comment) {
|
if ($comment) {
|
||||||
$this->fallbackReturnURL = $comment->Link();
|
$this->fallbackReturnURL = $comment->Link();
|
||||||
@ -432,12 +440,13 @@ class CommentingController extends Controller
|
|||||||
// Enables multiple forms with different names to use the same handler
|
// Enables multiple forms with different names to use the same handler
|
||||||
$form = $this->CommentsForm();
|
$form = $this->CommentsForm();
|
||||||
$form->setName('ReplyForm_' . $comment->ID);
|
$form->setName('ReplyForm_' . $comment->ID);
|
||||||
|
$form->setHTMLID(null);
|
||||||
$form->addExtraClass('reply-form');
|
$form->addExtraClass('reply-form');
|
||||||
|
|
||||||
// Load parent into reply form
|
// Load parent into reply form
|
||||||
$form->loadDataFrom(array(
|
$form->loadDataFrom([
|
||||||
'ParentCommentID' => $comment->ID
|
'ParentCommentID' => $comment->ID
|
||||||
));
|
]);
|
||||||
|
|
||||||
// Customise action
|
// Customise action
|
||||||
$form->setFormAction($this->Link('reply', $comment->ID));
|
$form->setFormAction($this->Link('reply', $comment->ID));
|
||||||
@ -460,6 +469,7 @@ class CommentingController extends Controller
|
|||||||
{
|
{
|
||||||
// Extract parent comment from reply and build this way
|
// Extract parent comment from reply and build this way
|
||||||
if ($parentID = $request->param('ParentCommentID')) {
|
if ($parentID = $request->param('ParentCommentID')) {
|
||||||
|
/** @var Comment $comment */
|
||||||
$comment = DataObject::get_by_id(Comment::class, $parentID, true);
|
$comment = DataObject::get_by_id(Comment::class, $parentID, true);
|
||||||
if ($comment) {
|
if ($comment) {
|
||||||
return $this->ReplyForm($comment);
|
return $this->ReplyForm($comment);
|
||||||
@ -475,7 +485,12 @@ class CommentingController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function CommentsForm()
|
public function CommentsForm()
|
||||||
{
|
{
|
||||||
return Injector::inst()->create(CommentForm::class, __FUNCTION__, $this);
|
$form = Injector::inst()->create(CommentForm::class, __FUNCTION__, $this);
|
||||||
|
|
||||||
|
// hook to allow further extensions to alter the comments form
|
||||||
|
$this->extend('alterCommentForm', $form);
|
||||||
|
|
||||||
|
return $form;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -485,7 +500,7 @@ class CommentingController extends Controller
|
|||||||
public function redirectBack()
|
public function redirectBack()
|
||||||
{
|
{
|
||||||
// Don't cache the redirect back ever
|
// Don't cache the redirect back ever
|
||||||
HTTP::set_cache_age(0);
|
HTTPCacheControlMiddleware::singleton()->setMaxAge(0);
|
||||||
|
|
||||||
$url = null;
|
$url = null;
|
||||||
|
|
||||||
@ -512,8 +527,8 @@ class CommentingController extends Controller
|
|||||||
// absolute redirection URLs not located on this site may cause phishing
|
// absolute redirection URLs not located on this site may cause phishing
|
||||||
if (Director::is_site_url($url)) {
|
if (Director::is_site_url($url)) {
|
||||||
return $this->redirect($url);
|
return $this->redirect($url);
|
||||||
} else {
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -9,10 +9,7 @@ use SilverStripe\Comments\Controllers\CommentingController;
|
|||||||
use SilverStripe\Comments\Model\Comment;
|
use SilverStripe\Comments\Model\Comment;
|
||||||
use SilverStripe\Control\Controller;
|
use SilverStripe\Control\Controller;
|
||||||
use SilverStripe\Control\Director;
|
use SilverStripe\Control\Director;
|
||||||
use SilverStripe\Control\Session;
|
|
||||||
use SilverStripe\Core\Config\Config;
|
use SilverStripe\Core\Config\Config;
|
||||||
use SilverStripe\Core\Manifest\ModuleLoader;
|
|
||||||
use SilverStripe\Dev\Deprecation;
|
|
||||||
use SilverStripe\Forms\CheckboxField;
|
use SilverStripe\Forms\CheckboxField;
|
||||||
use SilverStripe\Forms\DropdownField;
|
use SilverStripe\Forms\DropdownField;
|
||||||
use SilverStripe\Forms\FieldGroup;
|
use SilverStripe\Forms\FieldGroup;
|
||||||
@ -20,9 +17,11 @@ use SilverStripe\Forms\FieldList;
|
|||||||
use SilverStripe\Forms\Tab;
|
use SilverStripe\Forms\Tab;
|
||||||
use SilverStripe\Forms\TabSet;
|
use SilverStripe\Forms\TabSet;
|
||||||
use SilverStripe\ORM\DataExtension;
|
use SilverStripe\ORM\DataExtension;
|
||||||
|
use SilverStripe\ORM\DataList;
|
||||||
use SilverStripe\ORM\PaginatedList;
|
use SilverStripe\ORM\PaginatedList;
|
||||||
use SilverStripe\Security\Member;
|
use SilverStripe\Security\Member;
|
||||||
use SilverStripe\Security\Permission;
|
use SilverStripe\Security\Permission;
|
||||||
|
use SilverStripe\Security\Security;
|
||||||
use SilverStripe\View\Requirements;
|
use SilverStripe\View\Requirements;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -157,13 +156,16 @@ class CommentsExtension extends DataExtension
|
|||||||
|
|
||||||
// Check if enabled setting should be cms configurable
|
// Check if enabled setting should be cms configurable
|
||||||
if ($this->owner->getCommentsOption('enabled_cms')) {
|
if ($this->owner->getCommentsOption('enabled_cms')) {
|
||||||
$options->push(new CheckboxField('ProvideComments', _t('SilverStripe\\Comments\\Model\\Comment.ALLOWCOMMENTS', 'Allow Comments')));
|
$options->push(CheckboxField::create('ProvideComments', _t(
|
||||||
|
'SilverStripe\\Comments\\Model\\Comment.ALLOWCOMMENTS',
|
||||||
|
'Allow comments'
|
||||||
|
)));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if we should require users to login to comment
|
// Check if we should require users to login to comment
|
||||||
if ($this->owner->getCommentsOption('require_login_cms')) {
|
if ($this->owner->getCommentsOption('require_login_cms')) {
|
||||||
$options->push(
|
$options->push(
|
||||||
new CheckboxField(
|
CheckboxField::create(
|
||||||
'CommentsRequireLogin',
|
'CommentsRequireLogin',
|
||||||
_t('Comments.COMMENTSREQUIRELOGIN', 'Require login to comment')
|
_t('Comments.COMMENTSREQUIRELOGIN', 'Require login to comment')
|
||||||
)
|
)
|
||||||
@ -180,16 +182,23 @@ class CommentsExtension extends DataExtension
|
|||||||
|
|
||||||
// Check if moderation should be enabled via cms configurable
|
// Check if moderation should be enabled via cms configurable
|
||||||
if ($this->owner->getCommentsOption('require_moderation_cms')) {
|
if ($this->owner->getCommentsOption('require_moderation_cms')) {
|
||||||
$moderationField = new DropdownField('ModerationRequired', _t(__CLASS__ . '.COMMENTMODERATION', 'Comment Moderation'), array(
|
$moderationField = DropdownField::create(
|
||||||
|
'ModerationRequired',
|
||||||
|
_t(
|
||||||
|
__CLASS__ . '.COMMENTMODERATION',
|
||||||
|
'Comment Moderation'
|
||||||
|
),
|
||||||
|
[
|
||||||
'None' => _t(__CLASS__ . '.MODERATIONREQUIRED_NONE', 'No moderation required'),
|
'None' => _t(__CLASS__ . '.MODERATIONREQUIRED_NONE', 'No moderation required'),
|
||||||
'Required' => _t(__CLASS__ . '.MODERATIONREQUIRED_REQUIRED', 'Moderate all comments'),
|
'Required' => _t(__CLASS__ . '.MODERATIONREQUIRED_REQUIRED', 'Moderate all comments'),
|
||||||
'NonMembersOnly' => _t(
|
'NonMembersOnly' => _t(
|
||||||
__CLASS__ . '.MODERATIONREQUIRED_NONMEMBERSONLY',
|
__CLASS__ . '.MODERATIONREQUIRED_NONMEMBERSONLY',
|
||||||
'Only moderate non-members'
|
'Only moderate non-members'
|
||||||
),
|
),
|
||||||
));
|
]
|
||||||
|
);
|
||||||
if ($fields->hasTabSet()) {
|
if ($fields->hasTabSet()) {
|
||||||
$fields->addFieldsToTab('Root.Settings', $moderationField);
|
$fields->addFieldToTab('Root.Settings', $moderationField);
|
||||||
} else {
|
} else {
|
||||||
$fields->push($moderationField);
|
$fields->push($moderationField);
|
||||||
}
|
}
|
||||||
@ -209,13 +218,17 @@ class CommentsExtension extends DataExtension
|
|||||||
{
|
{
|
||||||
if ($this->owner->getCommentsOption('require_moderation_cms')) {
|
if ($this->owner->getCommentsOption('require_moderation_cms')) {
|
||||||
return $this->owner->getField('ModerationRequired');
|
return $this->owner->getField('ModerationRequired');
|
||||||
} elseif ($this->owner->getCommentsOption('require_moderation')) {
|
|
||||||
return 'Required';
|
|
||||||
} elseif ($this->owner->getCommentsOption('require_moderation_nonmembers')) {
|
|
||||||
return 'NonMembersOnly';
|
|
||||||
} else {
|
|
||||||
return 'None';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($this->owner->getCommentsOption('require_moderation')) {
|
||||||
|
return 'Required';
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->owner->getCommentsOption('require_moderation_nonmembers')) {
|
||||||
|
return 'NonMembersOnly';
|
||||||
|
}
|
||||||
|
|
||||||
|
return 'None';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -227,9 +240,8 @@ class CommentsExtension extends DataExtension
|
|||||||
{
|
{
|
||||||
if ($this->owner->getCommentsOption('require_login_cms')) {
|
if ($this->owner->getCommentsOption('require_login_cms')) {
|
||||||
return (bool) $this->owner->getField('CommentsRequireLogin');
|
return (bool) $this->owner->getField('CommentsRequireLogin');
|
||||||
} else {
|
|
||||||
return (bool) $this->owner->getCommentsOption('require_login');
|
|
||||||
}
|
}
|
||||||
|
return (bool) $this->owner->getCommentsOption('require_login');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -242,7 +254,10 @@ class CommentsExtension extends DataExtension
|
|||||||
{
|
{
|
||||||
$order = $this->owner->getCommentsOption('order_comments_by');
|
$order = $this->owner->getCommentsOption('order_comments_by');
|
||||||
$comments = Comment::get()
|
$comments = Comment::get()
|
||||||
->filter('ParentID', $this->owner->ID)
|
->filter([
|
||||||
|
'ParentID' => $this->owner->ID,
|
||||||
|
'ParentClass' => $this->owner->ClassName,
|
||||||
|
])
|
||||||
->sort($order);
|
->sort($order);
|
||||||
$this->owner->extend('updateAllComments', $comments);
|
$this->owner->extend('updateAllComments', $comments);
|
||||||
return $comments;
|
return $comments;
|
||||||
@ -304,7 +319,7 @@ class CommentsExtension extends DataExtension
|
|||||||
$list = $this->Comments();
|
$list = $this->Comments();
|
||||||
|
|
||||||
// Add pagination
|
// Add pagination
|
||||||
$list = new PaginatedList($list, Controller::curr()->getRequest());
|
$list = PaginatedList::create($list, Controller::curr()->getRequest());
|
||||||
$list->setPaginationGetVar('commentsstart' . $this->owner->ID);
|
$list->setPaginationGetVar('commentsstart' . $this->owner->ID);
|
||||||
$list->setPageLength($this->owner->getCommentsOption('comments_per_page'));
|
$list->setPageLength($this->owner->getCommentsOption('comments_per_page'));
|
||||||
|
|
||||||
@ -378,7 +393,7 @@ class CommentsExtension extends DataExtension
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check member is logged in
|
// Check member is logged in
|
||||||
$member = $member ?: Member::currentUser();
|
$member = $member ?: Security::getCurrentUser();
|
||||||
if (!$member) {
|
if (!$member) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -429,7 +444,7 @@ class CommentsExtension extends DataExtension
|
|||||||
{
|
{
|
||||||
return Controller::join_links(
|
return Controller::join_links(
|
||||||
$this->getCommentRSSLink(),
|
$this->getCommentRSSLink(),
|
||||||
str_replace('\\', '-', $this->owner->baseClass()),
|
str_replace('\\', '-', get_class($this->owner)),
|
||||||
$this->owner->ID
|
$this->owner->ID
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -450,13 +465,11 @@ class CommentsExtension extends DataExtension
|
|||||||
// Check if enabled
|
// Check if enabled
|
||||||
$enabled = $this->getCommentsEnabled();
|
$enabled = $this->getCommentsEnabled();
|
||||||
if ($enabled && $this->owner->getCommentsOption('include_js')) {
|
if ($enabled && $this->owner->getCommentsOption('include_js')) {
|
||||||
Requirements::javascript('silverstripe/admin:thirdparty/jquery/jquery.js');
|
Requirements::javascript('silverstripe/comments:client/dist/js/jquery.min.js');
|
||||||
Requirements::javascript('silverstripe/admin:thirdparty/jquery-entwine/dist/jquery.entwine-dist.js');
|
Requirements::javascript('silverstripe/comments:client/dist/js/jquery-validation/jquery.validate.min.js');
|
||||||
Requirements::javascript('silverstripe/admin:thirdparty/jquery-form/jquery.form.js');
|
|
||||||
Requirements::javascript('silverstripe/comments:thirdparty/jquery-validate/jquery.validate.min.js');
|
|
||||||
Requirements::javascript('silverstripe/admin:client/dist/js/i18n.js');
|
Requirements::javascript('silverstripe/admin:client/dist/js/i18n.js');
|
||||||
Requirements::add_i18n_javascript('silverstripe/comments:javascript/lang');
|
Requirements::add_i18n_javascript('silverstripe/comments:client/lang');
|
||||||
Requirements::javascript('silverstripe/comments:javascript/CommentsInterface.js');
|
Requirements::javascript('silverstripe/comments:client/dist/js/CommentsInterface.js');
|
||||||
}
|
}
|
||||||
|
|
||||||
$controller = CommentingController::create();
|
$controller = CommentingController::create();
|
||||||
@ -474,10 +487,10 @@ class CommentsExtension extends DataExtension
|
|||||||
// return back the same variables as previously done in comments
|
// return back the same variables as previously done in comments
|
||||||
return $this
|
return $this
|
||||||
->owner
|
->owner
|
||||||
->customise(array(
|
->customise([
|
||||||
'AddCommentForm' => $form,
|
'AddCommentForm' => $form,
|
||||||
'ModeratedSubmitted' => $moderatedSubmitted,
|
'ModeratedSubmitted' => $moderatedSubmitted,
|
||||||
))
|
])
|
||||||
->renderWith('CommentsInterface');
|
->renderWith('CommentsInterface');
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -525,8 +538,6 @@ class CommentsExtension extends DataExtension
|
|||||||
*/
|
*/
|
||||||
public function getCommentsOptions()
|
public function getCommentsOptions()
|
||||||
{
|
{
|
||||||
$settings = [];
|
|
||||||
|
|
||||||
if ($this->owner) {
|
if ($this->owner) {
|
||||||
$settings = $this->owner->config()->get('comments');
|
$settings = $this->owner->config()->get('comments');
|
||||||
} else {
|
} else {
|
||||||
@ -543,11 +554,11 @@ class CommentsExtension extends DataExtension
|
|||||||
*/
|
*/
|
||||||
protected function updateModerationFields(FieldList $fields)
|
protected function updateModerationFields(FieldList $fields)
|
||||||
{
|
{
|
||||||
Requirements::css('silverstripe/comments:css/cms.css');
|
Requirements::css('silverstripe/comments:client/dist/styles/cms.css');
|
||||||
|
|
||||||
$newComments = $this->owner->AllComments()->filter('Moderated', 0);
|
$newComments = $this->owner->AllComments()->filter('Moderated', 0);
|
||||||
|
|
||||||
$newGrid = new CommentsGridField(
|
$newGrid = CommentsGridField::create(
|
||||||
'NewComments',
|
'NewComments',
|
||||||
_t('CommentsAdmin.NewComments', 'New'),
|
_t('CommentsAdmin.NewComments', 'New'),
|
||||||
$newComments,
|
$newComments,
|
||||||
@ -565,31 +576,31 @@ class CommentsExtension extends DataExtension
|
|||||||
|
|
||||||
$spamComments = $this->owner->AllComments()->filter('Moderated', 1)->filter('IsSpam', 1);
|
$spamComments = $this->owner->AllComments()->filter('Moderated', 1)->filter('IsSpam', 1);
|
||||||
|
|
||||||
$spamGrid = new CommentsGridField(
|
$spamGrid = CommentsGridField::create(
|
||||||
'SpamComments',
|
'SpamComments',
|
||||||
_t('CommentsAdmin.SpamComments', 'Spam'),
|
_t('CommentsAdmin.SpamComments', 'Spam'),
|
||||||
$spamComments,
|
$spamComments,
|
||||||
CommentsGridFieldConfig::create()
|
CommentsGridFieldConfig::create()
|
||||||
);
|
);
|
||||||
|
|
||||||
$newCount = '(' . count($newComments) . ')';
|
$newCount = '(' . count($newComments ?? []) . ')';
|
||||||
$approvedCount = '(' . count($approvedComments) . ')';
|
$approvedCount = '(' . count($approvedComments ?? []) . ')';
|
||||||
$spamCount = '(' . count($spamComments) . ')';
|
$spamCount = '(' . count($spamComments ?? []) . ')';
|
||||||
|
|
||||||
if ($fields->hasTabSet()) {
|
if ($fields->hasTabSet()) {
|
||||||
$tabs = new TabSet(
|
$tabs = TabSet::create(
|
||||||
'Comments',
|
'Comments',
|
||||||
new Tab(
|
Tab::create(
|
||||||
'CommentsNewCommentsTab',
|
'CommentsNewCommentsTab',
|
||||||
_t('SilverStripe\\Comments\\Admin\\CommentAdmin.NewComments', 'New') . ' ' . $newCount,
|
_t('SilverStripe\\Comments\\Admin\\CommentAdmin.NewComments', 'New') . ' ' . $newCount,
|
||||||
$newGrid
|
$newGrid
|
||||||
),
|
),
|
||||||
new Tab(
|
Tab::create(
|
||||||
'CommentsCommentsTab',
|
'CommentsCommentsTab',
|
||||||
_t('SilverStripe\\Comments\\Admin\\CommentAdmin.Comments', 'Approved') . ' ' . $approvedCount,
|
_t('SilverStripe\\Comments\\Admin\\CommentAdmin.Comments', 'Approved') . ' ' . $approvedCount,
|
||||||
$approvedGrid
|
$approvedGrid
|
||||||
),
|
),
|
||||||
new Tab(
|
Tab::create(
|
||||||
'CommentsSpamCommentsTab',
|
'CommentsSpamCommentsTab',
|
||||||
_t('SilverStripe\\Comments\\Admin\\CommentAdmin.SpamComments', 'Spam') . ' ' . $spamCount,
|
_t('SilverStripe\\Comments\\Admin\\CommentAdmin.SpamComments', 'Spam') . ' ' . $spamCount,
|
||||||
$spamGrid
|
$spamGrid
|
||||||
|
@ -2,6 +2,11 @@
|
|||||||
|
|
||||||
namespace SilverStripe\Comments\Forms;
|
namespace SilverStripe\Comments\Forms;
|
||||||
|
|
||||||
|
use SilverStripe\Comments\Controllers\CommentingController;
|
||||||
|
use SilverStripe\Comments\Model\Comment;
|
||||||
|
use SilverStripe\Control\Controller;
|
||||||
|
use SilverStripe\Control\HTTPResponse;
|
||||||
|
use SilverStripe\Core\Convert;
|
||||||
use SilverStripe\Forms\CompositeField;
|
use SilverStripe\Forms\CompositeField;
|
||||||
use SilverStripe\Forms\EmailField;
|
use SilverStripe\Forms\EmailField;
|
||||||
use SilverStripe\Forms\FieldList;
|
use SilverStripe\Forms\FieldList;
|
||||||
@ -12,14 +17,7 @@ use SilverStripe\Forms\ReadonlyField;
|
|||||||
use SilverStripe\Forms\RequiredFields;
|
use SilverStripe\Forms\RequiredFields;
|
||||||
use SilverStripe\Forms\TextareaField;
|
use SilverStripe\Forms\TextareaField;
|
||||||
use SilverStripe\Forms\TextField;
|
use SilverStripe\Forms\TextField;
|
||||||
use SilverStripe\Security\Member;
|
|
||||||
use SilverStripe\Control\Cookie;
|
|
||||||
use SilverStripe\Core\Convert;
|
|
||||||
use SilverStripe\Security\Security;
|
use SilverStripe\Security\Security;
|
||||||
use SilverStripe\Comments\Model\Comment;
|
|
||||||
use SilverStripe\Control\Controller;
|
|
||||||
use SilverStripe\Comments\Controllers\CommentingController;
|
|
||||||
use SilverStripe\Core\Config\Config;
|
|
||||||
|
|
||||||
class CommentForm extends Form
|
class CommentForm extends Form
|
||||||
{
|
{
|
||||||
@ -45,18 +43,27 @@ class CommentForm extends Form
|
|||||||
// Email
|
// Email
|
||||||
EmailField::create(
|
EmailField::create(
|
||||||
'Email',
|
'Email',
|
||||||
_t('SilverStripe\\Comments\\Controllers\\CommentingController.EMAILADDRESS', 'Your email address (will not be published)')
|
_t(
|
||||||
|
'SilverStripe\\Comments\\Controllers\\CommentingController.EMAILADDRESS',
|
||||||
|
'Your email address (will not be published)'
|
||||||
|
)
|
||||||
)
|
)
|
||||||
->setCustomValidationMessage($emailRequired)
|
->setCustomValidationMessage($emailRequired)
|
||||||
->setAttribute('data-msg-required', $emailRequired)
|
->setAttribute('data-msg-required', $emailRequired)
|
||||||
->setAttribute('data-msg-email', $emailInvalid)
|
->setAttribute('data-msg-email', $emailInvalid)
|
||||||
->setAttribute('data-rule-email', true),
|
->setAttribute('data-rule-email', true),
|
||||||
// Url
|
// Url
|
||||||
TextField::create('URL', _t('SilverStripe\\Comments\\Controllers\\CommentingController.WEBSITEURL', 'Your website URL'))
|
TextField::create('URL', _t(
|
||||||
|
'SilverStripe\\Comments\\Controllers\\CommentingController.WEBSITEURL',
|
||||||
|
'Your website URL'
|
||||||
|
))
|
||||||
->setAttribute('data-msg-url', $urlInvalid)
|
->setAttribute('data-msg-url', $urlInvalid)
|
||||||
->setAttribute('data-rule-url', true),
|
->setAttribute('data-rule-url', true),
|
||||||
// Comment
|
// Comment
|
||||||
TextareaField::create('Comment', _t('SilverStripe\\Comments\\Controllers\\CommentingController.COMMENTS', 'Comments'))
|
TextareaField::create('Comment', _t(
|
||||||
|
'SilverStripe\\Comments\\Controllers\\CommentingController.COMMENTS',
|
||||||
|
'Comments'
|
||||||
|
))
|
||||||
->setCustomValidationMessage($commentRequired)
|
->setCustomValidationMessage($commentRequired)
|
||||||
->setAttribute('data-msg-required', $commentRequired)
|
->setAttribute('data-msg-required', $commentRequired)
|
||||||
),
|
),
|
||||||
@ -70,9 +77,9 @@ class CommentForm extends Form
|
|||||||
// limited HTML is allowed. Populated by JS/Ajax.
|
// limited HTML is allowed. Populated by JS/Ajax.
|
||||||
if ($usePreview) {
|
if ($usePreview) {
|
||||||
$fields->insertAfter(
|
$fields->insertAfter(
|
||||||
|
'Comment',
|
||||||
ReadonlyField::create('PreviewComment', _t('CommentInterface.PREVIEWLABEL', 'Preview'))
|
ReadonlyField::create('PreviewComment', _t('CommentInterface.PREVIEWLABEL', 'Preview'))
|
||||||
->setAttribute('style', 'display: none'), // enable through JS
|
->setAttribute('style', 'display: none') // enable through JS
|
||||||
'Comment'
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,7 +98,7 @@ class CommentForm extends Form
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
$required = new RequiredFields(
|
$required = RequiredFields::create(
|
||||||
$controller->config()->required_fields
|
$controller->config()->required_fields
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -101,55 +108,59 @@ class CommentForm extends Form
|
|||||||
// if the record exists load the extra required data
|
// if the record exists load the extra required data
|
||||||
if ($record = $controller->getOwnerRecord()) {
|
if ($record = $controller->getOwnerRecord()) {
|
||||||
// Load member data
|
// Load member data
|
||||||
$member = Member::currentUser();
|
$member = Security::getCurrentUser();
|
||||||
if (($record->CommentsRequireLogin || $record->PostingRequiredPermission) && $member) {
|
if (($record->CommentsRequireLogin || $record->PostingRequiredPermission) && $member) {
|
||||||
$fields = $this->Fields();
|
$fields = $this->Fields();
|
||||||
|
|
||||||
$fields->removeByName('Name');
|
$fields->removeByName('Name');
|
||||||
$fields->removeByName('Email');
|
$fields->removeByName('Email');
|
||||||
$fields->insertBefore(
|
$fields->insertBefore(
|
||||||
new ReadonlyField(
|
ReadonlyField::create(
|
||||||
'NameView',
|
'NameView',
|
||||||
_t('CommentInterface.YOURNAME', 'Your name'),
|
_t('CommentInterface.YOURNAME', 'Your name'),
|
||||||
$member->getName()
|
$member->getName()
|
||||||
),
|
),
|
||||||
'URL'
|
'URL'
|
||||||
);
|
);
|
||||||
$fields->push(new HiddenField('Name', '', $member->getName()));
|
$fields->push(HiddenField::create('Name', '', $member->getName()));
|
||||||
$fields->push(new HiddenField('Email', '', $member->Email));
|
$fields->push(HiddenField::create('Email', '', $member->Email));
|
||||||
}
|
}
|
||||||
|
|
||||||
// we do not want to read a new URL when the form has already been submitted
|
// we do not want to read a new URL when the form has already been submitted
|
||||||
// which in here, it hasn't been.
|
// which in here, it hasn't been.
|
||||||
$this->loadDataFrom(array(
|
$this->loadDataFrom([
|
||||||
'ParentID' => $record->ID,
|
'ParentID' => $record->ID,
|
||||||
'ReturnURL' => $controller->getRequest()->getURL(),
|
'ReturnURL' => $controller->getRequest()->getURL(),
|
||||||
'ParentClassName' => $controller->getParentClass()
|
'ParentClassName' => $controller->getParentClass()
|
||||||
));
|
]);
|
||||||
|
|
||||||
if ($holder = $record->getCommentHolderID()) {
|
|
||||||
$this->setHTMLID($holder);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set it so the user gets redirected back down to the form upon form fail
|
// Set it so the user gets redirected back down to the form upon form fail
|
||||||
$this->setRedirectToFormOnValidationError(true);
|
$this->setRedirectToFormOnValidationError(true);
|
||||||
|
|
||||||
// load any data from the cookies
|
// load any data from the session
|
||||||
if ($data = Cookie::get('CommentsForm_UserData')) {
|
$data = $this->getSessionData();
|
||||||
$data = Convert::json2array($data);
|
if (!is_array($data)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
$this->loadDataFrom(array(
|
// load user data from previous form request back into form.
|
||||||
'Name' => isset($data['Name']) ? $data['Name'] : '',
|
if (array_key_exists('UserData', $data ?? [])) {
|
||||||
'URL' => isset($data['URL']) ? $data['URL'] : '',
|
$formData = json_decode($data['UserData'] ?? '', true);
|
||||||
'Email' => isset($data['Email']) ? $data['Email'] : ''
|
|
||||||
));
|
|
||||||
|
|
||||||
// allow previous value to fill if comment not stored in cookie (i.e. validation error)
|
$this->loadDataFrom([
|
||||||
$prevComment = Cookie::get('CommentsForm_Comment');
|
'Name' => isset($formData['Name']) ? $formData['Name'] : '',
|
||||||
|
'URL' => isset($formData['URL']) ? $formData['URL'] : '',
|
||||||
|
'Email' => isset($formData['Email']) ? $formData['Email'] : ''
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// allow previous value to fill if comment
|
||||||
|
if (array_key_exists('Comment', $data ?? [])) {
|
||||||
|
$prevComment = $data['Comment'];
|
||||||
|
|
||||||
if ($prevComment && $prevComment != '') {
|
if ($prevComment && $prevComment != '') {
|
||||||
$this->loadDataFrom(array('Comment' => $prevComment));
|
$this->loadDataFrom(['Comment' => $prevComment]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -183,12 +194,14 @@ class CommentForm extends Form
|
|||||||
$this->controller->setOwnerRecord($class::get()->byID($data['ParentID']));
|
$this->controller->setOwnerRecord($class::get()->byID($data['ParentID']));
|
||||||
}
|
}
|
||||||
if (!$this->controller->getOwnerRecord()) {
|
if (!$this->controller->getOwnerRecord()) {
|
||||||
return $this->httpError(404);
|
return $this->getRequestHandler()->httpError(404);
|
||||||
}
|
}
|
||||||
|
|
||||||
// cache users data
|
// cache users data
|
||||||
Cookie::set('CommentsForm_UserData', Convert::raw2json($data));
|
$form->setSessionData([
|
||||||
Cookie::set('CommentsForm_Comment', $data['Comment']);
|
'UserData' => json_encode($data),
|
||||||
|
'Comment' => $data['Comment']
|
||||||
|
]);
|
||||||
|
|
||||||
// extend hook to allow extensions. Also see onAfterPostComment
|
// extend hook to allow extensions. Also see onAfterPostComment
|
||||||
$this->controller->extend('onBeforePostComment', $form);
|
$this->controller->extend('onBeforePostComment', $form);
|
||||||
@ -196,7 +209,7 @@ class CommentForm extends Form
|
|||||||
// If commenting can only be done by logged in users, make sure the user is logged in
|
// If commenting can only be done by logged in users, make sure the user is logged in
|
||||||
if (!$this->controller->getOwnerRecord()->canPostComment()) {
|
if (!$this->controller->getOwnerRecord()->canPostComment()) {
|
||||||
return Security::permissionFailure(
|
return Security::permissionFailure(
|
||||||
$this,
|
$this->controller,
|
||||||
_t(
|
_t(
|
||||||
'SilverStripe\\Comments\\Controllers\\CommentingController.PERMISSIONFAILURE',
|
'SilverStripe\\Comments\\Controllers\\CommentingController.PERMISSIONFAILURE',
|
||||||
"You're not able to post comments to this page. Please ensure you are logged in and have an "
|
"You're not able to post comments to this page. Please ensure you are logged in and have an "
|
||||||
@ -206,7 +219,7 @@ class CommentForm extends Form
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($member = Security::getCurrentUser()) {
|
if ($member = Security::getCurrentUser()) {
|
||||||
$form->Fields()->push(new HiddenField('AuthorID', 'Author ID', $member->ID));
|
$form->Fields()->push(HiddenField::create('AuthorID', 'Author ID', $member->ID));
|
||||||
}
|
}
|
||||||
|
|
||||||
// What kind of moderation is required?
|
// What kind of moderation is required?
|
||||||
@ -246,11 +259,19 @@ class CommentForm extends Form
|
|||||||
|
|
||||||
// we want to show a notification if comments are moderated
|
// we want to show a notification if comments are moderated
|
||||||
if ($requireModeration && !$comment->IsSpam) {
|
if ($requireModeration && !$comment->IsSpam) {
|
||||||
Session::set('CommentsModerated', 1);
|
$this->getRequest()->getSession()->set('CommentsModerated', 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// clear the users comment since it passed validation
|
// clear the users comment since the comment was successful.
|
||||||
Cookie::set('CommentsForm_Comment', false);
|
if ($comment->exists()) {
|
||||||
|
// Remove the comment data as it's been saved already.
|
||||||
|
unset($data['Comment']);
|
||||||
|
}
|
||||||
|
|
||||||
|
// cache users data (name, email, etc to prepopulate on other forms).
|
||||||
|
$form->setSessionData([
|
||||||
|
'UserData' => json_encode($data),
|
||||||
|
]);
|
||||||
|
|
||||||
// Find parent link
|
// Find parent link
|
||||||
if (!empty($data['ReturnURL'])) {
|
if (!empty($data['ReturnURL'])) {
|
||||||
|
@ -2,31 +2,33 @@
|
|||||||
|
|
||||||
namespace SilverStripe\Comments\Model;
|
namespace SilverStripe\Comments\Model;
|
||||||
|
|
||||||
use HTMLPurifier_Config;
|
use SilverStripe\Dev\Deprecation;
|
||||||
use HTMLPurifier;
|
use HTMLPurifier;
|
||||||
|
use HTMLPurifier_Config;
|
||||||
use SilverStripe\Comments\Controllers\CommentingController;
|
use SilverStripe\Comments\Controllers\CommentingController;
|
||||||
use SilverStripe\Comments\Extensions\CommentsExtension;
|
use SilverStripe\Comments\Extensions\CommentsExtension;
|
||||||
use SilverStripe\Comments\Model\Comment\SecurityToken;
|
use SilverStripe\Comments\Model\Comment\SecurityToken;
|
||||||
use SilverStripe\Control\Controller;
|
use SilverStripe\Control\Controller;
|
||||||
use SilverStripe\Control\Director;
|
use SilverStripe\Control\Director;
|
||||||
use SilverStripe\Core\Email\Email;
|
|
||||||
use SilverStripe\Core\Injector\Injector;
|
use SilverStripe\Core\Injector\Injector;
|
||||||
use SilverStripe\Core\TempFolder;
|
use SilverStripe\Core\TempFolder;
|
||||||
use SilverStripe\Forms\CheckboxField;
|
use SilverStripe\Forms\CheckboxField;
|
||||||
use SilverStripe\Forms\EmailField;
|
use SilverStripe\Forms\EmailField;
|
||||||
use SilverStripe\Forms\FieldGroup;
|
use SilverStripe\Forms\FieldGroup;
|
||||||
use SilverStripe\Forms\FieldList;
|
use SilverStripe\Forms\FieldList;
|
||||||
|
use SilverStripe\Forms\Form;
|
||||||
use SilverStripe\Forms\HeaderField;
|
use SilverStripe\Forms\HeaderField;
|
||||||
use SilverStripe\Forms\HTMLEditor\HTMLEditorField;
|
use SilverStripe\Forms\HTMLEditor\HTMLEditorField;
|
||||||
use SilverStripe\Forms\TextareaField;
|
use SilverStripe\Forms\TextareaField;
|
||||||
use SilverStripe\Forms\TextField;
|
use SilverStripe\Forms\TextField;
|
||||||
use SilverStripe\ORM\ArrayList;
|
use SilverStripe\ORM\ArrayList;
|
||||||
use SilverStripe\ORM\DataObject;
|
use SilverStripe\ORM\DataObject;
|
||||||
use SilverStripe\ORM\DB;
|
use SilverStripe\ORM\FieldType\DBDatetime;
|
||||||
use SilverStripe\ORM\PaginatedList;
|
use SilverStripe\ORM\PaginatedList;
|
||||||
|
use SilverStripe\ORM\SS_List;
|
||||||
use SilverStripe\Security\Member;
|
use SilverStripe\Security\Member;
|
||||||
use SilverStripe\Security\Permission;
|
use SilverStripe\Security\Permission;
|
||||||
use SilverStripe\CMS\Model\SiteTree;
|
use SilverStripe\Security\Security;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a single comment object.
|
* Represents a single comment object.
|
||||||
@ -104,6 +106,7 @@ class Comment extends DataObject
|
|||||||
'AuthorName' => 'Varchar',
|
'AuthorName' => 'Varchar',
|
||||||
'RSSName' => 'Varchar',
|
'RSSName' => 'Varchar',
|
||||||
'DeleteLink' => 'Varchar',
|
'DeleteLink' => 'Varchar',
|
||||||
|
'Date' => 'Datetime',
|
||||||
'SpamLink' => 'Varchar',
|
'SpamLink' => 'Varchar',
|
||||||
'HamLink' => 'Varchar',
|
'HamLink' => 'Varchar',
|
||||||
'ApproveLink' => 'Varchar',
|
'ApproveLink' => 'Varchar',
|
||||||
@ -124,8 +127,8 @@ class Comment extends DataObject
|
|||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
private static $summary_fields = array(
|
private static $summary_fields = array(
|
||||||
'Name' => 'Submitted By',
|
'getAuthorName' => 'Submitted By',
|
||||||
'Email' => 'Email',
|
'getAuthorEmail' => 'Email',
|
||||||
'Comment.LimitWordCount' => 'Comment',
|
'Comment.LimitWordCount' => 'Comment',
|
||||||
'Created' => 'Date Posted',
|
'Created' => 'Date Posted',
|
||||||
'Parent.Title' => 'Post',
|
'Parent.Title' => 'Post',
|
||||||
@ -218,14 +221,14 @@ class Comment extends DataObject
|
|||||||
{
|
{
|
||||||
$labels = parent::fieldLabels($includerelations);
|
$labels = parent::fieldLabels($includerelations);
|
||||||
|
|
||||||
$labels['Name'] = _t('SilverStripe\\Comments\\Model\\Comment.NAME', 'Author Name');
|
$labels['Name'] = _t(__CLASS__ . '.NAME', 'Author name');
|
||||||
$labels['Comment'] = _t('SilverStripe\\Comments\\Model\\Comment.COMMENT', 'Comment');
|
$labels['Comment'] = _t(__CLASS__ . '.COMMENT', 'Comment');
|
||||||
$labels['Email'] = _t('SilverStripe\\Comments\\Model\\Comment.EMAIL', 'Email');
|
$labels['Email'] = _t(__CLASS__ . '.EMAIL', 'Email');
|
||||||
$labels['URL'] = _t('SilverStripe\\Comments\\Model\\Comment.URL', 'URL');
|
$labels['URL'] = _t(__CLASS__ . '.URL', 'URL');
|
||||||
$labels['IsSpam'] = _t('SilverStripe\\Comments\\Model\\Comment.ISSPAM', 'Spam?');
|
$labels['IsSpam'] = _t(__CLASS__ . '.ISSPAM', 'Spam?');
|
||||||
$labels['Moderated'] = _t('SilverStripe\\Comments\\Model\\Comment.MODERATED', 'Moderated?');
|
$labels['Moderated'] = _t(__CLASS__ . '.MODERATED', 'Moderated?');
|
||||||
$labels['ParentTitle'] = _t('SilverStripe\\Comments\\Model\\Comment.PARENTTITLE', 'Parent');
|
$labels['ParentTitle'] = _t(__CLASS__ . '.PARENTTITLE', 'Parent');
|
||||||
$labels['Created'] = _t('SilverStripe\\Comments\\Model\\Comment.CREATED', 'Date posted');
|
$labels['Created'] = _t(__CLASS__ . '.CREATED', 'Date posted');
|
||||||
|
|
||||||
return $labels;
|
return $labels;
|
||||||
}
|
}
|
||||||
@ -263,6 +266,12 @@ class Comment extends DataObject
|
|||||||
*/
|
*/
|
||||||
public function getParent()
|
public function getParent()
|
||||||
{
|
{
|
||||||
|
// this is wrapped in withNoReplacement() because it's called by ViewableData::__get()
|
||||||
|
// which looks for a `"get$property"` method, which itself is called by
|
||||||
|
// AssetControllExtension::findAssets()
|
||||||
|
Deprecation::withNoReplacement(function () {
|
||||||
|
Deprecation::notice('4.0.0', 'Use $this->Parent() instead');
|
||||||
|
});
|
||||||
return $this->BaseClass && $this->ParentID
|
return $this->BaseClass && $this->ParentID
|
||||||
? DataObject::get_by_id($this->BaseClass, $this->ParentID, true)
|
? DataObject::get_by_id($this->BaseClass, $this->ParentID, true)
|
||||||
: null;
|
: null;
|
||||||
@ -425,7 +434,7 @@ class Comment extends DataObject
|
|||||||
protected function getMember($member = null)
|
protected function getMember($member = null)
|
||||||
{
|
{
|
||||||
if (!$member) {
|
if (!$member) {
|
||||||
$member = Member::currentUser();
|
$member = Security::getCurrentUser();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_numeric($member)) {
|
if (is_numeric($member)) {
|
||||||
@ -449,6 +458,20 @@ class Comment extends DataObject
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the comment authors email address
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getAuthorEmail()
|
||||||
|
{
|
||||||
|
if ($this->Email) {
|
||||||
|
return $this->Email;
|
||||||
|
} elseif ($author = $this->Author()) {
|
||||||
|
return $author->Email;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generate a secure admin-action link authorised for the specified member
|
* Generate a secure admin-action link authorised for the specified member
|
||||||
*
|
*
|
||||||
@ -460,7 +483,7 @@ class Comment extends DataObject
|
|||||||
protected function actionLink($action, $member = null)
|
protected function actionLink($action, $member = null)
|
||||||
{
|
{
|
||||||
if (!$member) {
|
if (!$member) {
|
||||||
$member = Member::currentUser();
|
$member = Security::getCurrentUser();
|
||||||
}
|
}
|
||||||
if (!$member) {
|
if (!$member) {
|
||||||
return false;
|
return false;
|
||||||
@ -593,11 +616,11 @@ class Comment extends DataObject
|
|||||||
*/
|
*/
|
||||||
public function getTitle()
|
public function getTitle()
|
||||||
{
|
{
|
||||||
$title = sprintf(_t('SilverStripe\\Comments\\Model\\Comment.COMMENTBY', 'Comment by %s', 'Name'), $this->getAuthorName());
|
$title = sprintf(_t(__CLASS__ . '.COMMENTBY', 'Comment by %s', 'Name') ?? '', $this->getAuthorName());
|
||||||
|
|
||||||
if ($parent = $this->Parent()) {
|
if ($parent = $this->Parent()) {
|
||||||
if ($parent->Title) {
|
if ($parent->Title) {
|
||||||
$title .= sprintf(' %s %s', _t('SilverStripe\\Comments\\Model\\Comment.ON', 'on'), $parent->Title);
|
$title .= sprintf(' %s %s', _t(__CLASS__ . '.ON', 'on'), $parent->Title);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -623,9 +646,9 @@ class Comment extends DataObject
|
|||||||
CheckboxField::create('Moderated', $this->fieldLabel('Moderated')),
|
CheckboxField::create('Moderated', $this->fieldLabel('Moderated')),
|
||||||
CheckboxField::create('IsSpam', $this->fieldLabel('IsSpam')),
|
CheckboxField::create('IsSpam', $this->fieldLabel('IsSpam')),
|
||||||
))
|
))
|
||||||
->setTitle(_t('SilverStripe\\Comments\\Model\\Comment.OPTIONS', 'Options'))
|
->setTitle(_t(__CLASS__ . '.OPTIONS', 'Options'))
|
||||||
->setDescription(_t(
|
->setDescription(_t(
|
||||||
'SilverStripe\\Comments\\Model\\Comment.OPTION_DESCRIPTION',
|
__CLASS__ . '.OPTION_DESCRIPTION',
|
||||||
'Unmoderated and spam comments will not be displayed until approved'
|
'Unmoderated and spam comments will not be displayed until approved'
|
||||||
))
|
))
|
||||||
);
|
);
|
||||||
@ -633,9 +656,9 @@ class Comment extends DataObject
|
|||||||
// Show member name if given
|
// Show member name if given
|
||||||
if (($author = $this->Author()) && $author->exists()) {
|
if (($author = $this->Author()) && $author->exists()) {
|
||||||
$fields->insertAfter(
|
$fields->insertAfter(
|
||||||
|
'Name',
|
||||||
TextField::create('AuthorMember', $this->fieldLabel('Author'), $author->Title)
|
TextField::create('AuthorMember', $this->fieldLabel('Author'), $author->Title)
|
||||||
->performReadonlyTransformation(),
|
->performReadonlyTransformation()
|
||||||
'Name'
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -643,7 +666,7 @@ class Comment extends DataObject
|
|||||||
if (($parent = $this->ParentComment()) && $parent->exists()) {
|
if (($parent = $this->ParentComment()) && $parent->exists()) {
|
||||||
$fields->push(new HeaderField(
|
$fields->push(new HeaderField(
|
||||||
'ParentComment_Title',
|
'ParentComment_Title',
|
||||||
_t('SilverStripe\\Comments\\Model\\Comment.ParentComment_Title', 'This comment is a reply to the below')
|
_t(__CLASS__ . '.ParentComment_Title', 'This comment is a reply to the below')
|
||||||
));
|
));
|
||||||
// Created date
|
// Created date
|
||||||
// FIXME - the method setName in DatetimeField is not chainable, hence
|
// FIXME - the method setName in DatetimeField is not chainable, hence
|
||||||
@ -711,7 +734,7 @@ class Comment extends DataObject
|
|||||||
}
|
}
|
||||||
|
|
||||||
// This injector cannot be set unless the 'p' element is allowed
|
// This injector cannot be set unless the 'p' element is allowed
|
||||||
if (in_array('p', $allowedElements)) {
|
if (in_array('p', $allowedElements ?? [])) {
|
||||||
$config->set('AutoFormat.AutoParagraph', true);
|
$config->set('AutoFormat.AutoParagraph', true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -732,11 +755,15 @@ class Comment extends DataObject
|
|||||||
$use_gravatar = $this->getOption('use_gravatar');
|
$use_gravatar = $this->getOption('use_gravatar');
|
||||||
|
|
||||||
if ($use_gravatar) {
|
if ($use_gravatar) {
|
||||||
$gravatar = 'http://www.gravatar.com/avatar/' . md5(strtolower(trim($this->Email)));
|
$gravatar = 'https://www.gravatar.com/avatar/' . md5(strtolower(trim($this->Email ?? '')));
|
||||||
$gravatarsize = $this->getOption('gravatar_size');
|
$gravatarsize = $this->getOption('gravatar_size');
|
||||||
$gravatardefault = $this->getOption('gravatar_default');
|
$gravatardefault = $this->getOption('gravatar_default');
|
||||||
$gravatarrating = $this->getOption('gravatar_rating');
|
$gravatarrating = $this->getOption('gravatar_rating');
|
||||||
$gravatar .= '?s=' . $gravatarsize . '&d=' . $gravatardefault . '&r=' . $gravatarrating;
|
$gravatar .= '?' . http_build_query(array(
|
||||||
|
's' => $gravatarsize,
|
||||||
|
'd' => $gravatardefault,
|
||||||
|
'r' => $gravatarrating,
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
return $gravatar;
|
return $gravatar;
|
||||||
@ -760,6 +787,20 @@ class Comment extends DataObject
|
|||||||
return $notSpam && (!$maxLevel || $this->Depth < $maxLevel);
|
return $notSpam && (!$maxLevel || $this->Depth < $maxLevel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Proxy for checking whether the has permission to comment on the comment parent.
|
||||||
|
*
|
||||||
|
* @param Member $member Member to check
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
public function canPostComment($member = null)
|
||||||
|
{
|
||||||
|
return $this->Parent()
|
||||||
|
&& $this->Parent()->exists()
|
||||||
|
&& $this->Parent()->canPostComment($member);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the list of all replies
|
* Returns the list of all replies
|
||||||
*
|
*
|
||||||
@ -861,6 +902,14 @@ class Comment extends DataObject
|
|||||||
return $controller->ReplyForm($this);
|
return $controller->ReplyForm($this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getDate()
|
||||||
|
{
|
||||||
|
return $this->Created;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Refresh of this comment in the hierarchy
|
* Refresh of this comment in the hierarchy
|
||||||
*/
|
*/
|
||||||
|
@ -5,6 +5,7 @@ namespace SilverStripe\Comments\Model\Comment;
|
|||||||
use SilverStripe\Control\Controller;
|
use SilverStripe\Control\Controller;
|
||||||
use SilverStripe\Security\Member;
|
use SilverStripe\Security\Member;
|
||||||
use SilverStripe\Security\RandomGenerator;
|
use SilverStripe\Security\RandomGenerator;
|
||||||
|
use SilverStripe\Security\Security;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides the ability to generate cryptographically secure tokens for comment moderation
|
* Provides the ability to generate cryptographically secure tokens for comment moderation
|
||||||
@ -37,7 +38,7 @@ class SecurityToken
|
|||||||
*/
|
*/
|
||||||
protected function getToken($salt)
|
protected function getToken($salt)
|
||||||
{
|
{
|
||||||
return hash_pbkdf2('sha256', $this->secret, $salt, 1000, 30);
|
return hash_pbkdf2('sha256', $this->secret ?? '', $salt ?? '', 1000, 30);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -74,8 +75,8 @@ class SecurityToken
|
|||||||
$url,
|
$url,
|
||||||
sprintf(
|
sprintf(
|
||||||
'?t=%s&s=%s',
|
'?t=%s&s=%s',
|
||||||
urlencode($token),
|
urlencode($token ?? ''),
|
||||||
urlencode($salt)
|
urlencode($salt ?? '')
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -87,7 +88,7 @@ class SecurityToken
|
|||||||
*/
|
*/
|
||||||
public function checkRequest($request)
|
public function checkRequest($request)
|
||||||
{
|
{
|
||||||
$member = Member::currentUser();
|
$member = Security::getCurrentUser();
|
||||||
if (!$member) {
|
if (!$member) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -113,7 +114,7 @@ class SecurityToken
|
|||||||
$generator = new RandomGenerator();
|
$generator = new RandomGenerator();
|
||||||
$result = $generator->randomToken('sha256');
|
$result = $generator->randomToken('sha256');
|
||||||
if ($length !== null) {
|
if ($length !== null) {
|
||||||
return substr($result, 0, $length);
|
return substr($result ?? '', 0, $length);
|
||||||
}
|
}
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<% require themedCSS('comments', 'comments') %>
|
<% require themedCSS('client/dist/styles/comments', 'comments') %>
|
||||||
|
|
||||||
<% if $CommentsEnabled %>
|
<% if $CommentsEnabled %>
|
||||||
<div id="$CommentHolderID" class="comments-holder-container">
|
<div id="$CommentHolderID" class="comments-holder-container">
|
||||||
@ -7,7 +7,7 @@
|
|||||||
<% if $AddCommentForm %>
|
<% if $AddCommentForm %>
|
||||||
<% if $canPostComment %>
|
<% if $canPostComment %>
|
||||||
<% if $ModeratedSubmitted %>
|
<% if $ModeratedSubmitted %>
|
||||||
<p id="moderated" class="message good"><% _t('CommentsInterface_ss.AWAITINGMODERATION', 'Your comment has been submitted and is now awaiting moderation.') %></p>
|
<p id="moderated" class="message good" tabindex="-1"><% _t('CommentsInterface_ss.AWAITINGMODERATION', 'Your comment has been submitted and is now awaiting moderation.') %></p>
|
||||||
<% end_if %>
|
<% end_if %>
|
||||||
$AddCommentForm
|
$AddCommentForm
|
||||||
<% else %>
|
<% else %>
|
||||||
@ -25,7 +25,7 @@
|
|||||||
<% if $PagedComments %>
|
<% if $PagedComments %>
|
||||||
<ul class="comments-list root-level">
|
<ul class="comments-list root-level">
|
||||||
<% loop $PagedComments %>
|
<% loop $PagedComments %>
|
||||||
<li class="comment $EvenOdd<% if FirstLast %> $FirstLast <% end_if %> $SpamClass">
|
<li class="comment $EvenOdd<% if $FirstLast %> $FirstLast <% end_if %> $SpamClass">
|
||||||
<% include CommentsInterface_singlecomment %>
|
<% include CommentsInterface_singlecomment %>
|
||||||
</li>
|
</li>
|
||||||
<% end_loop %>
|
<% end_loop %>
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
<% if $Replies %>
|
<% if $Replies %>
|
||||||
<ul class="comments-list level-{$Depth}">
|
<ul class="comments-list level-{$Depth}">
|
||||||
<% loop $Replies %>
|
<% loop $Replies %>
|
||||||
<li class="comment $EvenOdd<% if FirstLast %> $FirstLast <% end_if %> $SpamClass">
|
<li class="comment $EvenOdd<% if $FirstLast %> $FirstLast <% end_if %> $SpamClass">
|
||||||
<% include CommentsInterface_singlecomment %>
|
<% include CommentsInterface_singlecomment %>
|
||||||
</li>
|
</li>
|
||||||
<% end_loop %>
|
<% end_loop %>
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
<% if $Gravatar %>
|
<% if $Gravatar %>
|
||||||
<img class="gravatar" src="$Gravatar.ATT" alt="Gravatar for $Name.ATT" title="Gravatar for $Name.ATT" />
|
<img class="gravatar" src="$Gravatar.ATT" alt="Gravatar for $Name.ATT" title="Gravatar for $Name.ATT" />
|
||||||
<% end_if %>
|
<% end_if %>
|
||||||
<div class="comment-text<% if $Gravatar %> hasGravatar<% end_if %>" id="<% if $isPreview %>comment-preview<% else %>$Permalink<% end_if %>">
|
<div class="comment-text<% if $Gravatar %> hasGravatar<% end_if %>" id="<% if $isPreview %>comment-preview<% else %>{$Permalink}-text<% end_if %>">
|
||||||
<p>$EscapedComment</p>
|
<p>$EscapedComment</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -20,21 +20,21 @@
|
|||||||
<div class="comment-action-links">
|
<div class="comment-action-links">
|
||||||
<div class="comment-moderation-options">
|
<div class="comment-moderation-options">
|
||||||
<% if $ApproveLink %>
|
<% if $ApproveLink %>
|
||||||
<a href="$ApproveLink.ATT" class="approve"><% _t('CommentsInterface_singlecomment_ss.APPROVE', 'approve it') %></a>
|
<a href="$ApproveLink.ATT" class="approve"><%t CommentsInterface_singlecomment_ss.APPROVE "Approve it" %></a>
|
||||||
<% end_if %>
|
<% end_if %>
|
||||||
<% if $SpamLink %>
|
<% if $SpamLink %>
|
||||||
<a href="$SpamLink.ATT" class="spam"><% _t('CommentsInterface_singlecomment_ss.ISSPAM','spam it') %></a>
|
<a href="$SpamLink.ATT" class="spam"><%t CommentsInterface_singlecomment_ss.ISSPAM "Spam it" %></a>
|
||||||
<% end_if %>
|
<% end_if %>
|
||||||
<% if $HamLink %>
|
<% if $HamLink %>
|
||||||
<a href="$HamLink.ATT" class="ham"><% _t('CommentsInterface_singlecomment_ss.ISNTSPAM','not spam') %></a>
|
<a href="$HamLink.ATT" class="ham"><%t CommentsInterface_singlecomment_ss.ISNTSPAM "Not spam" %></a>
|
||||||
<% end_if %>
|
<% end_if %>
|
||||||
<% if $DeleteLink %>
|
<% if $DeleteLink %>
|
||||||
<a href="$DeleteLink.ATT" class="delete"><% _t('CommentsInterface_singlecomment_ss.REMCOM','reject it') %></a>
|
<a href="$DeleteLink.ATT" class="delete"><%t CommentsInterface_singlecomment_ss.REMCOM "Reject it" %></a>
|
||||||
<% end_if %>
|
<% end_if %>
|
||||||
</div>
|
</div>
|
||||||
<% if $RepliesEnabled && $canPostComment %>
|
<% if $RepliesEnabled && $canPostComment %>
|
||||||
<button class="comment-reply-link" type="button" aria-controls="$ReplyForm.FormName" aria-expanded="false">
|
<button class="comment-reply-link" type="button" aria-controls="$ReplyForm.FormName" aria-expanded="false">
|
||||||
<% _t('CommentsInterface_singlecomment_ss.REPLYTO','Reply to') %> $AuthorName.XML
|
<%t CommentsInterface_singlecomment_ss.REPLYTO "Reply to" %> $AuthorName.XML
|
||||||
</button>
|
</button>
|
||||||
<% end_if %>
|
<% end_if %>
|
||||||
</div>
|
</div>
|
||||||
|
@ -2,18 +2,19 @@
|
|||||||
|
|
||||||
namespace SilverStripe\Comments\Tests;
|
namespace SilverStripe\Comments\Tests;
|
||||||
|
|
||||||
|
use SilverStripe\Akismet\AkismetSpamProtector;
|
||||||
use SilverStripe\Comments\Controllers\CommentingController;
|
use SilverStripe\Comments\Controllers\CommentingController;
|
||||||
use SilverStripe\Comments\Model\Comment;
|
use SilverStripe\Comments\Model\Comment;
|
||||||
use SilverStripe\Comments\Model\Comment\SecurityToken as CommentSecurityToken;
|
use SilverStripe\Comments\Model\Comment\SecurityToken as CommentSecurityToken;
|
||||||
use SilverStripe\Comments\Tests\Stubs\CommentableItem;
|
use SilverStripe\Comments\Tests\Stubs\CommentableItem;
|
||||||
use SilverStripe\Comments\Tests\CommentTestHelper;
|
|
||||||
use SilverStripe\Control\Controller;
|
use SilverStripe\Control\Controller;
|
||||||
use SilverStripe\Core\Config\Config;
|
use SilverStripe\Core\Config\Config;
|
||||||
use SilverStripe\Core\Email\Email;
|
use SilverStripe\Core\Injector\Injector;
|
||||||
use SilverStripe\Dev\FunctionalTest;
|
use SilverStripe\Dev\FunctionalTest;
|
||||||
use SilverStripe\ORM\DataObject;
|
use SilverStripe\ORM\DataObject;
|
||||||
use SilverStripe\Security\Member;
|
use SilverStripe\Security\Member;
|
||||||
use SilverStripe\Security\SecurityToken;
|
use SilverStripe\Security\SecurityToken;
|
||||||
|
use SilverStripe\Security\Security;
|
||||||
|
|
||||||
class CommentingControllerTest extends FunctionalTest
|
class CommentingControllerTest extends FunctionalTest
|
||||||
{
|
{
|
||||||
@ -31,7 +32,7 @@ class CommentingControllerTest extends FunctionalTest
|
|||||||
|
|
||||||
protected $securityEnabled;
|
protected $securityEnabled;
|
||||||
|
|
||||||
protected function tearDown()
|
protected function tearDown(): void
|
||||||
{
|
{
|
||||||
if ($this->securityEnabled) {
|
if ($this->securityEnabled) {
|
||||||
SecurityToken::inst()->enable();
|
SecurityToken::inst()->enable();
|
||||||
@ -41,13 +42,19 @@ class CommentingControllerTest extends FunctionalTest
|
|||||||
parent::tearDown();
|
parent::tearDown();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function setUp()
|
protected function setUp(): void
|
||||||
{
|
{
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
$this->securityEnabled = SecurityToken::inst()->is_enabled();
|
$this->securityEnabled = SecurityToken::inst()->is_enabled();
|
||||||
|
|
||||||
// We will assert against explicit responses, unless handed otherwise in a test for redirects
|
// We will assert against explicit responses, unless handed otherwise in a test for redirects
|
||||||
$this->autoFollowRedirection = false;
|
$this->autoFollowRedirection = false;
|
||||||
|
|
||||||
|
// Mock Akismet if it's installed
|
||||||
|
if (class_exists(AkismetSpamProtector::class)) {
|
||||||
|
$akismetMock = $this->createMock(AkismetSpamProtector::class);
|
||||||
|
Injector::inst()->registerService($akismetMock, AkismetSpamProtector::class);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testCommentsFormUsePreview()
|
public function testCommentsFormUsePreview()
|
||||||
@ -92,7 +99,7 @@ class CommentingControllerTest extends FunctionalTest
|
|||||||
$comment = $this->objFromFixture(Comment::class, 'testModeratedComment1');
|
$comment = $this->objFromFixture(Comment::class, 'testModeratedComment1');
|
||||||
$st = new CommentSecurityToken($comment);
|
$st = new CommentSecurityToken($comment);
|
||||||
$url = 'comments/approve/' . $comment->ID;
|
$url = 'comments/approve/' . $comment->ID;
|
||||||
$url = $st->addToUrl($url, Member::currentUser());
|
$url = $st->addToUrl($url, Security::getCurrentUser());
|
||||||
$response = $this->get($url, null, ['Referer' => '/']);
|
$response = $this->get($url, null, ['Referer' => '/']);
|
||||||
$this->assertEquals(302, $response->getStatusCode());
|
$this->assertEquals(302, $response->getStatusCode());
|
||||||
$comment = DataObject::get_by_id(Comment::class, $comment->ID);
|
$comment = DataObject::get_by_id(Comment::class, $comment->ID);
|
||||||
@ -125,7 +132,7 @@ class CommentingControllerTest extends FunctionalTest
|
|||||||
$comment->markSpam();
|
$comment->markSpam();
|
||||||
$st = new CommentSecurityToken($comment);
|
$st = new CommentSecurityToken($comment);
|
||||||
$url = 'comments/ham/' . $comment->ID;
|
$url = 'comments/ham/' . $comment->ID;
|
||||||
$url = $st->addToUrl($url, Member::currentUser());
|
$url = $st->addToUrl($url, Security::getCurrentUser());
|
||||||
$response = $this->get($url);
|
$response = $this->get($url);
|
||||||
$this->assertEquals(302, $response->getStatusCode());
|
$this->assertEquals(302, $response->getStatusCode());
|
||||||
$comment = DataObject::get_by_id(Comment::class, $comment->ID);
|
$comment = DataObject::get_by_id(Comment::class, $comment->ID);
|
||||||
@ -147,7 +154,7 @@ class CommentingControllerTest extends FunctionalTest
|
|||||||
$comment->markApproved();
|
$comment->markApproved();
|
||||||
$st = new CommentSecurityToken($comment);
|
$st = new CommentSecurityToken($comment);
|
||||||
$url = 'comments/spam/' . $comment->ID;
|
$url = 'comments/spam/' . $comment->ID;
|
||||||
$url = $st->addToUrl($url, Member::currentUser());
|
$url = $st->addToUrl($url, Security::getCurrentUser());
|
||||||
$response = $this->get($url);
|
$response = $this->get($url);
|
||||||
$this->assertEquals(302, $response->getStatusCode());
|
$this->assertEquals(302, $response->getStatusCode());
|
||||||
$comment = DataObject::get_by_id(Comment::class, $comment->ID);
|
$comment = DataObject::get_by_id(Comment::class, $comment->ID);
|
||||||
@ -173,22 +180,30 @@ class CommentingControllerTest extends FunctionalTest
|
|||||||
// comments sitewide
|
// comments sitewide
|
||||||
$response = $this->get('comments/rss');
|
$response = $this->get('comments/rss');
|
||||||
$comment = "10 approved, non spam comments on page 1";
|
$comment = "10 approved, non spam comments on page 1";
|
||||||
$this->assertEquals(10, substr_count($response->getBody(), "<item>"), $comment);
|
$this->assertEquals(10, substr_count($response->getBody() ?? '', "<item>"), $comment);
|
||||||
|
|
||||||
$response = $this->get('comments/rss?start=10');
|
$response = $this->get('comments/rss?start=10');
|
||||||
$this->assertEquals(4, substr_count($response->getBody(), "<item>"), "3 approved, non spam comments on page 2");
|
$this->assertEquals(
|
||||||
|
4,
|
||||||
|
substr_count($response->getBody() ?? '', "<item>"),
|
||||||
|
"3 approved, non spam comments on page 2"
|
||||||
|
);
|
||||||
|
|
||||||
// all comments on a type
|
// all comments on a type
|
||||||
$response = $this->get('comments/rss/SilverStripe-Comments-Tests-Stubs-CommentableItem');
|
$response = $this->get('comments/rss/SilverStripe-Comments-Tests-Stubs-CommentableItem');
|
||||||
$this->assertEquals(10, substr_count($response->getBody(), "<item>"));
|
$this->assertEquals(10, substr_count($response->getBody() ?? '', "<item>"));
|
||||||
|
|
||||||
$response = $this->get('comments/rss/SilverStripe-Comments-Tests-Stubs-CommentableItem?start=10');
|
$response = $this->get('comments/rss/SilverStripe-Comments-Tests-Stubs-CommentableItem?start=10');
|
||||||
$this->assertEquals(4, substr_count($response->getBody(), "<item>"), "3 approved, non spam comments on page 2");
|
$this->assertEquals(
|
||||||
|
4,
|
||||||
|
substr_count($response->getBody() ?? '', "<item>"),
|
||||||
|
"3 approved, non spam comments on page 2"
|
||||||
|
);
|
||||||
|
|
||||||
// specific page
|
// specific page
|
||||||
$response = $this->get('comments/rss/SilverStripe-Comments-Tests-Stubs-CommentableItem/'.$item->ID);
|
$response = $this->get('comments/rss/SilverStripe-Comments-Tests-Stubs-CommentableItem/'.$item->ID);
|
||||||
$this->assertEquals(1, substr_count($response->getBody(), "<item>"));
|
$this->assertEquals(1, substr_count($response->getBody() ?? '', "<item>"));
|
||||||
$this->assertContains('<dc:creator>FA</dc:creator>', $response->getBody());
|
$this->assertStringContainsString('<dc:creator>FA</dc:creator>', $response->getBody());
|
||||||
|
|
||||||
// test accessing comments on a type that doesn't exist
|
// test accessing comments on a type that doesn't exist
|
||||||
$response = $this->get('comments/rss/Fake');
|
$response = $this->get('comments/rss/Fake');
|
||||||
@ -260,7 +275,7 @@ class CommentingControllerTest extends FunctionalTest
|
|||||||
);
|
);
|
||||||
$this->assertEquals(302, $response->getStatusCode());
|
$this->assertEquals(302, $response->getStatusCode());
|
||||||
// $this->assertStringStartsWith('CommentableItemController#comment-', $response->getHeader('Location'));
|
// $this->assertStringStartsWith('CommentableItemController#comment-', $response->getHeader('Location'));
|
||||||
$this->assertDOSEquals(
|
$this->assertListEquals(
|
||||||
array(
|
array(
|
||||||
array(
|
array(
|
||||||
'Name' => 'Poster',
|
'Name' => 'Poster',
|
||||||
@ -291,7 +306,7 @@ class CommentingControllerTest extends FunctionalTest
|
|||||||
);
|
);
|
||||||
$this->assertEquals(302, $response->getStatusCode());
|
$this->assertEquals(302, $response->getStatusCode());
|
||||||
// $this->assertStringStartsWith('CommentableItemController#comment-', $response->getHeader('Location'));
|
// $this->assertStringStartsWith('CommentableItemController#comment-', $response->getHeader('Location'));
|
||||||
$this->assertDOSEquals(
|
$this->assertListEquals(
|
||||||
array(
|
array(
|
||||||
array(
|
array(
|
||||||
'Name' => 'Test Author',
|
'Name' => 'Test Author',
|
||||||
|
@ -9,14 +9,18 @@ use SilverStripe\Comments\Tests\Stubs\CommentableItem;
|
|||||||
use SilverStripe\Comments\Tests\Stubs\CommentableItemDisabled;
|
use SilverStripe\Comments\Tests\Stubs\CommentableItemDisabled;
|
||||||
use SilverStripe\Comments\Tests\Stubs\CommentableItemEnabled;
|
use SilverStripe\Comments\Tests\Stubs\CommentableItemEnabled;
|
||||||
use SilverStripe\Core\Config\Config;
|
use SilverStripe\Core\Config\Config;
|
||||||
|
use SilverStripe\Dev\FunctionalTest;
|
||||||
use SilverStripe\Dev\SapphireTest;
|
use SilverStripe\Dev\SapphireTest;
|
||||||
use SilverStripe\Security\Member;
|
use SilverStripe\Security\Member;
|
||||||
use SilverStripe\View\Requirements;
|
use SilverStripe\View\Requirements;
|
||||||
|
use SilverStripe\Security\Security;
|
||||||
|
|
||||||
class CommentsExtensionTest extends SapphireTest
|
class CommentsExtensionTest extends FunctionalTest
|
||||||
{
|
{
|
||||||
protected static $fixture_file = 'CommentsTest.yml';
|
protected static $fixture_file = 'CommentsTest.yml';
|
||||||
|
|
||||||
|
protected static $disable_themes = true;
|
||||||
|
|
||||||
protected static $extra_dataobjects = [
|
protected static $extra_dataobjects = [
|
||||||
CommentableItem::class,
|
CommentableItem::class,
|
||||||
CommentableItemEnabled::class,
|
CommentableItemEnabled::class,
|
||||||
@ -29,7 +33,7 @@ class CommentsExtensionTest extends SapphireTest
|
|||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|
||||||
protected function setUp()
|
protected function setUp(): void
|
||||||
{
|
{
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
|
|
||||||
@ -215,8 +219,8 @@ class CommentsExtensionTest extends SapphireTest
|
|||||||
public function testCanModerateComments()
|
public function testCanModerateComments()
|
||||||
{
|
{
|
||||||
// ensure nobody logged in
|
// ensure nobody logged in
|
||||||
if (Member::currentUser()) {
|
if (Security::getCurrentUser()) {
|
||||||
Member::currentUser()->logOut();
|
Security::getCurrentUser()->logOut();
|
||||||
}
|
}
|
||||||
|
|
||||||
$item = $this->objFromFixture(CommentableItem::class, 'first');
|
$item = $this->objFromFixture(CommentableItem::class, 'first');
|
||||||
@ -249,6 +253,8 @@ class CommentsExtensionTest extends SapphireTest
|
|||||||
|
|
||||||
public function testCommentsForm()
|
public function testCommentsForm()
|
||||||
{
|
{
|
||||||
|
$this->logInWithPermission('ADMIN');
|
||||||
|
|
||||||
Config::modify()->merge(CommentableItem::class, 'comments', array(
|
Config::modify()->merge(CommentableItem::class, 'comments', array(
|
||||||
'include_js' => false,
|
'include_js' => false,
|
||||||
'comments_holder_id' => 'comments-holder',
|
'comments_holder_id' => 'comments-holder',
|
||||||
@ -257,44 +263,44 @@ class CommentsExtensionTest extends SapphireTest
|
|||||||
$item = $this->objFromFixture(CommentableItem::class, 'first');
|
$item = $this->objFromFixture(CommentableItem::class, 'first');
|
||||||
|
|
||||||
// The comments form is HTML to do assertions by contains
|
// The comments form is HTML to do assertions by contains
|
||||||
$cf = $item->CommentsForm();
|
$cf = (string) $item->CommentsForm();
|
||||||
$expected = '/comments/CommentsForm/" method="post" enctype="application/x-www-form-urlencoded">';
|
$expected = '/comments/CommentsForm/" method="POST" enctype="application/x-www-form-urlencoded">';
|
||||||
|
|
||||||
$this->assertContains($expected, $cf);
|
$this->assertStringContainsString($expected, $cf);
|
||||||
$this->assertContains('<h4>Post your comment</h4>', $cf);
|
$this->assertStringContainsString('<h4>Post your comment</h4>', $cf);
|
||||||
// check the comments form exists
|
// check the comments form exists
|
||||||
$expected = '<input type="text" name="Name"';
|
$expected = '<input type="text" name="Name"';
|
||||||
$this->assertContains($expected, $cf);
|
$this->assertStringContainsString($expected, $cf);
|
||||||
|
|
||||||
$expected = '<input type="email" name="Email"';
|
$expected = '<input type="email" name="Email"';
|
||||||
$this->assertContains($expected, $cf);
|
$this->assertStringContainsString($expected, $cf);
|
||||||
|
|
||||||
$expected = '<input type="text" name="URL"';
|
$expected = '<input type="text" name="URL"';
|
||||||
$this->assertContains($expected, $cf);
|
$this->assertStringContainsString($expected, $cf);
|
||||||
|
|
||||||
$expected = '<input type="hidden" name="ParentID"';
|
$expected = '<input type="hidden" name="ParentID"';
|
||||||
$this->assertContains($expected, $cf);
|
$this->assertStringContainsString($expected, $cf);
|
||||||
|
|
||||||
$expected = '<textarea name="Comment"';
|
$expected = '<textarea name="Comment"';
|
||||||
$this->assertContains($expected, $cf);
|
$this->assertStringContainsString($expected, $cf);
|
||||||
|
|
||||||
$expected = '<input type="submit" name="action_doPostComment" value="Post" class="action" id="comments-holder_action_doPostComment"';
|
$expected = '<input type="submit" name="action_doPostComment" value="Post" class="action"';
|
||||||
$this->assertContains($expected, $cf);
|
$this->assertStringContainsString($expected, $cf);
|
||||||
|
|
||||||
$expected = '/comments/spam/';
|
$expected = '/comments/spam/';
|
||||||
$this->assertContains($expected, $cf);
|
$this->assertStringContainsString($expected, $cf);
|
||||||
|
|
||||||
$expected = '<p>Reply to firstComA 1</p>';
|
$expected = '<p>Reply to firstComA 1</p>';
|
||||||
$this->assertContains($expected, $cf);
|
$this->assertStringContainsString($expected, $cf);
|
||||||
|
|
||||||
$expected = '/comments/delete';
|
$expected = '/comments/delete';
|
||||||
$this->assertContains($expected, $cf);
|
$this->assertStringContainsString($expected, $cf);
|
||||||
|
|
||||||
$expected = '<p>Reply to firstComA 2</p>';
|
$expected = '<p>Reply to firstComA 2</p>';
|
||||||
$this->assertContains($expected, $cf);
|
$this->assertStringContainsString($expected, $cf);
|
||||||
|
|
||||||
$expected = '<p>Reply to firstComA 3</p>';
|
$expected = '<p>Reply to firstComA 3</p>';
|
||||||
$this->assertContains($expected, $cf);
|
$this->assertStringContainsString($expected, $cf);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testAttachedToSiteTree()
|
public function testAttachedToSiteTree()
|
||||||
@ -338,7 +344,7 @@ class CommentsExtensionTest extends SapphireTest
|
|||||||
$results[0]->Comment
|
$results[0]->Comment
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->assertEquals(4, sizeof($results));
|
$this->assertEquals(4, sizeof($results ?? []));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testUpdateModerationFields()
|
public function testUpdateModerationFields()
|
||||||
|
@ -8,16 +8,17 @@ use SilverStripe\Comments\Admin\CommentsGridFieldAction;
|
|||||||
use SilverStripe\Comments\Admin\CommentsGridFieldConfig;
|
use SilverStripe\Comments\Admin\CommentsGridFieldConfig;
|
||||||
use SilverStripe\Comments\Model\Comment;
|
use SilverStripe\Comments\Model\Comment;
|
||||||
use SilverStripe\Comments\Tests\Stubs\CommentableItem;
|
use SilverStripe\Comments\Tests\Stubs\CommentableItem;
|
||||||
|
use SilverStripe\Comments\Tests\Stubs\Team;
|
||||||
use SilverStripe\Control\Controller;
|
use SilverStripe\Control\Controller;
|
||||||
use SilverStripe\Dev\SapphireTest;
|
use SilverStripe\Dev\SapphireTest;
|
||||||
use SilverStripe\Forms\FieldList;
|
use SilverStripe\Forms\FieldList;
|
||||||
use SilverStripe\Forms\Form;
|
use SilverStripe\Forms\Form;
|
||||||
use SilverStripe\Forms\GridField\GridField;
|
use SilverStripe\Forms\GridField\GridField;
|
||||||
use SilverStripe\Forms\GridField\GridFieldDeleteAction;
|
use SilverStripe\Forms\GridField\GridFieldDeleteAction;
|
||||||
use SilverStripe\Forms\Tests\GridField\GridFieldTest\Team;
|
|
||||||
use SilverStripe\ORM\ArrayList;
|
use SilverStripe\ORM\ArrayList;
|
||||||
use SilverStripe\ORM\DataList;
|
use SilverStripe\ORM\DataList;
|
||||||
use SilverStripe\ORM\DataObject;
|
use SilverStripe\ORM\DataObject;
|
||||||
|
use SilverStripe\Dev\Deprecation;
|
||||||
|
|
||||||
class CommentsGridFieldActionTest extends SapphireTest
|
class CommentsGridFieldActionTest extends SapphireTest
|
||||||
{
|
{
|
||||||
@ -25,6 +26,7 @@ class CommentsGridFieldActionTest extends SapphireTest
|
|||||||
|
|
||||||
protected static $extra_dataobjects = [
|
protected static $extra_dataobjects = [
|
||||||
CommentableItem::class,
|
CommentableItem::class,
|
||||||
|
Team::class,
|
||||||
];
|
];
|
||||||
|
|
||||||
/** @var ArrayList */
|
/** @var ArrayList */
|
||||||
@ -36,9 +38,12 @@ class CommentsGridFieldActionTest extends SapphireTest
|
|||||||
/** @var Form */
|
/** @var Form */
|
||||||
protected $form;
|
protected $form;
|
||||||
|
|
||||||
protected function setUp()
|
protected function setUp(): void
|
||||||
{
|
{
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
|
if (Deprecation::isEnabled()) {
|
||||||
|
$this->markTestSkipped('Test calls deprecated code');
|
||||||
|
}
|
||||||
$this->list = new DataList(Team::class);
|
$this->list = new DataList(Team::class);
|
||||||
$config = CommentsGridFieldConfig::create()->addComponent(new GridFieldDeleteAction());
|
$config = CommentsGridFieldConfig::create()->addComponent(new GridFieldDeleteAction());
|
||||||
$this->gridField = new CommentsGridField('testfield', 'testfield', $this->list, $config);
|
$this->gridField = new CommentsGridField('testfield', 'testfield', $this->list, $config);
|
||||||
@ -95,27 +100,27 @@ class CommentsGridFieldActionTest extends SapphireTest
|
|||||||
$record->write();
|
$record->write();
|
||||||
$recordID = $record->ID;
|
$recordID = $record->ID;
|
||||||
$html = $action->getColumnContent($this->gridField, $record, Comment::class);
|
$html = $action->getColumnContent($this->gridField, $record, Comment::class);
|
||||||
$this->assertContains('data-url="admin/comments/mockform/field/testfield', $html);
|
$this->assertStringContainsString('data-url="admin/comments/mockform/field/testfield', $html);
|
||||||
|
|
||||||
$this->assertContains('value="Spam"', $html);
|
$this->assertStringContainsString('value="Spam"', $html);
|
||||||
$this->assertContains('id="action_CustomAction' . $recordID . 'Spam"', $html);
|
$this->assertStringContainsString('id="action_CustomAction' . $recordID . 'Spam"', $html);
|
||||||
|
|
||||||
$this->assertContains('value="Approve"', $html);
|
$this->assertStringContainsString('value="Approve"', $html);
|
||||||
$this->assertContains('id="action_CustomAction' . $recordID . 'Approve"', $html);
|
$this->assertStringContainsString('id="action_CustomAction' . $recordID . 'Approve"', $html);
|
||||||
|
|
||||||
// If marked as spam, only the approve button should be available
|
// If marked as spam, only the approve button should be available
|
||||||
$record->markSpam();
|
$record->markSpam();
|
||||||
$record->write();
|
$record->write();
|
||||||
$html = $action->getColumnContent($this->gridField, $record, Comment::class);
|
$html = $action->getColumnContent($this->gridField, $record, Comment::class);
|
||||||
$this->assertContains('value="Approve"', $html);
|
$this->assertStringContainsString('value="Approve"', $html);
|
||||||
$this->assertNotContains('value="Spam"', $html);
|
$this->assertStringNotContainsString('value="Spam"', $html);
|
||||||
|
|
||||||
// If marked as spam, only the approve button should be available
|
// If marked as spam, only the approve button should be available
|
||||||
$record->markApproved();
|
$record->markApproved();
|
||||||
$record->write();
|
$record->write();
|
||||||
$html = $action->getColumnContent($this->gridField, $record, Comment::class);
|
$html = $action->getColumnContent($this->gridField, $record, Comment::class);
|
||||||
$this->assertNotContains('value="Approve"', $html);
|
$this->assertStringNotContainsString('value="Approve"', $html);
|
||||||
$this->assertContains('value="Spam"', $html);
|
$this->assertStringContainsString('value="Spam"', $html);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetActions()
|
public function testGetActions()
|
||||||
|
@ -2,101 +2,94 @@
|
|||||||
|
|
||||||
namespace SilverStripe\Comments\Tests;
|
namespace SilverStripe\Comments\Tests;
|
||||||
|
|
||||||
use HTMLPurifier_Config;
|
|
||||||
use HTMLPurifier;
|
use HTMLPurifier;
|
||||||
|
use HTMLPurifier_Config;
|
||||||
use ReflectionClass;
|
use ReflectionClass;
|
||||||
use SilverStripe\Comments\Extensions\CommentsExtension;
|
use SilverStripe\Comments\Extensions\CommentsExtension;
|
||||||
use SilverStripe\Comments\Model\Comment;
|
use SilverStripe\Comments\Model\Comment;
|
||||||
use SilverStripe\Comments\Tests\Stubs\CommentableItem;
|
use SilverStripe\Comments\Tests\Stubs\CommentableItem;
|
||||||
use SilverStripe\Comments\Tests\Stubs\CommentableItemDisabled;
|
use SilverStripe\Comments\Tests\Stubs\CommentableItemDisabled;
|
||||||
use SilverStripe\Comments\Tests\Stubs\CommentableItemEnabled;
|
use SilverStripe\Comments\Tests\Stubs\CommentableItemEnabled;
|
||||||
use SilverStripe\Control\Controller;
|
|
||||||
use SilverStripe\Control\Director;
|
|
||||||
use SilverStripe\Core\Config\Config;
|
use SilverStripe\Core\Config\Config;
|
||||||
use SilverStripe\Core\Email\Email;
|
|
||||||
use SilverStripe\Dev\FunctionalTest;
|
use SilverStripe\Dev\FunctionalTest;
|
||||||
use SilverStripe\Dev\TestOnly;
|
|
||||||
use SilverStripe\i18n\i18n;
|
|
||||||
use SilverStripe\ORM\DataObject;
|
use SilverStripe\ORM\DataObject;
|
||||||
use SilverStripe\Security\Member;
|
use SilverStripe\Security\Member;
|
||||||
use SilverStripe\Security\Security;
|
use SilverStripe\Security\Security;
|
||||||
use SilverStripe\Security\Permission;
|
|
||||||
|
|
||||||
class CommentsTest extends FunctionalTest
|
class CommentsTest extends FunctionalTest
|
||||||
{
|
{
|
||||||
protected static $fixture_file = 'CommentsTest.yml';
|
protected static $fixture_file = 'CommentsTest.yml';
|
||||||
|
|
||||||
protected static $extra_dataobjects = array(
|
protected static $extra_dataobjects = [
|
||||||
CommentableItem::class,
|
CommentableItem::class,
|
||||||
CommentableItemEnabled::class,
|
CommentableItemEnabled::class,
|
||||||
CommentableItemDisabled::class
|
CommentableItemDisabled::class,
|
||||||
);
|
];
|
||||||
|
|
||||||
public function setUp()
|
protected function setUp(): void
|
||||||
{
|
{
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
|
|
||||||
// Set good default values
|
// Set good default values
|
||||||
Config::modify()->merge(CommentsExtension::class, 'comments', array(
|
Config::modify()->merge(CommentsExtension::class, 'comments', [
|
||||||
'enabled' => true,
|
'enabled' => true,
|
||||||
'comment_permalink_prefix' => 'comment-'
|
'comment_permalink_prefix' => 'comment-',
|
||||||
));
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testCommentsList()
|
public function testCommentsList()
|
||||||
{
|
{
|
||||||
// comments don't require moderation so unmoderated comments can be
|
// comments don't require moderation so unmoderated comments can be
|
||||||
// shown but not spam posts
|
// shown but not spam posts
|
||||||
Config::modify()->merge(CommentableItem::class, 'comments', array(
|
Config::modify()->merge(CommentableItem::class, 'comments', [
|
||||||
'require_moderation_nonmembers' => false,
|
'require_moderation_nonmembers' => false,
|
||||||
'require_moderation' => false,
|
'require_moderation' => false,
|
||||||
'require_moderation_cms' => false,
|
'require_moderation_cms' => false,
|
||||||
));
|
]);
|
||||||
|
|
||||||
$item = $this->objFromFixture(CommentableItem::class, 'spammed');
|
$item = $this->objFromFixture(CommentableItem::class, 'spammed');
|
||||||
|
|
||||||
$this->assertDOSEquals(array(
|
$this->assertListEquals([
|
||||||
array('Name' => 'Comment 1'),
|
['Name' => 'Comment 1'],
|
||||||
array('Name' => 'Comment 3')
|
['Name' => 'Comment 3']
|
||||||
), $item->Comments(), 'Only 2 non spam posts should be shown');
|
], $item->Comments(), 'Only 2 non spam posts should be shown');
|
||||||
|
|
||||||
// when moderated, only moderated, non spam posts should be shown.
|
// when moderated, only moderated, non spam posts should be shown.
|
||||||
Config::modify()->merge(CommentableItem::class, 'comments', array('require_moderation_nonmembers' => true));
|
Config::modify()->merge(CommentableItem::class, 'comments', ['require_moderation_nonmembers' => true]);
|
||||||
|
|
||||||
// Check that require_moderation overrides this option
|
// Check that require_moderation overrides this option
|
||||||
Config::modify()->merge(CommentableItem::class, 'comments', array('require_moderation' => true));
|
Config::modify()->merge(CommentableItem::class, 'comments', ['require_moderation' => true]);
|
||||||
|
|
||||||
$this->assertDOSEquals(array(
|
$this->assertListEquals(array(
|
||||||
array('Name' => 'Comment 3')
|
array('Name' => 'Comment 3')
|
||||||
), $item->Comments(), 'Only 1 non spam, moderated post should be shown');
|
), $item->Comments(), 'Only 1 non spam, moderated post should be shown');
|
||||||
$this->assertEquals(1, $item->Comments()->Count());
|
$this->assertEquals(1, $item->Comments()->Count());
|
||||||
|
|
||||||
// require_moderation_nonmembers still filters out unmoderated comments
|
// require_moderation_nonmembers still filters out unmoderated comments
|
||||||
Config::modify()->merge(CommentableItem::class, 'comments', array('require_moderation' => false));
|
Config::modify()->merge(CommentableItem::class, 'comments', ['require_moderation' => false]);
|
||||||
$this->assertEquals(1, $item->Comments()->Count());
|
$this->assertEquals(1, $item->Comments()->Count());
|
||||||
|
|
||||||
Config::modify()->merge(CommentableItem::class, 'comments', array('require_moderation_nonmembers' => false));
|
Config::modify()->merge(CommentableItem::class, 'comments', ['require_moderation_nonmembers' => false]);
|
||||||
$this->assertEquals(2, $item->Comments()->Count());
|
$this->assertEquals(2, $item->Comments()->Count());
|
||||||
|
|
||||||
// With unmoderated comments set to display in frontend
|
// With unmoderated comments set to display in frontend
|
||||||
Config::modify()->merge(CommentableItem::class, 'comments', array(
|
Config::modify()->merge(CommentableItem::class, 'comments', [
|
||||||
'require_moderation' => true,
|
'require_moderation' => true,
|
||||||
'frontend_moderation' => true
|
'frontend_moderation' => true,
|
||||||
));
|
]);
|
||||||
$this->assertEquals(1, $item->Comments()->Count());
|
$this->assertEquals(1, $item->Comments()->Count());
|
||||||
|
|
||||||
$this->logInWithPermission('ADMIN');
|
$this->logInWithPermission('ADMIN');
|
||||||
$this->assertEquals(2, $item->Comments()->Count());
|
$this->assertEquals(2, $item->Comments()->Count());
|
||||||
|
|
||||||
// With spam comments set to display in frontend
|
// With spam comments set to display in frontend
|
||||||
Config::modify()->merge(CommentableItem::class, 'comments', array(
|
Config::modify()->merge(CommentableItem::class, 'comments', [
|
||||||
'require_moderation' => true,
|
'require_moderation' => true,
|
||||||
'frontend_moderation' => false,
|
'frontend_moderation' => false,
|
||||||
'frontend_spam' => true,
|
'frontend_spam' => true,
|
||||||
));
|
]);
|
||||||
if ($member = Member::currentUser()) {
|
|
||||||
$member->logOut();
|
$this->logOut();
|
||||||
}
|
|
||||||
$this->assertEquals(1, $item->Comments()->Count());
|
$this->assertEquals(1, $item->Comments()->Count());
|
||||||
|
|
||||||
$this->logInWithPermission('ADMIN');
|
$this->logInWithPermission('ADMIN');
|
||||||
@ -104,14 +97,13 @@ class CommentsTest extends FunctionalTest
|
|||||||
|
|
||||||
|
|
||||||
// With spam and unmoderated comments set to display in frontend
|
// With spam and unmoderated comments set to display in frontend
|
||||||
Config::modify()->merge(CommentableItem::class, 'comments', array(
|
Config::modify()->merge(CommentableItem::class, 'comments', [
|
||||||
'require_moderation' => true,
|
'require_moderation' => true,
|
||||||
'frontend_moderation' => true,
|
'frontend_moderation' => true,
|
||||||
'frontend_spam' => true,
|
'frontend_spam' => true,
|
||||||
));
|
]);
|
||||||
if ($member = Member::currentUser()) {
|
|
||||||
$member->logOut();
|
$this->logOut();
|
||||||
}
|
|
||||||
$this->assertEquals(1, $item->Comments()->Count());
|
$this->assertEquals(1, $item->Comments()->Count());
|
||||||
|
|
||||||
$this->logInWithPermission('ADMIN');
|
$this->logInWithPermission('ADMIN');
|
||||||
@ -123,19 +115,19 @@ class CommentsTest extends FunctionalTest
|
|||||||
*/
|
*/
|
||||||
public function testCommentCMSModerationList()
|
public function testCommentCMSModerationList()
|
||||||
{
|
{
|
||||||
Config::modify()->merge(CommentableItem::class, 'comments', array(
|
Config::modify()->merge(CommentableItem::class, 'comments', [
|
||||||
'require_moderation' => true,
|
'require_moderation' => true,
|
||||||
'require_moderation_cms' => true,
|
'require_moderation_cms' => true,
|
||||||
));
|
]);
|
||||||
|
|
||||||
$item = $this->objFromFixture(CommentableItem::class, 'spammed');
|
$item = $this->objFromFixture(CommentableItem::class, 'spammed');
|
||||||
|
|
||||||
$this->assertEquals('None', $item->getModerationRequired());
|
$this->assertEquals('None', $item->getModerationRequired());
|
||||||
|
|
||||||
$this->assertDOSEquals(array(
|
$this->assertListEquals([
|
||||||
array('Name' => 'Comment 1'),
|
['Name' => 'Comment 1'],
|
||||||
array('Name' => 'Comment 3')
|
['Name' => 'Comment 3']
|
||||||
), $item->Comments(), 'Only 2 non spam posts should be shown');
|
], $item->Comments(), 'Only 2 non spam posts should be shown');
|
||||||
|
|
||||||
// when moderated, only moderated, non spam posts should be shown.
|
// when moderated, only moderated, non spam posts should be shown.
|
||||||
$item->ModerationRequired = 'NonMembersOnly';
|
$item->ModerationRequired = 'NonMembersOnly';
|
||||||
@ -148,9 +140,9 @@ class CommentsTest extends FunctionalTest
|
|||||||
$item->write();
|
$item->write();
|
||||||
$this->assertEquals('Required', $item->getModerationRequired());
|
$this->assertEquals('Required', $item->getModerationRequired());
|
||||||
|
|
||||||
$this->assertDOSEquals(array(
|
$this->assertListEquals([
|
||||||
array('Name' => 'Comment 3')
|
['Name' => 'Comment 3']
|
||||||
), $item->Comments(), 'Only 1 non spam, moderated post should be shown');
|
], $item->Comments(), 'Only 1 non spam, moderated post should be shown');
|
||||||
$this->assertEquals(1, $item->Comments()->Count());
|
$this->assertEquals(1, $item->Comments()->Count());
|
||||||
|
|
||||||
// require_moderation_nonmembers still filters out unmoderated comments
|
// require_moderation_nonmembers still filters out unmoderated comments
|
||||||
@ -165,26 +157,26 @@ class CommentsTest extends FunctionalTest
|
|||||||
|
|
||||||
public function testCanPostComment()
|
public function testCanPostComment()
|
||||||
{
|
{
|
||||||
Config::modify()->merge(CommentableItem::class, 'comments', array(
|
Config::modify()->merge(CommentableItem::class, 'comments', [
|
||||||
'require_login' => false,
|
'require_login' => false,
|
||||||
'require_login_cms' => false,
|
'require_login_cms' => false,
|
||||||
'required_permission' => false,
|
'required_permission' => false,
|
||||||
));
|
]);
|
||||||
|
/** @var CommentableItem&CommentsExtension $item */
|
||||||
$item = $this->objFromFixture(CommentableItem::class, 'first');
|
$item = $this->objFromFixture(CommentableItem::class, 'first');
|
||||||
|
/** @var CommentableItem&CommentsExtension $item2 */
|
||||||
$item2 = $this->objFromFixture(CommentableItem::class, 'second');
|
$item2 = $this->objFromFixture(CommentableItem::class, 'second');
|
||||||
|
|
||||||
// Test restriction free commenting
|
// Test restriction free commenting
|
||||||
if ($member = Member::currentUser()) {
|
$this->logOut();
|
||||||
$member->logOut();
|
|
||||||
}
|
|
||||||
$this->assertFalse($item->CommentsRequireLogin);
|
$this->assertFalse($item->CommentsRequireLogin);
|
||||||
$this->assertTrue($item->canPostComment());
|
$this->assertTrue($item->canPostComment());
|
||||||
|
|
||||||
// Test permission required to post
|
// Test permission required to post
|
||||||
Config::modify()->merge(CommentableItem::class, 'comments', array(
|
Config::modify()->merge(CommentableItem::class, 'comments', [
|
||||||
'require_login' => true,
|
'require_login' => true,
|
||||||
'required_permission' => 'POSTING_PERMISSION',
|
'required_permission' => 'POSTING_PERMISSION',
|
||||||
));
|
]);
|
||||||
$this->assertTrue($item->CommentsRequireLogin);
|
$this->assertTrue($item->CommentsRequireLogin);
|
||||||
$this->assertFalse($item->canPostComment());
|
$this->assertFalse($item->canPostComment());
|
||||||
$this->logInWithPermission('WRONG_ONE');
|
$this->logInWithPermission('WRONG_ONE');
|
||||||
@ -195,27 +187,25 @@ class CommentsTest extends FunctionalTest
|
|||||||
$this->assertTrue($item->canPostComment());
|
$this->assertTrue($item->canPostComment());
|
||||||
|
|
||||||
// Test require login to post, but not any permissions
|
// Test require login to post, but not any permissions
|
||||||
Config::modify()->merge(CommentableItem::class, 'comments', array(
|
Config::modify()->merge(CommentableItem::class, 'comments', [
|
||||||
'required_permission' => false,
|
'required_permission' => false,
|
||||||
));
|
]);
|
||||||
$this->assertTrue($item->CommentsRequireLogin);
|
$this->assertTrue($item->CommentsRequireLogin);
|
||||||
if ($member = Member::currentUser()) {
|
|
||||||
$member->logOut();
|
$this->logOut();
|
||||||
}
|
|
||||||
$this->assertFalse($item->canPostComment());
|
$this->assertFalse($item->canPostComment());
|
||||||
$this->logInWithPermission('ANY_PERMISSION');
|
$this->logInWithPermission('ANY_PERMISSION');
|
||||||
$this->assertTrue($item->canPostComment());
|
$this->assertTrue($item->canPostComment());
|
||||||
|
|
||||||
// Test options set via CMS
|
// Test options set via CMS
|
||||||
Config::modify()->merge(CommentableItem::class, 'comments', array(
|
Config::modify()->merge(CommentableItem::class, 'comments', [
|
||||||
'require_login' => true,
|
'require_login' => true,
|
||||||
'require_login_cms' => true,
|
'require_login_cms' => true,
|
||||||
));
|
]);
|
||||||
$this->assertFalse($item->CommentsRequireLogin);
|
$this->assertFalse($item->CommentsRequireLogin);
|
||||||
$this->assertTrue($item2->CommentsRequireLogin);
|
$this->assertTrue($item2->CommentsRequireLogin);
|
||||||
if ($member = Member::currentUser()) {
|
|
||||||
$member->logOut();
|
$this->logOut();
|
||||||
}
|
|
||||||
$this->assertTrue($item->canPostComment());
|
$this->assertTrue($item->canPostComment());
|
||||||
$this->assertFalse($item2->canPostComment());
|
$this->assertFalse($item2->canPostComment());
|
||||||
|
|
||||||
@ -227,9 +217,7 @@ class CommentsTest extends FunctionalTest
|
|||||||
public function testDeleteComment()
|
public function testDeleteComment()
|
||||||
{
|
{
|
||||||
// Test anonymous user
|
// Test anonymous user
|
||||||
if ($member = Member::currentUser()) {
|
$this->logOut();
|
||||||
$member->logOut();
|
|
||||||
}
|
|
||||||
$comment = $this->objFromFixture(Comment::class, 'firstComA');
|
$comment = $this->objFromFixture(Comment::class, 'firstComA');
|
||||||
$commentID = $comment->ID;
|
$commentID = $comment->ID;
|
||||||
$this->assertNull($comment->DeleteLink(), 'No permission to see delete link');
|
$this->assertNull($comment->DeleteLink(), 'No permission to see delete link');
|
||||||
@ -247,7 +235,7 @@ class CommentsTest extends FunctionalTest
|
|||||||
$comment = $this->objFromFixture(Comment::class, 'firstComA');
|
$comment = $this->objFromFixture(Comment::class, 'firstComA');
|
||||||
$commentID = $comment->ID;
|
$commentID = $comment->ID;
|
||||||
$adminComment1Link = $comment->DeleteLink();
|
$adminComment1Link = $comment->DeleteLink();
|
||||||
$this->assertContains('comments/delete/' . $commentID . '?t=', $adminComment1Link);
|
$this->assertStringContainsString('comments/delete/' . $commentID . '?t=', $adminComment1Link);
|
||||||
|
|
||||||
// Test that this link can't be shared / XSS exploited
|
// Test that this link can't be shared / XSS exploited
|
||||||
$this->logInAs('commentadmin2');
|
$this->logInAs('commentadmin2');
|
||||||
@ -269,13 +257,11 @@ class CommentsTest extends FunctionalTest
|
|||||||
public function testSpamComment()
|
public function testSpamComment()
|
||||||
{
|
{
|
||||||
// Test anonymous user
|
// Test anonymous user
|
||||||
if ($member = Member::currentUser()) {
|
$this->logOut();
|
||||||
$member->logOut();
|
|
||||||
}
|
|
||||||
$comment = $this->objFromFixture(Comment::class, 'firstComA');
|
$comment = $this->objFromFixture(Comment::class, 'firstComA');
|
||||||
$commentID = $comment->ID;
|
$commentID = $comment->ID;
|
||||||
$this->assertNull($comment->SpamLink(), 'No permission to see mark as spam link');
|
$this->assertNull($comment->SpamLink(), 'No permission to see mark as spam link');
|
||||||
$spam = $this->get('comments/spam/'.$comment->ID.'?ajax=1');
|
$spam = $this->get('comments/spam/' . $comment->ID . '?ajax=1');
|
||||||
$this->assertEquals(403, $spam->getStatusCode());
|
$this->assertEquals(403, $spam->getStatusCode());
|
||||||
$check = DataObject::get_by_id(Comment::class, $commentID);
|
$check = DataObject::get_by_id(Comment::class, $commentID);
|
||||||
$this->assertEquals(0, $check->IsSpam, 'No permission to mark as spam');
|
$this->assertEquals(0, $check->IsSpam, 'No permission to mark as spam');
|
||||||
@ -289,7 +275,7 @@ class CommentsTest extends FunctionalTest
|
|||||||
$comment = $this->objFromFixture(Comment::class, 'firstComA');
|
$comment = $this->objFromFixture(Comment::class, 'firstComA');
|
||||||
$commentID = $comment->ID;
|
$commentID = $comment->ID;
|
||||||
$adminComment1Link = $comment->SpamLink();
|
$adminComment1Link = $comment->SpamLink();
|
||||||
$this->assertContains('comments/spam/' . $commentID . '?t=', $adminComment1Link);
|
$this->assertStringContainsString('comments/spam/' . $commentID . '?t=', $adminComment1Link);
|
||||||
|
|
||||||
// Test that this link can't be shared / XSS exploited
|
// Test that this link can't be shared / XSS exploited
|
||||||
$this->logInAs('commentadmin2');
|
$this->logInAs('commentadmin2');
|
||||||
@ -314,9 +300,7 @@ class CommentsTest extends FunctionalTest
|
|||||||
public function testHamComment()
|
public function testHamComment()
|
||||||
{
|
{
|
||||||
// Test anonymous user
|
// Test anonymous user
|
||||||
if ($member = Member::currentUser()) {
|
$this->logOut();
|
||||||
$member->logOut();
|
|
||||||
}
|
|
||||||
$comment = $this->objFromFixture(Comment::class, 'secondComC');
|
$comment = $this->objFromFixture(Comment::class, 'secondComC');
|
||||||
$commentID = $comment->ID;
|
$commentID = $comment->ID;
|
||||||
$this->assertNull($comment->HamLink(), 'No permission to see mark as ham link');
|
$this->assertNull($comment->HamLink(), 'No permission to see mark as ham link');
|
||||||
@ -334,7 +318,7 @@ class CommentsTest extends FunctionalTest
|
|||||||
$comment = $this->objFromFixture(Comment::class, 'secondComC');
|
$comment = $this->objFromFixture(Comment::class, 'secondComC');
|
||||||
$commentID = $comment->ID;
|
$commentID = $comment->ID;
|
||||||
$adminComment1Link = $comment->HamLink();
|
$adminComment1Link = $comment->HamLink();
|
||||||
$this->assertContains('comments/ham/' . $commentID . '?t=', $adminComment1Link);
|
$this->assertStringContainsString('comments/ham/' . $commentID . '?t=', $adminComment1Link);
|
||||||
|
|
||||||
// Test that this link can't be shared / XSS exploited
|
// Test that this link can't be shared / XSS exploited
|
||||||
$this->logInAs('commentadmin2');
|
$this->logInAs('commentadmin2');
|
||||||
@ -359,9 +343,7 @@ class CommentsTest extends FunctionalTest
|
|||||||
public function testApproveComment()
|
public function testApproveComment()
|
||||||
{
|
{
|
||||||
// Test anonymous user
|
// Test anonymous user
|
||||||
if ($member = Member::currentUser()) {
|
$this->logOut();
|
||||||
$member->logOut();
|
|
||||||
}
|
|
||||||
$comment = $this->objFromFixture(Comment::class, 'secondComB');
|
$comment = $this->objFromFixture(Comment::class, 'secondComB');
|
||||||
$commentID = $comment->ID;
|
$commentID = $comment->ID;
|
||||||
$this->assertNull($comment->ApproveLink(), 'No permission to see approve link');
|
$this->assertNull($comment->ApproveLink(), 'No permission to see approve link');
|
||||||
@ -379,7 +361,7 @@ class CommentsTest extends FunctionalTest
|
|||||||
$comment = $this->objFromFixture(Comment::class, 'secondComB');
|
$comment = $this->objFromFixture(Comment::class, 'secondComB');
|
||||||
$commentID = $comment->ID;
|
$commentID = $comment->ID;
|
||||||
$adminComment1Link = $comment->ApproveLink();
|
$adminComment1Link = $comment->ApproveLink();
|
||||||
$this->assertContains('comments/approve/' . $commentID . '?t=', $adminComment1Link);
|
$this->assertStringContainsString('comments/approve/' . $commentID . '?t=', $adminComment1Link);
|
||||||
|
|
||||||
// Test that this link can't be shared / XSS exploited
|
// Test that this link can't be shared / XSS exploited
|
||||||
$this->logInAs('commentadmin2');
|
$this->logInAs('commentadmin2');
|
||||||
@ -406,10 +388,10 @@ class CommentsTest extends FunctionalTest
|
|||||||
$comment = new Comment();
|
$comment = new Comment();
|
||||||
// We only care about the CommenterURL, so only set that
|
// We only care about the CommenterURL, so only set that
|
||||||
// Check a http and https URL. Add more test urls here as needed.
|
// Check a http and https URL. Add more test urls here as needed.
|
||||||
$protocols = array(
|
$protocols = [
|
||||||
'Http',
|
'Http',
|
||||||
'Https',
|
'Https',
|
||||||
);
|
];
|
||||||
$url = '://example.com';
|
$url = '://example.com';
|
||||||
|
|
||||||
foreach ($protocols as $protocol) {
|
foreach ($protocols as $protocol) {
|
||||||
@ -424,14 +406,13 @@ class CommentsTest extends FunctionalTest
|
|||||||
{
|
{
|
||||||
if (!class_exists('\\HTMLPurifier')) {
|
if (!class_exists('\\HTMLPurifier')) {
|
||||||
$this->markTestSkipped('HTMLPurifier class not found');
|
$this->markTestSkipped('HTMLPurifier class not found');
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add p for paragraph
|
// Add p for paragraph
|
||||||
// NOTE: The config method appears to append to the existing array
|
// NOTE: The config method appears to append to the existing array
|
||||||
Config::modify()->merge(CommentableItem::class, 'comments', array(
|
Config::modify()->merge(CommentableItem::class, 'comments', [
|
||||||
'html_allowed_elements' => array('p'),
|
'html_allowed_elements' => ['p'],
|
||||||
));
|
]);
|
||||||
|
|
||||||
// Without HTML allowed
|
// Without HTML allowed
|
||||||
$comment1 = new Comment();
|
$comment1 = new Comment();
|
||||||
@ -465,9 +446,9 @@ class CommentsTest extends FunctionalTest
|
|||||||
$this->markTestSkipped('HTMLPurifier class not found');
|
$this->markTestSkipped('HTMLPurifier class not found');
|
||||||
}
|
}
|
||||||
|
|
||||||
Config::modify()->merge(CommentableItem::class, 'comments', array(
|
Config::modify()->merge(CommentableItem::class, 'comments', [
|
||||||
'html_allowed_elements' => array('p'),
|
'html_allowed_elements' => ['p'],
|
||||||
));
|
]);
|
||||||
|
|
||||||
$item = new CommentableItem();
|
$item = new CommentableItem();
|
||||||
$item->write();
|
$item->write();
|
||||||
@ -480,16 +461,16 @@ class CommentsTest extends FunctionalTest
|
|||||||
$comment->ParentClass = CommentableItem::class;
|
$comment->ParentClass = CommentableItem::class;
|
||||||
$comment->write();
|
$comment->write();
|
||||||
|
|
||||||
$html = $item->customise(array('CommentsEnabled' => true))->renderWith('CommentsInterface');
|
$html = $item->customise(['CommentsEnabled' => true])->renderWith('CommentsInterface');
|
||||||
$this->assertContains(
|
$this->assertStringContainsString(
|
||||||
'<p>my comment</p>',
|
'<p>my comment</p>',
|
||||||
$html
|
$html
|
||||||
);
|
);
|
||||||
|
|
||||||
$comment->AllowHtml = true;
|
$comment->AllowHtml = true;
|
||||||
$comment->write();
|
$comment->write();
|
||||||
$html = $item->customise(array('CommentsEnabled' => true))->renderWith('CommentsInterface');
|
$html = $item->customise(['CommentsEnabled' => true])->renderWith('CommentsInterface');
|
||||||
$this->assertContains(
|
$this->assertStringContainsString(
|
||||||
'<p>my comment</p>',
|
'<p>my comment</p>',
|
||||||
$html
|
$html
|
||||||
);
|
);
|
||||||
@ -501,11 +482,11 @@ class CommentsTest extends FunctionalTest
|
|||||||
*/
|
*/
|
||||||
public function testDefaultEnabled()
|
public function testDefaultEnabled()
|
||||||
{
|
{
|
||||||
Config::modify()->merge(CommentableItem::class, 'comments', array(
|
Config::modify()->merge(CommentableItem::class, 'comments', [
|
||||||
'enabled_cms' => true,
|
'enabled_cms' => true,
|
||||||
'require_moderation_cms' => true,
|
'require_moderation_cms' => true,
|
||||||
'require_login_cms' => true
|
'require_login_cms' => true,
|
||||||
));
|
]);
|
||||||
|
|
||||||
// With default = true
|
// With default = true
|
||||||
$obj = new CommentableItem();
|
$obj = new CommentableItem();
|
||||||
@ -526,11 +507,11 @@ class CommentsTest extends FunctionalTest
|
|||||||
|
|
||||||
// With default = false
|
// With default = false
|
||||||
// Because of config rules about falsey values, apply config to object directly
|
// Because of config rules about falsey values, apply config to object directly
|
||||||
Config::modify()->merge(CommentableItem::class, 'comments', array(
|
Config::modify()->merge(CommentableItem::class, 'comments', [
|
||||||
'enabled' => false,
|
'enabled' => false,
|
||||||
'require_login' => true,
|
'require_login' => true,
|
||||||
'require_moderation' => true
|
'require_moderation' => true,
|
||||||
));
|
]);
|
||||||
|
|
||||||
$obj = new CommentableItem();
|
$obj = new CommentableItem();
|
||||||
|
|
||||||
@ -601,52 +582,27 @@ class CommentsTest extends FunctionalTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test field labels in 2 languages
|
* Test field labels are defined
|
||||||
*/
|
*/
|
||||||
public function testFieldLabels()
|
public function testFieldLabels()
|
||||||
{
|
{
|
||||||
$locale = i18n::get_locale();
|
/** @var Comment $comment */
|
||||||
i18n::set_locale('fr');
|
|
||||||
$comment = $this->objFromFixture(Comment::class, 'firstComA');
|
$comment = $this->objFromFixture(Comment::class, 'firstComA');
|
||||||
|
|
||||||
$labels = $comment->FieldLabels();
|
$labels = $comment->FieldLabels();
|
||||||
$expected = array(
|
$expected = [
|
||||||
'Name' => 'Nom de l\'Auteur',
|
'Name',
|
||||||
'Comment' => 'Commentaire',
|
'Comment',
|
||||||
'Email' => 'Email',
|
'Email',
|
||||||
'URL' => 'URL',
|
'URL',
|
||||||
'Moderated' => 'Modéré?',
|
'IsSpam',
|
||||||
'IsSpam' => 'Spam?',
|
'Moderated',
|
||||||
'AllowHtml' => 'Allow Html',
|
'ParentTitle',
|
||||||
'SecretToken' => 'Secret Token',
|
'Created',
|
||||||
'Depth' => 'Depth',
|
];
|
||||||
'Author' => 'Author Member',
|
foreach ($expected as $key) {
|
||||||
'ParentComment' => 'Parent Comment',
|
$this->assertArrayHasKey($key, $labels);
|
||||||
'ChildComments' => 'Child Comments',
|
}
|
||||||
'ParentTitle' => 'Parent',
|
|
||||||
'Created' => 'Date de publication',
|
|
||||||
'Parent' => 'Parent'
|
|
||||||
);
|
|
||||||
i18n::set_locale($locale);
|
|
||||||
$this->assertEquals($expected, $labels);
|
|
||||||
$labels = $comment->FieldLabels();
|
|
||||||
$expected = array(
|
|
||||||
'Name' => 'Author Name',
|
|
||||||
'Comment' => 'Comment',
|
|
||||||
'Email' => 'Email',
|
|
||||||
'URL' => 'URL',
|
|
||||||
'Moderated' => 'Moderated?',
|
|
||||||
'IsSpam' => 'Spam?',
|
|
||||||
'AllowHtml' => 'Allow Html',
|
|
||||||
'SecretToken' => 'Secret Token',
|
|
||||||
'Depth' => 'Depth',
|
|
||||||
'Author' => 'Author Member',
|
|
||||||
'ParentComment' => 'Parent Comment',
|
|
||||||
'ChildComments' => 'Child Comments',
|
|
||||||
'ParentTitle' => 'Parent',
|
|
||||||
'Created' => 'Date posted',
|
|
||||||
'Parent' => 'Parent'
|
|
||||||
);
|
|
||||||
$this->assertEquals($expected, $labels);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetParent()
|
public function testGetParent()
|
||||||
@ -819,30 +775,30 @@ class CommentsTest extends FunctionalTest
|
|||||||
$method = $this->getMethod('ActionLink');
|
$method = $this->getMethod('ActionLink');
|
||||||
|
|
||||||
// test with starts of strings and tokens and salts change each time
|
// test with starts of strings and tokens and salts change each time
|
||||||
$this->assertContains(
|
$this->assertStringContainsString(
|
||||||
'/comments/theaction/' . $comment->ID,
|
'/comments/theaction/' . $comment->ID,
|
||||||
$method->invokeArgs($comment, array('theaction'))
|
$method->invokeArgs($comment, array('theaction'))
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->assertContains(
|
$this->assertStringContainsString(
|
||||||
'/comments/delete/' . $comment->ID,
|
'/comments/delete/' . $comment->ID,
|
||||||
$comment->DeleteLink()
|
$comment->DeleteLink()
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->assertContains(
|
$this->assertStringContainsString(
|
||||||
'/comments/spam/' . $comment->ID,
|
'/comments/spam/' . $comment->ID,
|
||||||
$comment->SpamLink()
|
$comment->SpamLink()
|
||||||
);
|
);
|
||||||
|
|
||||||
$comment->markSpam();
|
$comment->markSpam();
|
||||||
$this->assertContains(
|
$this->assertStringContainsString(
|
||||||
'/comments/ham/' . $comment->ID,
|
'/comments/ham/' . $comment->ID,
|
||||||
$comment->HamLink()
|
$comment->HamLink()
|
||||||
);
|
);
|
||||||
|
|
||||||
//markApproved
|
//markApproved
|
||||||
$comment->markUnapproved();
|
$comment->markUnapproved();
|
||||||
$this->assertContains(
|
$this->assertStringContainsString(
|
||||||
'/comments/approve/' . $comment->ID,
|
'/comments/approve/' . $comment->ID,
|
||||||
$comment->ApproveLink()
|
$comment->ApproveLink()
|
||||||
);
|
);
|
||||||
@ -894,18 +850,18 @@ class CommentsTest extends FunctionalTest
|
|||||||
{
|
{
|
||||||
$comment = $this->objFromFixture(Comment::class, 'firstComA');
|
$comment = $this->objFromFixture(Comment::class, 'firstComA');
|
||||||
$fields = $comment->getCMSFields();
|
$fields = $comment->getCMSFields();
|
||||||
$names = array();
|
$names = [];
|
||||||
foreach ($fields as $field) {
|
foreach ($fields as $field) {
|
||||||
$names[] = $field->getName();
|
$names[] = $field->getName();
|
||||||
}
|
}
|
||||||
$expected = array(
|
$expected = [
|
||||||
'Created',
|
'Created',
|
||||||
'Name',
|
'Name',
|
||||||
'Comment',
|
'Comment',
|
||||||
'Email',
|
'Email',
|
||||||
'URL',
|
'URL',
|
||||||
'Options'
|
'Options',
|
||||||
);
|
];
|
||||||
$this->assertEquals($expected, $names);
|
$this->assertEquals($expected, $names);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -917,19 +873,19 @@ class CommentsTest extends FunctionalTest
|
|||||||
$comment->write();
|
$comment->write();
|
||||||
|
|
||||||
$fields = $comment->getCMSFields();
|
$fields = $comment->getCMSFields();
|
||||||
$names = array();
|
$names = [];
|
||||||
foreach ($fields as $field) {
|
foreach ($fields as $field) {
|
||||||
$names[] = $field->getName();
|
$names[] = $field->getName();
|
||||||
}
|
}
|
||||||
$expected = array(
|
$expected = [
|
||||||
'Created',
|
'Created',
|
||||||
'Name',
|
'Name',
|
||||||
'AuthorMember',
|
'AuthorMember',
|
||||||
'Comment',
|
'Comment',
|
||||||
'Email',
|
'Email',
|
||||||
'URL',
|
'URL',
|
||||||
'Options'
|
'Options',
|
||||||
);
|
];
|
||||||
$this->assertEquals($expected, $names);
|
$this->assertEquals($expected, $names);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -944,11 +900,11 @@ class CommentsTest extends FunctionalTest
|
|||||||
$child->write();
|
$child->write();
|
||||||
|
|
||||||
$fields = $child->getCMSFields();
|
$fields = $child->getCMSFields();
|
||||||
$names = array();
|
$names = [];
|
||||||
foreach ($fields as $field) {
|
foreach ($fields as $field) {
|
||||||
$names[] = $field->getName();
|
$names[] = $field->getName();
|
||||||
}
|
}
|
||||||
$expected = array(
|
$expected = [
|
||||||
'Created',
|
'Created',
|
||||||
'Name',
|
'Name',
|
||||||
'Comment',
|
'Comment',
|
||||||
@ -958,8 +914,8 @@ class CommentsTest extends FunctionalTest
|
|||||||
'ParentComment_Title',
|
'ParentComment_Title',
|
||||||
'ParentComment_Created',
|
'ParentComment_Created',
|
||||||
'ParentComment_AuthorName',
|
'ParentComment_AuthorName',
|
||||||
'ParentComment_EscapedComment'
|
'ParentComment_EscapedComment',
|
||||||
);
|
];
|
||||||
$this->assertEquals($expected, $names);
|
$this->assertEquals($expected, $names);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -967,7 +923,6 @@ class CommentsTest extends FunctionalTest
|
|||||||
{
|
{
|
||||||
if (!class_exists(HTMLPurifier_Config::class)) {
|
if (!class_exists(HTMLPurifier_Config::class)) {
|
||||||
$this->markTestSkipped('HTMLPurifier class not found');
|
$this->markTestSkipped('HTMLPurifier class not found');
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$comment = $this->objFromFixture(Comment::class, 'firstComA');
|
$comment = $this->objFromFixture(Comment::class, 'firstComA');
|
||||||
@ -982,25 +937,25 @@ class CommentsTest extends FunctionalTest
|
|||||||
public function testGravatar()
|
public function testGravatar()
|
||||||
{
|
{
|
||||||
// Turn gravatars on
|
// Turn gravatars on
|
||||||
Config::modify()->merge(CommentableItem::class, 'comments', array(
|
Config::modify()->merge(CommentableItem::class, 'comments', [
|
||||||
'use_gravatar' => true,
|
'use_gravatar' => true,
|
||||||
'gravatar_size' => 80,
|
'gravatar_size' => 80,
|
||||||
'gravatar_default' => 'identicon',
|
'gravatar_default' => 'identicon',
|
||||||
'gravatar_rating' => 'g'
|
'gravatar_rating' => 'g',
|
||||||
));
|
]);
|
||||||
|
|
||||||
$comment = $this->objFromFixture(Comment::class, 'firstComA');
|
$comment = $this->objFromFixture(Comment::class, 'firstComA');
|
||||||
|
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
'http://www.gravatar.com/avatar/d41d8cd98f00b204e9800998ecf8427e?s'
|
'https://www.gravatar.com/avatar/d41d8cd98f00b204e9800998ecf8427e?s'
|
||||||
. '=80&d=identicon&r=g',
|
. '=80&d=identicon&r=g',
|
||||||
$comment->Gravatar()
|
$comment->Gravatar()
|
||||||
);
|
);
|
||||||
|
|
||||||
// Turn gravatars off
|
// Turn gravatars off
|
||||||
Config::modify()->merge(CommentableItem::class, 'comments', array(
|
Config::modify()->merge(CommentableItem::class, 'comments', [
|
||||||
'use_gravatar' => false
|
'use_gravatar' => false,
|
||||||
));
|
]);
|
||||||
|
|
||||||
$comment = $this->objFromFixture(Comment::class, 'firstComA');
|
$comment = $this->objFromFixture(Comment::class, 'firstComA');
|
||||||
|
|
||||||
@ -1012,17 +967,17 @@ class CommentsTest extends FunctionalTest
|
|||||||
|
|
||||||
public function testGetRepliesEnabled()
|
public function testGetRepliesEnabled()
|
||||||
{
|
{
|
||||||
Config::modify()->merge(CommentableItem::class, 'comments', array(
|
Config::modify()->merge(CommentableItem::class, 'comments', [
|
||||||
'nested_comments' => false
|
'nested_comments' => false,
|
||||||
));
|
]);
|
||||||
|
|
||||||
$comment = $this->objFromFixture(Comment::class, 'firstComA');
|
$comment = $this->objFromFixture(Comment::class, 'firstComA');
|
||||||
$this->assertFalse($comment->getRepliesEnabled());
|
$this->assertFalse($comment->getRepliesEnabled());
|
||||||
|
|
||||||
Config::modify()->merge(CommentableItem::class, 'comments', array(
|
Config::modify()->merge(CommentableItem::class, 'comments', [
|
||||||
'nested_comments' => true,
|
'nested_comments' => true,
|
||||||
'nested_depth' => 4
|
'nested_depth' => 4,
|
||||||
));
|
]);
|
||||||
|
|
||||||
$this->assertTrue($comment->getRepliesEnabled());
|
$this->assertTrue($comment->getRepliesEnabled());
|
||||||
|
|
||||||
@ -1031,10 +986,10 @@ class CommentsTest extends FunctionalTest
|
|||||||
|
|
||||||
|
|
||||||
// 0 indicates no limit for nested_depth
|
// 0 indicates no limit for nested_depth
|
||||||
Config::modify()->merge(CommentableItem::class, 'comments', array(
|
Config::modify()->merge(CommentableItem::class, 'comments', [
|
||||||
'nested_comments' => true,
|
'nested_comments' => true,
|
||||||
'nested_depth' => 0
|
'nested_depth' => 0,
|
||||||
));
|
]);
|
||||||
|
|
||||||
$comment = $this->objFromFixture(Comment::class, 'firstComA');
|
$comment = $this->objFromFixture(Comment::class, 'firstComA');
|
||||||
$comment->Depth = 234;
|
$comment->Depth = 234;
|
||||||
@ -1051,10 +1006,10 @@ class CommentsTest extends FunctionalTest
|
|||||||
|
|
||||||
public function testAllReplies()
|
public function testAllReplies()
|
||||||
{
|
{
|
||||||
Config::modify()->merge(CommentableItem::class, 'comments', array(
|
Config::modify()->merge(CommentableItem::class, 'comments', [
|
||||||
'nested_comments' => true,
|
'nested_comments' => true,
|
||||||
'nested_depth' => 4
|
'nested_depth' => 4,
|
||||||
));
|
]);
|
||||||
|
|
||||||
$comment = $this->objFromFixture(Comment::class, 'firstComA');
|
$comment = $this->objFromFixture(Comment::class, 'firstComA');
|
||||||
|
|
||||||
@ -1077,9 +1032,9 @@ class CommentsTest extends FunctionalTest
|
|||||||
$comment->allReplies()->count()
|
$comment->allReplies()->count()
|
||||||
);
|
);
|
||||||
|
|
||||||
Config::modify()->merge(CommentableItem::class, 'comments', array(
|
Config::modify()->merge(CommentableItem::class, 'comments', [
|
||||||
'nested_comments' => false
|
'nested_comments' => false,
|
||||||
));
|
]);
|
||||||
|
|
||||||
$this->assertEquals(0, $comment->allReplies()->count());
|
$this->assertEquals(0, $comment->allReplies()->count());
|
||||||
}
|
}
|
||||||
@ -1088,10 +1043,10 @@ class CommentsTest extends FunctionalTest
|
|||||||
{
|
{
|
||||||
CommentableItem::add_extension(CommentsExtension::class);
|
CommentableItem::add_extension(CommentsExtension::class);
|
||||||
$this->logInWithPermission('ADMIN');
|
$this->logInWithPermission('ADMIN');
|
||||||
Config::modify()->merge(CommentableItem::class, 'comments', array(
|
Config::modify()->merge(CommentableItem::class, 'comments', [
|
||||||
'nested_comments' => true,
|
'nested_comments' => true,
|
||||||
'nested_depth' => 4
|
'nested_depth' => 4,
|
||||||
));
|
]);
|
||||||
$comment = $this->objFromFixture(Comment::class, 'firstComA');
|
$comment = $this->objFromFixture(Comment::class, 'firstComA');
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
3,
|
3,
|
||||||
@ -1126,11 +1081,11 @@ class CommentsTest extends FunctionalTest
|
|||||||
$item->ModerationRequired = 'Required';
|
$item->ModerationRequired = 'Required';
|
||||||
$item->write();
|
$item->write();
|
||||||
|
|
||||||
Config::modify()->merge(CommentableItemDisabled::class, 'comments', array(
|
Config::modify()->merge(CommentableItemDisabled::class, 'comments', [
|
||||||
'nested_comments' => true,
|
'nested_comments' => true,
|
||||||
'nested_depth' => 4,
|
'nested_depth' => 4,
|
||||||
'frontend_moderation' => true
|
'frontend_moderation' => true,
|
||||||
));
|
]);
|
||||||
|
|
||||||
$comment = DataObject::get_by_id(Comment::class, $comment->ID);
|
$comment = DataObject::get_by_id(Comment::class, $comment->ID);
|
||||||
|
|
||||||
@ -1140,9 +1095,9 @@ class CommentsTest extends FunctionalTest
|
|||||||
);
|
);
|
||||||
|
|
||||||
// Turn off nesting, empty array should be returned
|
// Turn off nesting, empty array should be returned
|
||||||
Config::modify()->merge(CommentableItem::class, 'comments', array(
|
Config::modify()->merge(CommentableItem::class, 'comments', [
|
||||||
'nested_comments' => false
|
'nested_comments' => false,
|
||||||
));
|
]);
|
||||||
|
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
0,
|
0,
|
||||||
@ -1154,11 +1109,11 @@ class CommentsTest extends FunctionalTest
|
|||||||
|
|
||||||
public function testPagedReplies()
|
public function testPagedReplies()
|
||||||
{
|
{
|
||||||
Config::modify()->merge(CommentableItem::class, 'comments', array(
|
Config::modify()->merge(CommentableItem::class, 'comments', [
|
||||||
'nested_comments' => true,
|
'nested_comments' => true,
|
||||||
'nested_depth' => 4,
|
'nested_depth' => 4,
|
||||||
'comments_per_page' => 2
|
'comments_per_page' => 2,
|
||||||
));
|
]);
|
||||||
|
|
||||||
$comment = $this->objFromFixture(Comment::class, 'firstComA');
|
$comment = $this->objFromFixture(Comment::class, 'firstComA');
|
||||||
$pagedList = $comment->pagedReplies();
|
$pagedList = $comment->pagedReplies();
|
||||||
@ -1173,19 +1128,19 @@ class CommentsTest extends FunctionalTest
|
|||||||
$pagedList->getTotalItems()
|
$pagedList->getTotalItems()
|
||||||
);
|
);
|
||||||
|
|
||||||
Config::modify()->merge(CommentableItem::class, 'comments', array(
|
Config::modify()->merge(CommentableItem::class, 'comments', [
|
||||||
'nested_comments' => false
|
'nested_comments' => false,
|
||||||
));
|
]);
|
||||||
|
|
||||||
$this->assertEquals(0, $comment->PagedReplies()->count());
|
$this->assertEquals(0, $comment->PagedReplies()->count());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testReplyForm()
|
public function testReplyForm()
|
||||||
{
|
{
|
||||||
Config::modify()->merge(CommentableItem::class, 'comments', array(
|
Config::modify()->merge(CommentableItem::class, 'comments', [
|
||||||
'nested_comments' => false,
|
'nested_comments' => false,
|
||||||
'nested_depth' => 4
|
'nested_depth' => 4,
|
||||||
));
|
]);
|
||||||
|
|
||||||
$comment = $this->objFromFixture(Comment::class, 'firstComA');
|
$comment = $this->objFromFixture(Comment::class, 'firstComA');
|
||||||
|
|
||||||
@ -1194,28 +1149,23 @@ class CommentsTest extends FunctionalTest
|
|||||||
$this->assertNull($form);
|
$this->assertNull($form);
|
||||||
|
|
||||||
// parent item so show form
|
// parent item so show form
|
||||||
Config::modify()->merge(CommentableItem::class, 'comments', array(
|
Config::modify()->merge(CommentableItem::class, 'comments', [
|
||||||
'nested_comments' => true,
|
'nested_comments' => true,
|
||||||
'nested_depth' => 4
|
'nested_depth' => 4,
|
||||||
));
|
]);
|
||||||
$form = $comment->ReplyForm();
|
$form = $comment->ReplyForm();
|
||||||
$this->assertNotNull($form);
|
$this->assertNotNull($form);
|
||||||
$names = array();
|
$names = [];
|
||||||
|
|
||||||
foreach ($form->Fields() as $field) {
|
foreach ($form->Fields() as $field) {
|
||||||
array_push($names, $field->getName());
|
array_push($names, $field->getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->assertEquals(
|
$this->assertContains('NameEmailURLComment', $names, 'The CompositeField name');
|
||||||
array(
|
$this->assertContains('ParentID', $names);
|
||||||
'NameEmailURLComment', // The CompositeField name?
|
$this->assertContains('ParentClassName', $names);
|
||||||
'ParentID',
|
$this->assertContains('ReturnURL', $names);
|
||||||
'ParentClassName',
|
$this->assertContains('ParentCommentID', $names);
|
||||||
'ReturnURL',
|
|
||||||
'ParentCommentID'
|
|
||||||
),
|
|
||||||
$names
|
|
||||||
);
|
|
||||||
|
|
||||||
// no parent, no reply form
|
// no parent, no reply form
|
||||||
|
|
||||||
@ -1228,10 +1178,10 @@ class CommentsTest extends FunctionalTest
|
|||||||
|
|
||||||
public function testUpdateDepth()
|
public function testUpdateDepth()
|
||||||
{
|
{
|
||||||
Config::modify()->merge(CommentableItem::class, 'comments', array(
|
Config::modify()->merge(CommentableItem::class, 'comments', [
|
||||||
'nested_comments' => true,
|
'nested_comments' => true,
|
||||||
'nested_depth' => 4
|
'nested_depth' => 4,
|
||||||
));
|
]);
|
||||||
|
|
||||||
$comment = $this->objFromFixture(Comment::class, 'firstComA');
|
$comment = $this->objFromFixture(Comment::class, 'firstComA');
|
||||||
$children = $comment->allReplies()->toArray();
|
$children = $comment->allReplies()->toArray();
|
||||||
|
19
tests/Stubs/Cheerleader.php
Normal file
19
tests/Stubs/Cheerleader.php
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace SilverStripe\Comments\Tests\Stubs;
|
||||||
|
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
use SilverStripe\ORM\DataObject;
|
||||||
|
|
||||||
|
class Cheerleader extends DataObject implements TestOnly
|
||||||
|
{
|
||||||
|
private static $table_name = 'CommentsTest_Cheerleader';
|
||||||
|
|
||||||
|
private static $db = [
|
||||||
|
'Name' => 'Varchar',
|
||||||
|
];
|
||||||
|
|
||||||
|
private static $has_one = [
|
||||||
|
'Team' => Team::class,
|
||||||
|
];
|
||||||
|
}
|
@ -8,6 +8,7 @@ use SilverStripe\Dev\TestOnly;
|
|||||||
use SilverStripe\ORM\DataObject;
|
use SilverStripe\ORM\DataObject;
|
||||||
use SilverStripe\Security\Member;
|
use SilverStripe\Security\Member;
|
||||||
use SilverStripe\Security\Permission;
|
use SilverStripe\Security\Permission;
|
||||||
|
use SilverStripe\Security\Security;
|
||||||
|
|
||||||
class CommentableItem extends DataObject implements TestOnly
|
class CommentableItem extends DataObject implements TestOnly
|
||||||
{
|
{
|
||||||
@ -39,7 +40,8 @@ class CommentableItem extends DataObject implements TestOnly
|
|||||||
} elseif (is_numeric($member)) {
|
} elseif (is_numeric($member)) {
|
||||||
$memberID = $member;
|
$memberID = $member;
|
||||||
} else {
|
} else {
|
||||||
$memberID = Member::currentUserID();
|
$currentUser = Security::getCurrentUser();
|
||||||
|
$memberID = $currentUser ? $currentUser->ID : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($memberID && Permission::checkMember($memberID, array('ADMIN', 'CMS_ACCESS_CommentAdmin'))) {
|
if ($memberID && Permission::checkMember($memberID, array('ADMIN', 'CMS_ACCESS_CommentAdmin'))) {
|
||||||
|
24
tests/Stubs/Player.php
Normal file
24
tests/Stubs/Player.php
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace SilverStripe\Comments\Tests\Stubs;
|
||||||
|
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
use SilverStripe\ORM\DataObject;
|
||||||
|
use SilverStripe\ORM\ManyManyList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @method ManyManyList Teams()
|
||||||
|
*/
|
||||||
|
class Player extends DataObject implements TestOnly
|
||||||
|
{
|
||||||
|
private static $table_name = 'CommentsTest_Player';
|
||||||
|
|
||||||
|
private static $db = array(
|
||||||
|
'Name' => 'Varchar',
|
||||||
|
'Email' => 'Varchar',
|
||||||
|
);
|
||||||
|
|
||||||
|
private static $belongs_many_many = [
|
||||||
|
'Teams' => Team::class,
|
||||||
|
];
|
||||||
|
}
|
35
tests/Stubs/Team.php
Normal file
35
tests/Stubs/Team.php
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace SilverStripe\Comments\Tests\Stubs;
|
||||||
|
|
||||||
|
use SilverStripe\Dev\TestOnly;
|
||||||
|
use SilverStripe\ORM\DataObject;
|
||||||
|
|
||||||
|
class Team extends DataObject implements TestOnly
|
||||||
|
{
|
||||||
|
private static $table_name = 'CommentsTest_Team';
|
||||||
|
|
||||||
|
private static $db = array(
|
||||||
|
'Name' => 'Varchar',
|
||||||
|
'City' => 'Varchar',
|
||||||
|
);
|
||||||
|
|
||||||
|
private static $many_many = [
|
||||||
|
'Players' => Player::class,
|
||||||
|
];
|
||||||
|
|
||||||
|
private static $has_many = [
|
||||||
|
'Cheerleaders' => Cheerleader::class,
|
||||||
|
];
|
||||||
|
|
||||||
|
private static $searchable_fields = [
|
||||||
|
'Name',
|
||||||
|
'City',
|
||||||
|
'Cheerleaders.Name',
|
||||||
|
];
|
||||||
|
|
||||||
|
public function canView($member = null)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
940
thirdparty/jquery-validate/additional-methods.js
vendored
940
thirdparty/jquery-validate/additional-methods.js
vendored
@ -1,940 +0,0 @@
|
|||||||
/*!
|
|
||||||
* jQuery Validation Plugin v1.13.1
|
|
||||||
*
|
|
||||||
* http://jqueryvalidation.org/
|
|
||||||
*
|
|
||||||
* Copyright (c) 2015 Jörn Zaefferer
|
|
||||||
* Released under the MIT license
|
|
||||||
*/
|
|
||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "./jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
(function() {
|
|
||||||
|
|
||||||
function stripHtml(value) {
|
|
||||||
// remove html tags and space chars
|
|
||||||
return value.replace(/<.[^<>]*?>/g, " ").replace(/ | /gi, " ")
|
|
||||||
// remove punctuation
|
|
||||||
.replace(/[.(),;:!?%#$'\"_+=\/\-“”’]*/g, "");
|
|
||||||
}
|
|
||||||
|
|
||||||
$.validator.addMethod("maxWords", function(value, element, params) {
|
|
||||||
return this.optional(element) || stripHtml(value).match(/\b\w+\b/g).length <= params;
|
|
||||||
}, $.validator.format("Please enter {0} words or less."));
|
|
||||||
|
|
||||||
$.validator.addMethod("minWords", function(value, element, params) {
|
|
||||||
return this.optional(element) || stripHtml(value).match(/\b\w+\b/g).length >= params;
|
|
||||||
}, $.validator.format("Please enter at least {0} words."));
|
|
||||||
|
|
||||||
$.validator.addMethod("rangeWords", function(value, element, params) {
|
|
||||||
var valueStripped = stripHtml(value),
|
|
||||||
regex = /\b\w+\b/g;
|
|
||||||
return this.optional(element) || valueStripped.match(regex).length >= params[0] && valueStripped.match(regex).length <= params[1];
|
|
||||||
}, $.validator.format("Please enter between {0} and {1} words."));
|
|
||||||
|
|
||||||
}());
|
|
||||||
|
|
||||||
// Accept a value from a file input based on a required mimetype
|
|
||||||
$.validator.addMethod("accept", function(value, element, param) {
|
|
||||||
// Split mime on commas in case we have multiple types we can accept
|
|
||||||
var typeParam = typeof param === "string" ? param.replace(/\s/g, "").replace(/,/g, "|") : "image/*",
|
|
||||||
optionalValue = this.optional(element),
|
|
||||||
i, file;
|
|
||||||
|
|
||||||
// Element is optional
|
|
||||||
if (optionalValue) {
|
|
||||||
return optionalValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($(element).attr("type") === "file") {
|
|
||||||
// If we are using a wildcard, make it regex friendly
|
|
||||||
typeParam = typeParam.replace(/\*/g, ".*");
|
|
||||||
|
|
||||||
// Check if the element has a FileList before checking each file
|
|
||||||
if (element.files && element.files.length) {
|
|
||||||
for (i = 0; i < element.files.length; i++) {
|
|
||||||
file = element.files[i];
|
|
||||||
|
|
||||||
// Grab the mimetype from the loaded file, verify it matches
|
|
||||||
if (!file.type.match(new RegExp( ".?(" + typeParam + ")$", "i"))) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Either return true because we've validated each file, or because the
|
|
||||||
// browser does not support element.files and the FileList feature
|
|
||||||
return true;
|
|
||||||
}, $.validator.format("Please enter a value with a valid mimetype."));
|
|
||||||
|
|
||||||
$.validator.addMethod("alphanumeric", function(value, element) {
|
|
||||||
return this.optional(element) || /^\w+$/i.test(value);
|
|
||||||
}, "Letters, numbers, and underscores only please");
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Dutch bank account numbers (not 'giro' numbers) have 9 digits
|
|
||||||
* and pass the '11 check'.
|
|
||||||
* We accept the notation with spaces, as that is common.
|
|
||||||
* acceptable: 123456789 or 12 34 56 789
|
|
||||||
*/
|
|
||||||
$.validator.addMethod("bankaccountNL", function(value, element) {
|
|
||||||
if (this.optional(element)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (!(/^[0-9]{9}|([0-9]{2} ){3}[0-9]{3}$/.test(value))) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
// now '11 check'
|
|
||||||
var account = value.replace(/ /g, ""), // remove spaces
|
|
||||||
sum = 0,
|
|
||||||
len = account.length,
|
|
||||||
pos, factor, digit;
|
|
||||||
for ( pos = 0; pos < len; pos++ ) {
|
|
||||||
factor = len - pos;
|
|
||||||
digit = account.substring(pos, pos + 1);
|
|
||||||
sum = sum + factor * digit;
|
|
||||||
}
|
|
||||||
return sum % 11 === 0;
|
|
||||||
}, "Please specify a valid bank account number");
|
|
||||||
|
|
||||||
$.validator.addMethod("bankorgiroaccountNL", function(value, element) {
|
|
||||||
return this.optional(element) ||
|
|
||||||
($.validator.methods.bankaccountNL.call(this, value, element)) ||
|
|
||||||
($.validator.methods.giroaccountNL.call(this, value, element));
|
|
||||||
}, "Please specify a valid bank or giro account number");
|
|
||||||
|
|
||||||
/**
|
|
||||||
* BIC is the business identifier code (ISO 9362). This BIC check is not a guarantee for authenticity.
|
|
||||||
*
|
|
||||||
* BIC pattern: BBBBCCLLbbb (8 or 11 characters long; bbb is optional)
|
|
||||||
*
|
|
||||||
* BIC definition in detail:
|
|
||||||
* - First 4 characters - bank code (only letters)
|
|
||||||
* - Next 2 characters - ISO 3166-1 alpha-2 country code (only letters)
|
|
||||||
* - Next 2 characters - location code (letters and digits)
|
|
||||||
* a. shall not start with '0' or '1'
|
|
||||||
* b. second character must be a letter ('O' is not allowed) or one of the following digits ('0' for test (therefore not allowed), '1' for passive participant and '2' for active participant)
|
|
||||||
* - Last 3 characters - branch code, optional (shall not start with 'X' except in case of 'XXX' for primary office) (letters and digits)
|
|
||||||
*/
|
|
||||||
$.validator.addMethod("bic", function(value, element) {
|
|
||||||
return this.optional( element ) || /^([A-Z]{6}[A-Z2-9][A-NP-Z1-2])(X{3}|[A-WY-Z0-9][A-Z0-9]{2})?$/.test( value );
|
|
||||||
}, "Please specify a valid BIC code");
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Código de identificación fiscal ( CIF ) is the tax identification code for Spanish legal entities
|
|
||||||
* Further rules can be found in Spanish on http://es.wikipedia.org/wiki/C%C3%B3digo_de_identificaci%C3%B3n_fiscal
|
|
||||||
*/
|
|
||||||
$.validator.addMethod( "cifES", function( value ) {
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
var num = [],
|
|
||||||
controlDigit, sum, i, count, tmp, secondDigit;
|
|
||||||
|
|
||||||
value = value.toUpperCase();
|
|
||||||
|
|
||||||
// Quick format test
|
|
||||||
if ( !value.match( "((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)" ) ) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
for ( i = 0; i < 9; i++ ) {
|
|
||||||
num[ i ] = parseInt( value.charAt( i ), 10 );
|
|
||||||
}
|
|
||||||
|
|
||||||
// Algorithm for checking CIF codes
|
|
||||||
sum = num[ 2 ] + num[ 4 ] + num[ 6 ];
|
|
||||||
for ( count = 1; count < 8; count += 2 ) {
|
|
||||||
tmp = ( 2 * num[ count ] ).toString();
|
|
||||||
secondDigit = tmp.charAt( 1 );
|
|
||||||
|
|
||||||
sum += parseInt( tmp.charAt( 0 ), 10 ) + ( secondDigit === "" ? 0 : parseInt( secondDigit, 10 ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
/* The first (position 1) is a letter following the following criteria:
|
|
||||||
* A. Corporations
|
|
||||||
* B. LLCs
|
|
||||||
* C. General partnerships
|
|
||||||
* D. Companies limited partnerships
|
|
||||||
* E. Communities of goods
|
|
||||||
* F. Cooperative Societies
|
|
||||||
* G. Associations
|
|
||||||
* H. Communities of homeowners in horizontal property regime
|
|
||||||
* J. Civil Societies
|
|
||||||
* K. Old format
|
|
||||||
* L. Old format
|
|
||||||
* M. Old format
|
|
||||||
* N. Nonresident entities
|
|
||||||
* P. Local authorities
|
|
||||||
* Q. Autonomous bodies, state or not, and the like, and congregations and religious institutions
|
|
||||||
* R. Congregations and religious institutions (since 2008 ORDER EHA/451/2008)
|
|
||||||
* S. Organs of State Administration and regions
|
|
||||||
* V. Agrarian Transformation
|
|
||||||
* W. Permanent establishments of non-resident in Spain
|
|
||||||
*/
|
|
||||||
if ( /^[ABCDEFGHJNPQRSUVW]{1}/.test( value ) ) {
|
|
||||||
sum += "";
|
|
||||||
controlDigit = 10 - parseInt( sum.charAt( sum.length - 1 ), 10 );
|
|
||||||
value += controlDigit;
|
|
||||||
return ( num[ 8 ].toString() === String.fromCharCode( 64 + controlDigit ) || num[ 8 ].toString() === value.charAt( value.length - 1 ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
|
|
||||||
}, "Please specify a valid CIF number." );
|
|
||||||
|
|
||||||
/* NOTICE: Modified version of Castle.Components.Validator.CreditCardValidator
|
|
||||||
* Redistributed under the the Apache License 2.0 at http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
* Valid Types: mastercard, visa, amex, dinersclub, enroute, discover, jcb, unknown, all (overrides all other settings)
|
|
||||||
*/
|
|
||||||
$.validator.addMethod("creditcardtypes", function(value, element, param) {
|
|
||||||
if (/[^0-9\-]+/.test(value)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
value = value.replace(/\D/g, "");
|
|
||||||
|
|
||||||
var validTypes = 0x0000;
|
|
||||||
|
|
||||||
if (param.mastercard) {
|
|
||||||
validTypes |= 0x0001;
|
|
||||||
}
|
|
||||||
if (param.visa) {
|
|
||||||
validTypes |= 0x0002;
|
|
||||||
}
|
|
||||||
if (param.amex) {
|
|
||||||
validTypes |= 0x0004;
|
|
||||||
}
|
|
||||||
if (param.dinersclub) {
|
|
||||||
validTypes |= 0x0008;
|
|
||||||
}
|
|
||||||
if (param.enroute) {
|
|
||||||
validTypes |= 0x0010;
|
|
||||||
}
|
|
||||||
if (param.discover) {
|
|
||||||
validTypes |= 0x0020;
|
|
||||||
}
|
|
||||||
if (param.jcb) {
|
|
||||||
validTypes |= 0x0040;
|
|
||||||
}
|
|
||||||
if (param.unknown) {
|
|
||||||
validTypes |= 0x0080;
|
|
||||||
}
|
|
||||||
if (param.all) {
|
|
||||||
validTypes = 0x0001 | 0x0002 | 0x0004 | 0x0008 | 0x0010 | 0x0020 | 0x0040 | 0x0080;
|
|
||||||
}
|
|
||||||
if (validTypes & 0x0001 && /^(5[12345])/.test(value)) { //mastercard
|
|
||||||
return value.length === 16;
|
|
||||||
}
|
|
||||||
if (validTypes & 0x0002 && /^(4)/.test(value)) { //visa
|
|
||||||
return value.length === 16;
|
|
||||||
}
|
|
||||||
if (validTypes & 0x0004 && /^(3[47])/.test(value)) { //amex
|
|
||||||
return value.length === 15;
|
|
||||||
}
|
|
||||||
if (validTypes & 0x0008 && /^(3(0[012345]|[68]))/.test(value)) { //dinersclub
|
|
||||||
return value.length === 14;
|
|
||||||
}
|
|
||||||
if (validTypes & 0x0010 && /^(2(014|149))/.test(value)) { //enroute
|
|
||||||
return value.length === 15;
|
|
||||||
}
|
|
||||||
if (validTypes & 0x0020 && /^(6011)/.test(value)) { //discover
|
|
||||||
return value.length === 16;
|
|
||||||
}
|
|
||||||
if (validTypes & 0x0040 && /^(3)/.test(value)) { //jcb
|
|
||||||
return value.length === 16;
|
|
||||||
}
|
|
||||||
if (validTypes & 0x0040 && /^(2131|1800)/.test(value)) { //jcb
|
|
||||||
return value.length === 15;
|
|
||||||
}
|
|
||||||
if (validTypes & 0x0080) { //unknown
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}, "Please enter a valid credit card number.");
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Validates currencies with any given symbols by @jameslouiz
|
|
||||||
* Symbols can be optional or required. Symbols required by default
|
|
||||||
*
|
|
||||||
* Usage examples:
|
|
||||||
* currency: ["£", false] - Use false for soft currency validation
|
|
||||||
* currency: ["$", false]
|
|
||||||
* currency: ["RM", false] - also works with text based symbols such as "RM" - Malaysia Ringgit etc
|
|
||||||
*
|
|
||||||
* <input class="currencyInput" name="currencyInput">
|
|
||||||
*
|
|
||||||
* Soft symbol checking
|
|
||||||
* currencyInput: {
|
|
||||||
* currency: ["$", false]
|
|
||||||
* }
|
|
||||||
*
|
|
||||||
* Strict symbol checking (default)
|
|
||||||
* currencyInput: {
|
|
||||||
* currency: "$"
|
|
||||||
* //OR
|
|
||||||
* currency: ["$", true]
|
|
||||||
* }
|
|
||||||
*
|
|
||||||
* Multiple Symbols
|
|
||||||
* currencyInput: {
|
|
||||||
* currency: "$,£,¢"
|
|
||||||
* }
|
|
||||||
*/
|
|
||||||
$.validator.addMethod("currency", function(value, element, param) {
|
|
||||||
var isParamString = typeof param === "string",
|
|
||||||
symbol = isParamString ? param : param[0],
|
|
||||||
soft = isParamString ? true : param[1],
|
|
||||||
regex;
|
|
||||||
|
|
||||||
symbol = symbol.replace(/,/g, "");
|
|
||||||
symbol = soft ? symbol + "]" : symbol + "]?";
|
|
||||||
regex = "^[" + symbol + "([1-9]{1}[0-9]{0,2}(\\,[0-9]{3})*(\\.[0-9]{0,2})?|[1-9]{1}[0-9]{0,}(\\.[0-9]{0,2})?|0(\\.[0-9]{0,2})?|(\\.[0-9]{1,2})?)$";
|
|
||||||
regex = new RegExp(regex);
|
|
||||||
return this.optional(element) || regex.test(value);
|
|
||||||
|
|
||||||
}, "Please specify a valid currency");
|
|
||||||
|
|
||||||
$.validator.addMethod("dateFA", function(value, element) {
|
|
||||||
return this.optional(element) || /^[1-4]\d{3}\/((0?[1-6]\/((3[0-1])|([1-2][0-9])|(0?[1-9])))|((1[0-2]|(0?[7-9]))\/(30|([1-2][0-9])|(0?[1-9]))))$/.test(value);
|
|
||||||
}, "Please enter a correct date");
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return true, if the value is a valid date, also making this formal check dd/mm/yyyy.
|
|
||||||
*
|
|
||||||
* @example $.validator.methods.date("01/01/1900")
|
|
||||||
* @result true
|
|
||||||
*
|
|
||||||
* @example $.validator.methods.date("01/13/1990")
|
|
||||||
* @result false
|
|
||||||
*
|
|
||||||
* @example $.validator.methods.date("01.01.1900")
|
|
||||||
* @result false
|
|
||||||
*
|
|
||||||
* @example <input name="pippo" class="{dateITA:true}" />
|
|
||||||
* @desc Declares an optional input element whose value must be a valid date.
|
|
||||||
*
|
|
||||||
* @name $.validator.methods.dateITA
|
|
||||||
* @type Boolean
|
|
||||||
* @cat Plugins/Validate/Methods
|
|
||||||
*/
|
|
||||||
$.validator.addMethod("dateITA", function(value, element) {
|
|
||||||
var check = false,
|
|
||||||
re = /^\d{1,2}\/\d{1,2}\/\d{4}$/,
|
|
||||||
adata, gg, mm, aaaa, xdata;
|
|
||||||
if ( re.test(value)) {
|
|
||||||
adata = value.split("/");
|
|
||||||
gg = parseInt(adata[0], 10);
|
|
||||||
mm = parseInt(adata[1], 10);
|
|
||||||
aaaa = parseInt(adata[2], 10);
|
|
||||||
xdata = new Date(Date.UTC(aaaa, mm - 1, gg, 12, 0, 0, 0));
|
|
||||||
if ( ( xdata.getUTCFullYear() === aaaa ) && ( xdata.getUTCMonth () === mm - 1 ) && ( xdata.getUTCDate() === gg ) ) {
|
|
||||||
check = true;
|
|
||||||
} else {
|
|
||||||
check = false;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
check = false;
|
|
||||||
}
|
|
||||||
return this.optional(element) || check;
|
|
||||||
}, "Please enter a correct date");
|
|
||||||
|
|
||||||
$.validator.addMethod("dateNL", function(value, element) {
|
|
||||||
return this.optional(element) || /^(0?[1-9]|[12]\d|3[01])[\.\/\-](0?[1-9]|1[012])[\.\/\-]([12]\d)?(\d\d)$/.test(value);
|
|
||||||
}, "Please enter a correct date");
|
|
||||||
|
|
||||||
// Older "accept" file extension method. Old docs: http://docs.jquery.com/Plugins/Validation/Methods/accept
|
|
||||||
$.validator.addMethod("extension", function(value, element, param) {
|
|
||||||
param = typeof param === "string" ? param.replace(/,/g, "|") : "png|jpe?g|gif";
|
|
||||||
return this.optional(element) || value.match(new RegExp(".(" + param + ")$", "i"));
|
|
||||||
}, $.validator.format("Please enter a value with a valid extension."));
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Dutch giro account numbers (not bank numbers) have max 7 digits
|
|
||||||
*/
|
|
||||||
$.validator.addMethod("giroaccountNL", function(value, element) {
|
|
||||||
return this.optional(element) || /^[0-9]{1,7}$/.test(value);
|
|
||||||
}, "Please specify a valid giro account number");
|
|
||||||
|
|
||||||
/**
|
|
||||||
* IBAN is the international bank account number.
|
|
||||||
* It has a country - specific format, that is checked here too
|
|
||||||
*/
|
|
||||||
$.validator.addMethod("iban", function(value, element) {
|
|
||||||
// some quick simple tests to prevent needless work
|
|
||||||
if (this.optional(element)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// remove spaces and to upper case
|
|
||||||
var iban = value.replace(/ /g, "").toUpperCase(),
|
|
||||||
ibancheckdigits = "",
|
|
||||||
leadingZeroes = true,
|
|
||||||
cRest = "",
|
|
||||||
cOperator = "",
|
|
||||||
countrycode, ibancheck, charAt, cChar, bbanpattern, bbancountrypatterns, ibanregexp, i, p;
|
|
||||||
|
|
||||||
if (!(/^([a-zA-Z0-9]{4} ){2,8}[a-zA-Z0-9]{1,4}|[a-zA-Z0-9]{12,34}$/.test(iban))) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// check the country code and find the country specific format
|
|
||||||
countrycode = iban.substring(0, 2);
|
|
||||||
bbancountrypatterns = {
|
|
||||||
"AL": "\\d{8}[\\dA-Z]{16}",
|
|
||||||
"AD": "\\d{8}[\\dA-Z]{12}",
|
|
||||||
"AT": "\\d{16}",
|
|
||||||
"AZ": "[\\dA-Z]{4}\\d{20}",
|
|
||||||
"BE": "\\d{12}",
|
|
||||||
"BH": "[A-Z]{4}[\\dA-Z]{14}",
|
|
||||||
"BA": "\\d{16}",
|
|
||||||
"BR": "\\d{23}[A-Z][\\dA-Z]",
|
|
||||||
"BG": "[A-Z]{4}\\d{6}[\\dA-Z]{8}",
|
|
||||||
"CR": "\\d{17}",
|
|
||||||
"HR": "\\d{17}",
|
|
||||||
"CY": "\\d{8}[\\dA-Z]{16}",
|
|
||||||
"CZ": "\\d{20}",
|
|
||||||
"DK": "\\d{14}",
|
|
||||||
"DO": "[A-Z]{4}\\d{20}",
|
|
||||||
"EE": "\\d{16}",
|
|
||||||
"FO": "\\d{14}",
|
|
||||||
"FI": "\\d{14}",
|
|
||||||
"FR": "\\d{10}[\\dA-Z]{11}\\d{2}",
|
|
||||||
"GE": "[\\dA-Z]{2}\\d{16}",
|
|
||||||
"DE": "\\d{18}",
|
|
||||||
"GI": "[A-Z]{4}[\\dA-Z]{15}",
|
|
||||||
"GR": "\\d{7}[\\dA-Z]{16}",
|
|
||||||
"GL": "\\d{14}",
|
|
||||||
"GT": "[\\dA-Z]{4}[\\dA-Z]{20}",
|
|
||||||
"HU": "\\d{24}",
|
|
||||||
"IS": "\\d{22}",
|
|
||||||
"IE": "[\\dA-Z]{4}\\d{14}",
|
|
||||||
"IL": "\\d{19}",
|
|
||||||
"IT": "[A-Z]\\d{10}[\\dA-Z]{12}",
|
|
||||||
"KZ": "\\d{3}[\\dA-Z]{13}",
|
|
||||||
"KW": "[A-Z]{4}[\\dA-Z]{22}",
|
|
||||||
"LV": "[A-Z]{4}[\\dA-Z]{13}",
|
|
||||||
"LB": "\\d{4}[\\dA-Z]{20}",
|
|
||||||
"LI": "\\d{5}[\\dA-Z]{12}",
|
|
||||||
"LT": "\\d{16}",
|
|
||||||
"LU": "\\d{3}[\\dA-Z]{13}",
|
|
||||||
"MK": "\\d{3}[\\dA-Z]{10}\\d{2}",
|
|
||||||
"MT": "[A-Z]{4}\\d{5}[\\dA-Z]{18}",
|
|
||||||
"MR": "\\d{23}",
|
|
||||||
"MU": "[A-Z]{4}\\d{19}[A-Z]{3}",
|
|
||||||
"MC": "\\d{10}[\\dA-Z]{11}\\d{2}",
|
|
||||||
"MD": "[\\dA-Z]{2}\\d{18}",
|
|
||||||
"ME": "\\d{18}",
|
|
||||||
"NL": "[A-Z]{4}\\d{10}",
|
|
||||||
"NO": "\\d{11}",
|
|
||||||
"PK": "[\\dA-Z]{4}\\d{16}",
|
|
||||||
"PS": "[\\dA-Z]{4}\\d{21}",
|
|
||||||
"PL": "\\d{24}",
|
|
||||||
"PT": "\\d{21}",
|
|
||||||
"RO": "[A-Z]{4}[\\dA-Z]{16}",
|
|
||||||
"SM": "[A-Z]\\d{10}[\\dA-Z]{12}",
|
|
||||||
"SA": "\\d{2}[\\dA-Z]{18}",
|
|
||||||
"RS": "\\d{18}",
|
|
||||||
"SK": "\\d{20}",
|
|
||||||
"SI": "\\d{15}",
|
|
||||||
"ES": "\\d{20}",
|
|
||||||
"SE": "\\d{20}",
|
|
||||||
"CH": "\\d{5}[\\dA-Z]{12}",
|
|
||||||
"TN": "\\d{20}",
|
|
||||||
"TR": "\\d{5}[\\dA-Z]{17}",
|
|
||||||
"AE": "\\d{3}\\d{16}",
|
|
||||||
"GB": "[A-Z]{4}\\d{14}",
|
|
||||||
"VG": "[\\dA-Z]{4}\\d{16}"
|
|
||||||
};
|
|
||||||
|
|
||||||
bbanpattern = bbancountrypatterns[countrycode];
|
|
||||||
// As new countries will start using IBAN in the
|
|
||||||
// future, we only check if the countrycode is known.
|
|
||||||
// This prevents false negatives, while almost all
|
|
||||||
// false positives introduced by this, will be caught
|
|
||||||
// by the checksum validation below anyway.
|
|
||||||
// Strict checking should return FALSE for unknown
|
|
||||||
// countries.
|
|
||||||
if (typeof bbanpattern !== "undefined") {
|
|
||||||
ibanregexp = new RegExp("^[A-Z]{2}\\d{2}" + bbanpattern + "$", "");
|
|
||||||
if (!(ibanregexp.test(iban))) {
|
|
||||||
return false; // invalid country specific format
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// now check the checksum, first convert to digits
|
|
||||||
ibancheck = iban.substring(4, iban.length) + iban.substring(0, 4);
|
|
||||||
for (i = 0; i < ibancheck.length; i++) {
|
|
||||||
charAt = ibancheck.charAt(i);
|
|
||||||
if (charAt !== "0") {
|
|
||||||
leadingZeroes = false;
|
|
||||||
}
|
|
||||||
if (!leadingZeroes) {
|
|
||||||
ibancheckdigits += "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".indexOf(charAt);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// calculate the result of: ibancheckdigits % 97
|
|
||||||
for (p = 0; p < ibancheckdigits.length; p++) {
|
|
||||||
cChar = ibancheckdigits.charAt(p);
|
|
||||||
cOperator = "" + cRest + "" + cChar;
|
|
||||||
cRest = cOperator % 97;
|
|
||||||
}
|
|
||||||
return cRest === 1;
|
|
||||||
}, "Please specify a valid IBAN");
|
|
||||||
|
|
||||||
$.validator.addMethod("integer", function(value, element) {
|
|
||||||
return this.optional(element) || /^-?\d+$/.test(value);
|
|
||||||
}, "A positive or negative non-decimal number please");
|
|
||||||
|
|
||||||
$.validator.addMethod("ipv4", function(value, element) {
|
|
||||||
return this.optional(element) || /^(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)$/i.test(value);
|
|
||||||
}, "Please enter a valid IP v4 address.");
|
|
||||||
|
|
||||||
$.validator.addMethod("ipv6", function(value, element) {
|
|
||||||
return this.optional(element) || /^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i.test(value);
|
|
||||||
}, "Please enter a valid IP v6 address.");
|
|
||||||
|
|
||||||
$.validator.addMethod("lettersonly", function(value, element) {
|
|
||||||
return this.optional(element) || /^[a-z]+$/i.test(value);
|
|
||||||
}, "Letters only please");
|
|
||||||
|
|
||||||
$.validator.addMethod("letterswithbasicpunc", function(value, element) {
|
|
||||||
return this.optional(element) || /^[a-z\-.,()'"\s]+$/i.test(value);
|
|
||||||
}, "Letters or punctuation only please");
|
|
||||||
|
|
||||||
$.validator.addMethod("mobileNL", function(value, element) {
|
|
||||||
return this.optional(element) || /^((\+|00(\s|\s?\-\s?)?)31(\s|\s?\-\s?)?(\(0\)[\-\s]?)?|0)6((\s|\s?\-\s?)?[0-9]){8}$/.test(value);
|
|
||||||
}, "Please specify a valid mobile number");
|
|
||||||
|
|
||||||
/* For UK phone functions, do the following server side processing:
|
|
||||||
* Compare original input with this RegEx pattern:
|
|
||||||
* ^\(?(?:(?:00\)?[\s\-]?\(?|\+)(44)\)?[\s\-]?\(?(?:0\)?[\s\-]?\(?)?|0)([1-9]\d{1,4}\)?[\s\d\-]+)$
|
|
||||||
* Extract $1 and set $prefix to '+44<space>' if $1 is '44', otherwise set $prefix to '0'
|
|
||||||
* Extract $2 and remove hyphens, spaces and parentheses. Phone number is combined $prefix and $2.
|
|
||||||
* A number of very detailed GB telephone number RegEx patterns can also be found at:
|
|
||||||
* http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_GB_Telephone_Numbers
|
|
||||||
*/
|
|
||||||
$.validator.addMethod("mobileUK", function(phone_number, element) {
|
|
||||||
phone_number = phone_number.replace(/\(|\)|\s+|-/g, "");
|
|
||||||
return this.optional(element) || phone_number.length > 9 &&
|
|
||||||
phone_number.match(/^(?:(?:(?:00\s?|\+)44\s?|0)7(?:[1345789]\d{2}|624)\s?\d{3}\s?\d{3})$/);
|
|
||||||
}, "Please specify a valid mobile number");
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The número de identidad de extranjero ( NIE )is a code used to identify the non-nationals in Spain
|
|
||||||
*/
|
|
||||||
$.validator.addMethod( "nieES", function( value ) {
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
value = value.toUpperCase();
|
|
||||||
|
|
||||||
// Basic format test
|
|
||||||
if ( !value.match( "((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)" ) ) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Test NIE
|
|
||||||
//T
|
|
||||||
if ( /^[T]{1}/.test( value ) ) {
|
|
||||||
return ( value[ 8 ] === /^[T]{1}[A-Z0-9]{8}$/.test( value ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
//XYZ
|
|
||||||
if ( /^[XYZ]{1}/.test( value ) ) {
|
|
||||||
return (
|
|
||||||
value[ 8 ] === "TRWAGMYFPDXBNJZSQVHLCKE".charAt(
|
|
||||||
value.replace( "X", "0" )
|
|
||||||
.replace( "Y", "1" )
|
|
||||||
.replace( "Z", "2" )
|
|
||||||
.substring( 0, 8 ) % 23
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
|
|
||||||
}, "Please specify a valid NIE number." );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The Número de Identificación Fiscal ( NIF ) is the way tax identification used in Spain for individuals
|
|
||||||
*/
|
|
||||||
$.validator.addMethod( "nifES", function( value ) {
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
value = value.toUpperCase();
|
|
||||||
|
|
||||||
// Basic format test
|
|
||||||
if ( !value.match("((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)") ) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Test NIF
|
|
||||||
if ( /^[0-9]{8}[A-Z]{1}$/.test( value ) ) {
|
|
||||||
return ( "TRWAGMYFPDXBNJZSQVHLCKE".charAt( value.substring( 8, 0 ) % 23 ) === value.charAt( 8 ) );
|
|
||||||
}
|
|
||||||
// Test specials NIF (starts with K, L or M)
|
|
||||||
if ( /^[KLM]{1}/.test( value ) ) {
|
|
||||||
return ( value[ 8 ] === String.fromCharCode( 64 ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
|
|
||||||
}, "Please specify a valid NIF number." );
|
|
||||||
|
|
||||||
$.validator.addMethod("nowhitespace", function(value, element) {
|
|
||||||
return this.optional(element) || /^\S+$/i.test(value);
|
|
||||||
}, "No white space please");
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return true if the field value matches the given format RegExp
|
|
||||||
*
|
|
||||||
* @example $.validator.methods.pattern("AR1004",element,/^AR\d{4}$/)
|
|
||||||
* @result true
|
|
||||||
*
|
|
||||||
* @example $.validator.methods.pattern("BR1004",element,/^AR\d{4}$/)
|
|
||||||
* @result false
|
|
||||||
*
|
|
||||||
* @name $.validator.methods.pattern
|
|
||||||
* @type Boolean
|
|
||||||
* @cat Plugins/Validate/Methods
|
|
||||||
*/
|
|
||||||
$.validator.addMethod("pattern", function(value, element, param) {
|
|
||||||
if (this.optional(element)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (typeof param === "string") {
|
|
||||||
param = new RegExp("^(?:" + param + ")$");
|
|
||||||
}
|
|
||||||
return param.test(value);
|
|
||||||
}, "Invalid format.");
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Dutch phone numbers have 10 digits (or 11 and start with +31).
|
|
||||||
*/
|
|
||||||
$.validator.addMethod("phoneNL", function(value, element) {
|
|
||||||
return this.optional(element) || /^((\+|00(\s|\s?\-\s?)?)31(\s|\s?\-\s?)?(\(0\)[\-\s]?)?|0)[1-9]((\s|\s?\-\s?)?[0-9]){8}$/.test(value);
|
|
||||||
}, "Please specify a valid phone number.");
|
|
||||||
|
|
||||||
/* For UK phone functions, do the following server side processing:
|
|
||||||
* Compare original input with this RegEx pattern:
|
|
||||||
* ^\(?(?:(?:00\)?[\s\-]?\(?|\+)(44)\)?[\s\-]?\(?(?:0\)?[\s\-]?\(?)?|0)([1-9]\d{1,4}\)?[\s\d\-]+)$
|
|
||||||
* Extract $1 and set $prefix to '+44<space>' if $1 is '44', otherwise set $prefix to '0'
|
|
||||||
* Extract $2 and remove hyphens, spaces and parentheses. Phone number is combined $prefix and $2.
|
|
||||||
* A number of very detailed GB telephone number RegEx patterns can also be found at:
|
|
||||||
* http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_GB_Telephone_Numbers
|
|
||||||
*/
|
|
||||||
$.validator.addMethod("phoneUK", function(phone_number, element) {
|
|
||||||
phone_number = phone_number.replace(/\(|\)|\s+|-/g, "");
|
|
||||||
return this.optional(element) || phone_number.length > 9 &&
|
|
||||||
phone_number.match(/^(?:(?:(?:00\s?|\+)44\s?)|(?:\(?0))(?:\d{2}\)?\s?\d{4}\s?\d{4}|\d{3}\)?\s?\d{3}\s?\d{3,4}|\d{4}\)?\s?(?:\d{5}|\d{3}\s?\d{3})|\d{5}\)?\s?\d{4,5})$/);
|
|
||||||
}, "Please specify a valid phone number");
|
|
||||||
|
|
||||||
/**
|
|
||||||
* matches US phone number format
|
|
||||||
*
|
|
||||||
* where the area code may not start with 1 and the prefix may not start with 1
|
|
||||||
* allows '-' or ' ' as a separator and allows parens around area code
|
|
||||||
* some people may want to put a '1' in front of their number
|
|
||||||
*
|
|
||||||
* 1(212)-999-2345 or
|
|
||||||
* 212 999 2344 or
|
|
||||||
* 212-999-0983
|
|
||||||
*
|
|
||||||
* but not
|
|
||||||
* 111-123-5434
|
|
||||||
* and not
|
|
||||||
* 212 123 4567
|
|
||||||
*/
|
|
||||||
$.validator.addMethod("phoneUS", function(phone_number, element) {
|
|
||||||
phone_number = phone_number.replace(/\s+/g, "");
|
|
||||||
return this.optional(element) || phone_number.length > 9 &&
|
|
||||||
phone_number.match(/^(\+?1-?)?(\([2-9]([02-9]\d|1[02-9])\)|[2-9]([02-9]\d|1[02-9]))-?[2-9]([02-9]\d|1[02-9])-?\d{4}$/);
|
|
||||||
}, "Please specify a valid phone number");
|
|
||||||
|
|
||||||
/* For UK phone functions, do the following server side processing:
|
|
||||||
* Compare original input with this RegEx pattern:
|
|
||||||
* ^\(?(?:(?:00\)?[\s\-]?\(?|\+)(44)\)?[\s\-]?\(?(?:0\)?[\s\-]?\(?)?|0)([1-9]\d{1,4}\)?[\s\d\-]+)$
|
|
||||||
* Extract $1 and set $prefix to '+44<space>' if $1 is '44', otherwise set $prefix to '0'
|
|
||||||
* Extract $2 and remove hyphens, spaces and parentheses. Phone number is combined $prefix and $2.
|
|
||||||
* A number of very detailed GB telephone number RegEx patterns can also be found at:
|
|
||||||
* http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_GB_Telephone_Numbers
|
|
||||||
*/
|
|
||||||
//Matches UK landline + mobile, accepting only 01-3 for landline or 07 for mobile to exclude many premium numbers
|
|
||||||
$.validator.addMethod("phonesUK", function(phone_number, element) {
|
|
||||||
phone_number = phone_number.replace(/\(|\)|\s+|-/g, "");
|
|
||||||
return this.optional(element) || phone_number.length > 9 &&
|
|
||||||
phone_number.match(/^(?:(?:(?:00\s?|\+)44\s?|0)(?:1\d{8,9}|[23]\d{9}|7(?:[1345789]\d{8}|624\d{6})))$/);
|
|
||||||
}, "Please specify a valid uk phone number");
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Matches a valid Canadian Postal Code
|
|
||||||
*
|
|
||||||
* @example jQuery.validator.methods.postalCodeCA( "H0H 0H0", element )
|
|
||||||
* @result true
|
|
||||||
*
|
|
||||||
* @example jQuery.validator.methods.postalCodeCA( "H0H0H0", element )
|
|
||||||
* @result false
|
|
||||||
*
|
|
||||||
* @name jQuery.validator.methods.postalCodeCA
|
|
||||||
* @type Boolean
|
|
||||||
* @cat Plugins/Validate/Methods
|
|
||||||
*/
|
|
||||||
$.validator.addMethod( "postalCodeCA", function( value, element ) {
|
|
||||||
return this.optional( element ) || /^[ABCEGHJKLMNPRSTVXY]\d[A-Z] \d[A-Z]\d$/.test( value );
|
|
||||||
}, "Please specify a valid postal code" );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Valida CEPs do brasileiros:
|
|
||||||
*
|
|
||||||
* Formatos aceitos:
|
|
||||||
* 99999-999
|
|
||||||
* 99.999-999
|
|
||||||
* 99999999
|
|
||||||
*/
|
|
||||||
$.validator.addMethod("postalcodeBR", function(cep_value, element) {
|
|
||||||
return this.optional(element) || /^\d{2}.\d{3}-\d{3}?$|^\d{5}-?\d{3}?$/.test( cep_value );
|
|
||||||
}, "Informe um CEP válido.");
|
|
||||||
|
|
||||||
/* Matches Italian postcode (CAP) */
|
|
||||||
$.validator.addMethod("postalcodeIT", function(value, element) {
|
|
||||||
return this.optional(element) || /^\d{5}$/.test(value);
|
|
||||||
}, "Please specify a valid postal code");
|
|
||||||
|
|
||||||
$.validator.addMethod("postalcodeNL", function(value, element) {
|
|
||||||
return this.optional(element) || /^[1-9][0-9]{3}\s?[a-zA-Z]{2}$/.test(value);
|
|
||||||
}, "Please specify a valid postal code");
|
|
||||||
|
|
||||||
// Matches UK postcode. Does not match to UK Channel Islands that have their own postcodes (non standard UK)
|
|
||||||
$.validator.addMethod("postcodeUK", function(value, element) {
|
|
||||||
return this.optional(element) || /^((([A-PR-UWYZ][0-9])|([A-PR-UWYZ][0-9][0-9])|([A-PR-UWYZ][A-HK-Y][0-9])|([A-PR-UWYZ][A-HK-Y][0-9][0-9])|([A-PR-UWYZ][0-9][A-HJKSTUW])|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY]))\s?([0-9][ABD-HJLNP-UW-Z]{2})|(GIR)\s?(0AA))$/i.test(value);
|
|
||||||
}, "Please specify a valid UK postcode");
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Lets you say "at least X inputs that match selector Y must be filled."
|
|
||||||
*
|
|
||||||
* The end result is that neither of these inputs:
|
|
||||||
*
|
|
||||||
* <input class="productinfo" name="partnumber">
|
|
||||||
* <input class="productinfo" name="description">
|
|
||||||
*
|
|
||||||
* ...will validate unless at least one of them is filled.
|
|
||||||
*
|
|
||||||
* partnumber: {require_from_group: [1,".productinfo"]},
|
|
||||||
* description: {require_from_group: [1,".productinfo"]}
|
|
||||||
*
|
|
||||||
* options[0]: number of fields that must be filled in the group
|
|
||||||
* options[1]: CSS selector that defines the group of conditionally required fields
|
|
||||||
*/
|
|
||||||
$.validator.addMethod("require_from_group", function(value, element, options) {
|
|
||||||
var $fields = $(options[1], element.form),
|
|
||||||
$fieldsFirst = $fields.eq(0),
|
|
||||||
validator = $fieldsFirst.data("valid_req_grp") ? $fieldsFirst.data("valid_req_grp") : $.extend({}, this),
|
|
||||||
isValid = $fields.filter(function() {
|
|
||||||
return validator.elementValue(this);
|
|
||||||
}).length >= options[0];
|
|
||||||
|
|
||||||
// Store the cloned validator for future validation
|
|
||||||
$fieldsFirst.data("valid_req_grp", validator);
|
|
||||||
|
|
||||||
// If element isn't being validated, run each require_from_group field's validation rules
|
|
||||||
if (!$(element).data("being_validated")) {
|
|
||||||
$fields.data("being_validated", true);
|
|
||||||
$fields.each(function() {
|
|
||||||
validator.element(this);
|
|
||||||
});
|
|
||||||
$fields.data("being_validated", false);
|
|
||||||
}
|
|
||||||
return isValid;
|
|
||||||
}, $.validator.format("Please fill at least {0} of these fields."));
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Lets you say "either at least X inputs that match selector Y must be filled,
|
|
||||||
* OR they must all be skipped (left blank)."
|
|
||||||
*
|
|
||||||
* The end result, is that none of these inputs:
|
|
||||||
*
|
|
||||||
* <input class="productinfo" name="partnumber">
|
|
||||||
* <input class="productinfo" name="description">
|
|
||||||
* <input class="productinfo" name="color">
|
|
||||||
*
|
|
||||||
* ...will validate unless either at least two of them are filled,
|
|
||||||
* OR none of them are.
|
|
||||||
*
|
|
||||||
* partnumber: {skip_or_fill_minimum: [2,".productinfo"]},
|
|
||||||
* description: {skip_or_fill_minimum: [2,".productinfo"]},
|
|
||||||
* color: {skip_or_fill_minimum: [2,".productinfo"]}
|
|
||||||
*
|
|
||||||
* options[0]: number of fields that must be filled in the group
|
|
||||||
* options[1]: CSS selector that defines the group of conditionally required fields
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
$.validator.addMethod("skip_or_fill_minimum", function(value, element, options) {
|
|
||||||
var $fields = $(options[1], element.form),
|
|
||||||
$fieldsFirst = $fields.eq(0),
|
|
||||||
validator = $fieldsFirst.data("valid_skip") ? $fieldsFirst.data("valid_skip") : $.extend({}, this),
|
|
||||||
numberFilled = $fields.filter(function() {
|
|
||||||
return validator.elementValue(this);
|
|
||||||
}).length,
|
|
||||||
isValid = numberFilled === 0 || numberFilled >= options[0];
|
|
||||||
|
|
||||||
// Store the cloned validator for future validation
|
|
||||||
$fieldsFirst.data("valid_skip", validator);
|
|
||||||
|
|
||||||
// If element isn't being validated, run each skip_or_fill_minimum field's validation rules
|
|
||||||
if (!$(element).data("being_validated")) {
|
|
||||||
$fields.data("being_validated", true);
|
|
||||||
$fields.each(function() {
|
|
||||||
validator.element(this);
|
|
||||||
});
|
|
||||||
$fields.data("being_validated", false);
|
|
||||||
}
|
|
||||||
return isValid;
|
|
||||||
}, $.validator.format("Please either skip these fields or fill at least {0} of them."));
|
|
||||||
|
|
||||||
/* Validates US States and/or Territories by @jdforsythe
|
|
||||||
* Can be case insensitive or require capitalization - default is case insensitive
|
|
||||||
* Can include US Territories or not - default does not
|
|
||||||
* Can include US Military postal abbreviations (AA, AE, AP) - default does not
|
|
||||||
*
|
|
||||||
* Note: "States" always includes DC (District of Colombia)
|
|
||||||
*
|
|
||||||
* Usage examples:
|
|
||||||
*
|
|
||||||
* This is the default - case insensitive, no territories, no military zones
|
|
||||||
* stateInput: {
|
|
||||||
* caseSensitive: false,
|
|
||||||
* includeTerritories: false,
|
|
||||||
* includeMilitary: false
|
|
||||||
* }
|
|
||||||
*
|
|
||||||
* Only allow capital letters, no territories, no military zones
|
|
||||||
* stateInput: {
|
|
||||||
* caseSensitive: false
|
|
||||||
* }
|
|
||||||
*
|
|
||||||
* Case insensitive, include territories but not military zones
|
|
||||||
* stateInput: {
|
|
||||||
* includeTerritories: true
|
|
||||||
* }
|
|
||||||
*
|
|
||||||
* Only allow capital letters, include territories and military zones
|
|
||||||
* stateInput: {
|
|
||||||
* caseSensitive: true,
|
|
||||||
* includeTerritories: true,
|
|
||||||
* includeMilitary: true
|
|
||||||
* }
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
jQuery.validator.addMethod("stateUS", function(value, element, options) {
|
|
||||||
var isDefault = typeof options === "undefined",
|
|
||||||
caseSensitive = ( isDefault || typeof options.caseSensitive === "undefined" ) ? false : options.caseSensitive,
|
|
||||||
includeTerritories = ( isDefault || typeof options.includeTerritories === "undefined" ) ? false : options.includeTerritories,
|
|
||||||
includeMilitary = ( isDefault || typeof options.includeMilitary === "undefined" ) ? false : options.includeMilitary,
|
|
||||||
regex;
|
|
||||||
|
|
||||||
if (!includeTerritories && !includeMilitary) {
|
|
||||||
regex = "^(A[KLRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])$";
|
|
||||||
} else if (includeTerritories && includeMilitary) {
|
|
||||||
regex = "^(A[AEKLPRSZ]|C[AOT]|D[CE]|FL|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEINOPST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$";
|
|
||||||
} else if (includeTerritories) {
|
|
||||||
regex = "^(A[KLRSZ]|C[AOT]|D[CE]|FL|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEINOPST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$";
|
|
||||||
} else {
|
|
||||||
regex = "^(A[AEKLPRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])$";
|
|
||||||
}
|
|
||||||
|
|
||||||
regex = caseSensitive ? new RegExp(regex) : new RegExp(regex, "i");
|
|
||||||
return this.optional(element) || regex.test(value);
|
|
||||||
},
|
|
||||||
"Please specify a valid state");
|
|
||||||
|
|
||||||
// TODO check if value starts with <, otherwise don't try stripping anything
|
|
||||||
$.validator.addMethod("strippedminlength", function(value, element, param) {
|
|
||||||
return $(value).text().length >= param;
|
|
||||||
}, $.validator.format("Please enter at least {0} characters"));
|
|
||||||
|
|
||||||
$.validator.addMethod("time", function(value, element) {
|
|
||||||
return this.optional(element) || /^([01]\d|2[0-3])(:[0-5]\d){1,2}$/.test(value);
|
|
||||||
}, "Please enter a valid time, between 00:00 and 23:59");
|
|
||||||
|
|
||||||
$.validator.addMethod("time12h", function(value, element) {
|
|
||||||
return this.optional(element) || /^((0?[1-9]|1[012])(:[0-5]\d){1,2}(\ ?[AP]M))$/i.test(value);
|
|
||||||
}, "Please enter a valid time in 12-hour am/pm format");
|
|
||||||
|
|
||||||
// same as url, but TLD is optional
|
|
||||||
$.validator.addMethod("url2", function(value, element) {
|
|
||||||
return this.optional(element) || /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)*(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value);
|
|
||||||
}, $.validator.messages.url);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return true, if the value is a valid vehicle identification number (VIN).
|
|
||||||
*
|
|
||||||
* Works with all kind of text inputs.
|
|
||||||
*
|
|
||||||
* @example <input type="text" size="20" name="VehicleID" class="{required:true,vinUS:true}" />
|
|
||||||
* @desc Declares a required input element whose value must be a valid vehicle identification number.
|
|
||||||
*
|
|
||||||
* @name $.validator.methods.vinUS
|
|
||||||
* @type Boolean
|
|
||||||
* @cat Plugins/Validate/Methods
|
|
||||||
*/
|
|
||||||
$.validator.addMethod("vinUS", function(v) {
|
|
||||||
if (v.length !== 17) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
var LL = [ "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" ],
|
|
||||||
VL = [ 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 7, 9, 2, 3, 4, 5, 6, 7, 8, 9 ],
|
|
||||||
FL = [ 8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2 ],
|
|
||||||
rs = 0,
|
|
||||||
i, n, d, f, cd, cdv;
|
|
||||||
|
|
||||||
for (i = 0; i < 17; i++) {
|
|
||||||
f = FL[i];
|
|
||||||
d = v.slice(i, i + 1);
|
|
||||||
if (i === 8) {
|
|
||||||
cdv = d;
|
|
||||||
}
|
|
||||||
if (!isNaN(d)) {
|
|
||||||
d *= f;
|
|
||||||
} else {
|
|
||||||
for (n = 0; n < LL.length; n++) {
|
|
||||||
if (d.toUpperCase() === LL[n]) {
|
|
||||||
d = VL[n];
|
|
||||||
d *= f;
|
|
||||||
if (isNaN(cdv) && n === 8) {
|
|
||||||
cdv = LL[n];
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
rs += d;
|
|
||||||
}
|
|
||||||
cd = rs % 11;
|
|
||||||
if (cd === 10) {
|
|
||||||
cd = "X";
|
|
||||||
}
|
|
||||||
if (cd === cdv) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}, "The specified vehicle identification number (VIN) is invalid.");
|
|
||||||
|
|
||||||
$.validator.addMethod("zipcodeUS", function(value, element) {
|
|
||||||
return this.optional(element) || /^\d{5}(-\d{4})?$/.test(value);
|
|
||||||
}, "The specified US ZIP Code is invalid");
|
|
||||||
|
|
||||||
$.validator.addMethod("ziprange", function(value, element) {
|
|
||||||
return this.optional(element) || /^90[2-5]\d\{2\}-\d{4}$/.test(value);
|
|
||||||
}, "Your ZIP-code must be in the range 902xx-xxxx to 905xx-xxxx");
|
|
||||||
|
|
||||||
}));
|
|
@ -1,4 +0,0 @@
|
|||||||
/*! jQuery Validation Plugin - v1.13.1 - 10/14/2014
|
|
||||||
* http://jqueryvalidation.org/
|
|
||||||
* Copyright (c) 2014 Jörn Zaefferer; Licensed MIT */
|
|
||||||
!function(a){"function"==typeof define&&define.amd?define(["jquery","./jquery.validate.min"],a):a(jQuery)}(function(a){!function(){function b(a){return a.replace(/<.[^<>]*?>/g," ").replace(/ | /gi," ").replace(/[.(),;:!?%#$'\"_+=\/\-“”’]*/g,"")}a.validator.addMethod("maxWords",function(a,c,d){return this.optional(c)||b(a).match(/\b\w+\b/g).length<=d},a.validator.format("Please enter {0} words or less.")),a.validator.addMethod("minWords",function(a,c,d){return this.optional(c)||b(a).match(/\b\w+\b/g).length>=d},a.validator.format("Please enter at least {0} words.")),a.validator.addMethod("rangeWords",function(a,c,d){var e=b(a),f=/\b\w+\b/g;return this.optional(c)||e.match(f).length>=d[0]&&e.match(f).length<=d[1]},a.validator.format("Please enter between {0} and {1} words."))}(),a.validator.addMethod("accept",function(b,c,d){var e,f,g="string"==typeof d?d.replace(/\s/g,"").replace(/,/g,"|"):"image/*",h=this.optional(c);if(h)return h;if("file"===a(c).attr("type")&&(g=g.replace(/\*/g,".*"),c.files&&c.files.length))for(e=0;e<c.files.length;e++)if(f=c.files[e],!f.type.match(new RegExp(".?("+g+")$","i")))return!1;return!0},a.validator.format("Please enter a value with a valid mimetype.")),a.validator.addMethod("alphanumeric",function(a,b){return this.optional(b)||/^\w+$/i.test(a)},"Letters, numbers, and underscores only please"),a.validator.addMethod("bankaccountNL",function(a,b){if(this.optional(b))return!0;if(!/^[0-9]{9}|([0-9]{2} ){3}[0-9]{3}$/.test(a))return!1;var c,d,e,f=a.replace(/ /g,""),g=0,h=f.length;for(c=0;h>c;c++)d=h-c,e=f.substring(c,c+1),g+=d*e;return g%11===0},"Please specify a valid bank account number"),a.validator.addMethod("bankorgiroaccountNL",function(b,c){return this.optional(c)||a.validator.methods.bankaccountNL.call(this,b,c)||a.validator.methods.giroaccountNL.call(this,b,c)},"Please specify a valid bank or giro account number"),a.validator.addMethod("bic",function(a,b){return this.optional(b)||/^([A-Z]{6}[A-Z2-9][A-NP-Z1-2])(X{3}|[A-WY-Z0-9][A-Z0-9]{2})?$/.test(a)},"Please specify a valid BIC code"),a.validator.addMethod("cifES",function(a){"use strict";var b,c,d,e,f,g,h=[];if(a=a.toUpperCase(),!a.match("((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)"))return!1;for(d=0;9>d;d++)h[d]=parseInt(a.charAt(d),10);for(c=h[2]+h[4]+h[6],e=1;8>e;e+=2)f=(2*h[e]).toString(),g=f.charAt(1),c+=parseInt(f.charAt(0),10)+(""===g?0:parseInt(g,10));return/^[ABCDEFGHJNPQRSUVW]{1}/.test(a)?(c+="",b=10-parseInt(c.charAt(c.length-1),10),a+=b,h[8].toString()===String.fromCharCode(64+b)||h[8].toString()===a.charAt(a.length-1)):!1},"Please specify a valid CIF number."),a.validator.addMethod("creditcardtypes",function(a,b,c){if(/[^0-9\-]+/.test(a))return!1;a=a.replace(/\D/g,"");var d=0;return c.mastercard&&(d|=1),c.visa&&(d|=2),c.amex&&(d|=4),c.dinersclub&&(d|=8),c.enroute&&(d|=16),c.discover&&(d|=32),c.jcb&&(d|=64),c.unknown&&(d|=128),c.all&&(d=255),1&d&&/^(5[12345])/.test(a)?16===a.length:2&d&&/^(4)/.test(a)?16===a.length:4&d&&/^(3[47])/.test(a)?15===a.length:8&d&&/^(3(0[012345]|[68]))/.test(a)?14===a.length:16&d&&/^(2(014|149))/.test(a)?15===a.length:32&d&&/^(6011)/.test(a)?16===a.length:64&d&&/^(3)/.test(a)?16===a.length:64&d&&/^(2131|1800)/.test(a)?15===a.length:128&d?!0:!1},"Please enter a valid credit card number."),a.validator.addMethod("currency",function(a,b,c){var d,e="string"==typeof c,f=e?c:c[0],g=e?!0:c[1];return f=f.replace(/,/g,""),f=g?f+"]":f+"]?",d="^["+f+"([1-9]{1}[0-9]{0,2}(\\,[0-9]{3})*(\\.[0-9]{0,2})?|[1-9]{1}[0-9]{0,}(\\.[0-9]{0,2})?|0(\\.[0-9]{0,2})?|(\\.[0-9]{1,2})?)$",d=new RegExp(d),this.optional(b)||d.test(a)},"Please specify a valid currency"),a.validator.addMethod("dateFA",function(a,b){return this.optional(b)||/^[1-4]\d{3}\/((0?[1-6]\/((3[0-1])|([1-2][0-9])|(0?[1-9])))|((1[0-2]|(0?[7-9]))\/(30|([1-2][0-9])|(0?[1-9]))))$/.test(a)},"Please enter a correct date"),a.validator.addMethod("dateITA",function(a,b){var c,d,e,f,g,h=!1,i=/^\d{1,2}\/\d{1,2}\/\d{4}$/;return i.test(a)?(c=a.split("/"),d=parseInt(c[0],10),e=parseInt(c[1],10),f=parseInt(c[2],10),g=new Date(f,e-1,d,12,0,0,0),h=g.getUTCFullYear()===f&&g.getUTCMonth()===e-1&&g.getUTCDate()===d?!0:!1):h=!1,this.optional(b)||h},"Please enter a correct date"),a.validator.addMethod("dateNL",function(a,b){return this.optional(b)||/^(0?[1-9]|[12]\d|3[01])[\.\/\-](0?[1-9]|1[012])[\.\/\-]([12]\d)?(\d\d)$/.test(a)},"Please enter a correct date"),a.validator.addMethod("extension",function(a,b,c){return c="string"==typeof c?c.replace(/,/g,"|"):"png|jpe?g|gif",this.optional(b)||a.match(new RegExp(".("+c+")$","i"))},a.validator.format("Please enter a value with a valid extension.")),a.validator.addMethod("giroaccountNL",function(a,b){return this.optional(b)||/^[0-9]{1,7}$/.test(a)},"Please specify a valid giro account number"),a.validator.addMethod("iban",function(a,b){if(this.optional(b))return!0;var c,d,e,f,g,h,i,j,k,l=a.replace(/ /g,"").toUpperCase(),m="",n=!0,o="",p="";if(!/^([a-zA-Z0-9]{4} ){2,8}[a-zA-Z0-9]{1,4}|[a-zA-Z0-9]{12,34}$/.test(l))return!1;if(c=l.substring(0,2),h={AL:"\\d{8}[\\dA-Z]{16}",AD:"\\d{8}[\\dA-Z]{12}",AT:"\\d{16}",AZ:"[\\dA-Z]{4}\\d{20}",BE:"\\d{12}",BH:"[A-Z]{4}[\\dA-Z]{14}",BA:"\\d{16}",BR:"\\d{23}[A-Z][\\dA-Z]",BG:"[A-Z]{4}\\d{6}[\\dA-Z]{8}",CR:"\\d{17}",HR:"\\d{17}",CY:"\\d{8}[\\dA-Z]{16}",CZ:"\\d{20}",DK:"\\d{14}",DO:"[A-Z]{4}\\d{20}",EE:"\\d{16}",FO:"\\d{14}",FI:"\\d{14}",FR:"\\d{10}[\\dA-Z]{11}\\d{2}",GE:"[\\dA-Z]{2}\\d{16}",DE:"\\d{18}",GI:"[A-Z]{4}[\\dA-Z]{15}",GR:"\\d{7}[\\dA-Z]{16}",GL:"\\d{14}",GT:"[\\dA-Z]{4}[\\dA-Z]{20}",HU:"\\d{24}",IS:"\\d{22}",IE:"[\\dA-Z]{4}\\d{14}",IL:"\\d{19}",IT:"[A-Z]\\d{10}[\\dA-Z]{12}",KZ:"\\d{3}[\\dA-Z]{13}",KW:"[A-Z]{4}[\\dA-Z]{22}",LV:"[A-Z]{4}[\\dA-Z]{13}",LB:"\\d{4}[\\dA-Z]{20}",LI:"\\d{5}[\\dA-Z]{12}",LT:"\\d{16}",LU:"\\d{3}[\\dA-Z]{13}",MK:"\\d{3}[\\dA-Z]{10}\\d{2}",MT:"[A-Z]{4}\\d{5}[\\dA-Z]{18}",MR:"\\d{23}",MU:"[A-Z]{4}\\d{19}[A-Z]{3}",MC:"\\d{10}[\\dA-Z]{11}\\d{2}",MD:"[\\dA-Z]{2}\\d{18}",ME:"\\d{18}",NL:"[A-Z]{4}\\d{10}",NO:"\\d{11}",PK:"[\\dA-Z]{4}\\d{16}",PS:"[\\dA-Z]{4}\\d{21}",PL:"\\d{24}",PT:"\\d{21}",RO:"[A-Z]{4}[\\dA-Z]{16}",SM:"[A-Z]\\d{10}[\\dA-Z]{12}",SA:"\\d{2}[\\dA-Z]{18}",RS:"\\d{18}",SK:"\\d{20}",SI:"\\d{15}",ES:"\\d{20}",SE:"\\d{20}",CH:"\\d{5}[\\dA-Z]{12}",TN:"\\d{20}",TR:"\\d{5}[\\dA-Z]{17}",AE:"\\d{3}\\d{16}",GB:"[A-Z]{4}\\d{14}",VG:"[\\dA-Z]{4}\\d{16}"},g=h[c],"undefined"!=typeof g&&(i=new RegExp("^[A-Z]{2}\\d{2}"+g+"$",""),!i.test(l)))return!1;for(d=l.substring(4,l.length)+l.substring(0,4),j=0;j<d.length;j++)e=d.charAt(j),"0"!==e&&(n=!1),n||(m+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".indexOf(e));for(k=0;k<m.length;k++)f=m.charAt(k),p=""+o+f,o=p%97;return 1===o},"Please specify a valid IBAN"),a.validator.addMethod("integer",function(a,b){return this.optional(b)||/^-?\d+$/.test(a)},"A positive or negative non-decimal number please"),a.validator.addMethod("ipv4",function(a,b){return this.optional(b)||/^(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)$/i.test(a)},"Please enter a valid IP v4 address."),a.validator.addMethod("ipv6",function(a,b){return this.optional(b)||/^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i.test(a)},"Please enter a valid IP v6 address."),a.validator.addMethod("lettersonly",function(a,b){return this.optional(b)||/^[a-z]+$/i.test(a)},"Letters only please"),a.validator.addMethod("letterswithbasicpunc",function(a,b){return this.optional(b)||/^[a-z\-.,()'"\s]+$/i.test(a)},"Letters or punctuation only please"),a.validator.addMethod("mobileNL",function(a,b){return this.optional(b)||/^((\+|00(\s|\s?\-\s?)?)31(\s|\s?\-\s?)?(\(0\)[\-\s]?)?|0)6((\s|\s?\-\s?)?[0-9]){8}$/.test(a)},"Please specify a valid mobile number"),a.validator.addMethod("mobileUK",function(a,b){return a=a.replace(/\(|\)|\s+|-/g,""),this.optional(b)||a.length>9&&a.match(/^(?:(?:(?:00\s?|\+)44\s?|0)7(?:[1345789]\d{2}|624)\s?\d{3}\s?\d{3})$/)},"Please specify a valid mobile number"),a.validator.addMethod("nieES",function(a){"use strict";return a=a.toUpperCase(),a.match("((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)")?/^[T]{1}/.test(a)?a[8]===/^[T]{1}[A-Z0-9]{8}$/.test(a):/^[XYZ]{1}/.test(a)?a[8]==="TRWAGMYFPDXBNJZSQVHLCKE".charAt(a.replace("X","0").replace("Y","1").replace("Z","2").substring(0,8)%23):!1:!1},"Please specify a valid NIE number."),a.validator.addMethod("nifES",function(a){"use strict";return a=a.toUpperCase(),a.match("((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)")?/^[0-9]{8}[A-Z]{1}$/.test(a)?"TRWAGMYFPDXBNJZSQVHLCKE".charAt(a.substring(8,0)%23)===a.charAt(8):/^[KLM]{1}/.test(a)?a[8]===String.fromCharCode(64):!1:!1},"Please specify a valid NIF number."),a.validator.addMethod("nowhitespace",function(a,b){return this.optional(b)||/^\S+$/i.test(a)},"No white space please"),a.validator.addMethod("pattern",function(a,b,c){return this.optional(b)?!0:("string"==typeof c&&(c=new RegExp("^(?:"+c+")$")),c.test(a))},"Invalid format."),a.validator.addMethod("phoneNL",function(a,b){return this.optional(b)||/^((\+|00(\s|\s?\-\s?)?)31(\s|\s?\-\s?)?(\(0\)[\-\s]?)?|0)[1-9]((\s|\s?\-\s?)?[0-9]){8}$/.test(a)},"Please specify a valid phone number."),a.validator.addMethod("phoneUK",function(a,b){return a=a.replace(/\(|\)|\s+|-/g,""),this.optional(b)||a.length>9&&a.match(/^(?:(?:(?:00\s?|\+)44\s?)|(?:\(?0))(?:\d{2}\)?\s?\d{4}\s?\d{4}|\d{3}\)?\s?\d{3}\s?\d{3,4}|\d{4}\)?\s?(?:\d{5}|\d{3}\s?\d{3})|\d{5}\)?\s?\d{4,5})$/)},"Please specify a valid phone number"),a.validator.addMethod("phoneUS",function(a,b){return a=a.replace(/\s+/g,""),this.optional(b)||a.length>9&&a.match(/^(\+?1-?)?(\([2-9]([02-9]\d|1[02-9])\)|[2-9]([02-9]\d|1[02-9]))-?[2-9]([02-9]\d|1[02-9])-?\d{4}$/)},"Please specify a valid phone number"),a.validator.addMethod("phonesUK",function(a,b){return a=a.replace(/\(|\)|\s+|-/g,""),this.optional(b)||a.length>9&&a.match(/^(?:(?:(?:00\s?|\+)44\s?|0)(?:1\d{8,9}|[23]\d{9}|7(?:[1345789]\d{8}|624\d{6})))$/)},"Please specify a valid uk phone number"),a.validator.addMethod("postalCodeCA",function(a,b){return this.optional(b)||/^[ABCEGHJKLMNPRSTVXY]\d[A-Z] \d[A-Z]\d$/.test(a)},"Please specify a valid postal code"),a.validator.addMethod("postalcodeBR",function(a,b){return this.optional(b)||/^\d{2}.\d{3}-\d{3}?$|^\d{5}-?\d{3}?$/.test(a)},"Informe um CEP válido."),a.validator.addMethod("postalcodeIT",function(a,b){return this.optional(b)||/^\d{5}$/.test(a)},"Please specify a valid postal code"),a.validator.addMethod("postalcodeNL",function(a,b){return this.optional(b)||/^[1-9][0-9]{3}\s?[a-zA-Z]{2}$/.test(a)},"Please specify a valid postal code"),a.validator.addMethod("postcodeUK",function(a,b){return this.optional(b)||/^((([A-PR-UWYZ][0-9])|([A-PR-UWYZ][0-9][0-9])|([A-PR-UWYZ][A-HK-Y][0-9])|([A-PR-UWYZ][A-HK-Y][0-9][0-9])|([A-PR-UWYZ][0-9][A-HJKSTUW])|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY]))\s?([0-9][ABD-HJLNP-UW-Z]{2})|(GIR)\s?(0AA))$/i.test(a)},"Please specify a valid UK postcode"),a.validator.addMethod("require_from_group",function(b,c,d){var e=a(d[1],c.form),f=e.eq(0),g=f.data("valid_req_grp")?f.data("valid_req_grp"):a.extend({},this),h=e.filter(function(){return g.elementValue(this)}).length>=d[0];return f.data("valid_req_grp",g),a(c).data("being_validated")||(e.data("being_validated",!0),e.each(function(){g.element(this)}),e.data("being_validated",!1)),h},a.validator.format("Please fill at least {0} of these fields.")),a.validator.addMethod("skip_or_fill_minimum",function(b,c,d){var e=a(d[1],c.form),f=e.eq(0),g=f.data("valid_skip")?f.data("valid_skip"):a.extend({},this),h=e.filter(function(){return g.elementValue(this)}).length,i=0===h||h>=d[0];return f.data("valid_skip",g),a(c).data("being_validated")||(e.data("being_validated",!0),e.each(function(){g.element(this)}),e.data("being_validated",!1)),i},a.validator.format("Please either skip these fields or fill at least {0} of them.")),jQuery.validator.addMethod("stateUS",function(a,b,c){var d,e="undefined"==typeof c,f=e||"undefined"==typeof c.caseSensitive?!1:c.caseSensitive,g=e||"undefined"==typeof c.includeTerritories?!1:c.includeTerritories,h=e||"undefined"==typeof c.includeMilitary?!1:c.includeMilitary;return d=g||h?g&&h?"^(A[AEKLPRSZ]|C[AOT]|D[CE]|FL|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEINOPST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$":g?"^(A[KLRSZ]|C[AOT]|D[CE]|FL|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEINOPST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$":"^(A[AEKLPRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])$":"^(A[KLRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])$",d=f?new RegExp(d):new RegExp(d,"i"),this.optional(b)||d.test(a)},"Please specify a valid state"),a.validator.addMethod("strippedminlength",function(b,c,d){return a(b).text().length>=d},a.validator.format("Please enter at least {0} characters")),a.validator.addMethod("time",function(a,b){return this.optional(b)||/^([01]\d|2[0-3])(:[0-5]\d){1,2}$/.test(a)},"Please enter a valid time, between 00:00 and 23:59"),a.validator.addMethod("time12h",function(a,b){return this.optional(b)||/^((0?[1-9]|1[012])(:[0-5]\d){1,2}(\ ?[AP]M))$/i.test(a)},"Please enter a valid time in 12-hour am/pm format"),a.validator.addMethod("url2",function(a,b){return this.optional(b)||/^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)*(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(a)},a.validator.messages.url),a.validator.addMethod("vinUS",function(a){if(17!==a.length)return!1;var b,c,d,e,f,g,h=["A","B","C","D","E","F","G","H","J","K","L","M","N","P","R","S","T","U","V","W","X","Y","Z"],i=[1,2,3,4,5,6,7,8,1,2,3,4,5,7,9,2,3,4,5,6,7,8,9],j=[8,7,6,5,4,3,2,10,0,9,8,7,6,5,4,3,2],k=0;for(b=0;17>b;b++){if(e=j[b],d=a.slice(b,b+1),8===b&&(g=d),isNaN(d)){for(c=0;c<h.length;c++)if(d.toUpperCase()===h[c]){d=i[c],d*=e,isNaN(g)&&8===c&&(g=h[c]);break}}else d*=e;k+=d}return f=k%11,10===f&&(f="X"),f===g?!0:!1},"The specified vehicle identification number (VIN) is invalid."),a.validator.addMethod("zipcodeUS",function(a,b){return this.optional(b)||/^\d{5}(-\d{4})?$/.test(a)},"The specified US ZIP Code is invalid"),a.validator.addMethod("ziprange",function(a,b){return this.optional(b)||/^90[2-5]\d\{2\}-\d{4}$/.test(a)},"Your ZIP-code must be in the range 902xx-xxxx to 905xx-xxxx")});
|
|
1365
thirdparty/jquery-validate/jquery.validate.js
vendored
1365
thirdparty/jquery-validate/jquery.validate.js
vendored
@ -1,1365 +0,0 @@
|
|||||||
/*!
|
|
||||||
* jQuery Validation Plugin v1.13.1
|
|
||||||
*
|
|
||||||
* http://jqueryvalidation.org/
|
|
||||||
*
|
|
||||||
* Copyright (c) 2015 Jörn Zaefferer
|
|
||||||
* Released under the MIT license
|
|
||||||
*/
|
|
||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
$.extend($.fn, {
|
|
||||||
// http://jqueryvalidation.org/validate/
|
|
||||||
validate: function( options ) {
|
|
||||||
|
|
||||||
// if nothing is selected, return nothing; can't chain anyway
|
|
||||||
if ( !this.length ) {
|
|
||||||
if ( options && options.debug && window.console ) {
|
|
||||||
console.warn( "Nothing selected, can't validate, returning nothing." );
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// check if a validator for this form was already created
|
|
||||||
var validator = $.data( this[ 0 ], "validator" );
|
|
||||||
if ( validator ) {
|
|
||||||
return validator;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add novalidate tag if HTML5.
|
|
||||||
this.attr( "novalidate", "novalidate" );
|
|
||||||
|
|
||||||
validator = new $.validator( options, this[ 0 ] );
|
|
||||||
$.data( this[ 0 ], "validator", validator );
|
|
||||||
|
|
||||||
if ( validator.settings.onsubmit ) {
|
|
||||||
|
|
||||||
this.validateDelegate( ":submit", "click", function( event ) {
|
|
||||||
if ( validator.settings.submitHandler ) {
|
|
||||||
validator.submitButton = event.target;
|
|
||||||
}
|
|
||||||
// allow suppressing validation by adding a cancel class to the submit button
|
|
||||||
if ( $( event.target ).hasClass( "cancel" ) ) {
|
|
||||||
validator.cancelSubmit = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// allow suppressing validation by adding the html5 formnovalidate attribute to the submit button
|
|
||||||
if ( $( event.target ).attr( "formnovalidate" ) !== undefined ) {
|
|
||||||
validator.cancelSubmit = true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// validate the form on submit
|
|
||||||
this.submit( function( event ) {
|
|
||||||
if ( validator.settings.debug ) {
|
|
||||||
// prevent form submit to be able to see console output
|
|
||||||
event.preventDefault();
|
|
||||||
}
|
|
||||||
function handle() {
|
|
||||||
var hidden, result;
|
|
||||||
if ( validator.settings.submitHandler ) {
|
|
||||||
if ( validator.submitButton ) {
|
|
||||||
// insert a hidden input as a replacement for the missing submit button
|
|
||||||
hidden = $( "<input type='hidden'/>" )
|
|
||||||
.attr( "name", validator.submitButton.name )
|
|
||||||
.val( $( validator.submitButton ).val() )
|
|
||||||
.appendTo( validator.currentForm );
|
|
||||||
}
|
|
||||||
result = validator.settings.submitHandler.call( validator, validator.currentForm, event );
|
|
||||||
if ( validator.submitButton ) {
|
|
||||||
// and clean up afterwards; thanks to no-block-scope, hidden can be referenced
|
|
||||||
hidden.remove();
|
|
||||||
}
|
|
||||||
if ( result !== undefined ) {
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// prevent submit for invalid forms or custom submit handlers
|
|
||||||
if ( validator.cancelSubmit ) {
|
|
||||||
validator.cancelSubmit = false;
|
|
||||||
return handle();
|
|
||||||
}
|
|
||||||
if ( validator.form() ) {
|
|
||||||
if ( validator.pendingRequest ) {
|
|
||||||
validator.formSubmitted = true;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return handle();
|
|
||||||
} else {
|
|
||||||
validator.focusInvalid();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return validator;
|
|
||||||
},
|
|
||||||
// http://jqueryvalidation.org/valid/
|
|
||||||
valid: function() {
|
|
||||||
var valid, validator;
|
|
||||||
|
|
||||||
if ( $( this[ 0 ] ).is( "form" ) ) {
|
|
||||||
valid = this.validate().form();
|
|
||||||
} else {
|
|
||||||
valid = true;
|
|
||||||
validator = $( this[ 0 ].form ).validate();
|
|
||||||
this.each( function() {
|
|
||||||
valid = validator.element( this ) && valid;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return valid;
|
|
||||||
},
|
|
||||||
// attributes: space separated list of attributes to retrieve and remove
|
|
||||||
removeAttrs: function( attributes ) {
|
|
||||||
var result = {},
|
|
||||||
$element = this;
|
|
||||||
$.each( attributes.split( /\s/ ), function( index, value ) {
|
|
||||||
result[ value ] = $element.attr( value );
|
|
||||||
$element.removeAttr( value );
|
|
||||||
});
|
|
||||||
return result;
|
|
||||||
},
|
|
||||||
// http://jqueryvalidation.org/rules/
|
|
||||||
rules: function( command, argument ) {
|
|
||||||
var element = this[ 0 ],
|
|
||||||
settings, staticRules, existingRules, data, param, filtered;
|
|
||||||
|
|
||||||
if ( command ) {
|
|
||||||
settings = $.data( element.form, "validator" ).settings;
|
|
||||||
staticRules = settings.rules;
|
|
||||||
existingRules = $.validator.staticRules( element );
|
|
||||||
switch ( command ) {
|
|
||||||
case "add":
|
|
||||||
$.extend( existingRules, $.validator.normalizeRule( argument ) );
|
|
||||||
// remove messages from rules, but allow them to be set separately
|
|
||||||
delete existingRules.messages;
|
|
||||||
staticRules[ element.name ] = existingRules;
|
|
||||||
if ( argument.messages ) {
|
|
||||||
settings.messages[ element.name ] = $.extend( settings.messages[ element.name ], argument.messages );
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "remove":
|
|
||||||
if ( !argument ) {
|
|
||||||
delete staticRules[ element.name ];
|
|
||||||
return existingRules;
|
|
||||||
}
|
|
||||||
filtered = {};
|
|
||||||
$.each( argument.split( /\s/ ), function( index, method ) {
|
|
||||||
filtered[ method ] = existingRules[ method ];
|
|
||||||
delete existingRules[ method ];
|
|
||||||
if ( method === "required" ) {
|
|
||||||
$( element ).removeAttr( "aria-required" );
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return filtered;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
data = $.validator.normalizeRules(
|
|
||||||
$.extend(
|
|
||||||
{},
|
|
||||||
$.validator.classRules( element ),
|
|
||||||
$.validator.attributeRules( element ),
|
|
||||||
$.validator.dataRules( element ),
|
|
||||||
$.validator.staticRules( element )
|
|
||||||
), element );
|
|
||||||
|
|
||||||
// make sure required is at front
|
|
||||||
if ( data.required ) {
|
|
||||||
param = data.required;
|
|
||||||
delete data.required;
|
|
||||||
data = $.extend( { required: param }, data );
|
|
||||||
$( element ).attr( "aria-required", "true" );
|
|
||||||
}
|
|
||||||
|
|
||||||
// make sure remote is at back
|
|
||||||
if ( data.remote ) {
|
|
||||||
param = data.remote;
|
|
||||||
delete data.remote;
|
|
||||||
data = $.extend( data, { remote: param });
|
|
||||||
}
|
|
||||||
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Custom selectors
|
|
||||||
$.extend( $.expr[ ":" ], {
|
|
||||||
// http://jqueryvalidation.org/blank-selector/
|
|
||||||
blank: function( a ) {
|
|
||||||
return !$.trim( "" + $( a ).val() );
|
|
||||||
},
|
|
||||||
// http://jqueryvalidation.org/filled-selector/
|
|
||||||
filled: function( a ) {
|
|
||||||
return !!$.trim( "" + $( a ).val() );
|
|
||||||
},
|
|
||||||
// http://jqueryvalidation.org/unchecked-selector/
|
|
||||||
unchecked: function( a ) {
|
|
||||||
return !$( a ).prop( "checked" );
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// constructor for validator
|
|
||||||
$.validator = function( options, form ) {
|
|
||||||
this.settings = $.extend( true, {}, $.validator.defaults, options );
|
|
||||||
this.currentForm = form;
|
|
||||||
this.init();
|
|
||||||
};
|
|
||||||
|
|
||||||
// http://jqueryvalidation.org/jQuery.validator.format/
|
|
||||||
$.validator.format = function( source, params ) {
|
|
||||||
if ( arguments.length === 1 ) {
|
|
||||||
return function() {
|
|
||||||
var args = $.makeArray( arguments );
|
|
||||||
args.unshift( source );
|
|
||||||
return $.validator.format.apply( this, args );
|
|
||||||
};
|
|
||||||
}
|
|
||||||
if ( arguments.length > 2 && params.constructor !== Array ) {
|
|
||||||
params = $.makeArray( arguments ).slice( 1 );
|
|
||||||
}
|
|
||||||
if ( params.constructor !== Array ) {
|
|
||||||
params = [ params ];
|
|
||||||
}
|
|
||||||
$.each( params, function( i, n ) {
|
|
||||||
source = source.replace( new RegExp( "\\{" + i + "\\}", "g" ), function() {
|
|
||||||
return n;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
return source;
|
|
||||||
};
|
|
||||||
|
|
||||||
$.extend( $.validator, {
|
|
||||||
|
|
||||||
defaults: {
|
|
||||||
messages: {},
|
|
||||||
groups: {},
|
|
||||||
rules: {},
|
|
||||||
errorClass: "error",
|
|
||||||
validClass: "valid",
|
|
||||||
errorElement: "label",
|
|
||||||
focusCleanup: false,
|
|
||||||
focusInvalid: true,
|
|
||||||
errorContainer: $( [] ),
|
|
||||||
errorLabelContainer: $( [] ),
|
|
||||||
onsubmit: true,
|
|
||||||
ignore: ":hidden",
|
|
||||||
ignoreTitle: false,
|
|
||||||
onfocusin: function( element ) {
|
|
||||||
this.lastActive = element;
|
|
||||||
|
|
||||||
// Hide error label and remove error class on focus if enabled
|
|
||||||
if ( this.settings.focusCleanup ) {
|
|
||||||
if ( this.settings.unhighlight ) {
|
|
||||||
this.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );
|
|
||||||
}
|
|
||||||
this.hideThese( this.errorsFor( element ) );
|
|
||||||
}
|
|
||||||
},
|
|
||||||
onfocusout: function( element ) {
|
|
||||||
if ( !this.checkable( element ) && ( element.name in this.submitted || !this.optional( element ) ) ) {
|
|
||||||
this.element( element );
|
|
||||||
}
|
|
||||||
},
|
|
||||||
onkeyup: function( element, event ) {
|
|
||||||
if ( event.which === 9 && this.elementValue( element ) === "" ) {
|
|
||||||
return;
|
|
||||||
} else if ( element.name in this.submitted || element === this.lastElement ) {
|
|
||||||
this.element( element );
|
|
||||||
}
|
|
||||||
},
|
|
||||||
onclick: function( element ) {
|
|
||||||
// click on selects, radiobuttons and checkboxes
|
|
||||||
if ( element.name in this.submitted ) {
|
|
||||||
this.element( element );
|
|
||||||
|
|
||||||
// or option elements, check parent select in that case
|
|
||||||
} else if ( element.parentNode.name in this.submitted ) {
|
|
||||||
this.element( element.parentNode );
|
|
||||||
}
|
|
||||||
},
|
|
||||||
highlight: function( element, errorClass, validClass ) {
|
|
||||||
if ( element.type === "radio" ) {
|
|
||||||
this.findByName( element.name ).addClass( errorClass ).removeClass( validClass );
|
|
||||||
} else {
|
|
||||||
$( element ).addClass( errorClass ).removeClass( validClass );
|
|
||||||
}
|
|
||||||
},
|
|
||||||
unhighlight: function( element, errorClass, validClass ) {
|
|
||||||
if ( element.type === "radio" ) {
|
|
||||||
this.findByName( element.name ).removeClass( errorClass ).addClass( validClass );
|
|
||||||
} else {
|
|
||||||
$( element ).removeClass( errorClass ).addClass( validClass );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
// http://jqueryvalidation.org/jQuery.validator.setDefaults/
|
|
||||||
setDefaults: function( settings ) {
|
|
||||||
$.extend( $.validator.defaults, settings );
|
|
||||||
},
|
|
||||||
|
|
||||||
messages: {
|
|
||||||
required: "This field is required.",
|
|
||||||
remote: "Please fix this field.",
|
|
||||||
email: "Please enter a valid email address.",
|
|
||||||
url: "Please enter a valid URL.",
|
|
||||||
date: "Please enter a valid date.",
|
|
||||||
dateISO: "Please enter a valid date ( ISO ).",
|
|
||||||
number: "Please enter a valid number.",
|
|
||||||
digits: "Please enter only digits.",
|
|
||||||
creditcard: "Please enter a valid credit card number.",
|
|
||||||
equalTo: "Please enter the same value again.",
|
|
||||||
maxlength: $.validator.format( "Please enter no more than {0} characters." ),
|
|
||||||
minlength: $.validator.format( "Please enter at least {0} characters." ),
|
|
||||||
rangelength: $.validator.format( "Please enter a value between {0} and {1} characters long." ),
|
|
||||||
range: $.validator.format( "Please enter a value between {0} and {1}." ),
|
|
||||||
max: $.validator.format( "Please enter a value less than or equal to {0}." ),
|
|
||||||
min: $.validator.format( "Please enter a value greater than or equal to {0}." )
|
|
||||||
},
|
|
||||||
|
|
||||||
autoCreateRanges: false,
|
|
||||||
|
|
||||||
prototype: {
|
|
||||||
|
|
||||||
init: function() {
|
|
||||||
this.labelContainer = $( this.settings.errorLabelContainer );
|
|
||||||
this.errorContext = this.labelContainer.length && this.labelContainer || $( this.currentForm );
|
|
||||||
this.containers = $( this.settings.errorContainer ).add( this.settings.errorLabelContainer );
|
|
||||||
this.submitted = {};
|
|
||||||
this.valueCache = {};
|
|
||||||
this.pendingRequest = 0;
|
|
||||||
this.pending = {};
|
|
||||||
this.invalid = {};
|
|
||||||
this.reset();
|
|
||||||
|
|
||||||
var groups = ( this.groups = {} ),
|
|
||||||
rules;
|
|
||||||
$.each( this.settings.groups, function( key, value ) {
|
|
||||||
if ( typeof value === "string" ) {
|
|
||||||
value = value.split( /\s/ );
|
|
||||||
}
|
|
||||||
$.each( value, function( index, name ) {
|
|
||||||
groups[ name ] = key;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
rules = this.settings.rules;
|
|
||||||
$.each( rules, function( key, value ) {
|
|
||||||
rules[ key ] = $.validator.normalizeRule( value );
|
|
||||||
});
|
|
||||||
|
|
||||||
function delegate( event ) {
|
|
||||||
var validator = $.data( this[ 0 ].form, "validator" ),
|
|
||||||
eventType = "on" + event.type.replace( /^validate/, "" ),
|
|
||||||
settings = validator.settings;
|
|
||||||
if ( settings[ eventType ] && !this.is( settings.ignore ) ) {
|
|
||||||
settings[ eventType ].call( validator, this[ 0 ], event );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$( this.currentForm )
|
|
||||||
.validateDelegate( ":text, [type='password'], [type='file'], select, textarea, " +
|
|
||||||
"[type='number'], [type='search'] ,[type='tel'], [type='url'], " +
|
|
||||||
"[type='email'], [type='datetime'], [type='date'], [type='month'], " +
|
|
||||||
"[type='week'], [type='time'], [type='datetime-local'], " +
|
|
||||||
"[type='range'], [type='color'], [type='radio'], [type='checkbox']",
|
|
||||||
"focusin focusout keyup", delegate)
|
|
||||||
// Support: Chrome, oldIE
|
|
||||||
// "select" is provided as event.target when clicking a option
|
|
||||||
.validateDelegate("select, option, [type='radio'], [type='checkbox']", "click", delegate);
|
|
||||||
|
|
||||||
if ( this.settings.invalidHandler ) {
|
|
||||||
$( this.currentForm ).bind( "invalid-form.validate", this.settings.invalidHandler );
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add aria-required to any Static/Data/Class required fields before first validation
|
|
||||||
// Screen readers require this attribute to be present before the initial submission http://www.w3.org/TR/WCAG-TECHS/ARIA2.html
|
|
||||||
$( this.currentForm ).find( "[required], [data-rule-required], .required" ).attr( "aria-required", "true" );
|
|
||||||
},
|
|
||||||
|
|
||||||
// http://jqueryvalidation.org/Validator.form/
|
|
||||||
form: function() {
|
|
||||||
this.checkForm();
|
|
||||||
$.extend( this.submitted, this.errorMap );
|
|
||||||
this.invalid = $.extend({}, this.errorMap );
|
|
||||||
if ( !this.valid() ) {
|
|
||||||
$( this.currentForm ).triggerHandler( "invalid-form", [ this ]);
|
|
||||||
}
|
|
||||||
this.showErrors();
|
|
||||||
return this.valid();
|
|
||||||
},
|
|
||||||
|
|
||||||
checkForm: function() {
|
|
||||||
this.prepareForm();
|
|
||||||
for ( var i = 0, elements = ( this.currentElements = this.elements() ); elements[ i ]; i++ ) {
|
|
||||||
this.check( elements[ i ] );
|
|
||||||
}
|
|
||||||
return this.valid();
|
|
||||||
},
|
|
||||||
|
|
||||||
// http://jqueryvalidation.org/Validator.element/
|
|
||||||
element: function( element ) {
|
|
||||||
var cleanElement = this.clean( element ),
|
|
||||||
checkElement = this.validationTargetFor( cleanElement ),
|
|
||||||
result = true;
|
|
||||||
|
|
||||||
this.lastElement = checkElement;
|
|
||||||
|
|
||||||
if ( checkElement === undefined ) {
|
|
||||||
delete this.invalid[ cleanElement.name ];
|
|
||||||
} else {
|
|
||||||
this.prepareElement( checkElement );
|
|
||||||
this.currentElements = $( checkElement );
|
|
||||||
|
|
||||||
result = this.check( checkElement ) !== false;
|
|
||||||
if ( result ) {
|
|
||||||
delete this.invalid[ checkElement.name ];
|
|
||||||
} else {
|
|
||||||
this.invalid[ checkElement.name ] = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Add aria-invalid status for screen readers
|
|
||||||
$( element ).attr( "aria-invalid", !result );
|
|
||||||
|
|
||||||
if ( !this.numberOfInvalids() ) {
|
|
||||||
// Hide error containers on last error
|
|
||||||
this.toHide = this.toHide.add( this.containers );
|
|
||||||
}
|
|
||||||
this.showErrors();
|
|
||||||
return result;
|
|
||||||
},
|
|
||||||
|
|
||||||
// http://jqueryvalidation.org/Validator.showErrors/
|
|
||||||
showErrors: function( errors ) {
|
|
||||||
if ( errors ) {
|
|
||||||
// add items to error list and map
|
|
||||||
$.extend( this.errorMap, errors );
|
|
||||||
this.errorList = [];
|
|
||||||
for ( var name in errors ) {
|
|
||||||
this.errorList.push({
|
|
||||||
message: errors[ name ],
|
|
||||||
element: this.findByName( name )[ 0 ]
|
|
||||||
});
|
|
||||||
}
|
|
||||||
// remove items from success list
|
|
||||||
this.successList = $.grep( this.successList, function( element ) {
|
|
||||||
return !( element.name in errors );
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if ( this.settings.showErrors ) {
|
|
||||||
this.settings.showErrors.call( this, this.errorMap, this.errorList );
|
|
||||||
} else {
|
|
||||||
this.defaultShowErrors();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
// http://jqueryvalidation.org/Validator.resetForm/
|
|
||||||
resetForm: function() {
|
|
||||||
if ( $.fn.resetForm ) {
|
|
||||||
$( this.currentForm ).resetForm();
|
|
||||||
}
|
|
||||||
this.submitted = {};
|
|
||||||
this.lastElement = null;
|
|
||||||
this.prepareForm();
|
|
||||||
this.hideErrors();
|
|
||||||
this.elements()
|
|
||||||
.removeClass( this.settings.errorClass )
|
|
||||||
.removeData( "previousValue" )
|
|
||||||
.removeAttr( "aria-invalid" );
|
|
||||||
},
|
|
||||||
|
|
||||||
numberOfInvalids: function() {
|
|
||||||
return this.objectLength( this.invalid );
|
|
||||||
},
|
|
||||||
|
|
||||||
objectLength: function( obj ) {
|
|
||||||
/* jshint unused: false */
|
|
||||||
var count = 0,
|
|
||||||
i;
|
|
||||||
for ( i in obj ) {
|
|
||||||
count++;
|
|
||||||
}
|
|
||||||
return count;
|
|
||||||
},
|
|
||||||
|
|
||||||
hideErrors: function() {
|
|
||||||
this.hideThese( this.toHide );
|
|
||||||
},
|
|
||||||
|
|
||||||
hideThese: function( errors ) {
|
|
||||||
errors.not( this.containers ).text( "" );
|
|
||||||
this.addWrapper( errors ).hide();
|
|
||||||
},
|
|
||||||
|
|
||||||
valid: function() {
|
|
||||||
return this.size() === 0;
|
|
||||||
},
|
|
||||||
|
|
||||||
size: function() {
|
|
||||||
return this.errorList.length;
|
|
||||||
},
|
|
||||||
|
|
||||||
focusInvalid: function() {
|
|
||||||
if ( this.settings.focusInvalid ) {
|
|
||||||
try {
|
|
||||||
$( this.findLastActive() || this.errorList.length && this.errorList[ 0 ].element || [])
|
|
||||||
.filter( ":visible" )
|
|
||||||
.focus()
|
|
||||||
// manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find
|
|
||||||
.trigger( "focusin" );
|
|
||||||
} catch ( e ) {
|
|
||||||
// ignore IE throwing errors when focusing hidden elements
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
findLastActive: function() {
|
|
||||||
var lastActive = this.lastActive;
|
|
||||||
return lastActive && $.grep( this.errorList, function( n ) {
|
|
||||||
return n.element.name === lastActive.name;
|
|
||||||
}).length === 1 && lastActive;
|
|
||||||
},
|
|
||||||
|
|
||||||
elements: function() {
|
|
||||||
var validator = this,
|
|
||||||
rulesCache = {};
|
|
||||||
|
|
||||||
// select all valid inputs inside the form (no submit or reset buttons)
|
|
||||||
return $( this.currentForm )
|
|
||||||
.find( "input, select, textarea" )
|
|
||||||
.not( ":submit, :reset, :image, [disabled], [readonly]" )
|
|
||||||
.not( this.settings.ignore )
|
|
||||||
.filter( function() {
|
|
||||||
if ( !this.name && validator.settings.debug && window.console ) {
|
|
||||||
console.error( "%o has no name assigned", this );
|
|
||||||
}
|
|
||||||
|
|
||||||
// select only the first element for each name, and only those with rules specified
|
|
||||||
if ( this.name in rulesCache || !validator.objectLength( $( this ).rules() ) ) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
rulesCache[ this.name ] = true;
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
clean: function( selector ) {
|
|
||||||
return $( selector )[ 0 ];
|
|
||||||
},
|
|
||||||
|
|
||||||
errors: function() {
|
|
||||||
var errorClass = this.settings.errorClass.split( " " ).join( "." );
|
|
||||||
return $( this.settings.errorElement + "." + errorClass, this.errorContext );
|
|
||||||
},
|
|
||||||
|
|
||||||
reset: function() {
|
|
||||||
this.successList = [];
|
|
||||||
this.errorList = [];
|
|
||||||
this.errorMap = {};
|
|
||||||
this.toShow = $( [] );
|
|
||||||
this.toHide = $( [] );
|
|
||||||
this.currentElements = $( [] );
|
|
||||||
},
|
|
||||||
|
|
||||||
prepareForm: function() {
|
|
||||||
this.reset();
|
|
||||||
this.toHide = this.errors().add( this.containers );
|
|
||||||
},
|
|
||||||
|
|
||||||
prepareElement: function( element ) {
|
|
||||||
this.reset();
|
|
||||||
this.toHide = this.errorsFor( element );
|
|
||||||
},
|
|
||||||
|
|
||||||
elementValue: function( element ) {
|
|
||||||
var val,
|
|
||||||
$element = $( element ),
|
|
||||||
type = element.type;
|
|
||||||
|
|
||||||
if ( type === "radio" || type === "checkbox" ) {
|
|
||||||
return $( "input[name='" + element.name + "']:checked" ).val();
|
|
||||||
} else if ( type === "number" && typeof element.validity !== "undefined" ) {
|
|
||||||
return element.validity.badInput ? false : $element.val();
|
|
||||||
}
|
|
||||||
|
|
||||||
val = $element.val();
|
|
||||||
if ( typeof val === "string" ) {
|
|
||||||
return val.replace(/\r/g, "" );
|
|
||||||
}
|
|
||||||
return val;
|
|
||||||
},
|
|
||||||
|
|
||||||
check: function( element ) {
|
|
||||||
element = this.validationTargetFor( this.clean( element ) );
|
|
||||||
|
|
||||||
var rules = $( element ).rules(),
|
|
||||||
rulesCount = $.map( rules, function( n, i ) {
|
|
||||||
return i;
|
|
||||||
}).length,
|
|
||||||
dependencyMismatch = false,
|
|
||||||
val = this.elementValue( element ),
|
|
||||||
result, method, rule;
|
|
||||||
|
|
||||||
for ( method in rules ) {
|
|
||||||
rule = { method: method, parameters: rules[ method ] };
|
|
||||||
try {
|
|
||||||
|
|
||||||
result = $.validator.methods[ method ].call( this, val, element, rule.parameters );
|
|
||||||
|
|
||||||
// if a method indicates that the field is optional and therefore valid,
|
|
||||||
// don't mark it as valid when there are no other rules
|
|
||||||
if ( result === "dependency-mismatch" && rulesCount === 1 ) {
|
|
||||||
dependencyMismatch = true;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
dependencyMismatch = false;
|
|
||||||
|
|
||||||
if ( result === "pending" ) {
|
|
||||||
this.toHide = this.toHide.not( this.errorsFor( element ) );
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( !result ) {
|
|
||||||
this.formatAndAdd( element, rule );
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
} catch ( e ) {
|
|
||||||
if ( this.settings.debug && window.console ) {
|
|
||||||
console.log( "Exception occurred when checking element " + element.id + ", check the '" + rule.method + "' method.", e );
|
|
||||||
}
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ( dependencyMismatch ) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if ( this.objectLength( rules ) ) {
|
|
||||||
this.successList.push( element );
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
},
|
|
||||||
|
|
||||||
// return the custom message for the given element and validation method
|
|
||||||
// specified in the element's HTML5 data attribute
|
|
||||||
// return the generic message if present and no method specific message is present
|
|
||||||
customDataMessage: function( element, method ) {
|
|
||||||
return $( element ).data( "msg" + method.charAt( 0 ).toUpperCase() +
|
|
||||||
method.substring( 1 ).toLowerCase() ) || $( element ).data( "msg" );
|
|
||||||
},
|
|
||||||
|
|
||||||
// return the custom message for the given element name and validation method
|
|
||||||
customMessage: function( name, method ) {
|
|
||||||
var m = this.settings.messages[ name ];
|
|
||||||
return m && ( m.constructor === String ? m : m[ method ]);
|
|
||||||
},
|
|
||||||
|
|
||||||
// return the first defined argument, allowing empty strings
|
|
||||||
findDefined: function() {
|
|
||||||
for ( var i = 0; i < arguments.length; i++) {
|
|
||||||
if ( arguments[ i ] !== undefined ) {
|
|
||||||
return arguments[ i ];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return undefined;
|
|
||||||
},
|
|
||||||
|
|
||||||
defaultMessage: function( element, method ) {
|
|
||||||
return this.findDefined(
|
|
||||||
this.customMessage( element.name, method ),
|
|
||||||
this.customDataMessage( element, method ),
|
|
||||||
// title is never undefined, so handle empty string as undefined
|
|
||||||
!this.settings.ignoreTitle && element.title || undefined,
|
|
||||||
$.validator.messages[ method ],
|
|
||||||
"<strong>Warning: No message defined for " + element.name + "</strong>"
|
|
||||||
);
|
|
||||||
},
|
|
||||||
|
|
||||||
formatAndAdd: function( element, rule ) {
|
|
||||||
var message = this.defaultMessage( element, rule.method ),
|
|
||||||
theregex = /\$?\{(\d+)\}/g;
|
|
||||||
if ( typeof message === "function" ) {
|
|
||||||
message = message.call( this, rule.parameters, element );
|
|
||||||
} else if ( theregex.test( message ) ) {
|
|
||||||
message = $.validator.format( message.replace( theregex, "{$1}" ), rule.parameters );
|
|
||||||
}
|
|
||||||
this.errorList.push({
|
|
||||||
message: message,
|
|
||||||
element: element,
|
|
||||||
method: rule.method
|
|
||||||
});
|
|
||||||
|
|
||||||
this.errorMap[ element.name ] = message;
|
|
||||||
this.submitted[ element.name ] = message;
|
|
||||||
},
|
|
||||||
|
|
||||||
addWrapper: function( toToggle ) {
|
|
||||||
if ( this.settings.wrapper ) {
|
|
||||||
toToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );
|
|
||||||
}
|
|
||||||
return toToggle;
|
|
||||||
},
|
|
||||||
|
|
||||||
defaultShowErrors: function() {
|
|
||||||
var i, elements, error;
|
|
||||||
for ( i = 0; this.errorList[ i ]; i++ ) {
|
|
||||||
error = this.errorList[ i ];
|
|
||||||
if ( this.settings.highlight ) {
|
|
||||||
this.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );
|
|
||||||
}
|
|
||||||
this.showLabel( error.element, error.message );
|
|
||||||
}
|
|
||||||
if ( this.errorList.length ) {
|
|
||||||
this.toShow = this.toShow.add( this.containers );
|
|
||||||
}
|
|
||||||
if ( this.settings.success ) {
|
|
||||||
for ( i = 0; this.successList[ i ]; i++ ) {
|
|
||||||
this.showLabel( this.successList[ i ] );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ( this.settings.unhighlight ) {
|
|
||||||
for ( i = 0, elements = this.validElements(); elements[ i ]; i++ ) {
|
|
||||||
this.settings.unhighlight.call( this, elements[ i ], this.settings.errorClass, this.settings.validClass );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this.toHide = this.toHide.not( this.toShow );
|
|
||||||
this.hideErrors();
|
|
||||||
this.addWrapper( this.toShow ).show();
|
|
||||||
},
|
|
||||||
|
|
||||||
validElements: function() {
|
|
||||||
return this.currentElements.not( this.invalidElements() );
|
|
||||||
},
|
|
||||||
|
|
||||||
invalidElements: function() {
|
|
||||||
return $( this.errorList ).map(function() {
|
|
||||||
return this.element;
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
showLabel: function( element, message ) {
|
|
||||||
var place, group, errorID,
|
|
||||||
error = this.errorsFor( element ),
|
|
||||||
elementID = this.idOrName( element ),
|
|
||||||
describedBy = $( element ).attr( "aria-describedby" );
|
|
||||||
if ( error.length ) {
|
|
||||||
// refresh error/success class
|
|
||||||
error.removeClass( this.settings.validClass ).addClass( this.settings.errorClass );
|
|
||||||
// replace message on existing label
|
|
||||||
error.html( message );
|
|
||||||
} else {
|
|
||||||
// create error element
|
|
||||||
error = $( "<" + this.settings.errorElement + ">" )
|
|
||||||
.attr( "id", elementID + "-error" )
|
|
||||||
.addClass( this.settings.errorClass )
|
|
||||||
.html( message || "" );
|
|
||||||
|
|
||||||
// Maintain reference to the element to be placed into the DOM
|
|
||||||
place = error;
|
|
||||||
if ( this.settings.wrapper ) {
|
|
||||||
// make sure the element is visible, even in IE
|
|
||||||
// actually showing the wrapped element is handled elsewhere
|
|
||||||
place = error.hide().show().wrap( "<" + this.settings.wrapper + "/>" ).parent();
|
|
||||||
}
|
|
||||||
if ( this.labelContainer.length ) {
|
|
||||||
this.labelContainer.append( place );
|
|
||||||
} else if ( this.settings.errorPlacement ) {
|
|
||||||
this.settings.errorPlacement( place, $( element ) );
|
|
||||||
} else {
|
|
||||||
place.insertAfter( element );
|
|
||||||
}
|
|
||||||
|
|
||||||
// Link error back to the element
|
|
||||||
if ( error.is( "label" ) ) {
|
|
||||||
// If the error is a label, then associate using 'for'
|
|
||||||
error.attr( "for", elementID );
|
|
||||||
} else if ( error.parents( "label[for='" + elementID + "']" ).length === 0 ) {
|
|
||||||
// If the element is not a child of an associated label, then it's necessary
|
|
||||||
// to explicitly apply aria-describedby
|
|
||||||
|
|
||||||
errorID = error.attr( "id" ).replace( /(:|\.|\[|\])/g, "\\$1");
|
|
||||||
// Respect existing non-error aria-describedby
|
|
||||||
if ( !describedBy ) {
|
|
||||||
describedBy = errorID;
|
|
||||||
} else if ( !describedBy.match( new RegExp( "\\b" + errorID + "\\b" ) ) ) {
|
|
||||||
// Add to end of list if not already present
|
|
||||||
describedBy += " " + errorID;
|
|
||||||
}
|
|
||||||
$( element ).attr( "aria-describedby", describedBy );
|
|
||||||
|
|
||||||
// If this element is grouped, then assign to all elements in the same group
|
|
||||||
group = this.groups[ element.name ];
|
|
||||||
if ( group ) {
|
|
||||||
$.each( this.groups, function( name, testgroup ) {
|
|
||||||
if ( testgroup === group ) {
|
|
||||||
$( "[name='" + name + "']", this.currentForm )
|
|
||||||
.attr( "aria-describedby", error.attr( "id" ) );
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ( !message && this.settings.success ) {
|
|
||||||
error.text( "" );
|
|
||||||
if ( typeof this.settings.success === "string" ) {
|
|
||||||
error.addClass( this.settings.success );
|
|
||||||
} else {
|
|
||||||
this.settings.success( error, element );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this.toShow = this.toShow.add( error );
|
|
||||||
},
|
|
||||||
|
|
||||||
errorsFor: function( element ) {
|
|
||||||
var name = this.idOrName( element ),
|
|
||||||
describer = $( element ).attr( "aria-describedby" ),
|
|
||||||
selector = "label[for='" + name + "'], label[for='" + name + "'] *";
|
|
||||||
|
|
||||||
// aria-describedby should directly reference the error element
|
|
||||||
if ( describer ) {
|
|
||||||
selector = selector + ", #" + describer.replace( /\s+/g, ", #" );
|
|
||||||
}
|
|
||||||
return this
|
|
||||||
.errors()
|
|
||||||
.filter( selector );
|
|
||||||
},
|
|
||||||
|
|
||||||
idOrName: function( element ) {
|
|
||||||
return this.groups[ element.name ] || ( this.checkable( element ) ? element.name : element.id || element.name );
|
|
||||||
},
|
|
||||||
|
|
||||||
validationTargetFor: function( element ) {
|
|
||||||
|
|
||||||
// If radio/checkbox, validate first element in group instead
|
|
||||||
if ( this.checkable( element ) ) {
|
|
||||||
element = this.findByName( element.name );
|
|
||||||
}
|
|
||||||
|
|
||||||
// Always apply ignore filter
|
|
||||||
return $( element ).not( this.settings.ignore )[ 0 ];
|
|
||||||
},
|
|
||||||
|
|
||||||
checkable: function( element ) {
|
|
||||||
return ( /radio|checkbox/i ).test( element.type );
|
|
||||||
},
|
|
||||||
|
|
||||||
findByName: function( name ) {
|
|
||||||
return $( this.currentForm ).find( "[name='" + name + "']" );
|
|
||||||
},
|
|
||||||
|
|
||||||
getLength: function( value, element ) {
|
|
||||||
switch ( element.nodeName.toLowerCase() ) {
|
|
||||||
case "select":
|
|
||||||
return $( "option:selected", element ).length;
|
|
||||||
case "input":
|
|
||||||
if ( this.checkable( element ) ) {
|
|
||||||
return this.findByName( element.name ).filter( ":checked" ).length;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return value.length;
|
|
||||||
},
|
|
||||||
|
|
||||||
depend: function( param, element ) {
|
|
||||||
return this.dependTypes[typeof param] ? this.dependTypes[typeof param]( param, element ) : true;
|
|
||||||
},
|
|
||||||
|
|
||||||
dependTypes: {
|
|
||||||
"boolean": function( param ) {
|
|
||||||
return param;
|
|
||||||
},
|
|
||||||
"string": function( param, element ) {
|
|
||||||
return !!$( param, element.form ).length;
|
|
||||||
},
|
|
||||||
"function": function( param, element ) {
|
|
||||||
return param( element );
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
optional: function( element ) {
|
|
||||||
var val = this.elementValue( element );
|
|
||||||
return !$.validator.methods.required.call( this, val, element ) && "dependency-mismatch";
|
|
||||||
},
|
|
||||||
|
|
||||||
startRequest: function( element ) {
|
|
||||||
if ( !this.pending[ element.name ] ) {
|
|
||||||
this.pendingRequest++;
|
|
||||||
this.pending[ element.name ] = true;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
stopRequest: function( element, valid ) {
|
|
||||||
this.pendingRequest--;
|
|
||||||
// sometimes synchronization fails, make sure pendingRequest is never < 0
|
|
||||||
if ( this.pendingRequest < 0 ) {
|
|
||||||
this.pendingRequest = 0;
|
|
||||||
}
|
|
||||||
delete this.pending[ element.name ];
|
|
||||||
if ( valid && this.pendingRequest === 0 && this.formSubmitted && this.form() ) {
|
|
||||||
$( this.currentForm ).submit();
|
|
||||||
this.formSubmitted = false;
|
|
||||||
} else if (!valid && this.pendingRequest === 0 && this.formSubmitted ) {
|
|
||||||
$( this.currentForm ).triggerHandler( "invalid-form", [ this ]);
|
|
||||||
this.formSubmitted = false;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
previousValue: function( element ) {
|
|
||||||
return $.data( element, "previousValue" ) || $.data( element, "previousValue", {
|
|
||||||
old: null,
|
|
||||||
valid: true,
|
|
||||||
message: this.defaultMessage( element, "remote" )
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
},
|
|
||||||
|
|
||||||
classRuleSettings: {
|
|
||||||
required: { required: true },
|
|
||||||
email: { email: true },
|
|
||||||
url: { url: true },
|
|
||||||
date: { date: true },
|
|
||||||
dateISO: { dateISO: true },
|
|
||||||
number: { number: true },
|
|
||||||
digits: { digits: true },
|
|
||||||
creditcard: { creditcard: true }
|
|
||||||
},
|
|
||||||
|
|
||||||
addClassRules: function( className, rules ) {
|
|
||||||
if ( className.constructor === String ) {
|
|
||||||
this.classRuleSettings[ className ] = rules;
|
|
||||||
} else {
|
|
||||||
$.extend( this.classRuleSettings, className );
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
classRules: function( element ) {
|
|
||||||
var rules = {},
|
|
||||||
classes = $( element ).attr( "class" );
|
|
||||||
|
|
||||||
if ( classes ) {
|
|
||||||
$.each( classes.split( " " ), function() {
|
|
||||||
if ( this in $.validator.classRuleSettings ) {
|
|
||||||
$.extend( rules, $.validator.classRuleSettings[ this ]);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return rules;
|
|
||||||
},
|
|
||||||
|
|
||||||
attributeRules: function( element ) {
|
|
||||||
var rules = {},
|
|
||||||
$element = $( element ),
|
|
||||||
type = element.getAttribute( "type" ),
|
|
||||||
method, value;
|
|
||||||
|
|
||||||
for ( method in $.validator.methods ) {
|
|
||||||
|
|
||||||
// support for <input required> in both html5 and older browsers
|
|
||||||
if ( method === "required" ) {
|
|
||||||
value = element.getAttribute( method );
|
|
||||||
// Some browsers return an empty string for the required attribute
|
|
||||||
// and non-HTML5 browsers might have required="" markup
|
|
||||||
if ( value === "" ) {
|
|
||||||
value = true;
|
|
||||||
}
|
|
||||||
// force non-HTML5 browsers to return bool
|
|
||||||
value = !!value;
|
|
||||||
} else {
|
|
||||||
value = $element.attr( method );
|
|
||||||
}
|
|
||||||
|
|
||||||
// convert the value to a number for number inputs, and for text for backwards compability
|
|
||||||
// allows type="date" and others to be compared as strings
|
|
||||||
if ( /min|max/.test( method ) && ( type === null || /number|range|text/.test( type ) ) ) {
|
|
||||||
value = Number( value );
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( value || value === 0 ) {
|
|
||||||
rules[ method ] = value;
|
|
||||||
} else if ( type === method && type !== "range" ) {
|
|
||||||
// exception: the jquery validate 'range' method
|
|
||||||
// does not test for the html5 'range' type
|
|
||||||
rules[ method ] = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// maxlength may be returned as -1, 2147483647 ( IE ) and 524288 ( safari ) for text inputs
|
|
||||||
if ( rules.maxlength && /-1|2147483647|524288/.test( rules.maxlength ) ) {
|
|
||||||
delete rules.maxlength;
|
|
||||||
}
|
|
||||||
|
|
||||||
return rules;
|
|
||||||
},
|
|
||||||
|
|
||||||
dataRules: function( element ) {
|
|
||||||
var method, value,
|
|
||||||
rules = {}, $element = $( element );
|
|
||||||
for ( method in $.validator.methods ) {
|
|
||||||
value = $element.data( "rule" + method.charAt( 0 ).toUpperCase() + method.substring( 1 ).toLowerCase() );
|
|
||||||
if ( value !== undefined ) {
|
|
||||||
rules[ method ] = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return rules;
|
|
||||||
},
|
|
||||||
|
|
||||||
staticRules: function( element ) {
|
|
||||||
var rules = {},
|
|
||||||
validator = $.data( element.form, "validator" );
|
|
||||||
|
|
||||||
if ( validator.settings.rules ) {
|
|
||||||
rules = $.validator.normalizeRule( validator.settings.rules[ element.name ] ) || {};
|
|
||||||
}
|
|
||||||
return rules;
|
|
||||||
},
|
|
||||||
|
|
||||||
normalizeRules: function( rules, element ) {
|
|
||||||
// handle dependency check
|
|
||||||
$.each( rules, function( prop, val ) {
|
|
||||||
// ignore rule when param is explicitly false, eg. required:false
|
|
||||||
if ( val === false ) {
|
|
||||||
delete rules[ prop ];
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if ( val.param || val.depends ) {
|
|
||||||
var keepRule = true;
|
|
||||||
switch ( typeof val.depends ) {
|
|
||||||
case "string":
|
|
||||||
keepRule = !!$( val.depends, element.form ).length;
|
|
||||||
break;
|
|
||||||
case "function":
|
|
||||||
keepRule = val.depends.call( element, element );
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if ( keepRule ) {
|
|
||||||
rules[ prop ] = val.param !== undefined ? val.param : true;
|
|
||||||
} else {
|
|
||||||
delete rules[ prop ];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// evaluate parameters
|
|
||||||
$.each( rules, function( rule, parameter ) {
|
|
||||||
rules[ rule ] = $.isFunction( parameter ) ? parameter( element ) : parameter;
|
|
||||||
});
|
|
||||||
|
|
||||||
// clean number parameters
|
|
||||||
$.each([ "minlength", "maxlength" ], function() {
|
|
||||||
if ( rules[ this ] ) {
|
|
||||||
rules[ this ] = Number( rules[ this ] );
|
|
||||||
}
|
|
||||||
});
|
|
||||||
$.each([ "rangelength", "range" ], function() {
|
|
||||||
var parts;
|
|
||||||
if ( rules[ this ] ) {
|
|
||||||
if ( $.isArray( rules[ this ] ) ) {
|
|
||||||
rules[ this ] = [ Number( rules[ this ][ 0 ]), Number( rules[ this ][ 1 ] ) ];
|
|
||||||
} else if ( typeof rules[ this ] === "string" ) {
|
|
||||||
parts = rules[ this ].replace(/[\[\]]/g, "" ).split( /[\s,]+/ );
|
|
||||||
rules[ this ] = [ Number( parts[ 0 ]), Number( parts[ 1 ] ) ];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
if ( $.validator.autoCreateRanges ) {
|
|
||||||
// auto-create ranges
|
|
||||||
if ( rules.min != null && rules.max != null ) {
|
|
||||||
rules.range = [ rules.min, rules.max ];
|
|
||||||
delete rules.min;
|
|
||||||
delete rules.max;
|
|
||||||
}
|
|
||||||
if ( rules.minlength != null && rules.maxlength != null ) {
|
|
||||||
rules.rangelength = [ rules.minlength, rules.maxlength ];
|
|
||||||
delete rules.minlength;
|
|
||||||
delete rules.maxlength;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return rules;
|
|
||||||
},
|
|
||||||
|
|
||||||
// Converts a simple string to a {string: true} rule, e.g., "required" to {required:true}
|
|
||||||
normalizeRule: function( data ) {
|
|
||||||
if ( typeof data === "string" ) {
|
|
||||||
var transformed = {};
|
|
||||||
$.each( data.split( /\s/ ), function() {
|
|
||||||
transformed[ this ] = true;
|
|
||||||
});
|
|
||||||
data = transformed;
|
|
||||||
}
|
|
||||||
return data;
|
|
||||||
},
|
|
||||||
|
|
||||||
// http://jqueryvalidation.org/jQuery.validator.addMethod/
|
|
||||||
addMethod: function( name, method, message ) {
|
|
||||||
$.validator.methods[ name ] = method;
|
|
||||||
$.validator.messages[ name ] = message !== undefined ? message : $.validator.messages[ name ];
|
|
||||||
if ( method.length < 3 ) {
|
|
||||||
$.validator.addClassRules( name, $.validator.normalizeRule( name ) );
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
methods: {
|
|
||||||
|
|
||||||
// http://jqueryvalidation.org/required-method/
|
|
||||||
required: function( value, element, param ) {
|
|
||||||
// check if dependency is met
|
|
||||||
if ( !this.depend( param, element ) ) {
|
|
||||||
return "dependency-mismatch";
|
|
||||||
}
|
|
||||||
if ( element.nodeName.toLowerCase() === "select" ) {
|
|
||||||
// could be an array for select-multiple or a string, both are fine this way
|
|
||||||
var val = $( element ).val();
|
|
||||||
return val && val.length > 0;
|
|
||||||
}
|
|
||||||
if ( this.checkable( element ) ) {
|
|
||||||
return this.getLength( value, element ) > 0;
|
|
||||||
}
|
|
||||||
return $.trim( value ).length > 0;
|
|
||||||
},
|
|
||||||
|
|
||||||
// http://jqueryvalidation.org/email-method/
|
|
||||||
email: function( value, element ) {
|
|
||||||
// From http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#e-mail-state-%28type=email%29
|
|
||||||
// Retrieved 2014-01-14
|
|
||||||
// If you have a problem with this implementation, report a bug against the above spec
|
|
||||||
// Or use custom methods to implement your own email validation
|
|
||||||
return this.optional( element ) || /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test( value );
|
|
||||||
},
|
|
||||||
|
|
||||||
// http://jqueryvalidation.org/url-method/
|
|
||||||
url: function( value, element ) {
|
|
||||||
// contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/
|
|
||||||
return this.optional( element ) || /^(https?|s?ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test( value );
|
|
||||||
},
|
|
||||||
|
|
||||||
// http://jqueryvalidation.org/date-method/
|
|
||||||
date: function( value, element ) {
|
|
||||||
return this.optional( element ) || !/Invalid|NaN/.test( new Date( value ).toString() );
|
|
||||||
},
|
|
||||||
|
|
||||||
// http://jqueryvalidation.org/dateISO-method/
|
|
||||||
dateISO: function( value, element ) {
|
|
||||||
return this.optional( element ) || /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test( value );
|
|
||||||
},
|
|
||||||
|
|
||||||
// http://jqueryvalidation.org/number-method/
|
|
||||||
number: function( value, element ) {
|
|
||||||
return this.optional( element ) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test( value );
|
|
||||||
},
|
|
||||||
|
|
||||||
// http://jqueryvalidation.org/digits-method/
|
|
||||||
digits: function( value, element ) {
|
|
||||||
return this.optional( element ) || /^\d+$/.test( value );
|
|
||||||
},
|
|
||||||
|
|
||||||
// http://jqueryvalidation.org/creditcard-method/
|
|
||||||
// based on http://en.wikipedia.org/wiki/Luhn/
|
|
||||||
creditcard: function( value, element ) {
|
|
||||||
if ( this.optional( element ) ) {
|
|
||||||
return "dependency-mismatch";
|
|
||||||
}
|
|
||||||
// accept only spaces, digits and dashes
|
|
||||||
if ( /[^0-9 \-]+/.test( value ) ) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
var nCheck = 0,
|
|
||||||
nDigit = 0,
|
|
||||||
bEven = false,
|
|
||||||
n, cDigit;
|
|
||||||
|
|
||||||
value = value.replace( /\D/g, "" );
|
|
||||||
|
|
||||||
// Basing min and max length on
|
|
||||||
// http://developer.ean.com/general_info/Valid_Credit_Card_Types
|
|
||||||
if ( value.length < 13 || value.length > 19 ) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
for ( n = value.length - 1; n >= 0; n--) {
|
|
||||||
cDigit = value.charAt( n );
|
|
||||||
nDigit = parseInt( cDigit, 10 );
|
|
||||||
if ( bEven ) {
|
|
||||||
if ( ( nDigit *= 2 ) > 9 ) {
|
|
||||||
nDigit -= 9;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
nCheck += nDigit;
|
|
||||||
bEven = !bEven;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ( nCheck % 10 ) === 0;
|
|
||||||
},
|
|
||||||
|
|
||||||
// http://jqueryvalidation.org/minlength-method/
|
|
||||||
minlength: function( value, element, param ) {
|
|
||||||
var length = $.isArray( value ) ? value.length : this.getLength( value, element );
|
|
||||||
return this.optional( element ) || length >= param;
|
|
||||||
},
|
|
||||||
|
|
||||||
// http://jqueryvalidation.org/maxlength-method/
|
|
||||||
maxlength: function( value, element, param ) {
|
|
||||||
var length = $.isArray( value ) ? value.length : this.getLength( value, element );
|
|
||||||
return this.optional( element ) || length <= param;
|
|
||||||
},
|
|
||||||
|
|
||||||
// http://jqueryvalidation.org/rangelength-method/
|
|
||||||
rangelength: function( value, element, param ) {
|
|
||||||
var length = $.isArray( value ) ? value.length : this.getLength( value, element );
|
|
||||||
return this.optional( element ) || ( length >= param[ 0 ] && length <= param[ 1 ] );
|
|
||||||
},
|
|
||||||
|
|
||||||
// http://jqueryvalidation.org/min-method/
|
|
||||||
min: function( value, element, param ) {
|
|
||||||
return this.optional( element ) || value >= param;
|
|
||||||
},
|
|
||||||
|
|
||||||
// http://jqueryvalidation.org/max-method/
|
|
||||||
max: function( value, element, param ) {
|
|
||||||
return this.optional( element ) || value <= param;
|
|
||||||
},
|
|
||||||
|
|
||||||
// http://jqueryvalidation.org/range-method/
|
|
||||||
range: function( value, element, param ) {
|
|
||||||
return this.optional( element ) || ( value >= param[ 0 ] && value <= param[ 1 ] );
|
|
||||||
},
|
|
||||||
|
|
||||||
// http://jqueryvalidation.org/equalTo-method/
|
|
||||||
equalTo: function( value, element, param ) {
|
|
||||||
// bind to the blur event of the target in order to revalidate whenever the target field is updated
|
|
||||||
// TODO find a way to bind the event just once, avoiding the unbind-rebind overhead
|
|
||||||
var target = $( param );
|
|
||||||
if ( this.settings.onfocusout ) {
|
|
||||||
target.unbind( ".validate-equalTo" ).bind( "blur.validate-equalTo", function() {
|
|
||||||
$( element ).valid();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return value === target.val();
|
|
||||||
},
|
|
||||||
|
|
||||||
// http://jqueryvalidation.org/remote-method/
|
|
||||||
remote: function( value, element, param ) {
|
|
||||||
if ( this.optional( element ) ) {
|
|
||||||
return "dependency-mismatch";
|
|
||||||
}
|
|
||||||
|
|
||||||
var previous = this.previousValue( element ),
|
|
||||||
validator, data;
|
|
||||||
|
|
||||||
if (!this.settings.messages[ element.name ] ) {
|
|
||||||
this.settings.messages[ element.name ] = {};
|
|
||||||
}
|
|
||||||
previous.originalMessage = this.settings.messages[ element.name ].remote;
|
|
||||||
this.settings.messages[ element.name ].remote = previous.message;
|
|
||||||
|
|
||||||
param = typeof param === "string" && { url: param } || param;
|
|
||||||
|
|
||||||
if ( previous.old === value ) {
|
|
||||||
return previous.valid;
|
|
||||||
}
|
|
||||||
|
|
||||||
previous.old = value;
|
|
||||||
validator = this;
|
|
||||||
this.startRequest( element );
|
|
||||||
data = {};
|
|
||||||
data[ element.name ] = value;
|
|
||||||
$.ajax( $.extend( true, {
|
|
||||||
url: param,
|
|
||||||
mode: "abort",
|
|
||||||
port: "validate" + element.name,
|
|
||||||
dataType: "json",
|
|
||||||
data: data,
|
|
||||||
context: validator.currentForm,
|
|
||||||
success: function( response ) {
|
|
||||||
var valid = response === true || response === "true",
|
|
||||||
errors, message, submitted;
|
|
||||||
|
|
||||||
validator.settings.messages[ element.name ].remote = previous.originalMessage;
|
|
||||||
if ( valid ) {
|
|
||||||
submitted = validator.formSubmitted;
|
|
||||||
validator.prepareElement( element );
|
|
||||||
validator.formSubmitted = submitted;
|
|
||||||
validator.successList.push( element );
|
|
||||||
delete validator.invalid[ element.name ];
|
|
||||||
validator.showErrors();
|
|
||||||
} else {
|
|
||||||
errors = {};
|
|
||||||
message = response || validator.defaultMessage( element, "remote" );
|
|
||||||
errors[ element.name ] = previous.message = $.isFunction( message ) ? message( value ) : message;
|
|
||||||
validator.invalid[ element.name ] = true;
|
|
||||||
validator.showErrors( errors );
|
|
||||||
}
|
|
||||||
previous.valid = valid;
|
|
||||||
validator.stopRequest( element, valid );
|
|
||||||
}
|
|
||||||
}, param ) );
|
|
||||||
return "pending";
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
$.format = function deprecated() {
|
|
||||||
throw "$.format has been deprecated. Please use $.validator.format instead.";
|
|
||||||
};
|
|
||||||
|
|
||||||
// ajax mode: abort
|
|
||||||
// usage: $.ajax({ mode: "abort"[, port: "uniqueport"]});
|
|
||||||
// if mode:"abort" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()
|
|
||||||
|
|
||||||
var pendingRequests = {},
|
|
||||||
ajax;
|
|
||||||
// Use a prefilter if available (1.5+)
|
|
||||||
if ( $.ajaxPrefilter ) {
|
|
||||||
$.ajaxPrefilter(function( settings, _, xhr ) {
|
|
||||||
var port = settings.port;
|
|
||||||
if ( settings.mode === "abort" ) {
|
|
||||||
if ( pendingRequests[port] ) {
|
|
||||||
pendingRequests[port].abort();
|
|
||||||
}
|
|
||||||
pendingRequests[port] = xhr;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
// Proxy ajax
|
|
||||||
ajax = $.ajax;
|
|
||||||
$.ajax = function( settings ) {
|
|
||||||
var mode = ( "mode" in settings ? settings : $.ajaxSettings ).mode,
|
|
||||||
port = ( "port" in settings ? settings : $.ajaxSettings ).port;
|
|
||||||
if ( mode === "abort" ) {
|
|
||||||
if ( pendingRequests[port] ) {
|
|
||||||
pendingRequests[port].abort();
|
|
||||||
}
|
|
||||||
pendingRequests[port] = ajax.apply(this, arguments);
|
|
||||||
return pendingRequests[port];
|
|
||||||
}
|
|
||||||
return ajax.apply(this, arguments);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
// provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation
|
|
||||||
// handler is only called when $(event.target).is(delegate), in the scope of the jquery-object for event.target
|
|
||||||
|
|
||||||
$.extend($.fn, {
|
|
||||||
validateDelegate: function( delegate, type, handler ) {
|
|
||||||
return this.bind(type, function( event ) {
|
|
||||||
var target = $(event.target);
|
|
||||||
if ( target.is(delegate) ) {
|
|
||||||
return handler.apply(target, arguments);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,4 +0,0 @@
|
|||||||
/*! jQuery Validation Plugin - v1.13.1 - 10/14/2014
|
|
||||||
* http://jqueryvalidation.org/
|
|
||||||
* Copyright (c) 2014 Jörn Zaefferer; Licensed MIT */
|
|
||||||
!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a(jQuery)}(function(a){a.extend(a.fn,{validate:function(b){if(!this.length)return void(b&&b.debug&&window.console&&console.warn("Nothing selected, can't validate, returning nothing."));var c=a.data(this[0],"validator");return c?c:(this.attr("novalidate","novalidate"),c=new a.validator(b,this[0]),a.data(this[0],"validator",c),c.settings.onsubmit&&(this.validateDelegate(":submit","click",function(b){c.settings.submitHandler&&(c.submitButton=b.target),a(b.target).hasClass("cancel")&&(c.cancelSubmit=!0),void 0!==a(b.target).attr("formnovalidate")&&(c.cancelSubmit=!0)}),this.submit(function(b){function d(){var d,e;return c.settings.submitHandler?(c.submitButton&&(d=a("<input type='hidden'/>").attr("name",c.submitButton.name).val(a(c.submitButton).val()).appendTo(c.currentForm)),e=c.settings.submitHandler.call(c,c.currentForm,b),c.submitButton&&d.remove(),void 0!==e?e:!1):!0}return c.settings.debug&&b.preventDefault(),c.cancelSubmit?(c.cancelSubmit=!1,d()):c.form()?c.pendingRequest?(c.formSubmitted=!0,!1):d():(c.focusInvalid(),!1)})),c)},valid:function(){var b,c;return a(this[0]).is("form")?b=this.validate().form():(b=!0,c=a(this[0].form).validate(),this.each(function(){b=c.element(this)&&b})),b},removeAttrs:function(b){var c={},d=this;return a.each(b.split(/\s/),function(a,b){c[b]=d.attr(b),d.removeAttr(b)}),c},rules:function(b,c){var d,e,f,g,h,i,j=this[0];if(b)switch(d=a.data(j.form,"validator").settings,e=d.rules,f=a.validator.staticRules(j),b){case"add":a.extend(f,a.validator.normalizeRule(c)),delete f.messages,e[j.name]=f,c.messages&&(d.messages[j.name]=a.extend(d.messages[j.name],c.messages));break;case"remove":return c?(i={},a.each(c.split(/\s/),function(b,c){i[c]=f[c],delete f[c],"required"===c&&a(j).removeAttr("aria-required")}),i):(delete e[j.name],f)}return g=a.validator.normalizeRules(a.extend({},a.validator.classRules(j),a.validator.attributeRules(j),a.validator.dataRules(j),a.validator.staticRules(j)),j),g.required&&(h=g.required,delete g.required,g=a.extend({required:h},g),a(j).attr("aria-required","true")),g.remote&&(h=g.remote,delete g.remote,g=a.extend(g,{remote:h})),g}}),a.extend(a.expr[":"],{blank:function(b){return!a.trim(""+a(b).val())},filled:function(b){return!!a.trim(""+a(b).val())},unchecked:function(b){return!a(b).prop("checked")}}),a.validator=function(b,c){this.settings=a.extend(!0,{},a.validator.defaults,b),this.currentForm=c,this.init()},a.validator.format=function(b,c){return 1===arguments.length?function(){var c=a.makeArray(arguments);return c.unshift(b),a.validator.format.apply(this,c)}:(arguments.length>2&&c.constructor!==Array&&(c=a.makeArray(arguments).slice(1)),c.constructor!==Array&&(c=[c]),a.each(c,function(a,c){b=b.replace(new RegExp("\\{"+a+"\\}","g"),function(){return c})}),b)},a.extend(a.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",validClass:"valid",errorElement:"label",focusCleanup:!1,focusInvalid:!0,errorContainer:a([]),errorLabelContainer:a([]),onsubmit:!0,ignore:":hidden",ignoreTitle:!1,onfocusin:function(a){this.lastActive=a,this.settings.focusCleanup&&(this.settings.unhighlight&&this.settings.unhighlight.call(this,a,this.settings.errorClass,this.settings.validClass),this.hideThese(this.errorsFor(a)))},onfocusout:function(a){this.checkable(a)||!(a.name in this.submitted)&&this.optional(a)||this.element(a)},onkeyup:function(a,b){(9!==b.which||""!==this.elementValue(a))&&(a.name in this.submitted||a===this.lastElement)&&this.element(a)},onclick:function(a){a.name in this.submitted?this.element(a):a.parentNode.name in this.submitted&&this.element(a.parentNode)},highlight:function(b,c,d){"radio"===b.type?this.findByName(b.name).addClass(c).removeClass(d):a(b).addClass(c).removeClass(d)},unhighlight:function(b,c,d){"radio"===b.type?this.findByName(b.name).removeClass(c).addClass(d):a(b).removeClass(c).addClass(d)}},setDefaults:function(b){a.extend(a.validator.defaults,b)},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date ( ISO ).",number:"Please enter a valid number.",digits:"Please enter only digits.",creditcard:"Please enter a valid credit card number.",equalTo:"Please enter the same value again.",maxlength:a.validator.format("Please enter no more than {0} characters."),minlength:a.validator.format("Please enter at least {0} characters."),rangelength:a.validator.format("Please enter a value between {0} and {1} characters long."),range:a.validator.format("Please enter a value between {0} and {1}."),max:a.validator.format("Please enter a value less than or equal to {0}."),min:a.validator.format("Please enter a value greater than or equal to {0}.")},autoCreateRanges:!1,prototype:{init:function(){function b(b){var c=a.data(this[0].form,"validator"),d="on"+b.type.replace(/^validate/,""),e=c.settings;e[d]&&!this.is(e.ignore)&&e[d].call(c,this[0],b)}this.labelContainer=a(this.settings.errorLabelContainer),this.errorContext=this.labelContainer.length&&this.labelContainer||a(this.currentForm),this.containers=a(this.settings.errorContainer).add(this.settings.errorLabelContainer),this.submitted={},this.valueCache={},this.pendingRequest=0,this.pending={},this.invalid={},this.reset();var c,d=this.groups={};a.each(this.settings.groups,function(b,c){"string"==typeof c&&(c=c.split(/\s/)),a.each(c,function(a,c){d[c]=b})}),c=this.settings.rules,a.each(c,function(b,d){c[b]=a.validator.normalizeRule(d)}),a(this.currentForm).validateDelegate(":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'] ,[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], [type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], [type='radio'], [type='checkbox']","focusin focusout keyup",b).validateDelegate("select, option, [type='radio'], [type='checkbox']","click",b),this.settings.invalidHandler&&a(this.currentForm).bind("invalid-form.validate",this.settings.invalidHandler),a(this.currentForm).find("[required], [data-rule-required], .required").attr("aria-required","true")},form:function(){return this.checkForm(),a.extend(this.submitted,this.errorMap),this.invalid=a.extend({},this.errorMap),this.valid()||a(this.currentForm).triggerHandler("invalid-form",[this]),this.showErrors(),this.valid()},checkForm:function(){this.prepareForm();for(var a=0,b=this.currentElements=this.elements();b[a];a++)this.check(b[a]);return this.valid()},element:function(b){var c=this.clean(b),d=this.validationTargetFor(c),e=!0;return this.lastElement=d,void 0===d?delete this.invalid[c.name]:(this.prepareElement(d),this.currentElements=a(d),e=this.check(d)!==!1,e?delete this.invalid[d.name]:this.invalid[d.name]=!0),a(b).attr("aria-invalid",!e),this.numberOfInvalids()||(this.toHide=this.toHide.add(this.containers)),this.showErrors(),e},showErrors:function(b){if(b){a.extend(this.errorMap,b),this.errorList=[];for(var c in b)this.errorList.push({message:b[c],element:this.findByName(c)[0]});this.successList=a.grep(this.successList,function(a){return!(a.name in b)})}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors()},resetForm:function(){a.fn.resetForm&&a(this.currentForm).resetForm(),this.submitted={},this.lastElement=null,this.prepareForm(),this.hideErrors(),this.elements().removeClass(this.settings.errorClass).removeData("previousValue").removeAttr("aria-invalid")},numberOfInvalids:function(){return this.objectLength(this.invalid)},objectLength:function(a){var b,c=0;for(b in a)c++;return c},hideErrors:function(){this.hideThese(this.toHide)},hideThese:function(a){a.not(this.containers).text(""),this.addWrapper(a).hide()},valid:function(){return 0===this.size()},size:function(){return this.errorList.length},focusInvalid:function(){if(this.settings.focusInvalid)try{a(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus().trigger("focusin")}catch(b){}},findLastActive:function(){var b=this.lastActive;return b&&1===a.grep(this.errorList,function(a){return a.element.name===b.name}).length&&b},elements:function(){var b=this,c={};return a(this.currentForm).find("input, select, textarea").not(":submit, :reset, :image, [disabled], [readonly]").not(this.settings.ignore).filter(function(){return!this.name&&b.settings.debug&&window.console&&console.error("%o has no name assigned",this),this.name in c||!b.objectLength(a(this).rules())?!1:(c[this.name]=!0,!0)})},clean:function(b){return a(b)[0]},errors:function(){var b=this.settings.errorClass.split(" ").join(".");return a(this.settings.errorElement+"."+b,this.errorContext)},reset:function(){this.successList=[],this.errorList=[],this.errorMap={},this.toShow=a([]),this.toHide=a([]),this.currentElements=a([])},prepareForm:function(){this.reset(),this.toHide=this.errors().add(this.containers)},prepareElement:function(a){this.reset(),this.toHide=this.errorsFor(a)},elementValue:function(b){var c,d=a(b),e=b.type;return"radio"===e||"checkbox"===e?a("input[name='"+b.name+"']:checked").val():"number"===e&&"undefined"!=typeof b.validity?b.validity.badInput?!1:d.val():(c=d.val(),"string"==typeof c?c.replace(/\r/g,""):c)},check:function(b){b=this.validationTargetFor(this.clean(b));var c,d,e,f=a(b).rules(),g=a.map(f,function(a,b){return b}).length,h=!1,i=this.elementValue(b);for(d in f){e={method:d,parameters:f[d]};try{if(c=a.validator.methods[d].call(this,i,b,e.parameters),"dependency-mismatch"===c&&1===g){h=!0;continue}if(h=!1,"pending"===c)return void(this.toHide=this.toHide.not(this.errorsFor(b)));if(!c)return this.formatAndAdd(b,e),!1}catch(j){throw this.settings.debug&&window.console&&console.log("Exception occurred when checking element "+b.id+", check the '"+e.method+"' method.",j),j}}if(!h)return this.objectLength(f)&&this.successList.push(b),!0},customDataMessage:function(b,c){return a(b).data("msg"+c.charAt(0).toUpperCase()+c.substring(1).toLowerCase())||a(b).data("msg")},customMessage:function(a,b){var c=this.settings.messages[a];return c&&(c.constructor===String?c:c[b])},findDefined:function(){for(var a=0;a<arguments.length;a++)if(void 0!==arguments[a])return arguments[a];return void 0},defaultMessage:function(b,c){return this.findDefined(this.customMessage(b.name,c),this.customDataMessage(b,c),!this.settings.ignoreTitle&&b.title||void 0,a.validator.messages[c],"<strong>Warning: No message defined for "+b.name+"</strong>")},formatAndAdd:function(b,c){var d=this.defaultMessage(b,c.method),e=/\$?\{(\d+)\}/g;"function"==typeof d?d=d.call(this,c.parameters,b):e.test(d)&&(d=a.validator.format(d.replace(e,"{$1}"),c.parameters)),this.errorList.push({message:d,element:b,method:c.method}),this.errorMap[b.name]=d,this.submitted[b.name]=d},addWrapper:function(a){return this.settings.wrapper&&(a=a.add(a.parent(this.settings.wrapper))),a},defaultShowErrors:function(){var a,b,c;for(a=0;this.errorList[a];a++)c=this.errorList[a],this.settings.highlight&&this.settings.highlight.call(this,c.element,this.settings.errorClass,this.settings.validClass),this.showLabel(c.element,c.message);if(this.errorList.length&&(this.toShow=this.toShow.add(this.containers)),this.settings.success)for(a=0;this.successList[a];a++)this.showLabel(this.successList[a]);if(this.settings.unhighlight)for(a=0,b=this.validElements();b[a];a++)this.settings.unhighlight.call(this,b[a],this.settings.errorClass,this.settings.validClass);this.toHide=this.toHide.not(this.toShow),this.hideErrors(),this.addWrapper(this.toShow).show()},validElements:function(){return this.currentElements.not(this.invalidElements())},invalidElements:function(){return a(this.errorList).map(function(){return this.element})},showLabel:function(b,c){var d,e,f,g=this.errorsFor(b),h=this.idOrName(b),i=a(b).attr("aria-describedby");g.length?(g.removeClass(this.settings.validClass).addClass(this.settings.errorClass),g.html(c)):(g=a("<"+this.settings.errorElement+">").attr("id",h+"-error").addClass(this.settings.errorClass).html(c||""),d=g,this.settings.wrapper&&(d=g.hide().show().wrap("<"+this.settings.wrapper+"/>").parent()),this.labelContainer.length?this.labelContainer.append(d):this.settings.errorPlacement?this.settings.errorPlacement(d,a(b)):d.insertAfter(b),g.is("label")?g.attr("for",h):0===g.parents("label[for='"+h+"']").length&&(f=g.attr("id").replace(/(:|\.|\[|\])/g,"\\$1"),i?i.match(new RegExp("\\b"+f+"\\b"))||(i+=" "+f):i=f,a(b).attr("aria-describedby",i),e=this.groups[b.name],e&&a.each(this.groups,function(b,c){c===e&&a("[name='"+b+"']",this.currentForm).attr("aria-describedby",g.attr("id"))}))),!c&&this.settings.success&&(g.text(""),"string"==typeof this.settings.success?g.addClass(this.settings.success):this.settings.success(g,b)),this.toShow=this.toShow.add(g)},errorsFor:function(b){var c=this.idOrName(b),d=a(b).attr("aria-describedby"),e="label[for='"+c+"'], label[for='"+c+"'] *";return d&&(e=e+", #"+d.replace(/\s+/g,", #")),this.errors().filter(e)},idOrName:function(a){return this.groups[a.name]||(this.checkable(a)?a.name:a.id||a.name)},validationTargetFor:function(b){return this.checkable(b)&&(b=this.findByName(b.name)),a(b).not(this.settings.ignore)[0]},checkable:function(a){return/radio|checkbox/i.test(a.type)},findByName:function(b){return a(this.currentForm).find("[name='"+b+"']")},getLength:function(b,c){switch(c.nodeName.toLowerCase()){case"select":return a("option:selected",c).length;case"input":if(this.checkable(c))return this.findByName(c.name).filter(":checked").length}return b.length},depend:function(a,b){return this.dependTypes[typeof a]?this.dependTypes[typeof a](a,b):!0},dependTypes:{"boolean":function(a){return a},string:function(b,c){return!!a(b,c.form).length},"function":function(a,b){return a(b)}},optional:function(b){var c=this.elementValue(b);return!a.validator.methods.required.call(this,c,b)&&"dependency-mismatch"},startRequest:function(a){this.pending[a.name]||(this.pendingRequest++,this.pending[a.name]=!0)},stopRequest:function(b,c){this.pendingRequest--,this.pendingRequest<0&&(this.pendingRequest=0),delete this.pending[b.name],c&&0===this.pendingRequest&&this.formSubmitted&&this.form()?(a(this.currentForm).submit(),this.formSubmitted=!1):!c&&0===this.pendingRequest&&this.formSubmitted&&(a(this.currentForm).triggerHandler("invalid-form",[this]),this.formSubmitted=!1)},previousValue:function(b){return a.data(b,"previousValue")||a.data(b,"previousValue",{old:null,valid:!0,message:this.defaultMessage(b,"remote")})}},classRuleSettings:{required:{required:!0},email:{email:!0},url:{url:!0},date:{date:!0},dateISO:{dateISO:!0},number:{number:!0},digits:{digits:!0},creditcard:{creditcard:!0}},addClassRules:function(b,c){b.constructor===String?this.classRuleSettings[b]=c:a.extend(this.classRuleSettings,b)},classRules:function(b){var c={},d=a(b).attr("class");return d&&a.each(d.split(" "),function(){this in a.validator.classRuleSettings&&a.extend(c,a.validator.classRuleSettings[this])}),c},attributeRules:function(b){var c,d,e={},f=a(b),g=b.getAttribute("type");for(c in a.validator.methods)"required"===c?(d=b.getAttribute(c),""===d&&(d=!0),d=!!d):d=f.attr(c),/min|max/.test(c)&&(null===g||/number|range|text/.test(g))&&(d=Number(d)),d||0===d?e[c]=d:g===c&&"range"!==g&&(e[c]=!0);return e.maxlength&&/-1|2147483647|524288/.test(e.maxlength)&&delete e.maxlength,e},dataRules:function(b){var c,d,e={},f=a(b);for(c in a.validator.methods)d=f.data("rule"+c.charAt(0).toUpperCase()+c.substring(1).toLowerCase()),void 0!==d&&(e[c]=d);return e},staticRules:function(b){var c={},d=a.data(b.form,"validator");return d.settings.rules&&(c=a.validator.normalizeRule(d.settings.rules[b.name])||{}),c},normalizeRules:function(b,c){return a.each(b,function(d,e){if(e===!1)return void delete b[d];if(e.param||e.depends){var f=!0;switch(typeof e.depends){case"string":f=!!a(e.depends,c.form).length;break;case"function":f=e.depends.call(c,c)}f?b[d]=void 0!==e.param?e.param:!0:delete b[d]}}),a.each(b,function(d,e){b[d]=a.isFunction(e)?e(c):e}),a.each(["minlength","maxlength"],function(){b[this]&&(b[this]=Number(b[this]))}),a.each(["rangelength","range"],function(){var c;b[this]&&(a.isArray(b[this])?b[this]=[Number(b[this][0]),Number(b[this][1])]:"string"==typeof b[this]&&(c=b[this].replace(/[\[\]]/g,"").split(/[\s,]+/),b[this]=[Number(c[0]),Number(c[1])]))}),a.validator.autoCreateRanges&&(null!=b.min&&null!=b.max&&(b.range=[b.min,b.max],delete b.min,delete b.max),null!=b.minlength&&null!=b.maxlength&&(b.rangelength=[b.minlength,b.maxlength],delete b.minlength,delete b.maxlength)),b},normalizeRule:function(b){if("string"==typeof b){var c={};a.each(b.split(/\s/),function(){c[this]=!0}),b=c}return b},addMethod:function(b,c,d){a.validator.methods[b]=c,a.validator.messages[b]=void 0!==d?d:a.validator.messages[b],c.length<3&&a.validator.addClassRules(b,a.validator.normalizeRule(b))},methods:{required:function(b,c,d){if(!this.depend(d,c))return"dependency-mismatch";if("select"===c.nodeName.toLowerCase()){var e=a(c).val();return e&&e.length>0}return this.checkable(c)?this.getLength(b,c)>0:a.trim(b).length>0},email:function(a,b){return this.optional(b)||/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(a)},url:function(a,b){return this.optional(b)||/^(https?|s?ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(a)},date:function(a,b){return this.optional(b)||!/Invalid|NaN/.test(new Date(a).toString())},dateISO:function(a,b){return this.optional(b)||/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(a)},number:function(a,b){return this.optional(b)||/^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(a)},digits:function(a,b){return this.optional(b)||/^\d+$/.test(a)},creditcard:function(a,b){if(this.optional(b))return"dependency-mismatch";if(/[^0-9 \-]+/.test(a))return!1;var c,d,e=0,f=0,g=!1;if(a=a.replace(/\D/g,""),a.length<13||a.length>19)return!1;for(c=a.length-1;c>=0;c--)d=a.charAt(c),f=parseInt(d,10),g&&(f*=2)>9&&(f-=9),e+=f,g=!g;return e%10===0},minlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e>=d},maxlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||d>=e},rangelength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e>=d[0]&&e<=d[1]},min:function(a,b,c){return this.optional(b)||a>=c},max:function(a,b,c){return this.optional(b)||c>=a},range:function(a,b,c){return this.optional(b)||a>=c[0]&&a<=c[1]},equalTo:function(b,c,d){var e=a(d);return this.settings.onfocusout&&e.unbind(".validate-equalTo").bind("blur.validate-equalTo",function(){a(c).valid()}),b===e.val()},remote:function(b,c,d){if(this.optional(c))return"dependency-mismatch";var e,f,g=this.previousValue(c);return this.settings.messages[c.name]||(this.settings.messages[c.name]={}),g.originalMessage=this.settings.messages[c.name].remote,this.settings.messages[c.name].remote=g.message,d="string"==typeof d&&{url:d}||d,g.old===b?g.valid:(g.old=b,e=this,this.startRequest(c),f={},f[c.name]=b,a.ajax(a.extend(!0,{url:d,mode:"abort",port:"validate"+c.name,dataType:"json",data:f,context:e.currentForm,success:function(d){var f,h,i,j=d===!0||"true"===d;e.settings.messages[c.name].remote=g.originalMessage,j?(i=e.formSubmitted,e.prepareElement(c),e.formSubmitted=i,e.successList.push(c),delete e.invalid[c.name],e.showErrors()):(f={},h=d||e.defaultMessage(c,"remote"),f[c.name]=g.message=a.isFunction(h)?h(b):h,e.invalid[c.name]=!0,e.showErrors(f)),g.valid=j,e.stopRequest(c,j)}},d)),"pending")}}}),a.format=function(){throw"$.format has been deprecated. Please use $.validator.format instead."};var b,c={};a.ajaxPrefilter?a.ajaxPrefilter(function(a,b,d){var e=a.port;"abort"===a.mode&&(c[e]&&c[e].abort(),c[e]=d)}):(b=a.ajax,a.ajax=function(d){var e=("mode"in d?d:a.ajaxSettings).mode,f=("port"in d?d:a.ajaxSettings).port;return"abort"===e?(c[f]&&c[f].abort(),c[f]=b.apply(this,arguments),c[f]):b.apply(this,arguments)}),a.extend(a.fn,{validateDelegate:function(b,c,d){return this.bind(c,function(c){var e=a(c.target);return e.is(b)?d.apply(e,arguments):void 0})}})});
|
|
@ -1,33 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: AR (Arabic; العربية)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "هذا الحقل إلزامي",
|
|
||||||
remote: "يرجى تصحيح هذا الحقل للمتابعة",
|
|
||||||
email: "رجاء إدخال عنوان بريد إلكتروني صحيح",
|
|
||||||
url: "رجاء إدخال عنوان موقع إلكتروني صحيح",
|
|
||||||
date: "رجاء إدخال تاريخ صحيح",
|
|
||||||
dateISO: "رجاء إدخال تاريخ صحيح (ISO)",
|
|
||||||
number: "رجاء إدخال عدد بطريقة صحيحة",
|
|
||||||
digits: "رجاء إدخال أرقام فقط",
|
|
||||||
creditcard: "رجاء إدخال رقم بطاقة ائتمان صحيح",
|
|
||||||
equalTo: "رجاء إدخال نفس القيمة",
|
|
||||||
extension: "رجاء إدخال ملف بامتداد موافق عليه",
|
|
||||||
maxlength: $.validator.format("الحد الأقصى لعدد الحروف هو {0}"),
|
|
||||||
minlength: $.validator.format("الحد الأدنى لعدد الحروف هو {0}"),
|
|
||||||
rangelength: $.validator.format("عدد الحروف يجب أن يكون بين {0} و {1}"),
|
|
||||||
range: $.validator.format("رجاء إدخال عدد قيمته بين {0} و {1}"),
|
|
||||||
max: $.validator.format("رجاء إدخال عدد أقل من أو يساوي (0}"),
|
|
||||||
min: $.validator.format("رجاء إدخال عدد أكبر من أو يساوي (0}")
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,33 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: BG (Bulgarian; български език)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "Полето е задължително.",
|
|
||||||
remote: "Моля, въведете правилната стойност.",
|
|
||||||
email: "Моля, въведете валиден email.",
|
|
||||||
url: "Моля, въведете валидно URL.",
|
|
||||||
date: "Моля, въведете валидна дата.",
|
|
||||||
dateISO: "Моля, въведете валидна дата (ISO).",
|
|
||||||
number: "Моля, въведете валиден номер.",
|
|
||||||
digits: "Моля, въведете само цифри.",
|
|
||||||
creditcard: "Моля, въведете валиден номер на кредитна карта.",
|
|
||||||
equalTo: "Моля, въведете същата стойност отново.",
|
|
||||||
extension: "Моля, въведете стойност с валидно разширение.",
|
|
||||||
maxlength: $.validator.format("Моля, въведете повече от {0} символа."),
|
|
||||||
minlength: $.validator.format("Моля, въведете поне {0} символа."),
|
|
||||||
rangelength: $.validator.format("Моля, въведете стойност с дължина между {0} и {1} символа."),
|
|
||||||
range: $.validator.format("Моля, въведете стойност между {0} и {1}."),
|
|
||||||
max: $.validator.format("Моля, въведете стойност по-малка или равна на {0}."),
|
|
||||||
min: $.validator.format("Моля, въведете стойност по-голяма или равна на {0}.")
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,33 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: bn_BD (Bengali, Bangladesh)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "এই তথ্যটি আবশ্যক।",
|
|
||||||
remote: "এই তথ্যটি ঠিক করুন।",
|
|
||||||
email: "অনুগ্রহ করে একটি সঠিক মেইল ঠিকানা লিখুন।",
|
|
||||||
url: "অনুগ্রহ করে একটি সঠিক লিঙ্ক দিন।",
|
|
||||||
date: "তারিখ সঠিক নয়।",
|
|
||||||
dateISO: "অনুগ্রহ করে একটি সঠিক (ISO) তারিখ লিখুন।",
|
|
||||||
number: "অনুগ্রহ করে একটি সঠিক নম্বর লিখুন।",
|
|
||||||
digits: "এখানে শুধু সংখ্যা ব্যবহার করা যাবে।",
|
|
||||||
creditcard: "অনুগ্রহ করে একটি ক্রেডিট কার্ডের সঠিক নম্বর লিখুন।",
|
|
||||||
equalTo: "একই মান আবার লিখুন।",
|
|
||||||
extension: "সঠিক ধরনের ফাইল আপলোড করুন।",
|
|
||||||
maxlength: $.validator.format("{0}টির বেশি অক্ষর লেখা যাবে না।"),
|
|
||||||
minlength: $.validator.format("{0}টির কম অক্ষর লেখা যাবে না।"),
|
|
||||||
rangelength: $.validator.format("{0} থেকে {1} টি অক্ষর সম্বলিত মান লিখুন।"),
|
|
||||||
range: $.validator.format("{0} থেকে {1} এর মধ্যে একটি মান ব্যবহার করুন।"),
|
|
||||||
max: $.validator.format("অনুগ্রহ করে {0} বা তার চাইতে কম মান ব্যবহার করুন।"),
|
|
||||||
min: $.validator.format("অনুগ্রহ করে {0} বা তার চাইতে বেশি মান ব্যবহার করুন।")
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,33 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: CA (Catalan; català)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "Aquest camp és obligatori.",
|
|
||||||
remote: "Si us plau, omple aquest camp.",
|
|
||||||
email: "Si us plau, escriu una adreça de correu-e vàlida",
|
|
||||||
url: "Si us plau, escriu una URL vàlida.",
|
|
||||||
date: "Si us plau, escriu una data vàlida.",
|
|
||||||
dateISO: "Si us plau, escriu una data (ISO) vàlida.",
|
|
||||||
number: "Si us plau, escriu un número enter vàlid.",
|
|
||||||
digits: "Si us plau, escriu només dígits.",
|
|
||||||
creditcard: "Si us plau, escriu un número de tarjeta vàlid.",
|
|
||||||
equalTo: "Si us plau, escriu el maateix valor de nou.",
|
|
||||||
extension: "Si us plau, escriu un valor amb una extensió acceptada.",
|
|
||||||
maxlength: $.validator.format("Si us plau, no escriguis més de {0} caracters."),
|
|
||||||
minlength: $.validator.format("Si us plau, no escriguis menys de {0} caracters."),
|
|
||||||
rangelength: $.validator.format("Si us plau, escriu un valor entre {0} i {1} caracters."),
|
|
||||||
range: $.validator.format("Si us plau, escriu un valor entre {0} i {1}."),
|
|
||||||
max: $.validator.format("Si us plau, escriu un valor menor o igual a {0}."),
|
|
||||||
min: $.validator.format("Si us plau, escriu un valor major o igual a {0}.")
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,33 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: CS (Czech; čeština, český jazyk)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "Tento údaj je povinný.",
|
|
||||||
remote: "Prosím, opravte tento údaj.",
|
|
||||||
email: "Prosím, zadejte platný e-mail.",
|
|
||||||
url: "Prosím, zadejte platné URL.",
|
|
||||||
date: "Prosím, zadejte platné datum.",
|
|
||||||
dateISO: "Prosím, zadejte platné datum (ISO).",
|
|
||||||
number: "Prosím, zadejte číslo.",
|
|
||||||
digits: "Prosím, zadávejte pouze číslice.",
|
|
||||||
creditcard: "Prosím, zadejte číslo kreditní karty.",
|
|
||||||
equalTo: "Prosím, zadejte znovu stejnou hodnotu.",
|
|
||||||
extension: "Prosím, zadejte soubor se správnou příponou.",
|
|
||||||
maxlength: $.validator.format("Prosím, zadejte nejvíce {0} znaků."),
|
|
||||||
minlength: $.validator.format("Prosím, zadejte nejméně {0} znaků."),
|
|
||||||
rangelength: $.validator.format("Prosím, zadejte od {0} do {1} znaků."),
|
|
||||||
range: $.validator.format("Prosím, zadejte hodnotu od {0} do {1}."),
|
|
||||||
max: $.validator.format("Prosím, zadejte hodnotu menší nebo rovnu {0}."),
|
|
||||||
min: $.validator.format("Prosím, zadejte hodnotu větší nebo rovnu {0}.")
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,30 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: DA (Danish; dansk)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "Dette felt er påkrævet.",
|
|
||||||
maxlength: $.validator.format("Indtast højst {0} tegn."),
|
|
||||||
minlength: $.validator.format("Indtast mindst {0} tegn."),
|
|
||||||
rangelength: $.validator.format("Indtast mindst {0} og højst {1} tegn."),
|
|
||||||
email: "Indtast en gyldig email-adresse.",
|
|
||||||
url: "Indtast en gyldig URL.",
|
|
||||||
date: "Indtast en gyldig dato.",
|
|
||||||
number: "Indtast et tal.",
|
|
||||||
digits: "Indtast kun cifre.",
|
|
||||||
equalTo: "Indtast den samme værdi igen.",
|
|
||||||
range: $.validator.format("Angiv en værdi mellem {0} og {1}."),
|
|
||||||
max: $.validator.format("Angiv en værdi der højst er {0}."),
|
|
||||||
min: $.validator.format("Angiv en værdi der mindst er {0}."),
|
|
||||||
creditcard: "Indtast et gyldigt kreditkortnummer."
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,30 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: DE (German, Deutsch)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "Dieses Feld ist ein Pflichtfeld.",
|
|
||||||
maxlength: $.validator.format("Geben Sie bitte maximal {0} Zeichen ein."),
|
|
||||||
minlength: $.validator.format("Geben Sie bitte mindestens {0} Zeichen ein."),
|
|
||||||
rangelength: $.validator.format("Geben Sie bitte mindestens {0} und maximal {1} Zeichen ein."),
|
|
||||||
email: "Geben Sie bitte eine gültige E-Mail Adresse ein.",
|
|
||||||
url: "Geben Sie bitte eine gültige URL ein.",
|
|
||||||
date: "Bitte geben Sie ein gültiges Datum ein.",
|
|
||||||
number: "Geben Sie bitte eine Nummer ein.",
|
|
||||||
digits: "Geben Sie bitte nur Ziffern ein.",
|
|
||||||
equalTo: "Bitte denselben Wert wiederholen.",
|
|
||||||
range: $.validator.format("Geben Sie bitte einen Wert zwischen {0} und {1} ein."),
|
|
||||||
max: $.validator.format("Geben Sie bitte einen Wert kleiner oder gleich {0} ein."),
|
|
||||||
min: $.validator.format("Geben Sie bitte einen Wert größer oder gleich {0} ein."),
|
|
||||||
creditcard: "Geben Sie bitte eine gültige Kreditkarten-Nummer ein."
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,33 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: EL (Greek; ελληνικά)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "Αυτό το πεδίο είναι υποχρεωτικό.",
|
|
||||||
remote: "Παρακαλώ διορθώστε αυτό το πεδίο.",
|
|
||||||
email: "Παρακαλώ εισάγετε μια έγκυρη διεύθυνση email.",
|
|
||||||
url: "Παρακαλώ εισάγετε ένα έγκυρο URL.",
|
|
||||||
date: "Παρακαλώ εισάγετε μια έγκυρη ημερομηνία.",
|
|
||||||
dateISO: "Παρακαλώ εισάγετε μια έγκυρη ημερομηνία (ISO).",
|
|
||||||
number: "Παρακαλώ εισάγετε έναν έγκυρο αριθμό.",
|
|
||||||
digits: "Παρακαλώ εισάγετε μόνο αριθμητικά ψηφία.",
|
|
||||||
creditcard: "Παρακαλώ εισάγετε έναν έγκυρο αριθμό πιστωτικής κάρτας.",
|
|
||||||
equalTo: "Παρακαλώ εισάγετε την ίδια τιμή ξανά.",
|
|
||||||
extension: "Παρακαλώ εισάγετε μια τιμή με έγκυρη επέκταση αρχείου.",
|
|
||||||
maxlength: $.validator.format("Παρακαλώ εισάγετε μέχρι και {0} χαρακτήρες."),
|
|
||||||
minlength: $.validator.format("Παρακαλώ εισάγετε τουλάχιστον {0} χαρακτήρες."),
|
|
||||||
rangelength: $.validator.format("Παρακαλώ εισάγετε μια τιμή με μήκος μεταξύ {0} και {1} χαρακτήρων."),
|
|
||||||
range: $.validator.format("Παρακαλώ εισάγετε μια τιμή μεταξύ {0} και {1}."),
|
|
||||||
max: $.validator.format("Παρακαλώ εισάγετε μια τιμή μικρότερη ή ίση του {0}."),
|
|
||||||
min: $.validator.format("Παρακαλώ εισάγετε μια τιμή μεγαλύτερη ή ίση του {0}.")
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,36 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: ES (Spanish; Español)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "Este campo es obligatorio.",
|
|
||||||
remote: "Por favor, rellena este campo.",
|
|
||||||
email: "Por favor, escribe una dirección de correo válida.",
|
|
||||||
url: "Por favor, escribe una URL válida.",
|
|
||||||
date: "Por favor, escribe una fecha válida.",
|
|
||||||
dateISO: "Por favor, escribe una fecha (ISO) válida.",
|
|
||||||
number: "Por favor, escribe un número válido.",
|
|
||||||
digits: "Por favor, escribe sólo dígitos.",
|
|
||||||
creditcard: "Por favor, escribe un número de tarjeta válido.",
|
|
||||||
equalTo: "Por favor, escribe el mismo valor de nuevo.",
|
|
||||||
extension: "Por favor, escribe un valor con una extensión aceptada.",
|
|
||||||
maxlength: $.validator.format("Por favor, no escribas más de {0} caracteres."),
|
|
||||||
minlength: $.validator.format("Por favor, no escribas menos de {0} caracteres."),
|
|
||||||
rangelength: $.validator.format("Por favor, escribe un valor entre {0} y {1} caracteres."),
|
|
||||||
range: $.validator.format("Por favor, escribe un valor entre {0} y {1}."),
|
|
||||||
max: $.validator.format("Por favor, escribe un valor menor o igual a {0}."),
|
|
||||||
min: $.validator.format("Por favor, escribe un valor mayor o igual a {0}."),
|
|
||||||
nifES: "Por favor, escribe un NIF válido.",
|
|
||||||
nieES: "Por favor, escribe un NIE válido.",
|
|
||||||
cifES: "Por favor, escribe un CIF válido."
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,37 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: ES (Spanish; Español)
|
|
||||||
* Region: AR (Argentina)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "Este campo es obligatorio.",
|
|
||||||
remote: "Por favor, completá este campo.",
|
|
||||||
email: "Por favor, escribí una dirección de correo válida.",
|
|
||||||
url: "Por favor, escribí una URL válida.",
|
|
||||||
date: "Por favor, escribí una fecha válida.",
|
|
||||||
dateISO: "Por favor, escribí una fecha (ISO) válida.",
|
|
||||||
number: "Por favor, escribí un número entero válido.",
|
|
||||||
digits: "Por favor, escribí sólo dígitos.",
|
|
||||||
creditcard: "Por favor, escribí un número de tarjeta válido.",
|
|
||||||
equalTo: "Por favor, escribí el mismo valor de nuevo.",
|
|
||||||
extension: "Por favor, escribí un valor con una extensión aceptada.",
|
|
||||||
maxlength: $.validator.format("Por favor, no escribas más de {0} caracteres."),
|
|
||||||
minlength: $.validator.format("Por favor, no escribas menos de {0} caracteres."),
|
|
||||||
rangelength: $.validator.format("Por favor, escribí un valor entre {0} y {1} caracteres."),
|
|
||||||
range: $.validator.format("Por favor, escribí un valor entre {0} y {1}."),
|
|
||||||
max: $.validator.format("Por favor, escribí un valor menor o igual a {0}."),
|
|
||||||
min: $.validator.format("Por favor, escribí un valor mayor o igual a {0}."),
|
|
||||||
nifES: "Por favor, escribí un NIF válido.",
|
|
||||||
nieES: "Por favor, escribí un NIE válido.",
|
|
||||||
cifES: "Por favor, escribí un CIF válido."
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,31 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: ET (Estonian; eesti, eesti keel)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "See väli peab olema täidetud.",
|
|
||||||
maxlength: $.validator.format("Palun sisestage vähem kui {0} tähemärki."),
|
|
||||||
minlength: $.validator.format("Palun sisestage vähemalt {0} tähemärki."),
|
|
||||||
rangelength: $.validator.format("Palun sisestage väärtus vahemikus {0} kuni {1} tähemärki."),
|
|
||||||
email: "Palun sisestage korrektne e-maili aadress.",
|
|
||||||
url: "Palun sisestage korrektne URL.",
|
|
||||||
date: "Palun sisestage korrektne kuupäev.",
|
|
||||||
dateISO: "Palun sisestage korrektne kuupäev (YYYY-MM-DD).",
|
|
||||||
number: "Palun sisestage korrektne number.",
|
|
||||||
digits: "Palun sisestage ainult numbreid.",
|
|
||||||
equalTo: "Palun sisestage sama väärtus uuesti.",
|
|
||||||
range: $.validator.format("Palun sisestage väärtus vahemikus {0} kuni {1}."),
|
|
||||||
max: $.validator.format("Palun sisestage väärtus, mis on väiksem või võrdne arvuga {0}."),
|
|
||||||
min: $.validator.format("Palun sisestage väärtus, mis on suurem või võrdne arvuga {0}."),
|
|
||||||
creditcard: "Palun sisestage korrektne krediitkaardi number."
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,33 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: EU (Basque; euskara, euskera)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "Eremu hau beharrezkoa da.",
|
|
||||||
remote: "Mesedez, bete eremu hau.",
|
|
||||||
email: "Mesedez, idatzi baliozko posta helbide bat.",
|
|
||||||
url: "Mesedez, idatzi baliozko URL bat.",
|
|
||||||
date: "Mesedez, idatzi baliozko data bat.",
|
|
||||||
dateISO: "Mesedez, idatzi baliozko (ISO) data bat.",
|
|
||||||
number: "Mesedez, idatzi baliozko zenbaki oso bat.",
|
|
||||||
digits: "Mesedez, idatzi digituak soilik.",
|
|
||||||
creditcard: "Mesedez, idatzi baliozko txartel zenbaki bat.",
|
|
||||||
equalTo: "Mesedez, idatzi berdina berriro ere.",
|
|
||||||
extension: "Mesedez, idatzi onartutako luzapena duen balio bat.",
|
|
||||||
maxlength: $.validator.format("Mesedez, ez idatzi {0} karaktere baino gehiago."),
|
|
||||||
minlength: $.validator.format("Mesedez, ez idatzi {0} karaktere baino gutxiago."),
|
|
||||||
rangelength: $.validator.format("Mesedez, idatzi {0} eta {1} karaktere arteko balio bat."),
|
|
||||||
range: $.validator.format("Mesedez, idatzi {0} eta {1} arteko balio bat."),
|
|
||||||
max: $.validator.format("Mesedez, idatzi {0} edo txikiagoa den balio bat."),
|
|
||||||
min: $.validator.format("Mesedez, idatzi {0} edo handiagoa den balio bat.")
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,36 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: FA (Persian; فارسی)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "تکمیل این فیلد اجباری است.",
|
|
||||||
remote: "لطفا این فیلد را تصحیح کنید.",
|
|
||||||
email: ".لطفا یک ایمیل صحیح وارد کنید",
|
|
||||||
url: "لطفا آدرس صحیح وارد کنید.",
|
|
||||||
date: "لطفا یک تاریخ صحیح وارد کنید",
|
|
||||||
dateFA: "لطفا یک تاریخ صحیح وارد کنید",
|
|
||||||
dateISO: "لطفا تاریخ صحیح وارد کنید (ISO).",
|
|
||||||
number: "لطفا عدد صحیح وارد کنید.",
|
|
||||||
digits: "لطفا تنها رقم وارد کنید",
|
|
||||||
creditcard: "لطفا کریدیت کارت صحیح وارد کنید.",
|
|
||||||
equalTo: "لطفا مقدار برابری وارد کنید",
|
|
||||||
extension: "لطفا مقداری وارد کنید که ",
|
|
||||||
maxlength: $.validator.format("لطفا بیشتر از {0} حرف وارد نکنید."),
|
|
||||||
minlength: $.validator.format("لطفا کمتر از {0} حرف وارد نکنید."),
|
|
||||||
rangelength: $.validator.format("لطفا مقداری بین {0} تا {1} حرف وارد کنید."),
|
|
||||||
range: $.validator.format("لطفا مقداری بین {0} تا {1} حرف وارد کنید."),
|
|
||||||
max: $.validator.format("لطفا مقداری کمتر از {0} حرف وارد کنید."),
|
|
||||||
min: $.validator.format("لطفا مقداری بیشتر از {0} حرف وارد کنید."),
|
|
||||||
minWords: $.validator.format("لطفا حداقل {0} کلمه وارد کنید."),
|
|
||||||
maxWords: $.validator.format("لطفا حداکثر {0} کلمه وارد کنید.")
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,31 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: FI (Finnish; suomi, suomen kieli)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "Tämä kenttä on pakollinen.",
|
|
||||||
email: "Syötä oikea sähköpostiosoite.",
|
|
||||||
url: "Syötä oikea URL osoite.",
|
|
||||||
date: "Syötä oike päivämäärä.",
|
|
||||||
dateISO: "Syötä oike päivämäärä (VVVV-MM-DD).",
|
|
||||||
number: "Syötä numero.",
|
|
||||||
creditcard: "Syötä voimassa oleva luottokorttinumero.",
|
|
||||||
digits: "Syötä pelkästään numeroita.",
|
|
||||||
equalTo: "Syötä sama arvo uudestaan.",
|
|
||||||
maxlength: $.validator.format("Voit syöttää enintään {0} merkkiä."),
|
|
||||||
minlength: $.validator.format("Vähintään {0} merkkiä."),
|
|
||||||
rangelength: $.validator.format("Syötä vähintään {0} ja enintään {1} merkkiä."),
|
|
||||||
range: $.validator.format("Syötä arvo {0} ja {1} väliltä."),
|
|
||||||
max: $.validator.format("Syötä arvo joka on pienempi tai yhtä suuri kuin {0}."),
|
|
||||||
min: $.validator.format("Syötä arvo joka on yhtä suuri tai suurempi kuin {0}.")
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,59 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: FR (French; français)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "Ce champ est obligatoire.",
|
|
||||||
remote: "Veuillez corriger ce champ.",
|
|
||||||
email: "Veuillez fournir une adresse électronique valide.",
|
|
||||||
url: "Veuillez fournir une adresse URL valide.",
|
|
||||||
date: "Veuillez fournir une date valide.",
|
|
||||||
dateISO: "Veuillez fournir une date valide (ISO).",
|
|
||||||
number: "Veuillez fournir un numéro valide.",
|
|
||||||
digits: "Veuillez fournir seulement des chiffres.",
|
|
||||||
creditcard: "Veuillez fournir un numéro de carte de crédit valide.",
|
|
||||||
equalTo: "Veuillez fournir encore la même valeur.",
|
|
||||||
extension: "Veuillez fournir une valeur avec une extension valide.",
|
|
||||||
maxlength: $.validator.format("Veuillez fournir au plus {0} caractères."),
|
|
||||||
minlength: $.validator.format("Veuillez fournir au moins {0} caractères."),
|
|
||||||
rangelength: $.validator.format("Veuillez fournir une valeur qui contient entre {0} et {1} caractères."),
|
|
||||||
range: $.validator.format("Veuillez fournir une valeur entre {0} et {1}."),
|
|
||||||
max: $.validator.format("Veuillez fournir une valeur inférieure ou égale à {0}."),
|
|
||||||
min: $.validator.format("Veuillez fournir une valeur supérieure ou égale à {0}."),
|
|
||||||
maxWords: $.validator.format("Veuillez fournir au plus {0} mots."),
|
|
||||||
minWords: $.validator.format("Veuillez fournir au moins {0} mots."),
|
|
||||||
rangeWords: $.validator.format("Veuillez fournir entre {0} et {1} mots."),
|
|
||||||
letterswithbasicpunc: "Veuillez fournir seulement des lettres et des signes de ponctuation.",
|
|
||||||
alphanumeric: "Veuillez fournir seulement des lettres, nombres, espaces et soulignages.",
|
|
||||||
lettersonly: "Veuillez fournir seulement des lettres.",
|
|
||||||
nowhitespace: "Veuillez ne pas inscrire d'espaces blancs.",
|
|
||||||
ziprange: "Veuillez fournir un code postal entre 902xx-xxxx et 905-xx-xxxx.",
|
|
||||||
integer: "Veuillez fournir un nombre non décimal qui est positif ou négatif.",
|
|
||||||
vinUS: "Veuillez fournir un numéro d'identification du véhicule (VIN).",
|
|
||||||
dateITA: "Veuillez fournir une date valide.",
|
|
||||||
time: "Veuillez fournir une heure valide entre 00:00 et 23:59.",
|
|
||||||
phoneUS: "Veuillez fournir un numéro de téléphone valide.",
|
|
||||||
phoneUK: "Veuillez fournir un numéro de téléphone valide.",
|
|
||||||
mobileUK: "Veuillez fournir un numéro de téléphone mobile valide.",
|
|
||||||
strippedminlength: $.validator.format("Veuillez fournir au moins {0} caractères."),
|
|
||||||
email2: "Veuillez fournir une adresse électronique valide.",
|
|
||||||
url2: "Veuillez fournir une adresse URL valide.",
|
|
||||||
creditcardtypes: "Veuillez fournir un numéro de carte de crédit valide.",
|
|
||||||
ipv4: "Veuillez fournir une adresse IP v4 valide.",
|
|
||||||
ipv6: "Veuillez fournir une adresse IP v6 valide.",
|
|
||||||
require_from_group: "Veuillez fournir au moins {0} de ces champs.",
|
|
||||||
nifES: "Veuillez fournir un numéro NIF valide.",
|
|
||||||
nieES: "Veuillez fournir un numéro NIE valide.",
|
|
||||||
cifES: "Veuillez fournir un numéro CIF valide.",
|
|
||||||
postalCodeCA: "Veuillez fournir un code postal valide."
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,38 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: GL (Galician; Galego)
|
|
||||||
*/
|
|
||||||
(function($) {
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "Este campo é obrigatorio.",
|
|
||||||
remote: "Por favor, cubre este campo.",
|
|
||||||
email: "Por favor, escribe unha dirección de correo válida.",
|
|
||||||
url: "Por favor, escribe unha URL válida.",
|
|
||||||
date: "Por favor, escribe unha data válida.",
|
|
||||||
dateISO: "Por favor, escribe unha data (ISO) válida.",
|
|
||||||
number: "Por favor, escribe un número válido.",
|
|
||||||
digits: "Por favor, escribe só díxitos.",
|
|
||||||
creditcard: "Por favor, escribe un número de tarxeta válido.",
|
|
||||||
equalTo: "Por favor, escribe o mesmo valor de novo.",
|
|
||||||
extension: "Por favor, escribe un valor cunha extensión aceptada.",
|
|
||||||
maxlength: $.validator.format("Por favor, non escribas máis de {0} caracteres."),
|
|
||||||
minlength: $.validator.format("Por favor, non escribas menos de {0} caracteres."),
|
|
||||||
rangelength: $.validator.format("Por favor, escribe un valor entre {0} e {1} caracteres."),
|
|
||||||
range: $.validator.format("Por favor, escribe un valor entre {0} e {1}."),
|
|
||||||
max: $.validator.format("Por favor, escribe un valor menor ou igual a {0}."),
|
|
||||||
min: $.validator.format("Por favor, escribe un valor maior ou igual a {0}."),
|
|
||||||
nifES: "Por favor, escribe un NIF válido.",
|
|
||||||
nieES: "Por favor, escribe un NIE válido.",
|
|
||||||
cifES: "Por favor, escribe un CIF válido."
|
|
||||||
});
|
|
||||||
}(jQuery));
|
|
||||||
|
|
||||||
}));
|
|
@ -1,33 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: HE (Hebrew; עברית)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "השדה הזה הינו שדה חובה",
|
|
||||||
remote: "נא לתקן שדה זה",
|
|
||||||
email: "נא למלא כתובת דוא\"ל חוקית",
|
|
||||||
url: "נא למלא כתובת אינטרנט חוקית",
|
|
||||||
date: "נא למלא תאריך חוקי",
|
|
||||||
dateISO: "נא למלא תאריך חוקי (ISO)",
|
|
||||||
number: "נא למלא מספר",
|
|
||||||
digits: "נא למלא רק מספרים",
|
|
||||||
creditcard: "נא למלא מספר כרטיס אשראי חוקי",
|
|
||||||
equalTo: "נא למלא את אותו ערך שוב",
|
|
||||||
extension: "נא למלא ערך עם סיומת חוקית",
|
|
||||||
maxlength: $.validator.format(".נא לא למלא יותר מ- {0} תווים"),
|
|
||||||
minlength: $.validator.format("נא למלא לפחות {0} תווים"),
|
|
||||||
rangelength: $.validator.format("נא למלא ערך בין {0} ל- {1} תווים"),
|
|
||||||
range: $.validator.format("נא למלא ערך בין {0} ל- {1}"),
|
|
||||||
max: $.validator.format("נא למלא ערך קטן או שווה ל- {0}"),
|
|
||||||
min: $.validator.format("נא למלא ערך גדול או שווה ל- {0}")
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,33 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: HR (Croatia; hrvatski jezik)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "Ovo polje je obavezno.",
|
|
||||||
remote: "Ovo polje treba popraviti.",
|
|
||||||
email: "Unesite ispravnu e-mail adresu.",
|
|
||||||
url: "Unesite ispravan URL.",
|
|
||||||
date: "Unesite ispravan datum.",
|
|
||||||
dateISO: "Unesite ispravan datum (ISO).",
|
|
||||||
number: "Unesite ispravan broj.",
|
|
||||||
digits: "Unesite samo brojeve.",
|
|
||||||
creditcard: "Unesite ispravan broj kreditne kartice.",
|
|
||||||
equalTo: "Unesite ponovo istu vrijednost.",
|
|
||||||
extension: "Unesite vrijednost sa ispravnom ekstenzijom.",
|
|
||||||
maxlength: $.validator.format("Maksimalni broj znakova je {0} ."),
|
|
||||||
minlength: $.validator.format("Minimalni broj znakova je {0} ."),
|
|
||||||
rangelength: $.validator.format("Unesite vrijednost između {0} i {1} znakova."),
|
|
||||||
range: $.validator.format("Unesite vrijednost između {0} i {1}."),
|
|
||||||
max: $.validator.format("Unesite vrijednost manju ili jednaku {0}."),
|
|
||||||
min: $.validator.format("Unesite vrijednost veću ili jednaku {0}.")
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,32 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: HU (Hungarian; Magyar)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "Kötelező megadni.",
|
|
||||||
maxlength: $.validator.format("Legfeljebb {0} karakter hosszú legyen."),
|
|
||||||
minlength: $.validator.format("Legalább {0} karakter hosszú legyen."),
|
|
||||||
rangelength: $.validator.format("Legalább {0} és legfeljebb {1} karakter hosszú legyen."),
|
|
||||||
email: "Érvényes e-mail címnek kell lennie.",
|
|
||||||
url: "Érvényes URL-nek kell lennie.",
|
|
||||||
date: "Dátumnak kell lennie.",
|
|
||||||
number: "Számnak kell lennie.",
|
|
||||||
digits: "Csak számjegyek lehetnek.",
|
|
||||||
equalTo: "Meg kell egyeznie a két értéknek.",
|
|
||||||
range: $.validator.format("{0} és {1} közé kell esnie."),
|
|
||||||
max: $.validator.format("Nem lehet nagyobb, mint {0}."),
|
|
||||||
min: $.validator.format("Nem lehet kisebb, mint {0}."),
|
|
||||||
creditcard: "Érvényes hitelkártyaszámnak kell lennie.",
|
|
||||||
remote: "Kérem javítsa ki ezt a mezőt.",
|
|
||||||
dateISO: "Kérem írjon be egy érvényes dátumot (ISO)."
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,33 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: HY_AM (Armenian; հայերեն լեզու)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "Պարտադիր լրացման դաշտ",
|
|
||||||
remote: "Ներմուծեք ճիշտ արժեքը",
|
|
||||||
email: "Ներմուծեք վավեր էլեկտրոնային փոստի հասցե",
|
|
||||||
url: "Ներմուծեք վավեր URL",
|
|
||||||
date: "Ներմուծեք վավեր ամսաթիվ",
|
|
||||||
dateISO: "Ներմուծեք ISO ֆորմատով վավեր ամսաթիվ։",
|
|
||||||
number: "Ներմուծեք թիվ",
|
|
||||||
digits: "Ներմուծեք միայն թվեր",
|
|
||||||
creditcard: "Ներմուծեք ճիշտ բանկային քարտի համար",
|
|
||||||
equalTo: "Ներմուծեք միևնուն արժեքը ևս մեկ անգամ",
|
|
||||||
extension: "Ընտրեք ճիշտ ընդլանումով ֆայլ",
|
|
||||||
maxlength: $.validator.format("Ներմուծեք ոչ ավել քան {0} նիշ"),
|
|
||||||
minlength: $.validator.format("Ներմուծեք ոչ պակաս քան {0} նիշ"),
|
|
||||||
rangelength: $.validator.format("Ներմուծեք {0}֊ից {1} երկարությամբ արժեք"),
|
|
||||||
range: $.validator.format("Ներմուծեք թիվ {0}֊ից {1} միջակայքում"),
|
|
||||||
max: $.validator.format("Ներմուծեք թիվ, որը փոքր կամ հավասար է {0}֊ին"),
|
|
||||||
min: $.validator.format("Ներմուծեք թիվ, որը մեծ կամ հավասար է {0}֊ին")
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,32 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: ID (Indonesia; Indonesian)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "Kolom ini diperlukan.",
|
|
||||||
remote: "Harap benarkan kolom ini.",
|
|
||||||
email: "Silakan masukkan format email yang benar.",
|
|
||||||
url: "Silakan masukkan format URL yang benar.",
|
|
||||||
date: "Silakan masukkan format tanggal yang benar.",
|
|
||||||
dateISO: "Silakan masukkan format tanggal(ISO) yang benar.",
|
|
||||||
number: "Silakan masukkan angka yang benar.",
|
|
||||||
digits: "Harap masukan angka saja.",
|
|
||||||
creditcard: "Harap masukkan format kartu kredit yang benar.",
|
|
||||||
equalTo: "Harap masukkan nilai yg sama dengan sebelumnya.",
|
|
||||||
maxlength: $.validator.format("Input dibatasi hanya {0} karakter."),
|
|
||||||
minlength: $.validator.format("Input tidak kurang dari {0} karakter."),
|
|
||||||
rangelength: $.validator.format("Panjang karakter yg diizinkan antara {0} dan {1} karakter."),
|
|
||||||
range: $.validator.format("Harap masukkan nilai antara {0} dan {1}."),
|
|
||||||
max: $.validator.format("Harap masukkan nilai lebih kecil atau sama dengan {0}."),
|
|
||||||
min: $.validator.format("Harap masukkan nilai lebih besar atau sama dengan {0}.")
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,31 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: IS (Icelandic; íslenska)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "Þessi reitur er nauðsynlegur.",
|
|
||||||
remote: "Lagaðu þennan reit.",
|
|
||||||
maxlength: $.validator.format("Sláðu inn mest {0} stafi."),
|
|
||||||
minlength: $.validator.format("Sláðu inn minnst {0} stafi."),
|
|
||||||
rangelength: $.validator.format("Sláðu inn minnst {0} og mest {1} stafi."),
|
|
||||||
email: "Sláðu inn gilt netfang.",
|
|
||||||
url: "Sláðu inn gilda vefslóð.",
|
|
||||||
date: "Sláðu inn gilda dagsetningu.",
|
|
||||||
number: "Sláðu inn tölu.",
|
|
||||||
digits: "Sláðu inn tölustafi eingöngu.",
|
|
||||||
equalTo: "Sláðu sama gildi inn aftur.",
|
|
||||||
range: $.validator.format("Sláðu inn gildi milli {0} og {1}."),
|
|
||||||
max: $.validator.format("Sláðu inn gildi sem er minna en eða jafnt og {0}."),
|
|
||||||
min: $.validator.format("Sláðu inn gildi sem er stærra en eða jafnt og {0}."),
|
|
||||||
creditcard: "Sláðu inn gilt greiðslukortanúmer."
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,36 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: IT (Italian; Italiano)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "Campo obbligatorio.",
|
|
||||||
remote: "Controlla questo campo.",
|
|
||||||
email: "Inserisci un indirizzo email valido.",
|
|
||||||
url: "Inserisci un indirizzo web valido.",
|
|
||||||
date: "Inserisci una data valida.",
|
|
||||||
dateISO: "Inserisci una data valida (ISO).",
|
|
||||||
number: "Inserisci un numero valido.",
|
|
||||||
digits: "Inserisci solo numeri.",
|
|
||||||
creditcard: "Inserisci un numero di carta di credito valido.",
|
|
||||||
equalTo: "Il valore non corrisponde.",
|
|
||||||
extension: "Inserisci un valore con un'estensione valida.",
|
|
||||||
maxlength: $.validator.format("Non inserire più di {0} caratteri."),
|
|
||||||
minlength: $.validator.format("Inserisci almeno {0} caratteri."),
|
|
||||||
rangelength: $.validator.format("Inserisci un valore compreso tra {0} e {1} caratteri."),
|
|
||||||
range: $.validator.format("Inserisci un valore compreso tra {0} e {1}."),
|
|
||||||
max: $.validator.format("Inserisci un valore minore o uguale a {0}."),
|
|
||||||
min: $.validator.format("Inserisci un valore maggiore o uguale a {0}."),
|
|
||||||
nifES: "Inserisci un NIF valido.",
|
|
||||||
nieES: "Inserisci un NIE valido.",
|
|
||||||
cifES: "Inserisci un CIF valido."
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,33 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: JA (Japanese; 日本語)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "このフィールドは必須です。",
|
|
||||||
remote: "このフィールドを修正してください。",
|
|
||||||
email: "有効なEメールアドレスを入力してください。",
|
|
||||||
url: "有効なURLを入力してください。",
|
|
||||||
date: "有効な日付を入力してください。",
|
|
||||||
dateISO: "有効な日付(ISO)を入力してください。",
|
|
||||||
number: "有効な数字を入力してください。",
|
|
||||||
digits: "数字のみを入力してください。",
|
|
||||||
creditcard: "有効なクレジットカード番号を入力してください。",
|
|
||||||
equalTo: "同じ値をもう一度入力してください。",
|
|
||||||
extension: "有効な拡張子を含む値を入力してください。",
|
|
||||||
maxlength: $.validator.format("{0} 文字以内で入力してください。"),
|
|
||||||
minlength: $.validator.format("{0} 文字以上で入力してください。"),
|
|
||||||
rangelength: $.validator.format("{0} 文字から {1} 文字までの値を入力してください。"),
|
|
||||||
range: $.validator.format("{0} から {1} までの値を入力してください。"),
|
|
||||||
max: $.validator.format("{0} 以下の値を入力してください。"),
|
|
||||||
min: $.validator.format("{0} 以上の値を入力してください。")
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,33 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: KA (Georgian; ქართული)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "ამ ველის შევსება აუცილებელია.",
|
|
||||||
remote: "გთხოვთ მიუთითოთ სწორი მნიშვნელობა.",
|
|
||||||
email: "გთხოვთ მიუთითოთ ელ-ფოსტის კორექტული მისამართი.",
|
|
||||||
url: "გთხოვთ მიუთითოთ კორექტული URL.",
|
|
||||||
date: "გთხოვთ მიუთითოთ კორექტული თარიღი.",
|
|
||||||
dateISO: "გთხოვთ მიუთითოთ კორექტული თარიღი ISO ფორმატში.",
|
|
||||||
number: "გთხოვთ მიუთითოთ ციფრი.",
|
|
||||||
digits: "გთხოვთ მიუთითოთ მხოლოდ ციფრები.",
|
|
||||||
creditcard: "გთხოვთ მიუთითოთ საკრედიტო ბარათის კორექტული ნომერი.",
|
|
||||||
equalTo: "გთხოვთ მიუთითოთ ასეთივე მნიშვნელობა კიდევ ერთხელ.",
|
|
||||||
extension: "გთხოვთ აირჩიოთ ფაილი კორექტული გაფართოებით.",
|
|
||||||
maxlength: $.validator.format("დასაშვებია არაუმეტეს {0} სიმბოლო."),
|
|
||||||
minlength: $.validator.format("აუცილებელია შეიყვანოთ მინიმუმ {0} სიმბოლო."),
|
|
||||||
rangelength: $.validator.format("ტექსტში სიმბოლოების რაოდენობა უნდა იყოს {0}-დან {1}-მდე."),
|
|
||||||
range: $.validator.format("გთხოვთ შეიყვანოთ ციფრი {0}-დან {1}-მდე."),
|
|
||||||
max: $.validator.format("გთხოვთ შეიყვანოთ ციფრი რომელიც ნაკლებია ან უდრის {0}-ს."),
|
|
||||||
min: $.validator.format("გთხოვთ შეიყვანოთ ციფრი რომელიც მეტია ან უდრის {0}-ს.")
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,33 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: KK (Kazakh; қазақ тілі)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "Бұл өрісті міндетті түрде толтырыңыз.",
|
|
||||||
remote: "Дұрыс мағына енгізуіңізді сұраймыз.",
|
|
||||||
email: "Нақты электронды поштаңызды енгізуіңізді сұраймыз.",
|
|
||||||
url: "Нақты URL-ды енгізуіңізді сұраймыз.",
|
|
||||||
date: "Нақты URL-ды енгізуіңізді сұраймыз.",
|
|
||||||
dateISO: "Нақты ISO форматымен сәйкес датасын енгізуіңізді сұраймыз.",
|
|
||||||
number: "Күнді енгізуіңізді сұраймыз.",
|
|
||||||
digits: "Тек қана сандарды енгізуіңізді сұраймыз.",
|
|
||||||
creditcard: "Несие картасының нөмірін дұрыс енгізуіңізді сұраймыз.",
|
|
||||||
equalTo: "Осы мәнді қайта енгізуіңізді сұраймыз.",
|
|
||||||
extension: "Файлдың кеңейтуін дұрыс таңдаңыз.",
|
|
||||||
maxlength: $.validator.format("Ұзындығы {0} символдан көр болмасын."),
|
|
||||||
minlength: $.validator.format("Ұзындығы {0} символдан аз болмасын."),
|
|
||||||
rangelength: $.validator.format("Ұзындығы {0}-{1} дейін мән енгізуіңізді сұраймыз."),
|
|
||||||
range: $.validator.format("Пожалуйста, введите число от {0} до {1}. - {0} - {1} санын енгізуіңізді сұраймыз."),
|
|
||||||
max: $.validator.format("{0} аз немесе тең санын енгізуіңіді сұраймыз."),
|
|
||||||
min: $.validator.format("{0} көп немесе тең санын енгізуіңізді сұраймыз.")
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,33 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: KO (Korean; 한국어)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "필수 항목입니다.",
|
|
||||||
remote: "항목을 수정하세요.",
|
|
||||||
email: "유효하지 않은 E-Mail주소입니다.",
|
|
||||||
url: "유효하지 않은 URL입니다.",
|
|
||||||
date: "올바른 날짜를 입력하세요.",
|
|
||||||
dateISO: "올바른 날짜(ISO)를 입력하세요.",
|
|
||||||
number: "유효한 숫자가 아닙니다.",
|
|
||||||
digits: "숫자만 입력 가능합니다.",
|
|
||||||
creditcard: "신용카드 번호가 바르지 않습니다.",
|
|
||||||
equalTo: "같은 값을 다시 입력하세요.",
|
|
||||||
extension: "올바른 확장자가 아닙니다.",
|
|
||||||
maxlength: $.validator.format("{0}자를 넘을 수 없습니다. "),
|
|
||||||
minlength: $.validator.format("{0}자 이상 입력하세요."),
|
|
||||||
rangelength: $.validator.format("문자 길이가 {0} 에서 {1} 사이의 값을 입력하세요."),
|
|
||||||
range: $.validator.format("{0} 에서 {1} 사이의 값을 입력하세요."),
|
|
||||||
max: $.validator.format("{0} 이하의 값을 입력하세요."),
|
|
||||||
min: $.validator.format("{0} 이상의 값을 입력하세요.")
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,33 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: LT (Lithuanian; lietuvių kalba)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "Šis laukas yra privalomas.",
|
|
||||||
remote: "Prašau pataisyti šį lauką.",
|
|
||||||
email: "Prašau įvesti teisingą elektroninio pašto adresą.",
|
|
||||||
url: "Prašau įvesti teisingą URL.",
|
|
||||||
date: "Prašau įvesti teisingą datą.",
|
|
||||||
dateISO: "Prašau įvesti teisingą datą (ISO).",
|
|
||||||
number: "Prašau įvesti teisingą skaičių.",
|
|
||||||
digits: "Prašau naudoti tik skaitmenis.",
|
|
||||||
creditcard: "Prašau įvesti teisingą kreditinės kortelės numerį.",
|
|
||||||
equalTo: "Prašau įvestį tą pačią reikšmę dar kartą.",
|
|
||||||
extension: "Prašau įvesti reikšmę su teisingu plėtiniu.",
|
|
||||||
maxlength: $.validator.format("Prašau įvesti ne daugiau kaip {0} simbolių."),
|
|
||||||
minlength: $.validator.format("Prašau įvesti bent {0} simbolius."),
|
|
||||||
rangelength: $.validator.format("Prašau įvesti reikšmes, kurių ilgis nuo {0} iki {1} simbolių."),
|
|
||||||
range: $.validator.format("Prašau įvesti reikšmę intervale nuo {0} iki {1}."),
|
|
||||||
max: $.validator.format("Prašau įvesti reikšmę mažesnę arba lygią {0}."),
|
|
||||||
min: $.validator.format("Prašau įvesti reikšmę didesnę arba lygią {0}.")
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,33 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: LV (Latvian; latviešu valoda)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "Šis lauks ir obligāts.",
|
|
||||||
remote: "Lūdzu, pārbaudiet šo lauku.",
|
|
||||||
email: "Lūdzu, ievadiet derīgu e-pasta adresi.",
|
|
||||||
url: "Lūdzu, ievadiet derīgu URL adresi.",
|
|
||||||
date: "Lūdzu, ievadiet derīgu datumu.",
|
|
||||||
dateISO: "Lūdzu, ievadiet derīgu datumu (ISO).",
|
|
||||||
number: "Lūdzu, ievadiet derīgu numuru.",
|
|
||||||
digits: "Lūdzu, ievadiet tikai ciparus.",
|
|
||||||
creditcard: "Lūdzu, ievadiet derīgu kredītkartes numuru.",
|
|
||||||
equalTo: "Lūdzu, ievadiet to pašu vēlreiz.",
|
|
||||||
extension: "Lūdzu, ievadiet vērtību ar derīgu paplašinājumu.",
|
|
||||||
maxlength: $.validator.format("Lūdzu, ievadiet ne vairāk kā {0} rakstzīmes."),
|
|
||||||
minlength: $.validator.format("Lūdzu, ievadiet vismaz {0} rakstzīmes."),
|
|
||||||
rangelength: $.validator.format("Lūdzu ievadiet {0} līdz {1} rakstzīmes."),
|
|
||||||
range: $.validator.format("Lūdzu, ievadiet skaitli no {0} līdz {1}."),
|
|
||||||
max: $.validator.format("Lūdzu, ievadiet skaitli, kurš ir mazāks vai vienāds ar {0}."),
|
|
||||||
min: $.validator.format("Lūdzu, ievadiet skaitli, kurš ir lielāks vai vienāds ar {0}.")
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,33 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: MY (Malay; Melayu)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "Medan ini diperlukan.",
|
|
||||||
remote: "Sila betulkan medan ini.",
|
|
||||||
email: "Sila masukkan alamat emel yang betul.",
|
|
||||||
url: "Sila masukkan URL yang betul.",
|
|
||||||
date: "Sila masukkan tarikh yang betul.",
|
|
||||||
dateISO: "Sila masukkan tarikh(ISO) yang betul.",
|
|
||||||
number: "Sila masukkan nombor yang betul.",
|
|
||||||
digits: "Sila masukkan nilai digit sahaja.",
|
|
||||||
creditcard: "Sila masukkan nombor kredit kad yang betul.",
|
|
||||||
equalTo: "Sila masukkan nilai yang sama semula.",
|
|
||||||
extension: "Sila masukkan nilai yang telah diterima.",
|
|
||||||
maxlength: $.validator.format("Sila masukkan nilai tidak lebih dari {0} aksara."),
|
|
||||||
minlength: $.validator.format("Sila masukkan nilai sekurang-kurangnya {0} aksara."),
|
|
||||||
rangelength: $.validator.format("Sila masukkan panjang nilai antara {0} dan {1} aksara."),
|
|
||||||
range: $.validator.format("Sila masukkan nilai antara {0} dan {1} aksara."),
|
|
||||||
max: $.validator.format("Sila masukkan nilai yang kurang atau sama dengan {0}."),
|
|
||||||
min: $.validator.format("Sila masukkan nilai yang lebih atau sama dengan {0}.")
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,43 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: NL (Dutch; Nederlands, Vlaams)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "Dit is een verplicht veld.",
|
|
||||||
remote: "Controleer dit veld.",
|
|
||||||
email: "Vul hier een geldig e-mailadres in.",
|
|
||||||
url: "Vul hier een geldige URL in.",
|
|
||||||
date: "Vul hier een geldige datum in.",
|
|
||||||
dateISO: "Vul hier een geldige datum in (ISO-formaat).",
|
|
||||||
number: "Vul hier een geldig getal in.",
|
|
||||||
digits: "Vul hier alleen getallen in.",
|
|
||||||
creditcard: "Vul hier een geldig creditcardnummer in.",
|
|
||||||
equalTo: "Vul hier dezelfde waarde in.",
|
|
||||||
extension: "Vul hier een waarde in met een geldige extensie.",
|
|
||||||
maxlength: $.validator.format("Vul hier maximaal {0} tekens in."),
|
|
||||||
minlength: $.validator.format("Vul hier minimaal {0} tekens in."),
|
|
||||||
rangelength: $.validator.format("Vul hier een waarde in van minimaal {0} en maximaal {1} tekens."),
|
|
||||||
range: $.validator.format("Vul hier een waarde in van minimaal {0} en maximaal {1}."),
|
|
||||||
max: $.validator.format("Vul hier een waarde in kleiner dan of gelijk aan {0}."),
|
|
||||||
min: $.validator.format("Vul hier een waarde in groter dan of gelijk aan {0}."),
|
|
||||||
|
|
||||||
// for validations in additional-methods.js
|
|
||||||
iban: "Vul hier een geldig IBAN in.",
|
|
||||||
dateNL: "Vul hier een geldige datum in.",
|
|
||||||
phoneNL: "Vul hier een geldig Nederlands telefoonnummer in.",
|
|
||||||
mobileNL: "Vul hier een geldig Nederlands mobiel telefoonnummer in.",
|
|
||||||
postalcodeNL: "Vul hier een geldige postcode in.",
|
|
||||||
bankaccountNL: "Vul hier een geldig bankrekeningnummer in.",
|
|
||||||
giroaccountNL: "Vul hier een geldig gironummer in.",
|
|
||||||
bankorgiroaccountNL: "Vul hier een geldig bank- of gironummer in."
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,33 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: NO (Norwegian; Norsk)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "Dette feltet er obligatorisk.",
|
|
||||||
maxlength: $.validator.format("Maksimalt {0} tegn."),
|
|
||||||
minlength: $.validator.format("Minimum {0} tegn."),
|
|
||||||
rangelength: $.validator.format("Angi minimum {0} og maksimum {1} tegn."),
|
|
||||||
email: "Oppgi en gyldig epostadresse.",
|
|
||||||
url: "Angi en gyldig URL.",
|
|
||||||
date: "Angi en gyldig dato.",
|
|
||||||
dateISO: "Angi en gyldig dato (&ARING;&ARING;&ARING;&ARING;-MM-DD).",
|
|
||||||
dateSE: "Angi en gyldig dato.",
|
|
||||||
number: "Angi et gyldig nummer.",
|
|
||||||
numberSE: "Angi et gyldig nummer.",
|
|
||||||
digits: "Skriv kun tall.",
|
|
||||||
equalTo: "Skriv samme verdi igjen.",
|
|
||||||
range: $.validator.format("Angi en verdi mellom {0} og {1}."),
|
|
||||||
max: $.validator.format("Angi en verdi som er mindre eller lik {0}."),
|
|
||||||
min: $.validator.format("Angi en verdi som er større eller lik {0}."),
|
|
||||||
creditcard: "Angi et gyldig kredittkortnummer."
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,33 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: PL (Polish; język polski, polszczyzna)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "To pole jest wymagane.",
|
|
||||||
remote: "Proszę o wypełnienie tego pola.",
|
|
||||||
email: "Proszę o podanie prawidłowego adresu email.",
|
|
||||||
url: "Proszę o podanie prawidłowego URL.",
|
|
||||||
date: "Proszę o podanie prawidłowej daty.",
|
|
||||||
dateISO: "Proszę o podanie prawidłowej daty (ISO).",
|
|
||||||
number: "Proszę o podanie prawidłowej liczby.",
|
|
||||||
digits: "Proszę o podanie samych cyfr.",
|
|
||||||
creditcard: "Proszę o podanie prawidłowej karty kredytowej.",
|
|
||||||
equalTo: "Proszę o podanie tej samej wartości ponownie.",
|
|
||||||
extension: "Proszę o podanie wartości z prawidłowym rozszerzeniem.",
|
|
||||||
maxlength: $.validator.format("Proszę o podanie nie więcej niż {0} znaków."),
|
|
||||||
minlength: $.validator.format("Proszę o podanie przynajmniej {0} znaków."),
|
|
||||||
rangelength: $.validator.format("Proszę o podanie wartości o długości od {0} do {1} znaków."),
|
|
||||||
range: $.validator.format("Proszę o podanie wartości z przedziału od {0} do {1}."),
|
|
||||||
max: $.validator.format("Proszę o podanie wartości mniejszej bądź równej {0}."),
|
|
||||||
min: $.validator.format("Proszę o podanie wartości większej bądź równej {0}.")
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,38 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: PT (Portuguese; português)
|
|
||||||
* Region: BR (Brazil)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "Este campo é requerido.",
|
|
||||||
remote: "Por favor, corrija este campo.",
|
|
||||||
email: "Por favor, forneça um endereço de email válido.",
|
|
||||||
url: "Por favor, forneça uma URL válida.",
|
|
||||||
date: "Por favor, forneça uma data válida.",
|
|
||||||
dateISO: "Por favor, forneça uma data válida (ISO).",
|
|
||||||
number: "Por favor, forneça um número válido.",
|
|
||||||
digits: "Por favor, forneça somente dígitos.",
|
|
||||||
creditcard: "Por favor, forneça um cartão de crédito válido.",
|
|
||||||
equalTo: "Por favor, forneça o mesmo valor novamente.",
|
|
||||||
extension: "Por favor, forneça um valor com uma extensão válida.",
|
|
||||||
maxlength: $.validator.format("Por favor, forneça não mais que {0} caracteres."),
|
|
||||||
minlength: $.validator.format("Por favor, forneça ao menos {0} caracteres."),
|
|
||||||
rangelength: $.validator.format("Por favor, forneça um valor entre {0} e {1} caracteres de comprimento."),
|
|
||||||
range: $.validator.format("Por favor, forneça um valor entre {0} e {1}."),
|
|
||||||
max: $.validator.format("Por favor, forneça um valor menor ou igual a {0}."),
|
|
||||||
min: $.validator.format("Por favor, forneça um valor maior ou igual a {0}."),
|
|
||||||
nifES: "Por favor, forneça um NIF válido.",
|
|
||||||
nieES: "Por favor, forneça um NIE válido.",
|
|
||||||
cifEE: "Por favor, forneça um CIF válido.",
|
|
||||||
postalcodeBR: "Por favor, forneça um CEP válido."
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,37 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: PT (Portuguese; português)
|
|
||||||
* Region: PT (Portugal)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "Campo de preenchimento obrigatório.",
|
|
||||||
remote: "Por favor, corrija este campo.",
|
|
||||||
email: "Por favor, introduza um endereço eletrónico válido.",
|
|
||||||
url: "Por favor, introduza um URL válido.",
|
|
||||||
date: "Por favor, introduza uma data válida.",
|
|
||||||
dateISO: "Por favor, introduza uma data válida (ISO).",
|
|
||||||
number: "Por favor, introduza um número válido.",
|
|
||||||
digits: "Por favor, introduza apenas dígitos.",
|
|
||||||
creditcard: "Por favor, introduza um número de cartão de crédito válido.",
|
|
||||||
equalTo: "Por favor, introduza de novo o mesmo valor.",
|
|
||||||
extension: "Por favor, introduza um ficheiro com uma extensão válida.",
|
|
||||||
maxlength: $.validator.format("Por favor, não introduza mais do que {0} caracteres."),
|
|
||||||
minlength: $.validator.format("Por favor, introduza pelo menos {0} caracteres."),
|
|
||||||
rangelength: $.validator.format("Por favor, introduza entre {0} e {1} caracteres."),
|
|
||||||
range: $.validator.format("Por favor, introduza um valor entre {0} e {1}."),
|
|
||||||
max: $.validator.format("Por favor, introduza um valor menor ou igual a {0}."),
|
|
||||||
min: $.validator.format("Por favor, introduza um valor maior ou igual a {0}."),
|
|
||||||
nifES: "Por favor, introduza um NIF válido.",
|
|
||||||
nieES: "Por favor, introduza um NIE válido.",
|
|
||||||
cifES: "Por favor, introduza um CIF válido."
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,33 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: RO (Romanian, limba română)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "Acest câmp este obligatoriu.",
|
|
||||||
remote: "Te rugăm să completezi acest câmp.",
|
|
||||||
email: "Te rugăm să introduci o adresă de email validă",
|
|
||||||
url: "Te rugăm sa introduci o adresă URL validă.",
|
|
||||||
date: "Te rugăm să introduci o dată corectă.",
|
|
||||||
dateISO: "Te rugăm să introduci o dată (ISO) corectă.",
|
|
||||||
number: "Te rugăm să introduci un număr întreg valid.",
|
|
||||||
digits: "Te rugăm să introduci doar cifre.",
|
|
||||||
creditcard: "Te rugăm să introduci un numar de carte de credit valid.",
|
|
||||||
equalTo: "Te rugăm să reintroduci valoarea.",
|
|
||||||
extension: "Te rugăm să introduci o valoare cu o extensie validă.",
|
|
||||||
maxlength: $.validator.format("Te rugăm să nu introduci mai mult de {0} caractere."),
|
|
||||||
minlength: $.validator.format("Te rugăm să introduci cel puțin {0} caractere."),
|
|
||||||
rangelength: $.validator.format("Te rugăm să introduci o valoare între {0} și {1} caractere."),
|
|
||||||
range: $.validator.format("Te rugăm să introduci o valoare între {0} și {1}."),
|
|
||||||
max: $.validator.format("Te rugăm să introduci o valoare egal sau mai mică decât {0}."),
|
|
||||||
min: $.validator.format("Te rugăm să introduci o valoare egal sau mai mare decât {0}.")
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,33 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: RU (Russian; русский язык)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "Это поле необходимо заполнить.",
|
|
||||||
remote: "Пожалуйста, введите правильное значение.",
|
|
||||||
email: "Пожалуйста, введите корректный адрес электронной почты.",
|
|
||||||
url: "Пожалуйста, введите корректный URL.",
|
|
||||||
date: "Пожалуйста, введите корректную дату.",
|
|
||||||
dateISO: "Пожалуйста, введите корректную дату в формате ISO.",
|
|
||||||
number: "Пожалуйста, введите число.",
|
|
||||||
digits: "Пожалуйста, вводите только цифры.",
|
|
||||||
creditcard: "Пожалуйста, введите правильный номер кредитной карты.",
|
|
||||||
equalTo: "Пожалуйста, введите такое же значение ещё раз.",
|
|
||||||
extension: "Пожалуйста, выберите файл с правильным расширением.",
|
|
||||||
maxlength: $.validator.format("Пожалуйста, введите не больше {0} символов."),
|
|
||||||
minlength: $.validator.format("Пожалуйста, введите не меньше {0} символов."),
|
|
||||||
rangelength: $.validator.format("Пожалуйста, введите значение длиной от {0} до {1} символов."),
|
|
||||||
range: $.validator.format("Пожалуйста, введите число от {0} до {1}."),
|
|
||||||
max: $.validator.format("Пожалуйста, введите число, меньшее или равное {0}."),
|
|
||||||
min: $.validator.format("Пожалуйста, введите число, большее или равное {0}.")
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,33 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: SI (Slovenian)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "To polje je obvezno.",
|
|
||||||
remote: "Vpis v tem polju ni v pravi obliki.",
|
|
||||||
email: "Prosimo, vnesite pravi email naslov.",
|
|
||||||
url: "Prosimo, vnesite pravi URL.",
|
|
||||||
date: "Prosimo, vnesite pravi datum.",
|
|
||||||
dateISO: "Prosimo, vnesite pravi datum (ISO).",
|
|
||||||
number: "Prosimo, vnesite pravo številko.",
|
|
||||||
digits: "Prosimo, vnesite samo številke.",
|
|
||||||
creditcard: "Prosimo, vnesite pravo številko kreditne kartice.",
|
|
||||||
equalTo: "Prosimo, ponovno vnesite enako vsebino.",
|
|
||||||
extension: "Prosimo, vnesite vsebino z pravo končnico.",
|
|
||||||
maxlength: $.validator.format("Prosimo, da ne vnašate več kot {0} znakov."),
|
|
||||||
minlength: $.validator.format("Prosimo, vnesite vsaj {0} znakov."),
|
|
||||||
rangelength: $.validator.format("Prosimo, vnesite od {0} do {1} znakov."),
|
|
||||||
range: $.validator.format("Prosimo, vnesite vrednost med {0} in {1}."),
|
|
||||||
max: $.validator.format("Prosimo, vnesite vrednost manjšo ali enako {0}."),
|
|
||||||
min: $.validator.format("Prosimo, vnesite vrednost večjo ali enako {0}.")
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,30 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: SK (Slovak; slovenčina, slovenský jazyk)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "Povinné zadať.",
|
|
||||||
maxlength: $.validator.format("Maximálne {0} znakov."),
|
|
||||||
minlength: $.validator.format("Minimálne {0} znakov."),
|
|
||||||
rangelength: $.validator.format("Minimálne {0} a Maximálne {1} znakov."),
|
|
||||||
email: "E-mailová adresa musí byť platná.",
|
|
||||||
url: "URL musí byť platný.",
|
|
||||||
date: "Musí byť dátum.",
|
|
||||||
number: "Musí byť číslo.",
|
|
||||||
digits: "Môže obsahovať iba číslice.",
|
|
||||||
equalTo: "Dva hodnoty sa musia rovnať.",
|
|
||||||
range: $.validator.format("Musí byť medzi {0} a {1}."),
|
|
||||||
max: $.validator.format("Nemôže byť viac ako{0}."),
|
|
||||||
min: $.validator.format("Nemôže byť menej ako{0}."),
|
|
||||||
creditcard: "Číslo platobnej karty musí byť platné."
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,33 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Language: SL (Slovenian; slovenski jezik)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "To polje je obvezno.",
|
|
||||||
remote: "Prosimo popravite to polje.",
|
|
||||||
email: "Prosimo vnesite veljaven email naslov.",
|
|
||||||
url: "Prosimo vnesite veljaven URL naslov.",
|
|
||||||
date: "Prosimo vnesite veljaven datum.",
|
|
||||||
dateISO: "Prosimo vnesite veljaven ISO datum.",
|
|
||||||
number: "Prosimo vnesite veljavno število.",
|
|
||||||
digits: "Prosimo vnesite samo števila.",
|
|
||||||
creditcard: "Prosimo vnesite veljavno številko kreditne kartice.",
|
|
||||||
equalTo: "Prosimo ponovno vnesite vrednost.",
|
|
||||||
extension: "Prosimo vnesite vrednost z veljavno končnico.",
|
|
||||||
maxlength: $.validator.format("Prosimo vnesite največ {0} znakov."),
|
|
||||||
minlength: $.validator.format("Prosimo vnesite najmanj {0} znakov."),
|
|
||||||
rangelength: $.validator.format("Prosimo vnesite najmanj {0} in največ {1} znakov."),
|
|
||||||
range: $.validator.format("Prosimo vnesite vrednost med {0} in {1}."),
|
|
||||||
max: $.validator.format("Prosimo vnesite vrednost manjše ali enako {0}."),
|
|
||||||
min: $.validator.format("Prosimo vnesite vrednost večje ali enako {0}.")
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,33 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: SR (Serbian; српски језик)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "Поље је обавезно.",
|
|
||||||
remote: "Средите ово поље.",
|
|
||||||
email: "Унесите исправну и-мејл адресу.",
|
|
||||||
url: "Унесите исправан URL.",
|
|
||||||
date: "Унесите исправан датум.",
|
|
||||||
dateISO: "Унесите исправан датум (ISO).",
|
|
||||||
number: "Унесите исправан број.",
|
|
||||||
digits: "Унесите само цифе.",
|
|
||||||
creditcard: "Унесите исправан број кредитне картице.",
|
|
||||||
equalTo: "Унесите исту вредност поново.",
|
|
||||||
extension: "Унесите вредност са одговарајућом екстензијом.",
|
|
||||||
maxlength: $.validator.format("Унесите мање од {0} карактера."),
|
|
||||||
minlength: $.validator.format("Унесите барем {0} карактера."),
|
|
||||||
rangelength: $.validator.format("Унесите вредност дугачку између {0} и {1} карактера."),
|
|
||||||
range: $.validator.format("Унесите вредност између {0} и {1}."),
|
|
||||||
max: $.validator.format("Унесите вредност мању или једнаку {0}."),
|
|
||||||
min: $.validator.format("Унесите вредност већу или једнаку {0}.")
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,33 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: SR (Serbian - Latin alphabet; srpski jezik - latinica)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "Polje je obavezno.",
|
|
||||||
remote: "Sredite ovo polje.",
|
|
||||||
email: "Unesite ispravnu i-mejl adresu",
|
|
||||||
url: "Unesite ispravan URL.",
|
|
||||||
date: "Unesite ispravan datum.",
|
|
||||||
dateISO: "Unesite ispravan datum (ISO).",
|
|
||||||
number: "Unesite ispravan broj.",
|
|
||||||
digits: "Unesite samo cife.",
|
|
||||||
creditcard: "Unesite ispravan broj kreditne kartice.",
|
|
||||||
equalTo: "Unesite istu vrednost ponovo.",
|
|
||||||
extension: "Unesite vrednost sa odgovarajućom ekstenzijom.",
|
|
||||||
maxlength: $.validator.format("Unesite manje od {0} karaktera."),
|
|
||||||
minlength: $.validator.format("Unesite barem {0} karaktera."),
|
|
||||||
rangelength: $.validator.format("Unesite vrednost dugačku između {0} i {1} karaktera."),
|
|
||||||
range: $.validator.format("Unesite vrednost između {0} i {1}."),
|
|
||||||
max: $.validator.format("Unesite vrednost manju ili jednaku {0}."),
|
|
||||||
min: $.validator.format("Unesite vrednost veću ili jednaku {0}.")
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,31 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: SV (Swedish; Svenska)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "Detta fält är obligatoriskt.",
|
|
||||||
maxlength: $.validator.format("Du får ange högst {0} tecken."),
|
|
||||||
minlength: $.validator.format("Du måste ange minst {0} tecken."),
|
|
||||||
rangelength: $.validator.format("Ange minst {0} och max {1} tecken."),
|
|
||||||
email: "Ange en korrekt e-postadress.",
|
|
||||||
url: "Ange en korrekt URL.",
|
|
||||||
date: "Ange ett korrekt datum.",
|
|
||||||
dateISO: "Ange ett korrekt datum (ÅÅÅÅ-MM-DD).",
|
|
||||||
number: "Ange ett korrekt nummer.",
|
|
||||||
digits: "Ange endast siffror.",
|
|
||||||
equalTo: "Ange samma värde igen.",
|
|
||||||
range: $.validator.format("Ange ett värde mellan {0} och {1}."),
|
|
||||||
max: $.validator.format("Ange ett värde som är mindre eller lika med {0}."),
|
|
||||||
min: $.validator.format("Ange ett värde som är större eller lika med {0}."),
|
|
||||||
creditcard: "Ange ett korrekt kreditkortsnummer."
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,33 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: TH (Thai; ไทย)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "โปรดระบุ",
|
|
||||||
remote: "โปรดแก้ไขให้ถูกต้อง",
|
|
||||||
email: "โปรดระบุที่อยู่อีเมล์ที่ถูกต้อง",
|
|
||||||
url: "โปรดระบุ URL ที่ถูกต้อง",
|
|
||||||
date: "โปรดระบุวันที่ ที่ถูกต้อง",
|
|
||||||
dateISO: "โปรดระบุวันที่ ที่ถูกต้อง (ระบบ ISO).",
|
|
||||||
number: "โปรดระบุทศนิยมที่ถูกต้อง",
|
|
||||||
digits: "โปรดระบุจำนวนเต็มที่ถูกต้อง",
|
|
||||||
creditcard: "โปรดระบุรหัสบัตรเครดิตที่ถูกต้อง",
|
|
||||||
equalTo: "โปรดระบุค่าเดิมอีกครั้ง",
|
|
||||||
extension: "โปรดระบุค่าที่มีส่วนขยายที่ถูกต้อง",
|
|
||||||
maxlength: $.validator.format("โปรดอย่าระบุค่าที่ยาวกว่า {0} อักขระ"),
|
|
||||||
minlength: $.validator.format("โปรดอย่าระบุค่าที่สั้นกว่า {0} อักขระ"),
|
|
||||||
rangelength: $.validator.format("โปรดอย่าระบุค่าความยาวระหว่าง {0} ถึง {1} อักขระ"),
|
|
||||||
range: $.validator.format("โปรดระบุค่าระหว่าง {0} และ {1}"),
|
|
||||||
max: $.validator.format("โปรดระบุค่าน้อยกว่าหรือเท่ากับ {0}"),
|
|
||||||
min: $.validator.format("โปรดระบุค่ามากกว่าหรือเท่ากับ {0}")
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,33 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: TJ (Tajikistan; Забони тоҷикӣ)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "Ворид кардани ин филд маҷбури аст.",
|
|
||||||
remote: "Илтимос, маълумоти саҳеҳ ворид кунед.",
|
|
||||||
email: "Илтимос, почтаи электронии саҳеҳ ворид кунед.",
|
|
||||||
url: "Илтимос, URL адреси саҳеҳ ворид кунед.",
|
|
||||||
date: "Илтимос, таърихи саҳеҳ ворид кунед.",
|
|
||||||
dateISO: "Илтимос, таърихи саҳеҳи (ISO)ӣ ворид кунед.",
|
|
||||||
number: "Илтимос, рақамҳои саҳеҳ ворид кунед.",
|
|
||||||
digits: "Илтимос, танҳо рақам ворид кунед.",
|
|
||||||
creditcard: "Илтимос, кредит карди саҳеҳ ворид кунед.",
|
|
||||||
equalTo: "Илтимос, миқдори баробар ворид кунед.",
|
|
||||||
extension: "Илтимос, қофияи файлро дуруст интихоб кунед",
|
|
||||||
maxlength: $.validator.format("Илтимос, бештар аз {0} рамз ворид накунед."),
|
|
||||||
minlength: $.validator.format("Илтимос, камтар аз {0} рамз ворид накунед."),
|
|
||||||
rangelength: $.validator.format("Илтимос, камтар аз {0} ва зиёда аз {1} рамз ворид кунед."),
|
|
||||||
range: $.validator.format("Илтимос, аз {0} то {1} рақам зиёд ворид кунед."),
|
|
||||||
max: $.validator.format("Илтимос, бештар аз {0} рақам ворид накунед."),
|
|
||||||
min: $.validator.format("Илтимос, камтар аз {0} рақам ворид накунед.")
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,33 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: TR (Turkish; Türkçe)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "Bu alanın doldurulması zorunludur.",
|
|
||||||
remote: "Lütfen bu alanı düzeltin.",
|
|
||||||
email: "Lütfen geçerli bir e-posta adresi giriniz.",
|
|
||||||
url: "Lütfen geçerli bir web adresi (URL) giriniz.",
|
|
||||||
date: "Lütfen geçerli bir tarih giriniz.",
|
|
||||||
dateISO: "Lütfen geçerli bir tarih giriniz(ISO formatında)",
|
|
||||||
number: "Lütfen geçerli bir sayı giriniz.",
|
|
||||||
digits: "Lütfen sadece sayısal karakterler giriniz.",
|
|
||||||
creditcard: "Lütfen geçerli bir kredi kartı giriniz.",
|
|
||||||
equalTo: "Lütfen aynı değeri tekrar giriniz.",
|
|
||||||
extension: "Lütfen geçerli uzantıya sahip bir değer giriniz.",
|
|
||||||
maxlength: $.validator.format("Lütfen en fazla {0} karakter uzunluğunda bir değer giriniz."),
|
|
||||||
minlength: $.validator.format("Lütfen en az {0} karakter uzunluğunda bir değer giriniz."),
|
|
||||||
rangelength: $.validator.format("Lütfen en az {0} ve en fazla {1} uzunluğunda bir değer giriniz."),
|
|
||||||
range: $.validator.format("Lütfen {0} ile {1} arasında bir değer giriniz."),
|
|
||||||
max: $.validator.format("Lütfen {0} değerine eşit ya da daha küçük bir değer giriniz."),
|
|
||||||
min: $.validator.format("Lütfen {0} değerine eşit ya da daha büyük bir değer giriniz.")
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,33 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: UK (Ukrainian; українська мова)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "Це поле необхідно заповнити.",
|
|
||||||
remote: "Будь ласка, введіть правильне значення.",
|
|
||||||
email: "Будь ласка, введіть коректну адресу електронної пошти.",
|
|
||||||
url: "Будь ласка, введіть коректний URL.",
|
|
||||||
date: "Будь ласка, введіть коректну дату.",
|
|
||||||
dateISO: "Будь ласка, введіть коректну дату у форматі ISO.",
|
|
||||||
number: "Будь ласка, введіть число.",
|
|
||||||
digits: "Вводите потрібно лише цифри.",
|
|
||||||
creditcard: "Будь ласка, введіть правильний номер кредитної карти.",
|
|
||||||
equalTo: "Будь ласка, введіть таке ж значення ще раз.",
|
|
||||||
extension: "Будь ласка, виберіть файл з правильним розширенням.",
|
|
||||||
maxlength: $.validator.format("Будь ласка, введіть не більше {0} символів."),
|
|
||||||
minlength: $.validator.format("Будь ласка, введіть не менше {0} символів."),
|
|
||||||
rangelength: $.validator.format("Будь ласка, введіть значення довжиною від {0} до {1} символів."),
|
|
||||||
range: $.validator.format("Будь ласка, введіть число від {0} до {1}."),
|
|
||||||
max: $.validator.format("Будь ласка, введіть число, менше або рівно {0}."),
|
|
||||||
min: $.validator.format("Будь ласка, введіть число, більше або рівно {0}.")
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,33 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: VI (Vietnamese; Tiếng Việt)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "Hãy nhập.",
|
|
||||||
remote: "Hãy sửa cho đúng.",
|
|
||||||
email: "Hãy nhập email.",
|
|
||||||
url: "Hãy nhập URL.",
|
|
||||||
date: "Hãy nhập ngày.",
|
|
||||||
dateISO: "Hãy nhập ngày (ISO).",
|
|
||||||
number: "Hãy nhập số.",
|
|
||||||
digits: "Hãy nhập chữ số.",
|
|
||||||
creditcard: "Hãy nhập số thẻ tín dụng.",
|
|
||||||
equalTo: "Hãy nhập thêm lần nữa.",
|
|
||||||
extension: "Phần mở rộng không đúng.",
|
|
||||||
maxlength: $.validator.format("Hãy nhập từ {0} kí tự trở xuống."),
|
|
||||||
minlength: $.validator.format("Hãy nhập từ {0} kí tự trở lên."),
|
|
||||||
rangelength: $.validator.format("Hãy nhập từ {0} đến {1} kí tự."),
|
|
||||||
range: $.validator.format("Hãy nhập từ {0} đến {1}."),
|
|
||||||
max: $.validator.format("Hãy nhập từ {0} trở xuống."),
|
|
||||||
min: $.validator.format("Hãy nhập từ {1} trở lên.")
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,33 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: ZH (Chinese, 中文 (Zhōngwén), 汉语, 漢語)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "必须填写",
|
|
||||||
remote: "请修正此栏位",
|
|
||||||
email: "请输入有效的电子邮件",
|
|
||||||
url: "请输入有效的网址",
|
|
||||||
date: "请输入有效的日期",
|
|
||||||
dateISO: "请输入有效的日期 (YYYY-MM-DD)",
|
|
||||||
number: "请输入正确的数字",
|
|
||||||
digits: "只可输入数字",
|
|
||||||
creditcard: "请输入有效的信用卡号码",
|
|
||||||
equalTo: "你的输入不相同",
|
|
||||||
extension: "请输入有效的后缀",
|
|
||||||
maxlength: $.validator.format("最多 {0} 个字"),
|
|
||||||
minlength: $.validator.format("最少 {0} 个字"),
|
|
||||||
rangelength: $.validator.format("请输入长度为 {0} 至 {1} 之間的字串"),
|
|
||||||
range: $.validator.format("请输入 {0} 至 {1} 之间的数值"),
|
|
||||||
max: $.validator.format("请输入不大于 {0} 的数值"),
|
|
||||||
min: $.validator.format("请输入不小于 {0} 的数值")
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,34 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Translated default messages for the jQuery validation plugin.
|
|
||||||
* Locale: ZH (Chinese; 中文 (Zhōngwén), 汉语, 漢語)
|
|
||||||
* Region: TW (Taiwan)
|
|
||||||
*/
|
|
||||||
$.extend($.validator.messages, {
|
|
||||||
required: "必須填寫",
|
|
||||||
remote: "請修正此欄位",
|
|
||||||
email: "請輸入有效的電子郵件",
|
|
||||||
url: "請輸入有效的網址",
|
|
||||||
date: "請輸入有效的日期",
|
|
||||||
dateISO: "請輸入有效的日期 (YYYY-MM-DD)",
|
|
||||||
number: "請輸入正確的數值",
|
|
||||||
digits: "只可輸入數字",
|
|
||||||
creditcard: "請輸入有效的信用卡號碼",
|
|
||||||
equalTo: "請重複輸入一次",
|
|
||||||
extension: "請輸入有效的後綴",
|
|
||||||
maxlength: $.validator.format("最多 {0} 個字"),
|
|
||||||
minlength: $.validator.format("最少 {0} 個字"),
|
|
||||||
rangelength: $.validator.format("請輸入長度為 {0} 至 {1} 之間的字串"),
|
|
||||||
range: $.validator.format("請輸入 {0} 至 {1} 之間的數值"),
|
|
||||||
max: $.validator.format("請輸入不大於 {0} 的數值"),
|
|
||||||
min: $.validator.format("請輸入不小於 {0} 的數值")
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,22 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Localized default methods for the jQuery validation plugin.
|
|
||||||
* Locale: DE
|
|
||||||
*/
|
|
||||||
$.extend($.validator.methods, {
|
|
||||||
date: function(value, element) {
|
|
||||||
return this.optional(element) || /^\d\d?\.\d\d?\.\d\d\d?\d?$/.test(value);
|
|
||||||
},
|
|
||||||
number: function(value, element) {
|
|
||||||
return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test(value);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,22 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Localized default methods for the jQuery validation plugin.
|
|
||||||
* Locale: ES_CL
|
|
||||||
*/
|
|
||||||
$.extend($.validator.methods, {
|
|
||||||
date: function(value, element) {
|
|
||||||
return this.optional(element) || /^\d\d?\-\d\d?\-\d\d\d?\d?$/.test(value);
|
|
||||||
},
|
|
||||||
number: function(value, element) {
|
|
||||||
return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test(value);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,22 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Localized default methods for the jQuery validation plugin.
|
|
||||||
* Locale: FI
|
|
||||||
*/
|
|
||||||
$.extend($.validator.methods, {
|
|
||||||
date: function(value, element) {
|
|
||||||
return this.optional(element) || /^\d{1,2}\.\d{1,2}\.\d{4}$/.test(value);
|
|
||||||
},
|
|
||||||
number: function(value, element) {
|
|
||||||
return this.optional(element) || /^-?(?:\d+)(?:,\d+)?$/.test(value);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,19 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Localized default methods for the jQuery validation plugin.
|
|
||||||
* Locale: NL
|
|
||||||
*/
|
|
||||||
$.extend($.validator.methods, {
|
|
||||||
date: function(value, element) {
|
|
||||||
return this.optional(element) || /^\d\d?[\.\/\-]\d\d?[\.\/\-]\d\d\d?\d?$/.test(value);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,19 +0,0 @@
|
|||||||
(function( factory ) {
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
|
||||||
define( ["jquery", "../jquery.validate"], factory );
|
|
||||||
} else {
|
|
||||||
factory( jQuery );
|
|
||||||
}
|
|
||||||
}(function( $ ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Localized default methods for the jQuery validation plugin.
|
|
||||||
* Locale: PT_BR
|
|
||||||
*/
|
|
||||||
$.extend($.validator.methods, {
|
|
||||||
date: function(value, element) {
|
|
||||||
return this.optional(element) || /^\d\d?\/\d\d?\/\d\d\d?\d?$/.test(value);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
}));
|
|
@ -1,5 +1,7 @@
|
|||||||
const Path = require('path');
|
const Path = require('path');
|
||||||
|
const dir = require('node-dir');
|
||||||
const webpackConfig = require('@silverstripe/webpack-config');
|
const webpackConfig = require('@silverstripe/webpack-config');
|
||||||
|
const CopyWebpackPlugin = require('copy-webpack-plugin');
|
||||||
const {
|
const {
|
||||||
resolveJS,
|
resolveJS,
|
||||||
externalJS,
|
externalJS,
|
||||||
@ -12,25 +14,77 @@ const {
|
|||||||
const ENV = process.env.NODE_ENV;
|
const ENV = process.env.NODE_ENV;
|
||||||
const PATHS = {
|
const PATHS = {
|
||||||
MODULES: 'node_modules',
|
MODULES: 'node_modules',
|
||||||
ROOT: Path.resolve(),
|
MODULES_ABS: Path.resolve('node_modules'),
|
||||||
FILES_PATH: '../',
|
FILES_PATH: '../',
|
||||||
SRC: Path.resolve(),
|
ROOT: Path.resolve(),
|
||||||
|
SRC: Path.resolve('client/src'),
|
||||||
|
DIST: Path.resolve('client/dist'),
|
||||||
|
DIST_JS: Path.resolve('client/dist/js'),
|
||||||
|
LEGACY_SRC: Path.resolve('client/src/legacy'),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const copyData = [
|
||||||
|
{
|
||||||
|
from: PATHS.MODULES + '/jquery/dist/jquery.min.js',
|
||||||
|
to: PATHS.DIST_JS
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Builds a list of files matching the `*.min.js` pattern to copy from a source
|
||||||
|
* directory to a dist directory.
|
||||||
|
*/
|
||||||
|
const addMinFiles = (from, to) => {
|
||||||
|
const sourceDir = PATHS.MODULES_ABS + from;
|
||||||
|
dir.files(sourceDir, (err, files) => {
|
||||||
|
if (err) throw err;
|
||||||
|
files.forEach(file => {
|
||||||
|
filename = file.replace(sourceDir, '');
|
||||||
|
if (!filename.match(/\.min\.js$/)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
copyData.push({
|
||||||
|
from: PATHS.MODULES + from + filename,
|
||||||
|
to: PATHS.DIST_JS + to + filename
|
||||||
|
})
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
addMinFiles('/jquery-validation/dist', '/jquery-validation');
|
||||||
|
|
||||||
const config = [
|
const config = [
|
||||||
{
|
{
|
||||||
name: 'css',
|
name: 'js',
|
||||||
entry: {
|
entry: {
|
||||||
bundle: Path.resolve('scss') + '/comments.scss',
|
CommentsInterface: `${PATHS.LEGACY_SRC}/CommentsInterface.js`,
|
||||||
},
|
},
|
||||||
output: {
|
output: {
|
||||||
path: Path.resolve('css'),
|
path: PATHS.DIST,
|
||||||
|
filename: 'js/[name].js',
|
||||||
|
},
|
||||||
|
devtool: (ENV !== 'production') ? 'source-map' : '',
|
||||||
|
resolve: resolveJS(ENV, PATHS),
|
||||||
|
externals: externalJS(ENV, PATHS),
|
||||||
|
module: moduleJS(ENV, PATHS),
|
||||||
|
plugins: pluginJS(ENV, PATHS).concat([
|
||||||
|
new CopyWebpackPlugin(copyData)
|
||||||
|
])
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'css',
|
||||||
|
entry: {
|
||||||
|
comments: `${PATHS.SRC}/styles/comments.scss`,
|
||||||
|
cms: `${PATHS.SRC}/styles/cms.scss`,
|
||||||
|
},
|
||||||
|
output: {
|
||||||
|
path: PATHS.DIST,
|
||||||
filename: 'styles/[name].css',
|
filename: 'styles/[name].css',
|
||||||
},
|
},
|
||||||
devtool: (ENV !== 'production') ? 'source-map' : '',
|
devtool: (ENV !== 'production') ? 'source-map' : '',
|
||||||
module: moduleCSS(ENV, PATHS),
|
module: moduleCSS(ENV, PATHS),
|
||||||
plugins: pluginCSS(ENV, PATHS),
|
plugins: pluginCSS(ENV, PATHS),
|
||||||
}
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
// Use WEBPACK_CHILD=js or WEBPACK_CHILD=css env var to run a single config
|
// Use WEBPACK_CHILD=js or WEBPACK_CHILD=css env var to run a single config
|
||||||
|
Loading…
Reference in New Issue
Block a user