Merge remote-tracking branch 'origin/4'

This commit is contained in:
Robbie Averill 2017-06-09 11:29:44 +12:00
commit f9bf407295
29 changed files with 200 additions and 142 deletions

4
.cow.json Normal file
View File

@ -0,0 +1,4 @@
{
"changelog-github": true
}

View File

@ -189,15 +189,21 @@ class EditableCustomRule extends DataObject
case 'ValueNot': case 'ValueNot':
if ($checkboxField) { if ($checkboxField) {
if ($formFieldWatch->isCheckBoxGroupField()) { if ($formFieldWatch->isCheckBoxGroupField()) {
$expression = sprintf("$.inArray('%s', %s.filter(':checked').map(function(){ return $(this).val();}).get()) > -1", $expression = sprintf(
$fieldValue, $target); "$.inArray('%s', %s.filter(':checked').map(function(){ return $(this).val();}).get()) > -1",
$fieldValue,
$target
);
} else { } else {
$expression = "{$target}.prop('checked')"; $expression = "{$target}.prop('checked')";
} }
} elseif ($radioField) { } elseif ($radioField) {
// We cannot simply get the value of the radio group, we need to find the checked option first. // We cannot simply get the value of the radio group, we need to find the checked option first.
$expression = sprintf('%s.closest(".field, .control-group").find("input:checked").val() == "%s"', $expression = sprintf(
$target, $fieldValue); '%s.closest(".field, .control-group").find("input:checked").val() == "%s"',
$target,
$fieldValue
);
} else { } else {
$expression = sprintf('%s.val() == "%s"', $target, $fieldValue); $expression = sprintf('%s.val() == "%s"', $target, $fieldValue);
} }
@ -211,8 +217,12 @@ class EditableCustomRule extends DataObject
case 'ValueLessThanEqual': case 'ValueLessThanEqual':
case 'ValueGreaterThan': case 'ValueGreaterThan':
case 'ValueGreaterThanEqual': case 'ValueGreaterThanEqual':
$expression = sprintf('%s.val() %s parseFloat("%s")', $target, $expression = sprintf(
$conditionOptions[$this->ConditionOption], $fieldValue); '%s.val() %s parseFloat("%s")',
$target,
$conditionOptions[$this->ConditionOption],
$fieldValue
);
break; break;
default: default:
throw new LogicException("Unhandled rule {$this->ConditionOption}"); throw new LogicException("Unhandled rule {$this->ConditionOption}");
@ -228,14 +238,14 @@ class EditableCustomRule extends DataObject
} }
/** /**
* Returns the opposite of the show/hide pairs of strings * Returns the opposite visibility function for the value of the initial visibility field, e.g. show/hide. This
* will toggle the "hide" class either way, which is handled by CSS.
* *
* @param string $text * @param string $text
*
* @return string * @return string
*/ */
public function toggleDisplayText($text) public function toggleDisplayText($text)
{ {
return (strtolower($text) === 'show') ? 'hide' : 'show'; return (strtolower($text) === 'hide') ? 'removeClass("hide")' : 'addClass("hide")';
} }
} }

View File

@ -778,29 +778,22 @@ JS
$conjunction = $rule['conjunction']; $conjunction = $rule['conjunction'];
$operations = implode(" {$conjunction} ", $rule['operations']); $operations = implode(" {$conjunction} ", $rule['operations']);
$target = $rule['targetFieldID']; $target = $rule['targetFieldID'];
$initialState = $rule['initialState'];
$view = $rule['view'];
$opposite = $rule['opposite'];
$result .= <<<EOS $result .= <<<EOS
\n \n
//Initial state
$('{$target}').{$initialState}();
$('.userform').on('{$events}', $('.userform').on('{$events}',
"{$selectors}", "{$selectors}",
function (){ function (){
if({$operations}) { if ({$operations}) {
$('{$target}').{$view}(); $('{$target}').{$rule['view']};
} else { } else {
$('{$target}').{$opposite}(); $('{$target}').{$rule['opposite']};
} }
}); });
$("{$target}").find('.hide').removeClass('hide');
EOS; EOS;
} }
return $result; return $result;
} }
} }

View File

@ -93,7 +93,7 @@ class EditableFileField extends EditableFormField
); );
if ($this->MaxFileSizeMB > 0) { if ($this->MaxFileSizeMB > 0) {
$field->getValidator()->setAllowedMaxFileSize($this->MaxFileSizeMB * 1024); $field->getValidator()->setAllowedMaxFileSize($this->MaxFileSizeMB * 1024 * 1024);
} else { } else {
$field->getValidator()->setAllowedMaxFileSize(static::get_php_max_file_size()); $field->getValidator()->setAllowedMaxFileSize(static::get_php_max_file_size());
} }

View File

@ -311,10 +311,7 @@ class EditableFormField extends DataObject
}, },
'FieldValue' => function ($record, $column, $grid) { 'FieldValue' => function ($record, $column, $grid) {
return TextField::create($column); return TextField::create($column);
}, }
'ParentID' => function ($record, $column, $grid) use ($self) {
return HiddenField::create($column, '', $self->ID);
},
)); ));
// Custom rules // Custom rules
@ -864,6 +861,11 @@ class EditableFormField extends DataObject
$field->addExtraClass($this->ExtraClass); $field->addExtraClass($this->ExtraClass);
} }
// if ShowOnLoad is false hide the field
if (!$this->ShowOnLoad) {
$field->addExtraClass($this->ShowOnLoadNice());
}
// if this field has a placeholder // if this field has a placeholder
if ($this->Placeholder) { if ($this->Placeholder) {
$field->setAttribute('placeholder', $this->Placeholder); $field->setAttribute('placeholder', $this->Placeholder);
@ -1092,9 +1094,10 @@ class EditableFormField extends DataObject
} }
$result['operations'][] = $expression['operation']; $result['operations'][] = $expression['operation'];
//View/Show should read // View/Show should read
$opposite = ($result['initialState'] === 'hide') ? 'show' : 'hide';
$result['view'] = $rule->toggleDisplayText($result['initialState']); $result['view'] = $rule->toggleDisplayText($result['initialState']);
$result['opposite'] = $rule->toggleDisplayText($result['view']); $result['opposite'] = $rule->toggleDisplayText($opposite);
} }
return (count($result['selectors'])) ? $result : null; return (count($result['selectors'])) ? $result : null;

View File

@ -126,33 +126,32 @@ class EditableLiteralField extends EditableFormField
public function getFormField() public function getFormField()
{ {
// Build label and css classes $content = LiteralField::create(
$label = ''; "LiteralFieldContent-{$this->ID}]",
$classes = $this->ExtraClass;
if (empty($this->Title) || $this->HideLabel) {
$classes .= " nolabel";
} else {
$label = "<label class='left'>{$this->EscapedTitle}</label>";
}
$field = new LiteralField(
"LiteralField[{$this->ID}]",
sprintf(
"<div id='%s' class='field text %s'>
%s
<div class='middleColumn literalFieldArea'>%s</div>".
"</div>",
Convert::raw2htmlname($this->Name),
Convert::raw2att($classes),
$label,
$this->dbObject('Content')->forTemplate() $this->dbObject('Content')->forTemplate()
)
); );
// When dealing with literal fields there is no further customisation that can be added at this point $field = CompositeField::create($content)
->setName($this->Name)
->setID($this->Name)
->setFieldHolderTemplate('UserFormsLiteralField_holder');
$this->doUpdateFormField($field);
return $field; return $field;
} }
protected function updateFormField($field)
{
parent::updateFormField($field);
if ($this->HideLabel) {
$this->ExtraClass .= ' nolabel';
} else {
$field->setTitle($this->Title);
}
}
public function showInReports() public function showInReports()
{ {
return ! $this->HideFromReports; return ! $this->HideFromReports;

View File

@ -72,3 +72,7 @@
margin-bottom: 5px; margin-bottom: 5px;
font-weight: bold; font-weight: bold;
} }
.userform .field.hide {
display: none;
}

View File

@ -77,7 +77,7 @@ jQuery(function ($) {
* Default options for step validation. These get extended in main(). * Default options for step validation. These get extended in main().
*/ */
UserForm.prototype.validationOptions = { UserForm.prototype.validationOptions = {
ignore: ':hidden', ignore: ':hidden,ul',
errorClass: 'error', errorClass: 'error',
errorElement: 'span', errorElement: 'span',
errorPlacement: function (error, element) { errorPlacement: function (error, element) {

View File

@ -18,7 +18,6 @@ if (typeof(ss) === 'undefined' || typeof(ss.i18n) === 'undefined') {
"UserForms.HIDE_OPTIONS": "Skryť možnosti", "UserForms.HIDE_OPTIONS": "Skryť možnosti",
"UserForms.LEAVE_CONFIRMATION": "Máte neuložené zmeny!", "UserForms.LEAVE_CONFIRMATION": "Máte neuložené zmeny!",
"UserForms.REMOVED_OPTION": "Voľba/možnosť odstránená", "UserForms.REMOVED_OPTION": "Voľba/možnosť odstránená",
"UserForms.SHOW_OPTIONS": "Zobraziť možnosti", "UserForms.SHOW_OPTIONS": "Zobraziť možnosti"
"UserForms.ERROR_CONTAINER_HEADER": "Opravte prosím nasledujúce chyby a skúste to znova:"
}); });
} }

View File

@ -11,8 +11,8 @@ ar:
NOTBLANK: 'ليس بفراغ' NOTBLANK: 'ليس بفراغ'
NOTVALUE: 'ليست قيمة' NOTVALUE: 'ليست قيمة'
SHOWTHISFIELD: 'إظهار هذا الحقل' SHOWTHISFIELD: 'إظهار هذا الحقل'
VALUE: القيمة VALUE: 'القيمة'
WHEN: عندما WHEN: 'عندما'
EditableCheckbox: EditableCheckbox:
PLURALNAME: 'مربعات لوضع إشارة' PLURALNAME: 'مربعات لوضع إشارة'
SINGULARNAME: 'حقل ذات مربع لوضع إشارة' SINGULARNAME: 'حقل ذات مربع لوضع إشارة'
@ -51,7 +51,7 @@ ar:
FIELDONDEFAULT: 'القيمة المبدئية للحقل' FIELDONDEFAULT: 'القيمة المبدئية للحقل'
GREATERTHAN: 'القيمة أكبر من' GREATERTHAN: 'القيمة أكبر من'
GREATERTHANEQUAL: 'القيمة أكبر من أو تساوي' GREATERTHANEQUAL: 'القيمة أكبر من أو تساوي'
GROUP: مجموعة GROUP: 'مجموعة'
HIDE: إخفاء HIDE: إخفاء
HIDETHISFIELD: 'إخفاء هذا الحقل' HIDETHISFIELD: 'إخفاء هذا الحقل'
IS: إنه IS: إنه
@ -68,9 +68,9 @@ ar:
SHOWOPTIONS: 'إظهار الخيارات' SHOWOPTIONS: 'إظهار الخيارات'
SHOWTHISFIELD: 'أعرض هذه الحقل' SHOWTHISFIELD: 'أعرض هذه الحقل'
SINGULARNAME: 'حقل استمارة قابل للتحرير' SINGULARNAME: 'حقل استمارة قابل للتحرير'
VALIDATION: المصادقة VALIDATION: 'المصادقة'
VALUE: القيمة VALUE: 'القيمة'
WHEN: عندما WHEN: 'عندما'
EditableFormHeading: EditableFormHeading:
LEVEL: 'حدد مستوى العنوان' LEVEL: 'حدد مستوى العنوان'
PLURALNAME: عناوين PLURALNAME: عناوين
@ -122,16 +122,16 @@ ar:
SINGULARNAME: 'حقل الاستمارة الذي تمّ تقديمه' SINGULARNAME: 'حقل الاستمارة الذي تمّ تقديمه'
UserDefinedForm: UserDefinedForm:
ADDEMAILRECIPIENT: 'أضف متلقي البريد الإلكتروني' ADDEMAILRECIPIENT: 'أضف متلقي البريد الإلكتروني'
CONFIGURATION: مواصفات CONFIGURATION: 'مواصفات'
DESCRIPTION: 'يضيف استمارة مخصصة.' DESCRIPTION: 'يضيف استمارة مخصصة.'
EMAILADDRESS: 'البريد الإلكتروني' EMAILADDRESS: 'البريد الإلكتروني'
EMAILBODY: هيئة EMAILBODY: هيئة
EMAILFROM: من EMAILFROM: 'من'
EMAILRECIPIENTS: 'متلقي البريد الإلكتروني' EMAILRECIPIENTS: 'متلقي البريد الإلكتروني'
EMAILSUBJECT: 'موضوع البريد الإلكتروني' EMAILSUBJECT: 'موضوع البريد الإلكتروني'
ENABLELIVEVALIDATION: 'تفعيل المصادقة الآنية' ENABLELIVEVALIDATION: 'تفعيل المصادقة الآنية'
EmailFromContent: 'عنوان خانة المرسل يسمح لك بتعيين من الذي يأتي منه البريد الالكتروني. في معظم الخوادم هذا سوف يحتاج إلى أن يعين إلى عنوان بريد إلكتروني على نفس اسم مجال موقع الويب الخاص بك. على سبيل المثال على yoursite.com عنوان خانة المرسل قد يحتاج إلى أن يكون something@yoursite.com. يمكنك مع ذلك، تعيين أي عنوان بريد إلكتروني ترغب كعنوان للرد.' EmailFromContent: 'عنوان خانة المرسل يسمح لك بتعيين من الذي يأتي منه البريد الالكتروني. في معظم الخوادم هذا سوف يحتاج إلى أن يعين إلى عنوان بريد إلكتروني على نفس اسم مجال موقع الويب الخاص بك. على سبيل المثال على yoursite.com عنوان خانة المرسل قد يحتاج إلى أن يكون something@yoursite.com. يمكنك مع ذلك، تعيين أي عنوان بريد إلكتروني ترغب كعنوان للرد.'
FORM: نموذج FORM: 'نموذج'
FROMADDRESS: 'ارسل بريد إلكتروني من' FROMADDRESS: 'ارسل بريد إلكتروني من'
HIDEFORMDATA: 'إخفاء بيانات النموذج من البريد الإلكتروني؟' HIDEFORMDATA: 'إخفاء بيانات النموذج من البريد الإلكتروني؟'
ONCOMPLETELABEL: 'اعرض عند الاكتمال' ONCOMPLETELABEL: 'اعرض عند الاكتمال'
@ -143,8 +143,8 @@ ar:
SENDPLAIN: 'إرسال البريد الإلكتروني كنص عادي؟ (سيتم تجريد كود الHTML)' SENDPLAIN: 'إرسال البريد الإلكتروني كنص عادي؟ (سيتم تجريد كود الHTML)'
SHOWCLEARFORM: 'زر عرض النموذج ممسوحاً' SHOWCLEARFORM: 'زر عرض النموذج ممسوحاً'
SINGULARNAME: 'نموذج يحدده المستخدم' SINGULARNAME: 'نموذج يحدده المستخدم'
SUBMISSIONS: التقديمات SUBMISSIONS: 'التقديمات'
SUBMITBUTTON: تقديم SUBMITBUTTON: 'تقديم'
TEXTONSUBMIT: 'زر النص المتعلق بالتقديم:' TEXTONSUBMIT: 'زر النص المتعلق بالتقديم:'
UserDefinedForm_EmailRecipient: UserDefinedForm_EmailRecipient:
PLURALNAME: 'نموذج مستلمي البريد الإلكتروني يحدده المستخدم' PLURALNAME: 'نموذج مستلمي البريد الإلكتروني يحدده المستخدم'

View File

@ -78,7 +78,7 @@ ar_SA:
EMAILFROM: From EMAILFROM: From
EMAILRECIPIENTS: 'Email Recipients' EMAILRECIPIENTS: 'Email Recipients'
EMAILSUBJECT: 'Email Subject' EMAILSUBJECT: 'Email Subject'
FORM: النموذج FORM: 'النموذج'
FROMADDRESS: 'Send Email From' FROMADDRESS: 'Send Email From'
HIDEFORMDATA: 'Hide Form Data from Email' HIDEFORMDATA: 'Hide Form Data from Email'
ONCOMPLETELABEL: 'عرض الطلبات المكتملة' ONCOMPLETELABEL: 'عرض الطلبات المكتملة'

View File

@ -64,7 +64,6 @@ de_DE:
NOTBLANK: 'Nicht leer' NOTBLANK: 'Nicht leer'
NOTVALUE: 'Kein Wert' NOTVALUE: 'Kein Wert'
OPTIONS: Optionen OPTIONS: Optionen
PLACEHOLDER: Platzhalter
PLURALNAME: 'Editierbare Formularfelder' PLURALNAME: 'Editierbare Formularfelder'
REQUIRED: 'Pflichtfeld?' REQUIRED: 'Pflichtfeld?'
RIGHTTITLE: 'Titel rechts' RIGHTTITLE: 'Titel rechts'
@ -109,9 +108,8 @@ de_DE:
PLURALNAME: Radio-Buttons PLURALNAME: Radio-Buttons
SINGULARNAME: Radio-Button SINGULARNAME: Radio-Button
EditableTextField: EditableTextField:
AUTOCOMPLETE: 'Automatisch vervollständigen'
AUTOCOMPLETE_DESCRIPTION: 'Unterstützte Browser versuchen, dieses Feld automatisch mit den Benutzerinformationen zu füllen, verwenden, um den gefüllten Wert festzulegen'
NUMBERROWS: 'Anzahl der Zeilen' NUMBERROWS: 'Anzahl der Zeilen'
PLACEHOLDER: Platzhalter
PLURALNAME: Textfelder PLURALNAME: Textfelder
SINGULARNAME: Textfeld SINGULARNAME: Textfeld
TEXTLENGTH: Textlänge TEXTLENGTH: Textlänge

View File

@ -57,6 +57,7 @@ en:
DEFAULT: 'Default value' DEFAULT: 'Default value'
DEFAULTTOTODAY: 'Default to Today?' DEFAULTTOTODAY: 'Default to Today?'
DELETE: Delete DELETE: Delete
DISPLAYIF: 'Toggle visibility when'
DISPLAY_RULES_DISABLED: 'Display rules are not enabled for required fields. Please uncheck "Is this field Required?" under "Validation" to re-enable.' DISPLAY_RULES_DISABLED: 'Display rules are not enabled for required fields. Please uncheck "Is this field Required?" under "Validation" to re-enable.'
DRAG: 'Drag to rearrange order of fields' DRAG: 'Drag to rearrange order of fields'
ENTERQUESTION: 'Enter Question' ENTERQUESTION: 'Enter Question'
@ -73,6 +74,7 @@ en:
GROUP: Group GROUP: Group
HIDE: Hide HIDE: Hide
HIDETHISFIELD: 'Hide This Field' HIDETHISFIELD: 'Hide This Field'
INITIALVISIBILITY: 'Initial visibility'
IS: Is IS: Is
LESSTHAN: 'Value Less Than' LESSTHAN: 'Value Less Than'
LESSTHANEQUAL: 'Value Less Than Or Equal' LESSTHANEQUAL: 'Value Less Than Or Equal'
@ -91,6 +93,7 @@ en:
REQUIRED_DESCRIPTION: 'Please note that conditional fields can''t be required' REQUIRED_DESCRIPTION: 'Please note that conditional fields can''t be required'
RIGHTTITLE: 'Right title' RIGHTTITLE: 'Right title'
SHOW: Show SHOW: Show
SHOWINSUMMARY: 'Show in summary gridfield'
SHOWONLOAD: 'Initial visibility before processing these rules' SHOWONLOAD: 'Initial visibility before processing these rules'
SHOWONLOAD_TITLE: 'Show on load' SHOWONLOAD_TITLE: 'Show on load'
SHOWOPTIONS: 'Show Options' SHOWOPTIONS: 'Show Options'
@ -144,10 +147,11 @@ en:
PLURALNAME: 'Radio Groups' PLURALNAME: 'Radio Groups'
SINGULARNAME: 'Radio Group' SINGULARNAME: 'Radio Group'
EditableTextField: EditableTextField:
AUTOCOMPLETE: 'Autocomplete' AUTOCOMPLETE: Autocomplete
AUTOCOMPLETE_DESCRIPTION: 'Supported browsers will attempt to populate this field automatically with the users information, use to set the value populated' AUTOCOMPLETE_DESCRIPTION: 'Supported browsers will attempt to populate this field automatically with the users information, use to set the value populated'
NUMBERROWS: 'Number of rows' NUMBERROWS: 'Number of rows'
NUMBERROWS_DESCRIPTION: 'Fields with more than one row will be generated as a textarea' NUMBERROWS_DESCRIPTION: 'Fields with more than one row will be generated as a textarea'
PLACEHOLDER: Placeholder
PLURALNAME: 'Text Fields' PLURALNAME: 'Text Fields'
RANGE_TO: to RANGE_TO: to
SINGULARNAME: 'Text Field' SINGULARNAME: 'Text Field'

View File

@ -83,7 +83,6 @@ eo:
NOTBLANK: 'Ne vaka' NOTBLANK: 'Ne vaka'
NOTVALUE: 'Ne valoro' NOTVALUE: 'Ne valoro'
OPTIONS: Agordoj OPTIONS: Agordoj
PLACEHOLDER: Lokokupilo
PLURALNAME: 'Redakteblaj formularaj kampoj' PLURALNAME: 'Redakteblaj formularaj kampoj'
REQUIRED: 'Ĉu ĉi tiu kampo estas nepra?' REQUIRED: 'Ĉu ĉi tiu kampo estas nepra?'
REQUIRED_DESCRIPTION: 'Bonvolu noti ke kondiĉaj kampoj ne povas esti nepraj' REQUIRED_DESCRIPTION: 'Bonvolu noti ke kondiĉaj kampoj ne povas esti nepraj'
@ -143,6 +142,7 @@ eo:
EditableTextField: EditableTextField:
NUMBERROWS: 'Nombro da vicoj' NUMBERROWS: 'Nombro da vicoj'
NUMBERROWS_DESCRIPTION: 'Kampoj kun pli ol unu vico generiĝos kiel tekstareo' NUMBERROWS_DESCRIPTION: 'Kampoj kun pli ol unu vico generiĝos kiel tekstareo'
PLACEHOLDER: Lokokupilo
PLURALNAME: 'Tekstaj kampoj' PLURALNAME: 'Tekstaj kampoj'
RANGE_TO: al RANGE_TO: al
SINGULARNAME: 'Teksta kampo' SINGULARNAME: 'Teksta kampo'

View File

@ -106,8 +106,6 @@ es_ES:
PLURALNAME: 'Opciones editables' PLURALNAME: 'Opciones editables'
SINGULARNAME: 'Opciones editables' SINGULARNAME: 'Opciones editables'
EditableTextField: EditableTextField:
AUTOCOMPLETE: 'Autocompletar'
AUTOCOMPLETE_DESCRIPTION: 'Los navegadores compatibles intentarán rellenar este campo automáticamente con la información de los usuarios, usarla para establecer el valor poblado'
NUMBERROWS: 'Cantidad de filas' NUMBERROWS: 'Cantidad de filas'
PLURALNAME: 'Campos de texto' PLURALNAME: 'Campos de texto'
SINGULARNAME: 'Campo de texto' SINGULARNAME: 'Campo de texto'

View File

@ -46,12 +46,12 @@ fa_IR:
UserDefinedForm: UserDefinedForm:
CLEARBUTTON: پاک‌کردن CLEARBUTTON: پاک‌کردن
DISABLECSRFSECURITYTOKEN: 'غیر فعال کردن CSRF' DISABLECSRFSECURITYTOKEN: 'غیر فعال کردن CSRF'
EMAILADDRESS: ایمیل EMAILADDRESS: 'ایمیل'
EMAILFROM: از EMAILFROM: از
EMAILSUBJECT: 'موضوع پست الکترونیک' EMAILSUBJECT: 'موضوع پست الکترونیک'
EMAILTEMPLATE: 'قالب پست الکترونیک' EMAILTEMPLATE: 'قالب پست الکترونیک'
FIELDS: فیلدها FIELDS: فیلدها
FORM: فرم FORM: 'فرم'
PLURALNAME: 'صفحه اصلی' PLURALNAME: 'صفحه اصلی'
RECIPIENTS: 'دریافت کنندگان' RECIPIENTS: 'دریافت کنندگان'
SENDEMAILTO: 'ارسال ایمیل به' SENDEMAILTO: 'ارسال ایمیل به'

View File

@ -83,7 +83,6 @@ fi_FI:
NOTBLANK: 'Ei ole tyhjä' NOTBLANK: 'Ei ole tyhjä'
NOTVALUE: 'Ei ole sama kuin' NOTVALUE: 'Ei ole sama kuin'
OPTIONS: Valinnat OPTIONS: Valinnat
PLACEHOLDER: Opastusteksti
PLURALNAME: 'Muokattavat lomakekentät' PLURALNAME: 'Muokattavat lomakekentät'
REQUIRED: 'Onko tämä kenttä pakollinen?' REQUIRED: 'Onko tämä kenttä pakollinen?'
REQUIRED_DESCRIPTION: 'Huomioithan, että ehdolliset kentät eivät voi olla pakollisia' REQUIRED_DESCRIPTION: 'Huomioithan, että ehdolliset kentät eivät voi olla pakollisia'
@ -143,6 +142,7 @@ fi_FI:
EditableTextField: EditableTextField:
NUMBERROWS: 'Rivien määrä' NUMBERROWS: 'Rivien määrä'
NUMBERROWS_DESCRIPTION: 'Kenttät, joissa on enemmän kuin yksi rivi, luodaan tekstialueena.' NUMBERROWS_DESCRIPTION: 'Kenttät, joissa on enemmän kuin yksi rivi, luodaan tekstialueena.'
PLACEHOLDER: Opastusteksti
PLURALNAME: Tekstikentät PLURALNAME: Tekstikentät
RANGE_TO: RANGE_TO:
SINGULARNAME: Tekstikenttä SINGULARNAME: Tekstikenttä

View File

@ -60,9 +60,6 @@ fr_FR:
DELETE: 'Remove this option' DELETE: 'Remove this option'
DRAG: 'Drag to rearrange order of options' DRAG: 'Drag to rearrange order of options'
LOCKED: 'These fields cannot be modified' LOCKED: 'These fields cannot be modified'
EditableTextField:
AUTOCOMPLETE: 'Autocomplétion'
AUTOCOMPLETE_DESCRIPTION: 'Les navigateurs pris en charge essaieront de remplir automatiquement ce champ avec les informations des utilisateurs, utilisez pour définir la valeur remplie'
Form: Form:
FIELDISREQUIRED: '%s is required' FIELDISREQUIRED: '%s is required'
SubmittedFileField: SubmittedFileField:

View File

@ -83,7 +83,6 @@ it:
NOTBLANK: 'Non vuoto' NOTBLANK: 'Non vuoto'
NOTVALUE: 'Non valore' NOTVALUE: 'Non valore'
OPTIONS: Opzioni OPTIONS: Opzioni
PLACEHOLDER: Segnaposto
PLURALNAME: 'Campi modulo modificabili' PLURALNAME: 'Campi modulo modificabili'
REQUIRED: 'Questo campo è obbligatorio?' REQUIRED: 'Questo campo è obbligatorio?'
REQUIRED_DESCRIPTION: 'Prego nota che i campi condizionali non possono essere obbligatori' REQUIRED_DESCRIPTION: 'Prego nota che i campi condizionali non possono essere obbligatori'
@ -141,10 +140,9 @@ it:
PLURALNAME: 'Gruppi di pulsanti a scelta singola' PLURALNAME: 'Gruppi di pulsanti a scelta singola'
SINGULARNAME: 'Gruppo di pulsanti a scelta singola' SINGULARNAME: 'Gruppo di pulsanti a scelta singola'
EditableTextField: EditableTextField:
AUTOCOMPLETE: 'completamento automatico'
AUTOCOMPLETE_DESCRIPTION: 'I browser supportati cercheranno di popolare automaticamente questo campo con l'informazione agli utenti, usare per impostare il valore popolata'
NUMBERROWS: 'Numero di righe' NUMBERROWS: 'Numero di righe'
NUMBERROWS_DESCRIPTION: 'Campi con più di una riga verranno generati come area testo' NUMBERROWS_DESCRIPTION: 'Campi con più di una riga verranno generati come area testo'
PLACEHOLDER: Segnaposto
PLURALNAME: 'Campi testo' PLURALNAME: 'Campi testo'
RANGE_TO: a RANGE_TO: a
SINGULARNAME: 'Campo testo' SINGULARNAME: 'Campo testo'

View File

@ -12,23 +12,23 @@ ja:
UserDefinedForm: UserDefinedForm:
EMAILADDRESS: メール EMAILADDRESS: メール
EMAILBODY: ボディ EMAILBODY: ボディ
EMAILFROM: 送信者 EMAILFROM: '送信者'
EMAILSUBJECT: メールの件名 EMAILSUBJECT: メールの件名
EmailFromContent: '送信元アドレスでどこからメールを送信するのか設定することができます。多くのサーバーではこれはあなたのサイトのドメイン名と同じメールアドレスに設定する必要があります。たとえば yoursite.com では送信元アドレスは something@yoursite.com としなければいけません。ただし、返信先アドレスは好きなメールアドレスを設定することができます。' EmailFromContent: '送信元アドレスでどこからメールを送信するのか設定することができます。多くのサーバーではこれはあなたのサイトのドメイン名と同じメールアドレスに設定する必要があります。たとえば yoursite.com では送信元アドレスは something@yoursite.com としなければいけません。ただし、返信先アドレスは好きなメールアドレスを設定することができます。'
FORM: フォーム FORM: 'フォーム'
FROMADDRESS: メールの送信元 FROMADDRESS: 'メールの送信元'
HIDEFORMDATA: 'メールからフォームデータを見えないようにしますか?' HIDEFORMDATA: 'メールからフォームデータを見えないようにしますか?'
ONCOMPLETELABEL: 完成時に表示 ONCOMPLETELABEL: 完成時に表示
ORSELECTAFIELDTOUSEASFROM: ..またはフィールドを選択して返信先アドレスとして使用 ORSELECTAFIELDTOUSEASFROM: '..またはフィールドを選択して返信先アドレスとして使用'
ORSELECTAFIELDTOUSEASTO: ..またはフィールドを選択して宛先アドレスとして使用 ORSELECTAFIELDTOUSEASTO: '..またはフィールドを選択して宛先アドレスとして使用'
REPLYADDRESS: 以下への返信メール REPLYADDRESS: 以下への返信メール
SAVESUBMISSIONS: 提出物をサーバーに保存するのを無効化 SAVESUBMISSIONS: 提出物をサーバーに保存するのを無効化
SENDEMAILTO: メールを送信 SENDEMAILTO: メールを送信
SENDPLAIN: 'プレーンテキストとしてメールを送信しますか? (HTMLは取り除かれます)' SENDPLAIN: 'プレーンテキストとしてメールを送信しますか? (HTMLは取り除かれます)'
SHOWCLEARFORM: フォームをクリアーボタンを表示する SHOWCLEARFORM: 'フォームをクリアーボタンを表示する'
SINGULARNAME: ユーザー定義フォーム SINGULARNAME: 'ユーザー定義フォーム'
SUBMITBUTTON: 送信 SUBMITBUTTON: 送信
TEXTONSUBMIT: '送信ボタンのテキスト:' TEXTONSUBMIT: '送信ボタンのテキスト:'
UserDefinedForm_EmailRecipient: UserDefinedForm_EmailRecipient:
PLURALNAME: ユーザー定義フォームのメール受信者 PLURALNAME: 'ユーザー定義フォームのメール受信者'
SINGULARNAME: ユーザー定義フォームのメール受信者 SINGULARNAME: 'ユーザー定義フォームのメール受信者'

View File

@ -103,8 +103,6 @@ pl_PL:
PLURALNAME: 'Pola wyboru' PLURALNAME: 'Pola wyboru'
SINGULARNAME: 'Pole wyboru' SINGULARNAME: 'Pole wyboru'
EditableTextField: EditableTextField:
AUTOCOMPLETE: 'autouzupełnienie'
AUTOCOMPLETE_DESCRIPTION: 'Obsługiwane przeglądarki podejmie próbę wypełnienia tego pola automatycznie z informacji użytkowników, należy ustawić wartość zaludnionych'
NUMBERROWS: 'Liczba wierszy' NUMBERROWS: 'Liczba wierszy'
PLURALNAME: 'Pola tekstowe' PLURALNAME: 'Pola tekstowe'
SINGULARNAME: 'Pole tekstowe' SINGULARNAME: 'Pole tekstowe'

View File

@ -60,9 +60,6 @@ ru_RU:
DELETE: 'Remove this option' DELETE: 'Remove this option'
DRAG: 'Drag to rearrange order of options' DRAG: 'Drag to rearrange order of options'
LOCKED: 'These fields cannot be modified' LOCKED: 'These fields cannot be modified'
EditableTextField:
AUTOCOMPLETE: 'автозаполнения'
AUTOCOMPLETE_DESCRIPTION: 'Поддерживаемые браузеры будут пытаться автоматически заполнять это поле с информацией пользователей, используйте для установки значения населенную'
Form: Form:
FIELDISREQUIRED: '%s is required' FIELDISREQUIRED: '%s is required'
SubmittedFileField: SubmittedFileField:

View File

@ -83,7 +83,6 @@ sk:
NOTBLANK: Vyplnené NOTBLANK: Vyplnené
NOTVALUE: 'Nie zadanú hodnotu' NOTVALUE: 'Nie zadanú hodnotu'
OPTIONS: Voľba/možnosť OPTIONS: Voľba/možnosť
PLACEHOLDER: 'Zástupná/Ukážková hodnota (placeholder)'
PLURALNAME: 'Formulárové polia' PLURALNAME: 'Formulárové polia'
REQUIRED: 'Je pole povinné/vyžadované?' REQUIRED: 'Je pole povinné/vyžadované?'
REQUIRED_DESCRIPTION: 'Všimnite si prosím, že podmienené polia nemôžu byť vyžadované.' REQUIRED_DESCRIPTION: 'Všimnite si prosím, že podmienené polia nemôžu byť vyžadované.'
@ -143,6 +142,7 @@ sk:
EditableTextField: EditableTextField:
NUMBERROWS: 'Počet riadkov' NUMBERROWS: 'Počet riadkov'
NUMBERROWS_DESCRIPTION: 'Políčka s viac ako jedným riadkom sú generované ako textarea.' NUMBERROWS_DESCRIPTION: 'Políčka s viac ako jedným riadkom sú generované ako textarea.'
PLACEHOLDER: 'Zástupná/Ukážková hodnota (placeholder)'
PLURALNAME: 'Textové polia' PLURALNAME: 'Textové polia'
RANGE_TO: do RANGE_TO: do
SINGULARNAME: 'Textové pole' SINGULARNAME: 'Textové pole'

View File

@ -1,7 +1,7 @@
zh: zh:
CustomRule: CustomRule:
BLANK: 空白 BLANK: 空白
DELETE: 删除 DELETE: '删除'
GREATERTHAN: 值大于 GREATERTHAN: 值大于
GREATERTHANEQUAL: 值大于或等于 GREATERTHANEQUAL: 值大于或等于
HIDETHISFIELD: 隐藏这个字段 HIDETHISFIELD: 隐藏这个字段
@ -32,22 +32,22 @@ zh:
PLURALNAME: 电子邮件字段 PLURALNAME: 电子邮件字段
SINGULARNAME: 电子邮件字段 SINGULARNAME: 电子邮件字段
EditableFileField: EditableFileField:
PLURALNAME: 文件上传字段 PLURALNAME: '文件上传字段'
SINGULARNAME: 文件上传字段 SINGULARNAME: '文件上传字段'
EditableFormField: EditableFormField:
ADD: 添加 ADD: '添加'
ADDRULE: 添加规则 ADDRULE: '添加规则'
BLANK: 空白 BLANK: 空白
CHECKEDBYDEFAULT: 默认选中? CHECKEDBYDEFAULT: 默认选中?
CUSTOMERROR: 自定义错误消息 CUSTOMERROR: 自定义错误消息
CUSTOMRULES: 自定义规则 CUSTOMRULES: 自定义规则
DEFAULTTOTODAY: 默认为今天? DEFAULTTOTODAY: 默认为今天?
DELETE: 删除 DELETE: '删除'
DRAG: 拖放来对字段进行重新排序 DRAG: 拖放来对字段进行重新排序
ENTERQUESTION: 键入问题 ENTERQUESTION: '键入问题'
EXTRACLASSA: 额外的造型/布局 EXTRACLASSA: '额外的造型/布局'
EXTRACLASSB: '额外的 css 类别 - 用空格来分开多项' EXTRACLASSB: '额外的 css 类别 - 用空格来分开多项'
FIELDCONFIGURATION: 字段配置 FIELDCONFIGURATION: '字段配置'
FIELDONDEFAULT: 默认字段 FIELDONDEFAULT: 默认字段
GREATERTHAN: 值大于 GREATERTHAN: 值大于
GREATERTHANEQUAL: 值大于或等于 GREATERTHANEQUAL: 值大于或等于
@ -61,20 +61,20 @@ zh:
NOTBLANK: 不是空白 NOTBLANK: 不是空白
NOTVALUE: 没有值 NOTVALUE: 没有值
OPTIONS: 选项 OPTIONS: 选项
PLURALNAME: 可编辑的表格字段 PLURALNAME: '可编辑的表格字段'
REQUIRED: 这个字段是必须的吗? REQUIRED: '这个字段是必须的吗?'
RIGHTTITLE: 右标题 RIGHTTITLE: '右标题'
SHOW: 显示 SHOW: 显示
SHOWOPTIONS: 显示选项 SHOWOPTIONS: 显示选项
SHOWTHISFIELD: 显示该字段 SHOWTHISFIELD: 显示该字段
SINGULARNAME: 可编辑的表格字段 SINGULARNAME: '可编辑的表格字段'
VALIDATION: 验证 VALIDATION: 验证
VALUE: VALUE:
WHEN: WHEN:
EditableFormHeading: EditableFormHeading:
LEVEL: 选择标题级别 LEVEL: '选择标题级别'
PLURALNAME: 标题 PLURALNAME: '标题'
SINGULARNAME: 标题 SINGULARNAME: '标题'
EditableLiteralField: EditableLiteralField:
HIDEFROMREPORT: 从报告中隐藏? HIDEFROMREPORT: 从报告中隐藏?
PLURALNAME: 'HTML 模块' PLURALNAME: 'HTML 模块'
@ -86,7 +86,7 @@ zh:
PLURALNAME: 可编辑的多个选项字段 PLURALNAME: 可编辑的多个选项字段
SINGULARNAME: 可编辑的多个选项字段 SINGULARNAME: 可编辑的多个选项字段
EditableOption: EditableOption:
DELETE: 删除这个选项 DELETE: '删除这个选项'
DRAG: 拖放来对选项进行重新排序 DRAG: 拖放来对选项进行重新排序
LOCKED: 这些字段不能被修改 LOCKED: 这些字段不能被修改
PLURALNAME: 可编辑的选项 PLURALNAME: 可编辑的选项
@ -100,7 +100,7 @@ zh:
SINGULARNAME: 文本字段 SINGULARNAME: 文本字段
TEXTLENGTH: 文本长度 TEXTLENGTH: 文本长度
FieldEditor: FieldEditor:
ADD: 添加 ADD: '添加'
SELECTAFIELD: 选择一个字段 SELECTAFIELD: 选择一个字段
Form: Form:
FIELDISREQUIRED: '%s 是必须的' FIELDISREQUIRED: '%s 是必须的'
@ -115,40 +115,41 @@ zh:
PLURALNAME: 已提交的文件字段 PLURALNAME: 已提交的文件字段
SINGULARNAME: 已提交的文件字段 SINGULARNAME: 已提交的文件字段
SubmittedForm: SubmittedForm:
PLURALNAME: 已提交的表格 PLURALNAME: '已提交的表格'
SINGULARNAME: 已提交的表格 SINGULARNAME: '已提交的表格'
SubmittedFormField: SubmittedFormField:
PLURALNAME: 已提交的表格字段 PLURALNAME: '已提交的表格字段'
SINGULARNAME: 已提交的表格字段 SINGULARNAME: '已提交的表格字段'
UserDefinedForm: UserDefinedForm:
ADDEMAILRECIPIENT: 添加电子邮件收件人 ADDEMAILRECIPIENT: '添加电子邮件收件人'
CONFIGURATION: 配置 CONFIGURATION: '配置'
DESCRIPTION: 添加一个可定制的表格。 DESCRIPTION: '添加一个可定制的表格。'
EMAILADDRESS: 电子邮件 EMAILADDRESS: 电子邮件
EMAILBODY: 正文 EMAILBODY: 正文
EMAILFROM: 表格 EMAILFROM: '表格'
EMAILRECIPIENTS: 电子邮件收件人 EMAILRECIPIENTS: 电子邮件收件人
EMAILSUBJECT: 电子邮件主题 EMAILSUBJECT: 电子邮件主题
ENABLELIVEVALIDATION: 启用现场验证 ENABLELIVEVALIDATION: 启用现场验证
EmailFromContent: '表格地址允许您设置电子邮件的发送人。在大多数服务器上这必须要设置成域名与您的站点域名一致的电子邮件地址。例如在 yoursite.com 上,发送人的电子邮件地址必须为 something@yoursite.com。但是您可以随意设置回复的电子邮件地址。' EmailFromContent: '表格地址允许您设置电子邮件的发送人。在大多数服务器上这必须要设置成域名与您的站点域名一致的电子邮件地址。例如在 yoursite.com 上,发送人的电子邮件地址必须为 something@yoursite.com。但是您可以随意设置回复的电子邮件地址。'
FORM: 表格 FORM: '表格'
FROMADDRESS: 发送人电子邮件 FROMADDRESS: 发送人电子邮件
HIDEFORMDATA: 从电子邮件中隐藏表格数据? HIDEFIELDLABELS: '隐藏字段标签'
HIDEFORMDATA: '从电子邮件中隐藏表格数据?'
ONCOMPLETELABEL: 完成时显示 ONCOMPLETELABEL: 完成时显示
ORSELECTAFIELDTOUSEASFROM: '.. 或选择某字段作为回复地址' ORSELECTAFIELDTOUSEASFROM: '.. 或选择某字段作为回复地址'
ORSELECTAFIELDTOUSEASTO: '.. 或选择某字段作为地址使用' ORSELECTAFIELDTOUSEASTO: '.. 或选择某字段作为地址使用'
REPLYADDRESS: 用于回复的电子邮件 REPLYADDRESS: 用于回复的电子邮件
SAVESUBMISSIONS: 禁用保存提交内容到服务器 SAVESUBMISSIONS: '禁用保存提交内容到服务器'
SENDEMAILTO: 发送电子邮件到 SENDEMAILTO: 发送电子邮件到
SENDPLAIN: '以纯文本形式发送电子邮件HTML 将会被去除)' SENDPLAIN: '以纯文本形式发送电子邮件HTML 将会被去除)'
SHOWCLEARFORM: 显示清除表格按钮 SHOWCLEARFORM: '显示清除表格按钮'
SINGULARNAME: 用户定义表格 SINGULARNAME: '用户定义表格'
SUBMISSIONS: 提交 SUBMISSIONS: 提交
SUBMITBUTTON: 提交 SUBMITBUTTON: 提交
TEXTONSUBMIT: 提交按钮上的文本 TEXTONSUBMIT: 提交按钮上的文本
UserDefinedForm_EmailRecipient: UserDefinedForm_EmailRecipient:
PLURALNAME: 用户定义的表格电子邮件接受者 PLURALNAME: '用户定义的表格电子邮件接受者'
SINGULARNAME: 用户定义的表格电子邮件接受者 SINGULARNAME: '用户定义的表格电子邮件接受者'
UserFormsGridFieldFilterHeader: UserFormsGridFieldFilterHeader:
FILTERSUBMISSIONS: 筛选器提交…… FILTERSUBMISSIONS: 筛选器提交……
WHEREVALUEIS: 当值为…… WHEREVALUEIS: 当值为……

View File

@ -0,0 +1,10 @@
<div id="$Name" class="field<% if $extraClass %> $extraClass<% end_if %>">
<% if $Title %><label class="left">$Title</label><% end_if %>
<div class="middleColumn">
<% loop $FieldList %>
$Field
<% end_loop %>
</div>
<% if $RightTitle %><span id="{$Name}_right_title" class="right-title">$RightTitle</span><% end_if %>
<% if $Message %><span class="message $MessageType">$Message</span><% end_if %>
</div>

View File

@ -28,4 +28,15 @@ class EditableCustomRuleTest extends SapphireTest
//Check for greater than sign //Check for greater than sign
$this->assertContains('>', $result2['operation']); $this->assertContains('>', $result2['operation']);
} }
/**
* Test that methods are returned for manipulating the presence of the "hide" CSS class depending
* on whether the field should be hidden or shown
*/
public function testToggleDisplayText()
{
$rule1 = $this->objFromFixture('EditableCustomRule', 'rule1');
$this->assertSame('addClass("hide")', $rule1->toggleDisplayText('show'));
$this->assertSame('removeClass("hide")', $rule1->toggleDisplayText('hide'));
}
} }

View File

@ -61,7 +61,7 @@ class EditableFileFieldTest extends SapphireTest
$fileField->write(); $fileField->write();
$formField = $fileField->getFormField(); $formField = $fileField->getFormField();
$this->assertEquals($formField->getValidator()->getAllowedMaxFileSize(), 256); $this->assertEquals($formField->getValidator()->getAllowedMaxFileSize(), 262144);
} }
} }

View File

@ -207,10 +207,14 @@ class EditableFormFieldTest extends FunctionalTest
public function testFormatDisplayRules() public function testFormatDisplayRules()
{ {
/** @var EditableCheckbox $checkbox */ $field = $this->objFromFixture('EditableFormField', 'irdNumberField');
$checkbox = $this->objFromFixture('EditableFormField', 'irdNumberField'); $displayRules = $field->formatDisplayRules();
$displayRules = $checkbox->formatDisplayRules();
$this->assertNotNull($displayRules); $this->assertNotNull($displayRules);
$this->assertCount(1, $displayRules['operations']); $this->assertCount(1, $displayRules['operations']);
// Field is initially visible, so the "view" method should be to hide it
$this->assertSame('addClass("hide")', $displayRules['view']);
// The opposite method should be to return it to its original state, i.e. show it again
$this->assertSame('removeClass("hide")', $displayRules['opposite']);
} }
} }

View File

@ -38,9 +38,39 @@ class EditableLiteralFieldTest extends SapphireTest
'Title' => 'Test label' 'Title' => 'Test label'
)); ));
$this->assertContains('Test label', $field->getFormField()->Field()); $this->assertContains('Test label', $field->getFormField()->FieldHolder());
$this->assertEquals('Test label', $field->getFormField()->Title());
$field->HideLabel = true; $field->HideLabel = true;
$this->assertNotContains('Test label', $field->getFormField()->Field()); $this->assertNotContains('Test label', $field->getFormField()->FieldHolder());
$this->assertEmpty($field->getFormField()->Title());
}
public function testLiteralFieldHasUpdateFormFieldMethodCalled()
{
$field = $this->getMockBuilder('EditableLiteralField')
->setMethods(array('doUpdateFormField'))
->getMock();
$field->expects($this->once())->method('doUpdateFormField');
$field->getFormField();
}
/**
* LiteralFields do not allow field names, etc. Instead, the field is contained within a composite field. This
* test ensures that this structure is correct.
*/
public function testLiteralFieldIsContainedWithinCompositeField()
{
$field = new EditableLiteralField;
$formField = $field->getFormField();
$this->assertInstanceOf('CompositeField', $formField, 'Literal field is contained within a composite field');
$this->assertInstanceOf(
'LiteralField',
$formField->FieldList()->first(),
'Actual literal field exists in composite field children'
);
} }
} }