MOBILE-2253 core: Fix boolean inputs in comps and dirs

main
Dani Palou 2017-11-30 16:27:10 +01:00
parent b65b3278fc
commit 6db76d9792
7 changed files with 35 additions and 27 deletions

View File

@ -1,2 +1,2 @@
<ng-content></ng-content>
<ion-icon *ngIf="coreMarkRequired && coreMarkRequired !== 'false'" class="core-input-required-asterisk" name="medical" md="ios-medical" [title]="requiredLabel"></ion-icon> <!-- Use iOS icon because it's more narrow, so it looks better since it's small. -->
<ion-icon *ngIf="coreMarkRequired" class="core-input-required-asterisk" name="medical" md="ios-medical" [title]="requiredLabel"></ion-icon> <!-- Use iOS icon because it's more narrow, so it looks better since it's small. -->

View File

@ -12,9 +12,10 @@
// See the License for the specific language governing permissions and
// limitations under the License.
import { Component, Input, AfterViewInit, ElementRef } from '@angular/core';
import { Component, Input, OnInit, AfterViewInit, ElementRef } from '@angular/core';
import { TranslateService } from '@ngx-translate/core';
import { CoreTextUtilsProvider } from '../../providers/utils/text';
import { CoreUtilsProvider } from '../../providers/utils/utils';
/**
* Directive to add a red asterisk for required input fields.
@ -30,16 +31,24 @@ import { CoreTextUtilsProvider } from '../../providers/utils/text';
selector: '[core-mark-required]',
templateUrl: 'mark-required.html'
})
export class CoreMarkRequiredComponent implements AfterViewInit {
export class CoreMarkRequiredComponent implements OnInit, AfterViewInit {
@Input('core-mark-required') coreMarkRequired: boolean|string = true;
protected element: HTMLElement;
requiredLabel: string;
constructor(element: ElementRef, private translate: TranslateService, private textUtils: CoreTextUtilsProvider) {
constructor(element: ElementRef, private translate: TranslateService, private textUtils: CoreTextUtilsProvider,
private utils: CoreUtilsProvider) {
this.element = element.nativeElement;
this.requiredLabel = this.translate.instant('mm.core.required');
}
/**
* Component being initialized.
*/
ngOnInit() {
this.coreMarkRequired = this.utils.isTrueOrOne(this.coreMarkRequired);
}
/**
* Called after the view is initialized.
*/

View File

@ -13,6 +13,7 @@
// limitations under the License.
import { Component, OnInit, AfterViewInit, Input, ElementRef } from '@angular/core';
import { CoreUtilsProvider } from '../../providers/utils/utils';
/**
* Component to allow showing and hiding a password. The affected input MUST have a name to identify it.
@ -44,7 +45,7 @@ export class CoreShowPasswordComponent implements OnInit, AfterViewInit {
protected input: HTMLInputElement; // Input affected.
protected element: HTMLElement; // Current element.
constructor(element: ElementRef) {
constructor(element: ElementRef, private utils: CoreUtilsProvider) {
this.element = element.nativeElement;
}
@ -52,7 +53,7 @@ export class CoreShowPasswordComponent implements OnInit, AfterViewInit {
* Component being initialized.
*/
ngOnInit() {
this.shown = this.initialShown && this.initialShown !== 'false';
this.shown = this.utils.isTrueOrOne(this.initialShown);
this.selector = 'input[name="' + this.name + '"]';
this.setData();
}

View File

@ -14,6 +14,7 @@
import { Directive, Input, AfterViewInit, ElementRef } from '@angular/core';
import { CoreDomUtilsProvider } from '../providers/utils/dom';
import { CoreUtilsProvider } from '../providers/utils/utils';
/**
* Directive to auto focus an element when a view is loaded.
@ -28,7 +29,7 @@ export class CoreAutoFocusDirective implements AfterViewInit {
protected element: HTMLElement;
constructor(element: ElementRef, private domUtils: CoreDomUtilsProvider) {
constructor(element: ElementRef, private domUtils: CoreDomUtilsProvider, private utils: CoreUtilsProvider) {
this.element = element.nativeElement || element;
}
@ -36,13 +37,7 @@ export class CoreAutoFocusDirective implements AfterViewInit {
* Function after the view is initialized.
*/
ngAfterViewInit() {
let autoFocus;
if (typeof this.coreAutoFocus == 'string') {
autoFocus = this.coreAutoFocus && this.coreAutoFocus !== 'false';
} else {
autoFocus = !!this.coreAutoFocus;
}
const autoFocus = this.utils.isTrueOrOne(this.coreAutoFocus);
if (autoFocus) {
// If it's a ion-input or ion-textarea, search the right input to use.
let element = this.element;

View File

@ -43,15 +43,15 @@ export class CoreFormatTextDirective implements OnInit {
@Input() siteId?: string; // Site ID to use.
@Input() component?: string; // Component for CoreExternalContentDirective.
@Input() componentId?: string|number; // Component ID to use in conjunction with the component.
@Input() adaptImg?: boolean = true; // Whether to adapt images to screen width.
@Input() clean?: boolean; // Whether all the HTML tags should be removed.
@Input() singleLine?: boolean; // Whether new lines should be removed (all text in single line). Only valid if clean=true.
@Input() adaptImg?: boolean|string = true; // Whether to adapt images to screen width.
@Input() clean?: boolean|string; // Whether all the HTML tags should be removed.
@Input() singleLine?: boolean|string; // Whether new lines should be removed (all text in single line). Only valid if clean=true.
@Input() maxHeight?: number; // Max height in pixels to render the content box. It should be 50 at least to make sense.
// Using this parameter will force display: block to calculate height better. If you want to
// avoid this use class="inline" at the same time to use display: inline-block.
@Input() fullOnClick?: boolean; // Whether it should open a new page with the full contents on click. Only if "max-height"
// is set and the content has been collapsed.
@Input() brOnFull?: boolean; // Whether new lines should be replaced by <br> on full view.
@Input() fullOnClick?: boolean|string; // Whether it should open a new page with the full contents on click. Only if
// "max-height" is set and the content has been collapsed.
@Input() brOnFull?: boolean|string; // Whether new lines should be replaced by <br> on full view.
@Input() fullTitle?: string; // Title to use in full view. Defaults to "Description".
@Output() afterRender?: EventEmitter<any>; // Called when the data is rendered.
@ -225,7 +225,7 @@ export class CoreFormatTextDirective implements OnInit {
site = siteInstance;
// Apply format text function.
return this.textUtils.formatText(this.text, this.clean, this.singleLine);
return this.textUtils.formatText(this.text, this.utils.isTrueOrOne(this.clean), this.utils.isTrueOrOne(this.singleLine));
}).then((formatted) => {
let div = document.createElement('div'),
@ -264,7 +264,7 @@ export class CoreFormatTextDirective implements OnInit {
images.forEach((img: HTMLElement) => {
this.addMediaAdaptClass(img);
this.addExternalContent(img);
if (this.adaptImg) {
if (this.utils.isTrueOrOne(this.adaptImg)) {
// Create a container for the image and use it instead of the image.
let container = this.createMagnifyingGlassContainer(elWidth, img);
div.replaceChild(container, img);

View File

@ -14,6 +14,7 @@
import { Directive, AfterViewInit, Input, ElementRef, OnDestroy } from '@angular/core';
import { CoreDomUtilsProvider } from '../providers/utils/dom';
import { CoreUtilsProvider } from '../providers/utils/utils';
/**
* Directive to keep the keyboard open when clicking a certain element (usually a button).
@ -55,7 +56,7 @@ export class CoreKeepKeyboardDirective implements AfterViewInit, OnDestroy {
protected focusAgainListener : any; // Another listener for focusout, with the purpose to focus again.
protected stopFocusAgainTimeout: any; // Timeout to stop focus again listener.
constructor(element: ElementRef, private domUtils: CoreDomUtilsProvider) {
constructor(element: ElementRef, private domUtils: CoreDomUtilsProvider, private utils: CoreUtilsProvider) {
this.element = element.nativeElement;
}
@ -66,7 +67,7 @@ export class CoreKeepKeyboardDirective implements AfterViewInit, OnDestroy {
// Use a setTimeout because, if this directive is applied to a button, then the ion-input that it affects
// maybe it hasn't been treated yet.
setTimeout(() => {
let inButton = this.inButton && this.inButton !== 'false',
let inButton = this.utils.isTrueOrOne(this.inButton),
candidateEls,
selectedEl;

View File

@ -26,8 +26,8 @@ import { CoreConfigConstants } from '../configconstants';
selector: '[core-link]'
})
export class CoreLinkDirective implements OnInit {
@Input() capture?: boolean; // If the link needs to be captured by the app.
@Input() inApp?: boolean; // True to open in embedded browser, false to open in system browser.
@Input() capture?: boolean|string; // If the link needs to be captured by the app.
@Input() inApp?: boolean|string; // True to open in embedded browser, false to open in system browser.
@Input() autoLogin? = 'check'; // If the link should be open with auto-login. Accepts the following values:
// "yes" -> Always auto-login.
// "no" -> Never auto-login.
@ -45,6 +45,8 @@ export class CoreLinkDirective implements OnInit {
* Function executed when the component is initialized.
*/
ngOnInit() {
this.inApp = this.utils.isTrueOrOne(this.inApp);
this.element.addEventListener('click', (event) => {
// If the event prevented default action, do nothing.
if (!event.defaultPrevented) {
@ -53,7 +55,7 @@ export class CoreLinkDirective implements OnInit {
event.preventDefault();
event.stopPropagation();
if (this.capture) {
if (this.utils.isTrueOrOne(this.capture)) {
// @todo: Handle link using content links helper.
// $mmContentLinksHelper.handleLink(href).then((treated) => {
// if (!treated) {