You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by kf...@apache.org on 2017/08/10 12:44:32 UTC

[02/10] incubator-weex git commit: + [ios] add extend call native

+ [ios] add extend call native


Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/6225ed13
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/6225ed13
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/6225ed13

Branch: refs/heads/0.16-dev
Commit: 6225ed13d9ae3dda08c848abe3ba8f669037b296
Parents: b3e4049
Author: 齐山 <su...@163.com>
Authored: Thu Jul 27 12:16:51 2017 +0800
Committer: 齐山 <su...@163.com>
Committed: Thu Jul 27 12:16:51 2017 +0800

----------------------------------------------------------------------
 examples/vue/hello.vue                          | 54 ++++++++++++++++++--
 .../WeexDemo.xcodeproj/project.pbxproj          |  6 +++
 .../WeexDemo/WXExtendCallNativeTest.h           | 14 +++++
 .../WeexDemo/WXExtendCallNativeTest.m           | 36 +++++++++++++
 ios/sdk/WeexSDK.xcodeproj/project.pbxproj       |  8 +++
 ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m |  7 ++-
 .../Sources/Manager/WXExtendCallNativeManager.h | 15 ++++++
 .../Sources/Manager/WXExtendCallNativeManager.m | 28 ++++++++++
 .../Protocol/WXExtendCallNativeProtocol.h       | 22 +++++++-
 9 files changed, 182 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6225ed13/examples/vue/hello.vue
----------------------------------------------------------------------
diff --git a/examples/vue/hello.vue b/examples/vue/hello.vue
index 76272f7..e387e5a 100644
--- a/examples/vue/hello.vue
+++ b/examples/vue/hello.vue
@@ -1,5 +1,53 @@
+<!--
+  * <template>: html-like syntax
+  * CSS-like inline style
+  * <style scoped>: only support single-class selector
+  * <script>: define the behavior of component
+  * :attr data-binding support
+  * @xxx syntax to bind event with a component method
+-->
+
+<!--
+  notes:
+  * <template> only could have just one child
+  * the text node is only allowed as the child of <text> as the shorthand of its `value` attribute
+  * the style is not inherited from parent (for example: `font-size`)
+  * <script> support ECMAScript 5
+  * all component options assigns to `module.exports`
+-->
+
 <template>
-  <div>
-    <text style="font-size: 100px;">Hello World.</text>
+  <div class="wrapper" @click="update">
+    <image :src="logoUrl" class="logo"></image>
+    <text class="title">Hello {{target}}</text>
   </div>
-</template>
\ No newline at end of file
+</template>
+
+<style scoped>
+  .wrapper {align-items: center; margin-top: 120px;}
+  .title {font-size: 48px;}
+  .logo {width: 360px; height: 82px;}
+</style>
+
+<script>
+  var modal = weex.requireModule('modal')
+  module.exports = {
+    data: {
+      logoUrl: 'https://alibaba.github.io/weex/img/weex_logo_blue@3x.png',
+      target: 'World'
+    },
+    methods: {
+      update: function (e) {
+        this.target = 'Weex'
+        console.log('target:', this.target)
+        var dict = extendCallNative({
+          'className':'WXExtendCallNativeTest'
+        })
+        modal.toast({
+          'message': dict['value'],
+          'duration': 1000
+        })
+      }
+    }
+  }
+</script>

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6225ed13/ios/playground/WeexDemo.xcodeproj/project.pbxproj
----------------------------------------------------------------------
diff --git a/ios/playground/WeexDemo.xcodeproj/project.pbxproj b/ios/playground/WeexDemo.xcodeproj/project.pbxproj
index 76d1423..b9695e7 100644
--- a/ios/playground/WeexDemo.xcodeproj/project.pbxproj
+++ b/ios/playground/WeexDemo.xcodeproj/project.pbxproj
@@ -30,6 +30,7 @@
 		846FC8DB1E1B853600949E7D /* WXATViewHierarchyPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = DCABAFF21D029685001C8592 /* WXATViewHierarchyPlugin.m */; };
 		84D7CAC71CE3266C00D48D46 /* libsqlite3.0.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 7475ACA01CD8444A0044E96C /* libsqlite3.0.tbd */; };
 		8A0B5EFFF75BF82EA481983D /* libPods-WeexUITestDemo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E48C20F443AA337D1FE97622 /* libPods-WeexUITestDemo.a */; };
+		C47B78D21F299E27001D3B0C /* WXExtendCallNativeTest.m in Sources */ = {isa = PBXBuildFile; fileRef = C47B78D11F299E27001D3B0C /* WXExtendCallNativeTest.m */; };
 		DC20B8E61ECADA2500845F39 /* WXConfigCenterDefaultImpl.m in Sources */ = {isa = PBXBuildFile; fileRef = DC20B8E51ECADA2500845F39 /* WXConfigCenterDefaultImpl.m */; };
 		DC5B53691E8CED9400E02125 /* WXScannerHistoryVC.m in Sources */ = {isa = PBXBuildFile; fileRef = DC5B53681E8CED9400E02125 /* WXScannerHistoryVC.m */; };
 		DC5E503E1D0D97130059F0EB /* weex.png in Resources */ = {isa = PBXBuildFile; fileRef = DC5E503C1D0D97130059F0EB /* weex.png */; };
@@ -89,6 +90,8 @@
 		775BEE9A1C1E8ECC008D1629 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
 		84361D751CA10F8E00F43825 /* WeexUITestDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = WeexUITestDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };
 		9420131417A731ED089B0814 /* Pods-WeexDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WeexDemo.release.xcconfig"; path = "Pods/Target Support Files/Pods-WeexDemo/Pods-WeexDemo.release.xcconfig"; sourceTree = "<group>"; };
+		C47B78D01F299E27001D3B0C /* WXExtendCallNativeTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXExtendCallNativeTest.h; sourceTree = "<group>"; };
+		C47B78D11F299E27001D3B0C /* WXExtendCallNativeTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXExtendCallNativeTest.m; sourceTree = "<group>"; };
 		DC20B8E41ECADA2500845F39 /* WXConfigCenterDefaultImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXConfigCenterDefaultImpl.h; sourceTree = "<group>"; };
 		DC20B8E51ECADA2500845F39 /* WXConfigCenterDefaultImpl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXConfigCenterDefaultImpl.m; sourceTree = "<group>"; };
 		DC5B53671E8CED9400E02125 /* WXScannerHistoryVC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WXScannerHistoryVC.h; path = Scanner/WXScannerHistoryVC.h; sourceTree = "<group>"; };
@@ -250,6 +253,8 @@
 				747DF6661E2F176A005C53A8 /* UIView+UIThreadCheck.h */,
 				747DF6671E2F176A005C53A8 /* UIView+UIThreadCheck.m */,
 				7453E3641C9FA971001EB427 /* DemoDefine.h */,
+				C47B78D01F299E27001D3B0C /* WXExtendCallNativeTest.h */,
+				C47B78D11F299E27001D3B0C /* WXExtendCallNativeTest.m */,
 			);
 			name = Source;
 			sourceTree = "<group>";
@@ -574,6 +579,7 @@
 				775BEE801C1E8ECC008D1629 /* main.m in Sources */,
 				DCABAFFE1D029753001C8592 /* WXImgLoaderDefaultImpl.m in Sources */,
 				747DF6681E2F176A005C53A8 /* UIView+UIThreadCheck.m in Sources */,
+				C47B78D21F299E27001D3B0C /* WXExtendCallNativeTest.m in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6225ed13/ios/playground/WeexDemo/WXExtendCallNativeTest.h
----------------------------------------------------------------------
diff --git a/ios/playground/WeexDemo/WXExtendCallNativeTest.h b/ios/playground/WeexDemo/WXExtendCallNativeTest.h
new file mode 100644
index 0000000..50d2c2a
--- /dev/null
+++ b/ios/playground/WeexDemo/WXExtendCallNativeTest.h
@@ -0,0 +1,14 @@
+//
+//  WXExtendCallNativeTest.h
+//  WeexDemo
+//
+//  Created by 齐山 on 2017/7/27.
+//  Copyright © 2017年 taobao. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import "WXExtendCallNativeProtocol.h"
+
+@interface WXExtendCallNativeTest : NSObject<WXExtendCallNativeProtocol>
+
+@end

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6225ed13/ios/playground/WeexDemo/WXExtendCallNativeTest.m
----------------------------------------------------------------------
diff --git a/ios/playground/WeexDemo/WXExtendCallNativeTest.m b/ios/playground/WeexDemo/WXExtendCallNativeTest.m
new file mode 100644
index 0000000..afedde1
--- /dev/null
+++ b/ios/playground/WeexDemo/WXExtendCallNativeTest.m
@@ -0,0 +1,36 @@
+//
+//  WXExtendCallNativeTest.m
+//  WeexDemo
+//
+//  Created by 齐山 on 2017/7/27.
+//  Copyright © 2017年 taobao. All rights reserved.
+//
+
+#import "WXExtendCallNativeTest.h"
+
+@implementation WXExtendCallNativeTest
+
+#pragma mark -
+#pragma WXExtendCallNativeProtocol
+
++ (BOOL)checkParameters:(NSDictionary *)parameters
+{
+    if(!parameters || ![parameters isKindOfClass:[NSDictionary class]]){
+        return NO;
+    }
+    
+    if(!parameters[@"className"]){
+        return NO;
+    }
+    
+    return YES;
+}
+
+
++ (id)excuteCallNative:(NSDictionary *)parameters
+{
+    NSLog(@"weex test");
+    return @{@"value":@"test"};
+}
+
+@end

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6225ed13/ios/sdk/WeexSDK.xcodeproj/project.pbxproj
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK.xcodeproj/project.pbxproj b/ios/sdk/WeexSDK.xcodeproj/project.pbxproj
index 46f7adb..1238614 100644
--- a/ios/sdk/WeexSDK.xcodeproj/project.pbxproj
+++ b/ios/sdk/WeexSDK.xcodeproj/project.pbxproj
@@ -239,6 +239,8 @@
 		C43C03E81EC8ACA40044C7FF /* WXPrerenderManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C43C03E41EC8ACA40044C7FF /* WXPrerenderManager.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C43C03E91EC8ACA40044C7FF /* WXPrerenderManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C43C03E51EC8ACA40044C7FF /* WXPrerenderManager.m */; };
 		C4424E5B1F24DA3D009F52E2 /* WXExtendCallNativeProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = C4424E591F24DA3D009F52E2 /* WXExtendCallNativeProtocol.h */; };
+		C47B78CE1F2998EE001D3B0C /* WXExtendCallNativeManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C47B78CC1F2998EE001D3B0C /* WXExtendCallNativeManager.h */; };
+		C47B78CF1F2998EE001D3B0C /* WXExtendCallNativeManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C47B78CD1F2998EE001D3B0C /* WXExtendCallNativeManager.m */; };
 		C4B3D6D41E6954300013F38D /* WXEditComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = C4B3D6D21E6954300013F38D /* WXEditComponent.h */; };
 		C4B3D6D51E6954300013F38D /* WXEditComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = C4B3D6D31E6954300013F38D /* WXEditComponent.m */; };
 		C4B834271DE69B09007AD27E /* WXPickerModule.m in Sources */ = {isa = PBXBuildFile; fileRef = C4B834251DE69B09007AD27E /* WXPickerModule.m */; };
@@ -557,6 +559,8 @@
 		C43C03E41EC8ACA40044C7FF /* WXPrerenderManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXPrerenderManager.h; sourceTree = "<group>"; };
 		C43C03E51EC8ACA40044C7FF /* WXPrerenderManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXPrerenderManager.m; sourceTree = "<group>"; };
 		C4424E591F24DA3D009F52E2 /* WXExtendCallNativeProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXExtendCallNativeProtocol.h; sourceTree = "<group>"; };
+		C47B78CC1F2998EE001D3B0C /* WXExtendCallNativeManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXExtendCallNativeManager.h; sourceTree = "<group>"; };
+		C47B78CD1F2998EE001D3B0C /* WXExtendCallNativeManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXExtendCallNativeManager.m; sourceTree = "<group>"; };
 		C4B3D6D21E6954300013F38D /* WXEditComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXEditComponent.h; sourceTree = "<group>"; };
 		C4B3D6D31E6954300013F38D /* WXEditComponent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXEditComponent.m; sourceTree = "<group>"; };
 		C4B834251DE69B09007AD27E /* WXPickerModule.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXPickerModule.m; sourceTree = "<group>"; };
@@ -970,6 +974,8 @@
 				741081221CED6756001BC6E5 /* WXComponentFactory.m */,
 				DCAB35FC1D658EB700C0EA70 /* WXRuleManager.h */,
 				DCAB35FD1D658EB700C0EA70 /* WXRuleManager.m */,
+				C47B78CC1F2998EE001D3B0C /* WXExtendCallNativeManager.h */,
+				C47B78CD1F2998EE001D3B0C /* WXExtendCallNativeManager.m */,
 			);
 			path = Manager;
 			sourceTree = "<group>";
@@ -1259,6 +1265,7 @@
 				77D161621C02ED790010B15B /* WXLog.h in Headers */,
 				77D1614B1C02E3790010B15B /* WXConvert.h in Headers */,
 				59A596221CB6311F0012CD52 /* WXNavigatorModule.h in Headers */,
+				C47B78CE1F2998EE001D3B0C /* WXExtendCallNativeManager.h in Headers */,
 				745B2D6A1E5A8E1E0092D38A /* WXRecyclerComponent.h in Headers */,
 				749DC27B1D40827B009E1C91 /* WXMonitor.h in Headers */,
 				77E659DA1C07F594008B8775 /* WXDomModule.h in Headers */,
@@ -1558,6 +1565,7 @@
 				C4F012831E1502E9003378D0 /* WXWebSocketModule.m in Sources */,
 				59D3CA401CF9ED57008835DC /* Layout.c in Sources */,
 				DCF087621DCAE161005CD6EB /* WXInvocationConfig.m in Sources */,
+				C47B78CF1F2998EE001D3B0C /* WXExtendCallNativeManager.m in Sources */,
 				77D161311C02DE4E0010B15B /* WXComponent.m in Sources */,
 				74862F7A1E02B88D00B7A041 /* JSValue+Weex.m in Sources */,
 				740451EB1E14BB26004157CB /* WXServiceFactory.m in Sources */,

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6225ed13/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m b/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m
index f241502..bdcb874 100644
--- a/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m
+++ b/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m
@@ -34,7 +34,7 @@
 #import "JSValue+Weex.h"
 #import "WXJSExceptionProtocol.h"
 #import "WXSDKManager.h"
-#import "WXExtendCallNativeProtocol.h"
+#import "WXExtendCallNativeManager.h"
 
 #import <dlfcn.h>
 
@@ -503,9 +503,8 @@
 
 -(id)extendCallNative:(NSDictionary *)dict
 {
-    id extendCallNative = [WXSDKEngine handlerForProtocol:@protocol(WXExtendCallNativeProtocol)];
-    if(extendCallNative){
-        return [extendCallNative excuteCallNative:dict];
+    if(dict){
+        return [WXExtendCallNativeManager sendExtendCallNativeEvent:dict];
     }
     return @(-1);
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6225ed13/ios/sdk/WeexSDK/Sources/Manager/WXExtendCallNativeManager.h
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXExtendCallNativeManager.h b/ios/sdk/WeexSDK/Sources/Manager/WXExtendCallNativeManager.h
new file mode 100644
index 0000000..20c3e7d
--- /dev/null
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXExtendCallNativeManager.h
@@ -0,0 +1,15 @@
+//
+//  WXExtendCallNativeManager.h
+//  WeexSDK
+//
+//  Created by 齐山 on 2017/7/27.
+//  Copyright © 2017年 taobao. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface WXExtendCallNativeManager : NSObject
+
++(id)sendExtendCallNativeEvent:(NSDictionary *)parameters;
+
+@end

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6225ed13/ios/sdk/WeexSDK/Sources/Manager/WXExtendCallNativeManager.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXExtendCallNativeManager.m b/ios/sdk/WeexSDK/Sources/Manager/WXExtendCallNativeManager.m
new file mode 100644
index 0000000..6fbdd02
--- /dev/null
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXExtendCallNativeManager.m
@@ -0,0 +1,28 @@
+//
+//  WXExtendCallNativeManager.m
+//  WeexSDK
+//
+//  Created by 齐山 on 2017/7/27.
+//  Copyright © 2017年 taobao. All rights reserved.
+//
+
+#import "WXExtendCallNativeManager.h"
+#import "WXExtendCallNativeProtocol.h"
+#import <objc/runtime.h>
+
+@implementation WXExtendCallNativeManager
+
++(id)sendExtendCallNativeEvent:(NSDictionary *)parameters
+{
+    if(parameters[@"className"]){
+        Class<WXExtendCallNativeProtocol> receiveClass = NSClassFromString(parameters[@"className"]);
+        if(class_conformsToProtocol(receiveClass,@protocol(WXExtendCallNativeProtocol))){
+            BOOL receivedItem = [receiveClass checkParameters:parameters];
+            if(receivedItem){
+                return [receiveClass excuteCallNative:parameters];
+            }
+        }
+    }
+    return @(-1);
+}
+@end

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6225ed13/ios/sdk/WeexSDK/Sources/Protocol/WXExtendCallNativeProtocol.h
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Protocol/WXExtendCallNativeProtocol.h b/ios/sdk/WeexSDK/Sources/Protocol/WXExtendCallNativeProtocol.h
index 5afb1dc..c920b73 100644
--- a/ios/sdk/WeexSDK/Sources/Protocol/WXExtendCallNativeProtocol.h
+++ b/ios/sdk/WeexSDK/Sources/Protocol/WXExtendCallNativeProtocol.h
@@ -22,6 +22,26 @@
 
 @protocol WXExtendCallNativeProtocol <NSObject>
 
-- (id)excuteCallNative:(NSDictionary *)dict;
+@required
+
+/**
+ * @abstract check parameters
+ *
+ * @param parameters the checked parameters.
+ *
+ * @return YES or NO.
+ *
+ */
++ (BOOL)checkParameters:(NSDictionary *)parameters;
+
+/**
+ * @abstract excuteCallNative
+ *
+ * @param parameters the checked parameters.
+ *
+ * @return A value.
+ *
+ */
++ (id)excuteCallNative:(NSDictionary *)parameters;
 
 @end