initial commit

This commit is contained in:
Vladimir Enchev
2015-07-14 14:48:41 +03:00
parent d49d3b07c7
commit 57312ef1f3
6 changed files with 194 additions and 3 deletions

View File

@@ -0,0 +1,23 @@
import definition = require("ui/html-view");
import dependencyObservable = require("ui/core/dependency-observable");
import proxy = require("ui/core/proxy");
import view = require("ui/core/view");
export class HtmlView extends view.View implements definition.HtmlView {
public static htmlProperty = new dependencyObservable.Property(
"html",
"HtmlView",
new proxy.PropertyMetadata(false, dependencyObservable.PropertyMetadataSettings.AffectsLayout)
);
constructor(options?: definition.Options) {
super(options);
}
get html(): string {
return this._getValue(HtmlView.htmlProperty);
}
set html(value: string) {
this._setValue(HtmlView.htmlProperty, value);
}
}

View File

@@ -0,0 +1,34 @@
import common = require("ui/html-view/html-view-common");
import dependencyObservable = require("ui/core/dependency-observable");
import proxy = require("ui/core/proxy");
import types = require("utils/types");
function onHtmlPropertyChanged(data: dependencyObservable.PropertyChangeData) {
var view = <HtmlView>data.object;
if (!view.android) {
return;
}
if (types.isString(data.newValue)) {
view.android.setText(<any>android.text.Html.fromHtml(data.newValue));
}
}
// register the setNativeValue callback
(<proxy.PropertyMetadata>common.HtmlView.htmlProperty.metadata).onSetNativeValue = onHtmlPropertyChanged;
// merge the exports of the common file with the exports of this file
declare var exports;
require("utils/module-merge").merge(common, exports);
export class HtmlView extends common.HtmlView {
private _android: android.widget.TextView;
get android(): android.widget.TextView {
return this._android;
}
public _createUI() {
this._android = new android.widget.TextView(this._context);
}
}

45
ui/html-view/html-view.d.ts vendored Normal file
View File

@@ -0,0 +1,45 @@
/**
* Contains the HtmlView class, which represents a standard html view widget.
*/
declare module "ui/html-view" {
import view = require("ui/core/view");
import dependencyObservable = require("ui/core/dependency-observable");
/**
* Represents a view with html content.
*/
export class HtmlView extends view.View {
/**
* Dependency property used to support binding operations for the html of the current HtmlView instance.
*/
public static htmlProperty: dependencyObservable.Property;
constructor(options?: Options);
/**
* Gets the native [android widget](http://developer.android.com/reference/android/widget/TextView.html) that represents the user interface for this component. Valid only when running on Android OS.
*/
android: android.widget.TextView;
/**
* Gets the native [UILabel](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UILabel_Class/) that represents the user interface for this component. Valid only when running on iOS.
*/
ios: UILabel;
/**
* Gets or sets html string for the HtmlView.
*/
html: string;
}
/**
* Provides a set of most common options for creating a HtmlView.
*/
export interface Options extends view.Options {
/**
* Gets or sets the html content of a HtmlView.
*/
html?: string;
}
}

View File

@@ -0,0 +1,82 @@
import common = require("ui/html-view/html-view-common");
import definition = require("ui/html-view");
import dependencyObservable = require("ui/core/dependency-observable");
import proxy = require("ui/core/proxy");
import utils = require("utils/utils");
import types = require("utils/types");
import viewModule = require("ui/core/view");
function onHtmlPropertyChanged(data: dependencyObservable.PropertyChangeData) {
var view = <HtmlView>data.object;
if (!view.android) {
return;
}
if (types.isString(data.newValue)) {
var htmlString = NSString.stringWithString(data.newValue);
var nsData = htmlString.dataUsingEncoding(NSUnicodeStringEncoding);
var options = NSDictionary.new();
options.setValueForKey(NSDocumentTypeDocumentAttribute, NSHTMLTextDocumentType);
view.ios.attributedText = NSAttributedString.alloc().initWithDataOptionsDocumentAttributesError(nsData, options, null);
}
}
// register the setNativeValue callback
(<proxy.PropertyMetadata>common.HtmlView.htmlProperty.metadata).onSetNativeValue = onHtmlPropertyChanged;
// merge the exports of the common file with the exports of this file
declare var exports;
require("utils/module-merge").merge(common, exports);
export class HtmlView extends common.HtmlView {
private _ios: UILabel;
constructor(options?: definition.Options) {
super(options);
this._ios = new UILabel();
super._prepareNativeView(this._ios);
}
get ios(): UILabel {
return this._ios;
}
get _nativeView(): UILabel {
return this._ios;
}
public onMeasure(widthMeasureSpec: number, heightMeasureSpec: number): void {
var nativeView = this._nativeView;
if (nativeView) {
var width = utils.layout.getMeasureSpecSize(widthMeasureSpec);
var widthMode = utils.layout.getMeasureSpecMode(widthMeasureSpec);
var height = utils.layout.getMeasureSpecSize(heightMeasureSpec);
var heightMode = utils.layout.getMeasureSpecMode(heightMeasureSpec);
if (widthMode === utils.layout.UNSPECIFIED) {
width = Number.POSITIVE_INFINITY;
}
if (heightMode === utils.layout.UNSPECIFIED) {
height = Number.POSITIVE_INFINITY;
}
var nativeSize = nativeView.sizeThatFits(CGSizeMake(width, height));
var labelWidth = nativeSize.width;
//if (!this.textWrap) {
labelWidth = Math.min(labelWidth, width);
//}
var measureWidth = Math.max(labelWidth, this.minWidth);
var measureHeight = Math.max(nativeSize.height, this.minHeight);
var widthAndState = viewModule.View.resolveSizeAndState(measureWidth, width, widthMode, 0);
var heightAndState = viewModule.View.resolveSizeAndState(measureHeight, height, heightMode, 0);
this.setMeasuredDimension(widthAndState, heightAndState);
}
}
}

View File

@@ -0,0 +1,2 @@
{ "name" : "html-view",
"main" : "html-view.js" }