feat:Android LinearNode setBaselineAligned false

This commit is contained in:
刘涛 2020-07-03 16:53:31 +08:00 committed by osborn
parent ae5ac30fb6
commit 787ea71862
24 changed files with 4510 additions and 4769 deletions

View File

@ -20,12 +20,12 @@ import android.graphics.drawable.ShapeDrawable;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import pub.doric.DoricContext;
import pub.doric.utils.DoricUtils;
import com.github.pengfeizhou.jscore.JSObject;
import com.github.pengfeizhou.jscore.JSValue;
import pub.doric.DoricContext;
import pub.doric.utils.DoricUtils;
/**
* @Description: com.github.penfeizhou.doric.shader
* @Author: pengfei.zhou
@ -94,7 +94,9 @@ public class LinearNode extends GroupNode<LinearLayout> {
@Override
protected LinearLayout build() {
return new MaximumLinearLayout(getContext());
LinearLayout linearLayout= new MaximumLinearLayout(getContext());
linearLayout.setBaselineAligned(false);
return linearLayout;
}
@Override

View File

@ -1,4 +1,4 @@
import { Panel, Group, scroller, vlayout, layoutConfig, LayoutSpec, Input, Gravity, log, input, text, Color, Text, InputType } from "doric";
import { Panel, Group, scroller, vlayout, layoutConfig, LayoutSpec, Input, Gravity, log, input, text, Color, Text, InputType, hlayout } from "doric";
import { title } from "./utils";
@Entry
class TextDemo extends Panel {
@ -8,41 +8,40 @@ class TextDemo extends Panel {
[
title("Text Demo"),
input({
width : 100,
height:100,
width: 100,
height: 100,
inputType: InputType.Number,
hintText: "number"
}),
// input({
// width : 100,
// height:100,
// inputType: InputType.NumberSigned,
// hintText: "NumberSigned"
// }),
// input({
// width : 100,
// height:100,
// inputType: InputType.Alphabet,
// hintText: "Alphabet"
// }),
// input({
// width : 100,
// height:100,
// inputType: InputType.Phone,
// hintText: "Phone"
// }),
hlayout([
text({
text: "size 10",
textSize: 10,
backgroundColor: Color.GREEN
}),
text({
text: "size 25",
textSize: 25,
backgroundColor: Color.BLUE
}),
text({
text: "size 18",
textSize: 18,
backgroundColor: Color.LTGRAY,
})
], {
backgroundColor: Color.RED,
height: 50,
gravity: Gravity.CenterX,
layoutConfig: layoutConfig().configWidth(LayoutSpec.MOST).configHeight(LayoutSpec.JUST),
}),
text({
text: "This is normal text",
}),
text({
text: "This is normal text with shadow ",
textSize: 20,
shadow: {
shadow: {
color: Color.parse("#1DD6DE"),
offsetX: 0,
offsetY: 1,

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -33,232 +33,228 @@ export function NativeCall(target, propertyKey, descriptor) {
};
return descriptor;
}
let Panel = /** @class */ (() => {
class Panel {
constructor() {
this.destroyed = false;
this.__root__ = new Root;
this.headviews = new Map;
this.onRenderFinishedCallback = [];
this.__rendering__ = false;
export class Panel {
constructor() {
this.destroyed = false;
this.__root__ = new Root;
this.headviews = new Map;
this.onRenderFinishedCallback = [];
this.__rendering__ = false;
}
onCreate() { }
onDestroy() { }
onShow() { }
onHidden() { }
addHeadView(type, v) {
let map = this.headviews.get(type);
if (map) {
map.set(v.viewId, v);
}
onCreate() { }
onDestroy() { }
onShow() { }
onHidden() { }
addHeadView(type, v) {
else {
map = new Map;
map.set(v.viewId, v);
this.headviews.set(type, map);
}
}
allHeadViews() {
return this.headviews.values();
}
removeHeadView(type, v) {
if (this.headviews.has(type)) {
let map = this.headviews.get(type);
if (map) {
map.set(v.viewId, v);
}
else {
map = new Map;
map.set(v.viewId, v);
this.headviews.set(type, map);
}
}
allHeadViews() {
return this.headviews.values();
}
removeHeadView(type, v) {
if (this.headviews.has(type)) {
let map = this.headviews.get(type);
if (map) {
if (v instanceof View) {
map.delete(v.viewId);
}
else {
map.delete(v);
}
}
}
}
clearHeadViews(type) {
if (this.headviews.has(type)) {
this.headviews.delete(type);
}
}
getRootView() {
return this.__root__;
}
getInitData() {
return this.__data__;
}
__init__(data) {
if (data) {
this.__data__ = JSON.parse(data);
}
}
__onCreate__() {
this.onCreate();
}
__onDestroy__() {
this.destroyed = true;
this.onDestroy();
}
__onShow__() {
this.onShow();
}
__onHidden__() {
this.onHidden();
}
__build__(frame) {
this.__root__.width = frame.width;
this.__root__.height = frame.height;
this.__root__.children.length = 0;
this.build(this.__root__);
}
__response__(viewIds, callbackId) {
const v = this.retrospectView(viewIds);
if (v === undefined) {
loge(`Cannot find view for ${viewIds}`);
}
else {
const argumentsList = [callbackId];
for (let i = 2; i < arguments.length; i++) {
argumentsList.push(arguments[i]);
}
return Reflect.apply(v.responseCallback, v, argumentsList);
}
}
retrospectView(ids) {
return ids.reduce((acc, cur) => {
if (acc === undefined) {
if (cur === this.__root__.viewId) {
return this.__root__;
}
for (let map of this.headviews.values()) {
if (map.has(cur)) {
return map.get(cur);
}
}
return undefined;
if (v instanceof View) {
map.delete(v.viewId);
}
else {
if (Reflect.has(acc, "subviewById")) {
return Reflect.apply(Reflect.get(acc, "subviewById"), acc, [cur]);
}
return acc;
map.delete(v);
}
}, undefined);
}
}
nativeRender(model) {
return this.context.callNative("shader", "render", model);
}
clearHeadViews(type) {
if (this.headviews.has(type)) {
this.headviews.delete(type);
}
hookBeforeNativeCall() {
if (Environment.platform !== 'web') {
this.__root__.clean();
}
getRootView() {
return this.__root__;
}
getInitData() {
return this.__data__;
}
__init__(data) {
if (data) {
this.__data__ = JSON.parse(data);
}
}
__onCreate__() {
this.onCreate();
}
__onDestroy__() {
this.destroyed = true;
this.onDestroy();
}
__onShow__() {
this.onShow();
}
__onHidden__() {
this.onHidden();
}
__build__(frame) {
this.__root__.width = frame.width;
this.__root__.height = frame.height;
this.__root__.children.length = 0;
this.build(this.__root__);
}
__response__(viewIds, callbackId) {
const v = this.retrospectView(viewIds);
if (v === undefined) {
loge(`Cannot find view for ${viewIds}`);
}
else {
const argumentsList = [callbackId];
for (let i = 2; i < arguments.length; i++) {
argumentsList.push(arguments[i]);
}
return Reflect.apply(v.responseCallback, v, argumentsList);
}
}
retrospectView(ids) {
return ids.reduce((acc, cur) => {
if (acc === undefined) {
if (cur === this.__root__.viewId) {
return this.__root__;
}
for (let map of this.headviews.values()) {
for (let v of map.values()) {
v.clean();
if (map.has(cur)) {
return map.get(cur);
}
}
return undefined;
}
else {
if (Reflect.has(acc, "subviewById")) {
return Reflect.apply(Reflect.get(acc, "subviewById"), acc, [cur]);
}
return acc;
}
}, undefined);
}
nativeRender(model) {
return this.context.callNative("shader", "render", model);
}
hookBeforeNativeCall() {
if (Environment.platform !== 'web') {
this.__root__.clean();
for (let map of this.headviews.values()) {
for (let v of map.values()) {
v.clean();
}
}
}
}
hookAfterNativeCall() {
if (this.destroyed) {
return;
}
const promises = [];
if (Environment.platform !== 'web') {
//Here insert a native call to ensure the promise is resolved done.
nativeEmpty();
if (this.__root__.isDirty()) {
const model = this.__root__.toModel();
promises.push(this.nativeRender(model));
}
for (let map of this.headviews.values()) {
for (let v of map.values()) {
if (v.isDirty()) {
const model = v.toModel();
promises.push(this.nativeRender(model));
}
}
}
}
hookAfterNativeCall() {
if (this.destroyed) {
return;
}
const promises = [];
if (Environment.platform !== 'web') {
//Here insert a native call to ensure the promise is resolved done.
nativeEmpty();
else {
Promise.resolve().then(() => {
if (this.__root__.isDirty()) {
const model = this.__root__.toModel();
promises.push(this.nativeRender(model));
this.__root__.clean();
}
for (let map of this.headviews.values()) {
for (let v of map.values()) {
if (v.isDirty()) {
const model = v.toModel();
promises.push(this.nativeRender(model));
v.clean();
}
}
}
}
else {
Promise.resolve().then(() => {
if (this.__root__.isDirty()) {
const model = this.__root__.toModel();
promises.push(this.nativeRender(model));
this.__root__.clean();
}
for (let map of this.headviews.values()) {
for (let v of map.values()) {
if (v.isDirty()) {
const model = v.toModel();
promises.push(this.nativeRender(model));
v.clean();
}
}
}
});
}
if (this.__rendering__) {
//skip
Promise.all(promises).then(_ => {
});
}
else {
this.__rendering__ = true;
Promise.all(promises).then(_ => {
this.__rendering__ = false;
this.onRenderFinished();
});
}
}
onRenderFinished() {
this.onRenderFinishedCallback.forEach(e => {
e();
});
this.onRenderFinishedCallback.length = 0;
}
addOnRenderFinishedCallback(cb) {
this.onRenderFinishedCallback.push(cb);
if (this.__rendering__) {
//skip
Promise.all(promises).then(_ => {
});
}
else {
this.__rendering__ = true;
Promise.all(promises).then(_ => {
this.__rendering__ = false;
this.onRenderFinished();
});
}
}
__decorate([
NativeCall,
__metadata("design:type", Function),
__metadata("design:paramtypes", [String]),
__metadata("design:returntype", void 0)
], Panel.prototype, "__init__", null);
__decorate([
NativeCall,
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", void 0)
], Panel.prototype, "__onCreate__", null);
__decorate([
NativeCall,
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", void 0)
], Panel.prototype, "__onDestroy__", null);
__decorate([
NativeCall,
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", void 0)
], Panel.prototype, "__onShow__", null);
__decorate([
NativeCall,
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", void 0)
], Panel.prototype, "__onHidden__", null);
__decorate([
NativeCall,
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", void 0)
], Panel.prototype, "__build__", null);
__decorate([
NativeCall,
__metadata("design:type", Function),
__metadata("design:paramtypes", [Array, String]),
__metadata("design:returntype", void 0)
], Panel.prototype, "__response__", null);
return Panel;
})();
export { Panel };
onRenderFinished() {
this.onRenderFinishedCallback.forEach(e => {
e();
});
this.onRenderFinishedCallback.length = 0;
}
addOnRenderFinishedCallback(cb) {
this.onRenderFinishedCallback.push(cb);
}
}
__decorate([
NativeCall,
__metadata("design:type", Function),
__metadata("design:paramtypes", [String]),
__metadata("design:returntype", void 0)
], Panel.prototype, "__init__", null);
__decorate([
NativeCall,
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", void 0)
], Panel.prototype, "__onCreate__", null);
__decorate([
NativeCall,
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", void 0)
], Panel.prototype, "__onDestroy__", null);
__decorate([
NativeCall,
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", void 0)
], Panel.prototype, "__onShow__", null);
__decorate([
NativeCall,
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", void 0)
], Panel.prototype, "__onHidden__", null);
__decorate([
NativeCall,
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", void 0)
], Panel.prototype, "__build__", null);
__decorate([
NativeCall,
__metadata("design:type", Function),
__metadata("design:paramtypes", [Array, String]),
__metadata("design:returntype", void 0)
], Panel.prototype, "__response__", null);

View File

@ -13,279 +13,275 @@ import { loge } from "../util/log";
export function Property(target, propKey) {
Reflect.defineMetadata(propKey, true, target);
}
let View = /** @class */ (() => {
class View {
constructor() {
this.width = 0;
this.height = 0;
this.x = 0;
this.y = 0;
this.viewId = uniqueId('ViewId');
this.callbacks = new Map;
/** Anchor end*/
this.__dirty_props__ = {};
this.nativeViewModel = {
id: this.viewId,
type: this.constructor.name,
props: this.__dirty_props__,
};
return new Proxy(this, {
get: (target, p, receiver) => {
return Reflect.get(target, p, receiver);
},
set: (target, p, v, receiver) => {
const oldV = Reflect.get(target, p, receiver);
const ret = Reflect.set(target, p, v, receiver);
if (Reflect.getMetadata(p, target) && oldV !== v) {
receiver.onPropertyChanged(p.toString(), oldV, v);
}
return ret;
export class View {
constructor() {
this.width = 0;
this.height = 0;
this.x = 0;
this.y = 0;
this.viewId = uniqueId('ViewId');
this.callbacks = new Map;
/** Anchor end*/
this.__dirty_props__ = {};
this.nativeViewModel = {
id: this.viewId,
type: this.constructor.name,
props: this.__dirty_props__,
};
return new Proxy(this, {
get: (target, p, receiver) => {
return Reflect.get(target, p, receiver);
},
set: (target, p, v, receiver) => {
const oldV = Reflect.get(target, p, receiver);
const ret = Reflect.set(target, p, v, receiver);
if (Reflect.getMetadata(p, target) && oldV !== v) {
receiver.onPropertyChanged(p.toString(), oldV, v);
}
});
}
callback2Id(f) {
const id = uniqueId('Function');
this.callbacks.set(id, f);
return id;
}
id2Callback(id) {
let f = this.callbacks.get(id);
if (f === undefined) {
f = Reflect.get(this, id);
return ret;
}
return f;
});
}
callback2Id(f) {
const id = uniqueId('Function');
this.callbacks.set(id, f);
return id;
}
id2Callback(id) {
let f = this.callbacks.get(id);
if (f === undefined) {
f = Reflect.get(this, id);
}
/** Anchor start*/
get left() {
return this.x;
return f;
}
/** Anchor start*/
get left() {
return this.x;
}
set left(v) {
this.x = v;
}
get right() {
return this.x + this.width;
}
set right(v) {
this.x = v - this.width;
}
get top() {
return this.y;
}
set top(v) {
this.y = v;
}
get bottom() {
return this.y + this.height;
}
set bottom(v) {
this.y = v - this.height;
}
get centerX() {
return this.x + this.width / 2;
}
get centerY() {
return this.y + this.height / 2;
}
set centerX(v) {
this.x = v - this.width / 2;
}
set centerY(v) {
this.y = v - this.height / 2;
}
get dirtyProps() {
return this.__dirty_props__;
}
onPropertyChanged(propKey, oldV, newV) {
if (newV instanceof Function) {
newV = this.callback2Id(newV);
}
set left(v) {
this.x = v;
else {
newV = obj2Model(newV);
}
get right() {
return this.x + this.width;
}
set right(v) {
this.x = v - this.width;
}
get top() {
return this.y;
}
set top(v) {
this.y = v;
}
get bottom() {
return this.y + this.height;
}
set bottom(v) {
this.y = v - this.height;
}
get centerX() {
return this.x + this.width / 2;
}
get centerY() {
return this.y + this.height / 2;
}
set centerX(v) {
this.x = v - this.width / 2;
}
set centerY(v) {
this.y = v - this.height / 2;
}
get dirtyProps() {
return this.__dirty_props__;
}
onPropertyChanged(propKey, oldV, newV) {
if (newV instanceof Function) {
newV = this.callback2Id(newV);
this.__dirty_props__[propKey] = newV;
}
clean() {
for (const key in this.__dirty_props__) {
if (Reflect.has(this.__dirty_props__, key)) {
Reflect.deleteProperty(this.__dirty_props__, key);
}
else {
newV = obj2Model(newV);
}
this.__dirty_props__[propKey] = newV;
}
clean() {
for (const key in this.__dirty_props__) {
if (Reflect.has(this.__dirty_props__, key)) {
Reflect.deleteProperty(this.__dirty_props__, key);
}
}
}
isDirty() {
return Reflect.ownKeys(this.__dirty_props__).length !== 0;
}
responseCallback(id, ...args) {
const f = this.id2Callback(id);
if (f instanceof Function) {
const argumentsList = [];
for (let i = 1; i < arguments.length; i++) {
argumentsList.push(arguments[i]);
}
return Reflect.apply(f, this, argumentsList);
}
else {
loge(`Cannot find callback:${id} for ${JSON.stringify(this.toModel())}`);
}
}
toModel() {
return this.nativeViewModel;
}
let(block) {
block(this);
}
also(block) {
block(this);
return this;
}
apply(config) {
for (let key in config) {
Reflect.set(this, key, Reflect.get(config, key, config), this);
}
return this;
}
in(group) {
group.addChild(this);
return this;
}
nativeChannel(context, name) {
let thisView = this;
return function (args = undefined) {
const viewIds = [];
while (thisView != undefined) {
viewIds.push(thisView.viewId);
thisView = thisView.superview;
}
const params = {
viewIds: viewIds.reverse(),
name,
args,
};
return context.callNative('shader', 'command', params);
};
}
getWidth(context) {
return this.nativeChannel(context, 'getWidth')();
}
getHeight(context) {
return this.nativeChannel(context, 'getHeight')();
}
getX(context) {
return this.nativeChannel(context, 'getX')();
}
getY(context) {
return this.nativeChannel(context, 'getY')();
}
getLocationOnScreen(context) {
return this.nativeChannel(context, "getLocationOnScreen")();
}
doAnimation(context, animation) {
return this.nativeChannel(context, "doAnimation")(animation.toModel()).then((args) => {
for (let key in args) {
Reflect.set(this, key, Reflect.get(args, key, args), this);
Reflect.deleteProperty(this.__dirty_props__, key);
}
});
}
}
__decorate([
Property,
__metadata("design:type", Number)
], View.prototype, "width", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], View.prototype, "height", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], View.prototype, "x", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], View.prototype, "y", void 0);
__decorate([
Property,
__metadata("design:type", Object)
], View.prototype, "backgroundColor", void 0);
__decorate([
Property,
__metadata("design:type", Object)
], View.prototype, "corners", void 0);
__decorate([
Property,
__metadata("design:type", Object)
], View.prototype, "border", void 0);
__decorate([
Property,
__metadata("design:type", Object)
], View.prototype, "shadow", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], View.prototype, "alpha", void 0);
__decorate([
Property,
__metadata("design:type", Boolean)
], View.prototype, "hidden", void 0);
__decorate([
Property,
__metadata("design:type", Object)
], View.prototype, "padding", void 0);
__decorate([
Property,
__metadata("design:type", Object)
], View.prototype, "layoutConfig", void 0);
__decorate([
Property,
__metadata("design:type", Function)
], View.prototype, "onClick", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], View.prototype, "translationX", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], View.prototype, "translationY", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], View.prototype, "scaleX", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], View.prototype, "scaleY", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], View.prototype, "pivotX", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], View.prototype, "pivotY", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], View.prototype, "rotation", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], View.prototype, "rotationX", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], View.prototype, "rotationY", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], View.prototype, "perspective", void 0);
__decorate([
Property,
__metadata("design:type", Object)
], View.prototype, "flexConfig", void 0);
return View;
})();
export { View };
isDirty() {
return Reflect.ownKeys(this.__dirty_props__).length !== 0;
}
responseCallback(id, ...args) {
const f = this.id2Callback(id);
if (f instanceof Function) {
const argumentsList = [];
for (let i = 1; i < arguments.length; i++) {
argumentsList.push(arguments[i]);
}
return Reflect.apply(f, this, argumentsList);
}
else {
loge(`Cannot find callback:${id} for ${JSON.stringify(this.toModel())}`);
}
}
toModel() {
return this.nativeViewModel;
}
let(block) {
block(this);
}
also(block) {
block(this);
return this;
}
apply(config) {
for (let key in config) {
Reflect.set(this, key, Reflect.get(config, key, config), this);
}
return this;
}
in(group) {
group.addChild(this);
return this;
}
nativeChannel(context, name) {
let thisView = this;
return function (args = undefined) {
const viewIds = [];
while (thisView != undefined) {
viewIds.push(thisView.viewId);
thisView = thisView.superview;
}
const params = {
viewIds: viewIds.reverse(),
name,
args,
};
return context.callNative('shader', 'command', params);
};
}
getWidth(context) {
return this.nativeChannel(context, 'getWidth')();
}
getHeight(context) {
return this.nativeChannel(context, 'getHeight')();
}
getX(context) {
return this.nativeChannel(context, 'getX')();
}
getY(context) {
return this.nativeChannel(context, 'getY')();
}
getLocationOnScreen(context) {
return this.nativeChannel(context, "getLocationOnScreen")();
}
doAnimation(context, animation) {
return this.nativeChannel(context, "doAnimation")(animation.toModel()).then((args) => {
for (let key in args) {
Reflect.set(this, key, Reflect.get(args, key, args), this);
Reflect.deleteProperty(this.__dirty_props__, key);
}
});
}
}
__decorate([
Property,
__metadata("design:type", Number)
], View.prototype, "width", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], View.prototype, "height", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], View.prototype, "x", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], View.prototype, "y", void 0);
__decorate([
Property,
__metadata("design:type", Object)
], View.prototype, "backgroundColor", void 0);
__decorate([
Property,
__metadata("design:type", Object)
], View.prototype, "corners", void 0);
__decorate([
Property,
__metadata("design:type", Object)
], View.prototype, "border", void 0);
__decorate([
Property,
__metadata("design:type", Object)
], View.prototype, "shadow", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], View.prototype, "alpha", void 0);
__decorate([
Property,
__metadata("design:type", Boolean)
], View.prototype, "hidden", void 0);
__decorate([
Property,
__metadata("design:type", Object)
], View.prototype, "padding", void 0);
__decorate([
Property,
__metadata("design:type", Object)
], View.prototype, "layoutConfig", void 0);
__decorate([
Property,
__metadata("design:type", Function)
], View.prototype, "onClick", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], View.prototype, "translationX", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], View.prototype, "translationY", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], View.prototype, "scaleX", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], View.prototype, "scaleY", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], View.prototype, "pivotX", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], View.prototype, "pivotY", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], View.prototype, "rotation", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], View.prototype, "rotationX", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], View.prototype, "rotationY", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], View.prototype, "perspective", void 0);
__decorate([
Property,
__metadata("design:type", Object)
], View.prototype, "flexConfig", void 0);
export class Superview extends View {
subviewById(id) {
for (let v of this.allSubviews()) {

View File

@ -1,61 +1,57 @@
/**
* Store color as format AARRGGBB or RRGGBB
*/
let Color = /** @class */ (() => {
class Color {
constructor(v) {
this._value = 0;
this._value = v | 0x0;
export class Color {
constructor(v) {
this._value = 0;
this._value = v | 0x0;
}
static parse(str) {
if (!str.startsWith("#")) {
throw new Error(`Parse color error with ${str}`);
}
static parse(str) {
if (!str.startsWith("#")) {
throw new Error(`Parse color error with ${str}`);
}
const val = parseInt(str.substr(1), 16);
if (str.length === 7) {
return new Color(val | 0xff000000);
}
else if (str.length === 9) {
return new Color(val);
}
else {
throw new Error(`Parse color error with ${str}`);
}
const val = parseInt(str.substr(1), 16);
if (str.length === 7) {
return new Color(val | 0xff000000);
}
static safeParse(str, defVal = Color.TRANSPARENT) {
let color = defVal;
try {
color = Color.parse(str);
}
catch (e) {
}
finally {
return color;
}
else if (str.length === 9) {
return new Color(val);
}
alpha(v) {
v = v * 255;
return new Color((this._value & 0xffffff) | ((v & 0xff) << 24));
}
toModel() {
return this._value;
else {
throw new Error(`Parse color error with ${str}`);
}
}
Color.BLACK = new Color(0xFF000000);
Color.DKGRAY = new Color(0xFF444444);
Color.GRAY = new Color(0xFF888888);
Color.LTGRAY = new Color(0xFFCCCCCC);
Color.WHITE = new Color(0xFFFFFFFF);
Color.RED = new Color(0xFFFF0000);
Color.GREEN = new Color(0xFF00FF00);
Color.BLUE = new Color(0xFF0000FF);
Color.YELLOW = new Color(0xFFFFFF00);
Color.CYAN = new Color(0xFF00FFFF);
Color.MAGENTA = new Color(0xFFFF00FF);
Color.TRANSPARENT = new Color(0);
return Color;
})();
export { Color };
static safeParse(str, defVal = Color.TRANSPARENT) {
let color = defVal;
try {
color = Color.parse(str);
}
catch (e) {
}
finally {
return color;
}
}
alpha(v) {
v = v * 255;
return new Color((this._value & 0xffffff) | ((v & 0xff) << 24));
}
toModel() {
return this._value;
}
}
Color.BLACK = new Color(0xFF000000);
Color.DKGRAY = new Color(0xFF444444);
Color.GRAY = new Color(0xFF888888);
Color.LTGRAY = new Color(0xFFCCCCCC);
Color.WHITE = new Color(0xFFFFFFFF);
Color.RED = new Color(0xFFFF0000);
Color.GREEN = new Color(0xFF00FF00);
Color.BLUE = new Color(0xFF0000FF);
Color.YELLOW = new Color(0xFFFFFF00);
Color.CYAN = new Color(0xFF00FFFF);
Color.MAGENTA = new Color(0xFFFF00FF);
Color.TRANSPARENT = new Color(0);
export var GradientOrientation;
(function (GradientOrientation) {
/** draw the gradient from the top to the bottom */

View File

@ -5,33 +5,29 @@ var ValueType;
ValueType[ValueType["Percent"] = 2] = "Percent";
ValueType[ValueType["Auto"] = 3] = "Auto";
})(ValueType || (ValueType = {}));
let FlexTypedValue = /** @class */ (() => {
class FlexTypedValue {
constructor(type) {
this.value = 0;
this.type = type;
}
static percent(v) {
const ret = new FlexTypedValue(ValueType.Percent);
ret.value = v;
return ret;
}
static point(v) {
const ret = new FlexTypedValue(ValueType.Point);
ret.value = v;
return ret;
}
toModel() {
return {
type: this.type,
value: this.value,
};
}
export class FlexTypedValue {
constructor(type) {
this.value = 0;
this.type = type;
}
FlexTypedValue.Auto = new FlexTypedValue(ValueType.Auto);
return FlexTypedValue;
})();
export { FlexTypedValue };
static percent(v) {
const ret = new FlexTypedValue(ValueType.Percent);
ret.value = v;
return ret;
}
static point(v) {
const ret = new FlexTypedValue(ValueType.Point);
ret.value = v;
return ret;
}
toModel() {
return {
type: this.type,
value: this.value,
};
}
}
FlexTypedValue.Auto = new FlexTypedValue(ValueType.Auto);
export var FlexDirection;
(function (FlexDirection) {
FlexDirection[FlexDirection["COLUMN"] = 0] = "COLUMN";

View File

@ -10,68 +10,64 @@ export const BOTTOM = (END | SPECIFIED) << SHIFT_Y;
export const CENTER_X = SPECIFIED << SHIFT_X;
export const CENTER_Y = SPECIFIED << SHIFT_Y;
export const CENTER = CENTER_X | CENTER_Y;
let Gravity = /** @class */ (() => {
class Gravity {
constructor() {
this.val = 0;
}
left() {
const val = this.val | LEFT;
const ret = new Gravity;
ret.val = val;
return ret;
}
right() {
const val = this.val | RIGHT;
const ret = new Gravity;
ret.val = val;
return ret;
}
top() {
const val = this.val | TOP;
const ret = new Gravity;
ret.val = val;
return ret;
}
bottom() {
const val = this.val | BOTTOM;
const ret = new Gravity;
ret.val = val;
return ret;
}
center() {
const val = this.val | CENTER;
const ret = new Gravity;
ret.val = val;
return ret;
}
centerX() {
const val = this.val | CENTER_X;
const ret = new Gravity;
ret.val = val;
return ret;
}
centerY() {
const val = this.val | CENTER_Y;
const ret = new Gravity;
ret.val = val;
return ret;
}
toModel() {
return this.val;
}
export class Gravity {
constructor() {
this.val = 0;
}
Gravity.origin = new Gravity;
Gravity.Center = Gravity.origin.center();
Gravity.CenterX = Gravity.origin.centerX();
Gravity.CenterY = Gravity.origin.centerY();
Gravity.Left = Gravity.origin.left();
Gravity.Right = Gravity.origin.right();
Gravity.Top = Gravity.origin.top();
Gravity.Bottom = Gravity.origin.bottom();
return Gravity;
})();
export { Gravity };
left() {
const val = this.val | LEFT;
const ret = new Gravity;
ret.val = val;
return ret;
}
right() {
const val = this.val | RIGHT;
const ret = new Gravity;
ret.val = val;
return ret;
}
top() {
const val = this.val | TOP;
const ret = new Gravity;
ret.val = val;
return ret;
}
bottom() {
const val = this.val | BOTTOM;
const ret = new Gravity;
ret.val = val;
return ret;
}
center() {
const val = this.val | CENTER;
const ret = new Gravity;
ret.val = val;
return ret;
}
centerX() {
const val = this.val | CENTER_X;
const ret = new Gravity;
ret.val = val;
return ret;
}
centerY() {
const val = this.val | CENTER_Y;
const ret = new Gravity;
ret.val = val;
return ret;
}
toModel() {
return this.val;
}
}
Gravity.origin = new Gravity;
Gravity.Center = Gravity.origin.center();
Gravity.CenterX = Gravity.origin.centerX();
Gravity.CenterY = Gravity.origin.centerY();
Gravity.Left = Gravity.origin.left();
Gravity.Right = Gravity.origin.right();
Gravity.Top = Gravity.origin.top();
Gravity.Bottom = Gravity.origin.bottom();
export function gravity() {
return new Gravity;
}

View File

@ -25,16 +25,12 @@ var __metadata = (this && this.__metadata) || function (k, v) {
import { Property, View } from "../ui/view";
import { Stack } from "../widget/layouts";
import { layoutConfig } from "../util/layoutconfig";
let Draggable = /** @class */ (() => {
class Draggable extends Stack {
}
__decorate([
Property,
__metadata("design:type", Function)
], Draggable.prototype, "onDrag", void 0);
return Draggable;
})();
export { Draggable };
export class Draggable extends Stack {
}
__decorate([
Property,
__metadata("design:type", Function)
], Draggable.prototype, "onDrag", void 0);
export function draggable(views, config) {
const ret = new Draggable;
ret.layoutConfig = layoutConfig().fit();

View File

@ -25,113 +25,105 @@ var __metadata = (this && this.__metadata) || function (k, v) {
import { Stack } from './layouts';
import { Property, Superview, View } from '../ui/view';
import { layoutConfig } from '../util/index.util';
let FlowLayoutItem = /** @class */ (() => {
class FlowLayoutItem extends Stack {
export class FlowLayoutItem extends Stack {
}
__decorate([
Property,
__metadata("design:type", String)
], FlowLayoutItem.prototype, "identifier", void 0);
export class FlowLayout extends Superview {
constructor() {
super(...arguments);
this.cachedViews = new Map;
this.ignoreDirtyCallOnce = false;
this.columnCount = 2;
this.itemCount = 0;
this.batchCount = 15;
}
__decorate([
Property,
__metadata("design:type", String)
], FlowLayoutItem.prototype, "identifier", void 0);
return FlowLayoutItem;
})();
export { FlowLayoutItem };
let FlowLayout = /** @class */ (() => {
class FlowLayout extends Superview {
constructor() {
super(...arguments);
this.cachedViews = new Map;
allSubviews() {
if (this.loadMoreView) {
return [...this.cachedViews.values(), this.loadMoreView];
}
else {
return this.cachedViews.values();
}
}
reset() {
this.cachedViews.clear();
this.itemCount = 0;
}
getItem(itemIdx) {
let view = this.renderItem(itemIdx);
view.superview = this;
this.cachedViews.set(`${itemIdx}`, view);
return view;
}
isDirty() {
if (this.ignoreDirtyCallOnce) {
this.ignoreDirtyCallOnce = false;
this.columnCount = 2;
this.itemCount = 0;
this.batchCount = 15;
}
allSubviews() {
if (this.loadMoreView) {
return [...this.cachedViews.values(), this.loadMoreView];
}
else {
return this.cachedViews.values();
}
}
reset() {
this.cachedViews.clear();
this.itemCount = 0;
}
getItem(itemIdx) {
let view = this.renderItem(itemIdx);
view.superview = this;
this.cachedViews.set(`${itemIdx}`, view);
return view;
}
isDirty() {
if (this.ignoreDirtyCallOnce) {
this.ignoreDirtyCallOnce = false;
//Ignore the dirty call once.
return false;
}
return super.isDirty();
}
renderBunchedItems(start, length) {
this.ignoreDirtyCallOnce = true;
return new Array(Math.min(length, this.itemCount - start)).fill(0).map((_, idx) => {
const listItem = this.getItem(start + idx);
return listItem.toModel();
});
}
toModel() {
if (this.loadMoreView) {
this.dirtyProps['loadMoreView'] = this.loadMoreView.viewId;
}
return super.toModel();
//Ignore the dirty call once.
return false;
}
return super.isDirty();
}
__decorate([
Property,
__metadata("design:type", Object)
], FlowLayout.prototype, "columnCount", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], FlowLayout.prototype, "columnSpace", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], FlowLayout.prototype, "rowSpace", void 0);
__decorate([
Property,
__metadata("design:type", Object)
], FlowLayout.prototype, "itemCount", void 0);
__decorate([
Property,
__metadata("design:type", Function)
], FlowLayout.prototype, "renderItem", void 0);
__decorate([
Property,
__metadata("design:type", Object)
], FlowLayout.prototype, "batchCount", void 0);
__decorate([
Property,
__metadata("design:type", Function)
], FlowLayout.prototype, "onLoadMore", void 0);
__decorate([
Property,
__metadata("design:type", Boolean)
], FlowLayout.prototype, "loadMore", void 0);
__decorate([
Property,
__metadata("design:type", FlowLayoutItem)
], FlowLayout.prototype, "loadMoreView", void 0);
__decorate([
Property,
__metadata("design:type", Function)
], FlowLayout.prototype, "onScroll", void 0);
__decorate([
Property,
__metadata("design:type", Function)
], FlowLayout.prototype, "onScrollEnd", void 0);
return FlowLayout;
})();
export { FlowLayout };
renderBunchedItems(start, length) {
this.ignoreDirtyCallOnce = true;
return new Array(Math.min(length, this.itemCount - start)).fill(0).map((_, idx) => {
const listItem = this.getItem(start + idx);
return listItem.toModel();
});
}
toModel() {
if (this.loadMoreView) {
this.dirtyProps['loadMoreView'] = this.loadMoreView.viewId;
}
return super.toModel();
}
}
__decorate([
Property,
__metadata("design:type", Object)
], FlowLayout.prototype, "columnCount", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], FlowLayout.prototype, "columnSpace", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], FlowLayout.prototype, "rowSpace", void 0);
__decorate([
Property,
__metadata("design:type", Object)
], FlowLayout.prototype, "itemCount", void 0);
__decorate([
Property,
__metadata("design:type", Function)
], FlowLayout.prototype, "renderItem", void 0);
__decorate([
Property,
__metadata("design:type", Object)
], FlowLayout.prototype, "batchCount", void 0);
__decorate([
Property,
__metadata("design:type", Function)
], FlowLayout.prototype, "onLoadMore", void 0);
__decorate([
Property,
__metadata("design:type", Boolean)
], FlowLayout.prototype, "loadMore", void 0);
__decorate([
Property,
__metadata("design:type", FlowLayoutItem)
], FlowLayout.prototype, "loadMoreView", void 0);
__decorate([
Property,
__metadata("design:type", Function)
], FlowLayout.prototype, "onScroll", void 0);
__decorate([
Property,
__metadata("design:type", Function)
], FlowLayout.prototype, "onScrollEnd", void 0);
export function flowlayout(config) {
const ret = new FlowLayout;
for (let key in config) {

View File

@ -31,77 +31,73 @@ export var ScaleType;
ScaleType[ScaleType["ScaleAspectFit"] = 1] = "ScaleAspectFit";
ScaleType[ScaleType["ScaleAspectFill"] = 2] = "ScaleAspectFill";
})(ScaleType || (ScaleType = {}));
let Image = /** @class */ (() => {
class Image extends View {
}
__decorate([
Property,
__metadata("design:type", String)
], Image.prototype, "imageUrl", void 0);
__decorate([
Property,
__metadata("design:type", String)
], Image.prototype, "imagePath", void 0);
__decorate([
Property,
__metadata("design:type", String)
], Image.prototype, "imageRes", void 0);
__decorate([
Property,
__metadata("design:type", String)
], Image.prototype, "imageBase64", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], Image.prototype, "scaleType", void 0);
__decorate([
Property,
__metadata("design:type", Boolean)
], Image.prototype, "isBlur", void 0);
__decorate([
Property,
__metadata("design:type", String)
], Image.prototype, "placeHolderImage", void 0);
__decorate([
Property,
__metadata("design:type", String)
], Image.prototype, "placeHolderImageBase64", void 0);
__decorate([
Property,
__metadata("design:type", Color
/**
* Display while image is failed to load
* It can be file name in local path
*/
)
], Image.prototype, "placeHolderColor", void 0);
__decorate([
Property,
__metadata("design:type", String)
], Image.prototype, "errorImage", void 0);
__decorate([
Property,
__metadata("design:type", String)
], Image.prototype, "errorImageBase64", void 0);
__decorate([
Property,
__metadata("design:type", Color)
], Image.prototype, "errorColor", void 0);
__decorate([
Property,
__metadata("design:type", Function)
], Image.prototype, "loadCallback", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], Image.prototype, "imageScale", void 0);
__decorate([
Property,
__metadata("design:type", Object)
], Image.prototype, "stretchInset", void 0);
return Image;
})();
export { Image };
export class Image extends View {
}
__decorate([
Property,
__metadata("design:type", String)
], Image.prototype, "imageUrl", void 0);
__decorate([
Property,
__metadata("design:type", String)
], Image.prototype, "imagePath", void 0);
__decorate([
Property,
__metadata("design:type", String)
], Image.prototype, "imageRes", void 0);
__decorate([
Property,
__metadata("design:type", String)
], Image.prototype, "imageBase64", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], Image.prototype, "scaleType", void 0);
__decorate([
Property,
__metadata("design:type", Boolean)
], Image.prototype, "isBlur", void 0);
__decorate([
Property,
__metadata("design:type", String)
], Image.prototype, "placeHolderImage", void 0);
__decorate([
Property,
__metadata("design:type", String)
], Image.prototype, "placeHolderImageBase64", void 0);
__decorate([
Property,
__metadata("design:type", Color
/**
* Display while image is failed to load
* It can be file name in local path
*/
)
], Image.prototype, "placeHolderColor", void 0);
__decorate([
Property,
__metadata("design:type", String)
], Image.prototype, "errorImage", void 0);
__decorate([
Property,
__metadata("design:type", String)
], Image.prototype, "errorImageBase64", void 0);
__decorate([
Property,
__metadata("design:type", Color)
], Image.prototype, "errorColor", void 0);
__decorate([
Property,
__metadata("design:type", Function)
], Image.prototype, "loadCallback", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], Image.prototype, "imageScale", void 0);
__decorate([
Property,
__metadata("design:type", Object)
], Image.prototype, "stretchInset", void 0);
export function image(config) {
const ret = new Image;
ret.layoutConfig = layoutConfig().fit();

View File

@ -26,71 +26,67 @@ import { View, Property } from "../ui/view";
import { Color } from "../util/color";
import { Gravity } from "../util/gravity";
import { layoutConfig } from "../util/index.util";
let Input = /** @class */ (() => {
class Input extends View {
getText(context) {
return this.nativeChannel(context, 'getText')();
}
setSelection(context, start, end = start) {
return this.nativeChannel(context, 'setSelection')({
start,
end,
});
}
requestFocus(context) {
return this.nativeChannel(context, 'requestFocus')();
}
releaseFocus(context) {
return this.nativeChannel(context, 'releaseFocus')();
}
export class Input extends View {
getText(context) {
return this.nativeChannel(context, 'getText')();
}
__decorate([
Property,
__metadata("design:type", String)
], Input.prototype, "text", void 0);
__decorate([
Property,
__metadata("design:type", Color)
], Input.prototype, "textColor", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], Input.prototype, "textSize", void 0);
__decorate([
Property,
__metadata("design:type", String)
], Input.prototype, "hintText", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], Input.prototype, "inputType", void 0);
__decorate([
Property,
__metadata("design:type", Color)
], Input.prototype, "hintTextColor", void 0);
__decorate([
Property,
__metadata("design:type", Boolean)
], Input.prototype, "multiline", void 0);
__decorate([
Property,
__metadata("design:type", Gravity)
], Input.prototype, "textAlignment", void 0);
__decorate([
Property,
__metadata("design:type", Function)
], Input.prototype, "onTextChange", void 0);
__decorate([
Property,
__metadata("design:type", Function)
], Input.prototype, "onFocusChange", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], Input.prototype, "maxLength", void 0);
return Input;
})();
export { Input };
setSelection(context, start, end = start) {
return this.nativeChannel(context, 'setSelection')({
start,
end,
});
}
requestFocus(context) {
return this.nativeChannel(context, 'requestFocus')();
}
releaseFocus(context) {
return this.nativeChannel(context, 'releaseFocus')();
}
}
__decorate([
Property,
__metadata("design:type", String)
], Input.prototype, "text", void 0);
__decorate([
Property,
__metadata("design:type", Color)
], Input.prototype, "textColor", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], Input.prototype, "textSize", void 0);
__decorate([
Property,
__metadata("design:type", String)
], Input.prototype, "hintText", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], Input.prototype, "inputType", void 0);
__decorate([
Property,
__metadata("design:type", Color)
], Input.prototype, "hintTextColor", void 0);
__decorate([
Property,
__metadata("design:type", Boolean)
], Input.prototype, "multiline", void 0);
__decorate([
Property,
__metadata("design:type", Gravity)
], Input.prototype, "textAlignment", void 0);
__decorate([
Property,
__metadata("design:type", Function)
], Input.prototype, "onTextChange", void 0);
__decorate([
Property,
__metadata("design:type", Function)
], Input.prototype, "onFocusChange", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], Input.prototype, "maxLength", void 0);
export var InputType;
(function (InputType) {
InputType[InputType["Default"] = 0] = "Default";

View File

@ -29,19 +29,16 @@ export class Stack extends Group {
}
export class Root extends Stack {
}
let LinearLayout = /** @class */ (() => {
class LinearLayout extends Group {
}
__decorate([
Property,
__metadata("design:type", Number)
], LinearLayout.prototype, "space", void 0);
__decorate([
Property,
__metadata("design:type", Gravity)
], LinearLayout.prototype, "gravity", void 0);
return LinearLayout;
})();
class LinearLayout extends Group {
}
__decorate([
Property,
__metadata("design:type", Number)
], LinearLayout.prototype, "space", void 0);
__decorate([
Property,
__metadata("design:type", Gravity)
], LinearLayout.prototype, "gravity", void 0);
export class VLayout extends LinearLayout {
}
export class HLayout extends LinearLayout {

View File

@ -25,108 +25,100 @@ var __metadata = (this && this.__metadata) || function (k, v) {
import { View, Property, Superview } from "../ui/view";
import { Stack } from "./layouts";
import { layoutConfig } from "../util/layoutconfig";
let ListItem = /** @class */ (() => {
class ListItem extends Stack {
export class ListItem extends Stack {
}
__decorate([
Property,
__metadata("design:type", String)
], ListItem.prototype, "identifier", void 0);
export class List extends Superview {
constructor() {
super(...arguments);
this.cachedViews = new Map;
this.ignoreDirtyCallOnce = false;
this.itemCount = 0;
this.batchCount = 15;
}
__decorate([
Property,
__metadata("design:type", String)
], ListItem.prototype, "identifier", void 0);
return ListItem;
})();
export { ListItem };
let List = /** @class */ (() => {
class List extends Superview {
constructor() {
super(...arguments);
this.cachedViews = new Map;
allSubviews() {
if (this.loadMoreView) {
return [...this.cachedViews.values(), this.loadMoreView];
}
else {
return this.cachedViews.values();
}
}
scrollToItem(context, index, config) {
const animated = config === null || config === void 0 ? void 0 : config.animated;
return this.nativeChannel(context, 'scrollToItem')({ index, animated, });
}
reset() {
this.cachedViews.clear();
this.itemCount = 0;
}
getItem(itemIdx) {
let view = this.renderItem(itemIdx);
view.superview = this;
this.cachedViews.set(`${itemIdx}`, view);
return view;
}
isDirty() {
if (this.ignoreDirtyCallOnce) {
this.ignoreDirtyCallOnce = false;
this.itemCount = 0;
this.batchCount = 15;
}
allSubviews() {
if (this.loadMoreView) {
return [...this.cachedViews.values(), this.loadMoreView];
}
else {
return this.cachedViews.values();
}
}
scrollToItem(context, index, config) {
const animated = config === null || config === void 0 ? void 0 : config.animated;
return this.nativeChannel(context, 'scrollToItem')({ index, animated, });
}
reset() {
this.cachedViews.clear();
this.itemCount = 0;
}
getItem(itemIdx) {
let view = this.renderItem(itemIdx);
view.superview = this;
this.cachedViews.set(`${itemIdx}`, view);
return view;
}
isDirty() {
if (this.ignoreDirtyCallOnce) {
this.ignoreDirtyCallOnce = false;
//Ignore the dirty call once.
return false;
}
return super.isDirty();
}
renderBunchedItems(start, length) {
this.ignoreDirtyCallOnce = true;
return new Array(Math.max(0, Math.min(length, this.itemCount - start))).fill(0).map((_, idx) => {
const listItem = this.getItem(start + idx);
return listItem.toModel();
});
}
toModel() {
if (this.loadMoreView) {
this.dirtyProps['loadMoreView'] = this.loadMoreView.viewId;
}
return super.toModel();
//Ignore the dirty call once.
return false;
}
return super.isDirty();
}
__decorate([
Property,
__metadata("design:type", Object)
], List.prototype, "itemCount", void 0);
__decorate([
Property,
__metadata("design:type", Function)
], List.prototype, "renderItem", void 0);
__decorate([
Property,
__metadata("design:type", Object)
], List.prototype, "batchCount", void 0);
__decorate([
Property,
__metadata("design:type", Function)
], List.prototype, "onLoadMore", void 0);
__decorate([
Property,
__metadata("design:type", Boolean)
], List.prototype, "loadMore", void 0);
__decorate([
Property,
__metadata("design:type", ListItem)
], List.prototype, "loadMoreView", void 0);
__decorate([
Property,
__metadata("design:type", Function)
], List.prototype, "onScroll", void 0);
__decorate([
Property,
__metadata("design:type", Function)
], List.prototype, "onScrollEnd", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], List.prototype, "scrolledPosition", void 0);
return List;
})();
export { List };
renderBunchedItems(start, length) {
this.ignoreDirtyCallOnce = true;
return new Array(Math.max(0, Math.min(length, this.itemCount - start))).fill(0).map((_, idx) => {
const listItem = this.getItem(start + idx);
return listItem.toModel();
});
}
toModel() {
if (this.loadMoreView) {
this.dirtyProps['loadMoreView'] = this.loadMoreView.viewId;
}
return super.toModel();
}
}
__decorate([
Property,
__metadata("design:type", Object)
], List.prototype, "itemCount", void 0);
__decorate([
Property,
__metadata("design:type", Function)
], List.prototype, "renderItem", void 0);
__decorate([
Property,
__metadata("design:type", Object)
], List.prototype, "batchCount", void 0);
__decorate([
Property,
__metadata("design:type", Function)
], List.prototype, "onLoadMore", void 0);
__decorate([
Property,
__metadata("design:type", Boolean)
], List.prototype, "loadMore", void 0);
__decorate([
Property,
__metadata("design:type", ListItem)
], List.prototype, "loadMoreView", void 0);
__decorate([
Property,
__metadata("design:type", Function)
], List.prototype, "onScroll", void 0);
__decorate([
Property,
__metadata("design:type", Function)
], List.prototype, "onScrollEnd", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], List.prototype, "scrolledPosition", void 0);
export function list(config) {
const ret = new List;
for (let key in config) {

View File

@ -23,22 +23,18 @@ var __metadata = (this && this.__metadata) || function (k, v) {
* limitations under the License.
*/
import { Group, Property } from '../ui/view';
let NestedSlider = /** @class */ (() => {
class NestedSlider extends Group {
addSlideItem(view) {
this.addChild(view);
}
slidePage(context, page, smooth = false) {
return this.nativeChannel(context, "slidePage")({ page, smooth });
}
getSlidedPage(context) {
return this.nativeChannel(context, "getSlidedPage")();
}
export class NestedSlider extends Group {
addSlideItem(view) {
this.addChild(view);
}
__decorate([
Property,
__metadata("design:type", Function)
], NestedSlider.prototype, "onPageSlided", void 0);
return NestedSlider;
})();
export { NestedSlider };
slidePage(context, page, smooth = false) {
return this.nativeChannel(context, "slidePage")({ page, smooth });
}
getSlidedPage(context) {
return this.nativeChannel(context, "getSlidedPage")();
}
}
__decorate([
Property,
__metadata("design:type", Function)
], NestedSlider.prototype, "onPageSlided", void 0);

View File

@ -9,40 +9,36 @@ var __metadata = (this && this.__metadata) || function (k, v) {
};
import { Property, Superview } from "../ui/view";
import { layoutConfig } from "../util/layoutconfig";
let Refreshable = /** @class */ (() => {
class Refreshable extends Superview {
allSubviews() {
const ret = [this.content];
if (this.header) {
ret.push(this.header);
}
return ret;
}
setRefreshable(context, refreshable) {
return this.nativeChannel(context, 'setRefreshable')(refreshable);
}
setRefreshing(context, refreshing) {
return this.nativeChannel(context, 'setRefreshing')(refreshing);
}
isRefreshable(context) {
return this.nativeChannel(context, 'isRefreshable')();
}
isRefreshing(context) {
return this.nativeChannel(context, 'isRefreshing')();
}
toModel() {
this.dirtyProps.content = this.content.viewId;
this.dirtyProps.header = (this.header || {}).viewId;
return super.toModel();
export class Refreshable extends Superview {
allSubviews() {
const ret = [this.content];
if (this.header) {
ret.push(this.header);
}
return ret;
}
__decorate([
Property,
__metadata("design:type", Function)
], Refreshable.prototype, "onRefresh", void 0);
return Refreshable;
})();
export { Refreshable };
setRefreshable(context, refreshable) {
return this.nativeChannel(context, 'setRefreshable')(refreshable);
}
setRefreshing(context, refreshing) {
return this.nativeChannel(context, 'setRefreshing')(refreshing);
}
isRefreshable(context) {
return this.nativeChannel(context, 'isRefreshable')();
}
isRefreshing(context) {
return this.nativeChannel(context, 'isRefreshing')();
}
toModel() {
this.dirtyProps.content = this.content.viewId;
this.dirtyProps.header = (this.header || {}).viewId;
return super.toModel();
}
}
__decorate([
Property,
__metadata("design:type", Function)
], Refreshable.prototype, "onRefresh", void 0);
export function refreshable(config) {
const ret = new Refreshable;
ret.layoutConfig = layoutConfig().fit();

View File

@ -35,34 +35,30 @@ export function scroller(content, config) {
v.content = content;
});
}
let Scroller = /** @class */ (() => {
class Scroller extends Superview {
allSubviews() {
return [this.content];
}
toModel() {
this.dirtyProps.content = this.content.viewId;
return super.toModel();
}
scrollTo(context, offset, animated) {
return this.nativeChannel(context, "scrollTo")({ offset, animated });
}
scrollBy(context, offset, animated) {
return this.nativeChannel(context, "scrollBy")({ offset, animated });
}
export class Scroller extends Superview {
allSubviews() {
return [this.content];
}
__decorate([
Property,
__metadata("design:type", Object)
], Scroller.prototype, "contentOffset", void 0);
__decorate([
Property,
__metadata("design:type", Function)
], Scroller.prototype, "onScroll", void 0);
__decorate([
Property,
__metadata("design:type", Function)
], Scroller.prototype, "onScrollEnd", void 0);
return Scroller;
})();
export { Scroller };
toModel() {
this.dirtyProps.content = this.content.viewId;
return super.toModel();
}
scrollTo(context, offset, animated) {
return this.nativeChannel(context, "scrollTo")({ offset, animated });
}
scrollBy(context, offset, animated) {
return this.nativeChannel(context, "scrollBy")({ offset, animated });
}
}
__decorate([
Property,
__metadata("design:type", Object)
], Scroller.prototype, "contentOffset", void 0);
__decorate([
Property,
__metadata("design:type", Function)
], Scroller.prototype, "onScroll", void 0);
__decorate([
Property,
__metadata("design:type", Function)
], Scroller.prototype, "onScrollEnd", void 0);

View File

@ -25,79 +25,71 @@ var __metadata = (this && this.__metadata) || function (k, v) {
import { Superview, View, Property } from "../ui/view";
import { Stack } from "./layouts";
import { layoutConfig } from "../util/layoutconfig";
let SlideItem = /** @class */ (() => {
class SlideItem extends Stack {
export class SlideItem extends Stack {
}
__decorate([
Property,
__metadata("design:type", String)
], SlideItem.prototype, "identifier", void 0);
export class Slider extends Superview {
constructor() {
super(...arguments);
this.cachedViews = new Map;
this.ignoreDirtyCallOnce = false;
this.itemCount = 0;
this.batchCount = 3;
}
__decorate([
Property,
__metadata("design:type", String)
], SlideItem.prototype, "identifier", void 0);
return SlideItem;
})();
export { SlideItem };
let Slider = /** @class */ (() => {
class Slider extends Superview {
constructor() {
super(...arguments);
this.cachedViews = new Map;
allSubviews() {
return this.cachedViews.values();
}
getItem(itemIdx) {
let view = this.renderPage(itemIdx);
view.superview = this;
this.cachedViews.set(`${itemIdx}`, view);
return view;
}
isDirty() {
if (this.ignoreDirtyCallOnce) {
this.ignoreDirtyCallOnce = false;
this.itemCount = 0;
this.batchCount = 3;
}
allSubviews() {
return this.cachedViews.values();
}
getItem(itemIdx) {
let view = this.renderPage(itemIdx);
view.superview = this;
this.cachedViews.set(`${itemIdx}`, view);
return view;
}
isDirty() {
if (this.ignoreDirtyCallOnce) {
this.ignoreDirtyCallOnce = false;
//Ignore the dirty call once.
return false;
}
return super.isDirty();
}
renderBunchedItems(start, length) {
this.ignoreDirtyCallOnce = true;
return new Array(Math.min(length, this.itemCount - start)).fill(0).map((_, idx) => {
const slideItem = this.getItem(start + idx);
return slideItem.toModel();
});
}
slidePage(context, page, smooth = false) {
return this.nativeChannel(context, "slidePage")({ page, smooth });
}
getSlidedPage(context) {
return this.nativeChannel(context, "getSlidedPage")();
//Ignore the dirty call once.
return false;
}
return super.isDirty();
}
__decorate([
Property,
__metadata("design:type", Object)
], Slider.prototype, "itemCount", void 0);
__decorate([
Property,
__metadata("design:type", Function)
], Slider.prototype, "renderPage", void 0);
__decorate([
Property,
__metadata("design:type", Object)
], Slider.prototype, "batchCount", void 0);
__decorate([
Property,
__metadata("design:type", Function)
], Slider.prototype, "onPageSlided", void 0);
__decorate([
Property,
__metadata("design:type", Boolean)
], Slider.prototype, "loop", void 0);
return Slider;
})();
export { Slider };
renderBunchedItems(start, length) {
this.ignoreDirtyCallOnce = true;
return new Array(Math.min(length, this.itemCount - start)).fill(0).map((_, idx) => {
const slideItem = this.getItem(start + idx);
return slideItem.toModel();
});
}
slidePage(context, page, smooth = false) {
return this.nativeChannel(context, "slidePage")({ page, smooth });
}
getSlidedPage(context) {
return this.nativeChannel(context, "getSlidedPage")();
}
}
__decorate([
Property,
__metadata("design:type", Object)
], Slider.prototype, "itemCount", void 0);
__decorate([
Property,
__metadata("design:type", Function)
], Slider.prototype, "renderPage", void 0);
__decorate([
Property,
__metadata("design:type", Object)
], Slider.prototype, "batchCount", void 0);
__decorate([
Property,
__metadata("design:type", Function)
], Slider.prototype, "onPageSlided", void 0);
__decorate([
Property,
__metadata("design:type", Boolean)
], Slider.prototype, "loop", void 0);
export function slider(config) {
const ret = new Slider;
for (let key in config) {

View File

@ -25,32 +25,28 @@ var __metadata = (this && this.__metadata) || function (k, v) {
import { View, Property } from "../ui/view";
import { Color } from "../util/color";
import { layoutConfig } from "../util/index.util";
let Switch = /** @class */ (() => {
class Switch extends View {
}
__decorate([
Property,
__metadata("design:type", Boolean)
], Switch.prototype, "state", void 0);
__decorate([
Property,
__metadata("design:type", Function)
], Switch.prototype, "onSwitch", void 0);
__decorate([
Property,
__metadata("design:type", Color)
], Switch.prototype, "offTintColor", void 0);
__decorate([
Property,
__metadata("design:type", Color)
], Switch.prototype, "onTintColor", void 0);
__decorate([
Property,
__metadata("design:type", Color)
], Switch.prototype, "thumbTintColor", void 0);
return Switch;
})();
export { Switch };
export class Switch extends View {
}
__decorate([
Property,
__metadata("design:type", Boolean)
], Switch.prototype, "state", void 0);
__decorate([
Property,
__metadata("design:type", Function)
], Switch.prototype, "onSwitch", void 0);
__decorate([
Property,
__metadata("design:type", Color)
], Switch.prototype, "offTintColor", void 0);
__decorate([
Property,
__metadata("design:type", Color)
], Switch.prototype, "onTintColor", void 0);
__decorate([
Property,
__metadata("design:type", Color)
], Switch.prototype, "thumbTintColor", void 0);
export function switchView(config) {
const ret = new Switch;
ret.layoutConfig = layoutConfig().just();

View File

@ -33,68 +33,64 @@ export var TruncateAt;
TruncateAt[TruncateAt["Start"] = 2] = "Start";
TruncateAt[TruncateAt["Clip"] = 3] = "Clip";
})(TruncateAt || (TruncateAt = {}));
let Text = /** @class */ (() => {
class Text extends View {
}
__decorate([
Property,
__metadata("design:type", String)
], Text.prototype, "text", void 0);
__decorate([
Property,
__metadata("design:type", Color)
], Text.prototype, "textColor", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], Text.prototype, "textSize", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], Text.prototype, "maxLines", void 0);
__decorate([
Property,
__metadata("design:type", Gravity)
], Text.prototype, "textAlignment", void 0);
__decorate([
Property,
__metadata("design:type", String)
], Text.prototype, "fontStyle", void 0);
__decorate([
Property,
__metadata("design:type", String)
], Text.prototype, "font", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], Text.prototype, "maxWidth", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], Text.prototype, "maxHeight", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], Text.prototype, "lineSpacing", void 0);
__decorate([
Property,
__metadata("design:type", Boolean)
], Text.prototype, "strikethrough", void 0);
__decorate([
Property,
__metadata("design:type", Boolean)
], Text.prototype, "underline", void 0);
__decorate([
Property,
__metadata("design:type", String)
], Text.prototype, "htmlText", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], Text.prototype, "truncateAt", void 0);
return Text;
})();
export { Text };
export class Text extends View {
}
__decorate([
Property,
__metadata("design:type", String)
], Text.prototype, "text", void 0);
__decorate([
Property,
__metadata("design:type", Color)
], Text.prototype, "textColor", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], Text.prototype, "textSize", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], Text.prototype, "maxLines", void 0);
__decorate([
Property,
__metadata("design:type", Gravity)
], Text.prototype, "textAlignment", void 0);
__decorate([
Property,
__metadata("design:type", String)
], Text.prototype, "fontStyle", void 0);
__decorate([
Property,
__metadata("design:type", String)
], Text.prototype, "font", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], Text.prototype, "maxWidth", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], Text.prototype, "maxHeight", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], Text.prototype, "lineSpacing", void 0);
__decorate([
Property,
__metadata("design:type", Boolean)
], Text.prototype, "strikethrough", void 0);
__decorate([
Property,
__metadata("design:type", Boolean)
], Text.prototype, "underline", void 0);
__decorate([
Property,
__metadata("design:type", String)
], Text.prototype, "htmlText", void 0);
__decorate([
Property,
__metadata("design:type", Number)
], Text.prototype, "truncateAt", void 0);
export function text(config) {
const ret = new Text;
ret.layoutConfig = layoutConfig().fit();

View File

@ -38,7 +38,6 @@ export abstract class ViewModel<M extends Object, V extends ViewHolder> {
getViewHolder() {
return this.viewHolder;
}
updateState(setter: Setter<M>) {
setter(this.state)
this.onBind(this.state, this.viewHolder)

2298
doric-web/dist/index.js vendored

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long