| 28 |
28 |
| 29 #import "webview.h" |
29 #import "webview.h" |
| 30 #import "Container.h" |
30 #import "Container.h" |
| 31 |
31 |
| 32 UIWIDGET ui_webview_create(UiObject *obj, UiWebviewArgs *args) { |
32 UIWIDGET ui_webview_create(UiObject *obj, UiWebviewArgs *args) { |
| |
33 UiVar *var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_GENERIC); |
| |
34 |
| 33 WKWebView *webview = [[WKWebView alloc]init]; |
35 WKWebView *webview = [[WKWebView alloc]init]; |
| 34 |
36 |
| 35 UiLayout layout = UI_ARGS2LAYOUT(args); |
37 UiLayout layout = UI_ARGS2LAYOUT(args); |
| 36 ui_container_add(obj, webview, &layout); |
38 ui_container_add(obj, webview, &layout); |
| 37 |
39 |
| 38 UiVar *var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_GENERIC); |
|
| 39 if(var) { |
40 if(var) { |
| 40 UiGeneric *value = var->value; |
41 UiGeneric *value = var->value; |
| 41 value->get = ui_webview_get; |
42 value->get = ui_webview_get; |
| 42 value->get_type = ui_webview_get_type; |
43 value->get_type = ui_webview_get_type; |
| 43 value->set = ui_webview_set; |
44 value->set = ui_webview_set; |
| 59 } |
60 } |
| 60 |
61 |
| 61 UiWebViewData* ui_webview_data_clone(UiWebViewData *data) { |
62 UiWebViewData* ui_webview_data_clone(UiWebViewData *data) { |
| 62 UiWebViewData *newdata = malloc(sizeof(UiWebViewData)); |
63 UiWebViewData *newdata = malloc(sizeof(UiWebViewData)); |
| 63 memset(newdata, 0, sizeof(UiWebViewData)); |
64 memset(newdata, 0, sizeof(UiWebViewData)); |
| |
65 newdata->zoom = 1; |
| |
66 newdata->javascript = TRUE; |
| 64 |
67 |
| 65 if(data) { |
68 if(data) { |
| 66 newdata->uri = data->uri ? strdup(data->uri) : NULL; |
69 newdata->uri = data->uri ? strdup(data->uri) : NULL; |
| 67 newdata->mimetype = data->mimetype ? strdup(data->mimetype) : NULL; |
70 newdata->mimetype = data->mimetype ? strdup(data->mimetype) : NULL; |
| 68 newdata->encoding = data->encoding ? strdup(data->encoding) : NULL; |
71 newdata->encoding = data->encoding ? strdup(data->encoding) : NULL; |
| 96 WKWebView *webview = (__bridge WKWebView*)g->obj; |
99 WKWebView *webview = (__bridge WKWebView*)g->obj; |
| 97 |
100 |
| 98 if(data->type == WEBVIEW_CONTENT_URL) { |
101 if(data->type == WEBVIEW_CONTENT_URL) { |
| 99 (void)ui_webview_get_uri(g); // this updates data->uri |
102 (void)ui_webview_get_uri(g); // this updates data->uri |
| 100 } |
103 } |
| |
104 data->zoom = webview.pageZoom; |
| 101 |
105 |
| 102 return ui_webview_data_clone(g->value); |
106 return ui_webview_data_clone(g->value); |
| 103 } |
107 } |
| 104 |
108 |
| 105 const char* ui_webview_get_type(UiGeneric *g) { |
109 const char* ui_webview_get_type(UiGeneric *g) { |
| 116 ui_webview_data_free(g->value); |
120 ui_webview_data_free(g->value); |
| 117 g->value = ui_webview_data_clone(data); |
121 g->value = ui_webview_data_clone(data); |
| 118 |
122 |
| 119 WKWebView *webview = (__bridge WKWebView*)g->obj; |
123 WKWebView *webview = (__bridge WKWebView*)g->obj; |
| 120 UiWebViewData *webd = data; |
124 UiWebViewData *webd = data; |
| 121 if(webd->type == WEBVIEW_CONTENT_URL && webd->uri) { |
125 if(webd->type == WEBVIEW_CONTENT_URL) { |
| 122 NSURL *url = [NSURL URLWithString:[[NSString alloc] initWithUTF8String:webd->uri]]; |
126 const char *uri = webd->uri ? webd->uri : "about:blank"; |
| |
127 NSURL *url = [NSURL URLWithString:[[NSString alloc] initWithUTF8String:uri]]; |
| 123 if(url) { |
128 if(url) { |
| 124 NSURLRequest *req = [NSURLRequest requestWithURL:url]; |
129 NSURLRequest *req = [NSURLRequest requestWithURL:url]; |
| 125 if(req) { |
130 if(req) { |
| 126 [webview loadRequest:req]; |
131 [webview loadRequest:req]; |
| 127 } |
132 } |
| 128 } |
133 } |
| 129 } else if(webd->content) { |
134 } else { |
| 130 // TODO |
135 NSString *mimetype = [[NSString alloc]initWithUTF8String: webd->mimetype ? webd->mimetype : "text/plain"]; |
| 131 } |
136 NSString *encoding = [[NSString alloc]initWithUTF8String: webd->encoding ? webd->encoding : "UTF-8"]; |
| |
137 NSString *urlStr = [[NSString alloc]initWithUTF8String: webd->uri ? webd->uri : "file:///"]; |
| |
138 NSURL *url = [NSURL URLWithString:urlStr]; |
| |
139 NSData *content = [NSData dataWithBytes:webd->content length:webd->contentlength]; |
| |
140 if(!url) { |
| |
141 url = [NSURL URLWithString:@"about:blank"]; |
| |
142 } |
| |
143 [webview loadData:content MIMEType:mimetype characterEncodingName:encoding baseURL:url]; |
| |
144 } |
| |
145 |
| |
146 webview.pageZoom = webd->zoom; |
| 132 |
147 |
| 133 return 1; |
148 return 1; |
| 134 } |
149 } |
| 135 |
150 |
| 136 void ui_webview_destroy(UiGeneric *g) { |
151 void ui_webview_destroy(UiGeneric *g) { |
| 143 WKWebView *webview = (__bridge WKWebView*)g->obj; |
158 WKWebView *webview = (__bridge WKWebView*)g->obj; |
| 144 UiWebViewData *data = g->value; |
159 UiWebViewData *data = g->value; |
| 145 data->type = WEBVIEW_CONTENT_URL; |
160 data->type = WEBVIEW_CONTENT_URL; |
| 146 |
161 |
| 147 if(!url) { |
162 if(!url) { |
| 148 url = "abount:blank"; |
163 url = "about:blank"; |
| 149 } |
164 } |
| 150 |
165 |
| 151 NSURL *nsurl = [NSURL URLWithString:[[NSString alloc] initWithUTF8String:url]]; |
166 NSURL *nsurl = [NSURL URLWithString:[[NSString alloc] initWithUTF8String:url]]; |
| 152 if(nsurl) { |
167 if(nsurl) { |
| 153 NSURLRequest *req = [NSURLRequest requestWithURL:nsurl]; |
168 NSURLRequest *req = [NSURLRequest requestWithURL:nsurl]; |
| 242 } |
257 } |
| 243 return data->uri; |
258 return data->uri; |
| 244 } |
259 } |
| 245 |
260 |
| 246 void ui_webview_enable_javascript(UiGeneric *g, UiBool enable) { |
261 void ui_webview_enable_javascript(UiGeneric *g, UiBool enable) { |
| 247 |
262 // unsupported |
| 248 } |
263 } |
| 249 |
264 |
| 250 void ui_webview_set_zoom(UiGeneric *g, double zoom) { |
265 void ui_webview_set_zoom(UiGeneric *g, double zoom) { |
| 251 |
266 WKWebView *webview = (__bridge WKWebView*)g->obj; |
| |
267 webview.pageZoom = zoom; |
| 252 } |
268 } |
| 253 |
269 |
| 254 double ui_webview_get_zoom(UiGeneric *g) { |
270 double ui_webview_get_zoom(UiGeneric *g) { |
| 255 return 0; |
271 WKWebView *webview = (__bridge WKWebView*)g->obj; |
| 256 } |
272 return webview.pageZoom; |
| |
273 } |