feat:Text add truncateAt

This commit is contained in:
pengfei.zhou 2020-04-27 18:46:39 +08:00 committed by osborn
parent a23aa8df0f
commit fdff5af3d9
11 changed files with 118 additions and 2 deletions

View File

@ -172,6 +172,24 @@ public class TextNode extends ViewNode<TextView> {
new CustomTagHandler()));
}
break;
case "truncateAt":
if (prop.isNumber()) {
switch (prop.asNumber().toInt()) {
case 1:
view.setEllipsize(TextUtils.TruncateAt.MIDDLE);
break;
case 2:
view.setEllipsize(TextUtils.TruncateAt.START);
break;
case 3:
view.setEllipsize(null);
break;
default:
view.setEllipsize(TextUtils.TruncateAt.END);
break;
}
}
break;
default:
super.blend(view, name, prop);
break;

View File

@ -50,6 +50,7 @@ @implementation DoricTextNode
- (UILabel *)build {
return [[[DoricTextView alloc] init] also:^(DoricTextView *it) {
it.textAlignment = NSTextAlignmentCenter;
[self ensureParagraphStyle];
}];
}
@ -78,7 +79,7 @@ - (void)blendView:(UILabel *)view forPropName:(NSString *)name propValue:(id)pro
}
if (self.paragraphStyle) {
self.paragraphStyle.alignment = alignment;
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:view.text];
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:view.text ?: @""];
[attributedString addAttribute:NSParagraphStyleAttributeName value:self.paragraphStyle range:NSMakeRange(0, [attributedString length])];
view.attributedText = attributedString;
} else {
@ -133,6 +134,27 @@ - (void)blendView:(UILabel *)view forPropName:(NSString *)name propValue:(id)pro
documentAttributes:nil
error:nil];
view.attributedText = attStr;
} else if ([name isEqualToString:@"truncateAt"]) {
[prop also:^(NSNumber *truncateAt) {
[[self ensureParagraphStyle] also:^(NSMutableParagraphStyle *it) {
switch (truncateAt.integerValue) {
case 1:
it.lineBreakMode = NSLineBreakByTruncatingMiddle;
break;
case 2:
it.lineBreakMode = NSLineBreakByTruncatingHead;
break;
case 3:
it.lineBreakMode = NSLineBreakByClipping;
break;
default:
it.lineBreakMode = NSLineBreakByTruncatingTail;
break;
}
[self reloadParagraphStyle];
}];
}];
} else {
[super blendView:view forPropName:name propValue:prop];
}
@ -142,6 +164,7 @@ - (NSMutableParagraphStyle *)ensureParagraphStyle {
if (self.paragraphStyle == nil) {
self.paragraphStyle = [NSMutableParagraphStyle new];
self.paragraphStyle.alignment = self.view.textAlignment;
self.paragraphStyle.lineBreakMode = NSLineBreakByTruncatingTail;
}
return self.paragraphStyle;
}

View File

@ -1647,6 +1647,12 @@ var __decorate$3 = (undefined && undefined.__decorate) || function (decorators,
var __metadata$3 = (undefined && undefined.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") { return Reflect.metadata(k, v); }
};
(function (TruncateAt) {
TruncateAt[TruncateAt["End"] = 0] = "End";
TruncateAt[TruncateAt["Middle"] = 1] = "Middle";
TruncateAt[TruncateAt["Start"] = 2] = "Start";
TruncateAt[TruncateAt["Clip"] = 3] = "Clip";
})(exports.TruncateAt || (exports.TruncateAt = {}));
var Text = /** @class */ (function (_super) {
__extends$3(Text, _super);
function Text() {
@ -1704,6 +1710,10 @@ var Text = /** @class */ (function (_super) {
Property,
__metadata$3("design:type", String)
], Text.prototype, "htmlText", void 0);
__decorate$3([
Property,
__metadata$3("design:type", Number)
], Text.prototype, "truncateAt", void 0);
return Text;
}(View));
function text(config) {

View File

@ -1218,6 +1218,12 @@ var __decorate$3 = (undefined && undefined.__decorate) || function (decorators,
var __metadata$3 = (undefined && undefined.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
(function (TruncateAt) {
TruncateAt[TruncateAt["End"] = 0] = "End";
TruncateAt[TruncateAt["Middle"] = 1] = "Middle";
TruncateAt[TruncateAt["Start"] = 2] = "Start";
TruncateAt[TruncateAt["Clip"] = 3] = "Clip";
})(exports.TruncateAt || (exports.TruncateAt = {}));
class Text extends View {
}
__decorate$3([
@ -1272,6 +1278,10 @@ __decorate$3([
Property,
__metadata$3("design:type", String)
], Text.prototype, "htmlText", void 0);
__decorate$3([
Property,
__metadata$3("design:type", Number)
], Text.prototype, "truncateAt", void 0);
function text(config) {
const ret = new Text;
ret.layoutConfig = layoutConfig().fit();

View File

@ -2677,6 +2677,12 @@ var __decorate$3 = (undefined && undefined.__decorate) || function (decorators,
var __metadata$3 = (undefined && undefined.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
(function (TruncateAt) {
TruncateAt[TruncateAt["End"] = 0] = "End";
TruncateAt[TruncateAt["Middle"] = 1] = "Middle";
TruncateAt[TruncateAt["Start"] = 2] = "Start";
TruncateAt[TruncateAt["Clip"] = 3] = "Clip";
})(exports.TruncateAt || (exports.TruncateAt = {}));
class Text extends View {
}
__decorate$3([
@ -2731,6 +2737,10 @@ __decorate$3([
Property,
__metadata$3("design:type", String)
], Text.prototype, "htmlText", void 0);
__decorate$3([
Property,
__metadata$3("design:type", Number)
], Text.prototype, "truncateAt", void 0);
function text(config) {
const ret = new Text;
ret.layoutConfig = layoutConfig().fit();

7
doric-js/index.d.ts vendored
View File

@ -418,6 +418,12 @@ declare module 'doric/lib/src/widget/text' {
import { View } from "doric/lib/src/ui/view";
import { Color } from "doric/lib/src/util/color";
import { Gravity } from "doric/lib/src/util/gravity";
export enum TruncateAt {
End = 0,
Middle = 1,
Start = 2,
Clip = 3
}
export class Text extends View {
text?: string;
textColor?: Color;
@ -432,6 +438,7 @@ declare module 'doric/lib/src/widget/text' {
strikethrough?: boolean;
underline?: boolean;
htmlText?: string;
truncateAt?: TruncateAt;
}
export function text(config: Partial<Text>): Text;
}

View File

@ -1,6 +1,12 @@
import { View } from "../ui/view";
import { Color } from "../util/color";
import { Gravity } from "../util/gravity";
export declare enum TruncateAt {
End = 0,
Middle = 1,
Start = 2,
Clip = 3
}
export declare class Text extends View {
text?: string;
textColor?: Color;
@ -15,5 +21,6 @@ export declare class Text extends View {
strikethrough?: boolean;
underline?: boolean;
htmlText?: string;
truncateAt?: TruncateAt;
}
export declare function text(config: Partial<Text>): Text;

View File

@ -26,6 +26,13 @@ import { View, Property } from "../ui/view";
import { Color } from "../util/color";
import { Gravity } from "../util/gravity";
import { layoutConfig } from "../util/layoutconfig";
export var TruncateAt;
(function (TruncateAt) {
TruncateAt[TruncateAt["End"] = 0] = "End";
TruncateAt[TruncateAt["Middle"] = 1] = "Middle";
TruncateAt[TruncateAt["Start"] = 2] = "Start";
TruncateAt[TruncateAt["Clip"] = 3] = "Clip";
})(TruncateAt || (TruncateAt = {}));
export class Text extends View {
}
__decorate([
@ -80,6 +87,10 @@ __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

@ -18,6 +18,13 @@ import { Color } from "../util/color"
import { Gravity } from "../util/gravity"
import { layoutConfig } from "../util/layoutconfig"
export enum TruncateAt {
End = 0,
Middle = 1,
Start = 2,
Clip = 3,
}
export class Text extends View {
@Property
text?: string
@ -57,6 +64,9 @@ export class Text extends View {
@Property
htmlText?: string
@Property
truncateAt?: TruncateAt
}
export function text(config: Partial<Text>) {

View File

@ -2735,6 +2735,12 @@ var __decorate$3 = (undefined && undefined.__decorate) || function (decorators,
var __metadata$3 = (undefined && undefined.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
(function (TruncateAt) {
TruncateAt[TruncateAt["End"] = 0] = "End";
TruncateAt[TruncateAt["Middle"] = 1] = "Middle";
TruncateAt[TruncateAt["Start"] = 2] = "Start";
TruncateAt[TruncateAt["Clip"] = 3] = "Clip";
})(exports.TruncateAt || (exports.TruncateAt = {}));
class Text extends View {
}
__decorate$3([
@ -2789,6 +2795,10 @@ __decorate$3([
Property,
__metadata$3("design:type", String)
], Text.prototype, "htmlText", void 0);
__decorate$3([
Property,
__metadata$3("design:type", Number)
], Text.prototype, "truncateAt", void 0);
function text(config) {
const ret = new Text;
ret.layoutConfig = layoutConfig().fit();

File diff suppressed because one or more lines are too long