mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-11-05 13:26:48 +08:00
fix-next(css): className to preserve root views classes (#7725)
This commit is contained in:
@@ -1,10 +1,13 @@
|
||||
// Definitions.
|
||||
import { ViewBase as ViewBaseDefinition } from ".";
|
||||
import {
|
||||
AlignSelf, FlexGrow, FlexShrink, FlexWrapBefore, Order
|
||||
} from "../../layouts/flexbox-layout";
|
||||
import { Page } from "../../page";
|
||||
import { Order, FlexGrow, FlexShrink, FlexWrapBefore, AlignSelf } from "../../layouts/flexbox-layout";
|
||||
|
||||
// Types.
|
||||
import { Property, CssProperty, CssAnimationProperty, InheritedProperty, Style, clearInheritedProperties, propagateInheritableProperties, propagateInheritableCssProperties, initNativeView } from "../properties";
|
||||
import { getModalRootViewCssClass, getRootViewCssClasses } from "../../../css/system-classes";
|
||||
import { Source } from "../../../utils/debug";
|
||||
import { Binding, BindingOptions, Observable, WrappedValue, PropertyChangeData, traceEnabled, traceWrite, traceCategories } from "../bindable";
|
||||
import { isIOS, isAndroid } from "../../../platform";
|
||||
@@ -22,10 +25,9 @@ export { isIOS, isAndroid, layout, Color };
|
||||
export * from "../bindable";
|
||||
export * from "../properties";
|
||||
|
||||
import * as dnm from "../../../debugger/dom-node";
|
||||
import * as ssm from "../../styling/style-scope";
|
||||
|
||||
// import { DOMNode } from "../../../debugger/dom-node";
|
||||
import * as dnm from "../../../debugger/dom-node";
|
||||
let domNodeModule: typeof dnm;
|
||||
|
||||
function ensuredomNodeModule(): void {
|
||||
@@ -1036,11 +1038,26 @@ bindingContextProperty.register(ViewBase);
|
||||
export const classNameProperty = new Property<ViewBase, string>({
|
||||
name: "className",
|
||||
valueChanged(view: ViewBase, oldValue: string, newValue: string) {
|
||||
let classes = view.cssClasses;
|
||||
classes.clear();
|
||||
if (typeof newValue === "string" && newValue !== "") {
|
||||
newValue.split(" ").forEach(c => classes.add(c));
|
||||
const cssClasses = view.cssClasses;
|
||||
|
||||
const modalViewCssClass = getModalRootViewCssClass();
|
||||
const rootViewCssClasses = getRootViewCssClasses();
|
||||
|
||||
const shouldAddModalRootViewCssClass = cssClasses.has(modalViewCssClass);
|
||||
const shouldAddRootViewCssClasses = cssClasses.has(rootViewCssClasses[0]);
|
||||
|
||||
cssClasses.clear();
|
||||
|
||||
if (shouldAddModalRootViewCssClass) {
|
||||
cssClasses.add(modalViewCssClass);
|
||||
} else if (shouldAddRootViewCssClasses) {
|
||||
rootViewCssClasses.forEach(c => cssClasses.add(c));
|
||||
}
|
||||
|
||||
if (typeof newValue === "string" && newValue !== "") {
|
||||
newValue.split(" ").forEach(c => cssClasses.add(c));
|
||||
}
|
||||
|
||||
view._onCssStateChange();
|
||||
}
|
||||
});
|
||||
@@ -1058,4 +1075,4 @@ export function booleanConverter(v: string): boolean {
|
||||
}
|
||||
|
||||
throw new Error(`Invalid boolean: ${v}`);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,9 +5,8 @@ import {
|
||||
} from ".";
|
||||
|
||||
import {
|
||||
ViewBase, Property, booleanConverter, EventData, layout,
|
||||
getEventOrGestureName, traceEnabled, traceWrite, traceCategories,
|
||||
InheritedProperty, ShowModalOptions
|
||||
booleanConverter, EventData, getEventOrGestureName, InheritedProperty, layout,
|
||||
Property, ShowModalOptions, traceCategories, traceEnabled, traceWrite, ViewBase
|
||||
} from "../view-base";
|
||||
|
||||
import { HorizontalAlignment, VerticalAlignment, Visibility, Length, PercentLength } from "../../styling/style-properties";
|
||||
@@ -20,6 +19,7 @@ import {
|
||||
fromString as gestureFromString
|
||||
} from "../../gestures";
|
||||
|
||||
import { getModalRootViewCssClass } from "../../../css/system-classes";
|
||||
import { createViewFromEntry } from "../../builder";
|
||||
import { sanitizeModuleName } from "../../builder/module-name-sanitizer";
|
||||
import { StyleScope } from "../../styling/style-scope";
|
||||
@@ -31,9 +31,6 @@ export * from "../view-base";
|
||||
export { LinearGradient };
|
||||
|
||||
import * as am from "../../animation";
|
||||
import { CSS_CLASS_PREFIX } from "../../../application";
|
||||
|
||||
const MODAL = "modal";
|
||||
|
||||
let animationModule: typeof am;
|
||||
function ensureAnimationModule() {
|
||||
@@ -373,7 +370,9 @@ export abstract class ViewCommon extends ViewBase implements ViewDefinition {
|
||||
|
||||
protected _showNativeModalView(parent: ViewCommon, options: ShowModalOptions) {
|
||||
_rootModalViews.push(this);
|
||||
this.cssClasses.add(`${CSS_CLASS_PREFIX}${MODAL}`);
|
||||
|
||||
const modalRootViewCssClass = getModalRootViewCssClass();
|
||||
this.cssClasses.add(modalRootViewCssClass);
|
||||
|
||||
parent._modal = this;
|
||||
this._modalParent = parent;
|
||||
|
||||
@@ -7,9 +7,10 @@ import { Page } from "../page";
|
||||
|
||||
// Types.
|
||||
import * as application from "../../application";
|
||||
|
||||
import {
|
||||
FrameBase, goBack, _stack, NavigationType,
|
||||
Observable, View, traceCategories, traceEnabled, traceError, traceWrite
|
||||
_stack, FrameBase, goBack, NavigationType, Observable,
|
||||
traceCategories, traceEnabled, traceError, traceWrite, View
|
||||
} from "./frame-common";
|
||||
|
||||
import {
|
||||
@@ -19,6 +20,7 @@ import {
|
||||
|
||||
// TODO: Remove this and get it from global to decouple builder for angular
|
||||
import { createViewFromEntry } from "../builder";
|
||||
import { CLASS_PREFIX, getRootViewCssClasses, pushToRootViewCssClasses } from "../../css/system-classes";
|
||||
import { device } from "../../platform/platform";
|
||||
import { profile } from "../../profiling";
|
||||
|
||||
@@ -32,12 +34,7 @@ interface AnimatorState {
|
||||
transitionName: string;
|
||||
}
|
||||
|
||||
const ROOT = "root";
|
||||
const ANDROID_PLATFORM = "android";
|
||||
const ROOT_VIEW_CSS_CLASSES = [
|
||||
`${application.CSS_CLASS_PREFIX}${ROOT}`,
|
||||
`${application.CSS_CLASS_PREFIX}${ANDROID_PLATFORM}`
|
||||
];
|
||||
|
||||
const INTENT_EXTRA = "com.tns.activity";
|
||||
const ROOT_VIEW_ID_EXTRA = "com.tns.activity.rootViewId";
|
||||
@@ -1289,9 +1286,12 @@ class ActivityCallbacksImplementation implements AndroidActivityCallbacks {
|
||||
activityRootViewsMap.set(rootView._domId, new WeakRef(rootView));
|
||||
|
||||
const deviceType = device.deviceType.toLowerCase();
|
||||
ROOT_VIEW_CSS_CLASSES.push(`${application.CSS_CLASS_PREFIX}${deviceType}`);
|
||||
ROOT_VIEW_CSS_CLASSES.push(`${application.CSS_CLASS_PREFIX}${application.android.orientation}`);
|
||||
ROOT_VIEW_CSS_CLASSES.forEach(c => this._rootView.cssClasses.add(c));
|
||||
pushToRootViewCssClasses(`${CLASS_PREFIX}${ANDROID_PLATFORM}`);
|
||||
pushToRootViewCssClasses(`${CLASS_PREFIX}${deviceType}`);
|
||||
pushToRootViewCssClasses(`${CLASS_PREFIX}${application.android.orientation}`);
|
||||
|
||||
const rootViewCssClasses = getRootViewCssClasses();
|
||||
rootViewCssClasses.forEach(c => this._rootView.cssClasses.add(c));
|
||||
}
|
||||
|
||||
// Initialize native visual tree;
|
||||
|
||||
@@ -10,4 +10,4 @@
|
||||
export function _layoutRootView(rootView: any, parentBounds: any) {
|
||||
throw new Error("Not implemented for Android");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
1
tns-core-modules/ui/utils.d.ts
vendored
1
tns-core-modules/ui/utils.d.ts
vendored
@@ -3,6 +3,7 @@
|
||||
*/
|
||||
|
||||
import { View } from "./core/view";
|
||||
|
||||
export module ios {
|
||||
/**
|
||||
* Gets actual height of a [UIView](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/) widget in device pixels.
|
||||
|
||||
@@ -24,4 +24,4 @@ export module ios {
|
||||
|
||||
return utils.layout.toDevicePixels(min);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user