Files
Panayot Cankov 6d7c1ff295 Avoid applying CSS multiple times (#4784)
* Move the applyStyleFromScope to onLoaded, when the views are created and id or className properties are set the CSS selectors are queried and applied multiple times

* Condense the changes when applying properties
2017-09-25 18:32:00 +03:00

119 lines
2.6 KiB
TypeScript

// Deifinitions.
import { View } from "../core/view";
import { Color } from "../../color";
import { Page } from "../page";
import * as frameModule from "../frame";
export const STRING = "string";
export const PROMPT = "Prompt";
export const CONFIRM = "Confirm";
export const ALERT = "Alert";
export const LOGIN = "Login";
export const OK = "OK";
export const CANCEL = "Cancel";
/**
* Defines the input type for prompt dialog.
*/
export module inputType {
/**
* Plain text input type.
*/
export const text: string = "text";
/**
* Password input type.
*/
export const password: string = "password";
/**
* Email input type.
*/
export const email: string = "email";
}
let frame: typeof frameModule;
export function getCurrentPage(): Page {
if (!frame) {
frame = require("ui/frame");
}
let topmostFrame = frame.topmost();
if (topmostFrame) {
return topmostFrame.currentPage;
}
return undefined;
}
function applySelectors(view: View) {
let currentPage = getCurrentPage();
if (currentPage) {
let styleScope = currentPage._styleScope;
if (styleScope) {
styleScope.matchSelectors(view);
}
}
}
let buttonColor: Color;
let buttonBackgroundColor: Color;
function getButtonColors(): void {
const Button = require("ui/button").Button;
const btn = new Button();
applySelectors(btn);
buttonColor = btn.color;
buttonBackgroundColor = btn.backgroundColor;
btn.onUnloaded();
}
// NOTE: This will fail if app.css is changed.
export function getButtonColor(): Color {
if (!buttonColor) {
getButtonColors();
}
return buttonColor;
}
// NOTE: This will fail if app.css is changed.
export function getButtonBackgroundColor(): Color {
if (!buttonBackgroundColor) {
getButtonColors();
}
return buttonBackgroundColor;
}
let textFieldColor: Color;
export function getTextFieldColor(): Color {
if (!textFieldColor) {
const TextField = require("ui/text-field").TextField;
const tf = new TextField();
applySelectors(tf);
textFieldColor = tf.color;
tf.onUnloaded();
}
return textFieldColor;
}
let labelColor: Color;
// NOTE: This will fail if app.css is changed.
export function getLabelColor(): Color {
if (!labelColor) {
const Label = require("ui/label").Label;
let lbl = new Label();
applySelectors(lbl);
labelColor = lbl.color;
lbl.onUnloaded();
}
return labelColor;
}
export function isDialogOptions(arg): boolean {
return arg && (arg.message || arg.title);
}