Merge pull request #3 from wrmswindmill/master
[iOS]Upload iOS playground
diff --git a/README.md b/README.md
index 47b56f3..a872725 100644
--- a/README.md
+++ b/README.md
@@ -11,4 +11,9 @@
* In `playground/java/com.alibaba.weex/IndexActivity`, modify `CURRENT_IP` to your local IP
* Click <img src="http://gtms04.alicdn.com/tps/i4/TB1wCcqMpXXXXakXpXX3G7tGXXX-34-44.png" height="16" > (`Run` button)
+### iOS
+* install `CocoaPods`.
+* Open `ios` directory, and then execute `pod install` in terminal.
+* Open `WeexDemo.xcworkspace` with Xcode.
+* Click <img src="http://gtms04.alicdn.com/tps/i4/TB1wCcqMpXXXXakXpXX3G7tGXXX-34-44.png" height="16" > (`Run` button)
diff --git a/ios/.gitignore b/ios/.gitignore
new file mode 100644
index 0000000..1d46736
--- /dev/null
+++ b/ios/.gitignore
@@ -0,0 +1,6 @@
+## Build generated
+build/
+DerivedData/
+
+# CocoaPods
+Pods/
diff --git a/ios/Podfile b/ios/Podfile
new file mode 100644
index 0000000..d5003ae
--- /dev/null
+++ b/ios/Podfile
@@ -0,0 +1,24 @@
+source 'https://github.com/CocoaPods/Specs.git'
+platform :ios, '9.0'
+#inhibit_all_warnings!
+
+def common
+ pod 'WeexSDK', :git => 'https://github.com/apache/incubator-weex.git'
+ pod 'WXDevtool','0.20.0'
+ pod 'SDWebImage', '3.7.5'
+ pod 'SDWebImage/WebP'
+ pod 'SocketRocket', '0.4.2'
+ pod 'ATSDK-Weex', '0.0.1',:configurations => ['Debug']
+ pod 'BindingX', '1.0.3'
+
+ # WeexGcanvas is added by Weex Plugin, more info at https://market.dotwe.org/ext/list.htm
+ #pod 'WeexGcanvas'
+end
+
+target 'WeexDemo' do
+ common
+end
+
+target 'WeexUITestDemo' do
+ common
+end
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
new file mode 100644
index 0000000..5c61918
--- /dev/null
+++ b/ios/Podfile.lock
@@ -0,0 +1,84 @@
+PODS:
+ - ATSDK-Weex (0.0.1)
+ - BindingX (1.0.3):
+ - WeexPluginLoader
+ - WeexSDK
+ - libwebp (1.0.2):
+ - libwebp/core (= 1.0.2)
+ - libwebp/dec (= 1.0.2)
+ - libwebp/demux (= 1.0.2)
+ - libwebp/dsp (= 1.0.2)
+ - libwebp/enc (= 1.0.2)
+ - libwebp/mux (= 1.0.2)
+ - libwebp/utils (= 1.0.2)
+ - libwebp/webp (= 1.0.2)
+ - libwebp/core (1.0.2):
+ - libwebp/webp
+ - libwebp/dec (1.0.2):
+ - libwebp/core
+ - libwebp/demux (1.0.2):
+ - libwebp/core
+ - libwebp/dsp (1.0.2):
+ - libwebp/core
+ - libwebp/enc (1.0.2):
+ - libwebp/core
+ - libwebp/mux (1.0.2):
+ - libwebp/core
+ - libwebp/utils (1.0.2):
+ - libwebp/core
+ - libwebp/webp (1.0.2)
+ - SDWebImage (3.7.5):
+ - SDWebImage/Core (= 3.7.5)
+ - SDWebImage/Core (3.7.5)
+ - SDWebImage/WebP (3.7.5):
+ - libwebp
+ - SDWebImage/Core
+ - SocketRocket (0.4.2)
+ - WeexPluginLoader (0.0.1.9.1):
+ - WeexSDK
+ - WeexSDK (0.24.0)
+ - WXDevtool (0.20.0):
+ - SocketRocket
+ - WeexSDK
+
+DEPENDENCIES:
+ - ATSDK-Weex (= 0.0.1)
+ - BindingX (= 1.0.3)
+ - SDWebImage (= 3.7.5)
+ - SDWebImage/WebP
+ - SocketRocket (= 0.4.2)
+ - WeexSDK (from `https://github.com/apache/incubator-weex.git`)
+ - WXDevtool (= 0.20.0)
+
+SPEC REPOS:
+ https://github.com/cocoapods/specs.git:
+ - ATSDK-Weex
+ - BindingX
+ - libwebp
+ - SDWebImage
+ - SocketRocket
+ - WeexPluginLoader
+ - WXDevtool
+
+EXTERNAL SOURCES:
+ WeexSDK:
+ :git: https://github.com/apache/incubator-weex.git
+
+CHECKOUT OPTIONS:
+ WeexSDK:
+ :commit: 159ccdc2f80baea89c559d547b857dacf2203000
+ :git: https://github.com/apache/incubator-weex.git
+
+SPEC CHECKSUMS:
+ ATSDK-Weex: 1b27558f4336d77fb97704d34fc6ad1fd468592c
+ BindingX: b3c6c1c5dcd8e50277cfc5daad09d7010c227524
+ libwebp: b068a3bd7c45f7460f6715be7bed1a18fd5d6b48
+ SDWebImage: 69c6303e3348fba97e03f65d65d4fbc26740f461
+ SocketRocket: ffe08119b00ef982f6c37052a4705a057c8494ad
+ WeexPluginLoader: 85c1304f8ba29864e58531614a0acfeceef1b85c
+ WeexSDK: b04beeb0cf562a1467a943a2002f3e4e018ba55b
+ WXDevtool: 833dd3e835df1f5f278fc8865c865d48196bfdab
+
+PODFILE CHECKSUM: b30fb7b0bff70242f50cb3c7f45ac09caf08f211
+
+COCOAPODS: 1.7.3
diff --git a/ios/README.md b/ios/README.md
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/ios/README.md
diff --git a/ios/WeexDemo.xcodeproj/project.pbxproj b/ios/WeexDemo.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..da9bbb2
--- /dev/null
+++ b/ios/WeexDemo.xcodeproj/project.pbxproj
@@ -0,0 +1,975 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 17036A5720FDF9AA0029AE3D /* WXApmGeneratorImpl.m in Sources */ = {isa = PBXBuildFile; fileRef = 17036A5620FDF9AA0029AE3D /* WXApmGeneratorImpl.m */; };
+ 17036A5A20FDF9DF0029AE3D /* WXApmImpl.m in Sources */ = {isa = PBXBuildFile; fileRef = 17036A5920FDF9DF0029AE3D /* WXApmImpl.m */; };
+ 17C1DB57206B675D000E0CEB /* DebugAnzlyzer.m in Sources */ = {isa = PBXBuildFile; fileRef = 17C1DB56206B675D000E0CEB /* DebugAnzlyzer.m */; };
+ 2AE88A2C1C8544E6003329DE /* WXScannerVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AE88A2B1C8544E6003329DE /* WXScannerVC.m */; };
+ 3375BEE821C74C5C003CAAB8 /* WXWebSocketDefaultImpl.m in Sources */ = {isa = PBXBuildFile; fileRef = 3375BEE521C74C5C003CAAB8 /* WXWebSocketDefaultImpl.m */; };
+ 3375BEE921C74C5C003CAAB8 /* SRWebSocket+Weex.m in Sources */ = {isa = PBXBuildFile; fileRef = 3375BEE721C74C5C003CAAB8 /* SRWebSocket+Weex.m */; };
+ 564B94671DD9C65000441C8D /* WeexUITestDemo-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 564B94661DD9C65000441C8D /* WeexUITestDemo-Info.plist */; };
+ 59EA0DA71D2E7D19004F904A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 59EA0DA61D2E7D19004F904A /* Images.xcassets */; };
+ 7478481E1E0CD4910044500D /* WXSyncTestModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 7478481D1E0CD4910044500D /* WXSyncTestModule.m */; };
+ 747DF6681E2F176A005C53A8 /* UIView+UIThreadCheck.m in Sources */ = {isa = PBXBuildFile; fileRef = 747DF6671E2F176A005C53A8 /* UIView+UIThreadCheck.m */; };
+ 74CC79EB1C2B9E4700829368 /* UIViewController+WXDemoNaviBar.m in Sources */ = {isa = PBXBuildFile; fileRef = 74CC79EA1C2B9E4700829368 /* UIViewController+WXDemoNaviBar.m */; };
+ 775BEE801C1E8ECC008D1629 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 775BEE7F1C1E8ECC008D1629 /* main.m */; };
+ 775BEE831C1E8ECC008D1629 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 775BEE821C1E8ECC008D1629 /* AppDelegate.m */; };
+ 775BEE861C1E8ECC008D1629 /* WXDemoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 775BEE851C1E8ECC008D1629 /* WXDemoViewController.m */; };
+ 775BEE8B1C1E8ECC008D1629 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 775BEE8A1C1E8ECC008D1629 /* Assets.xcassets */; };
+ 775BEE991C1E8ECC008D1629 /* WeexDemoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 775BEE981C1E8ECC008D1629 /* WeexDemoTests.m */; };
+ 84361D2F1CA10F8E00F43825 /* WXScannerVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AE88A2B1C8544E6003329DE /* WXScannerVC.m */; };
+ 84361D331CA10F8E00F43825 /* WXDemoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 775BEE851C1E8ECC008D1629 /* WXDemoViewController.m */; };
+ 84361D371CA10F8E00F43825 /* UIViewController+WXDemoNaviBar.m in Sources */ = {isa = PBXBuildFile; fileRef = 74CC79EA1C2B9E4700829368 /* UIViewController+WXDemoNaviBar.m */; };
+ 84361D381CA10F8E00F43825 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 775BEE821C1E8ECC008D1629 /* AppDelegate.m */; };
+ 84361D3B1CA10F8E00F43825 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 775BEE7F1C1E8ECC008D1629 /* main.m */; };
+ 84361D5B1CA10F8E00F43825 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 775BEE8A1C1E8ECC008D1629 /* Assets.xcassets */; };
+ 846FC8DA1E1B853100949E7D /* WXSyncTestModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 7478481D1E0CD4910044500D /* WXSyncTestModule.m */; };
+ 846FC8DB1E1B853600949E7D /* WXATViewHierarchyPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = DCABAFF21D029685001C8592 /* WXATViewHierarchyPlugin.m */; };
+ 847CAF2B1F39BB6B00551725 /* UIView+UIThreadCheck.m in Sources */ = {isa = PBXBuildFile; fileRef = 747DF6671E2F176A005C53A8 /* UIView+UIThreadCheck.m */; };
+ 847CAF2C1F39BB8A00551725 /* WXATLoggerPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = DCABAFF01D029685001C8592 /* WXATLoggerPlugin.m */; };
+ 847CAF2D1F39BBB900551725 /* WXScannerHistoryVC.m in Sources */ = {isa = PBXBuildFile; fileRef = DC5B53681E8CED9400E02125 /* WXScannerHistoryVC.m */; };
+ 847CAF2E1F39BBFB00551725 /* WXConfigCenterDefaultImpl.m in Sources */ = {isa = PBXBuildFile; fileRef = DC20B8E51ECADA2500845F39 /* WXConfigCenterDefaultImpl.m */; };
+ 847CAF311F39E3F100551725 /* WXExtModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 847CAF301F39E3F100551725 /* WXExtModule.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 */; };
+ B83A6C5220FF16D50053BCEF /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = B83A6C5120FF16D50053BCEF /* libc++.tbd */; };
+ C43CDA031F1C6E01005A6B03 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = C43CDA021F1C6E01005A6B03 /* libz.tbd */; };
+ C47B78D21F299E27001D3B0C /* WXExtendCallNativeTest.m in Sources */ = {isa = PBXBuildFile; fileRef = C47B78D11F299E27001D3B0C /* WXExtendCallNativeTest.m */; };
+ DC15A3C7200C505C009C8977 /* WXTitleBarModule.m in Sources */ = {isa = PBXBuildFile; fileRef = DC15A3C6200C505C009C8977 /* WXTitleBarModule.m */; };
+ DC15A3D0200E30FC009C8977 /* WXNavigationHandlerImpl.m in Sources */ = {isa = PBXBuildFile; fileRef = DC15A3CE200E30FC009C8977 /* WXNavigationHandlerImpl.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 */; };
+ DC5E503F1D0D97130059F0EB /* weex@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DC5E503D1D0D97130059F0EB /* weex@2x.png */; };
+ DC65C4FA1CEB032F00B2F84F /* bundlejs in Resources */ = {isa = PBXBuildFile; fileRef = DC65C4F91CEB032F00B2F84F /* bundlejs */; };
+ DC6DD9D21CFE9BC400549297 /* libsqlite3.0.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 7475ACA01CD8444A0044E96C /* libsqlite3.0.tbd */; };
+ DCA812FA1D0401500029BF62 /* WXEventModule.m in Sources */ = {isa = PBXBuildFile; fileRef = DCABB0001D02975E001C8592 /* WXEventModule.m */; };
+ DCA812FB1D0401570029BF62 /* WXImgLoaderDefaultImpl.m in Sources */ = {isa = PBXBuildFile; fileRef = DCABAFFD1D029753001C8592 /* WXImgLoaderDefaultImpl.m */; };
+ DCABAFF31D029685001C8592 /* WXATLoggerPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = DCABAFF01D029685001C8592 /* WXATLoggerPlugin.m */; };
+ DCABAFF41D029685001C8592 /* WXATViewHierarchyPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = DCABAFF21D029685001C8592 /* WXATViewHierarchyPlugin.m */; };
+ DCABAFFE1D029753001C8592 /* WXImgLoaderDefaultImpl.m in Sources */ = {isa = PBXBuildFile; fileRef = DCABAFFD1D029753001C8592 /* WXImgLoaderDefaultImpl.m */; };
+ DCABB0011D02975E001C8592 /* WXEventModule.m in Sources */ = {isa = PBXBuildFile; fileRef = DCABB0001D02975E001C8592 /* WXEventModule.m */; };
+ DCD286E01CF491AC00C601CA /* weex-icon.png in Resources */ = {isa = PBXBuildFile; fileRef = DCD286DF1CF491AC00C601CA /* weex-icon.png */; };
+ EAEC716BE3E43DBC8494EC51 /* libPods-WeexDemo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7601607D735D7F8D88971230 /* libPods-WeexDemo.a */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ 775BEE951C1E8ECC008D1629 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 775BEE731C1E8ECC008D1629 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 775BEE7A1C1E8ECC008D1629;
+ remoteInfo = WeexDemo;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXFileReference section */
+ 17036A5520FDF9AA0029AE3D /* WXApmGeneratorImpl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = WXApmGeneratorImpl.h; path = extend/handler/WXApmGeneratorImpl.h; sourceTree = "<group>"; };
+ 17036A5620FDF9AA0029AE3D /* WXApmGeneratorImpl.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = WXApmGeneratorImpl.m; path = extend/handler/WXApmGeneratorImpl.m; sourceTree = "<group>"; };
+ 17036A5820FDF9DF0029AE3D /* WXApmImpl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = WXApmImpl.h; path = extend/handler/WXApmImpl.h; sourceTree = "<group>"; };
+ 17036A5920FDF9DF0029AE3D /* WXApmImpl.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = WXApmImpl.m; path = extend/handler/WXApmImpl.m; sourceTree = "<group>"; };
+ 17C1DB55206B6729000E0CEB /* DebugAnalyzer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = DebugAnalyzer.h; path = debug/DebugAnalyzer.h; sourceTree = "<group>"; };
+ 17C1DB56206B675D000E0CEB /* DebugAnzlyzer.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = DebugAnzlyzer.m; path = debug/DebugAnzlyzer.m; sourceTree = "<group>"; };
+ 1888E2C5769382461DEDC97D /* Pods-WeexUITestDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WeexUITestDemo.release.xcconfig"; path = "Pods/Target Support Files/Pods-WeexUITestDemo/Pods-WeexUITestDemo.release.xcconfig"; sourceTree = "<group>"; };
+ 2278B1B1FCE894EDAF9F0171 /* Pods-WeexUITestDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WeexUITestDemo.debug.xcconfig"; path = "Pods/Target Support Files/Pods-WeexUITestDemo/Pods-WeexUITestDemo.debug.xcconfig"; sourceTree = "<group>"; };
+ 22E4D2883CC56188A2CA9C13 /* Pods-WeexDemo.uitest.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WeexDemo.uitest.xcconfig"; path = "Pods/Target Support Files/Pods-WeexDemo/Pods-WeexDemo.uitest.xcconfig"; sourceTree = "<group>"; };
+ 2AE88A2A1C8544E6003329DE /* WXScannerVC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WXScannerVC.h; path = Scanner/WXScannerVC.h; sourceTree = "<group>"; };
+ 2AE88A2B1C8544E6003329DE /* WXScannerVC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = WXScannerVC.m; path = Scanner/WXScannerVC.m; sourceTree = "<group>"; };
+ 3375BEE421C74C5C003CAAB8 /* SRWebSocket+Weex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "SRWebSocket+Weex.h"; sourceTree = "<group>"; };
+ 3375BEE521C74C5C003CAAB8 /* WXWebSocketDefaultImpl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXWebSocketDefaultImpl.m; sourceTree = "<group>"; };
+ 3375BEE621C74C5C003CAAB8 /* WXWebSocketDefaultImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXWebSocketDefaultImpl.h; sourceTree = "<group>"; };
+ 3375BEE721C74C5C003CAAB8 /* SRWebSocket+Weex.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "SRWebSocket+Weex.m"; sourceTree = "<group>"; };
+ 564B94661DD9C65000441C8D /* WeexUITestDemo-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "WeexUITestDemo-Info.plist"; sourceTree = "<group>"; };
+ 59EA0DA61D2E7D19004F904A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
+ 5AF8846546DAC65CAC038806 /* Pods-WeexDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WeexDemo.debug.xcconfig"; path = "Pods/Target Support Files/Pods-WeexDemo/Pods-WeexDemo.debug.xcconfig"; sourceTree = "<group>"; };
+ 741DFE081DDDD519009B020F /* libstdc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libstdc++.tbd"; path = "usr/lib/libstdc++.tbd"; sourceTree = SDKROOT; };
+ 7453E3641C9FA971001EB427 /* DemoDefine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoDefine.h; sourceTree = "<group>"; };
+ 7475ACA01CD8444A0044E96C /* libsqlite3.0.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libsqlite3.0.tbd; path = usr/lib/libsqlite3.0.tbd; sourceTree = SDKROOT; };
+ 7478481C1E0CD4910044500D /* WXSyncTestModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXSyncTestModule.h; sourceTree = "<group>"; };
+ 7478481D1E0CD4910044500D /* WXSyncTestModule.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXSyncTestModule.m; sourceTree = "<group>"; };
+ 747DF6661E2F176A005C53A8 /* UIView+UIThreadCheck.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+UIThreadCheck.h"; sourceTree = "<group>"; };
+ 747DF6671E2F176A005C53A8 /* UIView+UIThreadCheck.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+UIThreadCheck.m"; sourceTree = "<group>"; };
+ 74CC79E91C2B9E4700829368 /* UIViewController+WXDemoNaviBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIViewController+WXDemoNaviBar.h"; sourceTree = "<group>"; };
+ 74CC79EA1C2B9E4700829368 /* UIViewController+WXDemoNaviBar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIViewController+WXDemoNaviBar.m"; sourceTree = "<group>"; };
+ 775BEE7B1C1E8ECC008D1629 /* WeexDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = WeexDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 775BEE7F1C1E8ECC008D1629 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
+ 775BEE811C1E8ECC008D1629 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
+ 775BEE821C1E8ECC008D1629 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
+ 775BEE841C1E8ECC008D1629 /* WXDemoViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WXDemoViewController.h; sourceTree = "<group>"; };
+ 775BEE851C1E8ECC008D1629 /* WXDemoViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = WXDemoViewController.m; sourceTree = "<group>"; };
+ 775BEE8A1C1E8ECC008D1629 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
+ 775BEE8F1C1E8ECC008D1629 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+ 775BEE941C1E8ECC008D1629 /* WeexDemoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = WeexDemoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+ 775BEE981C1E8ECC008D1629 /* WeexDemoTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = WeexDemoTests.m; sourceTree = "<group>"; };
+ 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; };
+ 847CAF2F1F39E3F100551725 /* WXExtModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXExtModule.h; sourceTree = "<group>"; };
+ 847CAF301F39E3F100551725 /* WXExtModule.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXExtModule.m; sourceTree = "<group>"; };
+ 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>"; };
+ B83A6C5120FF16D50053BCEF /* libc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.tbd"; path = "usr/lib/libc++.tbd"; sourceTree = SDKROOT; };
+ C43CDA021F1C6E01005A6B03 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; };
+ 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>"; };
+ DC15A3C5200C505C009C8977 /* WXTitleBarModule.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = WXTitleBarModule.h; path = extend/module/WXTitleBarModule.h; sourceTree = "<group>"; };
+ DC15A3C6200C505C009C8977 /* WXTitleBarModule.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = WXTitleBarModule.m; path = extend/module/WXTitleBarModule.m; sourceTree = "<group>"; };
+ DC15A3CE200E30FC009C8977 /* WXNavigationHandlerImpl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXNavigationHandlerImpl.m; sourceTree = "<group>"; };
+ DC15A3CF200E30FC009C8977 /* WXNavigationHandlerImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXNavigationHandlerImpl.h; 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>"; };
+ DC5B53681E8CED9400E02125 /* WXScannerHistoryVC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = WXScannerHistoryVC.m; path = Scanner/WXScannerHistoryVC.m; sourceTree = "<group>"; };
+ DC5E503C1D0D97130059F0EB /* weex.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = weex.png; sourceTree = "<group>"; };
+ DC5E503D1D0D97130059F0EB /* weex@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "weex@2x.png"; sourceTree = "<group>"; };
+ DC65C4F91CEB032F00B2F84F /* bundlejs */ = {isa = PBXFileReference; lastKnownFileType = folder; path = bundlejs; sourceTree = "<group>"; };
+ DCABAFEF1D029685001C8592 /* WXATLoggerPlugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WXATLoggerPlugin.h; path = debug/WXATLoggerPlugin.h; sourceTree = "<group>"; };
+ DCABAFF01D029685001C8592 /* WXATLoggerPlugin.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = WXATLoggerPlugin.m; path = debug/WXATLoggerPlugin.m; sourceTree = "<group>"; };
+ DCABAFF11D029685001C8592 /* WXATViewHierarchyPlugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WXATViewHierarchyPlugin.h; path = debug/WXATViewHierarchyPlugin.h; sourceTree = "<group>"; };
+ DCABAFF21D029685001C8592 /* WXATViewHierarchyPlugin.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = WXATViewHierarchyPlugin.m; path = debug/WXATViewHierarchyPlugin.m; sourceTree = "<group>"; };
+ DCABAFF91D029748001C8592 /* WXSelectComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WXSelectComponent.h; path = extend/component/WXSelectComponent.h; sourceTree = "<group>"; };
+ DCABAFFA1D029748001C8592 /* WXSelectComponent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = WXSelectComponent.m; path = extend/component/WXSelectComponent.m; sourceTree = "<group>"; };
+ DCABAFFC1D029753001C8592 /* WXImgLoaderDefaultImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WXImgLoaderDefaultImpl.h; path = extend/handler/WXImgLoaderDefaultImpl.h; sourceTree = "<group>"; };
+ DCABAFFD1D029753001C8592 /* WXImgLoaderDefaultImpl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = WXImgLoaderDefaultImpl.m; path = extend/handler/WXImgLoaderDefaultImpl.m; sourceTree = "<group>"; };
+ DCABAFFF1D02975E001C8592 /* WXEventModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WXEventModule.h; path = extend/module/WXEventModule.h; sourceTree = "<group>"; };
+ DCABB0001D02975E001C8592 /* WXEventModule.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = WXEventModule.m; path = extend/module/WXEventModule.m; sourceTree = "<group>"; };
+ DCD286DF1CF491AC00C601CA /* weex-icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "weex-icon.png"; path = "WeexDemo/weex-icon.png"; sourceTree = "<group>"; };
+ E48C20F443AA337D1FE97622 /* libPods-WeexUITestDemo.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-WeexUITestDemo.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 775BEE781C1E8ECC008D1629 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B83A6C5220FF16D50053BCEF /* libc++.tbd in Frameworks */,
+ C43CDA031F1C6E01005A6B03 /* libz.tbd in Frameworks */,
+ DC6DD9D21CFE9BC400549297 /* libsqlite3.0.tbd in Frameworks */,
+ EAEC716BE3E43DBC8494EC51 /* libPods-WeexDemo.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 775BEE911C1E8ECC008D1629 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 84361D3C1CA10F8E00F43825 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 84D7CAC71CE3266C00D48D46 /* libsqlite3.0.tbd in Frameworks */,
+ 8A0B5EFFF75BF82EA481983D /* libPods-WeexUITestDemo.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 2AE88A291C8544D7003329DE /* scanner */ = {
+ isa = PBXGroup;
+ children = (
+ 2AE88A2A1C8544E6003329DE /* WXScannerVC.h */,
+ 2AE88A2B1C8544E6003329DE /* WXScannerVC.m */,
+ DC5B53671E8CED9400E02125 /* WXScannerHistoryVC.h */,
+ DC5B53681E8CED9400E02125 /* WXScannerHistoryVC.m */,
+ );
+ name = scanner;
+ sourceTree = "<group>";
+ };
+ 327BB19797F63D5309FB91BF /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ B83A6C5120FF16D50053BCEF /* libc++.tbd */,
+ C43CDA021F1C6E01005A6B03 /* libz.tbd */,
+ 741DFE081DDDD519009B020F /* libstdc++.tbd */,
+ 7475ACA01CD8444A0044E96C /* libsqlite3.0.tbd */,
+ E48C20F443AA337D1FE97622 /* libPods-WeexUITestDemo.a */,
+ );
+ name = Frameworks;
+ sourceTree = "<group>";
+ };
+ 3375BEE321C74C5C003CAAB8 /* Websocket */ = {
+ isa = PBXGroup;
+ children = (
+ 3375BEE421C74C5C003CAAB8 /* SRWebSocket+Weex.h */,
+ 3375BEE521C74C5C003CAAB8 /* WXWebSocketDefaultImpl.m */,
+ 3375BEE621C74C5C003CAAB8 /* WXWebSocketDefaultImpl.h */,
+ 3375BEE721C74C5C003CAAB8 /* SRWebSocket+Weex.m */,
+ );
+ path = Websocket;
+ sourceTree = "<group>";
+ };
+ 74CC79EC1C2B9FC600829368 /* Demo */ = {
+ isa = PBXGroup;
+ children = (
+ DCABAFF51D0296DB001C8592 /* extend */,
+ D5ADF0861C77133B00597CA6 /* Source */,
+ );
+ name = Demo;
+ sourceTree = "<group>";
+ };
+ 775BEE721C1E8ECC008D1629 = {
+ isa = PBXGroup;
+ children = (
+ 775BEE7D1C1E8ECC008D1629 /* WeexDemo */,
+ 775BEE971C1E8ECC008D1629 /* WeexDemoTests */,
+ 775BEE7C1C1E8ECC008D1629 /* Products */,
+ A9E45DD060512F73B9F51C03 /* Pods */,
+ 327BB19797F63D5309FB91BF /* Frameworks */,
+ DC65C4421CEB006C00B2F84F /* resource */,
+ 564B94661DD9C65000441C8D /* WeexUITestDemo-Info.plist */,
+ );
+ sourceTree = "<group>";
+ };
+ 775BEE7C1C1E8ECC008D1629 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 775BEE7B1C1E8ECC008D1629 /* WeexDemo.app */,
+ 775BEE941C1E8ECC008D1629 /* WeexDemoTests.xctest */,
+ 84361D751CA10F8E00F43825 /* WeexUITestDemo.app */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ 775BEE7D1C1E8ECC008D1629 /* WeexDemo */ = {
+ isa = PBXGroup;
+ children = (
+ 74CC79EC1C2B9FC600829368 /* Demo */,
+ 775BEE8A1C1E8ECC008D1629 /* Assets.xcassets */,
+ 775BEE8F1C1E8ECC008D1629 /* Info.plist */,
+ 59EA0DA61D2E7D19004F904A /* Images.xcassets */,
+ 775BEE7E1C1E8ECC008D1629 /* Supporting Files */,
+ );
+ path = WeexDemo;
+ sourceTree = "<group>";
+ };
+ 775BEE7E1C1E8ECC008D1629 /* Supporting Files */ = {
+ isa = PBXGroup;
+ children = (
+ 775BEE7F1C1E8ECC008D1629 /* main.m */,
+ );
+ name = "Supporting Files";
+ sourceTree = "<group>";
+ };
+ 775BEE971C1E8ECC008D1629 /* WeexDemoTests */ = {
+ isa = PBXGroup;
+ children = (
+ 775BEE981C1E8ECC008D1629 /* WeexDemoTests.m */,
+ 775BEE9A1C1E8ECC008D1629 /* Info.plist */,
+ );
+ path = WeexDemoTests;
+ sourceTree = "<group>";
+ };
+ A9E45DD060512F73B9F51C03 /* Pods */ = {
+ isa = PBXGroup;
+ children = (
+ 5AF8846546DAC65CAC038806 /* Pods-WeexDemo.debug.xcconfig */,
+ 9420131417A731ED089B0814 /* Pods-WeexDemo.release.xcconfig */,
+ 22E4D2883CC56188A2CA9C13 /* Pods-WeexDemo.uitest.xcconfig */,
+ 2278B1B1FCE894EDAF9F0171 /* Pods-WeexUITestDemo.debug.xcconfig */,
+ 1888E2C5769382461DEDC97D /* Pods-WeexUITestDemo.release.xcconfig */,
+ );
+ name = Pods;
+ sourceTree = "<group>";
+ };
+ D5ADF0861C77133B00597CA6 /* Source */ = {
+ isa = PBXGroup;
+ children = (
+ 2AE88A291C8544D7003329DE /* scanner */,
+ DCABAFED1D029642001C8592 /* debug */,
+ 74CC79E91C2B9E4700829368 /* UIViewController+WXDemoNaviBar.h */,
+ 74CC79EA1C2B9E4700829368 /* UIViewController+WXDemoNaviBar.m */,
+ 775BEE811C1E8ECC008D1629 /* AppDelegate.h */,
+ 775BEE821C1E8ECC008D1629 /* AppDelegate.m */,
+ 775BEE841C1E8ECC008D1629 /* WXDemoViewController.h */,
+ 775BEE851C1E8ECC008D1629 /* WXDemoViewController.m */,
+ 747DF6661E2F176A005C53A8 /* UIView+UIThreadCheck.h */,
+ 747DF6671E2F176A005C53A8 /* UIView+UIThreadCheck.m */,
+ 7453E3641C9FA971001EB427 /* DemoDefine.h */,
+ C47B78D01F299E27001D3B0C /* WXExtendCallNativeTest.h */,
+ C47B78D11F299E27001D3B0C /* WXExtendCallNativeTest.m */,
+ );
+ name = Source;
+ sourceTree = "<group>";
+ };
+ DC65C4421CEB006C00B2F84F /* resource */ = {
+ isa = PBXGroup;
+ children = (
+ DCD286DF1CF491AC00C601CA /* weex-icon.png */,
+ DC5E503C1D0D97130059F0EB /* weex.png */,
+ DC5E503D1D0D97130059F0EB /* weex@2x.png */,
+ DC65C4F91CEB032F00B2F84F /* bundlejs */,
+ );
+ name = resource;
+ sourceTree = "<group>";
+ };
+ DCABAFED1D029642001C8592 /* debug */ = {
+ isa = PBXGroup;
+ children = (
+ DCABAFEF1D029685001C8592 /* WXATLoggerPlugin.h */,
+ DCABAFF01D029685001C8592 /* WXATLoggerPlugin.m */,
+ DCABAFF11D029685001C8592 /* WXATViewHierarchyPlugin.h */,
+ DCABAFF21D029685001C8592 /* WXATViewHierarchyPlugin.m */,
+ 17C1DB55206B6729000E0CEB /* DebugAnalyzer.h */,
+ 17C1DB56206B675D000E0CEB /* DebugAnzlyzer.m */,
+ );
+ name = debug;
+ sourceTree = "<group>";
+ };
+ DCABAFF51D0296DB001C8592 /* extend */ = {
+ isa = PBXGroup;
+ children = (
+ DCABAFF81D029716001C8592 /* component */,
+ DCABAFF71D0296E8001C8592 /* handler */,
+ DCABAFF61D0296E2001C8592 /* module */,
+ );
+ name = extend;
+ sourceTree = "<group>";
+ };
+ DCABAFF61D0296E2001C8592 /* module */ = {
+ isa = PBXGroup;
+ children = (
+ DCABAFFF1D02975E001C8592 /* WXEventModule.h */,
+ DCABB0001D02975E001C8592 /* WXEventModule.m */,
+ DC15A3C5200C505C009C8977 /* WXTitleBarModule.h */,
+ DC15A3C6200C505C009C8977 /* WXTitleBarModule.m */,
+ 7478481C1E0CD4910044500D /* WXSyncTestModule.h */,
+ 7478481D1E0CD4910044500D /* WXSyncTestModule.m */,
+ 847CAF2F1F39E3F100551725 /* WXExtModule.h */,
+ 847CAF301F39E3F100551725 /* WXExtModule.m */,
+ );
+ name = module;
+ sourceTree = "<group>";
+ };
+ DCABAFF71D0296E8001C8592 /* handler */ = {
+ isa = PBXGroup;
+ children = (
+ 3375BEE321C74C5C003CAAB8 /* Websocket */,
+ DC15A3CF200E30FC009C8977 /* WXNavigationHandlerImpl.h */,
+ DC15A3CE200E30FC009C8977 /* WXNavigationHandlerImpl.m */,
+ DC20B8E41ECADA2500845F39 /* WXConfigCenterDefaultImpl.h */,
+ DC20B8E51ECADA2500845F39 /* WXConfigCenterDefaultImpl.m */,
+ DCABAFFC1D029753001C8592 /* WXImgLoaderDefaultImpl.h */,
+ DCABAFFD1D029753001C8592 /* WXImgLoaderDefaultImpl.m */,
+ 17036A5520FDF9AA0029AE3D /* WXApmGeneratorImpl.h */,
+ 17036A5620FDF9AA0029AE3D /* WXApmGeneratorImpl.m */,
+ 17036A5820FDF9DF0029AE3D /* WXApmImpl.h */,
+ 17036A5920FDF9DF0029AE3D /* WXApmImpl.m */,
+ );
+ name = handler;
+ sourceTree = "<group>";
+ };
+ DCABAFF81D029716001C8592 /* component */ = {
+ isa = PBXGroup;
+ children = (
+ DCABAFF91D029748001C8592 /* WXSelectComponent.h */,
+ DCABAFFA1D029748001C8592 /* WXSelectComponent.m */,
+ );
+ name = component;
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 775BEE7A1C1E8ECC008D1629 /* WeexDemo */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 775BEEA81C1E8ECC008D1629 /* Build configuration list for PBXNativeTarget "WeexDemo" */;
+ buildPhases = (
+ B5825066F03BDD65A25F2701 /* [CP] Check Pods Manifest.lock */,
+ 74CC7A221C2C13BF00829368 /* Start Samples */,
+ 775BEE771C1E8ECC008D1629 /* Sources */,
+ 775BEE781C1E8ECC008D1629 /* Frameworks */,
+ 775BEE791C1E8ECC008D1629 /* Resources */,
+ C715566148067A7FFAB7797D /* [CP] Copy Pods Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = WeexDemo;
+ productName = WeexDemo;
+ productReference = 775BEE7B1C1E8ECC008D1629 /* WeexDemo.app */;
+ productType = "com.apple.product-type.application";
+ };
+ 775BEE931C1E8ECC008D1629 /* WeexDemoTests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 775BEEAB1C1E8ECC008D1629 /* Build configuration list for PBXNativeTarget "WeexDemoTests" */;
+ buildPhases = (
+ 775BEE901C1E8ECC008D1629 /* Sources */,
+ 775BEE911C1E8ECC008D1629 /* Frameworks */,
+ 775BEE921C1E8ECC008D1629 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 775BEE961C1E8ECC008D1629 /* PBXTargetDependency */,
+ );
+ name = WeexDemoTests;
+ productName = WeexDemoTests;
+ productReference = 775BEE941C1E8ECC008D1629 /* WeexDemoTests.xctest */;
+ productType = "com.apple.product-type.bundle.unit-test";
+ };
+ 84361D261CA10F8E00F43825 /* WeexUITestDemo */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 84361D711CA10F8E00F43825 /* Build configuration list for PBXNativeTarget "WeexUITestDemo" */;
+ buildPhases = (
+ 84361D271CA10F8E00F43825 /* [CP] Check Pods Manifest.lock */,
+ 84361D291CA10F8E00F43825 /* Sources */,
+ 84361D3C1CA10F8E00F43825 /* Frameworks */,
+ 84361D431CA10F8E00F43825 /* Resources */,
+ 84361D6F1CA10F8E00F43825 /* [CP] Copy Pods Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = WeexUITestDemo;
+ productName = WeexDemo;
+ productReference = 84361D751CA10F8E00F43825 /* WeexUITestDemo.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 775BEE731C1E8ECC008D1629 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastUpgradeCheck = 0710;
+ ORGANIZATIONNAME = taobao;
+ TargetAttributes = {
+ 775BEE7A1C1E8ECC008D1629 = {
+ CreatedOnToolsVersion = 7.1.1;
+ };
+ 775BEE931C1E8ECC008D1629 = {
+ CreatedOnToolsVersion = 7.1.1;
+ DevelopmentTeam = 445VCMGQD2;
+ TestTargetID = 775BEE7A1C1E8ECC008D1629;
+ };
+ };
+ };
+ buildConfigurationList = 775BEE761C1E8ECC008D1629 /* Build configuration list for PBXProject "WeexDemo" */;
+ compatibilityVersion = "Xcode 3.2";
+ developmentRegion = English;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ English,
+ en,
+ Base,
+ );
+ mainGroup = 775BEE721C1E8ECC008D1629;
+ productRefGroup = 775BEE7C1C1E8ECC008D1629 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 775BEE7A1C1E8ECC008D1629 /* WeexDemo */,
+ 775BEE931C1E8ECC008D1629 /* WeexDemoTests */,
+ 84361D261CA10F8E00F43825 /* WeexUITestDemo */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 775BEE791C1E8ECC008D1629 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ DC5E503E1D0D97130059F0EB /* weex.png in Resources */,
+ DC5E503F1D0D97130059F0EB /* weex@2x.png in Resources */,
+ DCD286E01CF491AC00C601CA /* weex-icon.png in Resources */,
+ 59EA0DA71D2E7D19004F904A /* Images.xcassets in Resources */,
+ 564B94671DD9C65000441C8D /* WeexUITestDemo-Info.plist in Resources */,
+ DC65C4FA1CEB032F00B2F84F /* bundlejs in Resources */,
+ 775BEE8B1C1E8ECC008D1629 /* Assets.xcassets in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 775BEE921C1E8ECC008D1629 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 84361D431CA10F8E00F43825 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 84361D5B1CA10F8E00F43825 /* Assets.xcassets in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ 74CC7A221C2C13BF00829368 /* Start Samples */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Start Samples";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "DEST=$CONFIGURATION_BUILD_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH\n\nif [[ \"$CONFIGURATION\" = \"Debug\" && \"$PLATFORM_NAME\" != \"iphonesimulator\" ]]; then\nipconfig getifaddr en0 | awk '{printf(\"%s\",$0)}' > \"$DEST/localServer-ip.txt\"\nfi";
+ };
+ 84361D271CA10F8E00F43825 /* [CP] Check Pods Manifest.lock */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+ "${PODS_ROOT}/Manifest.lock",
+ );
+ name = "[CP] Check Pods Manifest.lock";
+ outputPaths = (
+ "$(DERIVED_FILE_DIR)/Pods-WeexUITestDemo-checkManifestLockResult.txt",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+ showEnvVarsInLog = 0;
+ };
+ 84361D6F1CA10F8E00F43825 /* [CP] Copy Pods Resources */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-WeexUITestDemo/Pods-WeexUITestDemo-resources.sh",
+ "${PODS_ROOT}/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle",
+ "${PODS_ROOT}/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/en.lproj",
+ "${PODS_ROOT}/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/zh-Hans.lproj",
+ "${PODS_ROOT}/WeexSDK/pre-build/native-bundle-main.js",
+ "${PODS_ROOT}/WeexSDK/pre-build/weex-main-jsfm.js",
+ "${PODS_ROOT}/WeexSDK/pre-build/weex-polyfill.js",
+ "${PODS_ROOT}/WeexSDK/pre-build/weex-rax-api.js",
+ "${PODS_ROOT}/WeexSDK/ios/sdk/WeexSDK/Resources/wx_load_error@3x.png",
+ );
+ name = "[CP] Copy Pods Resources";
+ outputPaths = (
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ATSDK.bundle",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/en.lproj",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/zh-Hans.lproj",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/native-bundle-main.js",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/weex-main-jsfm.js",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/weex-polyfill.js",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/weex-rax-api.js",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/wx_load_error@3x.png",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-WeexUITestDemo/Pods-WeexUITestDemo-resources.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ B5825066F03BDD65A25F2701 /* [CP] Check Pods Manifest.lock */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+ "${PODS_ROOT}/Manifest.lock",
+ );
+ name = "[CP] Check Pods Manifest.lock";
+ outputPaths = (
+ "$(DERIVED_FILE_DIR)/Pods-WeexDemo-checkManifestLockResult.txt",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+ showEnvVarsInLog = 0;
+ };
+ C715566148067A7FFAB7797D /* [CP] Copy Pods Resources */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-WeexDemo/Pods-WeexDemo-resources.sh",
+ "${PODS_ROOT}/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/ATSDK.bundle",
+ "${PODS_ROOT}/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/en.lproj",
+ "${PODS_ROOT}/ATSDK-Weex/ATSDK.framework/Versions/A/Resources/zh-Hans.lproj",
+ "${PODS_ROOT}/WeexSDK/pre-build/native-bundle-main.js",
+ "${PODS_ROOT}/WeexSDK/pre-build/weex-main-jsfm.js",
+ "${PODS_ROOT}/WeexSDK/pre-build/weex-polyfill.js",
+ "${PODS_ROOT}/WeexSDK/pre-build/weex-rax-api.js",
+ "${PODS_ROOT}/WeexSDK/ios/sdk/WeexSDK/Resources/wx_load_error@3x.png",
+ );
+ name = "[CP] Copy Pods Resources";
+ outputPaths = (
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ATSDK.bundle",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/en.lproj",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/zh-Hans.lproj",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/native-bundle-main.js",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/weex-main-jsfm.js",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/weex-polyfill.js",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/weex-rax-api.js",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/wx_load_error@3x.png",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-WeexDemo/Pods-WeexDemo-resources.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 775BEE771C1E8ECC008D1629 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 17C1DB57206B675D000E0CEB /* DebugAnzlyzer.m in Sources */,
+ DCABAFF31D029685001C8592 /* WXATLoggerPlugin.m in Sources */,
+ DC15A3D0200E30FC009C8977 /* WXNavigationHandlerImpl.m in Sources */,
+ 3375BEE921C74C5C003CAAB8 /* SRWebSocket+Weex.m in Sources */,
+ 2AE88A2C1C8544E6003329DE /* WXScannerVC.m in Sources */,
+ 17036A5720FDF9AA0029AE3D /* WXApmGeneratorImpl.m in Sources */,
+ 775BEE861C1E8ECC008D1629 /* WXDemoViewController.m in Sources */,
+ DC5B53691E8CED9400E02125 /* WXScannerHistoryVC.m in Sources */,
+ 74CC79EB1C2B9E4700829368 /* UIViewController+WXDemoNaviBar.m in Sources */,
+ DCABB0011D02975E001C8592 /* WXEventModule.m in Sources */,
+ 7478481E1E0CD4910044500D /* WXSyncTestModule.m in Sources */,
+ 775BEE831C1E8ECC008D1629 /* AppDelegate.m in Sources */,
+ 847CAF311F39E3F100551725 /* WXExtModule.m in Sources */,
+ DC15A3C7200C505C009C8977 /* WXTitleBarModule.m in Sources */,
+ 17036A5A20FDF9DF0029AE3D /* WXApmImpl.m in Sources */,
+ DC20B8E61ECADA2500845F39 /* WXConfigCenterDefaultImpl.m in Sources */,
+ DCABAFF41D029685001C8592 /* WXATViewHierarchyPlugin.m in Sources */,
+ 775BEE801C1E8ECC008D1629 /* main.m in Sources */,
+ DCABAFFE1D029753001C8592 /* WXImgLoaderDefaultImpl.m in Sources */,
+ 747DF6681E2F176A005C53A8 /* UIView+UIThreadCheck.m in Sources */,
+ C47B78D21F299E27001D3B0C /* WXExtendCallNativeTest.m in Sources */,
+ 3375BEE821C74C5C003CAAB8 /* WXWebSocketDefaultImpl.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 775BEE901C1E8ECC008D1629 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 775BEE991C1E8ECC008D1629 /* WeexDemoTests.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 84361D291CA10F8E00F43825 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 847CAF2D1F39BBB900551725 /* WXScannerHistoryVC.m in Sources */,
+ 847CAF2C1F39BB8A00551725 /* WXATLoggerPlugin.m in Sources */,
+ 84361D2F1CA10F8E00F43825 /* WXScannerVC.m in Sources */,
+ 84361D331CA10F8E00F43825 /* WXDemoViewController.m in Sources */,
+ 84361D371CA10F8E00F43825 /* UIViewController+WXDemoNaviBar.m in Sources */,
+ DCA812FA1D0401500029BF62 /* WXEventModule.m in Sources */,
+ 846FC8DA1E1B853100949E7D /* WXSyncTestModule.m in Sources */,
+ 84361D381CA10F8E00F43825 /* AppDelegate.m in Sources */,
+ 847CAF2E1F39BBFB00551725 /* WXConfigCenterDefaultImpl.m in Sources */,
+ 846FC8DB1E1B853600949E7D /* WXATViewHierarchyPlugin.m in Sources */,
+ 84361D3B1CA10F8E00F43825 /* main.m in Sources */,
+ DCA812FB1D0401570029BF62 /* WXImgLoaderDefaultImpl.m in Sources */,
+ 847CAF2B1F39BB6B00551725 /* UIView+UIThreadCheck.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ 775BEE961C1E8ECC008D1629 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 775BEE7A1C1E8ECC008D1629 /* WeexDemo */;
+ targetProxy = 775BEE951C1E8ECC008D1629 /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin XCBuildConfiguration section */
+ 775BEEA61C1E8ECC008D1629 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_GENERATE_TEST_COVERAGE_FILES = YES;
+ GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
+ 775BEEA71C1E8ECC008D1629 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ CODE_SIGN_IDENTITY = "iPhone Distribution";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ 775BEEA91C1E8ECC008D1629 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 5AF8846546DAC65CAC038806 /* Pods-WeexDemo.debug.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ DEVELOPMENT_TEAM = "";
+ ENABLE_BITCODE = NO;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/WeexDemo",
+ "$(PROJECT_DIR)",
+ );
+ GCC_TREAT_WARNINGS_AS_ERRORS = NO;
+ INFOPLIST_FILE = WeexDemo/Info.plist;
+ IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-licucore",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.taobao.WeexPlayground;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ PROVISIONING_PROFILE = "";
+ TARGETED_DEVICE_FAMILY = 1;
+ };
+ name = Debug;
+ };
+ 775BEEAA1C1E8ECC008D1629 /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 9420131417A731ED089B0814 /* Pods-WeexDemo.release.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
+ CODE_SIGN_IDENTITY = "iPhone Distribution";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
+ DEVELOPMENT_TEAM = "";
+ ENABLE_BITCODE = NO;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/WeexDemo",
+ "$(PROJECT_DIR)",
+ );
+ GCC_TREAT_WARNINGS_AS_ERRORS = NO;
+ INFOPLIST_FILE = WeexDemo/Info.plist;
+ IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-licucore",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.taobao.WeexPlayground;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ PROVISIONING_PROFILE = "";
+ TARGETED_DEVICE_FAMILY = 1;
+ };
+ name = Release;
+ };
+ 775BEEAC1C1E8ECC008D1629 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ INFOPLIST_FILE = WeexDemoTests/Info.plist;
+ IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ PRODUCT_BUNDLE_IDENTIFIER = com.taobao.WeexDemoTests;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/WeexDemo.app/WeexDemo";
+ };
+ name = Debug;
+ };
+ 775BEEAD1C1E8ECC008D1629 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ INFOPLIST_FILE = WeexDemoTests/Info.plist;
+ IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ PRODUCT_BUNDLE_IDENTIFIER = com.taobao.WeexDemoTests;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/WeexDemo.app/WeexDemo";
+ };
+ name = Release;
+ };
+ 84361D721CA10F8E00F43825 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 2278B1B1FCE894EDAF9F0171 /* Pods-WeexUITestDemo.debug.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ ENABLE_BITCODE = NO;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/WeexDemo",
+ "$(PROJECT_DIR)",
+ );
+ GCC_GENERATE_TEST_COVERAGE_FILES = YES;
+ GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(inherited)",
+ "COCOAPODS=1",
+ "UITEST=1",
+ );
+ GCC_TREAT_WARNINGS_AS_ERRORS = NO;
+ INFOPLIST_FILE = "WeexUITestDemo-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ MODULE_NAME = NO;
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-licucore",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.taobao.WeexDemo.uitest;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ PROVISIONING_PROFILE = "";
+ };
+ name = Debug;
+ };
+ 84361D741CA10F8E00F43825 /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 1888E2C5769382461DEDC97D /* Pods-WeexUITestDemo.release.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ ENABLE_BITCODE = NO;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/WeexDemo",
+ "$(PROJECT_DIR)",
+ );
+ GCC_GENERATE_TEST_COVERAGE_FILES = YES;
+ GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES;
+ GCC_TREAT_WARNINGS_AS_ERRORS = NO;
+ INFOPLIST_FILE = "WeexUITestDemo-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ MODULE_NAME = NO;
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-licucore",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.taobao.WeexDemo.uitest;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ PROVISIONING_PROFILE = "";
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 775BEE761C1E8ECC008D1629 /* Build configuration list for PBXProject "WeexDemo" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 775BEEA61C1E8ECC008D1629 /* Debug */,
+ 775BEEA71C1E8ECC008D1629 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Debug;
+ };
+ 775BEEA81C1E8ECC008D1629 /* Build configuration list for PBXNativeTarget "WeexDemo" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 775BEEA91C1E8ECC008D1629 /* Debug */,
+ 775BEEAA1C1E8ECC008D1629 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Debug;
+ };
+ 775BEEAB1C1E8ECC008D1629 /* Build configuration list for PBXNativeTarget "WeexDemoTests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 775BEEAC1C1E8ECC008D1629 /* Debug */,
+ 775BEEAD1C1E8ECC008D1629 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Debug;
+ };
+ 84361D711CA10F8E00F43825 /* Build configuration list for PBXNativeTarget "WeexUITestDemo" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 84361D721CA10F8E00F43825 /* Debug */,
+ 84361D741CA10F8E00F43825 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Debug;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 775BEE731C1E8ECC008D1629 /* Project object */;
+}
diff --git a/ios/WeexDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/ios/WeexDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..919434a
--- /dev/null
+++ b/ios/WeexDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+ version = "1.0">
+ <FileRef
+ location = "self:">
+ </FileRef>
+</Workspace>
diff --git a/ios/WeexDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/WeexDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 0000000..18d9810
--- /dev/null
+++ b/ios/WeexDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>IDEDidComputeMac32BitWarning</key>
+ <true/>
+</dict>
+</plist>
diff --git a/ios/WeexDemo.xcodeproj/project.xcworkspace/xcuserdata/wm.xcuserdatad/UserInterfaceState.xcuserstate b/ios/WeexDemo.xcodeproj/project.xcworkspace/xcuserdata/wm.xcuserdatad/UserInterfaceState.xcuserstate
new file mode 100644
index 0000000..d363914
--- /dev/null
+++ b/ios/WeexDemo.xcodeproj/project.xcworkspace/xcuserdata/wm.xcuserdatad/UserInterfaceState.xcuserstate
Binary files differ
diff --git a/ios/WeexDemo.xcodeproj/xcshareddata/xcschemes/WeexDemo.xcscheme b/ios/WeexDemo.xcodeproj/xcshareddata/xcschemes/WeexDemo.xcscheme
new file mode 100644
index 0000000..a33c31d
--- /dev/null
+++ b/ios/WeexDemo.xcodeproj/xcshareddata/xcschemes/WeexDemo.xcscheme
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+ LastUpgradeVersion = "0710"
+ version = "1.3">
+ <BuildAction
+ parallelizeBuildables = "YES"
+ buildImplicitDependencies = "YES">
+ <BuildActionEntries>
+ <BuildActionEntry
+ buildForTesting = "YES"
+ buildForRunning = "YES"
+ buildForProfiling = "YES"
+ buildForArchiving = "YES"
+ buildForAnalyzing = "YES">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "775BEE7A1C1E8ECC008D1629"
+ BuildableName = "WeexDemo.app"
+ BlueprintName = "WeexDemo"
+ ReferencedContainer = "container:WeexDemo.xcodeproj">
+ </BuildableReference>
+ </BuildActionEntry>
+ </BuildActionEntries>
+ </BuildAction>
+ <TestAction
+ buildConfiguration = "Debug"
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+ shouldUseLaunchSchemeArgsEnv = "YES"
+ codeCoverageEnabled = "YES">
+ <Testables>
+ <TestableReference
+ skipped = "NO">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "775BEE931C1E8ECC008D1629"
+ BuildableName = "WeexDemoTests.xctest"
+ BlueprintName = "WeexDemoTests"
+ ReferencedContainer = "container:WeexDemo.xcodeproj">
+ </BuildableReference>
+ </TestableReference>
+ <TestableReference
+ skipped = "NO">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "775BEE9E1C1E8ECC008D1629"
+ BuildableName = "WeexDemoUITests.xctest"
+ BlueprintName = "WeexDemoUITests"
+ ReferencedContainer = "container:WeexDemo.xcodeproj">
+ </BuildableReference>
+ </TestableReference>
+ </Testables>
+ <MacroExpansion>
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "775BEE7A1C1E8ECC008D1629"
+ BuildableName = "WeexDemo.app"
+ BlueprintName = "WeexDemo"
+ ReferencedContainer = "container:WeexDemo.xcodeproj">
+ </BuildableReference>
+ </MacroExpansion>
+ <AdditionalOptions>
+ </AdditionalOptions>
+ </TestAction>
+ <LaunchAction
+ buildConfiguration = "Debug"
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+ launchStyle = "0"
+ useCustomWorkingDirectory = "NO"
+ ignoresPersistentStateOnLaunch = "NO"
+ debugDocumentVersioning = "YES"
+ debugServiceExtension = "internal"
+ allowLocationSimulation = "YES">
+ <BuildableProductRunnable
+ runnableDebuggingMode = "0">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "775BEE7A1C1E8ECC008D1629"
+ BuildableName = "WeexDemo.app"
+ BlueprintName = "WeexDemo"
+ ReferencedContainer = "container:WeexDemo.xcodeproj">
+ </BuildableReference>
+ </BuildableProductRunnable>
+ <EnvironmentVariables>
+ <EnvironmentVariable
+ key = "OS_ACTIVITY_MODE"
+ value = "disable"
+ isEnabled = "NO">
+ </EnvironmentVariable>
+ <EnvironmentVariable
+ key = "JSC_logGC"
+ value = "1"
+ isEnabled = "NO">
+ </EnvironmentVariable>
+ </EnvironmentVariables>
+ <AdditionalOptions>
+ </AdditionalOptions>
+ </LaunchAction>
+ <ProfileAction
+ buildConfiguration = "Release"
+ shouldUseLaunchSchemeArgsEnv = "YES"
+ savedToolIdentifier = ""
+ useCustomWorkingDirectory = "NO"
+ debugDocumentVersioning = "YES">
+ <BuildableProductRunnable
+ runnableDebuggingMode = "0">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "775BEE7A1C1E8ECC008D1629"
+ BuildableName = "WeexDemo.app"
+ BlueprintName = "WeexDemo"
+ ReferencedContainer = "container:WeexDemo.xcodeproj">
+ </BuildableReference>
+ </BuildableProductRunnable>
+ </ProfileAction>
+ <AnalyzeAction
+ buildConfiguration = "Debug">
+ </AnalyzeAction>
+ <ArchiveAction
+ buildConfiguration = "Release"
+ revealArchiveInOrganizer = "YES">
+ </ArchiveAction>
+</Scheme>
diff --git a/ios/WeexDemo.xcodeproj/xcshareddata/xcschemes/WeexUITestDemo.xcscheme b/ios/WeexDemo.xcodeproj/xcshareddata/xcschemes/WeexUITestDemo.xcscheme
new file mode 100644
index 0000000..6a68091
--- /dev/null
+++ b/ios/WeexDemo.xcodeproj/xcshareddata/xcschemes/WeexUITestDemo.xcscheme
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+ LastUpgradeVersion = "0720"
+ version = "1.3">
+ <BuildAction
+ parallelizeBuildables = "YES"
+ buildImplicitDependencies = "YES">
+ <BuildActionEntries>
+ <BuildActionEntry
+ buildForTesting = "YES"
+ buildForRunning = "YES"
+ buildForProfiling = "YES"
+ buildForArchiving = "YES"
+ buildForAnalyzing = "YES">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "84361D261CA10F8E00F43825"
+ BuildableName = "WeexUITestDemo.app"
+ BlueprintName = "WeexUITestDemo"
+ ReferencedContainer = "container:WeexDemo.xcodeproj">
+ </BuildableReference>
+ </BuildActionEntry>
+ </BuildActionEntries>
+ </BuildAction>
+ <TestAction
+ buildConfiguration = "Debug"
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+ shouldUseLaunchSchemeArgsEnv = "YES">
+ <Testables>
+ </Testables>
+ <MacroExpansion>
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "84361D261CA10F8E00F43825"
+ BuildableName = "WeexUITestDemo.app"
+ BlueprintName = "WeexUITestDemo"
+ ReferencedContainer = "container:WeexDemo.xcodeproj">
+ </BuildableReference>
+ </MacroExpansion>
+ <AdditionalOptions>
+ </AdditionalOptions>
+ </TestAction>
+ <LaunchAction
+ buildConfiguration = "Debug"
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+ launchStyle = "0"
+ useCustomWorkingDirectory = "NO"
+ ignoresPersistentStateOnLaunch = "NO"
+ debugDocumentVersioning = "YES"
+ debugServiceExtension = "internal"
+ allowLocationSimulation = "YES">
+ <BuildableProductRunnable
+ runnableDebuggingMode = "0">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "84361D261CA10F8E00F43825"
+ BuildableName = "WeexUITestDemo.app"
+ BlueprintName = "WeexUITestDemo"
+ ReferencedContainer = "container:WeexDemo.xcodeproj">
+ </BuildableReference>
+ </BuildableProductRunnable>
+ <AdditionalOptions>
+ </AdditionalOptions>
+ </LaunchAction>
+ <ProfileAction
+ buildConfiguration = "Release"
+ shouldUseLaunchSchemeArgsEnv = "YES"
+ savedToolIdentifier = ""
+ useCustomWorkingDirectory = "NO"
+ debugDocumentVersioning = "YES">
+ <BuildableProductRunnable
+ runnableDebuggingMode = "0">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "84361D261CA10F8E00F43825"
+ BuildableName = "WeexUITestDemo.app"
+ BlueprintName = "WeexUITestDemo"
+ ReferencedContainer = "container:WeexDemo.xcodeproj">
+ </BuildableReference>
+ </BuildableProductRunnable>
+ </ProfileAction>
+ <AnalyzeAction
+ buildConfiguration = "Debug">
+ </AnalyzeAction>
+ <ArchiveAction
+ buildConfiguration = "Release"
+ revealArchiveInOrganizer = "YES">
+ </ArchiveAction>
+</Scheme>
diff --git a/ios/WeexDemo.xcworkspace/contents.xcworkspacedata b/ios/WeexDemo.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..599b710
--- /dev/null
+++ b/ios/WeexDemo.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+ version = "1.0">
+ <FileRef
+ location = "group:WeexDemo.xcodeproj">
+ </FileRef>
+ <FileRef
+ location = "group:Pods/Pods.xcodeproj">
+ </FileRef>
+</Workspace>
diff --git a/ios/WeexDemo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/WeexDemo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 0000000..18d9810
--- /dev/null
+++ b/ios/WeexDemo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>IDEDidComputeMac32BitWarning</key>
+ <true/>
+</dict>
+</plist>
diff --git a/ios/WeexDemo.xcworkspace/xcuserdata/wm.xcuserdatad/UserInterfaceState.xcuserstate b/ios/WeexDemo.xcworkspace/xcuserdata/wm.xcuserdatad/UserInterfaceState.xcuserstate
new file mode 100644
index 0000000..94cd2ee
--- /dev/null
+++ b/ios/WeexDemo.xcworkspace/xcuserdata/wm.xcuserdatad/UserInterfaceState.xcuserstate
Binary files differ
diff --git a/ios/WeexDemo/AppDelegate.h b/ios/WeexDemo/AppDelegate.h
new file mode 100644
index 0000000..14c0bef
--- /dev/null
+++ b/ios/WeexDemo/AppDelegate.h
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import <UIKit/UIKit.h>
+
+
+@interface AppDelegate : UIResponder <UIApplicationDelegate,UIAlertViewDelegate>
+
+@property (strong, nonatomic) UIWindow *window;
+@property (strong, nonatomic) NSString *latestVer;
+@property (assign, nonatomic) BOOL allowRotation;
+
+@end
diff --git a/ios/WeexDemo/AppDelegate.m b/ios/WeexDemo/AppDelegate.m
new file mode 100644
index 0000000..64aba4e
--- /dev/null
+++ b/ios/WeexDemo/AppDelegate.m
@@ -0,0 +1,290 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import "AppDelegate.h"
+#import "WXDemoViewController.h"
+#import "UIViewController+WXDemoNaviBar.h"
+#import "WXEventModule.h"
+#import "WXImgLoaderDefaultImpl.h"
+#import "DemoDefine.h"
+#import "WXScannerVC.h"
+#import "WXScannerHistoryVC.h"
+#import "WXSyncTestModule.h"
+#import "WXExtModule.h"
+#import "UIView+UIThreadCheck.h"
+#import <WeexSDK/WeexSDK.h>
+#import <AVFoundation/AVFoundation.h>
+#import <ATSDK/ATManager.h>
+#import "WXConfigCenterProtocol.h"
+#import "WXConfigCenterDefaultImpl.h"
+#import "WXNavigationHandlerImpl.h"
+//#import "WXAnalyzerCenter.h"
+#import "WXApmGeneratorImpl.h"
+#import "WXWebSocketDefaultImpl.h"
+#import <WeexPluginLoader/WeexPluginLoader.h>
+
+#ifdef DEBUG
+#import "DebugAnalyzer.h"
+#endif
+
+@interface AppDelegate ()
+@end
+
+@implementation AppDelegate
+
+#pragma mark
+#pragma mark application
+
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
+{
+ self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
+ self.window.backgroundColor = [UIColor whiteColor];
+
+ [self initWeexSDK];
+
+ self.window.rootViewController = [[WXRootViewController alloc] initWithRootViewController:[self demoController]];
+ [self.window makeKeyAndVisible];
+
+ [self startSplashScreen];
+
+#if DEBUG
+ // check if there are any UI changes on main thread.
+ [UIView wx_checkUIThread];
+#endif
+
+ return YES;
+}
+
+- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
+{
+ if (_allowRotation) {
+ return UIInterfaceOrientationMaskAllButUpsideDown;
+ }
+ else {
+ return UIInterfaceOrientationMaskPortrait;
+ }
+}
+
+-(void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler
+{
+ if ([shortcutItem.type isEqualToString:QRSCAN]) {
+ WXScannerVC * scanViewController = [[WXScannerVC alloc] init];
+ [(WXRootViewController*)self.window.rootViewController pushViewController:scanViewController animated:YES];
+ }
+ if ([shortcutItem.type isEqualToString:QRSCAN_HISTORY]) {
+ WXScannerHistoryVC *scannerHistoryVC = [WXScannerHistoryVC new];
+ [(WXRootViewController*)self.window.rootViewController pushViewController:scannerHistoryVC animated:YES];
+ }
+}
+
+- (void)applicationDidEnterBackground:(UIApplication *)application
+{
+
+#ifdef UITEST
+#if !TARGET_IPHONE_SIMULATOR
+ NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
+ NSString *documentsDirectory = [paths objectAtIndex:0];
+ setenv("GCOV_PREFIX", [documentsDirectory cStringUsingEncoding:NSUTF8StringEncoding], 1);
+ setenv("GCOV_PREFIX_STRIP", "6", 1);
+#endif
+ extern void __gcov_flush(void);
+ __gcov_flush();
+#endif
+}
+
+- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
+{
+ NSString *newUrlStr = url.absoluteString;
+ if([url.scheme isEqualToString:@"wxpage"]) {
+ newUrlStr = [newUrlStr stringByReplacingOccurrencesOfString:@"wxpage://" withString:@"http://"];
+ }
+ UIViewController * viewController = [self demoController];
+ ((WXDemoViewController*)viewController).url = [NSURL URLWithString:newUrlStr];
+ [(WXRootViewController*)self.window.rootViewController pushViewController:viewController animated:YES];
+ return YES;
+}
+
+#pragma mark weex
+- (void)initWeexSDK
+{
+ [WXAppConfiguration setAppGroup:@"AliApp"];
+ [WXAppConfiguration setAppName:@"WeexDemo"];
+ [WXAppConfiguration setExternalUserAgent:@"ExternalUA"];
+
+ [WXSDKEngine initSDKEnvironment];
+
+ [WXSDKEngine registerHandler:[WXImgLoaderDefaultImpl new] withProtocol:@protocol(WXImgLoaderProtocol)];
+ [WXSDKEngine registerHandler:[WXEventModule new] withProtocol:@protocol(WXEventModuleProtocol)];
+ [WXSDKEngine registerHandler:[WXConfigCenterDefaultImpl new] withProtocol:@protocol(WXConfigCenterProtocol)];
+ [WXSDKEngine registerHandler:[WXNavigationHandlerImpl new] withProtocol:@protocol(WXNavigationProtocol)];
+ [WXSDKEngine registerHandler:[WXApmGeneratorImpl new] withProtocol:@protocol(WXApmGeneratorProtocol)];
+ [WXSDKEngine registerHandler:[WXWebSocketDefaultImpl new] withProtocol:@protocol(WXWebSocketHandler)];
+
+ [WXSDKEngine registerComponent:@"select" withClass:NSClassFromString(@"WXSelectComponent")];
+ [WXSDKEngine registerModule:@"event" withClass:[WXEventModule class]];
+ [WXSDKEngine registerModule:@"syncTest" withClass:[WXSyncTestModule class]];
+ [WXSDKEngine registerModule:@"titleBar" withClass:NSClassFromString(@"WXTitleBarModule")];
+ [WXSDKEngine registerExtendCallNative:@"test" withClass:NSClassFromString(@"WXExtendCallNativeTest")];
+ [WXSDKEngine registerModule:@"ext" withClass:[WXExtModule class]];
+ [WPRegister registerPlugins];
+#ifdef DEBUG
+ [WXAnalyzerCenter addWxAnalyzer:[DebugAnalyzer new]];
+#endif
+
+#if !(TARGET_IPHONE_SIMULATOR)
+ [self checkUpdate];
+#endif
+
+#ifdef DEBUG
+ [self atAddPlugin];
+ [WXDebugTool setDebug:YES];
+ [WXLog setLogLevel:WXLogLevelLog];
+
+ #ifndef UITEST
+ [[ATManager shareInstance] show];
+ #endif
+#else
+ [WXDebugTool setDebug:NO];
+ [WXLog setLogLevel:WXLogLevelError];
+#endif
+}
+
+- (UIViewController *)demoController
+{
+ UIViewController *demo = [[WXDemoViewController alloc] init];
+ ((WXDemoViewController *)demo).url = [NSURL URLWithString:BUNDLE_URL];
+ return demo;
+}
+
+#pragma mark
+#pragma mark animation when startup
+
+- (void)startSplashScreen
+{
+ UIView* splashView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
+ splashView.backgroundColor = WEEX_COLOR;
+
+ UIImageView *iconImageView = [UIImageView new];
+ UIImage *icon = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"weex-icon" ofType:@"png"]];
+ if ([icon respondsToSelector:@selector(imageWithRenderingMode:)]) {
+ iconImageView.image = [icon imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
+ iconImageView.tintColor = [UIColor whiteColor];
+ } else {
+ iconImageView.image = icon;
+ }
+ iconImageView.frame = CGRectMake(0, 0, 320, 320);
+ iconImageView.contentMode = UIViewContentModeScaleAspectFit;
+ iconImageView.center = splashView.center;
+ [splashView addSubview:iconImageView];
+
+ [self.window addSubview:splashView];
+
+ float animationDuration = 1.4;
+ CGFloat shrinkDuration = animationDuration * 0.3;
+ CGFloat growDuration = animationDuration * 0.7;
+
+ if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
+ [UIView animateWithDuration:shrinkDuration delay:1.0 usingSpringWithDamping:0.7f initialSpringVelocity:10 options:UIViewAnimationOptionCurveEaseInOut animations:^{
+ CGAffineTransform scaleTransform = CGAffineTransformMakeScale(0.75, 0.75);
+ iconImageView.transform = scaleTransform;
+ } completion:^(BOOL finished) {
+ [UIView animateWithDuration:growDuration animations:^{
+ CGAffineTransform scaleTransform = CGAffineTransformMakeScale(20, 20);
+ iconImageView.transform = scaleTransform;
+ splashView.alpha = 0;
+ } completion:^(BOOL finished) {
+ [splashView removeFromSuperview];
+ }];
+ }];
+ } else {
+ [UIView animateWithDuration:shrinkDuration delay:1.0 options:0 animations:^{
+ CGAffineTransform scaleTransform = CGAffineTransformMakeScale(0.75, 0.75);
+ iconImageView.transform = scaleTransform;
+ } completion:^(BOOL finished) {
+ [UIView animateWithDuration:growDuration animations:^{
+ CGAffineTransform scaleTransform = CGAffineTransformMakeScale(20, 20);
+ iconImageView.transform = scaleTransform;
+ splashView.alpha = 0;
+ } completion:^(BOOL finished) {
+ [splashView removeFromSuperview];
+ }];
+ }];
+ }
+}
+
+#pragma mark
+
+- (void)atAddPlugin {
+#if DEBUG
+ [[ATManager shareInstance] addPluginWithId:@"weex" andName:@"weex" andIconName:@"../weex" andEntry:@"" andArgs:@[@""]];
+ [[ATManager shareInstance] addSubPluginWithParentId:@"weex" andSubId:@"logger" andName:@"logger" andIconName:@"log" andEntry:@"WXATLoggerPlugin" andArgs:@[@""]];
+// [[ATManager shareInstance] addSubPluginWithParentId:@"weex" andSubId:@"viewHierarchy" andName:@"hierarchy" andIconName:@"log" andEntry:@"WXATViewHierarchyPlugin" andArgs:@[@""]];
+ [[ATManager shareInstance] addSubPluginWithParentId:@"weex" andSubId:@"test2" andName:@"test" andIconName:@"at_arr_refresh" andEntry:@"" andArgs:@[]];
+ [[ATManager shareInstance] addSubPluginWithParentId:@"weex" andSubId:@"test3" andName:@"test" andIconName:@"at_arr_refresh" andEntry:@"" andArgs:@[]];
+#endif
+}
+
+- (void)checkUpdate {
+ __weak typeof(self) weakSelf = self;
+ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
+ NSDictionary *infoDic = [[NSBundle mainBundle] infoDictionary];
+ NSString *currentVersion = [infoDic objectForKey:@"CFBundleShortVersionString"];
+ NSString *URL = @"http://itunes.apple.com/lookup?id=1130862662";
+ NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
+ [request setURL:[NSURL URLWithString:URL]];
+ [request setHTTPMethod:@"POST"];
+
+ NSHTTPURLResponse *urlResponse = nil;
+ NSError *error = nil;
+ NSData *recervedData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error];
+ NSString *results = [[NSString alloc] initWithBytes:[recervedData bytes] length:[recervedData length] encoding:NSUTF8StringEncoding];
+
+ NSDictionary *dic = [WXUtility objectFromJSON:results];
+ NSArray *infoArray = [dic objectForKey:@"results"];
+
+ if ([infoArray count]) {
+ NSDictionary *releaseInfo = [infoArray objectAtIndex:0];
+ weakSelf.latestVer = [releaseInfo objectForKey:@"version"];
+ if ([weakSelf.latestVer floatValue] > [currentVersion floatValue]) {
+ if (![[NSUserDefaults standardUserDefaults] boolForKey: weakSelf.latestVer]) {
+ [[NSUserDefaults standardUserDefaults] setBool:FALSE forKey:weakSelf.latestVer];
+ dispatch_async(dispatch_get_main_queue(), ^{
+ UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"New Version" message:@"Will update to a new version" delegate:self cancelButtonTitle:@"cancel" otherButtonTitles:@"update", nil];
+ [alert show];
+ });
+ }
+ }
+ }
+ });
+}
+
+- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
+ switch (buttonIndex) {
+ case 0:
+ [[NSUserDefaults standardUserDefaults] setBool:TRUE forKey:self.latestVer];
+ break;
+ case 1:
+ [[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"itms-apps://itunes.apple.com/cn/app/weex-playground/id1130862662?mt=8"]];
+ default:
+ break;
+ }
+ [alertView dismissWithClickedButtonIndex:buttonIndex animated:YES];
+}
+
+@end
diff --git a/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/AppStoreIcon1024.png b/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/AppStoreIcon1024.png
new file mode 100644
index 0000000..435f57b
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/AppStoreIcon1024.png
Binary files differ
diff --git a/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 0000000..21cf59d
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,112 @@
+{
+ "images" : [
+ {
+ "idiom" : "iphone",
+ "size" : "20x20",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "20x20",
+ "scale" : "3x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "iphone",
+ "filename" : "Icon-29@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "iphone",
+ "filename" : "Icon-29@3x.png",
+ "scale" : "3x"
+ },
+ {
+ "size" : "40x40",
+ "idiom" : "iphone",
+ "filename" : "Icon-40@2x-1.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "40x40",
+ "idiom" : "iphone",
+ "filename" : "Icon-40@3x.png",
+ "scale" : "3x"
+ },
+ {
+ "size" : "60x60",
+ "idiom" : "iphone",
+ "filename" : "Icon-60@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "60x60",
+ "idiom" : "iphone",
+ "filename" : "Icon-60@3x.png",
+ "scale" : "3x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "20x20",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "20x20",
+ "scale" : "2x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "ipad",
+ "filename" : "Icon-29.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "ipad",
+ "filename" : "Icon-29@2x-1.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "40x40",
+ "idiom" : "ipad",
+ "filename" : "Icon-40.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "40x40",
+ "idiom" : "ipad",
+ "filename" : "Icon-40@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "76x76",
+ "idiom" : "ipad",
+ "filename" : "Icon-76.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "76x76",
+ "idiom" : "ipad",
+ "filename" : "Icon-76@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "83.5x83.5",
+ "idiom" : "ipad",
+ "filename" : "Icon-83.5@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "1024x1024",
+ "idiom" : "ios-marketing",
+ "filename" : "AppStoreIcon1024.png",
+ "scale" : "1x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-29.png b/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-29.png
new file mode 100644
index 0000000..fcadf69
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-29.png
Binary files differ
diff --git a/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-29@2x-1.png b/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-29@2x-1.png
new file mode 100644
index 0000000..594350e
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-29@2x-1.png
Binary files differ
diff --git a/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-29@2x.png b/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-29@2x.png
new file mode 100644
index 0000000..594350e
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-29@2x.png
Binary files differ
diff --git a/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-29@3x.png b/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-29@3x.png
new file mode 100644
index 0000000..6b6635c
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-29@3x.png
Binary files differ
diff --git a/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-40.png b/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-40.png
new file mode 100644
index 0000000..17ef490
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-40.png
Binary files differ
diff --git a/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-40@2x-1.png b/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-40@2x-1.png
new file mode 100644
index 0000000..f3641e9
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-40@2x-1.png
Binary files differ
diff --git a/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png b/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png
new file mode 100644
index 0000000..f3641e9
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png
Binary files differ
diff --git a/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-40@3x.png b/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-40@3x.png
new file mode 100644
index 0000000..2fa64a0
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-40@3x.png
Binary files differ
diff --git a/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png b/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png
new file mode 100644
index 0000000..2fa64a0
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png
Binary files differ
diff --git a/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png b/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png
new file mode 100644
index 0000000..6160662
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png
Binary files differ
diff --git a/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-76.png b/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-76.png
new file mode 100644
index 0000000..85ede63
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-76.png
Binary files differ
diff --git a/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png b/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png
new file mode 100644
index 0000000..c513d88
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png
Binary files differ
diff --git a/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-83.5@2x.png b/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-83.5@2x.png
new file mode 100644
index 0000000..7d77683
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/AppIcon.appiconset/Icon-83.5@2x.png
Binary files differ
diff --git a/ios/WeexDemo/Assets.xcassets/Contents.json b/ios/WeexDemo/Assets.xcassets/Contents.json
new file mode 100644
index 0000000..da4a164
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/ios/WeexDemo/Assets.xcassets/LaunchImage.launchimage/Contents.json b/ios/WeexDemo/Assets.xcassets/LaunchImage.launchimage/Contents.json
new file mode 100644
index 0000000..b4bc73c
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/LaunchImage.launchimage/Contents.json
@@ -0,0 +1,88 @@
+{
+ "images" : [
+ {
+ "extent" : "full-screen",
+ "idiom" : "iphone",
+ "subtype" : "2688h",
+ "filename" : "iPhoneXMax@3x.png",
+ "minimum-system-version" : "12.0",
+ "orientation" : "portrait",
+ "scale" : "3x"
+ },
+ {
+ "extent" : "full-screen",
+ "idiom" : "iphone",
+ "subtype" : "1792h",
+ "filename" : "iPhoneXR@2x.png",
+ "minimum-system-version" : "12.0",
+ "orientation" : "portrait",
+ "scale" : "2x"
+ },
+ {
+ "extent" : "full-screen",
+ "idiom" : "iphone",
+ "subtype" : "2436h",
+ "filename" : "iPhoneX@3x.png",
+ "minimum-system-version" : "11.0",
+ "orientation" : "portrait",
+ "scale" : "3x"
+ },
+ {
+ "extent" : "full-screen",
+ "idiom" : "iphone",
+ "subtype" : "2436h",
+ "filename" : "iPhoneX-landscape.png",
+ "minimum-system-version" : "11.0",
+ "orientation" : "landscape",
+ "scale" : "3x"
+ },
+ {
+ "extent" : "full-screen",
+ "idiom" : "iphone",
+ "subtype" : "736h",
+ "filename" : "Retinal HD 5.5.png",
+ "minimum-system-version" : "8.0",
+ "orientation" : "portrait",
+ "scale" : "3x"
+ },
+ {
+ "extent" : "full-screen",
+ "idiom" : "iphone",
+ "subtype" : "736h",
+ "filename" : "iPhone5.5-landscape.png",
+ "minimum-system-version" : "8.0",
+ "orientation" : "landscape",
+ "scale" : "3x"
+ },
+ {
+ "extent" : "full-screen",
+ "idiom" : "iphone",
+ "subtype" : "667h",
+ "filename" : "Retinal HD 4.7.png",
+ "minimum-system-version" : "8.0",
+ "orientation" : "portrait",
+ "scale" : "2x"
+ },
+ {
+ "orientation" : "portrait",
+ "idiom" : "iphone",
+ "filename" : "Default@2x.png",
+ "extent" : "full-screen",
+ "minimum-system-version" : "7.0",
+ "scale" : "2x"
+ },
+ {
+ "extent" : "full-screen",
+ "idiom" : "iphone",
+ "subtype" : "retina4",
+ "filename" : "Default-568h@2x.png",
+ "minimum-system-version" : "7.0",
+ "orientation" : "portrait",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/ios/WeexDemo/Assets.xcassets/LaunchImage.launchimage/Default-568h@2x.png b/ios/WeexDemo/Assets.xcassets/LaunchImage.launchimage/Default-568h@2x.png
new file mode 100644
index 0000000..7e013e4
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/LaunchImage.launchimage/Default-568h@2x.png
Binary files differ
diff --git a/ios/WeexDemo/Assets.xcassets/LaunchImage.launchimage/Default@2x.png b/ios/WeexDemo/Assets.xcassets/LaunchImage.launchimage/Default@2x.png
new file mode 100644
index 0000000..948f7a3
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/LaunchImage.launchimage/Default@2x.png
Binary files differ
diff --git a/ios/WeexDemo/Assets.xcassets/LaunchImage.launchimage/Retinal HD 4.7.png b/ios/WeexDemo/Assets.xcassets/LaunchImage.launchimage/Retinal HD 4.7.png
new file mode 100644
index 0000000..95b95ea
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/LaunchImage.launchimage/Retinal HD 4.7.png
Binary files differ
diff --git a/ios/WeexDemo/Assets.xcassets/LaunchImage.launchimage/Retinal HD 5.5.png b/ios/WeexDemo/Assets.xcassets/LaunchImage.launchimage/Retinal HD 5.5.png
new file mode 100644
index 0000000..27dd969
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/LaunchImage.launchimage/Retinal HD 5.5.png
Binary files differ
diff --git a/ios/WeexDemo/Assets.xcassets/LaunchImage.launchimage/iPhone5.5-landscape.png b/ios/WeexDemo/Assets.xcassets/LaunchImage.launchimage/iPhone5.5-landscape.png
new file mode 100644
index 0000000..6eb5283
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/LaunchImage.launchimage/iPhone5.5-landscape.png
Binary files differ
diff --git a/ios/WeexDemo/Assets.xcassets/LaunchImage.launchimage/iPhoneX-landscape.png b/ios/WeexDemo/Assets.xcassets/LaunchImage.launchimage/iPhoneX-landscape.png
new file mode 100644
index 0000000..2b65d7c
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/LaunchImage.launchimage/iPhoneX-landscape.png
Binary files differ
diff --git a/ios/WeexDemo/Assets.xcassets/LaunchImage.launchimage/iPhoneX@3x.png b/ios/WeexDemo/Assets.xcassets/LaunchImage.launchimage/iPhoneX@3x.png
new file mode 100644
index 0000000..ddda19e
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/LaunchImage.launchimage/iPhoneX@3x.png
Binary files differ
diff --git a/ios/WeexDemo/Assets.xcassets/LaunchImage.launchimage/iPhoneXMax@3x.png b/ios/WeexDemo/Assets.xcassets/LaunchImage.launchimage/iPhoneXMax@3x.png
new file mode 100644
index 0000000..64c3772
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/LaunchImage.launchimage/iPhoneXMax@3x.png
Binary files differ
diff --git a/ios/WeexDemo/Assets.xcassets/LaunchImage.launchimage/iPhoneXR@2x.png b/ios/WeexDemo/Assets.xcassets/LaunchImage.launchimage/iPhoneXR@2x.png
new file mode 100644
index 0000000..9ecb99e
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/LaunchImage.launchimage/iPhoneXR@2x.png
Binary files differ
diff --git a/ios/WeexDemo/Assets.xcassets/back.imageset/Contents.json b/ios/WeexDemo/Assets.xcassets/back.imageset/Contents.json
new file mode 100644
index 0000000..3bad3d0
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/back.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "filename" : "back.png",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "back@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "back@3x.png",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/ios/WeexDemo/Assets.xcassets/back.imageset/back.png b/ios/WeexDemo/Assets.xcassets/back.imageset/back.png
new file mode 100644
index 0000000..1f3e073
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/back.imageset/back.png
Binary files differ
diff --git a/ios/WeexDemo/Assets.xcassets/back.imageset/back@2x.png b/ios/WeexDemo/Assets.xcassets/back.imageset/back@2x.png
new file mode 100644
index 0000000..76d0bf8
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/back.imageset/back@2x.png
Binary files differ
diff --git a/ios/WeexDemo/Assets.xcassets/back.imageset/back@3x.png b/ios/WeexDemo/Assets.xcassets/back.imageset/back@3x.png
new file mode 100644
index 0000000..8180558
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/back.imageset/back@3x.png
Binary files differ
diff --git a/ios/WeexDemo/Assets.xcassets/delete.imageset/Contents.json b/ios/WeexDemo/Assets.xcassets/delete.imageset/Contents.json
new file mode 100644
index 0000000..1231572
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/delete.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "filename" : "delete.png",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "delete@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "delete@3x.png",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/ios/WeexDemo/Assets.xcassets/delete.imageset/delete.png b/ios/WeexDemo/Assets.xcassets/delete.imageset/delete.png
new file mode 100644
index 0000000..d7cc20a
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/delete.imageset/delete.png
Binary files differ
diff --git a/ios/WeexDemo/Assets.xcassets/delete.imageset/delete@2x.png b/ios/WeexDemo/Assets.xcassets/delete.imageset/delete@2x.png
new file mode 100644
index 0000000..63aa9cb
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/delete.imageset/delete@2x.png
Binary files differ
diff --git a/ios/WeexDemo/Assets.xcassets/delete.imageset/delete@3x.png b/ios/WeexDemo/Assets.xcassets/delete.imageset/delete@3x.png
new file mode 100644
index 0000000..5963f9c
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/delete.imageset/delete@3x.png
Binary files differ
diff --git a/ios/WeexDemo/Assets.xcassets/reload.imageset/Contents.json b/ios/WeexDemo/Assets.xcassets/reload.imageset/Contents.json
new file mode 100644
index 0000000..e2cd5af
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/reload.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "filename" : "reload.png",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "reload@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "reload@3x.png",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/ios/WeexDemo/Assets.xcassets/reload.imageset/reload.png b/ios/WeexDemo/Assets.xcassets/reload.imageset/reload.png
new file mode 100644
index 0000000..1fd4bac
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/reload.imageset/reload.png
Binary files differ
diff --git a/ios/WeexDemo/Assets.xcassets/reload.imageset/reload@2x.png b/ios/WeexDemo/Assets.xcassets/reload.imageset/reload@2x.png
new file mode 100644
index 0000000..6e97235
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/reload.imageset/reload@2x.png
Binary files differ
diff --git a/ios/WeexDemo/Assets.xcassets/reload.imageset/reload@3x.png b/ios/WeexDemo/Assets.xcassets/reload.imageset/reload@3x.png
new file mode 100644
index 0000000..ab75ee7
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/reload.imageset/reload@3x.png
Binary files differ
diff --git a/ios/WeexDemo/Assets.xcassets/scan.imageset/Contents.json b/ios/WeexDemo/Assets.xcassets/scan.imageset/Contents.json
new file mode 100644
index 0000000..798ba85
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/scan.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "filename" : "scan.png",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "scan@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "scan@3x.png",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/ios/WeexDemo/Assets.xcassets/scan.imageset/scan.png b/ios/WeexDemo/Assets.xcassets/scan.imageset/scan.png
new file mode 100644
index 0000000..6183105
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/scan.imageset/scan.png
Binary files differ
diff --git a/ios/WeexDemo/Assets.xcassets/scan.imageset/scan@2x.png b/ios/WeexDemo/Assets.xcassets/scan.imageset/scan@2x.png
new file mode 100644
index 0000000..43cf01d
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/scan.imageset/scan@2x.png
Binary files differ
diff --git a/ios/WeexDemo/Assets.xcassets/scan.imageset/scan@3x.png b/ios/WeexDemo/Assets.xcassets/scan.imageset/scan@3x.png
new file mode 100644
index 0000000..76c7e0b
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/scan.imageset/scan@3x.png
Binary files differ
diff --git a/ios/WeexDemo/Assets.xcassets/scan_history.imageset/Contents.json b/ios/WeexDemo/Assets.xcassets/scan_history.imageset/Contents.json
new file mode 100644
index 0000000..e972e4e
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/scan_history.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "filename" : "history.png",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "history@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "history@3x.png",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/ios/WeexDemo/Assets.xcassets/scan_history.imageset/history.png b/ios/WeexDemo/Assets.xcassets/scan_history.imageset/history.png
new file mode 100644
index 0000000..48aac03
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/scan_history.imageset/history.png
Binary files differ
diff --git a/ios/WeexDemo/Assets.xcassets/scan_history.imageset/history@2x.png b/ios/WeexDemo/Assets.xcassets/scan_history.imageset/history@2x.png
new file mode 100644
index 0000000..dd94cb7
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/scan_history.imageset/history@2x.png
Binary files differ
diff --git a/ios/WeexDemo/Assets.xcassets/scan_history.imageset/history@3x.png b/ios/WeexDemo/Assets.xcassets/scan_history.imageset/history@3x.png
new file mode 100644
index 0000000..2d5f2b4
--- /dev/null
+++ b/ios/WeexDemo/Assets.xcassets/scan_history.imageset/history@3x.png
Binary files differ
diff --git a/ios/WeexDemo/DemoBaseViewController.h b/ios/WeexDemo/DemoBaseViewController.h
new file mode 100644
index 0000000..48d01e0
--- /dev/null
+++ b/ios/WeexDemo/DemoBaseViewController.h
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import <UIKit/UIKit.h>
+
+@interface DemoBaseViewController : UIViewController
+
+@end
diff --git a/ios/WeexDemo/DemoBaseViewController.m b/ios/WeexDemo/DemoBaseViewController.m
new file mode 100644
index 0000000..edfb8a1
--- /dev/null
+++ b/ios/WeexDemo/DemoBaseViewController.m
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import "DemoBaseViewController.h"
+#import "UIViewController+WXDemoNaviBar.h"
+
+@interface DemoBaseViewController ()
+
+@end
+
+@implementation DemoBaseViewController
+
+- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
+{
+ return [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
+}
+
+- (void)viewDidLoad {
+ [super viewDidLoad];
+ // Do any additional setup after loading the view.
+ [self setupNaviBar];
+}
+
+- (void)didReceiveMemoryWarning {
+ [super didReceiveMemoryWarning];
+ // Dispose of any resources that can be recreated.
+}
+
+@end
diff --git a/ios/WeexDemo/DemoDefine.h b/ios/WeexDemo/DemoDefine.h
new file mode 100644
index 0000000..04840bb
--- /dev/null
+++ b/ios/WeexDemo/DemoDefine.h
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#define CURRENT_IP [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"localServer-ip" ofType:@".txt"] encoding:NSUTF8StringEncoding error:nil]
+
+#if TARGET_IPHONE_SIMULATOR
+ #define DEMO_HOST @"127.0.0.1"
+#else
+ #define DEMO_HOST CURRENT_IP
+#endif
+
+#define DEMO_URL(path) [NSString stringWithFormat:@"http://%@:12580/%s", DEMO_HOST, #path]
+
+#define HOME_URL [NSString stringWithFormat:@"http://%@:12580/examples/build/vue/index.js", DEMO_HOST]
+
+#define BUNDLE_URL [NSString stringWithFormat:@"file://%@/bundlejs/landing.weex.js",[NSBundle mainBundle].bundlePath]
+
+#define UITEST_HOME_URL @"http://test?_wx_tpl=http://localhost:12580/test/build/TC__Home.js"
+
+#define QRSCAN @"com.taobao.WeexDemo.scan"
+#define QRSCAN_HISTORY @"com.taobao.WeexDemo.scan.history"
+#define WEEX_COLOR [UIColor colorWithRed:0.27 green:0.71 blue:0.94 alpha:1]
+#define WX_SCANNER_HISTORY @"wx_scanner_history"
diff --git a/ios/WeexDemo/Images.xcassets/Brand Assets.launchimage/Contents.json b/ios/WeexDemo/Images.xcassets/Brand Assets.launchimage/Contents.json
new file mode 100644
index 0000000..e37b649
--- /dev/null
+++ b/ios/WeexDemo/Images.xcassets/Brand Assets.launchimage/Contents.json
@@ -0,0 +1,21 @@
+{
+ "images" : [
+ {
+ "orientation" : "portrait",
+ "idiom" : "iphone",
+ "minimum-system-version" : "7.0",
+ "scale" : "2x"
+ },
+ {
+ "orientation" : "portrait",
+ "idiom" : "iphone",
+ "minimum-system-version" : "7.0",
+ "subtype" : "retina4",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/ios/WeexDemo/Info.plist b/ios/WeexDemo/Info.plist
new file mode 100644
index 0000000..49abc9a
--- /dev/null
+++ b/ios/WeexDemo/Info.plist
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>en</string>
+ <key>CFBundleDisplayName</key>
+ <string>WeexPlayground</string>
+ <key>CFBundleExecutable</key>
+ <string>$(EXECUTABLE_NAME)</string>
+ <key>CFBundleIdentifier</key>
+ <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>$(PRODUCT_NAME)</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleShortVersionString</key>
+ <string>2.2</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleURLTypes</key>
+ <array>
+ <dict>
+ <key>CFBundleURLSchemes</key>
+ <array>
+ <string>wxpage</string>
+ </array>
+ </dict>
+ </array>
+ <key>CFBundleVersion</key>
+ <string>3</string>
+ <key>LSRequiresIPhoneOS</key>
+ <true/>
+ <key>NSAppTransportSecurity</key>
+ <dict>
+ <key>NSAllowsArbitraryLoads</key>
+ <true/>
+ </dict>
+ <key>NSCameraUsageDescription</key>
+ <string>$(PRODUCT_NAME) will access your camera,so that you can scan qr code to show your page</string>
+ <key>NSLocationWhenInUseUsageDescription</key>
+ <string>$(PRODUCT_NAME) will access your location, so that you can get current location where you are</string>
+ <key>NSPhotoLibraryAddUsageDescription</key>
+ <string>$(PRODUCT_NAME) needs access your photo Album, so that you can save image to your photo library.</string>
+ <key>NSPhotoLibraryUsageDescription</key>
+ <string>$(PRODUCT_NAME) needs access your photo Album,so that you can save image to your photo library.</string>
+ <key>UIApplicationShortcutItems</key>
+ <array>
+ <dict>
+ <key>UIApplicationShortcutItemIconFile</key>
+ <string>scan_history</string>
+ <key>UIApplicationShortcutItemSubtitle</key>
+ <string>history</string>
+ <key>UIApplicationShortcutItemTitle</key>
+ <string>Scan history</string>
+ <key>UIApplicationShortcutItemType</key>
+ <string>com.taobao.WeexDemo.scan.history</string>
+ </dict>
+ <dict>
+ <key>UIApplicationShortcutItemIconFile</key>
+ <string>scan</string>
+ <key>UIApplicationShortcutItemSubtitle</key>
+ <string>scan QR code</string>
+ <key>UIApplicationShortcutItemTitle</key>
+ <string>Scan QR</string>
+ <key>UIApplicationShortcutItemType</key>
+ <string>com.taobao.WeexDemo.scan</string>
+ </dict>
+ </array>
+ <key>UIRequiredDeviceCapabilities</key>
+ <array>
+ <string>armv7</string>
+ </array>
+ <key>UIStatusBarStyle</key>
+ <string>UIStatusBarStyleLightContent</string>
+ <key>UISupportedInterfaceOrientations</key>
+ <array>
+ <string>UIInterfaceOrientationPortrait</string>
+ <string>UIInterfaceOrientationLandscapeLeft</string>
+ <string>UIInterfaceOrientationLandscapeRight</string>
+ </array>
+ <key>UISupportedInterfaceOrientations~ipad</key>
+ <array>
+ <string>UIInterfaceOrientationPortrait</string>
+ <string>UIInterfaceOrientationPortraitUpsideDown</string>
+ <string>UIInterfaceOrientationLandscapeLeft</string>
+ <string>UIInterfaceOrientationLandscapeRight</string>
+ </array>
+ <key>UIViewControllerBasedStatusBarAppearance</key>
+ <false/>
+</dict>
+</plist>
diff --git a/ios/WeexDemo/Scanner/WXScannerHistoryVC.h b/ios/WeexDemo/Scanner/WXScannerHistoryVC.h
new file mode 100644
index 0000000..2dee545
--- /dev/null
+++ b/ios/WeexDemo/Scanner/WXScannerHistoryVC.h
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import <UIKit/UIKit.h>
+
+@interface WXScannerHistoryVC : UITableViewController<UIGestureRecognizerDelegate>
+
+@end
diff --git a/ios/WeexDemo/Scanner/WXScannerHistoryVC.m b/ios/WeexDemo/Scanner/WXScannerHistoryVC.m
new file mode 100644
index 0000000..b60c975
--- /dev/null
+++ b/ios/WeexDemo/Scanner/WXScannerHistoryVC.m
@@ -0,0 +1,225 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import "WXScannerHistoryVC.h"
+#import "DemoDefine.h"
+#import "WXDemoViewController.h"
+#import "UIViewController+WXDemoNaviBar.h"
+#import <CoreText/CoreText.h>
+
+@interface WXScannerHistoryVC ()
+@property(nonatomic)NSMutableArray * scanner_history;
+@property(nonatomic)UIImageView * qrCodeImageView;
+@end
+
+@implementation WXScannerHistoryVC
+
+- (instancetype)init {
+ if (self = [super init]) {
+ _scanner_history = [[[NSUserDefaults standardUserDefaults] objectForKey:WX_SCANNER_HISTORY] mutableCopy];
+ }
+ return self;
+}
+
+- (void)viewDidLoad {
+ [super viewDidLoad];
+ [self setupNaviBar];
+ UITapGestureRecognizer * tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleClick:)];
+ [self.tableView addGestureRecognizer:tapGestureRecognizer];
+ tapGestureRecognizer.delegate = self;
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadHistory) name:NSUserDefaultsDidChangeNotification object:nil];
+}
+
+- (void)dealloc {
+ [[NSNotificationCenter defaultCenter] removeObserver:self];
+}
+
+#pragma mark - Table view data source
+
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
+ return 1;
+}
+
+- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
+ return 88.0f;
+}
+
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+ return [_scanner_history count];
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+ [tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"WX_SCANNER_HISTORY_CELL"];
+ UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"WX_SCANNER_HISTORY_CELL" forIndexPath:indexPath];
+ if (!cell) {
+ cell = [UITableViewCell new];
+ }
+ UILongPressGestureRecognizer * longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)];
+ longPressGesture.minimumPressDuration = 1.0;
+ longPressGesture.delegate = self;
+ [cell addGestureRecognizer:longPressGesture];
+ NSMutableAttributedString * attributeString = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%ld %@",(long)indexPath.row+1,[_scanner_history objectAtIndex:indexPath.row]]];
+ [attributeString addAttribute:(NSString*)NSForegroundColorAttributeName value:(id)[UIColor redColor].CGColor range:NSMakeRange(0, 1)];
+ NSDictionary<NSString*, id> *attributes = @{
+ NSForegroundColorAttributeName:[UIColor redColor],
+ NSFontAttributeName: [UIFont boldSystemFontOfSize:25.0],
+ };
+ [attributeString addAttributes:attributes range:NSMakeRange(0, 2)];
+ cell.textLabel.attributedText = attributeString;
+ cell.textLabel.numberOfLines = 0;
+
+ return cell;
+}
+
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
+{
+ NSString *urlStr = _scanner_history[indexPath.row];
+ if (urlStr) {
+ WXDemoViewController * demoVC = [WXDemoViewController new];
+ demoVC.url = [NSURL URLWithString:urlStr];
+ [self.navigationController pushViewController:demoVC animated:YES];
+ }
+}
+
+- (void)reloadHistory
+{
+ if ([_scanner_history count]) {
+ [_qrCodeImageView removeFromSuperview];
+ [_scanner_history removeAllObjects];
+ _scanner_history = [[[NSUserDefaults standardUserDefaults] objectForKey:WX_SCANNER_HISTORY] mutableCopy];
+ [self.tableView reloadData];
+ }
+}
+
+- (void)handleClick:(UITapGestureRecognizer*)gestureRecognizer
+{
+ CGPoint clickPoint = [gestureRecognizer locationInView:self.tableView];
+ if (!CGRectContainsPoint(_qrCodeImageView.frame, clickPoint)) {
+ [_qrCodeImageView removeFromSuperview];
+ }
+}
+
+- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
+{
+ if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]) {
+ if ([_qrCodeImageView superview]) {
+ return YES;
+ }
+ }
+ if ([gestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]]) {
+ return YES;
+ }
+ return NO;
+}
+
+- (void)handleLongPress:(UILongPressGestureRecognizer *)gestureRecognizer
+{
+ if (gestureRecognizer.state != UIGestureRecognizerStateBegan) {
+ return ;
+ }
+ CGPoint pressPoint = [gestureRecognizer locationInView:self.tableView];
+ NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:pressPoint];
+ if (indexPath == nil) {
+ return;
+ }
+
+ NSString * url = _scanner_history[indexPath.row];
+ UIImage * qrCodeImage = [self getQRCodeWithData:url size:CGSizeMake(300, 300)];
+ _qrCodeImageView.contentMode = UIViewContentModeScaleAspectFill;
+ if (![_qrCodeImageView superview]) {
+ _qrCodeImageView = [[UIImageView alloc] initWithImage:qrCodeImage];
+ [_qrCodeImageView setCenter:self.view.center];
+ [self.view addSubview:_qrCodeImageView];
+ }else {
+ _qrCodeImageView.image = qrCodeImage;
+ }
+}
+
+- (UIImage*)getQRCodeWithData:(NSString*)url size:(CGSize)size {
+ CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
+ [filter setDefaults];
+ NSString *info = url;
+ NSData *infoData = [info dataUsingEncoding:NSUTF8StringEncoding];
+ [filter setValue:infoData forKeyPath:@"inputMessage"];
+
+ CIImage *outputImage = [filter outputImage];
+ CGRect extent = CGRectIntegral(outputImage.extent);
+ CGFloat scale = MIN(size.width/CGRectGetWidth(extent), size.width/CGRectGetHeight(extent));
+
+ size_t width = CGRectGetWidth(extent) * scale;
+ size_t height = CGRectGetHeight(extent) * scale;
+ CGColorSpaceRef cs = CGColorSpaceCreateDeviceGray();
+ CGContextRef bitmapRef = CGBitmapContextCreate(nil, width, height, 8, 0, cs, (CGBitmapInfo)kCGImageAlphaNone);
+ CIContext *context = [CIContext contextWithOptions:nil];
+ CGImageRef bitmapImage = [context createCGImage:outputImage fromRect:extent];
+ CGContextSetInterpolationQuality(bitmapRef, kCGInterpolationNone);
+ CGContextScaleCTM(bitmapRef, scale, scale);
+ CGContextDrawImage(bitmapRef, extent, bitmapImage);
+
+ CGImageRef scaledImage = CGBitmapContextCreateImage(bitmapRef);
+ CGContextRelease(bitmapRef);
+ CGImageRelease(bitmapImage);
+ return [UIImage imageWithCGImage:scaledImage];
+}
+
+/*
+// Override to support conditional editing of the table view.
+- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
+ // Return NO if you do not want the specified item to be editable.
+ return YES;
+}
+*/
+
+/*
+// Override to support editing the table view.
+- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
+ if (editingStyle == UITableViewCellEditingStyleDelete) {
+ // Delete the row from the data source
+ [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
+ } else if (editingStyle == UITableViewCellEditingStyleInsert) {
+ // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
+ }
+}
+*/
+
+/*
+// Override to support rearranging the table view.
+- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
+}
+*/
+
+/*
+// Override to support conditional rearranging of the table view.
+- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
+ // Return NO if you do not want the item to be re-orderable.
+ return YES;
+}
+*/
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+ // Get the new view controller using [segue destinationViewController].
+ // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/ios/WeexDemo/Scanner/WXScannerVC.h b/ios/WeexDemo/Scanner/WXScannerVC.h
new file mode 100644
index 0000000..aff1805
--- /dev/null
+++ b/ios/WeexDemo/Scanner/WXScannerVC.h
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import <UIKit/UIKit.h>
+#import <AVFoundation/AVFoundation.h>
+
+@interface WXScannerVC : UIViewController <AVCaptureMetadataOutputObjectsDelegate>
+
+@end
diff --git a/ios/WeexDemo/Scanner/WXScannerVC.m b/ios/WeexDemo/Scanner/WXScannerVC.m
new file mode 100644
index 0000000..01b3262
--- /dev/null
+++ b/ios/WeexDemo/Scanner/WXScannerVC.m
@@ -0,0 +1,242 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import <WeexSDK/WeexSDK.h>
+#import "WXScannerVC.h"
+#import "AppDelegate.h"
+#import "UIViewController+WXDemoNaviBar.h"
+#import "WXDemoViewController.h"
+#import "WXDebugTool.h"
+#import "WXDevTool.h"
+#import <AudioToolbox/AudioToolbox.h>
+
+@interface WXScannerVC ()
+
+@property (nonatomic, strong) AVCaptureSession * session;
+@property (nonatomic, strong) AVCaptureVideoPreviewLayer *captureLayer;
+@property (nonatomic, strong) UIView *sanFrameView;
+
+@end
+
+@implementation WXScannerVC
+
+#pragma mark - lifeCircle
+
+- (void)dealloc {
+ [_captureLayer removeFromSuperlayer];
+}
+
+- (void)viewDidLoad {
+ [super viewDidLoad];
+ self.edgesForExtendedLayout = UIRectEdgeNone;
+
+#if !(TARGET_IPHONE_SIMULATOR)
+ self.session = [[AVCaptureSession alloc]init];
+ [_session setSessionPreset:AVCaptureSessionPresetHigh];
+ AVCaptureDevice * device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
+ AVCaptureDeviceInput * input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];
+ AVCaptureMetadataOutput * output = [[AVCaptureMetadataOutput alloc]init];
+ if (output && input && device) {
+ [output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
+ [_session addInput:input];
+ [_session addOutput:output];
+ output.metadataObjectTypes=@[AVMetadataObjectTypeQRCode,AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeCode128Code];
+ }
+
+ _captureLayer = [AVCaptureVideoPreviewLayer layerWithSession:_session];
+ _captureLayer.videoGravity=AVLayerVideoGravityResizeAspectFill;
+ _captureLayer.frame=self.view.layer.bounds;
+#endif
+}
+
+- (void)viewWillAppear:(BOOL)animated {
+ [super viewWillAppear:animated];
+ [self.navigationController setNavigationBarHidden:NO];
+ [self setupNaviBar];
+ [self.view.layer addSublayer:_captureLayer];
+ [_session startRunning];
+}
+
+- (void) viewDidDisappear:(BOOL)animated
+{
+ [super viewDidDisappear:animated];
+
+ [_captureLayer removeFromSuperlayer];
+ [_session stopRunning];
+}
+
+- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection
+{
+ [_captureLayer removeFromSuperlayer];
+ [_session stopRunning];
+ AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
+ if (metadataObjects.count > 0) {
+ AVMetadataMachineReadableCodeObject * metadataObject = [metadataObjects objectAtIndex: 0];
+ [self recordScannerHistory:metadataObject.stringValue];
+ [self openURL:metadataObject.stringValue];
+ }
+}
+
+- (void)openURL:(NSString*)URL
+{
+ NSString *transformURL = URL;
+ NSArray* elts = [URL componentsSeparatedByString:@"?"];
+ if (elts.count >= 2) {
+ NSArray *urls = [elts.lastObject componentsSeparatedByString:@"="];
+ for (NSString *param in urls) {
+ if ([param isEqualToString:@"_wx_tpl"]) {
+ transformURL = [[urls lastObject] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
+ break;
+ }
+ }
+ }
+ NSURL *url = [NSURL URLWithString:transformURL];
+ if ([self remoteDebug:url]) {
+ return;
+ }
+ [self jsReplace:url];
+ WXDemoViewController * controller = [[WXDemoViewController alloc] init];
+ controller.url = url;
+ controller.source = @"scan";
+
+ NSMutableDictionary *queryDict = [NSMutableDictionary new];
+ if (WX_SYS_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")) {
+ NSURLComponents *components = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:NO];
+ NSArray *queryItems = [components queryItems];
+
+ for (NSURLQueryItem *item in queryItems)
+ [queryDict setObject:item.value forKey:item.name];
+ }else {
+ queryDict = [self queryWithURL:url];
+ }
+ NSString *wsport = queryDict[@"wsport"] ?: @"8082";
+ NSURL *socketURL = [NSURL URLWithString:[NSString stringWithFormat:@"ws://%@:%@", url.host, wsport]];
+ controller.hotReloadSocket = [[SRWebSocket alloc] initWithURL:socketURL protocols:@[@"echo-protocol"]];
+ controller.hotReloadSocket.delegate = controller;
+ [controller.hotReloadSocket open];
+
+ [[self navigationController] pushViewController:controller animated:YES];
+}
+
+- (NSMutableDictionary*)queryWithURL:(NSURL *)url {
+ NSMutableDictionary * queryDic = nil;
+ if (![url query]) {
+ return queryDic;
+ }
+ queryDic = [NSMutableDictionary new];
+ NSArray* components = [[url query] componentsSeparatedByString:@"&"];
+ for (NSUInteger i = 0; i < [components count]; i ++) {
+ NSString * queryParam = [components objectAtIndex:i];
+ NSArray* component = [queryParam componentsSeparatedByString:@"="];
+ [queryDic setValue:component[1] forKey:component[0]];
+ }
+
+ return queryDic;
+}
+
+#pragma mark - Replace JS
+
+- (void)jsReplace:(NSURL *)url
+{
+ if ([[url host] isEqualToString:@"weex-remote-debugger"]){
+ NSString* path = [url path];
+ if ([path isEqualToString:@"/dynamic/replace/bundle"]){
+ for (NSString * param in [[url query] componentsSeparatedByString:@"&"]) {
+ NSArray* elts = [param componentsSeparatedByString:@"="];
+ if ([elts count] < 2) {
+ continue;
+ }
+ if ([[elts firstObject] isEqualToString:@"bundle"]){
+ [WXDebugTool setReplacedBundleJS:[NSURL URLWithString:[elts lastObject]]];
+ }
+ }
+ }
+
+ if ([path isEqualToString:@"/dynamic/replace/framework"]){
+ for (NSString * param in [[url query] componentsSeparatedByString:@"&"]) {
+ NSArray* elts = [param componentsSeparatedByString:@"="];
+ if ([elts count] < 2) {
+ continue;
+ }
+ if ([[elts firstObject] isEqualToString:@"framework"]){
+ [WXDebugTool setReplacedJSFramework:[NSURL URLWithString:[elts lastObject]]];
+ }
+ }
+ }
+ }
+}
+
+#pragma mark Remote debug
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
+- (BOOL)remoteDebug:(NSURL *)url
+{
+ if ([url.scheme isEqualToString:@"ws"]) {
+ [WXSDKEngine connectDebugServer:url.absoluteString];
+ [WXSDKEngine initSDKEnvironment];
+
+ return YES;
+ }
+
+ NSString *query = url.query;
+ for (NSString *param in [query componentsSeparatedByString:@"&"]) {
+ NSArray *elts = [param componentsSeparatedByString:@"="];
+ if([elts count] < 2) continue;
+ if ([[elts firstObject] isEqualToString:@"_wx_debug"]) {
+ [WXDebugTool setDebug:YES];
+ [WXSDKEngine connectDebugServer:[[elts lastObject] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
+ if ([[[self.navigationController viewControllers] objectAtIndex:0] isKindOfClass:NSClassFromString(@"WXDemoViewController")]) {
+ WXDemoViewController * vc = (WXDemoViewController*)[[self.navigationController viewControllers] objectAtIndex:0];
+ [vc performSelector:NSSelectorFromString(@"loadRefreshCtl")];
+ [self.navigationController popToViewController:vc animated:NO];
+ }
+ return YES;
+ } else if ([[elts firstObject] isEqualToString:@"_wx_devtool"]) {
+ NSString *devToolURL = [[elts lastObject] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
+ [WXDevTool launchDevToolDebugWithUrl:devToolURL];
+ if ([[[self.navigationController viewControllers] objectAtIndex:0] isKindOfClass:NSClassFromString(@"WXDemoViewController")]) {
+ WXDemoViewController * vc = (WXDemoViewController*)[[self.navigationController viewControllers] objectAtIndex:0];
+ [self.navigationController popToViewController:vc animated:NO];
+ }
+
+ return YES;
+ }
+ }
+
+ return NO;
+}
+#pragma clang diagnostic pop
+
+- (void)recordScannerHistory:(NSString*)urlStr {
+
+ NSMutableArray * scanner_history = [[[NSUserDefaults standardUserDefaults] objectForKey:WX_SCANNER_HISTORY] mutableCopy];
+ if (!scanner_history) {
+ scanner_history = [NSMutableArray new];
+ }
+ if ([scanner_history containsObject:urlStr]) {
+ [scanner_history removeObject:urlStr];
+ }
+ if ([scanner_history count] >= 7) {
+ [scanner_history removeLastObject];
+ }
+ [scanner_history insertObject:urlStr atIndex:0];
+ [[NSUserDefaults standardUserDefaults] setObject:scanner_history forKey:WX_SCANNER_HISTORY];
+}
+
+@end
diff --git a/ios/WeexDemo/UIView+UIThreadCheck.h b/ios/WeexDemo/UIView+UIThreadCheck.h
new file mode 100644
index 0000000..154b602
--- /dev/null
+++ b/ios/WeexDemo/UIView+UIThreadCheck.h
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import <UIKit/UIKit.h>
+
+@interface UIView (UIThreadCheck)
+
++ (void)wx_checkUIThread;
+
+@end
diff --git a/ios/WeexDemo/UIView+UIThreadCheck.m b/ios/WeexDemo/UIView+UIThreadCheck.m
new file mode 100644
index 0000000..b8d4ed8
--- /dev/null
+++ b/ios/WeexDemo/UIView+UIThreadCheck.m
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import "UIView+UIThreadCheck.h"
+#import <WeexSDK/NSObject+WXSwizzle.h>
+
+#define WXCheckUIThread() NSAssert([NSThread isMainThread], \
+@"You must change UI on main thread!")
+
+@implementation UIView (UIThreadCheck)
+
++ (void)wx_checkUIThread
+{
+ [self weex_swizzle:[self class] Method:@selector(setNeedsLayout) withMethod:@selector(wx_setNeedsLayout)];
+ [self weex_swizzle:[self class] Method:@selector(setNeedsDisplay) withMethod:@selector(wx_setNeedsDisplay)];
+ [self weex_swizzle:[self class] Method:@selector(setNeedsDisplayInRect:) withMethod:@selector(wx_setNeedsDisplayInRect:)];
+}
+
+- (void)wx_setNeedsLayout
+{
+ WXCheckUIThread();
+ [self wx_setNeedsLayout];
+}
+
+- (void)wx_setNeedsDisplay
+{
+ WXCheckUIThread();
+ [self wx_setNeedsDisplay];
+}
+
+- (void)wx_setNeedsDisplayInRect:(CGRect)rect
+{
+ WXCheckUIThread();
+ [self wx_setNeedsDisplayInRect:rect];
+}
+
+@end
diff --git a/ios/WeexDemo/UIViewController+WXDemoNaviBar.h b/ios/WeexDemo/UIViewController+WXDemoNaviBar.h
new file mode 100644
index 0000000..3ddbfd8
--- /dev/null
+++ b/ios/WeexDemo/UIViewController+WXDemoNaviBar.h
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import <UIKit/UIKit.h>
+#import "DemoDefine.h"
+
+@interface UIViewController (WXDemoNaviBar) <UIGestureRecognizerDelegate>
+
+/**
+ * back button click action
+ * @param sender responder
+ */
+- (void)backButtonClicked:(id)sender;
+
+- (void)setupNaviBar;
+
+@end
+
diff --git a/ios/WeexDemo/UIViewController+WXDemoNaviBar.m b/ios/WeexDemo/UIViewController+WXDemoNaviBar.m
new file mode 100644
index 0000000..09b4105
--- /dev/null
+++ b/ios/WeexDemo/UIViewController+WXDemoNaviBar.m
@@ -0,0 +1,138 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import "UIViewController+WXDemoNaviBar.h"
+#import "WXScannerVC.h"
+#import "WXScannerHistoryVC.h"
+#import "WXDefine.h"
+#import <objc/runtime.h>
+
+@implementation UIViewController (WXDemoNaviBar)
+
+- (void)setupNaviBar
+{
+ UIScreenEdgePanGestureRecognizer *edgePanGestureRecognizer = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(edgePanGesture:)];
+ edgePanGestureRecognizer.delegate = self;
+ edgePanGestureRecognizer.edges = UIRectEdgeLeft;
+ [self.view addGestureRecognizer:edgePanGestureRecognizer];
+
+ NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
+ if ([[ver objectAtIndex:0] intValue] >= 7) {
+ // iOS 7.0 or later
+ self.navigationController.navigationBar.barTintColor = WEEX_COLOR;
+ self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
+ [self.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor whiteColor]}];
+ self.navigationController.navigationBar.translucent = NO;
+ }
+ if (!self.navigationItem.leftBarButtonItem) {
+ UIBarButtonItem *leftItem;
+ if(![[self.navigationController.viewControllers objectAtIndex:0] isEqual:self]) {
+ leftItem = [self backButtonItem];
+ } else {
+ leftItem = [self leftBarButtonItem];
+ }
+ self.navigationItem.leftBarButtonItems = @[leftItem];
+ }
+ if ([self isKindOfClass:[WXScannerVC class]]) {
+ UIBarButtonItem *historyItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"scan_history"]
+ style:UIBarButtonItemStylePlain
+ target:self
+ action:@selector(historyButtonClicked:)];
+ self.navigationItem.rightBarButtonItems = @[historyItem];
+ }
+ if([self isKindOfClass:[WXScannerHistoryVC class]]) {
+ UIBarButtonItem *historyItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"delete"]
+ style:UIBarButtonItemStylePlain
+ target:self
+ action:@selector(clearScannerHistory:)];
+ self.navigationItem.rightBarButtonItems = @[historyItem];
+ }
+}
+
+- (void)edgePanGesture:(UIScreenEdgePanGestureRecognizer*)edgePanGestureRecognizer
+{
+ [self.navigationController popViewControllerAnimated:YES];
+}
+
+#pragma mark- UIGestureRecognizerDelegate
+- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
+{
+ if (self.navigationController && [self.navigationController.viewControllers count] == 1) {
+ return NO;
+ }
+ return YES;
+}
+
+#pragma mark -
+#pragma mark - UIBarButtonItems
+
+- (UIBarButtonItem *)leftBarButtonItem
+{
+ UIBarButtonItem *leftItem = objc_getAssociatedObject(self, _cmd);
+
+ if (!leftItem) {
+ leftItem = [[UIBarButtonItem alloc]
+ initWithImage:[UIImage imageNamed:@"scan"]
+ style:UIBarButtonItemStylePlain
+ target:self
+ action:@selector(scanQR:)];
+ leftItem.accessibilityHint = @"click to scan qr code";
+ leftItem.accessibilityValue = @"scan qr code";
+ objc_setAssociatedObject(self, _cmd, leftItem, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
+ }
+ return leftItem;
+}
+
+- (UIBarButtonItem *)backButtonItem
+{
+ UIBarButtonItem *backButtonItem = objc_getAssociatedObject(self, _cmd);
+ if (!backButtonItem) {
+ backButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"back"]
+ style:UIBarButtonItemStylePlain
+ target:self
+ action:@selector(backButtonClicked:)];
+ objc_setAssociatedObject(self, _cmd, backButtonItem, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
+ }
+ return backButtonItem;
+}
+
+#pragma mark -
+#pragma mark - UIBarButtonItem actions
+
+- (void)scanQR:(id)sender {
+
+ WXScannerVC * scanViewController = [[WXScannerVC alloc] init];
+ [self.navigationController pushViewController:scanViewController animated:YES];
+}
+
+- (void)backButtonClicked:(id)sender {
+
+ [self.navigationController popViewControllerAnimated:YES];
+}
+
+- (void)historyButtonClicked:(id)sender {
+
+ [self.navigationController pushViewController:[WXScannerHistoryVC new] animated:YES];
+}
+
+- (void)clearScannerHistory:(id)sender {
+ [[NSUserDefaults standardUserDefaults] removeObjectForKey:WX_SCANNER_HISTORY];
+}
+
+@end
diff --git a/ios/WeexDemo/WXConfigCenterDefaultImpl.h b/ios/WeexDemo/WXConfigCenterDefaultImpl.h
new file mode 100644
index 0000000..2889a4a
--- /dev/null
+++ b/ios/WeexDemo/WXConfigCenterDefaultImpl.h
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import <Foundation/Foundation.h>
+#import "WXConfigCenterProtocol.h"
+
+@interface WXConfigCenterDefaultImpl : NSObject<WXConfigCenterProtocol>
+
+@end
diff --git a/ios/WeexDemo/WXConfigCenterDefaultImpl.m b/ios/WeexDemo/WXConfigCenterDefaultImpl.m
new file mode 100644
index 0000000..d127edb
--- /dev/null
+++ b/ios/WeexDemo/WXConfigCenterDefaultImpl.m
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import "WXConfigCenterDefaultImpl.h"
+
+@implementation WXConfigCenterDefaultImpl
+
+- (id)configForKey:(NSString *)key defaultValue:(id)defaultValue isDefault:(BOOL *)isDefault
+{
+ NSArray<NSString*>* keys = [key componentsSeparatedByString:@"."];
+ if ([keys[0] isEqualToString:@"iOS_weex_ext_config"] && [keys[1] isEqualToString:@"text_render_useCoreText"]){
+ return @YES;
+ }
+ if ([keys[0] isEqualToString:@"iOS_weex_ext_config"] && [keys[1] isEqualToString:@"slider_class_name"]){
+ return @"WXCycleSliderComponent";
+ }
+ if ([keys[0] isEqualToString:@"iOS_weex_prerender_config"] && [keys[1] isEqualToString:@"is_switch_on"]){
+ return @YES;
+ }
+ if ([keys[0] isEqualToString:@"iOS_weex_prerender_config"] && [keys[1] isEqualToString:@"cacheTime"]){
+ return @300000;
+ }
+ if ([keys[0] isEqualToString:@"iOS_weex_prerender_config"] && [keys[1] isEqualToString:@"max_cache_num"]){
+ return @2;
+ }
+ return defaultValue;
+}
+
+@end
diff --git a/ios/WeexDemo/WXDemoViewController.h b/ios/WeexDemo/WXDemoViewController.h
new file mode 100644
index 0000000..be2935d
--- /dev/null
+++ b/ios/WeexDemo/WXDemoViewController.h
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import <UIKit/UIKit.h>
+#import <SRWebSocket.h>
+
+@interface WXDemoViewController : UIViewController<SRWebSocketDelegate>
+
+@property (nonatomic, strong) NSString *script;
+@property (nonatomic, strong) NSURL *url;
+@property (nonatomic, assign) BOOL showNavigationBar;
+@property (nonatomic, strong) SRWebSocket *hotReloadSocket;
+@property (nonatomic, strong) NSString *source;
+
+@end
+
diff --git a/ios/WeexDemo/WXDemoViewController.m b/ios/WeexDemo/WXDemoViewController.m
new file mode 100644
index 0000000..c3e321d
--- /dev/null
+++ b/ios/WeexDemo/WXDemoViewController.m
@@ -0,0 +1,348 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import "WXDemoViewController.h"
+#import <WeexSDK/WXSDKInstance.h>
+#import <WeexSDK/WXSDKEngine.h>
+#import <WeexSDK/WXUtility.h>
+#import <WeexSDK/WXDebugTool.h>
+#import <WeexSDK/WXSDKManager.h>
+#import "UIViewController+WXDemoNaviBar.h"
+#import "DemoDefine.h"
+#import "WXPrerenderManager.h"
+#import "WXMonitor.h"
+#import "AppDelegate.h"
+
+@interface WXDemoViewController () <UIScrollViewDelegate, UIWebViewDelegate>
+@property (nonatomic, strong) WXSDKInstance *instance;
+@property (nonatomic, strong) UIView *weexView;
+
+@property (nonatomic, strong) NSArray *refreshList;
+@property (nonatomic, strong) NSArray *refreshList1;
+@property (nonatomic, strong) NSArray *refresh;
+@property (nonatomic) NSInteger count;
+
+@property (nonatomic, assign) CGFloat weexHeight;
+@property (nonatomic, weak) id<UIScrollViewDelegate> originalDelegate;
+
+@end
+
+@implementation WXDemoViewController
+
+- (instancetype)init
+{
+ if (self = [super init]) {
+ }
+
+ return self;
+}
+
+- (void)setInterfaceOrientation:(UIDeviceOrientation)orientation
+{
+ if ([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)]) {
+ [[UIDevice currentDevice] setValue:[NSNumber numberWithInteger:orientation]
+ forKey:@"orientation"];
+ }
+}
+
+- (void)viewDidLoad
+{
+ [super viewDidLoad];
+
+ self.view.backgroundColor = [UIColor whiteColor];
+ [self.view setClipsToBounds:YES];
+
+ _showNavigationBar = NO;
+ [self.navigationController setNavigationBarHidden:_showNavigationBar];
+ _weexHeight = self.view.frame.size.height - CGRectGetMaxY(self.navigationController.navigationBar.frame);
+
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationRefreshInstance:) name:@"RefreshInstance" object:nil];
+ [self render];
+}
+
+- (void)viewDidAppear:(BOOL)animated
+{
+ [super viewDidAppear:animated];
+ [self updateInstanceState:WeexInstanceAppear];
+
+ AppDelegate* appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
+ appDelegate.allowRotation = NO;
+ [_instance isKeepingRawCssStyles:^(BOOL value) {
+ appDelegate.allowRotation = value;
+ }];
+}
+
+- (void)viewDidDisappear:(BOOL)animated
+{
+ [super viewDidDisappear:animated];
+ [_instance didDisappear];
+ [self updateInstanceState:WeexInstanceDisappear];
+}
+
+- (void)viewWillDisappear:(BOOL)animated
+{
+ [super viewWillDisappear:animated];
+ // restore to protrait
+ AppDelegate* appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
+ appDelegate.allowRotation = NO;
+ [self setInterfaceOrientation:UIDeviceOrientationPortrait];
+}
+
+- (void)viewWillAppear:(BOOL)animated
+{
+ [super viewWillAppear:animated];
+ [_instance willAppear];
+ [self setupNaviBar];
+ [self setupRightBarItem];
+ [self.navigationController setNavigationBarHidden:_showNavigationBar];
+}
+
+//TODO get height
+- (void)viewDidLayoutSubviews
+{
+ _weexHeight = [UIScreen mainScreen].bounds.size.height - CGRectGetMaxY(self.navigationController.navigationBar.frame);
+ UIEdgeInsets safeArea = UIEdgeInsetsZero;
+#ifdef __IPHONE_11_0
+ if (@available(iOS 11.0, *)) {
+ safeArea = self.view.safeAreaInsets;
+ } else {
+ // Fallback on earlier versions
+ }
+#endif
+ _instance.frame = CGRectMake(safeArea.left, safeArea.top, self.view.frame.size.width-safeArea.left-safeArea.right, _weexHeight-safeArea.top-safeArea.bottom);
+}
+
+- (void)didReceiveMemoryWarning {
+ [super didReceiveMemoryWarning];
+ // Dispose of any resources that can be recreated.
+}
+
+- (void)dealloc
+{
+
+ [_instance destroyInstance];
+#ifdef DEBUG
+ [_instance forceGarbageCollection];
+#endif
+
+ [[NSNotificationCenter defaultCenter] removeObserver:self];
+}
+
+- (void)render
+{
+ CGFloat width = self.view.frame.size.width;
+// if ([_url.absoluteString isEqualToString:HOME_URL]) {
+// [self.navigationController setNavigationBarHidden:YES];
+// }
+ [_instance destroyInstance];
+ _instance = [[WXSDKInstance alloc] init];
+ if([WXPrerenderManager isTaskExist:[self.url absoluteString]]){
+ _instance = [WXPrerenderManager instanceFromUrl:self.url.absoluteString];
+ }
+
+ _instance.isMainContainerStack = YES;
+ _instance.viewController = self;
+ UIEdgeInsets safeArea = UIEdgeInsetsZero;
+
+#ifdef __IPHONE_11_0
+ if (@available(iOS 11.0, *)) {
+ safeArea = self.view.safeAreaInsets;
+ } else {
+ // Fallback on earlier versions
+ }
+#endif
+
+ _instance.frame = CGRectMake(self.view.frame.size.width-width, 0, width, _weexHeight-safeArea.bottom);
+
+ __weak typeof(self) weakSelf = self;
+ _instance.onCreate = ^(UIView *view) {
+ [weakSelf.weexView removeFromSuperview];
+ weakSelf.weexView = view;
+ [weakSelf.view addSubview:weakSelf.weexView];
+ UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, weakSelf.weexView);
+ };
+ _instance.onFailed = ^(NSError *error) {
+ if ([[error domain] isEqualToString:@"1"]) {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ NSMutableString *errMsg=[NSMutableString new];
+ [errMsg appendFormat:@"ErrorType:%@\n",[error domain]];
+ [errMsg appendFormat:@"ErrorCode:%ld\n",(long)[error code]];
+ [errMsg appendFormat:@"ErrorInfo:%@\n", [error userInfo]];
+
+ UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"render failed" message:errMsg delegate:weakSelf cancelButtonTitle:nil otherButtonTitles:@"ok", nil];
+ [alertView show];
+ });
+ }
+ };
+
+ __weak WXSDKInstance* theInstance = _instance;
+ _instance.renderFinish = ^(UIView *view) {
+ WXLogDebug(@"%@", @"Render Finish...");
+ [weakSelf updateInstanceState:WeexInstanceAppear];
+
+ AppDelegate* appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
+ appDelegate.allowRotation = NO;
+ [theInstance isKeepingRawCssStyles:^(BOOL value) {
+ appDelegate.allowRotation = value;
+ }];
+ };
+
+ _instance.updateFinish = ^(UIView *view) {
+ WXLogDebug(@"%@", @"Update Finish...");
+ };
+ if (!self.url) {
+ WXLogError(@"error: render url is nil");
+ return;
+ }
+ if([WXPrerenderManager isTaskExist:[self.url absoluteString]]){
+ WX_MONITOR_INSTANCE_PERF_START(WXPTJSDownload, _instance);
+ WX_MONITOR_INSTANCE_PERF_END(WXPTJSDownload, _instance);
+ WX_MONITOR_INSTANCE_PERF_START(WXPTFirstScreenRender, _instance);
+ WX_MONITOR_INSTANCE_PERF_START(WXPTAllRender, _instance);
+ [WXPrerenderManager renderFromCache:[self.url absoluteString]];
+ return;
+ }
+ _instance.viewController = self;
+ NSURL *URL = [self testURL: [self.url absoluteString]];
+ NSString *randomURL = [NSString stringWithFormat:@"%@%@random=%d",URL.absoluteString,URL.query?@"&":@"?",arc4random()];
+ [_instance renderWithURL:[NSURL URLWithString:randomURL] options:@{@"bundleUrl":URL.absoluteString} data:nil];
+ [self.navigationController.navigationBar setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:
+ [UIColor whiteColor], NSForegroundColorAttributeName, nil]];
+ if([_instance.pageName hasPrefix:@"http://dotwe.org"] || [_instance.pageName hasPrefix:@"https://dotwe.org"]) {
+ self.navigationItem.title = @"Weex Online Example";
+ } else {
+ self.navigationItem.title = _instance.pageName;
+ }
+}
+
+- (void)updateInstanceState:(WXState)state
+{
+ if (_instance && _instance.state != state) {
+ _instance.state = state;
+
+ if (state == WeexInstanceAppear) {
+ [[WXSDKManager bridgeMgr] fireEvent:_instance.instanceId ref:WX_SDK_ROOT_REF type:@"viewappear" params:nil domChanges:nil];
+ }
+ else if (state == WeexInstanceDisappear) {
+ [[WXSDKManager bridgeMgr] fireEvent:_instance.instanceId ref:WX_SDK_ROOT_REF type:@"viewdisappear" params:nil domChanges:nil];
+ }
+ }
+}
+
+#pragma mark - refresh
+- (void)refreshWeex
+{
+ [self render];
+}
+
+#pragma mark - UIBarButtonItems
+
+- (void)setupRightBarItem
+{
+ if ([self.url.scheme hasPrefix:@"http"]) {
+ [self loadRefreshCtl];
+ }
+}
+
+- (void)loadRefreshCtl {
+ UIBarButtonItem *refreshButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"reload"] style:UIBarButtonItemStylePlain target:self action:@selector(refreshWeex)];
+ refreshButtonItem.accessibilityHint = @"click to reload curent page";
+ self.navigationItem.rightBarButtonItem = refreshButtonItem;
+}
+
+#pragma mark - websocket
+- (void)webSocketDidOpen:(SRWebSocket *)webSocket
+{
+
+}
+
+- (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message
+{
+ if ([@"refresh" isEqualToString:message]) {
+ [self render];
+ }
+}
+
+- (void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error
+{
+
+}
+
+# pragma mark - orientation
+
+- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
+{
+ if (_instance) {
+ CGFloat w = [UIScreen mainScreen].bounds.size.width;
+ CGFloat h = [UIScreen mainScreen].bounds.size.height;
+ [_instance setPageRequiredWidth:w height:h];
+ [_instance reloadLayout];
+ }
+}
+
+#pragma mark - localBundle
+/*- (void)loadLocalBundle:(NSURL *)url
+{
+ NSURL * localPath = nil;
+ NSMutableArray * pathComponents = nil;
+ if (self.url) {
+ pathComponents =[NSMutableArray arrayWithArray:[url.absoluteString pathComponents]];
+ [pathComponents removeObjectsInRange:NSRangeFromString(@"0 3")];
+ [pathComponents replaceObjectAtIndex:0 withObject:@"bundlejs"];
+
+ NSString *filePath = [NSString stringWithFormat:@"%@/%@",[NSBundle mainBundle].bundlePath,[pathComponents componentsJoinedByString:@"/"]];
+ localPath = [NSURL fileURLWithPath:filePath];
+ }else {
+ NSString *filePath = [NSString stringWithFormat:@"%@/bundlejs/index.js",[NSBundle mainBundle].bundlePath];
+ localPath = [NSURL fileURLWithPath:filePath];
+ }
+
+ NSString *bundleUrl = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/bundlejs/",[NSBundle mainBundle].bundlePath]].absoluteString;
+ [_instance renderWithURL:localPath options:@{@"bundleUrl":bundleUrl} data:nil];
+}*/
+
+#pragma mark - load local device bundle
+- (NSURL*)testURL:(NSString*)url
+{
+ NSRange range = [url rangeOfString:@"_wx_tpl"];
+ if (range.location != NSNotFound) {
+ NSString *tmp = [url substringFromIndex:range.location];
+ NSUInteger start = [tmp rangeOfString:@"="].location;
+ NSUInteger end = [tmp rangeOfString:@"&"].location;
+ ++start;
+ if (end == NSNotFound) {
+ end = [tmp length] - start;
+ }
+ else {
+ end = end - start;
+ }
+ NSRange subRange;
+ subRange.location = start;
+ subRange.length = end;
+ url = [tmp substringWithRange:subRange];
+ }
+ return [NSURL URLWithString:url];
+}
+
+#pragma mark - notification
+- (void)notificationRefreshInstance:(NSNotification *)notification {
+ [self refreshWeex];
+}
+
+@end
diff --git a/ios/WeexDemo/WXExtModule.h b/ios/WeexDemo/WXExtModule.h
new file mode 100644
index 0000000..e440c58
--- /dev/null
+++ b/ios/WeexDemo/WXExtModule.h
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import <WeexSDK/WXModuleProtocol.h>
+
+@interface WXExtModule : NSObject <WXModuleProtocol>
+
+@end
diff --git a/ios/WeexDemo/WXExtModule.m b/ios/WeexDemo/WXExtModule.m
new file mode 100644
index 0000000..16b2e0a
--- /dev/null
+++ b/ios/WeexDemo/WXExtModule.m
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import "WXExtModule.h"
+
+@implementation WXExtModule
+
+WX_EXPORT_METHOD(@selector(generateCover:))
+
+- (void)generateCover:(WXModuleKeepAliveCallback)callback
+{
+#if DEBUG
+#if !TARGET_IPHONE_SIMULATOR
+ NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
+ NSString *documentsDirectory = [paths objectAtIndex:0];
+ setenv("GCOV_PREFIX", [documentsDirectory cStringUsingEncoding:NSUTF8StringEncoding], 1);
+ setenv("GCOV_PREFIX_STRIP", "6", 1);
+#endif
+
+#if defined __cplusplus
+ extern "C" {
+#endif
+ extern void __gcov_flush(void);
+ __gcov_flush();
+#if defined __cplusplus
+ };
+#endif
+
+ if (callback) {
+ NSDictionary * result = @{@"ok": @true};
+ callback(result,NO);
+ }
+#else
+ if (callback) {
+ NSDictionary * result = @{@"ok": @false,@"msg":@"only debug mode support"};
+ callback(result,NO);
+ }
+#endif
+}
+
+@end
diff --git a/ios/WeexDemo/WXExtendCallNativeTest.h b/ios/WeexDemo/WXExtendCallNativeTest.h
new file mode 100644
index 0000000..4671779
--- /dev/null
+++ b/ios/WeexDemo/WXExtendCallNativeTest.h
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import <Foundation/Foundation.h>
+#import "WXExtendCallNativeProtocol.h"
+
+@interface WXExtendCallNativeTest : NSObject<WXExtendCallNativeProtocol>
+
+@end
diff --git a/ios/WeexDemo/WXExtendCallNativeTest.m b/ios/WeexDemo/WXExtendCallNativeTest.m
new file mode 100644
index 0000000..ba11caf
--- /dev/null
+++ b/ios/WeexDemo/WXExtendCallNativeTest.m
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#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
diff --git a/ios/WeexDemo/WXNavigationHandlerImpl.h b/ios/WeexDemo/WXNavigationHandlerImpl.h
new file mode 100644
index 0000000..bfd4020
--- /dev/null
+++ b/ios/WeexDemo/WXNavigationHandlerImpl.h
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import <Foundation/Foundation.h>
+#import <WeexSDK/WXNavigationProtocol.h>
+
+@interface WXNavigationHandlerImpl : NSObject <WXNavigationProtocol>
+
+@end
diff --git a/ios/WeexDemo/WXNavigationHandlerImpl.m b/ios/WeexDemo/WXNavigationHandlerImpl.m
new file mode 100644
index 0000000..67b129c
--- /dev/null
+++ b/ios/WeexDemo/WXNavigationHandlerImpl.m
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import <WeexSDK/WeexSDK.h>
+#import "WXNavigationHandlerImpl.h"
+#import "WXDemoViewController.h"
+
+@implementation WXNavigationHandlerImpl
+
+
+
+- (void)clearNavigationItemWithParam:(NSDictionary *)param position:(WXNavigationItemPosition)position completion:(WXNavigationResultBlock)block withContainer:(UIViewController *)container {
+
+}
+
+- (id)navigationControllerOfContainer:(UIViewController *)container {
+ return container.navigationController;
+}
+
+- (void)popViewControllerWithParam:(NSDictionary *)param completion:(WXNavigationResultBlock)block withContainer:(UIViewController *)container {
+ BOOL animated = YES;
+ id obj = [param objectForKey:@"animated"];
+ if (obj) {
+ animated = [WXConvert BOOL:obj];
+ }
+ [container.navigationController popViewControllerAnimated:animated];
+}
+
+- (void)pushViewControllerWithParam:(NSDictionary *)param completion:(WXNavigationResultBlock)block withContainer:(UIViewController *)container {
+ BOOL animated = YES;
+ NSString *obj = [[param objectForKey:@"animated"] lowercaseString];
+ if (obj && [obj isEqualToString:@"false"]) {
+ animated = NO;
+ }
+
+ WXDemoViewController *vc = [[WXDemoViewController alloc] init];
+ vc.url = [NSURL URLWithString:param[@"url"]];
+ vc.hidesBottomBarWhenPushed = YES;
+ [container.navigationController pushViewController:vc animated:animated];
+}
+
+- (void)setNavigationBackgroundColor:(UIColor *)backgroundColor withContainer:(UIViewController *)container {
+
+}
+
+- (void)setNavigationBarHidden:(BOOL)hidden animated:(BOOL)animated withContainer:(UIViewController *)container {
+ if (![container isKindOfClass:[WXBaseViewController class]]) {
+ return;
+ }
+
+ container.navigationController.navigationBarHidden = hidden;
+}
+
+- (void)setNavigationItemWithParam:(NSDictionary *)param position:(WXNavigationItemPosition)position completion:(WXNavigationResultBlock)block withContainer:(UIViewController *)container {
+
+}
+
+@end
diff --git a/ios/WeexDemo/WXSyncTestModule.h b/ios/WeexDemo/WXSyncTestModule.h
new file mode 100644
index 0000000..254af6f
--- /dev/null
+++ b/ios/WeexDemo/WXSyncTestModule.h
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import <Foundation/Foundation.h>
+#import <WeexSDK/WXModuleProtocol.h>
+
+@interface WXSyncTestModule : NSObject <WXModuleProtocol>
+
+@end
diff --git a/ios/WeexDemo/WXSyncTestModule.m b/ios/WeexDemo/WXSyncTestModule.m
new file mode 100644
index 0000000..784502d
--- /dev/null
+++ b/ios/WeexDemo/WXSyncTestModule.m
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import "WXSyncTestModule.h"
+
+@implementation WXSyncTestModule
+
+WX_EXPORT_METHOD_SYNC(@selector(getString))
+WX_EXPORT_METHOD_SYNC(@selector(getNumber))
+WX_EXPORT_METHOD_SYNC(@selector(getArray))
+WX_EXPORT_METHOD_SYNC(@selector(getObject))
+
+- (NSString *)getString
+{
+ return @"testString";
+}
+
+- (NSUInteger)getNumber
+{
+ return 111111;
+}
+
+- (NSArray *)getArray
+{
+ return @[@(111111),@"testString",@"testString2"];
+}
+
+- (NSDictionary *)getObject
+{
+ return @{@"number":@(111111), @"string1":@"testString",@"string2":@"testString2"};
+}
+
+@end
diff --git a/ios/WeexDemo/Websocket/SRWebSocket+Weex.h b/ios/WeexDemo/Websocket/SRWebSocket+Weex.h
new file mode 100644
index 0000000..8bb36b5
--- /dev/null
+++ b/ios/WeexDemo/Websocket/SRWebSocket+Weex.h
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import <SocketRocket/SRWebSocket.h>
+#import <WeexSDK/WXWebSocketHandler.h>
+#import <objc/runtime.h>
+
+@interface SRWebSocket (Weex)
+
+@property (nonatomic, copy) NSString *wx_Identifier;
+@property (nonatomic, weak) id<WXWebSocketDelegate> wx_WebSocketDelegate;
+
+@end
diff --git a/ios/WeexDemo/Websocket/SRWebSocket+Weex.m b/ios/WeexDemo/Websocket/SRWebSocket+Weex.m
new file mode 100644
index 0000000..afdbcfa
--- /dev/null
+++ b/ios/WeexDemo/Websocket/SRWebSocket+Weex.m
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import "SRWebSocket+Weex.h"
+static char wx_IdentifierKey;
+static char wx_WebSocketDelegateKey;
+
+
+@implementation SRWebSocket (Weex)
+
+-(void)setWx_Identifier:(NSString *)wx_Identifier
+{
+ objc_setAssociatedObject(self, &wx_IdentifierKey, wx_Identifier, OBJC_ASSOCIATION_COPY);
+}
+
+-(NSString *)wx_Identifier
+{
+ return objc_getAssociatedObject(self, &wx_IdentifierKey);
+}
+
+-(void)setWx_WebSocketDelegate:(id<WXWebSocketDelegate>)wx_WebSocketDelegate
+{
+ objc_setAssociatedObject(self, &wx_WebSocketDelegateKey, wx_WebSocketDelegate, OBJC_ASSOCIATION_COPY);
+}
+
+-(NSString *)wx_WebSocketDelegate
+{
+ return objc_getAssociatedObject(self, &wx_WebSocketDelegateKey);
+}
+
+@end
diff --git a/ios/WeexDemo/Websocket/WXWebSocketDefaultImpl.h b/ios/WeexDemo/Websocket/WXWebSocketDefaultImpl.h
new file mode 100644
index 0000000..620e71a
--- /dev/null
+++ b/ios/WeexDemo/Websocket/WXWebSocketDefaultImpl.h
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import <Foundation/Foundation.h>
+#import <WeexSDK/WXWebSocketHandler.h>
+
+@interface WXWebSocketDefaultImpl : NSObject<WXWebSocketHandler>
+
+@end
diff --git a/ios/WeexDemo/Websocket/WXWebSocketDefaultImpl.m b/ios/WeexDemo/Websocket/WXWebSocketDefaultImpl.m
new file mode 100644
index 0000000..60c9d34
--- /dev/null
+++ b/ios/WeexDemo/Websocket/WXWebSocketDefaultImpl.m
@@ -0,0 +1,120 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import "WXWebSocketDefaultImpl.h"
+#import <SocketRocket/SRWebSocket.h>
+#import "SRWebSocket+Weex.h"
+
+@interface WXWebSocketDefaultImpl()<SRWebSocketDelegate>
+
+@end
+
+@implementation WXWebSocketDefaultImpl
+{
+ NSMutableDictionary<NSString *, SRWebSocket *> *_webSockets;
+}
+
+#pragma mark - WXWebSocketHandler
+- (void)open:(NSString *)url protocol:(NSString *)protocol identifier:(NSString *)identifier withDelegate:(id<WXWebSocketDelegate>)delegate
+{
+ if(!_webSockets)
+ {
+ _webSockets = [NSMutableDictionary new];
+ }
+ if([_webSockets objectForKey:identifier]){
+ SRWebSocket *webSocket = [_webSockets objectForKey:identifier];
+ webSocket.delegate = nil;
+ [webSocket close];
+
+ }
+ NSArray *protols;
+ if([protocol length]>0){
+ protols = [NSArray arrayWithObject:protocol];
+ }
+ SRWebSocket *webSocket = [[SRWebSocket alloc] initWithURL:[NSURL URLWithString:url] protocols:protols];
+ webSocket.delegate = self;
+ [webSocket open];
+ webSocket.wx_Identifier = identifier;
+ webSocket.wx_WebSocketDelegate = delegate;
+ [_webSockets setObject:webSocket forKey:identifier];
+}
+
+- (void)send:(id)identifier data:(NSString *)data
+{
+ SRWebSocket *webSocket = [_webSockets objectForKey:identifier];
+ if(webSocket) {
+ [webSocket send:data];
+ }
+}
+
+- (void)close:(NSString *)identifier
+{
+ SRWebSocket *webSocket = [_webSockets objectForKey:identifier];
+ if(webSocket) {
+ [webSocket close];
+ }
+}
+
+- (void)close:(NSString *)identifier code:(NSInteger)code reason:(NSString *)reason
+{
+ SRWebSocket *webSocket = [_webSockets objectForKey:identifier];
+ if(webSocket) {
+ [webSocket closeWithCode:code reason:reason];
+ }
+}
+
+- (void)clear:(NSString *)identifier
+{
+ SRWebSocket *webSocket = [_webSockets objectForKey:identifier];
+ if(webSocket) {
+ webSocket.delegate = nil;
+ [webSocket close];
+ [_webSockets removeObjectForKey:identifier];
+ }
+}
+
+#pragma mark -SRWebSocketDelegate
+- (void)webSocketDidOpen:(SRWebSocket *)webSocket;
+{
+ if (webSocket.wx_WebSocketDelegate && [webSocket.wx_WebSocketDelegate respondsToSelector:@selector(didOpen)]) {
+ [webSocket.wx_WebSocketDelegate didOpen];
+ }
+}
+
+- (void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error;
+{
+ if (webSocket.wx_WebSocketDelegate && [webSocket.wx_WebSocketDelegate respondsToSelector:@selector(didFailWithError:)]) {
+ [webSocket.wx_WebSocketDelegate didFailWithError:error];
+ }
+}
+
+- (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message;
+{
+ if (webSocket.wx_WebSocketDelegate && [webSocket.wx_WebSocketDelegate respondsToSelector:@selector(didReceiveMessage:)]) {
+ [webSocket.wx_WebSocketDelegate didReceiveMessage:message];
+ }
+}
+
+- (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean;
+{
+ if (webSocket.wx_WebSocketDelegate && [webSocket.wx_WebSocketDelegate respondsToSelector:@selector(didCloseWithCode:reason:wasClean:)]) {
+ [webSocket.wx_WebSocketDelegate didCloseWithCode:code reason:reason wasClean:wasClean];
+ }
+}
+@end
diff --git a/ios/WeexDemo/debug/DebugAnalyzer.h b/ios/WeexDemo/debug/DebugAnalyzer.h
new file mode 100644
index 0000000..99838d0
--- /dev/null
+++ b/ios/WeexDemo/debug/DebugAnalyzer.h
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import <WeexSDK/WeexSDK.h>
+
+
+@interface DebugAnalyzer :NSObject<WXAnalyzerProtocol>
+@end
diff --git a/ios/WeexDemo/debug/DebugAnzlyzer.m b/ios/WeexDemo/debug/DebugAnzlyzer.m
new file mode 100644
index 0000000..0a84bb8
--- /dev/null
+++ b/ios/WeexDemo/debug/DebugAnzlyzer.m
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import <Foundation/Foundation.h>
+#import <WeexSDK/WeexSDK.h>
+#import "DebugAnalyzer.h"
+
+
+@implementation DebugAnalyzer
+- (void)transfer:(NSDictionary *) value
+{
+ NSLog(@"DebugAnalyzer value : %@",value);
+}
+@end
diff --git a/ios/WeexDemo/debug/WXATLoggerPlugin.h b/ios/WeexDemo/debug/WXATLoggerPlugin.h
new file mode 100644
index 0000000..1bfbffa
--- /dev/null
+++ b/ios/WeexDemo/debug/WXATLoggerPlugin.h
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import <Foundation/Foundation.h>
+#import <ATSDK/ATPluginProtocol.h>
+
+@interface WXATLoggerPlugin : NSObject<ATPluginProtocol>
+
+@end
diff --git a/ios/WeexDemo/debug/WXATLoggerPlugin.m b/ios/WeexDemo/debug/WXATLoggerPlugin.m
new file mode 100644
index 0000000..66eaf81
--- /dev/null
+++ b/ios/WeexDemo/debug/WXATLoggerPlugin.m
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import "WXATLoggerPlugin.h"
+#import <WeexSDK/WXSDKEngine.h>
+
+@implementation WXATLoggerPlugin
+
+- (void)pluginDidLoadWithArgs:(NSArray *)args
+{
+
+}
+
+- (void)pluginWillOpenInContainer:(UIViewController *)container withArg:(NSArray *)args
+{
+ NSURL *URL = [NSURL URLWithString:@"http://127.0.0.1:8687/launchDebugger"];
+ NSURLRequest *request = [NSURLRequest requestWithURL:URL];
+
+ NSURLSession *session = [NSURLSession sharedSession];
+ NSURLSessionDataTask *task = [session dataTaskWithRequest:request
+ completionHandler:
+ ^(NSData *data, NSURLResponse *response, NSError *error) {
+ // ...
+ }];
+
+ [task resume];
+
+ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+ [WXSDKEngine connectDebugServer:@"ws://127.0.0.1:8687/debugger/0/renderer"];
+ });
+}
+
+- (void)pluginWillClose
+{
+
+}
+
+- (void)pluginDidUnload
+{
+
+}
+
+- (CGRect)wantReactArea
+{
+ return CGRectZero;
+}
+
+
+@end
diff --git a/ios/WeexDemo/debug/WXATViewHierarchyPlugin.h b/ios/WeexDemo/debug/WXATViewHierarchyPlugin.h
new file mode 100644
index 0000000..0609e42
--- /dev/null
+++ b/ios/WeexDemo/debug/WXATViewHierarchyPlugin.h
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+//#import <Foundation/Foundation.h>
+//#import <ATSDK/ATPluginProtocol.h>
+//
+//@interface WXATViewHierarchyPlugin : NSObject<ATPluginProtocol>
+//
+//@end
diff --git a/ios/WeexDemo/debug/WXATViewHierarchyPlugin.m b/ios/WeexDemo/debug/WXATViewHierarchyPlugin.m
new file mode 100644
index 0000000..6c5fa27
--- /dev/null
+++ b/ios/WeexDemo/debug/WXATViewHierarchyPlugin.m
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+//#import "WXATViewHierarchyPlugin.h"
+//#import <WeexSDK/WXViewHierarchy.h>
+//
+//@implementation WXATViewHierarchyPlugin
+//{
+// WXViewHierarchy *_hierarchy;
+//}
+//
+//- (void)pluginDidLoadWithArgs:(NSArray *)args
+//{
+// _hierarchy = [[WXViewHierarchy alloc] init];
+// _hierarchy.hidden = YES;
+//}
+//
+//- (void)pluginWillOpenInContainer:(UIViewController *)container withArg:(NSArray *)args
+//{
+// [_hierarchy show];
+//}
+//
+//- (void)pluginWillClose
+//{
+// [_hierarchy hide];
+//}
+//
+//- (void)pluginDidUnload
+//{
+// _hierarchy = nil;
+//}
+//
+//- (CGRect)wantReactArea
+//{
+// return CGRectZero;
+//}
+//
+//@end
diff --git a/ios/WeexDemo/extend/component/WXSelectComponent.h b/ios/WeexDemo/extend/component/WXSelectComponent.h
new file mode 100644
index 0000000..a50bd5b
--- /dev/null
+++ b/ios/WeexDemo/extend/component/WXSelectComponent.h
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import <UIKit/UIKit.h>
+#import <WeexSDK/WXComponent.h>
+
+@interface WXSelectComponent : WXComponent <UIPickerViewDataSource, UIPickerViewDelegate>
+
+@end
diff --git a/ios/WeexDemo/extend/component/WXSelectComponent.m b/ios/WeexDemo/extend/component/WXSelectComponent.m
new file mode 100644
index 0000000..20bb348
--- /dev/null
+++ b/ios/WeexDemo/extend/component/WXSelectComponent.m
@@ -0,0 +1,149 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import "WXSelectComponent.h"
+#import "WXUtility.h"
+#import "WXComponent+Events.h"
+
+@interface WXSelectComponent()
+
+@property (nonatomic, strong) UITapGestureRecognizer *tap;
+@property (nonatomic, strong) UIPickerView *pickerView;
+@property (nonatomic, strong) NSArray *options;
+@property (nonatomic, assign) NSInteger selectIndex;
+@property (nonatomic, assign) BOOL disabled;
+
+@end
+
+@implementation WXSelectComponent
+- (instancetype)initWithRef:(NSString *)ref type:(NSString *)type styles:(NSDictionary *)styles attributes:(NSDictionary *)attributes events:(NSArray *)events weexInstance:(WXSDKInstance *)weexInstance
+{
+ self = [super initWithRef:ref type:type styles:styles attributes:attributes events:events weexInstance:weexInstance];
+ if (self) {
+ _tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(popupPicker)];
+ _tap.delegate = self;
+
+ if (attributes[@"options"]) {
+ _options = [attributes[@"options"] componentsSeparatedByString:@","];
+ }
+ if (attributes[@"selectIndex"]) {
+ _selectIndex = [attributes[@"selectIndex"] integerValue];
+ }
+ if (attributes[@"disabled"]) {
+ _disabled = [attributes[@"disabled"] boolValue];
+ }
+
+ if (styles[@""]) {
+ // setting style when init
+ }
+
+ UIWindow * window = [UIApplication sharedApplication].keyWindow;
+ CGSize windowSize = window.rootViewController.view.frame.size;
+ CGFloat pickerViewHeight = 200.0;
+ _pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 0, windowSize.width, pickerViewHeight)];
+ [_pickerView setBackgroundColor:[UIColor redColor]];
+ _pickerView.dataSource = self;
+ _pickerView.delegate = self;
+ }
+
+ return self;
+}
+
+- (void)viewDidLoad
+{
+ [_pickerView selectRow:_selectIndex inComponent:0 animated:YES];
+ // show selected item
+ _pickerView.showsSelectionIndicator=YES;
+}
+
+- (void)viewWillUnload
+{
+}
+
+- (UIView *)loadView {
+
+ return _pickerView;
+}
+
+- (void)updateAttributes:(NSDictionary *)attributes
+{
+ if (attributes[@"options"]) {
+ _options = [attributes[@"options"] componentsSeparatedByString:@","];
+ }
+ if (attributes[@"selectIndex"]) {
+ _selectIndex = [attributes[@"selectIndex"] integerValue];
+ }
+ if (attributes[@"disabled"]) {
+ _disabled = [attributes[@"disabled"] boolValue];
+ }
+ [_pickerView reloadAllComponents];
+}
+
+- (void)updateStyles:(NSDictionary *)styles
+{
+
+}
+
+#pragma mark - action
+- (void)popupPicker
+{
+ if (_disabled)
+ return;
+
+ [self fireEvent:@"focus" params:nil];
+}
+
+- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
+{
+ if (gestureRecognizer == _tap)
+ return YES;
+
+ if (otherGestureRecognizer == _tap)
+ return YES;
+
+ return [super gestureRecognizer:gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:otherGestureRecognizer];
+}
+
+#pragma mark - pickerView delegate
+- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
+ return 1;
+}
+
+
+- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
+ return [_options count];
+}
+
+- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component {
+
+ return self.calculatedFrame.size.width;
+}
+
+- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
+{
+ [self fireEvent:@"change" params:@{@"index":[NSNumber numberWithInteger:row],
+ @"value":[_options objectAtIndex:row]}];
+}
+
+-(NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
+{
+ return [_options objectAtIndex:row];
+}
+
+@end
diff --git a/ios/WeexDemo/extend/handler/WXApmGeneratorImpl.h b/ios/WeexDemo/extend/handler/WXApmGeneratorImpl.h
new file mode 100644
index 0000000..c3255e5
--- /dev/null
+++ b/ios/WeexDemo/extend/handler/WXApmGeneratorImpl.h
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import <Foundation/Foundation.h>
+#import "WXApmProtocol.h"
+
+@interface WXApmGeneratorImpl : NSObject <WXApmGeneratorProtocol>
+
+@end
diff --git a/ios/WeexDemo/extend/handler/WXApmGeneratorImpl.m b/ios/WeexDemo/extend/handler/WXApmGeneratorImpl.m
new file mode 100644
index 0000000..64c8e25
--- /dev/null
+++ b/ios/WeexDemo/extend/handler/WXApmGeneratorImpl.m
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import "WXApmGeneratorImpl.h"
+#import "WXApmImpl.h"
+
+@implementation WXApmGeneratorImpl
+
+- (id<WXApmProtocol>)gengratorApmInstance:(NSString *) type
+{
+ id<WXApmProtocol> instance = [[WXApmImpl alloc] init];
+ return instance;
+}
+
+@end
diff --git a/ios/WeexDemo/extend/handler/WXApmImpl.h b/ios/WeexDemo/extend/handler/WXApmImpl.h
new file mode 100644
index 0000000..5af8752
--- /dev/null
+++ b/ios/WeexDemo/extend/handler/WXApmImpl.h
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import <Foundation/Foundation.h>
+#import "WXApmProtocol.h"
+
+@interface WXApmImpl : NSObject <WXApmProtocol>
+
+@end
diff --git a/ios/WeexDemo/extend/handler/WXApmImpl.m b/ios/WeexDemo/extend/handler/WXApmImpl.m
new file mode 100644
index 0000000..214fb80
--- /dev/null
+++ b/ios/WeexDemo/extend/handler/WXApmImpl.m
@@ -0,0 +1,149 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import "WXApmImpl.h"
+#import "WXUtility.h"
+#import "WXComponentManager.h"
+
+@interface WXApmImpl()
+@property(nonatomic,strong) NSMutableDictionary<NSString*,NSNumber*>* stageMap;
+@property(nonatomic,strong) NSMutableDictionary<NSString*,id>* propertyMap;
+@property(nonatomic,strong) NSMutableDictionary<NSString*,NSNumber*>* statisticMap;
+@property(nonatomic,strong) NSMutableDictionary<NSString*,id>* eventMap;
+
+@end
+
+@implementation WXApmImpl
+
+- (instancetype)init
+{
+ self = [super init];
+ if (self) {
+ _stageMap = [[NSMutableDictionary alloc] init];
+ _propertyMap = [[NSMutableDictionary alloc] init];
+ _statisticMap = [[NSMutableDictionary alloc] init];
+ _eventMap = [[NSMutableDictionary alloc] init];
+ }
+ return self;
+}
+
+
+- (void) onStart:(NSString *)instanceId topic:(NSString *)topic
+{
+
+}
+
+- (void) onEnd
+{
+ __weak typeof(self) weakSelf = self;
+ WXPerformBlockOnComponentThread(^{
+ [weakSelf _printApmInfo];
+ });
+
+}
+
+- (void) onEvent:(NSString *)name withValue:(id)value
+{
+ __weak typeof(self) weakSelf = self;
+ WXPerformBlockOnComponentThread(^{
+ [weakSelf.eventMap setObject:value forKey:name];
+ });
+}
+
+- (void) onStage:(NSString *)name withValue:(long)timestamp
+{
+ __weak typeof(self) weakSelf = self;
+ WXPerformBlockOnComponentThread(^{
+ [weakSelf.stageMap setObject:[NSNumber numberWithLong:timestamp] forKey:name];
+ });
+}
+
+- (void) addProperty:(NSString *)name withValue:(id)value
+{
+ __weak typeof(self) weakSelf = self;
+ WXPerformBlockOnComponentThread(^{
+ [weakSelf.propertyMap setObject:value forKey:name];
+ });
+}
+
+- (void) addStatistic:(NSString *)name withValue:(double)value
+{
+ __weak typeof(self) weakSelf = self;
+ WXPerformBlockOnComponentThread(^{
+ [weakSelf.statisticMap setObject:[NSNumber numberWithDouble:value] forKey:name];
+ });
+}
+
+- (void) addBiz:(NSString *)bizID withValue:(NSDictionary *)properties
+{
+
+}
+
+- (void) addBizAbTest:(NSString *)bizID withValue:(NSDictionary *)abTest
+{
+
+}
+
+- (void) addBizStage:(NSString *)bizID withValue:(NSDictionary *)stage
+{
+
+}
+
+- (void) onSubProcedureBegin:(NSString *)subProcedureName
+{
+
+}
+
+- (void) onSubProcedureEndFailed:(NSString *)subProcedureName
+{
+
+}
+
+- (void) onSubProcedureEndSucceed:(NSString *)subProcedureName
+{
+
+}
+
+- (void)pauseApmRecord {
+
+}
+
+
+- (void)resumeApmRecord {
+
+}
+
+
+- (void) _printApmInfo
+{
+ NSDictionary* InfoMap = @{
+ @"stage":self.stageMap,
+ @"property":self.propertyMap,
+ @"statistic":self.statisticMap,
+ @"event":self.eventMap
+ };
+ NSString* jsonStr = [WXUtility JSONString:InfoMap];
+ NSLog(@"wxApmForInstance: %@",jsonStr);
+
+ NSNumber* stageRenderOrigin = self.stageMap[KEY_PAGE_STAGES_RENDER_ORGIGIN];
+ NSNumber* stageInteraction = self.stageMap[KEY_PAGE_STAGES_INTERACTION];
+ NSLog(@"wxApmForInstance interaction time: %lld", [stageInteraction longLongValue] - [stageRenderOrigin longLongValue]);
+}
+
+@end
diff --git a/ios/WeexDemo/extend/handler/WXImgLoaderDefaultImpl.h b/ios/WeexDemo/extend/handler/WXImgLoaderDefaultImpl.h
new file mode 100644
index 0000000..cfc354c
--- /dev/null
+++ b/ios/WeexDemo/extend/handler/WXImgLoaderDefaultImpl.h
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import <Foundation/Foundation.h>
+#import <WeexSDK/WXImgLoaderProtocol.h>
+
+@interface WXImgLoaderDefaultImpl : NSObject<WXImgLoaderProtocol, WXModuleProtocol>
+@end
diff --git a/ios/WeexDemo/extend/handler/WXImgLoaderDefaultImpl.m b/ios/WeexDemo/extend/handler/WXImgLoaderDefaultImpl.m
new file mode 100644
index 0000000..13836b3
--- /dev/null
+++ b/ios/WeexDemo/extend/handler/WXImgLoaderDefaultImpl.m
@@ -0,0 +1,119 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import "WXImgLoaderDefaultImpl.h"
+#import <SDWebImage/UIImageView+WebCache.h>
+#import <WeexSDK/WXLog.h>
+#import <WeexSDK/WXSDKManager.h>
+
+#define MIN_IMAGE_WIDTH 36
+#define MIN_IMAGE_HEIGHT 36
+
+#if OS_OBJECT_USE_OBJC
+#undef WXDispatchQueueRelease
+#undef WXDispatchQueueSetterSementics
+#define WXDispatchQueueRelease(q)
+#define WXDispatchQueueSetterSementics strong
+#else
+#undef WXDispatchQueueRelease
+#undef WXDispatchQueueSetterSementics
+#define WXDispatchQueueRelease(q) (dispatch_release(q))
+#define WXDispatchQueueSetterSementics assign
+#endif
+
+@interface WXImgLoaderDefaultImpl()
+
+@property (WXDispatchQueueSetterSementics, nonatomic) dispatch_queue_t ioQueue;
+
+@end
+
+@implementation WXImgLoaderDefaultImpl
+
+#pragma mark -
+#pragma mark WXImgLoaderProtocol
+
+- (id<WXImageOperationProtocol>)downloadImageWithURL:(NSString *)url imageFrame:(CGRect)imageFrame userInfo:(NSDictionary *)userInfo completed:(void(^)(UIImage *image, NSError *error, BOOL finished))completedBlock
+{
+ [self _recoredImgLoad:url options:userInfo];
+ if ([url hasPrefix:@"//"]) {
+ url = [@"http:" stringByAppendingString:url];
+ }
+ return (id<WXImageOperationProtocol>)[[SDWebImageManager sharedManager] downloadImageWithURL:[NSURL URLWithString:url] options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) {
+
+ } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
+ if (completedBlock) {
+ completedBlock(image, error, finished);
+ }
+ [self _recoredFinish:imageURL error:error loadOptions:userInfo];
+ }];
+}
+
+- (void)setImageViewWithURL:(UIImageView *)imageView url:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(NSDictionary *)options progress:(void (^)(NSInteger, NSInteger))progressBlock completed:(void (^)(UIImage *, NSError *, WXImageLoaderCacheType, NSURL *))completedBlock
+{
+ [self _recoredImgLoad:url.absoluteString options:options];
+ SDWebImageOptions sdWebimageOption = SDWebImageRetryFailed;
+ if (options && options[@"sdWebimageOption"]) {
+ [options[@"sdWebimageOption"] intValue];
+ }
+
+ [imageView sd_setImageWithURL:url placeholderImage:placeholder options:sdWebimageOption progress:^(NSInteger receivedSize, NSInteger expectedSize) {
+ if (progressBlock) {
+ progressBlock(receivedSize, expectedSize);
+ }
+ } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
+ if (completedBlock) {
+ completedBlock(image, error, (WXImageLoaderCacheType)cacheType, imageURL);
+ }
+ [self _recoredFinish:imageURL error:error loadOptions:options];
+ }];
+}
+
+- (void) _recoredImgLoad:(NSString *)url options:(NSDictionary *)options
+{
+ if (nil == url) {
+ return;
+ }
+ NSString* instanceId = [options objectForKey:@"instanceId"];
+ if (nil == instanceId) {
+ WXLogWarning(@"please set instanceId in userInfo,for url %@:",url);
+ return;
+ }
+ WXSDKInstance* instance =[WXSDKManager instanceForID:instanceId];
+ if (nil == instance) {
+ return;
+ }
+ [instance.apmInstance updateDiffStats:KEY_PAGE_STATS_IMG_LOAD_NUM withDiffValue:1];
+}
+
+- (void) _recoredFinish:(NSURL*)imgUrl error:(NSError*)error loadOptions:(NSDictionary*)options
+{
+ NSString* instanceId = [options objectForKey:@"instanceId"];
+ if (nil == instanceId) {
+ WXLogWarning(@"please set instanceId in userInfo,for url %@:",imgUrl.absoluteString);
+ return;
+ }
+ WXSDKInstance* instance =[WXSDKManager instanceForID:instanceId];
+ if (nil == instance) {
+ return;
+ }
+ bool loadSucceed = error == nil;
+ [instance.apmInstance actionImgLoadResult:loadSucceed withErrorCode:nil];
+}
+
+@end
diff --git a/ios/WeexDemo/extend/module/WXEventModule.h b/ios/WeexDemo/extend/module/WXEventModule.h
new file mode 100644
index 0000000..2fec4ec
--- /dev/null
+++ b/ios/WeexDemo/extend/module/WXEventModule.h
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import <Foundation/Foundation.h>
+#import <WeexSDK/WXEventModuleProtocol.h>
+#import <WeexSDK/WXModuleProtocol.h>
+
+@interface WXEventModule : NSObject <WXEventModuleProtocol, WXModuleProtocol>
+
+@end
diff --git a/ios/WeexDemo/extend/module/WXEventModule.m b/ios/WeexDemo/extend/module/WXEventModule.m
new file mode 100644
index 0000000..1cebd62
--- /dev/null
+++ b/ios/WeexDemo/extend/module/WXEventModule.m
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import "WXEventModule.h"
+#import "WXDemoViewController.h"
+#import "WXScannerVC.h"
+#import <WeexSDK/WeexSDK.h>
+
+@implementation WXEventModule
+
+@synthesize weexInstance;
+
+WX_EXPORT_METHOD(@selector(openURL:))
+
+WX_EXPORT_METHOD(@selector(fireNativeGlobalEvent:callback:))
+
+- (void)openURL:(NSString *)url
+{
+ NSString *newURL = url;
+ if ([url hasPrefix:@"//"]) {
+ newURL = [NSString stringWithFormat:@"http:%@", url];
+ } else if ([url hasPrefix:@"weex://go/scan"]){
+ WXScannerVC * sannerVC = [WXScannerVC new];
+ [[weexInstance.viewController navigationController] pushViewController:sannerVC animated:YES];
+ return;
+ } else if (![url hasPrefix:@"http"]) {
+ // relative path
+ newURL = [NSURL URLWithString:url relativeToURL:weexInstance.scriptURL].absoluteString;
+ }
+
+ UIViewController *controller = [[WXDemoViewController alloc] init];
+ ((WXDemoViewController *)controller).url = [NSURL URLWithString:newURL];
+
+ [[weexInstance.viewController navigationController] pushViewController:controller animated:YES];
+}
+
+
+/**
+ a test method for macaca case, you can fire globalEvent when download finish、device shaked and so on.
+ @param event event name
+ */
+- (void)fireNativeGlobalEvent:(NSString *)event callback:(WXKeepAliveCallback)callback
+{
+ [weexInstance fireGlobalEvent:event params:@{@"eventParam":@"eventValue"}];
+ if (callback) {
+ NSDictionary * result = @{@"ok": @true};
+ callback(result,false);
+ }
+}
+
+@end
+
diff --git a/ios/WeexDemo/extend/module/WXTitleBarModule.h b/ios/WeexDemo/extend/module/WXTitleBarModule.h
new file mode 100644
index 0000000..057c618
--- /dev/null
+++ b/ios/WeexDemo/extend/module/WXTitleBarModule.h
@@ -0,0 +1,14 @@
+//
+// WXTitleBarModule.h
+// WeexDemo
+//
+// Created by zifan.zx on 2018/1/15.
+// Copyright © 2018年 taobao. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import <WeexSDK/WeexSDK.h>
+
+@interface WXTitleBarModule : NSObject<WXModuleProtocol>
+
+@end
diff --git a/ios/WeexDemo/extend/module/WXTitleBarModule.m b/ios/WeexDemo/extend/module/WXTitleBarModule.m
new file mode 100644
index 0000000..09c0182
--- /dev/null
+++ b/ios/WeexDemo/extend/module/WXTitleBarModule.m
@@ -0,0 +1,48 @@
+//
+// WXTitleBarModule.m
+// WeexDemo
+//
+// Created by zifan.zx on 2018/1/15.
+// Copyright © 2018年 taobao. All rights reserved.
+//
+
+#import "WXTitleBarModule.h"
+#import "WXDemoViewController.h"
+
+@implementation WXTitleBarModule
+@synthesize weexInstance;
+
+WX_EXPORT_METHOD(@selector(setTitle:))
+WX_EXPORT_METHOD(@selector(showTitleBar:))
+WX_EXPORT_METHOD(@selector(setStyle:))
+
+- (void)setTitle:(NSString*)title
+{
+ if (title) {
+ [weexInstance.viewController.navigationItem setTitle:title];
+ }
+}
+
+- (void)setStyle:(NSDictionary*)styles
+{
+ if (styles[@"backgroundColor"]) {
+ weexInstance.viewController.navigationController.navigationBar.barTintColor = [WXConvert UIColor:styles[@"backgroundColor"]];
+ }
+ if (styles[@"foregroundColor"]) {
+ weexInstance.viewController.navigationController.navigationBar.tintColor = [WXConvert UIColor:styles[@"foregroundColor"]];
+ [weexInstance.viewController.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName:[WXConvert UIColor:styles[@"foregroundColor"]]}];
+ }
+}
+
+- (void)dealloc
+{
+ weexInstance.viewController.navigationController.navigationBar.tintColor = [UIColor whiteColor];
+}
+
+- (void)showTitleBar:(bool)show
+{
+ [weexInstance.viewController.navigationController setNavigationBarHidden:!show];
+ ((WXDemoViewController*)weexInstance.viewController).showNavigationBar = !show;
+}
+
+@end
diff --git a/ios/WeexDemo/main.m b/ios/WeexDemo/main.m
new file mode 100644
index 0000000..f59fa14
--- /dev/null
+++ b/ios/WeexDemo/main.m
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import <UIKit/UIKit.h>
+#import "AppDelegate.h"
+
+int main(int argc, char * argv[]) {
+ @autoreleasepool {
+ return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
+ }
+}
diff --git a/ios/WeexDemo/weex-icon.png b/ios/WeexDemo/weex-icon.png
new file mode 100644
index 0000000..396b78f
--- /dev/null
+++ b/ios/WeexDemo/weex-icon.png
Binary files differ
diff --git a/ios/WeexDemoTests/Info.plist b/ios/WeexDemoTests/Info.plist
new file mode 100644
index 0000000..57c21c9
--- /dev/null
+++ b/ios/WeexDemoTests/Info.plist
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>NSLocationWhenInUseUsageDescription</key>
+ <string>$(PRODUCT_NAME) will access your location</string>
+ <key>NSCameraUsageDescription</key>
+ <string>$(PRODUCT_NAME) will access your camera</string>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>en</string>
+ <key>CFBundleExecutable</key>
+ <string>$(EXECUTABLE_NAME)</string>
+ <key>CFBundleIdentifier</key>
+ <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>$(PRODUCT_NAME)</string>
+ <key>CFBundlePackageType</key>
+ <string>BNDL</string>
+ <key>CFBundleShortVersionString</key>
+ <string>1.0</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>1</string>
+</dict>
+</plist>
diff --git a/ios/WeexDemoTests/WeexDemoTests.m b/ios/WeexDemoTests/WeexDemoTests.m
new file mode 100644
index 0000000..c143038
--- /dev/null
+++ b/ios/WeexDemoTests/WeexDemoTests.m
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import <XCTest/XCTest.h>
+
+@interface WeexDemoTests : XCTestCase
+
+@end
+
+@implementation WeexDemoTests
+
+- (void)setUp {
+ [super setUp];
+ // Put setup code here. This method is called before the invocation of each test method in the class.
+}
+
+- (void)tearDown {
+ // Put teardown code here. This method is called after the invocation of each test method in the class.
+ [super tearDown];
+}
+
+- (void)testExample {
+ // This is an example of a functional test case.
+ // Use XCTAssert and related functions to verify your tests produce the correct results.
+}
+
+- (void)testPerformanceExample {
+ // This is an example of a performance test case.
+ [self measureBlock:^{
+ // Put the code you want to measure the time of here.
+ }];
+}
+
+@end
diff --git a/ios/WeexUITestDemo-Info.plist b/ios/WeexUITestDemo-Info.plist
new file mode 100644
index 0000000..42d0202
--- /dev/null
+++ b/ios/WeexUITestDemo-Info.plist
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>en</string>
+ <key>CFBundleExecutable</key>
+ <string>$(EXECUTABLE_NAME)</string>
+ <key>CFBundleIdentifier</key>
+ <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>$(PRODUCT_NAME)</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleShortVersionString</key>
+ <string>99.0</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>10000</string>
+ <key>LSRequiresIPhoneOS</key>
+ <true/>
+ <key>NSAppTransportSecurity</key>
+ <dict>
+ <key>NSAllowsArbitraryLoads</key>
+ <true/>
+ </dict>
+ <key>UILaunchStoryboardName</key>
+ <string>LaunchScreen</string>
+ <key>UIRequiredDeviceCapabilities</key>
+ <array>
+ <string>armv7</string>
+ </array>
+ <key>UIStatusBarStyle</key>
+ <string>UIStatusBarStyleLightContent</string>
+ <key>UISupportedInterfaceOrientations</key>
+ <array>
+ <string>UIInterfaceOrientationPortrait</string>
+ </array>
+ <key>UISupportedInterfaceOrientations~ipad</key>
+ <array>
+ <string>UIInterfaceOrientationPortrait</string>
+ <string>UIInterfaceOrientationPortraitUpsideDown</string>
+ <string>UIInterfaceOrientationLandscapeLeft</string>
+ <string>UIInterfaceOrientationLandscapeRight</string>
+ </array>
+ <key>UIViewControllerBasedStatusBarAppearance</key>
+ <false/>
+</dict>
+</plist>
diff --git a/ios/WeexUITestDemoUITests/Info.plist b/ios/WeexUITestDemoUITests/Info.plist
new file mode 100644
index 0000000..ba72822
--- /dev/null
+++ b/ios/WeexUITestDemoUITests/Info.plist
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>en</string>
+ <key>CFBundleExecutable</key>
+ <string>$(EXECUTABLE_NAME)</string>
+ <key>CFBundleIdentifier</key>
+ <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>$(PRODUCT_NAME)</string>
+ <key>CFBundlePackageType</key>
+ <string>BNDL</string>
+ <key>CFBundleShortVersionString</key>
+ <string>1.0</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>1</string>
+</dict>
+</plist>
diff --git a/ios/WeexUITestDemoUITests/WeexUITestDemoUITests.m b/ios/WeexUITestDemoUITests/WeexUITestDemoUITests.m
new file mode 100644
index 0000000..cbeca46
--- /dev/null
+++ b/ios/WeexUITestDemoUITests/WeexUITestDemoUITests.m
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import <XCTest/XCTest.h>
+
+@interface WeexUITestDemoUITests : XCTestCase
+
+@end
+
+@implementation WeexUITestDemoUITests
+
+- (void)setUp {
+ [super setUp];
+
+ // Put setup code here. This method is called before the invocation of each test method in the class.
+
+ // In UI tests it is usually best to stop immediately when a failure occurs.
+ self.continueAfterFailure = NO;
+ // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method.
+ [[[XCUIApplication alloc] init] launch];
+
+ // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.
+}
+
+- (void)tearDown {
+ // Put teardown code here. This method is called after the invocation of each test method in the class.
+ [super tearDown];
+}
+
+- (void)testExample {
+ // Use recording to get started writing UI tests.
+ // Use XCTAssert and related functions to verify your tests produce the correct results.
+}
+
+@end
diff --git a/ios/bundlejs/about.weex.js b/ios/bundlejs/about.weex.js
new file mode 100644
index 0000000..c685047
--- /dev/null
+++ b/ios/bundlejs/about.weex.js
@@ -0,0 +1,3309 @@
+// { "framework": "Vue" }
+"use weex:vue";
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ // The module cache
+/******/ var installedModules = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/
+/******/ // Check if module is in cache
+/******/ if(installedModules[moduleId]) {
+/******/ return installedModules[moduleId].exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = installedModules[moduleId] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = true;
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = modules;
+/******/
+/******/ // expose the module cache
+/******/ __webpack_require__.c = installedModules;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, {
+/******/ configurable: false,
+/******/ enumerable: true,
+/******/ get: getter
+/******/ });
+/******/ }
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = 38);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ (function(module, exports) {
+
+// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
+var global = module.exports = typeof window != 'undefined' && window.Math == Math
+ ? window : typeof self != 'undefined' && self.Math == Math ? self
+ // eslint-disable-next-line no-new-func
+ : Function('return this')();
+if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef
+
+
+/***/ }),
+/* 1 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var anObject = __webpack_require__(10);
+var IE8_DOM_DEFINE = __webpack_require__(30);
+var toPrimitive = __webpack_require__(17);
+var dP = Object.defineProperty;
+
+exports.f = __webpack_require__(2) ? Object.defineProperty : function defineProperty(O, P, Attributes) {
+ anObject(O);
+ P = toPrimitive(P, true);
+ anObject(Attributes);
+ if (IE8_DOM_DEFINE) try {
+ return dP(O, P, Attributes);
+ } catch (e) { /* empty */ }
+ if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');
+ if ('value' in Attributes) O[P] = Attributes.value;
+ return O;
+};
+
+
+/***/ }),
+/* 2 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// Thank's IE8 for his funny defineProperty
+module.exports = !__webpack_require__(11)(function () {
+ return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;
+});
+
+
+/***/ }),
+/* 3 */
+/***/ (function(module, exports) {
+
+var hasOwnProperty = {}.hasOwnProperty;
+module.exports = function (it, key) {
+ return hasOwnProperty.call(it, key);
+};
+
+
+/***/ }),
+/* 4 */
+/***/ (function(module, exports) {
+
+var core = module.exports = { version: '2.5.7' };
+if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef
+
+
+/***/ }),
+/* 5 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var dP = __webpack_require__(1);
+var createDesc = __webpack_require__(12);
+module.exports = __webpack_require__(2) ? function (object, key, value) {
+ return dP.f(object, key, createDesc(1, value));
+} : function (object, key, value) {
+ object[key] = value;
+ return object;
+};
+
+
+/***/ }),
+/* 6 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// to indexed object, toObject with fallback for non-array-like ES3 strings
+var IObject = __webpack_require__(51);
+var defined = __webpack_require__(15);
+module.exports = function (it) {
+ return IObject(defined(it));
+};
+
+
+/***/ }),
+/* 7 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var store = __webpack_require__(21)('wks');
+var uid = __webpack_require__(13);
+var Symbol = __webpack_require__(0).Symbol;
+var USE_SYMBOL = typeof Symbol == 'function';
+
+var $exports = module.exports = function (name) {
+ return store[name] || (store[name] =
+ USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));
+};
+
+$exports.store = store;
+
+
+/***/ }),
+/* 8 */
+/***/ (function(module, exports) {
+
+module.exports = function (it) {
+ return typeof it === 'object' ? it !== null : typeof it === 'function';
+};
+
+
+/***/ }),
+/* 9 */
+/***/ (function(module, exports) {
+
+module.exports = true;
+
+
+/***/ }),
+/* 10 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var isObject = __webpack_require__(8);
+module.exports = function (it) {
+ if (!isObject(it)) throw TypeError(it + ' is not an object!');
+ return it;
+};
+
+
+/***/ }),
+/* 11 */
+/***/ (function(module, exports) {
+
+module.exports = function (exec) {
+ try {
+ return !!exec();
+ } catch (e) {
+ return true;
+ }
+};
+
+
+/***/ }),
+/* 12 */
+/***/ (function(module, exports) {
+
+module.exports = function (bitmap, value) {
+ return {
+ enumerable: !(bitmap & 1),
+ configurable: !(bitmap & 2),
+ writable: !(bitmap & 4),
+ value: value
+ };
+};
+
+
+/***/ }),
+/* 13 */
+/***/ (function(module, exports) {
+
+var id = 0;
+var px = Math.random();
+module.exports = function (key) {
+ return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
+};
+
+
+/***/ }),
+/* 14 */
+/***/ (function(module, exports) {
+
+// 7.1.4 ToInteger
+var ceil = Math.ceil;
+var floor = Math.floor;
+module.exports = function (it) {
+ return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
+};
+
+
+/***/ }),
+/* 15 */
+/***/ (function(module, exports) {
+
+// 7.2.1 RequireObjectCoercible(argument)
+module.exports = function (it) {
+ if (it == undefined) throw TypeError("Can't call method on " + it);
+ return it;
+};
+
+
+/***/ }),
+/* 16 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var global = __webpack_require__(0);
+var core = __webpack_require__(4);
+var ctx = __webpack_require__(47);
+var hide = __webpack_require__(5);
+var has = __webpack_require__(3);
+var PROTOTYPE = 'prototype';
+
+var $export = function (type, name, source) {
+ var IS_FORCED = type & $export.F;
+ var IS_GLOBAL = type & $export.G;
+ var IS_STATIC = type & $export.S;
+ var IS_PROTO = type & $export.P;
+ var IS_BIND = type & $export.B;
+ var IS_WRAP = type & $export.W;
+ var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});
+ var expProto = exports[PROTOTYPE];
+ var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];
+ var key, own, out;
+ if (IS_GLOBAL) source = name;
+ for (key in source) {
+ // contains in native
+ own = !IS_FORCED && target && target[key] !== undefined;
+ if (own && has(exports, key)) continue;
+ // export native or passed
+ out = own ? target[key] : source[key];
+ // prevent global pollution for namespaces
+ exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]
+ // bind timers to global for call from export context
+ : IS_BIND && own ? ctx(out, global)
+ // wrap global constructors for prevent change them in library
+ : IS_WRAP && target[key] == out ? (function (C) {
+ var F = function (a, b, c) {
+ if (this instanceof C) {
+ switch (arguments.length) {
+ case 0: return new C();
+ case 1: return new C(a);
+ case 2: return new C(a, b);
+ } return new C(a, b, c);
+ } return C.apply(this, arguments);
+ };
+ F[PROTOTYPE] = C[PROTOTYPE];
+ return F;
+ // make static versions for prototype methods
+ })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
+ // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%
+ if (IS_PROTO) {
+ (exports.virtual || (exports.virtual = {}))[key] = out;
+ // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%
+ if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);
+ }
+ }
+};
+// type bitmap
+$export.F = 1; // forced
+$export.G = 2; // global
+$export.S = 4; // static
+$export.P = 8; // proto
+$export.B = 16; // bind
+$export.W = 32; // wrap
+$export.U = 64; // safe
+$export.R = 128; // real proto method for `library`
+module.exports = $export;
+
+
+/***/ }),
+/* 17 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 7.1.1 ToPrimitive(input [, PreferredType])
+var isObject = __webpack_require__(8);
+// instead of the ES6 spec version, we didn't implement @@toPrimitive case
+// and the second argument - flag - preferred type is a string
+module.exports = function (it, S) {
+ if (!isObject(it)) return it;
+ var fn, val;
+ if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
+ if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;
+ if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
+ throw TypeError("Can't convert object to primitive value");
+};
+
+
+/***/ }),
+/* 18 */
+/***/ (function(module, exports) {
+
+module.exports = {};
+
+
+/***/ }),
+/* 19 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 19.1.2.14 / 15.2.3.14 Object.keys(O)
+var $keys = __webpack_require__(34);
+var enumBugKeys = __webpack_require__(22);
+
+module.exports = Object.keys || function keys(O) {
+ return $keys(O, enumBugKeys);
+};
+
+
+/***/ }),
+/* 20 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var shared = __webpack_require__(21)('keys');
+var uid = __webpack_require__(13);
+module.exports = function (key) {
+ return shared[key] || (shared[key] = uid(key));
+};
+
+
+/***/ }),
+/* 21 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var core = __webpack_require__(4);
+var global = __webpack_require__(0);
+var SHARED = '__core-js_shared__';
+var store = global[SHARED] || (global[SHARED] = {});
+
+(module.exports = function (key, value) {
+ return store[key] || (store[key] = value !== undefined ? value : {});
+})('versions', []).push({
+ version: core.version,
+ mode: __webpack_require__(9) ? 'pure' : 'global',
+ copyright: '© 2018 Denis Pushkarev (zloirock.ru)'
+});
+
+
+/***/ }),
+/* 22 */
+/***/ (function(module, exports) {
+
+// IE 8- don't enum bug keys
+module.exports = (
+ 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'
+).split(',');
+
+
+/***/ }),
+/* 23 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var def = __webpack_require__(1).f;
+var has = __webpack_require__(3);
+var TAG = __webpack_require__(7)('toStringTag');
+
+module.exports = function (it, tag, stat) {
+ if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });
+};
+
+
+/***/ }),
+/* 24 */
+/***/ (function(module, exports, __webpack_require__) {
+
+exports.f = __webpack_require__(7);
+
+
+/***/ }),
+/* 25 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var global = __webpack_require__(0);
+var core = __webpack_require__(4);
+var LIBRARY = __webpack_require__(9);
+var wksExt = __webpack_require__(24);
+var defineProperty = __webpack_require__(1).f;
+module.exports = function (name) {
+ var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});
+ if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });
+};
+
+
+/***/ }),
+/* 26 */
+/***/ (function(module, exports) {
+
+exports.f = {}.propertyIsEnumerable;
+
+
+/***/ }),
+/* 27 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.fetchNews = exports.fetchDoodle = exports.readAbout = exports.saveAbout = exports.fetchAbout = exports.readGuide = exports.saveGuide = exports.fetchGuide = exports.readExamples = exports.saveExamples = exports.fetchExamples = undefined;
+
+var _stringify = __webpack_require__(41);
+
+var _stringify2 = _interopRequireDefault(_stringify);
+
+var _typeof2 = __webpack_require__(28);
+
+var _typeof3 = _interopRequireDefault(_typeof2);
+
+exports.createLink = createLink;
+exports.createURL = createURL;
+exports.i18n = i18n;
+exports.parseLanguage = parseLanguage;
+exports.setLanguage = setLanguage;
+exports.clearStorageLanguage = clearStorageLanguage;
+exports.getStorageLanguage = getStorageLanguage;
+exports.getSystemLanguage = getSystemLanguage;
+exports.getLanguage = getLanguage;
+exports.jumpTo = jumpTo;
+exports.viewSource = viewSource;
+exports.setTitleBar = setTitleBar;
+exports.fetchData = fetchData;
+exports.saveData = saveData;
+exports.readData = readData;
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var stream = weex.requireModule('stream');
+var storage = weex.requireModule('storage');
+var navigator = weex.requireModule('navigator');
+
+var encoder = typeof encodeURIComponent === 'function' ? encodeURIComponent : typeof encodeURI === 'function' ? encodeURI : function (x) {
+ return x;
+};
+
+function encodeParams(params) {
+ if (!params || (typeof params === 'undefined' ? 'undefined' : (0, _typeof3.default)(params)) !== 'object') {
+ return '';
+ }
+ var array = [];
+ for (var key in params) {
+ if (typeof params[key] === 'string') {
+ array.push(encoder(key) + '=' + encoder(params[key]));
+ }
+ }
+ return array.join('&');
+}
+
+function createLink(name) {
+ var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+ var args = [];
+ for (var key in params) {
+ if (typeof params[key] === 'string') {
+ args.push(encoder(key) + '=' + encoder(params[key]));
+ }
+ }
+ if (WXEnvironment.platform === 'Web') {
+ args.unshift('page=' + name + '.web.js');
+ return '/?' + args.join('&');
+ }
+ var base = getBaseURL();
+ return '' + base + name + '.weex.js' + (args.length ? '?' + args.join('&') : '');
+}
+
+function createURL(hash, params) {
+ if (WXEnvironment.platform === 'Web') {
+ return 'http://dotwe.org/raw/htmlVue/' + hash;
+ }
+ var url = 'http://dotwe.org/raw/dist/' + hash + '.bundle.wx';
+ var paramString = encodeParams(params);
+ if (WXEnvironment.appName === 'TB') {
+ return url + '?_wx_tpl=' + url + '&' + paramString;
+ }
+ if (WXEnvironment.appName === 'WXSample') {
+ return url + '?' + paramString;
+ }
+ return url + '?wx_weex=true&' + paramString;
+}
+
+function getBaseURL() {
+ var bundleUrl = weex.config.bundleUrl;
+ var isAndroidAssets = bundleUrl.indexOf('your_current_IP') >= 0 || bundleUrl.indexOf('file://assets/') >= 0;
+ var isiOSAssets = bundleUrl.indexOf('file:///') >= 0 && bundleUrl.indexOf('WeexDemo.app') > 0;
+ if (isAndroidAssets) {
+ return 'file://assets/';
+ } else if (isiOSAssets) {
+ // file:///var/mobile/Containers/Bundle/Application/{id}/WeexDemo.app/
+ // file:///Users/{user}/Library/Developer/CoreSimulator/Devices/{id}/data/Containers/Bundle/Application/{id}/WeexDemo.app/
+ return bundleUrl.substring(0, bundleUrl.lastIndexOf('/') + 1);
+ }
+ return '';
+}
+
+function i18n(text, language) {
+ if (typeof text === 'string') {
+ return text;
+ }
+ if (Object.prototype.toString.call(text) === '[object Object]') {
+ var lang = this && this.language || language || 'en';
+ return text[lang];
+ }
+}
+
+var supportedLanguageRE = /(en|zh)\_?\w*/i;
+function parseLanguage(language) {
+ var match = supportedLanguageRE.exec(language + '');
+ if (match && match[1]) {
+ return match[1];
+ }
+ return '';
+}
+
+function setLanguage(language) {
+ var lang = parseLanguage(language);
+ if (lang) {
+ storage.setItem('WEEX_PLAYGROUND_LANGUAGE', lang);
+ }
+}
+
+function clearStorageLanguage() {
+ storage.removeItem('WEEX_PLAYGROUND_LANGUAGE');
+}
+
+function getStorageLanguage(done) {
+ var fail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};
+
+ if (!(typeof done === 'undefined' ? 'undefined' : (0, _typeof3.default)(done)) === 'function') {
+ return;
+ }
+ try {
+ storage.getItem('WEEX_PLAYGROUND_LANGUAGE', function (event) {
+ if (event.result === 'success') {
+ var lang = parseLanguage(event.data);
+ lang ? done(lang) : fail();
+ } else {
+ fail(event);
+ }
+ });
+ } catch (err) {
+ fail(err);
+ }
+}
+
+function getSystemLanguage(done) {
+ var fail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};
+
+ if (!(typeof done === 'undefined' ? 'undefined' : (0, _typeof3.default)(done)) === 'function') {
+ return;
+ }
+ if (WXEnvironment.platform.toLowerCase() === 'web') {
+ var lang = parseLanguage(window.navigator.language);
+ lang ? done(lang) : fail();
+ } else {
+ try {
+ var locale = weex.requireModule('locale') || weex.requireModule('local');
+ var useSync = false;
+ var resSync = locale.getLanguage(function (language) {
+ var lang = parseLanguage(language);
+ if (lang) {
+ useSync || done(lang);
+ } else {
+ fail();
+ }
+ });
+ var langSync = parseLanguage(resSync);
+ if (langSync) {
+ useSync = true;
+ done(langSync);
+ } else {
+ fail();
+ }
+ } catch (e) {
+ fail(e);
+ }
+ }
+}
+
+var languageRE = /.+[\?\&]{1}language=([\d\w]+)[\?\&]?.*/i;
+function getLanguage() {
+ var done = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {};
+
+ var match = languageRE.exec(weex.config.bundleUrl || '');
+ var lang = parseLanguage(match && match[1]);
+ if (lang) {
+ done(lang);
+ } else {
+ getStorageLanguage(done, function () {
+ getSystemLanguage(done, function () {
+ done('en');
+ });
+ });
+ }
+}
+
+function jumpTo(url, title, lang) {
+ getLanguage(function (language) {
+ storage.setItem('CURRENT_DOCUMENT_URL', i18n(url, lang || language));
+ navigator.push({
+ url: createURL('bf0305c14b511b24a4e616f53926432b', { language: language, title: i18n(title, lang || language) })
+ });
+ });
+}
+
+function viewSource(hash) {
+ getLanguage(function (language) {
+ navigator.push({
+ url: createURL('f6ce29faf686eabc38b410bf4828fa5a', { hash: hash, language: language })
+ });
+ });
+}
+
+function setTitleBar(options) {
+ var language = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'en';
+
+ if (Object.prototype.toString.apply(options) !== '[object Object]') {
+ return;
+ }
+ var titleBar = weex.requireModule('titleBar');
+ if (options.color || options.backgroundColor) {
+ try {
+ titleBar.setStyle({
+ foregroundColor: options.color || '#FFFFFF',
+ backgroundColor: options.backgroundColor || '#00B4FF'
+ });
+ } catch (e) {}
+ }
+ var title = i18n(options.title, language);
+ if (title) {
+ try {
+ titleBar.setTitle(title);
+ } catch (e) {}
+ }
+}
+
+var storageKeys = {
+ doodle: 'WEEX_PLAYGROUND_APP_DOODLE',
+ guide: 'WEEX_PLAYGROUND_APP_GUIDE',
+ examples: 'WEEX_PLAYGROUND_APP_EXAMPLES',
+ news: 'WEEX_PLAYGROUND_APP_NEWS',
+ about: 'WEEX_PLAYGROUND_APP_ABOUT'
+};
+function fetchData(name) {
+ var done = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};
+ var fail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {};
+
+ try {
+ stream.fetch({
+ url: 'http://dotwe.org/query/weex-playground-app',
+ method: 'post',
+ headers: {
+ 'Content-Type': 'application/x-www-form-urlencoded'
+ },
+ type: 'json',
+ body: 'name=' + name
+ }, function (res) {
+ if (res.ok && res.data && res.data.success) {
+ done(res.data);
+ } else {
+ fail(res);
+ }
+ });
+ } catch (err) {
+ fail(err);
+ }
+}
+function saveData(name, result) {
+ var key = storageKeys[name];
+ if (!key) return;
+ if (result && (typeof result === 'undefined' ? 'undefined' : (0, _typeof3.default)(result)) === 'object') {
+ result.timestamp = Date.now();
+ storage.setItem(key, (0, _stringify2.default)(result));
+ }
+}
+function readData(name) {
+ var done = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};
+ var fail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {};
+
+ var key = storageKeys[name];
+ if (!key) return fail();
+ try {
+ storage.getItem(key, function (event) {
+ if (event.result === 'success') {
+ var result = JSON.parse(event.data);
+ if (result && Array.isArray(result[name])) {
+ return done(result[name]);
+ }
+ }
+ fail(event);
+ });
+ } catch (e) {
+ fail(e);
+ }
+}
+
+var fetchExamples = exports.fetchExamples = function fetchExamples() {
+ for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+
+ return fetchData.apply(undefined, ['examples'].concat(args));
+};
+var saveExamples = exports.saveExamples = function saveExamples() {
+ for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
+ args[_key2] = arguments[_key2];
+ }
+
+ return saveData.apply(undefined, ['examples'].concat(args));
+};
+var readExamples = exports.readExamples = function readExamples() {
+ for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
+ args[_key3] = arguments[_key3];
+ }
+
+ return readData.apply(undefined, ['examples'].concat(args));
+};
+
+var fetchGuide = exports.fetchGuide = function fetchGuide() {
+ for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
+ args[_key4] = arguments[_key4];
+ }
+
+ return fetchData.apply(undefined, ['guide'].concat(args));
+};
+var saveGuide = exports.saveGuide = function saveGuide() {
+ for (var _len5 = arguments.length, args = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
+ args[_key5] = arguments[_key5];
+ }
+
+ return saveData.apply(undefined, ['guide'].concat(args));
+};
+var readGuide = exports.readGuide = function readGuide() {
+ for (var _len6 = arguments.length, args = Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
+ args[_key6] = arguments[_key6];
+ }
+
+ return readData.apply(undefined, ['guide'].concat(args));
+};
+
+var fetchAbout = exports.fetchAbout = function fetchAbout() {
+ for (var _len7 = arguments.length, args = Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {
+ args[_key7] = arguments[_key7];
+ }
+
+ return fetchData.apply(undefined, ['about'].concat(args));
+};
+var saveAbout = exports.saveAbout = function saveAbout() {
+ for (var _len8 = arguments.length, args = Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {
+ args[_key8] = arguments[_key8];
+ }
+
+ return saveData.apply(undefined, ['about'].concat(args));
+};
+var readAbout = exports.readAbout = function readAbout() {
+ for (var _len9 = arguments.length, args = Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {
+ args[_key9] = arguments[_key9];
+ }
+
+ return readData.apply(undefined, ['about'].concat(args));
+};
+
+var fetchDoodle = exports.fetchDoodle = function fetchDoodle() {
+ for (var _len10 = arguments.length, args = Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {
+ args[_key10] = arguments[_key10];
+ }
+
+ return fetchData.apply(undefined, ['doodle'].concat(args));
+};
+var fetchNews = exports.fetchNews = function fetchNews() {
+ for (var _len11 = arguments.length, args = Array(_len11), _key11 = 0; _key11 < _len11; _key11++) {
+ args[_key11] = arguments[_key11];
+ }
+
+ return fetchData.apply(undefined, ['news'].concat(args));
+};
+
+/***/ }),
+/* 28 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+exports.__esModule = true;
+
+var _iterator = __webpack_require__(43);
+
+var _iterator2 = _interopRequireDefault(_iterator);
+
+var _symbol = __webpack_require__(62);
+
+var _symbol2 = _interopRequireDefault(_symbol);
+
+var _typeof = typeof _symbol2.default === "function" && typeof _iterator2.default === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj; };
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+exports.default = typeof _symbol2.default === "function" && _typeof(_iterator2.default) === "symbol" ? function (obj) {
+ return typeof obj === "undefined" ? "undefined" : _typeof(obj);
+} : function (obj) {
+ return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof(obj);
+};
+
+/***/ }),
+/* 29 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var LIBRARY = __webpack_require__(9);
+var $export = __webpack_require__(16);
+var redefine = __webpack_require__(32);
+var hide = __webpack_require__(5);
+var Iterators = __webpack_require__(18);
+var $iterCreate = __webpack_require__(49);
+var setToStringTag = __webpack_require__(23);
+var getPrototypeOf = __webpack_require__(56);
+var ITERATOR = __webpack_require__(7)('iterator');
+var BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`
+var FF_ITERATOR = '@@iterator';
+var KEYS = 'keys';
+var VALUES = 'values';
+
+var returnThis = function () { return this; };
+
+module.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {
+ $iterCreate(Constructor, NAME, next);
+ var getMethod = function (kind) {
+ if (!BUGGY && kind in proto) return proto[kind];
+ switch (kind) {
+ case KEYS: return function keys() { return new Constructor(this, kind); };
+ case VALUES: return function values() { return new Constructor(this, kind); };
+ } return function entries() { return new Constructor(this, kind); };
+ };
+ var TAG = NAME + ' Iterator';
+ var DEF_VALUES = DEFAULT == VALUES;
+ var VALUES_BUG = false;
+ var proto = Base.prototype;
+ var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];
+ var $default = $native || getMethod(DEFAULT);
+ var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;
+ var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;
+ var methods, key, IteratorPrototype;
+ // Fix native
+ if ($anyNative) {
+ IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));
+ if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {
+ // Set @@toStringTag to native iterators
+ setToStringTag(IteratorPrototype, TAG, true);
+ // fix for some old engines
+ if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);
+ }
+ }
+ // fix Array#{values, @@iterator}.name in V8 / FF
+ if (DEF_VALUES && $native && $native.name !== VALUES) {
+ VALUES_BUG = true;
+ $default = function values() { return $native.call(this); };
+ }
+ // Define iterator
+ if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {
+ hide(proto, ITERATOR, $default);
+ }
+ // Plug for library
+ Iterators[NAME] = $default;
+ Iterators[TAG] = returnThis;
+ if (DEFAULT) {
+ methods = {
+ values: DEF_VALUES ? $default : getMethod(VALUES),
+ keys: IS_SET ? $default : getMethod(KEYS),
+ entries: $entries
+ };
+ if (FORCED) for (key in methods) {
+ if (!(key in proto)) redefine(proto, key, methods[key]);
+ } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);
+ }
+ return methods;
+};
+
+
+/***/ }),
+/* 30 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = !__webpack_require__(2) && !__webpack_require__(11)(function () {
+ return Object.defineProperty(__webpack_require__(31)('div'), 'a', { get: function () { return 7; } }).a != 7;
+});
+
+
+/***/ }),
+/* 31 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var isObject = __webpack_require__(8);
+var document = __webpack_require__(0).document;
+// typeof document.createElement is 'object' in old IE
+var is = isObject(document) && isObject(document.createElement);
+module.exports = function (it) {
+ return is ? document.createElement(it) : {};
+};
+
+
+/***/ }),
+/* 32 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = __webpack_require__(5);
+
+
+/***/ }),
+/* 33 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
+var anObject = __webpack_require__(10);
+var dPs = __webpack_require__(50);
+var enumBugKeys = __webpack_require__(22);
+var IE_PROTO = __webpack_require__(20)('IE_PROTO');
+var Empty = function () { /* empty */ };
+var PROTOTYPE = 'prototype';
+
+// Create object with fake `null` prototype: use iframe Object with cleared prototype
+var createDict = function () {
+ // Thrash, waste and sodomy: IE GC bug
+ var iframe = __webpack_require__(31)('iframe');
+ var i = enumBugKeys.length;
+ var lt = '<';
+ var gt = '>';
+ var iframeDocument;
+ iframe.style.display = 'none';
+ __webpack_require__(55).appendChild(iframe);
+ iframe.src = 'javascript:'; // eslint-disable-line no-script-url
+ // createDict = iframe.contentWindow.Object;
+ // html.removeChild(iframe);
+ iframeDocument = iframe.contentWindow.document;
+ iframeDocument.open();
+ iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);
+ iframeDocument.close();
+ createDict = iframeDocument.F;
+ while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];
+ return createDict();
+};
+
+module.exports = Object.create || function create(O, Properties) {
+ var result;
+ if (O !== null) {
+ Empty[PROTOTYPE] = anObject(O);
+ result = new Empty();
+ Empty[PROTOTYPE] = null;
+ // add "__proto__" for Object.getPrototypeOf polyfill
+ result[IE_PROTO] = O;
+ } else result = createDict();
+ return Properties === undefined ? result : dPs(result, Properties);
+};
+
+
+/***/ }),
+/* 34 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var has = __webpack_require__(3);
+var toIObject = __webpack_require__(6);
+var arrayIndexOf = __webpack_require__(52)(false);
+var IE_PROTO = __webpack_require__(20)('IE_PROTO');
+
+module.exports = function (object, names) {
+ var O = toIObject(object);
+ var i = 0;
+ var result = [];
+ var key;
+ for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);
+ // Don't enum bug & hidden keys
+ while (names.length > i) if (has(O, key = names[i++])) {
+ ~arrayIndexOf(result, key) || result.push(key);
+ }
+ return result;
+};
+
+
+/***/ }),
+/* 35 */
+/***/ (function(module, exports) {
+
+var toString = {}.toString;
+
+module.exports = function (it) {
+ return toString.call(it).slice(8, -1);
+};
+
+
+/***/ }),
+/* 36 */
+/***/ (function(module, exports) {
+
+exports.f = Object.getOwnPropertySymbols;
+
+
+/***/ }),
+/* 37 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)
+var $keys = __webpack_require__(34);
+var hiddenKeys = __webpack_require__(22).concat('length', 'prototype');
+
+exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
+ return $keys(O, hiddenKeys);
+};
+
+
+/***/ }),
+/* 38 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+__webpack_require__(39);
+
+var _About = __webpack_require__(73);
+
+var _About2 = _interopRequireDefault(_About);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+// show title bar
+try {
+ var titleBar = weex.requireModule('titleBar');
+ titleBar.showTitleBar(true);
+} catch (e) {}
+
+_About2.default.el = '#root';
+new Vue(_About2.default);
+
+/***/ }),
+/* 39 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _mixin = __webpack_require__(40);
+
+var _mixin2 = _interopRequireDefault(_mixin);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+// use shared mixins
+Vue.mixin(_mixin2.default);
+
+/***/ }),
+/* 40 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _index = __webpack_require__(27);
+
+var utils = _interopRequireWildcard(_index);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+var storage = weex.requireModule('storage');
+
+exports.default = {
+ filters: {
+ i18n: utils.i18n,
+ url: utils.createURL,
+ link: utils.createLink
+ },
+ methods: {
+ createLink: utils.createLink,
+ createURL: utils.createURL,
+ i18n: utils.i18n,
+ getLanguage: utils.getLanguage,
+ fetchData: utils.fetchData,
+ saveData: utils.saveData,
+ readData: utils.readData,
+ jumpTo: utils.jumpTo
+ },
+ created: function created() {
+ var _this = this;
+
+ // get and set language
+ utils.getLanguage(function (language) {
+ _this.language = language;
+ utils.setTitleBar(_this.navigationBarOptions, language);
+ });
+
+ // listen to the language change event
+ var channel = new BroadcastChannel('language');
+ channel.onmessage = function (event) {
+ if (event.data && event.data.language) {
+ _this.language = event.data.language;
+ }
+ };
+ },
+ beforeDestroy: function beforeDestroy() {
+ storage.removeItem('CURRENT_DOCUMENT_URL');
+ storage.removeItem('CURRENT_SOURCE_HASH');
+ }
+};
+
+/***/ }),
+/* 41 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = { "default": __webpack_require__(42), __esModule: true };
+
+/***/ }),
+/* 42 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var core = __webpack_require__(4);
+var $JSON = core.JSON || (core.JSON = { stringify: JSON.stringify });
+module.exports = function stringify(it) { // eslint-disable-line no-unused-vars
+ return $JSON.stringify.apply($JSON, arguments);
+};
+
+
+/***/ }),
+/* 43 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = { "default": __webpack_require__(44), __esModule: true };
+
+/***/ }),
+/* 44 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(45);
+__webpack_require__(58);
+module.exports = __webpack_require__(24).f('iterator');
+
+
+/***/ }),
+/* 45 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var $at = __webpack_require__(46)(true);
+
+// 21.1.3.27 String.prototype[@@iterator]()
+__webpack_require__(29)(String, 'String', function (iterated) {
+ this._t = String(iterated); // target
+ this._i = 0; // next index
+// 21.1.5.2.1 %StringIteratorPrototype%.next()
+}, function () {
+ var O = this._t;
+ var index = this._i;
+ var point;
+ if (index >= O.length) return { value: undefined, done: true };
+ point = $at(O, index);
+ this._i += point.length;
+ return { value: point, done: false };
+});
+
+
+/***/ }),
+/* 46 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var toInteger = __webpack_require__(14);
+var defined = __webpack_require__(15);
+// true -> String#at
+// false -> String#codePointAt
+module.exports = function (TO_STRING) {
+ return function (that, pos) {
+ var s = String(defined(that));
+ var i = toInteger(pos);
+ var l = s.length;
+ var a, b;
+ if (i < 0 || i >= l) return TO_STRING ? '' : undefined;
+ a = s.charCodeAt(i);
+ return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff
+ ? TO_STRING ? s.charAt(i) : a
+ : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;
+ };
+};
+
+
+/***/ }),
+/* 47 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// optional / simple context binding
+var aFunction = __webpack_require__(48);
+module.exports = function (fn, that, length) {
+ aFunction(fn);
+ if (that === undefined) return fn;
+ switch (length) {
+ case 1: return function (a) {
+ return fn.call(that, a);
+ };
+ case 2: return function (a, b) {
+ return fn.call(that, a, b);
+ };
+ case 3: return function (a, b, c) {
+ return fn.call(that, a, b, c);
+ };
+ }
+ return function (/* ...args */) {
+ return fn.apply(that, arguments);
+ };
+};
+
+
+/***/ }),
+/* 48 */
+/***/ (function(module, exports) {
+
+module.exports = function (it) {
+ if (typeof it != 'function') throw TypeError(it + ' is not a function!');
+ return it;
+};
+
+
+/***/ }),
+/* 49 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var create = __webpack_require__(33);
+var descriptor = __webpack_require__(12);
+var setToStringTag = __webpack_require__(23);
+var IteratorPrototype = {};
+
+// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
+__webpack_require__(5)(IteratorPrototype, __webpack_require__(7)('iterator'), function () { return this; });
+
+module.exports = function (Constructor, NAME, next) {
+ Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });
+ setToStringTag(Constructor, NAME + ' Iterator');
+};
+
+
+/***/ }),
+/* 50 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var dP = __webpack_require__(1);
+var anObject = __webpack_require__(10);
+var getKeys = __webpack_require__(19);
+
+module.exports = __webpack_require__(2) ? Object.defineProperties : function defineProperties(O, Properties) {
+ anObject(O);
+ var keys = getKeys(Properties);
+ var length = keys.length;
+ var i = 0;
+ var P;
+ while (length > i) dP.f(O, P = keys[i++], Properties[P]);
+ return O;
+};
+
+
+/***/ }),
+/* 51 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// fallback for non-array-like ES3 and non-enumerable old V8 strings
+var cof = __webpack_require__(35);
+// eslint-disable-next-line no-prototype-builtins
+module.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {
+ return cof(it) == 'String' ? it.split('') : Object(it);
+};
+
+
+/***/ }),
+/* 52 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// false -> Array#indexOf
+// true -> Array#includes
+var toIObject = __webpack_require__(6);
+var toLength = __webpack_require__(53);
+var toAbsoluteIndex = __webpack_require__(54);
+module.exports = function (IS_INCLUDES) {
+ return function ($this, el, fromIndex) {
+ var O = toIObject($this);
+ var length = toLength(O.length);
+ var index = toAbsoluteIndex(fromIndex, length);
+ var value;
+ // Array#includes uses SameValueZero equality algorithm
+ // eslint-disable-next-line no-self-compare
+ if (IS_INCLUDES && el != el) while (length > index) {
+ value = O[index++];
+ // eslint-disable-next-line no-self-compare
+ if (value != value) return true;
+ // Array#indexOf ignores holes, Array#includes - not
+ } else for (;length > index; index++) if (IS_INCLUDES || index in O) {
+ if (O[index] === el) return IS_INCLUDES || index || 0;
+ } return !IS_INCLUDES && -1;
+ };
+};
+
+
+/***/ }),
+/* 53 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 7.1.15 ToLength
+var toInteger = __webpack_require__(14);
+var min = Math.min;
+module.exports = function (it) {
+ return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
+};
+
+
+/***/ }),
+/* 54 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var toInteger = __webpack_require__(14);
+var max = Math.max;
+var min = Math.min;
+module.exports = function (index, length) {
+ index = toInteger(index);
+ return index < 0 ? max(index + length, 0) : min(index, length);
+};
+
+
+/***/ }),
+/* 55 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var document = __webpack_require__(0).document;
+module.exports = document && document.documentElement;
+
+
+/***/ }),
+/* 56 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)
+var has = __webpack_require__(3);
+var toObject = __webpack_require__(57);
+var IE_PROTO = __webpack_require__(20)('IE_PROTO');
+var ObjectProto = Object.prototype;
+
+module.exports = Object.getPrototypeOf || function (O) {
+ O = toObject(O);
+ if (has(O, IE_PROTO)) return O[IE_PROTO];
+ if (typeof O.constructor == 'function' && O instanceof O.constructor) {
+ return O.constructor.prototype;
+ } return O instanceof Object ? ObjectProto : null;
+};
+
+
+/***/ }),
+/* 57 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 7.1.13 ToObject(argument)
+var defined = __webpack_require__(15);
+module.exports = function (it) {
+ return Object(defined(it));
+};
+
+
+/***/ }),
+/* 58 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(59);
+var global = __webpack_require__(0);
+var hide = __webpack_require__(5);
+var Iterators = __webpack_require__(18);
+var TO_STRING_TAG = __webpack_require__(7)('toStringTag');
+
+var DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +
+ 'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +
+ 'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +
+ 'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +
+ 'TextTrackList,TouchList').split(',');
+
+for (var i = 0; i < DOMIterables.length; i++) {
+ var NAME = DOMIterables[i];
+ var Collection = global[NAME];
+ var proto = Collection && Collection.prototype;
+ if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);
+ Iterators[NAME] = Iterators.Array;
+}
+
+
+/***/ }),
+/* 59 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var addToUnscopables = __webpack_require__(60);
+var step = __webpack_require__(61);
+var Iterators = __webpack_require__(18);
+var toIObject = __webpack_require__(6);
+
+// 22.1.3.4 Array.prototype.entries()
+// 22.1.3.13 Array.prototype.keys()
+// 22.1.3.29 Array.prototype.values()
+// 22.1.3.30 Array.prototype[@@iterator]()
+module.exports = __webpack_require__(29)(Array, 'Array', function (iterated, kind) {
+ this._t = toIObject(iterated); // target
+ this._i = 0; // next index
+ this._k = kind; // kind
+// 22.1.5.2.1 %ArrayIteratorPrototype%.next()
+}, function () {
+ var O = this._t;
+ var kind = this._k;
+ var index = this._i++;
+ if (!O || index >= O.length) {
+ this._t = undefined;
+ return step(1);
+ }
+ if (kind == 'keys') return step(0, index);
+ if (kind == 'values') return step(0, O[index]);
+ return step(0, [index, O[index]]);
+}, 'values');
+
+// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)
+Iterators.Arguments = Iterators.Array;
+
+addToUnscopables('keys');
+addToUnscopables('values');
+addToUnscopables('entries');
+
+
+/***/ }),
+/* 60 */
+/***/ (function(module, exports) {
+
+module.exports = function () { /* empty */ };
+
+
+/***/ }),
+/* 61 */
+/***/ (function(module, exports) {
+
+module.exports = function (done, value) {
+ return { value: value, done: !!done };
+};
+
+
+/***/ }),
+/* 62 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = { "default": __webpack_require__(63), __esModule: true };
+
+/***/ }),
+/* 63 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(64);
+__webpack_require__(70);
+__webpack_require__(71);
+__webpack_require__(72);
+module.exports = __webpack_require__(4).Symbol;
+
+
+/***/ }),
+/* 64 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+// ECMAScript 6 symbols shim
+var global = __webpack_require__(0);
+var has = __webpack_require__(3);
+var DESCRIPTORS = __webpack_require__(2);
+var $export = __webpack_require__(16);
+var redefine = __webpack_require__(32);
+var META = __webpack_require__(65).KEY;
+var $fails = __webpack_require__(11);
+var shared = __webpack_require__(21);
+var setToStringTag = __webpack_require__(23);
+var uid = __webpack_require__(13);
+var wks = __webpack_require__(7);
+var wksExt = __webpack_require__(24);
+var wksDefine = __webpack_require__(25);
+var enumKeys = __webpack_require__(66);
+var isArray = __webpack_require__(67);
+var anObject = __webpack_require__(10);
+var isObject = __webpack_require__(8);
+var toIObject = __webpack_require__(6);
+var toPrimitive = __webpack_require__(17);
+var createDesc = __webpack_require__(12);
+var _create = __webpack_require__(33);
+var gOPNExt = __webpack_require__(68);
+var $GOPD = __webpack_require__(69);
+var $DP = __webpack_require__(1);
+var $keys = __webpack_require__(19);
+var gOPD = $GOPD.f;
+var dP = $DP.f;
+var gOPN = gOPNExt.f;
+var $Symbol = global.Symbol;
+var $JSON = global.JSON;
+var _stringify = $JSON && $JSON.stringify;
+var PROTOTYPE = 'prototype';
+var HIDDEN = wks('_hidden');
+var TO_PRIMITIVE = wks('toPrimitive');
+var isEnum = {}.propertyIsEnumerable;
+var SymbolRegistry = shared('symbol-registry');
+var AllSymbols = shared('symbols');
+var OPSymbols = shared('op-symbols');
+var ObjectProto = Object[PROTOTYPE];
+var USE_NATIVE = typeof $Symbol == 'function';
+var QObject = global.QObject;
+// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173
+var setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;
+
+// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687
+var setSymbolDesc = DESCRIPTORS && $fails(function () {
+ return _create(dP({}, 'a', {
+ get: function () { return dP(this, 'a', { value: 7 }).a; }
+ })).a != 7;
+}) ? function (it, key, D) {
+ var protoDesc = gOPD(ObjectProto, key);
+ if (protoDesc) delete ObjectProto[key];
+ dP(it, key, D);
+ if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);
+} : dP;
+
+var wrap = function (tag) {
+ var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);
+ sym._k = tag;
+ return sym;
+};
+
+var isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {
+ return typeof it == 'symbol';
+} : function (it) {
+ return it instanceof $Symbol;
+};
+
+var $defineProperty = function defineProperty(it, key, D) {
+ if (it === ObjectProto) $defineProperty(OPSymbols, key, D);
+ anObject(it);
+ key = toPrimitive(key, true);
+ anObject(D);
+ if (has(AllSymbols, key)) {
+ if (!D.enumerable) {
+ if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));
+ it[HIDDEN][key] = true;
+ } else {
+ if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;
+ D = _create(D, { enumerable: createDesc(0, false) });
+ } return setSymbolDesc(it, key, D);
+ } return dP(it, key, D);
+};
+var $defineProperties = function defineProperties(it, P) {
+ anObject(it);
+ var keys = enumKeys(P = toIObject(P));
+ var i = 0;
+ var l = keys.length;
+ var key;
+ while (l > i) $defineProperty(it, key = keys[i++], P[key]);
+ return it;
+};
+var $create = function create(it, P) {
+ return P === undefined ? _create(it) : $defineProperties(_create(it), P);
+};
+var $propertyIsEnumerable = function propertyIsEnumerable(key) {
+ var E = isEnum.call(this, key = toPrimitive(key, true));
+ if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;
+ return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;
+};
+var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {
+ it = toIObject(it);
+ key = toPrimitive(key, true);
+ if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;
+ var D = gOPD(it, key);
+ if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;
+ return D;
+};
+var $getOwnPropertyNames = function getOwnPropertyNames(it) {
+ var names = gOPN(toIObject(it));
+ var result = [];
+ var i = 0;
+ var key;
+ while (names.length > i) {
+ if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);
+ } return result;
+};
+var $getOwnPropertySymbols = function getOwnPropertySymbols(it) {
+ var IS_OP = it === ObjectProto;
+ var names = gOPN(IS_OP ? OPSymbols : toIObject(it));
+ var result = [];
+ var i = 0;
+ var key;
+ while (names.length > i) {
+ if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);
+ } return result;
+};
+
+// 19.4.1.1 Symbol([description])
+if (!USE_NATIVE) {
+ $Symbol = function Symbol() {
+ if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');
+ var tag = uid(arguments.length > 0 ? arguments[0] : undefined);
+ var $set = function (value) {
+ if (this === ObjectProto) $set.call(OPSymbols, value);
+ if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;
+ setSymbolDesc(this, tag, createDesc(1, value));
+ };
+ if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });
+ return wrap(tag);
+ };
+ redefine($Symbol[PROTOTYPE], 'toString', function toString() {
+ return this._k;
+ });
+
+ $GOPD.f = $getOwnPropertyDescriptor;
+ $DP.f = $defineProperty;
+ __webpack_require__(37).f = gOPNExt.f = $getOwnPropertyNames;
+ __webpack_require__(26).f = $propertyIsEnumerable;
+ __webpack_require__(36).f = $getOwnPropertySymbols;
+
+ if (DESCRIPTORS && !__webpack_require__(9)) {
+ redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);
+ }
+
+ wksExt.f = function (name) {
+ return wrap(wks(name));
+ };
+}
+
+$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });
+
+for (var es6Symbols = (
+ // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14
+ 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'
+).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);
+
+for (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);
+
+$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {
+ // 19.4.2.1 Symbol.for(key)
+ 'for': function (key) {
+ return has(SymbolRegistry, key += '')
+ ? SymbolRegistry[key]
+ : SymbolRegistry[key] = $Symbol(key);
+ },
+ // 19.4.2.5 Symbol.keyFor(sym)
+ keyFor: function keyFor(sym) {
+ if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');
+ for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;
+ },
+ useSetter: function () { setter = true; },
+ useSimple: function () { setter = false; }
+});
+
+$export($export.S + $export.F * !USE_NATIVE, 'Object', {
+ // 19.1.2.2 Object.create(O [, Properties])
+ create: $create,
+ // 19.1.2.4 Object.defineProperty(O, P, Attributes)
+ defineProperty: $defineProperty,
+ // 19.1.2.3 Object.defineProperties(O, Properties)
+ defineProperties: $defineProperties,
+ // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)
+ getOwnPropertyDescriptor: $getOwnPropertyDescriptor,
+ // 19.1.2.7 Object.getOwnPropertyNames(O)
+ getOwnPropertyNames: $getOwnPropertyNames,
+ // 19.1.2.8 Object.getOwnPropertySymbols(O)
+ getOwnPropertySymbols: $getOwnPropertySymbols
+});
+
+// 24.3.2 JSON.stringify(value [, replacer [, space]])
+$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {
+ var S = $Symbol();
+ // MS Edge converts symbol values to JSON as {}
+ // WebKit converts symbol values to JSON as null
+ // V8 throws on boxed symbols
+ return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';
+})), 'JSON', {
+ stringify: function stringify(it) {
+ var args = [it];
+ var i = 1;
+ var replacer, $replacer;
+ while (arguments.length > i) args.push(arguments[i++]);
+ $replacer = replacer = args[1];
+ if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined
+ if (!isArray(replacer)) replacer = function (key, value) {
+ if (typeof $replacer == 'function') value = $replacer.call(this, key, value);
+ if (!isSymbol(value)) return value;
+ };
+ args[1] = replacer;
+ return _stringify.apply($JSON, args);
+ }
+});
+
+// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)
+$Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(5)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);
+// 19.4.3.5 Symbol.prototype[@@toStringTag]
+setToStringTag($Symbol, 'Symbol');
+// 20.2.1.9 Math[@@toStringTag]
+setToStringTag(Math, 'Math', true);
+// 24.3.3 JSON[@@toStringTag]
+setToStringTag(global.JSON, 'JSON', true);
+
+
+/***/ }),
+/* 65 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var META = __webpack_require__(13)('meta');
+var isObject = __webpack_require__(8);
+var has = __webpack_require__(3);
+var setDesc = __webpack_require__(1).f;
+var id = 0;
+var isExtensible = Object.isExtensible || function () {
+ return true;
+};
+var FREEZE = !__webpack_require__(11)(function () {
+ return isExtensible(Object.preventExtensions({}));
+});
+var setMeta = function (it) {
+ setDesc(it, META, { value: {
+ i: 'O' + ++id, // object ID
+ w: {} // weak collections IDs
+ } });
+};
+var fastKey = function (it, create) {
+ // return primitive with prefix
+ if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;
+ if (!has(it, META)) {
+ // can't set metadata to uncaught frozen object
+ if (!isExtensible(it)) return 'F';
+ // not necessary to add metadata
+ if (!create) return 'E';
+ // add missing metadata
+ setMeta(it);
+ // return object ID
+ } return it[META].i;
+};
+var getWeak = function (it, create) {
+ if (!has(it, META)) {
+ // can't set metadata to uncaught frozen object
+ if (!isExtensible(it)) return true;
+ // not necessary to add metadata
+ if (!create) return false;
+ // add missing metadata
+ setMeta(it);
+ // return hash weak collections IDs
+ } return it[META].w;
+};
+// add metadata on freeze-family methods calling
+var onFreeze = function (it) {
+ if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);
+ return it;
+};
+var meta = module.exports = {
+ KEY: META,
+ NEED: false,
+ fastKey: fastKey,
+ getWeak: getWeak,
+ onFreeze: onFreeze
+};
+
+
+/***/ }),
+/* 66 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// all enumerable object keys, includes symbols
+var getKeys = __webpack_require__(19);
+var gOPS = __webpack_require__(36);
+var pIE = __webpack_require__(26);
+module.exports = function (it) {
+ var result = getKeys(it);
+ var getSymbols = gOPS.f;
+ if (getSymbols) {
+ var symbols = getSymbols(it);
+ var isEnum = pIE.f;
+ var i = 0;
+ var key;
+ while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);
+ } return result;
+};
+
+
+/***/ }),
+/* 67 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 7.2.2 IsArray(argument)
+var cof = __webpack_require__(35);
+module.exports = Array.isArray || function isArray(arg) {
+ return cof(arg) == 'Array';
+};
+
+
+/***/ }),
+/* 68 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
+var toIObject = __webpack_require__(6);
+var gOPN = __webpack_require__(37).f;
+var toString = {}.toString;
+
+var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames
+ ? Object.getOwnPropertyNames(window) : [];
+
+var getWindowNames = function (it) {
+ try {
+ return gOPN(it);
+ } catch (e) {
+ return windowNames.slice();
+ }
+};
+
+module.exports.f = function getOwnPropertyNames(it) {
+ return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));
+};
+
+
+/***/ }),
+/* 69 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var pIE = __webpack_require__(26);
+var createDesc = __webpack_require__(12);
+var toIObject = __webpack_require__(6);
+var toPrimitive = __webpack_require__(17);
+var has = __webpack_require__(3);
+var IE8_DOM_DEFINE = __webpack_require__(30);
+var gOPD = Object.getOwnPropertyDescriptor;
+
+exports.f = __webpack_require__(2) ? gOPD : function getOwnPropertyDescriptor(O, P) {
+ O = toIObject(O);
+ P = toPrimitive(P, true);
+ if (IE8_DOM_DEFINE) try {
+ return gOPD(O, P);
+ } catch (e) { /* empty */ }
+ if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);
+};
+
+
+/***/ }),
+/* 70 */
+/***/ (function(module, exports) {
+
+
+
+/***/ }),
+/* 71 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(25)('asyncIterator');
+
+
+/***/ }),
+/* 72 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(25)('observable');
+
+
+/***/ }),
+/* 73 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var __vue_exports__, __vue_options__
+var __vue_styles__ = []
+
+/* styles */
+__vue_styles__.push(__webpack_require__(74)
+)
+
+/* script */
+__vue_exports__ = __webpack_require__(75)
+
+/* template */
+var __vue_template__ = __webpack_require__(86)
+__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+if (
+ typeof __vue_exports__.default === "object" ||
+ typeof __vue_exports__.default === "function"
+) {
+if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+__vue_options__ = __vue_exports__ = __vue_exports__.default
+}
+if (typeof __vue_options__ === "function") {
+ __vue_options__ = __vue_options__.options
+}
+__vue_options__.__file = "/Users/kw/github/weex-vue-examples/src/pages/about/About.vue"
+__vue_options__.render = __vue_template__.render
+__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+__vue_options__._scopeId = "data-v-13681c5e"
+__vue_options__.style = __vue_options__.style || {}
+__vue_styles__.forEach(function (module) {
+ for (var name in module) {
+ __vue_options__.style[name] = module[name]
+ }
+})
+if (typeof __register_static_styles__ === "function") {
+ __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+}
+
+module.exports = __vue_exports__
+
+
+/***/ }),
+/* 74 */
+/***/ (function(module, exports) {
+
+module.exports = {
+ "list": {
+ "backgroundColor": "#F5F5F5"
+ },
+ "item": {
+ "paddingTop": "30",
+ "paddingBottom": "30",
+ "paddingLeft": "60",
+ "paddingRight": "40",
+ "borderBottomWidth": "1",
+ "borderBottomStyle": "solid",
+ "borderBottomColor": "#E6E6E6",
+ "backgroundColor": "#FFFFFF",
+ "flexDirection": "row",
+ "justifyContent": "space-between",
+ "alignItems": "center"
+ },
+ "item-1": {
+ "borderTopWidth": "1",
+ "borderTopStyle": "solid",
+ "borderTopColor": "#E6E6E6"
+ },
+ "item-title": {
+ "fontSize": "42",
+ "color": "#606060"
+ },
+ "item-value": {
+ "fontSize": "36",
+ "color": "#999999"
+ },
+ "arrow-icon": {
+ "width": "22",
+ "height": "36"
+ },
+ "copyright": {
+ "marginTop": "50",
+ "paddingBottom": "20"
+ },
+ "copyright-text": {
+ "fontSize": "22",
+ "color": "#A0A0A0",
+ "textAlign": "center"
+ }
+}
+
+/***/ }),
+/* 75 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _utils = __webpack_require__(27);
+
+var utils = _interopRequireWildcard(_utils);
+
+var _mock = __webpack_require__(76);
+
+var _AppInfoCard = __webpack_require__(82);
+
+var _AppInfoCard2 = _interopRequireDefault(_AppInfoCard);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+var picker = weex.requireModule('picker'); //
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+var channel = new BroadcastChannel('language');
+exports.default = {
+ components: { AppInfoCard: _AppInfoCard2.default },
+ data: function data() {
+ return {
+ language: 'en',
+ followSystemLanguage: true,
+ navigationBarOptions: {
+ title: {
+ zh: '关于 Weex',
+ en: 'About Weex'
+ }
+ },
+ dict: {
+ FOLLOW_SYSTEM: { en: 'Follow System', zh: '跟随系统' },
+ LANGUAGE: { en: 'Language', zh: '语言' }
+ },
+ aboutApp: _mock.aboutApp
+ };
+ },
+
+ watch: {
+ language: function language() {
+ channel.postMessage({ language: this.language });
+ }
+ },
+ computed: {
+ languageName: function languageName() {
+ if (this.followSystemLanguage) {
+ return this.i18n(this.dict.FOLLOW_SYSTEM);
+ }
+ return this.i18n({ en: 'English', zh: '简体中文' });
+ }
+ },
+ created: function created() {
+ var _this = this;
+
+ utils.readAbout(function (about) {
+ _this.aboutApp = about;
+ });
+ utils.getStorageLanguage(function (lang) {
+ return _this.followSystemLanguage = false;
+ }, function () {
+ return _this.followSystemLanguage = true;
+ });
+ },
+
+ methods: {
+ chooseLanguage: function chooseLanguage() {
+ var _this2 = this;
+
+ var options = ['', 'en', 'zh'];
+ var index = this.followSystemLanguage ? 0 : options.indexOf(this.language);
+ picker.pick({
+ index: index,
+ items: [this.i18n(this.dict.FOLLOW_SYSTEM), 'English', '中文']
+ }, function (_ref) {
+ var result = _ref.result,
+ data = _ref.data;
+
+ if (result === 'success') {
+ var select = options[data];
+ if (select) {
+ _this2.followSystemLanguage = false;
+ _this2.language = select;
+ utils.setLanguage(select);
+ } else {
+ _this2.followSystemLanguage = true;
+ utils.clearStorageLanguage();
+ utils.getSystemLanguage(function (lang) {
+ _this2.language = lang;
+ }, function (error) {
+ _this2.language = 'en';
+ });
+ }
+ }
+ });
+ }
+ }
+};
+
+/***/ }),
+/* 76 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.aboutApp = exports.guideLessons = undefined;
+
+var _sliders = __webpack_require__(77);
+
+var _sliders2 = _interopRequireDefault(_sliders);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var guideLessons = exports.guideLessons = _sliders2.default;
+
+var aboutApp = exports.aboutApp = [{
+ title: { en: 'Weex Official Website', zh: 'Weex 官方网站' },
+ link: {
+ en: 'http://weex-project.io/',
+ zh: 'http://weex-project.io/cn/'
+ }
+}, {
+ title: { en: 'Apache Software Foundation', zh: 'Apache 软件基金会' },
+ link: 'http://www.apache.org/'
+}, {
+ title: { en: 'Who is using Weex', zh: '谁在使用 Weex' },
+ link: {
+ en: 'http://weex-project.io/who-is-using-weex.html',
+ zh: 'http://weex-project.io/cn/who-is-using-weex.html'
+ }
+}, {
+ title: { en: 'Contribution', zh: '参与贡献' },
+ link: {
+ en: 'http://weex-project.io/guide/contributing.html',
+ zh: 'http://weex-project.io/cn/guide/contributing.html'
+ }
+}, {
+ title: { en: 'Release Note', zh: '版本变更' },
+ link: {
+ en: 'http://weex-project.io/releasenote.html',
+ zh: 'http://weex-project.io/cn/releasenote.html'
+ }
+}, {
+ title: { en: 'FAQ', zh: '常见问题' },
+ link: {
+ en: 'http://weex-project.io/faq.html',
+ zh: 'http://weex-project.io/cn/faq.html'
+ }
+}];
+
+/***/ }),
+/* 77 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _defineProperty2 = __webpack_require__(78);
+
+var _defineProperty3 = _interopRequireDefault(_defineProperty2);
+
+var _ref, _ref2, _ref3;
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+exports.default = [{
+ subject: 'weex',
+ mainColor: '#00B4FF',
+ title: { zh: '学习 Weex', en: 'Learn Weex' },
+ poster: 'https://gw.alicdn.com/tfs/TB1.8Vdl9_I8KJjy0FoXXaFnVXa-3799-1615.png',
+ posterBg: '#E5F7FF',
+ posterStyle: {
+ width: '650px',
+ height: '304px'
+ },
+ copyright: {
+ zh: '来自 http://weex-project.io/cn/',
+ en: 'From http://weex-project.io/'
+ },
+ lessons: [{
+ title: {
+ zh: '快速入门',
+ en: 'Getting Started'
+ },
+ docLink: {
+ zh: 'http://weex-project.io/cn/guide/index.html',
+ en: 'http://weex-project.io/guide/index.html'
+ }
+ }, {
+ title: {
+ zh: '工作原理',
+ en: 'How it Works'
+ },
+ docLink: {
+ zh: 'http://weex-project.io/cn/wiki/index.html',
+ en: 'http://weex-project.io/wiki/index.html'
+ }
+ }, {
+ title: {
+ zh: 'Weex 中的前端框架',
+ en: 'Front-end Frameworks'
+ },
+ docLink: {
+ zh: 'http://weex-project.io/cn/guide/front-end-frameworks.html',
+ en: 'http://weex-project.io/guide/front-end-frameworks.html'
+ }
+ }, {
+ title: {
+ zh: '在 Weex 中使用 Vue.js',
+ en: 'Use Vue.js on Weex'
+ },
+ docLink: {
+ zh: 'http://weex-project.io/cn/guide/use-vue.html',
+ en: 'http://weex-project.io/guide/use-vue.html'
+ }
+ }, {
+ title: {
+ zh: '与 Web 平台的差异',
+ en: 'Platform difference with Web'
+ },
+ docLink: {
+ zh: 'http://weex-project.io/cn/wiki/platform-difference.html',
+ en: 'http://weex-project.io/wiki/platform-difference.html'
+ }
+ }, {
+ title: {
+ zh: '集成 Weex 到已有应用',
+ en: 'Integrate to Your App'
+ },
+ docLink: {
+ zh: 'http://weex-project.io/cn/guide/integrate-to-your-app.html',
+ en: 'http://weex-project.io/guide/integrate-to-your-app.html'
+ }
+ }, {
+ title: {
+ zh: '搭建开发环境',
+ en: 'Set Up Dev Environment'
+ },
+ docLink: {
+ zh: 'http://weex-project.io/cn/guide/set-up-env.html',
+ en: 'http://weex-project.io/guide/set-up-env.html'
+ }
+ }, {
+ title: {
+ zh: '通用样式',
+ en: 'Common Styles'
+ },
+ docLink: {
+ zh: 'http://weex-project.io/cn/wiki/common-styles.html',
+ en: 'http://weex-project.io/wiki/common-styles.html'
+ }
+ }, {
+ title: {
+ zh: '通用事件',
+ en: 'Common Events'
+ },
+ docLink: {
+ zh: 'http://weex-project.io/cn/wiki/common-events.html',
+ en: 'http://weex-project.io/wiki/common-events.html'
+ }
+ }, {
+ title: {
+ zh: 'Weex 实例变量',
+ en: 'The "weex" Variable'
+ },
+ docLink: {
+ zh: 'http://weex-project.io/cn/references/weex-variable.html',
+ en: 'http://weex-project.io/references/weex-variable.html'
+ }
+ }, {
+ title: {
+ zh: '内置组件',
+ en: 'Built-in Components'
+ },
+ docLink: {
+ zh: 'http://weex-project.io/cn/references/components/index.html',
+ en: 'http://weex-project.io/references/components/index.html'
+ }
+ }, {
+ title: {
+ zh: '内置模块',
+ en: 'Built-in Modules'
+ },
+ docLink: {
+ zh: 'http://weex-project.io/cn/references/modules/index.html',
+ en: 'http://weex-project.io/references/modules/index.html'
+ }
+ }, {
+ title: {
+ zh: '扩展 Android 组件/模块',
+ en: 'Extend Android'
+ },
+ docLink: {
+ zh: 'http://weex-project.io/cn/guide/extend-android.html',
+ en: 'http://weex-project.io/guide/extend-android.html'
+ }
+ }, {
+ title: {
+ zh: '扩展 iOS 组件/模块',
+ en: 'Extend iOS'
+ },
+ docLink: {
+ zh: 'http://weex-project.io/cn/guide/extend-ios.html',
+ en: 'http://weex-project.io/guide/extend-ios.html'
+ }
+ }, {
+ title: {
+ zh: '使用 weex-toolkit',
+ en: 'Use weex-toolkit'
+ },
+ docLink: {
+ zh: 'http://weex-project.io/cn/tools/toolkit.html',
+ en: 'http://weex-project.io/tools/toolkit.html'
+ }
+ }, {
+ title: {
+ zh: '如何参与贡献',
+ en: 'How to Contribute'
+ },
+ docLink: {
+ zh: 'http://weex-project.io/cn/contributing.html',
+ en: 'http://weex-project.io/contributing.html'
+ }
+ }]
+}, (_ref = {
+ subject: 'vue',
+ mainColor: '#42b983',
+ title: { zh: '学习 Vue.js', en: 'Learn Vue.js' },
+ poster: 'https://gw.alicdn.com/tfs/TB1J_uKcMMPMeJjy1XdXXasrXXa-400-400.png',
+ posterBg: '#E7FBF2',
+ posterStyle: {
+ width: '300px',
+ height: '300px'
+ }
+}, (0, _defineProperty3.default)(_ref, 'title', {
+ zh: '学习 Vue.js',
+ en: 'Learn Vue.js'
+}), (0, _defineProperty3.default)(_ref, 'copyright', {
+ zh: '来自 https://cn.vuejs.org/',
+ en: 'From https://vuejs.org/'
+}), (0, _defineProperty3.default)(_ref, 'lessons', [{
+ title: {
+ zh: 'Vue.js 是什么?',
+ en: 'What is Vue.js ?'
+ },
+ docLink: {
+ zh: 'https://cn.vuejs.org/v2/guide/index.html',
+ en: 'https://vuejs.org/v2/guide/index.html'
+ }
+}, {
+ title: {
+ zh: '单文件组件',
+ en: 'Single File Components'
+ },
+ docLink: {
+ zh: 'https://cn.vuejs.org/v2/guide/single-file-components.html',
+ en: 'https://vuejs.org/v2/guide/single-file-components.html'
+ }
+}, {
+ title: {
+ zh: '模板语法',
+ en: 'Template Syntax'
+ },
+ docLink: {
+ zh: 'https://cn.vuejs.org/v2/guide/syntax.html',
+ en: 'https://vuejs.org/v2/guide/syntax.html'
+ }
+}, {
+ title: {
+ zh: 'Class 与 Style 绑定',
+ en: 'Class and Style Bindings'
+ },
+ docLink: {
+ zh: 'https://cn.vuejs.org/v2/guide/class-and-style.html',
+ en: 'https://vuejs.org/v2/guide/class-and-style.html'
+ }
+}, {
+ title: {
+ zh: '条件渲染',
+ en: 'Conditional Rendering'
+ },
+ docLink: {
+ zh: 'https://cn.vuejs.org/v2/guide/conditional.html',
+ en: 'https://vuejs.org/v2/guide/conditional.html'
+ }
+}, {
+ title: {
+ zh: '列表渲染',
+ en: 'List Rendering'
+ },
+ docLink: {
+ zh: 'https://cn.vuejs.org/v2/guide/list.html',
+ en: 'https://vuejs.org/v2/guide/list.html'
+ }
+}, {
+ title: {
+ zh: '事件处理',
+ en: 'Event Handling'
+ },
+ docLink: {
+ zh: 'https://cn.vuejs.org/v2/guide/events.html',
+ en: 'https://vuejs.org/v2/guide/events.html'
+ }
+}, {
+ title: {
+ zh: '表单输入绑定',
+ en: 'Form Input Bindings'
+ },
+ docLink: {
+ zh: 'https://cn.vuejs.org/v2/guide/forms.html',
+ en: 'https://vuejs.org/v2/guide/forms.html'
+ }
+}, {
+ title: {
+ zh: 'Vue 实例',
+ en: 'The Vue Instance'
+ },
+ docLink: {
+ zh: 'https://cn.vuejs.org/v2/guide/instance.html',
+ en: 'https://vuejs.org/v2/guide/instance.html'
+ }
+}, {
+ title: {
+ zh: '在 Weex 中使用 Vue.js',
+ en: 'Use Vue.js on Weex'
+ },
+ docLink: {
+ zh: 'http://weex-project.io/cn/guide/use-vue.html',
+ en: 'http://weex-project.io/guide/use-vue.html'
+ }
+}, {
+ title: {
+ zh: '混合(mixins)',
+ en: 'Mixins'
+ },
+ docLink: {
+ zh: 'https://cn.vuejs.org/v2/guide/mixins.html',
+ en: 'https://vuejs.org/v2/guide/mixins.html'
+ }
+}, {
+ title: {
+ zh: '过滤器(filters)',
+ en: 'Filters'
+ },
+ docLink: {
+ zh: 'https://cn.vuejs.org/v2/guide/filters.html',
+ en: 'https://vuejs.org/v2/guide/filters.html'
+ }
+}, {
+ title: {
+ zh: '插件(plugins)',
+ en: 'Plugins'
+ },
+ docLink: {
+ zh: 'https://cn.vuejs.org/v2/guide/plugins.html',
+ en: 'https://vuejs.org/v2/guide/plugins.html'
+ }
+}, {
+ title: {
+ zh: '自定义指令',
+ en: 'Custom Directives'
+ },
+ docLink: {
+ zh: 'https://cn.vuejs.org/v2/guide/custom-directive.html',
+ en: 'https://vuejs.org/v2/guide/custom-directive.html'
+ }
+}, {
+ title: {
+ zh: '状态管理',
+ en: 'State Management'
+ },
+ docLink: {
+ zh: 'https://cn.vuejs.org/v2/guide/state-management.html',
+ en: 'https://vuejs.org/v2/guide/state-management.html'
+ }
+}, {
+ title: {
+ zh: '深入响应式原理',
+ en: 'Reactivity in Depth'
+ },
+ docLink: {
+ zh: 'https://cn.vuejs.org/v2/guide/reactivity.html',
+ en: 'https://vuejs.org/v2/guide/reactivity.html'
+ }
+}, {
+ title: {
+ zh: '渲染函数',
+ en: 'Render Functions'
+ },
+ docLink: {
+ zh: 'https://cn.vuejs.org/v2/guide/render-function.html',
+ en: 'https://vuejs.org/v2/guide/render-function.html'
+ }
+}, {
+ title: {
+ zh: 'TypeScript 支持',
+ en: 'TypeScript Support'
+ },
+ docLink: {
+ zh: 'https://cn.vuejs.org/v2/guide/typescript.html',
+ en: 'https://vuejs.org/v2/guide/typescript.html'
+ }
+}, {
+ title: 'API',
+ docLink: {
+ zh: 'https://cn.vuejs.org/v2/api/',
+ en: 'https://vuejs.org/v2/api/'
+ }
+}]), _ref), (_ref2 = {
+ subject: 'javascript',
+ mainColor: '#F7BD2A',
+ title: { zh: '学习 Javascript', en: 'Learn Javascript' },
+ poster: 'https://gw.alicdn.com/tfs/TB1bT98hMoQMeJjy0FpXXcTxpXa-1500-700.png',
+ posterBg: '#FAF3EB',
+ posterStyle: {
+ width: '750px',
+ height: '350px'
+ }
+}, (0, _defineProperty3.default)(_ref2, 'title', {
+ zh: '学习 Javascript',
+ en: 'Learn Javascript'
+}), (0, _defineProperty3.default)(_ref2, 'copyright', {
+ zh: '来自 MDN (Mozilla Developer Network)',
+ en: 'From MDN (Mozilla Developer Network)'
+}), (0, _defineProperty3.default)(_ref2, 'lessons', [{
+ title: {
+ zh: '什么是 Javascript ?',
+ en: 'What is Javascript ?'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/First_steps/What_is_JavaScript',
+ en: 'https://developer.mozilla.org/en-US/docs/Learn/JavaScript/First_steps/What_is_JavaScript'
+ }
+}, {
+ title: {
+ zh: 'JavaScript基础',
+ en: 'JavaScript basics'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/Getting_started_with_the_web/JavaScript_basics',
+ en: 'https://developer.mozilla.org/en-US/docs/Learn/Getting_started_with_the_web/JavaScript_basics'
+ }
+}, {
+ title: {
+ zh: '重新介绍 JavaScript',
+ en: 'A re-introduction to JavaScript'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/A_re-introduction_to_JavaScript',
+ en: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript'
+ }
+}, {
+ title: {
+ zh: '语法和数据类型',
+ en: 'Grammar and types'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Grammar_and_types#Variable_scope',
+ en: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Grammar_and_types#Variable_scope'
+ }
+}, {
+ title: {
+ zh: '数据类型和数据结构',
+ en: 'Data types and data structures'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Data_structures',
+ en: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures'
+ }
+}, {
+ title: {
+ zh: '变量',
+ en: 'Variables'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/First_steps/Variables',
+ en: 'https://developer.mozilla.org/en-US/docs/Learn/JavaScript/First_steps/Variables'
+ }
+}, {
+ title: {
+ zh: '数字和操作符',
+ en: 'Numbers and operators'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/First_steps/Math',
+ en: 'https://developer.mozilla.org/en-US/docs/Learn/JavaScript/First_steps/Math'
+ }
+}, {
+ title: {
+ zh: '字符串',
+ en: 'Handling text'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/First_steps/Strings',
+ en: 'https://developer.mozilla.org/en-US/docs/Learn/JavaScript/First_steps/Strings'
+ }
+}, {
+ title: {
+ zh: '常用的 String 方法',
+ en: 'Useful string methods'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/First_steps/Useful_string_methods',
+ en: 'https://developer.mozilla.org/en-US/docs/Learn/JavaScript/First_steps/Useful_string_methods'
+ }
+}, {
+ title: {
+ zh: '数组',
+ en: 'Arrays'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/First_steps/Arrays',
+ en: 'https://developer.mozilla.org/en-US/docs/Learn/JavaScript/First_steps/Arrays'
+ }
+}, {
+ title: {
+ zh: '函数',
+ en: 'Functions'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Functions',
+ en: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Functions'
+ }
+}, {
+ title: {
+ zh: 'JavaScript 对象基础',
+ en: 'JavaScript object basics'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/Objects/Basics',
+ en: 'https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/Basics'
+ }
+}, {
+ title: {
+ zh: '使用对象',
+ en: 'Working with objects'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Working_with_Objects',
+ en: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects'
+ }
+}, {
+ title: {
+ zh: '使用 JSON 数据',
+ en: 'Working with JSON'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/Objects/JSON',
+ en: 'https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/JSON'
+ }
+}, {
+ title: {
+ zh: '对象模型的细节',
+ en: 'Details of the object model'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Details_of_the_Object_Model',
+ en: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Details_of_the_Object_Model'
+ }
+}, {
+ title: {
+ zh: '对象原型',
+ en: 'Object prototypes'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/Object_prototypes',
+ en: 'https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/Objects/Object_prototypes'
+ }
+}, {
+ title: {
+ zh: 'JavaScript 中的继承',
+ en: 'Inheritance in JavaScript'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/Objects/Inheritance',
+ en: 'https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/Inheritance'
+ }
+}, {
+ title: {
+ zh: '继承与原型链',
+ en: 'Inheritance and the prototype chain'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Inheritance_and_the_prototype_chain',
+ en: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain'
+ }
+}, {
+ title: {
+ zh: '严格模式',
+ en: 'Strict mode'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Strict_mode',
+ en: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode'
+ }
+}, {
+ title: {
+ zh: '内存管理',
+ en: 'Memory Management'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Memory_Management',
+ en: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management'
+ }
+}, {
+ title: {
+ zh: '并发模型与事件循环',
+ en: 'Concurrency model and Event Loop'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/EventLoop',
+ en: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop'
+ }
+}, {
+ // title: {
+ // zh: '索引集合类',
+ // en: 'Indexed collections'
+ // },
+ // docLink: {
+ // zh: 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Indexed_collections',
+ // en: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Indexed_collections'
+ // }
+ // }, {
+ // title: {
+ // zh: '带键的集合',
+ // en: 'Keyed collections'
+ // },
+ // docLink: {
+ // zh: 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Keyed_collections',
+ // en: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Keyed_collections'
+ // }
+ // }, {
+ title: {
+ zh: 'JavaScript 标准库',
+ en: 'Standard built-in objects'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects',
+ en: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects'
+ }
+}]), _ref2), (_ref3 = {
+ subject: 'css',
+ mainColor: '#F56FC6',
+ title: { zh: '学习 CSS', en: 'Learn CSS' },
+ titleColor: '#FFFFFF',
+ poster: 'https://gw.alicdn.com/tfs/TB1k6anhMMPMeJjy1XdXXasrXXa-427-190.jpg',
+ posterBg: '#FFA2DE',
+ posterStyle: {
+ width: '517px',
+ height: '230px'
+ }
+}, (0, _defineProperty3.default)(_ref3, 'title', {
+ zh: '学习 CSS',
+ en: 'Learn CSS'
+}), (0, _defineProperty3.default)(_ref3, 'copyright', {
+ zh: '来自 MDN (Mozilla Developer Network)',
+ en: 'From MDN (Mozilla Developer Network)'
+}), (0, _defineProperty3.default)(_ref3, 'lessons', [{
+ title: {
+ zh: '什么是 CSS ?',
+ en: 'What is CSS ?'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Web/Guide/CSS/Getting_started/What_is_CSS',
+ en: 'https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_started/What_is_CSS'
+ }
+}, {
+ title: {
+ zh: 'CSS 语法',
+ en: 'CSS Syntax'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/CSS/Introduction_to_CSS/Syntax',
+ en: 'https://developer.mozilla.org/en-US/docs/Learn/CSS/Introduction_to_CSS/Syntax'
+ }
+}, {
+ title: {
+ zh: 'CSS的值和单位',
+ en: 'CSS Values and Units'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/CSS/Introduction_to_CSS/Values_and_units',
+ en: 'https://developer.mozilla.org/en-US/docs/Learn/CSS/Introduction_to_CSS/Values_and_units'
+ }
+}, {
+ title: {
+ zh: '盒模型',
+ en: 'The Box Model'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/CSS/Introduction_to_CSS/Box_model',
+ en: 'https://developer.mozilla.org/en-US/docs/Learn/CSS/Introduction_to_CSS/Box_model'
+ }
+}, {
+ title: {
+ zh: '盒模型的属性',
+ en: 'Box Model Properties'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_Box_Model',
+ en: 'https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Box_Model'
+ }
+}, {
+ title: {
+ zh: '定位布局',
+ en: 'Positioning'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/CSS/CSS_layout/%E5%AE%9A%E4%BD%8Dx',
+ en: 'https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layout/positioning'
+ }
+}, {
+ title: {
+ zh: '定位布局的属性',
+ en: 'CSS Positioning'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_Positioning',
+ en: 'https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning'
+ }
+}, {
+ title: {
+ zh: 'Flexbox 布局',
+ en: 'Flexbox Layout'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/CSS/CSS_layout/Flexbox',
+ en: 'https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layout/Flexbox'
+ }
+}, {
+ title: {
+ zh: 'Flexbox 布局的属性',
+ en: 'CSS Flexible Box Layout'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_Flexible_Box_Layout',
+ en: 'https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flexible_Box_Layout'
+ }
+}, {
+ title: {
+ zh: 'Weex 中的通用样式',
+ en: 'Common Styles in Weex'
+ },
+ docLink: {
+ zh: 'http://weex-project.io/cn/references/common-style.html',
+ en: 'http://weex-project.io/references/common-style.html'
+ }
+}, {
+ title: {
+ zh: 'Weex 中的文本样式',
+ en: 'Text Styles in Weex'
+ },
+ docLink: {
+ zh: 'http://weex-project.io/cn/references/text-style.html',
+ en: 'http://weex-project.io/references/text-style.html'
+ }
+}, {
+ title: {
+ zh: '块格式化上下文(BFC)',
+ en: 'Block Formatting Context'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Web/Guide/CSS/Block_formatting_context',
+ en: 'https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Block_formatting_context'
+ }
+}, {
+ title: {
+ zh: '视觉格式化模型',
+ en: 'Visual Formatting Model'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Web/Guide/CSS/Visual_formatting_model',
+ en: 'https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Visual_formatting_model'
+ }
+}, {
+ title: 'CSS Reference',
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Web/CSS/Reference',
+ en: 'https://developer.mozilla.org/en-US/docs/Web/CSS/Reference'
+ }
+}]), _ref3)];
+
+/***/ }),
+/* 78 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+exports.__esModule = true;
+
+var _defineProperty = __webpack_require__(79);
+
+var _defineProperty2 = _interopRequireDefault(_defineProperty);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+exports.default = function (obj, key, value) {
+ if (key in obj) {
+ (0, _defineProperty2.default)(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+
+ return obj;
+};
+
+/***/ }),
+/* 79 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = { "default": __webpack_require__(80), __esModule: true };
+
+/***/ }),
+/* 80 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(81);
+var $Object = __webpack_require__(4).Object;
+module.exports = function defineProperty(it, key, desc) {
+ return $Object.defineProperty(it, key, desc);
+};
+
+
+/***/ }),
+/* 81 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var $export = __webpack_require__(16);
+// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)
+$export($export.S + $export.F * !__webpack_require__(2), 'Object', { defineProperty: __webpack_require__(1).f });
+
+
+/***/ }),
+/* 82 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var __vue_exports__, __vue_options__
+var __vue_styles__ = []
+
+/* styles */
+__vue_styles__.push(__webpack_require__(83)
+)
+
+/* script */
+__vue_exports__ = __webpack_require__(84)
+
+/* template */
+var __vue_template__ = __webpack_require__(85)
+__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+if (
+ typeof __vue_exports__.default === "object" ||
+ typeof __vue_exports__.default === "function"
+) {
+if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+__vue_options__ = __vue_exports__ = __vue_exports__.default
+}
+if (typeof __vue_options__ === "function") {
+ __vue_options__ = __vue_options__.options
+}
+__vue_options__.__file = "/Users/kw/github/weex-vue-examples/src/components/AppInfoCard.vue"
+__vue_options__.render = __vue_template__.render
+__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+__vue_options__._scopeId = "data-v-0ba305b6"
+__vue_options__.style = __vue_options__.style || {}
+__vue_styles__.forEach(function (module) {
+ for (var name in module) {
+ __vue_options__.style[name] = module[name]
+ }
+})
+if (typeof __register_static_styles__ === "function") {
+ __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+}
+
+module.exports = __vue_exports__
+
+
+/***/ }),
+/* 83 */
+/***/ (function(module, exports) {
+
+module.exports = {
+ "card": {
+ "width": "650",
+ "justifyContent": "center",
+ "borderWidth": "1",
+ "borderColor": "#DDDDDD",
+ "borderRadius": "20",
+ "paddingTop": "50",
+ "paddingRight": "50",
+ "paddingBottom": "50",
+ "paddingLeft": "50",
+ "marginTop": "50",
+ "marginRight": "50",
+ "marginBottom": "50",
+ "marginLeft": "50",
+ "backgroundColor": "#FFFFFF"
+ },
+ "title": {
+ "fontSize": "34",
+ "textAlign": "center",
+ "color": "#808080",
+ "marginBottom": "20"
+ },
+ "version": {
+ "fontSize": "80",
+ "textAlign": "center",
+ "marginBottom": "30",
+ "color": "#323232"
+ },
+ "group": {
+ "marginTop": "10",
+ "flexDirection": "row"
+ },
+ "label": {
+ "width": "260",
+ "fontSize": "32",
+ "textAlign": "right",
+ "color": "#888888"
+ },
+ "value": {
+ "width": "230",
+ "paddingLeft": "50",
+ "fontSize": "32",
+ "color": "#414141"
+ }
+}
+
+/***/ }),
+/* 84 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _typeof2 = __webpack_require__(28);
+
+var _typeof3 = _interopRequireDefault(_typeof2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+var invalid = '- invalid -';
+var unknown = '- - -';
+exports.default = {
+ data: function data() {
+ return {
+ version: invalid,
+ jsfmVersion: invalid,
+ platform: invalid,
+ osVersion: invalid,
+ deviceModel: invalid
+ };
+ },
+ created: function created() {
+ try {
+ this.jsfmVersion = getJSFMVersion();
+ } catch (e) {
+ this.jsfmVersion = '≤ 0.15.6';
+ }
+ if ((typeof WXEnvironment === 'undefined' ? 'undefined' : (0, _typeof3.default)(WXEnvironment)) === 'object') {
+ this.version = WXEnvironment.weexVersion || unknown;
+ this.platform = WXEnvironment.platform || unknown;
+ this.osVersion = WXEnvironment.osVersion || unknown;
+ this.deviceModel = WXEnvironment.deviceModel || unknown;
+ }
+ }
+};
+
+/***/ }),
+/* 85 */
+/***/ (function(module, exports) {
+
+module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+ return _c('div', {
+ staticClass: ["card"]
+ }, [_c('div', {
+ staticClass: ["info"]
+ }, [_c('text', {
+ staticClass: ["title"]
+ }, [_vm._v("Weex SDK Version")]), _c('text', {
+ staticClass: ["version"]
+ }, [_vm._v(_vm._s(_vm.version))]), _c('div', {
+ staticClass: ["group"]
+ }, [_c('text', {
+ staticClass: ["label"]
+ }, [_vm._v("JS Framework")]), _c('text', {
+ staticClass: ["value"]
+ }, [_vm._v(_vm._s(_vm.jsfmVersion))])]), _c('div', {
+ staticClass: ["group"]
+ }, [_c('text', {
+ staticClass: ["label"]
+ }, [_vm._v("platform")]), _c('text', {
+ staticClass: ["value"]
+ }, [_vm._v(_vm._s(_vm.platform))])]), _c('div', {
+ staticClass: ["group"]
+ }, [_c('text', {
+ staticClass: ["label"]
+ }, [_vm._v("osVersion")]), _c('text', {
+ staticClass: ["value"]
+ }, [_vm._v(_vm._s(_vm.osVersion))])]), _c('div', {
+ staticClass: ["group"]
+ }, [_c('text', {
+ staticClass: ["label"]
+ }, [_vm._v("deviceModel")]), _c('text', {
+ staticClass: ["value"]
+ }, [_vm._v(_vm._s(_vm.deviceModel))])])])])
+},staticRenderFns: []}
+module.exports.render._withStripped = true
+
+/***/ }),
+/* 86 */
+/***/ (function(module, exports) {
+
+module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+ return _c('list', {
+ staticClass: ["list"]
+ }, [_c('cell', {
+ appendAsTree: true,
+ attrs: {
+ "append": "tree"
+ }
+ }, [_c('app-info-card')], 1), _vm._l((_vm.aboutApp), function(item, i) {
+ return _c('cell', {
+ key: i,
+ class: ['item-cell', ("item-cell-" + (i+1))],
+ appendAsTree: true,
+ attrs: {
+ "append": "tree"
+ }
+ }, [(item.link) ? _c('div', {
+ class: ['item', ("item-" + (i+1))],
+ on: {
+ "click": function($event) {
+ _vm.jumpTo(item.link, _vm.i18n(item.title))
+ }
+ }
+ }, [_c('text', {
+ staticClass: ["item-title"]
+ }, [_vm._v(_vm._s(_vm.i18n(item.title)))]), _c('image', {
+ staticClass: ["arrow-icon"],
+ attrs: {
+ "src": "https://gw.alicdn.com/tfs/TB1iL2fkLDH8KJjy1XcXXcpdXXa-32-49.png"
+ }
+ })]) : _vm._e()])
+ }), _c('cell', {
+ staticClass: ["item-cell"],
+ appendAsTree: true,
+ attrs: {
+ "append": "tree"
+ }
+ }, [_c('div', {
+ staticClass: ["item"],
+ on: {
+ "click": _vm.chooseLanguage
+ }
+ }, [_c('text', {
+ staticClass: ["item-title"]
+ }, [_vm._v(_vm._s(_vm.i18n(_vm.dict.LANGUAGE)))]), _c('text', {
+ staticClass: ["item-value"]
+ }, [_vm._v(_vm._s(_vm.languageName))])])]), _vm._m(0)], 2)
+},staticRenderFns: [function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+ return _c('cell', {
+ appendAsTree: true,
+ attrs: {
+ "append": "tree"
+ }
+ }, [_c('div', {
+ staticClass: ["copyright"]
+ }, [_c('text', {
+ staticClass: ["copyright-text"]
+ }, [_vm._v("Copyright(c) 2017 The Apache Software Foundation.")]), _c('text', {
+ staticClass: ["copyright-text"]
+ }, [_vm._v("Licensed under the Apache License, Version 2.0")])])])
+}]}
+module.exports.render._withStripped = true
+
+/***/ })
+/******/ ]);
\ No newline at end of file
diff --git a/ios/bundlejs/examples.weex.js b/ios/bundlejs/examples.weex.js
new file mode 100644
index 0000000..68d81c8
--- /dev/null
+++ b/ios/bundlejs/examples.weex.js
@@ -0,0 +1,2598 @@
+// { "framework": "Vue" }
+"use weex:vue";
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ // The module cache
+/******/ var installedModules = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/
+/******/ // Check if module is in cache
+/******/ if(installedModules[moduleId]) {
+/******/ return installedModules[moduleId].exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = installedModules[moduleId] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = true;
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = modules;
+/******/
+/******/ // expose the module cache
+/******/ __webpack_require__.c = installedModules;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, {
+/******/ configurable: false,
+/******/ enumerable: true,
+/******/ get: getter
+/******/ });
+/******/ }
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = 37);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ (function(module, exports) {
+
+// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
+var global = module.exports = typeof window != 'undefined' && window.Math == Math
+ ? window : typeof self != 'undefined' && self.Math == Math ? self
+ // eslint-disable-next-line no-new-func
+ : Function('return this')();
+if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef
+
+
+/***/ }),
+/* 1 */
+/***/ (function(module, exports) {
+
+var hasOwnProperty = {}.hasOwnProperty;
+module.exports = function (it, key) {
+ return hasOwnProperty.call(it, key);
+};
+
+
+/***/ }),
+/* 2 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var dP = __webpack_require__(3);
+var createDesc = __webpack_require__(12);
+module.exports = __webpack_require__(4) ? function (object, key, value) {
+ return dP.f(object, key, createDesc(1, value));
+} : function (object, key, value) {
+ object[key] = value;
+ return object;
+};
+
+
+/***/ }),
+/* 3 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var anObject = __webpack_require__(10);
+var IE8_DOM_DEFINE = __webpack_require__(29);
+var toPrimitive = __webpack_require__(17);
+var dP = Object.defineProperty;
+
+exports.f = __webpack_require__(4) ? Object.defineProperty : function defineProperty(O, P, Attributes) {
+ anObject(O);
+ P = toPrimitive(P, true);
+ anObject(Attributes);
+ if (IE8_DOM_DEFINE) try {
+ return dP(O, P, Attributes);
+ } catch (e) { /* empty */ }
+ if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');
+ if ('value' in Attributes) O[P] = Attributes.value;
+ return O;
+};
+
+
+/***/ }),
+/* 4 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// Thank's IE8 for his funny defineProperty
+module.exports = !__webpack_require__(11)(function () {
+ return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;
+});
+
+
+/***/ }),
+/* 5 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// to indexed object, toObject with fallback for non-array-like ES3 strings
+var IObject = __webpack_require__(51);
+var defined = __webpack_require__(16);
+module.exports = function (it) {
+ return IObject(defined(it));
+};
+
+
+/***/ }),
+/* 6 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var store = __webpack_require__(21)('wks');
+var uid = __webpack_require__(13);
+var Symbol = __webpack_require__(0).Symbol;
+var USE_SYMBOL = typeof Symbol == 'function';
+
+var $exports = module.exports = function (name) {
+ return store[name] || (store[name] =
+ USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));
+};
+
+$exports.store = store;
+
+
+/***/ }),
+/* 7 */
+/***/ (function(module, exports) {
+
+var core = module.exports = { version: '2.5.7' };
+if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef
+
+
+/***/ }),
+/* 8 */
+/***/ (function(module, exports) {
+
+module.exports = function (it) {
+ return typeof it === 'object' ? it !== null : typeof it === 'function';
+};
+
+
+/***/ }),
+/* 9 */
+/***/ (function(module, exports) {
+
+module.exports = true;
+
+
+/***/ }),
+/* 10 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var isObject = __webpack_require__(8);
+module.exports = function (it) {
+ if (!isObject(it)) throw TypeError(it + ' is not an object!');
+ return it;
+};
+
+
+/***/ }),
+/* 11 */
+/***/ (function(module, exports) {
+
+module.exports = function (exec) {
+ try {
+ return !!exec();
+ } catch (e) {
+ return true;
+ }
+};
+
+
+/***/ }),
+/* 12 */
+/***/ (function(module, exports) {
+
+module.exports = function (bitmap, value) {
+ return {
+ enumerable: !(bitmap & 1),
+ configurable: !(bitmap & 2),
+ writable: !(bitmap & 4),
+ value: value
+ };
+};
+
+
+/***/ }),
+/* 13 */
+/***/ (function(module, exports) {
+
+var id = 0;
+var px = Math.random();
+module.exports = function (key) {
+ return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
+};
+
+
+/***/ }),
+/* 14 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.fetchNews = exports.fetchDoodle = exports.readAbout = exports.saveAbout = exports.fetchAbout = exports.readGuide = exports.saveGuide = exports.fetchGuide = exports.readExamples = exports.saveExamples = exports.fetchExamples = undefined;
+
+var _stringify = __webpack_require__(40);
+
+var _stringify2 = _interopRequireDefault(_stringify);
+
+var _typeof2 = __webpack_require__(42);
+
+var _typeof3 = _interopRequireDefault(_typeof2);
+
+exports.createLink = createLink;
+exports.createURL = createURL;
+exports.i18n = i18n;
+exports.parseLanguage = parseLanguage;
+exports.setLanguage = setLanguage;
+exports.clearStorageLanguage = clearStorageLanguage;
+exports.getStorageLanguage = getStorageLanguage;
+exports.getSystemLanguage = getSystemLanguage;
+exports.getLanguage = getLanguage;
+exports.jumpTo = jumpTo;
+exports.viewSource = viewSource;
+exports.setTitleBar = setTitleBar;
+exports.fetchData = fetchData;
+exports.saveData = saveData;
+exports.readData = readData;
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var stream = weex.requireModule('stream');
+var storage = weex.requireModule('storage');
+var navigator = weex.requireModule('navigator');
+
+var encoder = typeof encodeURIComponent === 'function' ? encodeURIComponent : typeof encodeURI === 'function' ? encodeURI : function (x) {
+ return x;
+};
+
+function encodeParams(params) {
+ if (!params || (typeof params === 'undefined' ? 'undefined' : (0, _typeof3.default)(params)) !== 'object') {
+ return '';
+ }
+ var array = [];
+ for (var key in params) {
+ if (typeof params[key] === 'string') {
+ array.push(encoder(key) + '=' + encoder(params[key]));
+ }
+ }
+ return array.join('&');
+}
+
+function createLink(name) {
+ var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+ var args = [];
+ for (var key in params) {
+ if (typeof params[key] === 'string') {
+ args.push(encoder(key) + '=' + encoder(params[key]));
+ }
+ }
+ if (WXEnvironment.platform === 'Web') {
+ args.unshift('page=' + name + '.web.js');
+ return '/?' + args.join('&');
+ }
+ var base = getBaseURL();
+ return '' + base + name + '.weex.js' + (args.length ? '?' + args.join('&') : '');
+}
+
+function createURL(hash, params) {
+ if (WXEnvironment.platform === 'Web') {
+ return 'http://dotwe.org/raw/htmlVue/' + hash;
+ }
+ var url = 'http://dotwe.org/raw/dist/' + hash + '.bundle.wx';
+ var paramString = encodeParams(params);
+ if (WXEnvironment.appName === 'TB') {
+ return url + '?_wx_tpl=' + url + '&' + paramString;
+ }
+ if (WXEnvironment.appName === 'WXSample') {
+ return url + '?' + paramString;
+ }
+ return url + '?wx_weex=true&' + paramString;
+}
+
+function getBaseURL() {
+ var bundleUrl = weex.config.bundleUrl;
+ var isAndroidAssets = bundleUrl.indexOf('your_current_IP') >= 0 || bundleUrl.indexOf('file://assets/') >= 0;
+ var isiOSAssets = bundleUrl.indexOf('file:///') >= 0 && bundleUrl.indexOf('WeexDemo.app') > 0;
+ if (isAndroidAssets) {
+ return 'file://assets/';
+ } else if (isiOSAssets) {
+ // file:///var/mobile/Containers/Bundle/Application/{id}/WeexDemo.app/
+ // file:///Users/{user}/Library/Developer/CoreSimulator/Devices/{id}/data/Containers/Bundle/Application/{id}/WeexDemo.app/
+ return bundleUrl.substring(0, bundleUrl.lastIndexOf('/') + 1);
+ }
+ return '';
+}
+
+function i18n(text, language) {
+ if (typeof text === 'string') {
+ return text;
+ }
+ if (Object.prototype.toString.call(text) === '[object Object]') {
+ var lang = this && this.language || language || 'en';
+ return text[lang];
+ }
+}
+
+var supportedLanguageRE = /(en|zh)\_?\w*/i;
+function parseLanguage(language) {
+ var match = supportedLanguageRE.exec(language + '');
+ if (match && match[1]) {
+ return match[1];
+ }
+ return '';
+}
+
+function setLanguage(language) {
+ var lang = parseLanguage(language);
+ if (lang) {
+ storage.setItem('WEEX_PLAYGROUND_LANGUAGE', lang);
+ }
+}
+
+function clearStorageLanguage() {
+ storage.removeItem('WEEX_PLAYGROUND_LANGUAGE');
+}
+
+function getStorageLanguage(done) {
+ var fail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};
+
+ if (!(typeof done === 'undefined' ? 'undefined' : (0, _typeof3.default)(done)) === 'function') {
+ return;
+ }
+ try {
+ storage.getItem('WEEX_PLAYGROUND_LANGUAGE', function (event) {
+ if (event.result === 'success') {
+ var lang = parseLanguage(event.data);
+ lang ? done(lang) : fail();
+ } else {
+ fail(event);
+ }
+ });
+ } catch (err) {
+ fail(err);
+ }
+}
+
+function getSystemLanguage(done) {
+ var fail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};
+
+ if (!(typeof done === 'undefined' ? 'undefined' : (0, _typeof3.default)(done)) === 'function') {
+ return;
+ }
+ if (WXEnvironment.platform.toLowerCase() === 'web') {
+ var lang = parseLanguage(window.navigator.language);
+ lang ? done(lang) : fail();
+ } else {
+ try {
+ var locale = weex.requireModule('locale') || weex.requireModule('local');
+ var useSync = false;
+ var resSync = locale.getLanguage(function (language) {
+ var lang = parseLanguage(language);
+ if (lang) {
+ useSync || done(lang);
+ } else {
+ fail();
+ }
+ });
+ var langSync = parseLanguage(resSync);
+ if (langSync) {
+ useSync = true;
+ done(langSync);
+ } else {
+ fail();
+ }
+ } catch (e) {
+ fail(e);
+ }
+ }
+}
+
+var languageRE = /.+[\?\&]{1}language=([\d\w]+)[\?\&]?.*/i;
+function getLanguage() {
+ var done = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {};
+
+ var match = languageRE.exec(weex.config.bundleUrl || '');
+ var lang = parseLanguage(match && match[1]);
+ if (lang) {
+ done(lang);
+ } else {
+ getStorageLanguage(done, function () {
+ getSystemLanguage(done, function () {
+ done('en');
+ });
+ });
+ }
+}
+
+function jumpTo(url, title, lang) {
+ getLanguage(function (language) {
+ storage.setItem('CURRENT_DOCUMENT_URL', i18n(url, lang || language));
+ navigator.push({
+ url: createURL('bf0305c14b511b24a4e616f53926432b', { language: language, title: i18n(title, lang || language) })
+ });
+ });
+}
+
+function viewSource(hash) {
+ getLanguage(function (language) {
+ navigator.push({
+ url: createURL('f6ce29faf686eabc38b410bf4828fa5a', { hash: hash, language: language })
+ });
+ });
+}
+
+function setTitleBar(options) {
+ var language = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'en';
+
+ if (Object.prototype.toString.apply(options) !== '[object Object]') {
+ return;
+ }
+ var titleBar = weex.requireModule('titleBar');
+ if (options.color || options.backgroundColor) {
+ try {
+ titleBar.setStyle({
+ foregroundColor: options.color || '#FFFFFF',
+ backgroundColor: options.backgroundColor || '#00B4FF'
+ });
+ } catch (e) {}
+ }
+ var title = i18n(options.title, language);
+ if (title) {
+ try {
+ titleBar.setTitle(title);
+ } catch (e) {}
+ }
+}
+
+var storageKeys = {
+ doodle: 'WEEX_PLAYGROUND_APP_DOODLE',
+ guide: 'WEEX_PLAYGROUND_APP_GUIDE',
+ examples: 'WEEX_PLAYGROUND_APP_EXAMPLES',
+ news: 'WEEX_PLAYGROUND_APP_NEWS',
+ about: 'WEEX_PLAYGROUND_APP_ABOUT'
+};
+function fetchData(name) {
+ var done = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};
+ var fail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {};
+
+ try {
+ stream.fetch({
+ url: 'http://dotwe.org/query/weex-playground-app',
+ method: 'post',
+ headers: {
+ 'Content-Type': 'application/x-www-form-urlencoded'
+ },
+ type: 'json',
+ body: 'name=' + name
+ }, function (res) {
+ if (res.ok && res.data && res.data.success) {
+ done(res.data);
+ } else {
+ fail(res);
+ }
+ });
+ } catch (err) {
+ fail(err);
+ }
+}
+function saveData(name, result) {
+ var key = storageKeys[name];
+ if (!key) return;
+ if (result && (typeof result === 'undefined' ? 'undefined' : (0, _typeof3.default)(result)) === 'object') {
+ result.timestamp = Date.now();
+ storage.setItem(key, (0, _stringify2.default)(result));
+ }
+}
+function readData(name) {
+ var done = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};
+ var fail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {};
+
+ var key = storageKeys[name];
+ if (!key) return fail();
+ try {
+ storage.getItem(key, function (event) {
+ if (event.result === 'success') {
+ var result = JSON.parse(event.data);
+ if (result && Array.isArray(result[name])) {
+ return done(result[name]);
+ }
+ }
+ fail(event);
+ });
+ } catch (e) {
+ fail(e);
+ }
+}
+
+var fetchExamples = exports.fetchExamples = function fetchExamples() {
+ for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+
+ return fetchData.apply(undefined, ['examples'].concat(args));
+};
+var saveExamples = exports.saveExamples = function saveExamples() {
+ for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
+ args[_key2] = arguments[_key2];
+ }
+
+ return saveData.apply(undefined, ['examples'].concat(args));
+};
+var readExamples = exports.readExamples = function readExamples() {
+ for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
+ args[_key3] = arguments[_key3];
+ }
+
+ return readData.apply(undefined, ['examples'].concat(args));
+};
+
+var fetchGuide = exports.fetchGuide = function fetchGuide() {
+ for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
+ args[_key4] = arguments[_key4];
+ }
+
+ return fetchData.apply(undefined, ['guide'].concat(args));
+};
+var saveGuide = exports.saveGuide = function saveGuide() {
+ for (var _len5 = arguments.length, args = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
+ args[_key5] = arguments[_key5];
+ }
+
+ return saveData.apply(undefined, ['guide'].concat(args));
+};
+var readGuide = exports.readGuide = function readGuide() {
+ for (var _len6 = arguments.length, args = Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
+ args[_key6] = arguments[_key6];
+ }
+
+ return readData.apply(undefined, ['guide'].concat(args));
+};
+
+var fetchAbout = exports.fetchAbout = function fetchAbout() {
+ for (var _len7 = arguments.length, args = Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {
+ args[_key7] = arguments[_key7];
+ }
+
+ return fetchData.apply(undefined, ['about'].concat(args));
+};
+var saveAbout = exports.saveAbout = function saveAbout() {
+ for (var _len8 = arguments.length, args = Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {
+ args[_key8] = arguments[_key8];
+ }
+
+ return saveData.apply(undefined, ['about'].concat(args));
+};
+var readAbout = exports.readAbout = function readAbout() {
+ for (var _len9 = arguments.length, args = Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {
+ args[_key9] = arguments[_key9];
+ }
+
+ return readData.apply(undefined, ['about'].concat(args));
+};
+
+var fetchDoodle = exports.fetchDoodle = function fetchDoodle() {
+ for (var _len10 = arguments.length, args = Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {
+ args[_key10] = arguments[_key10];
+ }
+
+ return fetchData.apply(undefined, ['doodle'].concat(args));
+};
+var fetchNews = exports.fetchNews = function fetchNews() {
+ for (var _len11 = arguments.length, args = Array(_len11), _key11 = 0; _key11 < _len11; _key11++) {
+ args[_key11] = arguments[_key11];
+ }
+
+ return fetchData.apply(undefined, ['news'].concat(args));
+};
+
+/***/ }),
+/* 15 */
+/***/ (function(module, exports) {
+
+// 7.1.4 ToInteger
+var ceil = Math.ceil;
+var floor = Math.floor;
+module.exports = function (it) {
+ return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
+};
+
+
+/***/ }),
+/* 16 */
+/***/ (function(module, exports) {
+
+// 7.2.1 RequireObjectCoercible(argument)
+module.exports = function (it) {
+ if (it == undefined) throw TypeError("Can't call method on " + it);
+ return it;
+};
+
+
+/***/ }),
+/* 17 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 7.1.1 ToPrimitive(input [, PreferredType])
+var isObject = __webpack_require__(8);
+// instead of the ES6 spec version, we didn't implement @@toPrimitive case
+// and the second argument - flag - preferred type is a string
+module.exports = function (it, S) {
+ if (!isObject(it)) return it;
+ var fn, val;
+ if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
+ if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;
+ if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
+ throw TypeError("Can't convert object to primitive value");
+};
+
+
+/***/ }),
+/* 18 */
+/***/ (function(module, exports) {
+
+module.exports = {};
+
+
+/***/ }),
+/* 19 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 19.1.2.14 / 15.2.3.14 Object.keys(O)
+var $keys = __webpack_require__(33);
+var enumBugKeys = __webpack_require__(22);
+
+module.exports = Object.keys || function keys(O) {
+ return $keys(O, enumBugKeys);
+};
+
+
+/***/ }),
+/* 20 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var shared = __webpack_require__(21)('keys');
+var uid = __webpack_require__(13);
+module.exports = function (key) {
+ return shared[key] || (shared[key] = uid(key));
+};
+
+
+/***/ }),
+/* 21 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var core = __webpack_require__(7);
+var global = __webpack_require__(0);
+var SHARED = '__core-js_shared__';
+var store = global[SHARED] || (global[SHARED] = {});
+
+(module.exports = function (key, value) {
+ return store[key] || (store[key] = value !== undefined ? value : {});
+})('versions', []).push({
+ version: core.version,
+ mode: __webpack_require__(9) ? 'pure' : 'global',
+ copyright: '© 2018 Denis Pushkarev (zloirock.ru)'
+});
+
+
+/***/ }),
+/* 22 */
+/***/ (function(module, exports) {
+
+// IE 8- don't enum bug keys
+module.exports = (
+ 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'
+).split(',');
+
+
+/***/ }),
+/* 23 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var def = __webpack_require__(3).f;
+var has = __webpack_require__(1);
+var TAG = __webpack_require__(6)('toStringTag');
+
+module.exports = function (it, tag, stat) {
+ if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });
+};
+
+
+/***/ }),
+/* 24 */
+/***/ (function(module, exports, __webpack_require__) {
+
+exports.f = __webpack_require__(6);
+
+
+/***/ }),
+/* 25 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var global = __webpack_require__(0);
+var core = __webpack_require__(7);
+var LIBRARY = __webpack_require__(9);
+var wksExt = __webpack_require__(24);
+var defineProperty = __webpack_require__(3).f;
+module.exports = function (name) {
+ var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});
+ if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });
+};
+
+
+/***/ }),
+/* 26 */
+/***/ (function(module, exports) {
+
+exports.f = {}.propertyIsEnumerable;
+
+
+/***/ }),
+/* 27 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var LIBRARY = __webpack_require__(9);
+var $export = __webpack_require__(28);
+var redefine = __webpack_require__(31);
+var hide = __webpack_require__(2);
+var Iterators = __webpack_require__(18);
+var $iterCreate = __webpack_require__(49);
+var setToStringTag = __webpack_require__(23);
+var getPrototypeOf = __webpack_require__(56);
+var ITERATOR = __webpack_require__(6)('iterator');
+var BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`
+var FF_ITERATOR = '@@iterator';
+var KEYS = 'keys';
+var VALUES = 'values';
+
+var returnThis = function () { return this; };
+
+module.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {
+ $iterCreate(Constructor, NAME, next);
+ var getMethod = function (kind) {
+ if (!BUGGY && kind in proto) return proto[kind];
+ switch (kind) {
+ case KEYS: return function keys() { return new Constructor(this, kind); };
+ case VALUES: return function values() { return new Constructor(this, kind); };
+ } return function entries() { return new Constructor(this, kind); };
+ };
+ var TAG = NAME + ' Iterator';
+ var DEF_VALUES = DEFAULT == VALUES;
+ var VALUES_BUG = false;
+ var proto = Base.prototype;
+ var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];
+ var $default = $native || getMethod(DEFAULT);
+ var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;
+ var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;
+ var methods, key, IteratorPrototype;
+ // Fix native
+ if ($anyNative) {
+ IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));
+ if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {
+ // Set @@toStringTag to native iterators
+ setToStringTag(IteratorPrototype, TAG, true);
+ // fix for some old engines
+ if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);
+ }
+ }
+ // fix Array#{values, @@iterator}.name in V8 / FF
+ if (DEF_VALUES && $native && $native.name !== VALUES) {
+ VALUES_BUG = true;
+ $default = function values() { return $native.call(this); };
+ }
+ // Define iterator
+ if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {
+ hide(proto, ITERATOR, $default);
+ }
+ // Plug for library
+ Iterators[NAME] = $default;
+ Iterators[TAG] = returnThis;
+ if (DEFAULT) {
+ methods = {
+ values: DEF_VALUES ? $default : getMethod(VALUES),
+ keys: IS_SET ? $default : getMethod(KEYS),
+ entries: $entries
+ };
+ if (FORCED) for (key in methods) {
+ if (!(key in proto)) redefine(proto, key, methods[key]);
+ } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);
+ }
+ return methods;
+};
+
+
+/***/ }),
+/* 28 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var global = __webpack_require__(0);
+var core = __webpack_require__(7);
+var ctx = __webpack_require__(47);
+var hide = __webpack_require__(2);
+var has = __webpack_require__(1);
+var PROTOTYPE = 'prototype';
+
+var $export = function (type, name, source) {
+ var IS_FORCED = type & $export.F;
+ var IS_GLOBAL = type & $export.G;
+ var IS_STATIC = type & $export.S;
+ var IS_PROTO = type & $export.P;
+ var IS_BIND = type & $export.B;
+ var IS_WRAP = type & $export.W;
+ var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});
+ var expProto = exports[PROTOTYPE];
+ var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];
+ var key, own, out;
+ if (IS_GLOBAL) source = name;
+ for (key in source) {
+ // contains in native
+ own = !IS_FORCED && target && target[key] !== undefined;
+ if (own && has(exports, key)) continue;
+ // export native or passed
+ out = own ? target[key] : source[key];
+ // prevent global pollution for namespaces
+ exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]
+ // bind timers to global for call from export context
+ : IS_BIND && own ? ctx(out, global)
+ // wrap global constructors for prevent change them in library
+ : IS_WRAP && target[key] == out ? (function (C) {
+ var F = function (a, b, c) {
+ if (this instanceof C) {
+ switch (arguments.length) {
+ case 0: return new C();
+ case 1: return new C(a);
+ case 2: return new C(a, b);
+ } return new C(a, b, c);
+ } return C.apply(this, arguments);
+ };
+ F[PROTOTYPE] = C[PROTOTYPE];
+ return F;
+ // make static versions for prototype methods
+ })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
+ // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%
+ if (IS_PROTO) {
+ (exports.virtual || (exports.virtual = {}))[key] = out;
+ // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%
+ if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);
+ }
+ }
+};
+// type bitmap
+$export.F = 1; // forced
+$export.G = 2; // global
+$export.S = 4; // static
+$export.P = 8; // proto
+$export.B = 16; // bind
+$export.W = 32; // wrap
+$export.U = 64; // safe
+$export.R = 128; // real proto method for `library`
+module.exports = $export;
+
+
+/***/ }),
+/* 29 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = !__webpack_require__(4) && !__webpack_require__(11)(function () {
+ return Object.defineProperty(__webpack_require__(30)('div'), 'a', { get: function () { return 7; } }).a != 7;
+});
+
+
+/***/ }),
+/* 30 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var isObject = __webpack_require__(8);
+var document = __webpack_require__(0).document;
+// typeof document.createElement is 'object' in old IE
+var is = isObject(document) && isObject(document.createElement);
+module.exports = function (it) {
+ return is ? document.createElement(it) : {};
+};
+
+
+/***/ }),
+/* 31 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = __webpack_require__(2);
+
+
+/***/ }),
+/* 32 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
+var anObject = __webpack_require__(10);
+var dPs = __webpack_require__(50);
+var enumBugKeys = __webpack_require__(22);
+var IE_PROTO = __webpack_require__(20)('IE_PROTO');
+var Empty = function () { /* empty */ };
+var PROTOTYPE = 'prototype';
+
+// Create object with fake `null` prototype: use iframe Object with cleared prototype
+var createDict = function () {
+ // Thrash, waste and sodomy: IE GC bug
+ var iframe = __webpack_require__(30)('iframe');
+ var i = enumBugKeys.length;
+ var lt = '<';
+ var gt = '>';
+ var iframeDocument;
+ iframe.style.display = 'none';
+ __webpack_require__(55).appendChild(iframe);
+ iframe.src = 'javascript:'; // eslint-disable-line no-script-url
+ // createDict = iframe.contentWindow.Object;
+ // html.removeChild(iframe);
+ iframeDocument = iframe.contentWindow.document;
+ iframeDocument.open();
+ iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);
+ iframeDocument.close();
+ createDict = iframeDocument.F;
+ while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];
+ return createDict();
+};
+
+module.exports = Object.create || function create(O, Properties) {
+ var result;
+ if (O !== null) {
+ Empty[PROTOTYPE] = anObject(O);
+ result = new Empty();
+ Empty[PROTOTYPE] = null;
+ // add "__proto__" for Object.getPrototypeOf polyfill
+ result[IE_PROTO] = O;
+ } else result = createDict();
+ return Properties === undefined ? result : dPs(result, Properties);
+};
+
+
+/***/ }),
+/* 33 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var has = __webpack_require__(1);
+var toIObject = __webpack_require__(5);
+var arrayIndexOf = __webpack_require__(52)(false);
+var IE_PROTO = __webpack_require__(20)('IE_PROTO');
+
+module.exports = function (object, names) {
+ var O = toIObject(object);
+ var i = 0;
+ var result = [];
+ var key;
+ for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);
+ // Don't enum bug & hidden keys
+ while (names.length > i) if (has(O, key = names[i++])) {
+ ~arrayIndexOf(result, key) || result.push(key);
+ }
+ return result;
+};
+
+
+/***/ }),
+/* 34 */
+/***/ (function(module, exports) {
+
+var toString = {}.toString;
+
+module.exports = function (it) {
+ return toString.call(it).slice(8, -1);
+};
+
+
+/***/ }),
+/* 35 */
+/***/ (function(module, exports) {
+
+exports.f = Object.getOwnPropertySymbols;
+
+
+/***/ }),
+/* 36 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)
+var $keys = __webpack_require__(33);
+var hiddenKeys = __webpack_require__(22).concat('length', 'prototype');
+
+exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
+ return $keys(O, hiddenKeys);
+};
+
+
+/***/ }),
+/* 37 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+__webpack_require__(38);
+
+var _Examples = __webpack_require__(73);
+
+var _Examples2 = _interopRequireDefault(_Examples);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+// show title bar
+try {
+ var titleBar = weex.requireModule('titleBar');
+ titleBar.showTitleBar(true);
+} catch (e) {}
+
+_Examples2.default.el = '#root';
+new Vue(_Examples2.default);
+
+/***/ }),
+/* 38 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _mixin = __webpack_require__(39);
+
+var _mixin2 = _interopRequireDefault(_mixin);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+// use shared mixins
+Vue.mixin(_mixin2.default);
+
+/***/ }),
+/* 39 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _index = __webpack_require__(14);
+
+var utils = _interopRequireWildcard(_index);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+var storage = weex.requireModule('storage');
+
+exports.default = {
+ filters: {
+ i18n: utils.i18n,
+ url: utils.createURL,
+ link: utils.createLink
+ },
+ methods: {
+ createLink: utils.createLink,
+ createURL: utils.createURL,
+ i18n: utils.i18n,
+ getLanguage: utils.getLanguage,
+ fetchData: utils.fetchData,
+ saveData: utils.saveData,
+ readData: utils.readData,
+ jumpTo: utils.jumpTo
+ },
+ created: function created() {
+ var _this = this;
+
+ // get and set language
+ utils.getLanguage(function (language) {
+ _this.language = language;
+ utils.setTitleBar(_this.navigationBarOptions, language);
+ });
+
+ // listen to the language change event
+ var channel = new BroadcastChannel('language');
+ channel.onmessage = function (event) {
+ if (event.data && event.data.language) {
+ _this.language = event.data.language;
+ }
+ };
+ },
+ beforeDestroy: function beforeDestroy() {
+ storage.removeItem('CURRENT_DOCUMENT_URL');
+ storage.removeItem('CURRENT_SOURCE_HASH');
+ }
+};
+
+/***/ }),
+/* 40 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = { "default": __webpack_require__(41), __esModule: true };
+
+/***/ }),
+/* 41 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var core = __webpack_require__(7);
+var $JSON = core.JSON || (core.JSON = { stringify: JSON.stringify });
+module.exports = function stringify(it) { // eslint-disable-line no-unused-vars
+ return $JSON.stringify.apply($JSON, arguments);
+};
+
+
+/***/ }),
+/* 42 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+exports.__esModule = true;
+
+var _iterator = __webpack_require__(43);
+
+var _iterator2 = _interopRequireDefault(_iterator);
+
+var _symbol = __webpack_require__(62);
+
+var _symbol2 = _interopRequireDefault(_symbol);
+
+var _typeof = typeof _symbol2.default === "function" && typeof _iterator2.default === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj; };
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+exports.default = typeof _symbol2.default === "function" && _typeof(_iterator2.default) === "symbol" ? function (obj) {
+ return typeof obj === "undefined" ? "undefined" : _typeof(obj);
+} : function (obj) {
+ return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof(obj);
+};
+
+/***/ }),
+/* 43 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = { "default": __webpack_require__(44), __esModule: true };
+
+/***/ }),
+/* 44 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(45);
+__webpack_require__(58);
+module.exports = __webpack_require__(24).f('iterator');
+
+
+/***/ }),
+/* 45 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var $at = __webpack_require__(46)(true);
+
+// 21.1.3.27 String.prototype[@@iterator]()
+__webpack_require__(27)(String, 'String', function (iterated) {
+ this._t = String(iterated); // target
+ this._i = 0; // next index
+// 21.1.5.2.1 %StringIteratorPrototype%.next()
+}, function () {
+ var O = this._t;
+ var index = this._i;
+ var point;
+ if (index >= O.length) return { value: undefined, done: true };
+ point = $at(O, index);
+ this._i += point.length;
+ return { value: point, done: false };
+});
+
+
+/***/ }),
+/* 46 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var toInteger = __webpack_require__(15);
+var defined = __webpack_require__(16);
+// true -> String#at
+// false -> String#codePointAt
+module.exports = function (TO_STRING) {
+ return function (that, pos) {
+ var s = String(defined(that));
+ var i = toInteger(pos);
+ var l = s.length;
+ var a, b;
+ if (i < 0 || i >= l) return TO_STRING ? '' : undefined;
+ a = s.charCodeAt(i);
+ return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff
+ ? TO_STRING ? s.charAt(i) : a
+ : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;
+ };
+};
+
+
+/***/ }),
+/* 47 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// optional / simple context binding
+var aFunction = __webpack_require__(48);
+module.exports = function (fn, that, length) {
+ aFunction(fn);
+ if (that === undefined) return fn;
+ switch (length) {
+ case 1: return function (a) {
+ return fn.call(that, a);
+ };
+ case 2: return function (a, b) {
+ return fn.call(that, a, b);
+ };
+ case 3: return function (a, b, c) {
+ return fn.call(that, a, b, c);
+ };
+ }
+ return function (/* ...args */) {
+ return fn.apply(that, arguments);
+ };
+};
+
+
+/***/ }),
+/* 48 */
+/***/ (function(module, exports) {
+
+module.exports = function (it) {
+ if (typeof it != 'function') throw TypeError(it + ' is not a function!');
+ return it;
+};
+
+
+/***/ }),
+/* 49 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var create = __webpack_require__(32);
+var descriptor = __webpack_require__(12);
+var setToStringTag = __webpack_require__(23);
+var IteratorPrototype = {};
+
+// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
+__webpack_require__(2)(IteratorPrototype, __webpack_require__(6)('iterator'), function () { return this; });
+
+module.exports = function (Constructor, NAME, next) {
+ Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });
+ setToStringTag(Constructor, NAME + ' Iterator');
+};
+
+
+/***/ }),
+/* 50 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var dP = __webpack_require__(3);
+var anObject = __webpack_require__(10);
+var getKeys = __webpack_require__(19);
+
+module.exports = __webpack_require__(4) ? Object.defineProperties : function defineProperties(O, Properties) {
+ anObject(O);
+ var keys = getKeys(Properties);
+ var length = keys.length;
+ var i = 0;
+ var P;
+ while (length > i) dP.f(O, P = keys[i++], Properties[P]);
+ return O;
+};
+
+
+/***/ }),
+/* 51 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// fallback for non-array-like ES3 and non-enumerable old V8 strings
+var cof = __webpack_require__(34);
+// eslint-disable-next-line no-prototype-builtins
+module.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {
+ return cof(it) == 'String' ? it.split('') : Object(it);
+};
+
+
+/***/ }),
+/* 52 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// false -> Array#indexOf
+// true -> Array#includes
+var toIObject = __webpack_require__(5);
+var toLength = __webpack_require__(53);
+var toAbsoluteIndex = __webpack_require__(54);
+module.exports = function (IS_INCLUDES) {
+ return function ($this, el, fromIndex) {
+ var O = toIObject($this);
+ var length = toLength(O.length);
+ var index = toAbsoluteIndex(fromIndex, length);
+ var value;
+ // Array#includes uses SameValueZero equality algorithm
+ // eslint-disable-next-line no-self-compare
+ if (IS_INCLUDES && el != el) while (length > index) {
+ value = O[index++];
+ // eslint-disable-next-line no-self-compare
+ if (value != value) return true;
+ // Array#indexOf ignores holes, Array#includes - not
+ } else for (;length > index; index++) if (IS_INCLUDES || index in O) {
+ if (O[index] === el) return IS_INCLUDES || index || 0;
+ } return !IS_INCLUDES && -1;
+ };
+};
+
+
+/***/ }),
+/* 53 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 7.1.15 ToLength
+var toInteger = __webpack_require__(15);
+var min = Math.min;
+module.exports = function (it) {
+ return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
+};
+
+
+/***/ }),
+/* 54 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var toInteger = __webpack_require__(15);
+var max = Math.max;
+var min = Math.min;
+module.exports = function (index, length) {
+ index = toInteger(index);
+ return index < 0 ? max(index + length, 0) : min(index, length);
+};
+
+
+/***/ }),
+/* 55 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var document = __webpack_require__(0).document;
+module.exports = document && document.documentElement;
+
+
+/***/ }),
+/* 56 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)
+var has = __webpack_require__(1);
+var toObject = __webpack_require__(57);
+var IE_PROTO = __webpack_require__(20)('IE_PROTO');
+var ObjectProto = Object.prototype;
+
+module.exports = Object.getPrototypeOf || function (O) {
+ O = toObject(O);
+ if (has(O, IE_PROTO)) return O[IE_PROTO];
+ if (typeof O.constructor == 'function' && O instanceof O.constructor) {
+ return O.constructor.prototype;
+ } return O instanceof Object ? ObjectProto : null;
+};
+
+
+/***/ }),
+/* 57 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 7.1.13 ToObject(argument)
+var defined = __webpack_require__(16);
+module.exports = function (it) {
+ return Object(defined(it));
+};
+
+
+/***/ }),
+/* 58 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(59);
+var global = __webpack_require__(0);
+var hide = __webpack_require__(2);
+var Iterators = __webpack_require__(18);
+var TO_STRING_TAG = __webpack_require__(6)('toStringTag');
+
+var DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +
+ 'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +
+ 'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +
+ 'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +
+ 'TextTrackList,TouchList').split(',');
+
+for (var i = 0; i < DOMIterables.length; i++) {
+ var NAME = DOMIterables[i];
+ var Collection = global[NAME];
+ var proto = Collection && Collection.prototype;
+ if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);
+ Iterators[NAME] = Iterators.Array;
+}
+
+
+/***/ }),
+/* 59 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var addToUnscopables = __webpack_require__(60);
+var step = __webpack_require__(61);
+var Iterators = __webpack_require__(18);
+var toIObject = __webpack_require__(5);
+
+// 22.1.3.4 Array.prototype.entries()
+// 22.1.3.13 Array.prototype.keys()
+// 22.1.3.29 Array.prototype.values()
+// 22.1.3.30 Array.prototype[@@iterator]()
+module.exports = __webpack_require__(27)(Array, 'Array', function (iterated, kind) {
+ this._t = toIObject(iterated); // target
+ this._i = 0; // next index
+ this._k = kind; // kind
+// 22.1.5.2.1 %ArrayIteratorPrototype%.next()
+}, function () {
+ var O = this._t;
+ var kind = this._k;
+ var index = this._i++;
+ if (!O || index >= O.length) {
+ this._t = undefined;
+ return step(1);
+ }
+ if (kind == 'keys') return step(0, index);
+ if (kind == 'values') return step(0, O[index]);
+ return step(0, [index, O[index]]);
+}, 'values');
+
+// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)
+Iterators.Arguments = Iterators.Array;
+
+addToUnscopables('keys');
+addToUnscopables('values');
+addToUnscopables('entries');
+
+
+/***/ }),
+/* 60 */
+/***/ (function(module, exports) {
+
+module.exports = function () { /* empty */ };
+
+
+/***/ }),
+/* 61 */
+/***/ (function(module, exports) {
+
+module.exports = function (done, value) {
+ return { value: value, done: !!done };
+};
+
+
+/***/ }),
+/* 62 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = { "default": __webpack_require__(63), __esModule: true };
+
+/***/ }),
+/* 63 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(64);
+__webpack_require__(70);
+__webpack_require__(71);
+__webpack_require__(72);
+module.exports = __webpack_require__(7).Symbol;
+
+
+/***/ }),
+/* 64 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+// ECMAScript 6 symbols shim
+var global = __webpack_require__(0);
+var has = __webpack_require__(1);
+var DESCRIPTORS = __webpack_require__(4);
+var $export = __webpack_require__(28);
+var redefine = __webpack_require__(31);
+var META = __webpack_require__(65).KEY;
+var $fails = __webpack_require__(11);
+var shared = __webpack_require__(21);
+var setToStringTag = __webpack_require__(23);
+var uid = __webpack_require__(13);
+var wks = __webpack_require__(6);
+var wksExt = __webpack_require__(24);
+var wksDefine = __webpack_require__(25);
+var enumKeys = __webpack_require__(66);
+var isArray = __webpack_require__(67);
+var anObject = __webpack_require__(10);
+var isObject = __webpack_require__(8);
+var toIObject = __webpack_require__(5);
+var toPrimitive = __webpack_require__(17);
+var createDesc = __webpack_require__(12);
+var _create = __webpack_require__(32);
+var gOPNExt = __webpack_require__(68);
+var $GOPD = __webpack_require__(69);
+var $DP = __webpack_require__(3);
+var $keys = __webpack_require__(19);
+var gOPD = $GOPD.f;
+var dP = $DP.f;
+var gOPN = gOPNExt.f;
+var $Symbol = global.Symbol;
+var $JSON = global.JSON;
+var _stringify = $JSON && $JSON.stringify;
+var PROTOTYPE = 'prototype';
+var HIDDEN = wks('_hidden');
+var TO_PRIMITIVE = wks('toPrimitive');
+var isEnum = {}.propertyIsEnumerable;
+var SymbolRegistry = shared('symbol-registry');
+var AllSymbols = shared('symbols');
+var OPSymbols = shared('op-symbols');
+var ObjectProto = Object[PROTOTYPE];
+var USE_NATIVE = typeof $Symbol == 'function';
+var QObject = global.QObject;
+// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173
+var setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;
+
+// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687
+var setSymbolDesc = DESCRIPTORS && $fails(function () {
+ return _create(dP({}, 'a', {
+ get: function () { return dP(this, 'a', { value: 7 }).a; }
+ })).a != 7;
+}) ? function (it, key, D) {
+ var protoDesc = gOPD(ObjectProto, key);
+ if (protoDesc) delete ObjectProto[key];
+ dP(it, key, D);
+ if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);
+} : dP;
+
+var wrap = function (tag) {
+ var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);
+ sym._k = tag;
+ return sym;
+};
+
+var isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {
+ return typeof it == 'symbol';
+} : function (it) {
+ return it instanceof $Symbol;
+};
+
+var $defineProperty = function defineProperty(it, key, D) {
+ if (it === ObjectProto) $defineProperty(OPSymbols, key, D);
+ anObject(it);
+ key = toPrimitive(key, true);
+ anObject(D);
+ if (has(AllSymbols, key)) {
+ if (!D.enumerable) {
+ if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));
+ it[HIDDEN][key] = true;
+ } else {
+ if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;
+ D = _create(D, { enumerable: createDesc(0, false) });
+ } return setSymbolDesc(it, key, D);
+ } return dP(it, key, D);
+};
+var $defineProperties = function defineProperties(it, P) {
+ anObject(it);
+ var keys = enumKeys(P = toIObject(P));
+ var i = 0;
+ var l = keys.length;
+ var key;
+ while (l > i) $defineProperty(it, key = keys[i++], P[key]);
+ return it;
+};
+var $create = function create(it, P) {
+ return P === undefined ? _create(it) : $defineProperties(_create(it), P);
+};
+var $propertyIsEnumerable = function propertyIsEnumerable(key) {
+ var E = isEnum.call(this, key = toPrimitive(key, true));
+ if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;
+ return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;
+};
+var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {
+ it = toIObject(it);
+ key = toPrimitive(key, true);
+ if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;
+ var D = gOPD(it, key);
+ if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;
+ return D;
+};
+var $getOwnPropertyNames = function getOwnPropertyNames(it) {
+ var names = gOPN(toIObject(it));
+ var result = [];
+ var i = 0;
+ var key;
+ while (names.length > i) {
+ if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);
+ } return result;
+};
+var $getOwnPropertySymbols = function getOwnPropertySymbols(it) {
+ var IS_OP = it === ObjectProto;
+ var names = gOPN(IS_OP ? OPSymbols : toIObject(it));
+ var result = [];
+ var i = 0;
+ var key;
+ while (names.length > i) {
+ if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);
+ } return result;
+};
+
+// 19.4.1.1 Symbol([description])
+if (!USE_NATIVE) {
+ $Symbol = function Symbol() {
+ if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');
+ var tag = uid(arguments.length > 0 ? arguments[0] : undefined);
+ var $set = function (value) {
+ if (this === ObjectProto) $set.call(OPSymbols, value);
+ if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;
+ setSymbolDesc(this, tag, createDesc(1, value));
+ };
+ if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });
+ return wrap(tag);
+ };
+ redefine($Symbol[PROTOTYPE], 'toString', function toString() {
+ return this._k;
+ });
+
+ $GOPD.f = $getOwnPropertyDescriptor;
+ $DP.f = $defineProperty;
+ __webpack_require__(36).f = gOPNExt.f = $getOwnPropertyNames;
+ __webpack_require__(26).f = $propertyIsEnumerable;
+ __webpack_require__(35).f = $getOwnPropertySymbols;
+
+ if (DESCRIPTORS && !__webpack_require__(9)) {
+ redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);
+ }
+
+ wksExt.f = function (name) {
+ return wrap(wks(name));
+ };
+}
+
+$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });
+
+for (var es6Symbols = (
+ // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14
+ 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'
+).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);
+
+for (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);
+
+$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {
+ // 19.4.2.1 Symbol.for(key)
+ 'for': function (key) {
+ return has(SymbolRegistry, key += '')
+ ? SymbolRegistry[key]
+ : SymbolRegistry[key] = $Symbol(key);
+ },
+ // 19.4.2.5 Symbol.keyFor(sym)
+ keyFor: function keyFor(sym) {
+ if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');
+ for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;
+ },
+ useSetter: function () { setter = true; },
+ useSimple: function () { setter = false; }
+});
+
+$export($export.S + $export.F * !USE_NATIVE, 'Object', {
+ // 19.1.2.2 Object.create(O [, Properties])
+ create: $create,
+ // 19.1.2.4 Object.defineProperty(O, P, Attributes)
+ defineProperty: $defineProperty,
+ // 19.1.2.3 Object.defineProperties(O, Properties)
+ defineProperties: $defineProperties,
+ // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)
+ getOwnPropertyDescriptor: $getOwnPropertyDescriptor,
+ // 19.1.2.7 Object.getOwnPropertyNames(O)
+ getOwnPropertyNames: $getOwnPropertyNames,
+ // 19.1.2.8 Object.getOwnPropertySymbols(O)
+ getOwnPropertySymbols: $getOwnPropertySymbols
+});
+
+// 24.3.2 JSON.stringify(value [, replacer [, space]])
+$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {
+ var S = $Symbol();
+ // MS Edge converts symbol values to JSON as {}
+ // WebKit converts symbol values to JSON as null
+ // V8 throws on boxed symbols
+ return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';
+})), 'JSON', {
+ stringify: function stringify(it) {
+ var args = [it];
+ var i = 1;
+ var replacer, $replacer;
+ while (arguments.length > i) args.push(arguments[i++]);
+ $replacer = replacer = args[1];
+ if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined
+ if (!isArray(replacer)) replacer = function (key, value) {
+ if (typeof $replacer == 'function') value = $replacer.call(this, key, value);
+ if (!isSymbol(value)) return value;
+ };
+ args[1] = replacer;
+ return _stringify.apply($JSON, args);
+ }
+});
+
+// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)
+$Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(2)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);
+// 19.4.3.5 Symbol.prototype[@@toStringTag]
+setToStringTag($Symbol, 'Symbol');
+// 20.2.1.9 Math[@@toStringTag]
+setToStringTag(Math, 'Math', true);
+// 24.3.3 JSON[@@toStringTag]
+setToStringTag(global.JSON, 'JSON', true);
+
+
+/***/ }),
+/* 65 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var META = __webpack_require__(13)('meta');
+var isObject = __webpack_require__(8);
+var has = __webpack_require__(1);
+var setDesc = __webpack_require__(3).f;
+var id = 0;
+var isExtensible = Object.isExtensible || function () {
+ return true;
+};
+var FREEZE = !__webpack_require__(11)(function () {
+ return isExtensible(Object.preventExtensions({}));
+});
+var setMeta = function (it) {
+ setDesc(it, META, { value: {
+ i: 'O' + ++id, // object ID
+ w: {} // weak collections IDs
+ } });
+};
+var fastKey = function (it, create) {
+ // return primitive with prefix
+ if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;
+ if (!has(it, META)) {
+ // can't set metadata to uncaught frozen object
+ if (!isExtensible(it)) return 'F';
+ // not necessary to add metadata
+ if (!create) return 'E';
+ // add missing metadata
+ setMeta(it);
+ // return object ID
+ } return it[META].i;
+};
+var getWeak = function (it, create) {
+ if (!has(it, META)) {
+ // can't set metadata to uncaught frozen object
+ if (!isExtensible(it)) return true;
+ // not necessary to add metadata
+ if (!create) return false;
+ // add missing metadata
+ setMeta(it);
+ // return hash weak collections IDs
+ } return it[META].w;
+};
+// add metadata on freeze-family methods calling
+var onFreeze = function (it) {
+ if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);
+ return it;
+};
+var meta = module.exports = {
+ KEY: META,
+ NEED: false,
+ fastKey: fastKey,
+ getWeak: getWeak,
+ onFreeze: onFreeze
+};
+
+
+/***/ }),
+/* 66 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// all enumerable object keys, includes symbols
+var getKeys = __webpack_require__(19);
+var gOPS = __webpack_require__(35);
+var pIE = __webpack_require__(26);
+module.exports = function (it) {
+ var result = getKeys(it);
+ var getSymbols = gOPS.f;
+ if (getSymbols) {
+ var symbols = getSymbols(it);
+ var isEnum = pIE.f;
+ var i = 0;
+ var key;
+ while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);
+ } return result;
+};
+
+
+/***/ }),
+/* 67 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 7.2.2 IsArray(argument)
+var cof = __webpack_require__(34);
+module.exports = Array.isArray || function isArray(arg) {
+ return cof(arg) == 'Array';
+};
+
+
+/***/ }),
+/* 68 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
+var toIObject = __webpack_require__(5);
+var gOPN = __webpack_require__(36).f;
+var toString = {}.toString;
+
+var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames
+ ? Object.getOwnPropertyNames(window) : [];
+
+var getWindowNames = function (it) {
+ try {
+ return gOPN(it);
+ } catch (e) {
+ return windowNames.slice();
+ }
+};
+
+module.exports.f = function getOwnPropertyNames(it) {
+ return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));
+};
+
+
+/***/ }),
+/* 69 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var pIE = __webpack_require__(26);
+var createDesc = __webpack_require__(12);
+var toIObject = __webpack_require__(5);
+var toPrimitive = __webpack_require__(17);
+var has = __webpack_require__(1);
+var IE8_DOM_DEFINE = __webpack_require__(29);
+var gOPD = Object.getOwnPropertyDescriptor;
+
+exports.f = __webpack_require__(4) ? gOPD : function getOwnPropertyDescriptor(O, P) {
+ O = toIObject(O);
+ P = toPrimitive(P, true);
+ if (IE8_DOM_DEFINE) try {
+ return gOPD(O, P);
+ } catch (e) { /* empty */ }
+ if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);
+};
+
+
+/***/ }),
+/* 70 */
+/***/ (function(module, exports) {
+
+
+
+/***/ }),
+/* 71 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(25)('asyncIterator');
+
+
+/***/ }),
+/* 72 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(25)('observable');
+
+
+/***/ }),
+/* 73 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var __vue_exports__, __vue_options__
+var __vue_styles__ = []
+
+/* styles */
+__vue_styles__.push(__webpack_require__(74)
+)
+
+/* script */
+__vue_exports__ = __webpack_require__(75)
+
+/* template */
+var __vue_template__ = __webpack_require__(80)
+__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+if (
+ typeof __vue_exports__.default === "object" ||
+ typeof __vue_exports__.default === "function"
+) {
+if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+__vue_options__ = __vue_exports__ = __vue_exports__.default
+}
+if (typeof __vue_options__ === "function") {
+ __vue_options__ = __vue_options__.options
+}
+__vue_options__.__file = "/Users/kw/github/weex-vue-examples/src/pages/examples/Examples.vue"
+__vue_options__.render = __vue_template__.render
+__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+__vue_options__._scopeId = "data-v-694b6655"
+__vue_options__.style = __vue_options__.style || {}
+__vue_styles__.forEach(function (module) {
+ for (var name in module) {
+ __vue_options__.style[name] = module[name]
+ }
+})
+if (typeof __register_static_styles__ === "function") {
+ __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+}
+
+module.exports = __vue_exports__
+
+
+/***/ }),
+/* 74 */
+/***/ (function(module, exports) {
+
+module.exports = {
+ "example-list": {
+ "width": "750",
+ "position": "absolute",
+ "top": 0,
+ "bottom": "100",
+ "backgroundColor": "#F5F5F5"
+ },
+ "group-info": {
+ "backgroundColor": "#FFFFFF"
+ },
+ "loading": {
+ "flex": 1,
+ "justifyContent": "center",
+ "alignItems": "center"
+ },
+ "loading-text": {
+ "fontSize": "60",
+ "color": "#BBBBBB"
+ },
+ "group-title": {
+ "width": "750",
+ "paddingTop": "20",
+ "paddingBottom": "35",
+ "fontSize": "40",
+ "textAlign": "center",
+ "color": "#00B4FF",
+ "backgroundImage": "linear-gradient(to bottom, #E3F5FB, #F9FEFF)"
+ },
+ "group-desc": {
+ "fontSize": "28",
+ "color": "#999999",
+ "marginTop": "10",
+ "marginLeft": "30",
+ "marginRight": "40"
+ },
+ "doc-link": {
+ "fontSize": "26",
+ "color": "rgba(0,189,255,0.6)",
+ "textAlign": "right",
+ "marginTop": "10",
+ "marginRight": "60",
+ "marginBottom": "20"
+ },
+ "section": {
+ "paddingBottom": "30"
+ },
+ "tabbar": {
+ "width": "750",
+ "position": "fixed",
+ "bottom": 0,
+ "height": "100",
+ "flexDirection": "row",
+ "justifyContent": "space-around",
+ "alignItems": "flex-end",
+ "backgroundColor": "#E6E6E6"
+ },
+ "tab-cell": {
+ "width": "186",
+ "height": "100",
+ "borderTopWidth": "2",
+ "borderTopStyle": "solid",
+ "borderTopColor": "#DDDDDD",
+ "justifyContent": "center",
+ "backgroundColor": "#FCFCFC",
+ "transitionProperty": "backgroundColor",
+ "transitionDuration": 200
+ },
+ "@TRANSITION": {
+ "tab-cell": {
+ "property": "backgroundColor",
+ "duration": 200
+ },
+ "tab-name": {
+ "property": "color,fontSize",
+ "duration": 100
+ }
+ },
+ "active-tab-cell": {
+ "borderTopColor": "rgba(0,189,255,0.8)",
+ "backgroundColor": "#BDECFF"
+ },
+ "tab-name": {
+ "textAlign": "center",
+ "color": "#666666",
+ "transitionProperty": "color,fontSize",
+ "transitionDuration": 100
+ },
+ "tab-name-zh": {
+ "fontSize": "36"
+ },
+ "tab-name-en": {
+ "fontSize": "30"
+ },
+ "active-tab-name-zh": {
+ "color": "#00B4FF",
+ "fontSize": "42",
+ "fontWeight": "bold"
+ },
+ "active-tab-name-en": {
+ "color": "#00B4FF",
+ "fontSize": "30",
+ "fontWeight": "bold"
+ }
+}
+
+/***/ }),
+/* 75 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _utils = __webpack_require__(14);
+
+var _ExampleScroller = __webpack_require__(76);
+
+var _ExampleScroller2 = _interopRequireDefault(_ExampleScroller);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+// import getExamples from '../../examples'
+// const exampleMap = getExamples({ scope: 'mobile', filterTODO: true })
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+var exampleMap = [];
+var useStorage = false;
+exports.default = {
+ components: { ExampleScroller: _ExampleScroller2.default },
+ data: function data() {
+ return {
+ navigationBarOptions: {
+ title: {
+ zh: '使用 Weex 的例子',
+ en: 'Weex Examples'
+ }
+ },
+ examples: exampleMap,
+ showLoading: false,
+ language: 'en',
+ activeTab: 'component',
+ activeGroup: 'div',
+ dict: {
+ READ_MORE: { en: 'read more', zh: '查看更多' }
+ }
+ };
+ },
+ beforeCreate: function beforeCreate() {
+ var _this = this;
+
+ // read examples from storage
+ (0, _utils.readExamples)(function (examples) {
+ _this.examples = examples;
+ if (WXEnvironment.platform.toLowerCase() !== 'web') {
+ useStorage = true;
+ }
+ });
+
+ // update examples to storage
+ (0, _utils.fetchExamples)(function (result) {
+ (0, _utils.saveExamples)(result);
+ if (!useStorage) {
+ _this.examples = result.examples;
+ }
+ });
+
+ setTimeout(function () {
+ _this.showLoading = true;
+ }, 400);
+ },
+
+ computed: {
+ tabs: function tabs() {
+ return this.examples.map(function (group) {
+ return {
+ type: group.type,
+ name: group.name
+ };
+ });
+ },
+ currentTab: function currentTab() {
+ var _this2 = this;
+
+ return this.examples.filter(function (tab) {
+ return tab.type === _this2.activeTab;
+ })[0];
+ }
+ },
+ methods: {
+ toggleTab: function toggleTab(tabType) {
+ this.activeTab = tabType;
+ this.activeGroup = this.currentTab.group[0].type;
+ }
+ }
+};
+
+/***/ }),
+/* 76 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var __vue_exports__, __vue_options__
+var __vue_styles__ = []
+
+/* styles */
+__vue_styles__.push(__webpack_require__(77)
+)
+
+/* script */
+__vue_exports__ = __webpack_require__(78)
+
+/* template */
+var __vue_template__ = __webpack_require__(79)
+__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+if (
+ typeof __vue_exports__.default === "object" ||
+ typeof __vue_exports__.default === "function"
+) {
+if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+__vue_options__ = __vue_exports__ = __vue_exports__.default
+}
+if (typeof __vue_options__ === "function") {
+ __vue_options__ = __vue_options__.options
+}
+__vue_options__.__file = "/Users/kw/github/weex-vue-examples/src/components/ExampleScroller.vue"
+__vue_options__.render = __vue_template__.render
+__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+__vue_options__._scopeId = "data-v-1f23e14a"
+__vue_options__.style = __vue_options__.style || {}
+__vue_styles__.forEach(function (module) {
+ for (var name in module) {
+ __vue_options__.style[name] = module[name]
+ }
+})
+if (typeof __register_static_styles__ === "function") {
+ __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+}
+
+module.exports = __vue_exports__
+
+
+/***/ }),
+/* 77 */
+/***/ (function(module, exports) {
+
+module.exports = {
+ "scroller": {
+ "flexDirection": "row",
+ "backgroundColor": "#FDFDFD",
+ "paddingTop": "20",
+ "paddingRight": "20",
+ "paddingBottom": "20",
+ "paddingLeft": "20",
+ "height": "600"
+ },
+ "example-box": {
+ "justifyContent": "space-between",
+ "alignItems": "center",
+ "paddingLeft": "6",
+ "paddingRight": "6",
+ "width": "310"
+ },
+ "screenshot": {
+ "width": "270",
+ "height": "422",
+ "borderWidth": "1",
+ "borderColor": "#DDDDDD"
+ },
+ "title": {
+ "height": "75",
+ "justifyContent": "center"
+ },
+ "title-text": {
+ "fontSize": "32",
+ "textAlign": "center",
+ "color": "#606060",
+ "paddingTop": "10",
+ "paddingBottom": "10"
+ },
+ "example-tips": {
+ "fontSize": "28",
+ "textAlign": "center",
+ "color": "#A5A5A5",
+ "paddingTop": "10",
+ "paddingBottom": "10"
+ }
+}
+
+/***/ }),
+/* 78 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _utils = __webpack_require__(14);
+
+exports.default = {
+ methods: { viewSource: _utils.viewSource },
+ props: {
+ language: {
+ type: String,
+ default: 'en'
+ },
+ examples: {
+ type: Array,
+ required: true
+ }
+ },
+ data: function data() {
+ return {
+ VIEW_SOURCE: {
+ en: 'view source',
+ zh: '查看源码'
+ }
+ };
+ }
+}; //
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/***/ }),
+/* 79 */
+/***/ (function(module, exports) {
+
+module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+ return _c('scroller', {
+ staticClass: ["scroller"],
+ attrs: {
+ "scrollDirection": "horizontal"
+ }
+ }, _vm._l((_vm.examples), function(example, i) {
+ return _c('div', {
+ key: i,
+ staticClass: ["example-box"]
+ }, [_c('div', {
+ staticClass: ["title"]
+ }, [_c('text', {
+ staticClass: ["title-text"]
+ }, [_vm._v(_vm._s(_vm.i18n(example.title)))])]), _c('div', {
+ staticStyle: {
+ alignItems: "center"
+ }
+ }, [_c('a', {
+ attrs: {
+ "href": _vm._f("url")(_vm.i18n(example.hash))
+ }
+ }, [_c('image', {
+ staticClass: ["screenshot"],
+ attrs: {
+ "src": _vm.i18n(example.screenshot)
+ }
+ })]), _c('text', {
+ staticClass: ["example-tips"],
+ on: {
+ "click": function($event) {
+ _vm.viewSource(_vm.i18n(example.hash))
+ }
+ }
+ }, [_vm._v(_vm._s(_vm.i18n(_vm.VIEW_SOURCE)))])])])
+ }))
+},staticRenderFns: []}
+module.exports.render._withStripped = true
+
+/***/ }),
+/* 80 */
+/***/ (function(module, exports) {
+
+module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+ return _c('div', {
+ staticClass: ["wrapper"]
+ }, [(_vm.examples && _vm.examples.length) ? _c('list', {
+ staticClass: ["example-list"]
+ }, [_vm._l((_vm.currentTab.group), function(exampleGroup) {
+ return [(exampleGroup && exampleGroup.title || exampleGroup.name) ? _c('cell', {
+ key: exampleGroup.type,
+ ref: exampleGroup.type,
+ refInFor: true,
+ staticClass: ["group-info"],
+ appendAsTree: true,
+ attrs: {
+ "append": "tree"
+ }
+ }, [_c('text', {
+ staticClass: ["group-title"]
+ }, [_vm._v(_vm._s(_vm.i18n(exampleGroup.title || exampleGroup.name)))]), (exampleGroup.desc) ? _c('text', {
+ staticClass: ["group-desc"]
+ }, [_vm._v(_vm._s(_vm.i18n(exampleGroup.desc)))]) : _vm._e(), (exampleGroup.desc && exampleGroup.docLink) ? _c('text', {
+ staticClass: ["doc-link"],
+ on: {
+ "click": function($event) {
+ _vm.jumpTo(_vm.i18n(exampleGroup.docLink))
+ }
+ }
+ }, [_vm._v(_vm._s(_vm.i18n(_vm.dict.READ_MORE)) + " >>")]) : _vm._e()]) : _vm._e(), _c('cell', {
+ key: exampleGroup.type + '-examples',
+ staticClass: ["section"],
+ appendAsTree: true,
+ attrs: {
+ "append": "tree"
+ }
+ }, [_c('example-scroller', {
+ attrs: {
+ "language": _vm.language,
+ "examples": exampleGroup.examples
+ }
+ })], 1)]
+ })], 2) : (_vm.showLoading) ? _c('div', {
+ staticClass: ["loading"]
+ }, [_c('text', {
+ staticClass: ["loading-text"]
+ }, [_vm._v("loading ...")])]) : _vm._e(), (_vm.tabs && _vm.tabs.length) ? _c('div', {
+ staticClass: ["tabbar"]
+ }, _vm._l((_vm.tabs), function(tab) {
+ return _c('div', {
+ key: tab.type,
+ class: ['tab-cell', tab.type === _vm.activeTab ? 'active-tab-cell' : ''],
+ on: {
+ "click": function($event) {
+ _vm.toggleTab(tab.type)
+ }
+ }
+ }, [_c('text', {
+ class: [
+ 'tab-name',
+ ("tab-name-" + _vm.language),
+ tab.type === _vm.activeTab ? ("active-tab-name-" + _vm.language) : ''
+ ]
+ }, [_vm._v(_vm._s(_vm.i18n(tab.name)))])])
+ })) : _vm._e()])
+},staticRenderFns: []}
+module.exports.render._withStripped = true
+
+/***/ })
+/******/ ]);
\ No newline at end of file
diff --git a/ios/bundlejs/guide.weex.js b/ios/bundlejs/guide.weex.js
new file mode 100644
index 0000000..aad4993
--- /dev/null
+++ b/ios/bundlejs/guide.weex.js
@@ -0,0 +1,3191 @@
+// { "framework": "Vue" }
+"use weex:vue";
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ // The module cache
+/******/ var installedModules = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/
+/******/ // Check if module is in cache
+/******/ if(installedModules[moduleId]) {
+/******/ return installedModules[moduleId].exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = installedModules[moduleId] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = true;
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = modules;
+/******/
+/******/ // expose the module cache
+/******/ __webpack_require__.c = installedModules;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, {
+/******/ configurable: false,
+/******/ enumerable: true,
+/******/ get: getter
+/******/ });
+/******/ }
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = 37);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ (function(module, exports) {
+
+// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
+var global = module.exports = typeof window != 'undefined' && window.Math == Math
+ ? window : typeof self != 'undefined' && self.Math == Math ? self
+ // eslint-disable-next-line no-new-func
+ : Function('return this')();
+if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef
+
+
+/***/ }),
+/* 1 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var anObject = __webpack_require__(10);
+var IE8_DOM_DEFINE = __webpack_require__(29);
+var toPrimitive = __webpack_require__(17);
+var dP = Object.defineProperty;
+
+exports.f = __webpack_require__(2) ? Object.defineProperty : function defineProperty(O, P, Attributes) {
+ anObject(O);
+ P = toPrimitive(P, true);
+ anObject(Attributes);
+ if (IE8_DOM_DEFINE) try {
+ return dP(O, P, Attributes);
+ } catch (e) { /* empty */ }
+ if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');
+ if ('value' in Attributes) O[P] = Attributes.value;
+ return O;
+};
+
+
+/***/ }),
+/* 2 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// Thank's IE8 for his funny defineProperty
+module.exports = !__webpack_require__(11)(function () {
+ return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;
+});
+
+
+/***/ }),
+/* 3 */
+/***/ (function(module, exports) {
+
+var hasOwnProperty = {}.hasOwnProperty;
+module.exports = function (it, key) {
+ return hasOwnProperty.call(it, key);
+};
+
+
+/***/ }),
+/* 4 */
+/***/ (function(module, exports) {
+
+var core = module.exports = { version: '2.5.7' };
+if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef
+
+
+/***/ }),
+/* 5 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var dP = __webpack_require__(1);
+var createDesc = __webpack_require__(12);
+module.exports = __webpack_require__(2) ? function (object, key, value) {
+ return dP.f(object, key, createDesc(1, value));
+} : function (object, key, value) {
+ object[key] = value;
+ return object;
+};
+
+
+/***/ }),
+/* 6 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// to indexed object, toObject with fallback for non-array-like ES3 strings
+var IObject = __webpack_require__(51);
+var defined = __webpack_require__(15);
+module.exports = function (it) {
+ return IObject(defined(it));
+};
+
+
+/***/ }),
+/* 7 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var store = __webpack_require__(21)('wks');
+var uid = __webpack_require__(13);
+var Symbol = __webpack_require__(0).Symbol;
+var USE_SYMBOL = typeof Symbol == 'function';
+
+var $exports = module.exports = function (name) {
+ return store[name] || (store[name] =
+ USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));
+};
+
+$exports.store = store;
+
+
+/***/ }),
+/* 8 */
+/***/ (function(module, exports) {
+
+module.exports = function (it) {
+ return typeof it === 'object' ? it !== null : typeof it === 'function';
+};
+
+
+/***/ }),
+/* 9 */
+/***/ (function(module, exports) {
+
+module.exports = true;
+
+
+/***/ }),
+/* 10 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var isObject = __webpack_require__(8);
+module.exports = function (it) {
+ if (!isObject(it)) throw TypeError(it + ' is not an object!');
+ return it;
+};
+
+
+/***/ }),
+/* 11 */
+/***/ (function(module, exports) {
+
+module.exports = function (exec) {
+ try {
+ return !!exec();
+ } catch (e) {
+ return true;
+ }
+};
+
+
+/***/ }),
+/* 12 */
+/***/ (function(module, exports) {
+
+module.exports = function (bitmap, value) {
+ return {
+ enumerable: !(bitmap & 1),
+ configurable: !(bitmap & 2),
+ writable: !(bitmap & 4),
+ value: value
+ };
+};
+
+
+/***/ }),
+/* 13 */
+/***/ (function(module, exports) {
+
+var id = 0;
+var px = Math.random();
+module.exports = function (key) {
+ return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
+};
+
+
+/***/ }),
+/* 14 */
+/***/ (function(module, exports) {
+
+// 7.1.4 ToInteger
+var ceil = Math.ceil;
+var floor = Math.floor;
+module.exports = function (it) {
+ return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
+};
+
+
+/***/ }),
+/* 15 */
+/***/ (function(module, exports) {
+
+// 7.2.1 RequireObjectCoercible(argument)
+module.exports = function (it) {
+ if (it == undefined) throw TypeError("Can't call method on " + it);
+ return it;
+};
+
+
+/***/ }),
+/* 16 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var global = __webpack_require__(0);
+var core = __webpack_require__(4);
+var ctx = __webpack_require__(47);
+var hide = __webpack_require__(5);
+var has = __webpack_require__(3);
+var PROTOTYPE = 'prototype';
+
+var $export = function (type, name, source) {
+ var IS_FORCED = type & $export.F;
+ var IS_GLOBAL = type & $export.G;
+ var IS_STATIC = type & $export.S;
+ var IS_PROTO = type & $export.P;
+ var IS_BIND = type & $export.B;
+ var IS_WRAP = type & $export.W;
+ var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});
+ var expProto = exports[PROTOTYPE];
+ var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];
+ var key, own, out;
+ if (IS_GLOBAL) source = name;
+ for (key in source) {
+ // contains in native
+ own = !IS_FORCED && target && target[key] !== undefined;
+ if (own && has(exports, key)) continue;
+ // export native or passed
+ out = own ? target[key] : source[key];
+ // prevent global pollution for namespaces
+ exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]
+ // bind timers to global for call from export context
+ : IS_BIND && own ? ctx(out, global)
+ // wrap global constructors for prevent change them in library
+ : IS_WRAP && target[key] == out ? (function (C) {
+ var F = function (a, b, c) {
+ if (this instanceof C) {
+ switch (arguments.length) {
+ case 0: return new C();
+ case 1: return new C(a);
+ case 2: return new C(a, b);
+ } return new C(a, b, c);
+ } return C.apply(this, arguments);
+ };
+ F[PROTOTYPE] = C[PROTOTYPE];
+ return F;
+ // make static versions for prototype methods
+ })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
+ // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%
+ if (IS_PROTO) {
+ (exports.virtual || (exports.virtual = {}))[key] = out;
+ // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%
+ if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);
+ }
+ }
+};
+// type bitmap
+$export.F = 1; // forced
+$export.G = 2; // global
+$export.S = 4; // static
+$export.P = 8; // proto
+$export.B = 16; // bind
+$export.W = 32; // wrap
+$export.U = 64; // safe
+$export.R = 128; // real proto method for `library`
+module.exports = $export;
+
+
+/***/ }),
+/* 17 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 7.1.1 ToPrimitive(input [, PreferredType])
+var isObject = __webpack_require__(8);
+// instead of the ES6 spec version, we didn't implement @@toPrimitive case
+// and the second argument - flag - preferred type is a string
+module.exports = function (it, S) {
+ if (!isObject(it)) return it;
+ var fn, val;
+ if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
+ if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;
+ if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
+ throw TypeError("Can't convert object to primitive value");
+};
+
+
+/***/ }),
+/* 18 */
+/***/ (function(module, exports) {
+
+module.exports = {};
+
+
+/***/ }),
+/* 19 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 19.1.2.14 / 15.2.3.14 Object.keys(O)
+var $keys = __webpack_require__(33);
+var enumBugKeys = __webpack_require__(22);
+
+module.exports = Object.keys || function keys(O) {
+ return $keys(O, enumBugKeys);
+};
+
+
+/***/ }),
+/* 20 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var shared = __webpack_require__(21)('keys');
+var uid = __webpack_require__(13);
+module.exports = function (key) {
+ return shared[key] || (shared[key] = uid(key));
+};
+
+
+/***/ }),
+/* 21 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var core = __webpack_require__(4);
+var global = __webpack_require__(0);
+var SHARED = '__core-js_shared__';
+var store = global[SHARED] || (global[SHARED] = {});
+
+(module.exports = function (key, value) {
+ return store[key] || (store[key] = value !== undefined ? value : {});
+})('versions', []).push({
+ version: core.version,
+ mode: __webpack_require__(9) ? 'pure' : 'global',
+ copyright: '© 2018 Denis Pushkarev (zloirock.ru)'
+});
+
+
+/***/ }),
+/* 22 */
+/***/ (function(module, exports) {
+
+// IE 8- don't enum bug keys
+module.exports = (
+ 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'
+).split(',');
+
+
+/***/ }),
+/* 23 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var def = __webpack_require__(1).f;
+var has = __webpack_require__(3);
+var TAG = __webpack_require__(7)('toStringTag');
+
+module.exports = function (it, tag, stat) {
+ if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });
+};
+
+
+/***/ }),
+/* 24 */
+/***/ (function(module, exports, __webpack_require__) {
+
+exports.f = __webpack_require__(7);
+
+
+/***/ }),
+/* 25 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var global = __webpack_require__(0);
+var core = __webpack_require__(4);
+var LIBRARY = __webpack_require__(9);
+var wksExt = __webpack_require__(24);
+var defineProperty = __webpack_require__(1).f;
+module.exports = function (name) {
+ var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});
+ if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });
+};
+
+
+/***/ }),
+/* 26 */
+/***/ (function(module, exports) {
+
+exports.f = {}.propertyIsEnumerable;
+
+
+/***/ }),
+/* 27 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.fetchNews = exports.fetchDoodle = exports.readAbout = exports.saveAbout = exports.fetchAbout = exports.readGuide = exports.saveGuide = exports.fetchGuide = exports.readExamples = exports.saveExamples = exports.fetchExamples = undefined;
+
+var _stringify = __webpack_require__(40);
+
+var _stringify2 = _interopRequireDefault(_stringify);
+
+var _typeof2 = __webpack_require__(42);
+
+var _typeof3 = _interopRequireDefault(_typeof2);
+
+exports.createLink = createLink;
+exports.createURL = createURL;
+exports.i18n = i18n;
+exports.parseLanguage = parseLanguage;
+exports.setLanguage = setLanguage;
+exports.clearStorageLanguage = clearStorageLanguage;
+exports.getStorageLanguage = getStorageLanguage;
+exports.getSystemLanguage = getSystemLanguage;
+exports.getLanguage = getLanguage;
+exports.jumpTo = jumpTo;
+exports.viewSource = viewSource;
+exports.setTitleBar = setTitleBar;
+exports.fetchData = fetchData;
+exports.saveData = saveData;
+exports.readData = readData;
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var stream = weex.requireModule('stream');
+var storage = weex.requireModule('storage');
+var navigator = weex.requireModule('navigator');
+
+var encoder = typeof encodeURIComponent === 'function' ? encodeURIComponent : typeof encodeURI === 'function' ? encodeURI : function (x) {
+ return x;
+};
+
+function encodeParams(params) {
+ if (!params || (typeof params === 'undefined' ? 'undefined' : (0, _typeof3.default)(params)) !== 'object') {
+ return '';
+ }
+ var array = [];
+ for (var key in params) {
+ if (typeof params[key] === 'string') {
+ array.push(encoder(key) + '=' + encoder(params[key]));
+ }
+ }
+ return array.join('&');
+}
+
+function createLink(name) {
+ var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+ var args = [];
+ for (var key in params) {
+ if (typeof params[key] === 'string') {
+ args.push(encoder(key) + '=' + encoder(params[key]));
+ }
+ }
+ if (WXEnvironment.platform === 'Web') {
+ args.unshift('page=' + name + '.web.js');
+ return '/?' + args.join('&');
+ }
+ var base = getBaseURL();
+ return '' + base + name + '.weex.js' + (args.length ? '?' + args.join('&') : '');
+}
+
+function createURL(hash, params) {
+ if (WXEnvironment.platform === 'Web') {
+ return 'http://dotwe.org/raw/htmlVue/' + hash;
+ }
+ var url = 'http://dotwe.org/raw/dist/' + hash + '.bundle.wx';
+ var paramString = encodeParams(params);
+ if (WXEnvironment.appName === 'TB') {
+ return url + '?_wx_tpl=' + url + '&' + paramString;
+ }
+ if (WXEnvironment.appName === 'WXSample') {
+ return url + '?' + paramString;
+ }
+ return url + '?wx_weex=true&' + paramString;
+}
+
+function getBaseURL() {
+ var bundleUrl = weex.config.bundleUrl;
+ var isAndroidAssets = bundleUrl.indexOf('your_current_IP') >= 0 || bundleUrl.indexOf('file://assets/') >= 0;
+ var isiOSAssets = bundleUrl.indexOf('file:///') >= 0 && bundleUrl.indexOf('WeexDemo.app') > 0;
+ if (isAndroidAssets) {
+ return 'file://assets/';
+ } else if (isiOSAssets) {
+ // file:///var/mobile/Containers/Bundle/Application/{id}/WeexDemo.app/
+ // file:///Users/{user}/Library/Developer/CoreSimulator/Devices/{id}/data/Containers/Bundle/Application/{id}/WeexDemo.app/
+ return bundleUrl.substring(0, bundleUrl.lastIndexOf('/') + 1);
+ }
+ return '';
+}
+
+function i18n(text, language) {
+ if (typeof text === 'string') {
+ return text;
+ }
+ if (Object.prototype.toString.call(text) === '[object Object]') {
+ var lang = this && this.language || language || 'en';
+ return text[lang];
+ }
+}
+
+var supportedLanguageRE = /(en|zh)\_?\w*/i;
+function parseLanguage(language) {
+ var match = supportedLanguageRE.exec(language + '');
+ if (match && match[1]) {
+ return match[1];
+ }
+ return '';
+}
+
+function setLanguage(language) {
+ var lang = parseLanguage(language);
+ if (lang) {
+ storage.setItem('WEEX_PLAYGROUND_LANGUAGE', lang);
+ }
+}
+
+function clearStorageLanguage() {
+ storage.removeItem('WEEX_PLAYGROUND_LANGUAGE');
+}
+
+function getStorageLanguage(done) {
+ var fail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};
+
+ if (!(typeof done === 'undefined' ? 'undefined' : (0, _typeof3.default)(done)) === 'function') {
+ return;
+ }
+ try {
+ storage.getItem('WEEX_PLAYGROUND_LANGUAGE', function (event) {
+ if (event.result === 'success') {
+ var lang = parseLanguage(event.data);
+ lang ? done(lang) : fail();
+ } else {
+ fail(event);
+ }
+ });
+ } catch (err) {
+ fail(err);
+ }
+}
+
+function getSystemLanguage(done) {
+ var fail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};
+
+ if (!(typeof done === 'undefined' ? 'undefined' : (0, _typeof3.default)(done)) === 'function') {
+ return;
+ }
+ if (WXEnvironment.platform.toLowerCase() === 'web') {
+ var lang = parseLanguage(window.navigator.language);
+ lang ? done(lang) : fail();
+ } else {
+ try {
+ var locale = weex.requireModule('locale') || weex.requireModule('local');
+ var useSync = false;
+ var resSync = locale.getLanguage(function (language) {
+ var lang = parseLanguage(language);
+ if (lang) {
+ useSync || done(lang);
+ } else {
+ fail();
+ }
+ });
+ var langSync = parseLanguage(resSync);
+ if (langSync) {
+ useSync = true;
+ done(langSync);
+ } else {
+ fail();
+ }
+ } catch (e) {
+ fail(e);
+ }
+ }
+}
+
+var languageRE = /.+[\?\&]{1}language=([\d\w]+)[\?\&]?.*/i;
+function getLanguage() {
+ var done = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {};
+
+ var match = languageRE.exec(weex.config.bundleUrl || '');
+ var lang = parseLanguage(match && match[1]);
+ if (lang) {
+ done(lang);
+ } else {
+ getStorageLanguage(done, function () {
+ getSystemLanguage(done, function () {
+ done('en');
+ });
+ });
+ }
+}
+
+function jumpTo(url, title, lang) {
+ getLanguage(function (language) {
+ storage.setItem('CURRENT_DOCUMENT_URL', i18n(url, lang || language));
+ navigator.push({
+ url: createURL('bf0305c14b511b24a4e616f53926432b', { language: language, title: i18n(title, lang || language) })
+ });
+ });
+}
+
+function viewSource(hash) {
+ getLanguage(function (language) {
+ navigator.push({
+ url: createURL('f6ce29faf686eabc38b410bf4828fa5a', { hash: hash, language: language })
+ });
+ });
+}
+
+function setTitleBar(options) {
+ var language = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'en';
+
+ if (Object.prototype.toString.apply(options) !== '[object Object]') {
+ return;
+ }
+ var titleBar = weex.requireModule('titleBar');
+ if (options.color || options.backgroundColor) {
+ try {
+ titleBar.setStyle({
+ foregroundColor: options.color || '#FFFFFF',
+ backgroundColor: options.backgroundColor || '#00B4FF'
+ });
+ } catch (e) {}
+ }
+ var title = i18n(options.title, language);
+ if (title) {
+ try {
+ titleBar.setTitle(title);
+ } catch (e) {}
+ }
+}
+
+var storageKeys = {
+ doodle: 'WEEX_PLAYGROUND_APP_DOODLE',
+ guide: 'WEEX_PLAYGROUND_APP_GUIDE',
+ examples: 'WEEX_PLAYGROUND_APP_EXAMPLES',
+ news: 'WEEX_PLAYGROUND_APP_NEWS',
+ about: 'WEEX_PLAYGROUND_APP_ABOUT'
+};
+function fetchData(name) {
+ var done = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};
+ var fail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {};
+
+ try {
+ stream.fetch({
+ url: 'http://dotwe.org/query/weex-playground-app',
+ method: 'post',
+ headers: {
+ 'Content-Type': 'application/x-www-form-urlencoded'
+ },
+ type: 'json',
+ body: 'name=' + name
+ }, function (res) {
+ if (res.ok && res.data && res.data.success) {
+ done(res.data);
+ } else {
+ fail(res);
+ }
+ });
+ } catch (err) {
+ fail(err);
+ }
+}
+function saveData(name, result) {
+ var key = storageKeys[name];
+ if (!key) return;
+ if (result && (typeof result === 'undefined' ? 'undefined' : (0, _typeof3.default)(result)) === 'object') {
+ result.timestamp = Date.now();
+ storage.setItem(key, (0, _stringify2.default)(result));
+ }
+}
+function readData(name) {
+ var done = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};
+ var fail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {};
+
+ var key = storageKeys[name];
+ if (!key) return fail();
+ try {
+ storage.getItem(key, function (event) {
+ if (event.result === 'success') {
+ var result = JSON.parse(event.data);
+ if (result && Array.isArray(result[name])) {
+ return done(result[name]);
+ }
+ }
+ fail(event);
+ });
+ } catch (e) {
+ fail(e);
+ }
+}
+
+var fetchExamples = exports.fetchExamples = function fetchExamples() {
+ for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+
+ return fetchData.apply(undefined, ['examples'].concat(args));
+};
+var saveExamples = exports.saveExamples = function saveExamples() {
+ for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
+ args[_key2] = arguments[_key2];
+ }
+
+ return saveData.apply(undefined, ['examples'].concat(args));
+};
+var readExamples = exports.readExamples = function readExamples() {
+ for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
+ args[_key3] = arguments[_key3];
+ }
+
+ return readData.apply(undefined, ['examples'].concat(args));
+};
+
+var fetchGuide = exports.fetchGuide = function fetchGuide() {
+ for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
+ args[_key4] = arguments[_key4];
+ }
+
+ return fetchData.apply(undefined, ['guide'].concat(args));
+};
+var saveGuide = exports.saveGuide = function saveGuide() {
+ for (var _len5 = arguments.length, args = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
+ args[_key5] = arguments[_key5];
+ }
+
+ return saveData.apply(undefined, ['guide'].concat(args));
+};
+var readGuide = exports.readGuide = function readGuide() {
+ for (var _len6 = arguments.length, args = Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
+ args[_key6] = arguments[_key6];
+ }
+
+ return readData.apply(undefined, ['guide'].concat(args));
+};
+
+var fetchAbout = exports.fetchAbout = function fetchAbout() {
+ for (var _len7 = arguments.length, args = Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {
+ args[_key7] = arguments[_key7];
+ }
+
+ return fetchData.apply(undefined, ['about'].concat(args));
+};
+var saveAbout = exports.saveAbout = function saveAbout() {
+ for (var _len8 = arguments.length, args = Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {
+ args[_key8] = arguments[_key8];
+ }
+
+ return saveData.apply(undefined, ['about'].concat(args));
+};
+var readAbout = exports.readAbout = function readAbout() {
+ for (var _len9 = arguments.length, args = Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {
+ args[_key9] = arguments[_key9];
+ }
+
+ return readData.apply(undefined, ['about'].concat(args));
+};
+
+var fetchDoodle = exports.fetchDoodle = function fetchDoodle() {
+ for (var _len10 = arguments.length, args = Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {
+ args[_key10] = arguments[_key10];
+ }
+
+ return fetchData.apply(undefined, ['doodle'].concat(args));
+};
+var fetchNews = exports.fetchNews = function fetchNews() {
+ for (var _len11 = arguments.length, args = Array(_len11), _key11 = 0; _key11 < _len11; _key11++) {
+ args[_key11] = arguments[_key11];
+ }
+
+ return fetchData.apply(undefined, ['news'].concat(args));
+};
+
+/***/ }),
+/* 28 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var LIBRARY = __webpack_require__(9);
+var $export = __webpack_require__(16);
+var redefine = __webpack_require__(31);
+var hide = __webpack_require__(5);
+var Iterators = __webpack_require__(18);
+var $iterCreate = __webpack_require__(49);
+var setToStringTag = __webpack_require__(23);
+var getPrototypeOf = __webpack_require__(56);
+var ITERATOR = __webpack_require__(7)('iterator');
+var BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`
+var FF_ITERATOR = '@@iterator';
+var KEYS = 'keys';
+var VALUES = 'values';
+
+var returnThis = function () { return this; };
+
+module.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {
+ $iterCreate(Constructor, NAME, next);
+ var getMethod = function (kind) {
+ if (!BUGGY && kind in proto) return proto[kind];
+ switch (kind) {
+ case KEYS: return function keys() { return new Constructor(this, kind); };
+ case VALUES: return function values() { return new Constructor(this, kind); };
+ } return function entries() { return new Constructor(this, kind); };
+ };
+ var TAG = NAME + ' Iterator';
+ var DEF_VALUES = DEFAULT == VALUES;
+ var VALUES_BUG = false;
+ var proto = Base.prototype;
+ var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];
+ var $default = $native || getMethod(DEFAULT);
+ var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;
+ var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;
+ var methods, key, IteratorPrototype;
+ // Fix native
+ if ($anyNative) {
+ IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));
+ if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {
+ // Set @@toStringTag to native iterators
+ setToStringTag(IteratorPrototype, TAG, true);
+ // fix for some old engines
+ if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);
+ }
+ }
+ // fix Array#{values, @@iterator}.name in V8 / FF
+ if (DEF_VALUES && $native && $native.name !== VALUES) {
+ VALUES_BUG = true;
+ $default = function values() { return $native.call(this); };
+ }
+ // Define iterator
+ if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {
+ hide(proto, ITERATOR, $default);
+ }
+ // Plug for library
+ Iterators[NAME] = $default;
+ Iterators[TAG] = returnThis;
+ if (DEFAULT) {
+ methods = {
+ values: DEF_VALUES ? $default : getMethod(VALUES),
+ keys: IS_SET ? $default : getMethod(KEYS),
+ entries: $entries
+ };
+ if (FORCED) for (key in methods) {
+ if (!(key in proto)) redefine(proto, key, methods[key]);
+ } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);
+ }
+ return methods;
+};
+
+
+/***/ }),
+/* 29 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = !__webpack_require__(2) && !__webpack_require__(11)(function () {
+ return Object.defineProperty(__webpack_require__(30)('div'), 'a', { get: function () { return 7; } }).a != 7;
+});
+
+
+/***/ }),
+/* 30 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var isObject = __webpack_require__(8);
+var document = __webpack_require__(0).document;
+// typeof document.createElement is 'object' in old IE
+var is = isObject(document) && isObject(document.createElement);
+module.exports = function (it) {
+ return is ? document.createElement(it) : {};
+};
+
+
+/***/ }),
+/* 31 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = __webpack_require__(5);
+
+
+/***/ }),
+/* 32 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
+var anObject = __webpack_require__(10);
+var dPs = __webpack_require__(50);
+var enumBugKeys = __webpack_require__(22);
+var IE_PROTO = __webpack_require__(20)('IE_PROTO');
+var Empty = function () { /* empty */ };
+var PROTOTYPE = 'prototype';
+
+// Create object with fake `null` prototype: use iframe Object with cleared prototype
+var createDict = function () {
+ // Thrash, waste and sodomy: IE GC bug
+ var iframe = __webpack_require__(30)('iframe');
+ var i = enumBugKeys.length;
+ var lt = '<';
+ var gt = '>';
+ var iframeDocument;
+ iframe.style.display = 'none';
+ __webpack_require__(55).appendChild(iframe);
+ iframe.src = 'javascript:'; // eslint-disable-line no-script-url
+ // createDict = iframe.contentWindow.Object;
+ // html.removeChild(iframe);
+ iframeDocument = iframe.contentWindow.document;
+ iframeDocument.open();
+ iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);
+ iframeDocument.close();
+ createDict = iframeDocument.F;
+ while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];
+ return createDict();
+};
+
+module.exports = Object.create || function create(O, Properties) {
+ var result;
+ if (O !== null) {
+ Empty[PROTOTYPE] = anObject(O);
+ result = new Empty();
+ Empty[PROTOTYPE] = null;
+ // add "__proto__" for Object.getPrototypeOf polyfill
+ result[IE_PROTO] = O;
+ } else result = createDict();
+ return Properties === undefined ? result : dPs(result, Properties);
+};
+
+
+/***/ }),
+/* 33 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var has = __webpack_require__(3);
+var toIObject = __webpack_require__(6);
+var arrayIndexOf = __webpack_require__(52)(false);
+var IE_PROTO = __webpack_require__(20)('IE_PROTO');
+
+module.exports = function (object, names) {
+ var O = toIObject(object);
+ var i = 0;
+ var result = [];
+ var key;
+ for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);
+ // Don't enum bug & hidden keys
+ while (names.length > i) if (has(O, key = names[i++])) {
+ ~arrayIndexOf(result, key) || result.push(key);
+ }
+ return result;
+};
+
+
+/***/ }),
+/* 34 */
+/***/ (function(module, exports) {
+
+var toString = {}.toString;
+
+module.exports = function (it) {
+ return toString.call(it).slice(8, -1);
+};
+
+
+/***/ }),
+/* 35 */
+/***/ (function(module, exports) {
+
+exports.f = Object.getOwnPropertySymbols;
+
+
+/***/ }),
+/* 36 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)
+var $keys = __webpack_require__(33);
+var hiddenKeys = __webpack_require__(22).concat('length', 'prototype');
+
+exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
+ return $keys(O, hiddenKeys);
+};
+
+
+/***/ }),
+/* 37 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+__webpack_require__(38);
+
+var _Guide = __webpack_require__(73);
+
+var _Guide2 = _interopRequireDefault(_Guide);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+// show title bar
+try {
+ var titleBar = weex.requireModule('titleBar');
+ titleBar.showTitleBar(true);
+} catch (e) {}
+
+_Guide2.default.el = '#root';
+new Vue(_Guide2.default);
+
+/***/ }),
+/* 38 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _mixin = __webpack_require__(39);
+
+var _mixin2 = _interopRequireDefault(_mixin);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+// use shared mixins
+Vue.mixin(_mixin2.default);
+
+/***/ }),
+/* 39 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _index = __webpack_require__(27);
+
+var utils = _interopRequireWildcard(_index);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+var storage = weex.requireModule('storage');
+
+exports.default = {
+ filters: {
+ i18n: utils.i18n,
+ url: utils.createURL,
+ link: utils.createLink
+ },
+ methods: {
+ createLink: utils.createLink,
+ createURL: utils.createURL,
+ i18n: utils.i18n,
+ getLanguage: utils.getLanguage,
+ fetchData: utils.fetchData,
+ saveData: utils.saveData,
+ readData: utils.readData,
+ jumpTo: utils.jumpTo
+ },
+ created: function created() {
+ var _this = this;
+
+ // get and set language
+ utils.getLanguage(function (language) {
+ _this.language = language;
+ utils.setTitleBar(_this.navigationBarOptions, language);
+ });
+
+ // listen to the language change event
+ var channel = new BroadcastChannel('language');
+ channel.onmessage = function (event) {
+ if (event.data && event.data.language) {
+ _this.language = event.data.language;
+ }
+ };
+ },
+ beforeDestroy: function beforeDestroy() {
+ storage.removeItem('CURRENT_DOCUMENT_URL');
+ storage.removeItem('CURRENT_SOURCE_HASH');
+ }
+};
+
+/***/ }),
+/* 40 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = { "default": __webpack_require__(41), __esModule: true };
+
+/***/ }),
+/* 41 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var core = __webpack_require__(4);
+var $JSON = core.JSON || (core.JSON = { stringify: JSON.stringify });
+module.exports = function stringify(it) { // eslint-disable-line no-unused-vars
+ return $JSON.stringify.apply($JSON, arguments);
+};
+
+
+/***/ }),
+/* 42 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+exports.__esModule = true;
+
+var _iterator = __webpack_require__(43);
+
+var _iterator2 = _interopRequireDefault(_iterator);
+
+var _symbol = __webpack_require__(62);
+
+var _symbol2 = _interopRequireDefault(_symbol);
+
+var _typeof = typeof _symbol2.default === "function" && typeof _iterator2.default === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj; };
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+exports.default = typeof _symbol2.default === "function" && _typeof(_iterator2.default) === "symbol" ? function (obj) {
+ return typeof obj === "undefined" ? "undefined" : _typeof(obj);
+} : function (obj) {
+ return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof(obj);
+};
+
+/***/ }),
+/* 43 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = { "default": __webpack_require__(44), __esModule: true };
+
+/***/ }),
+/* 44 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(45);
+__webpack_require__(58);
+module.exports = __webpack_require__(24).f('iterator');
+
+
+/***/ }),
+/* 45 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var $at = __webpack_require__(46)(true);
+
+// 21.1.3.27 String.prototype[@@iterator]()
+__webpack_require__(28)(String, 'String', function (iterated) {
+ this._t = String(iterated); // target
+ this._i = 0; // next index
+// 21.1.5.2.1 %StringIteratorPrototype%.next()
+}, function () {
+ var O = this._t;
+ var index = this._i;
+ var point;
+ if (index >= O.length) return { value: undefined, done: true };
+ point = $at(O, index);
+ this._i += point.length;
+ return { value: point, done: false };
+});
+
+
+/***/ }),
+/* 46 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var toInteger = __webpack_require__(14);
+var defined = __webpack_require__(15);
+// true -> String#at
+// false -> String#codePointAt
+module.exports = function (TO_STRING) {
+ return function (that, pos) {
+ var s = String(defined(that));
+ var i = toInteger(pos);
+ var l = s.length;
+ var a, b;
+ if (i < 0 || i >= l) return TO_STRING ? '' : undefined;
+ a = s.charCodeAt(i);
+ return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff
+ ? TO_STRING ? s.charAt(i) : a
+ : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;
+ };
+};
+
+
+/***/ }),
+/* 47 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// optional / simple context binding
+var aFunction = __webpack_require__(48);
+module.exports = function (fn, that, length) {
+ aFunction(fn);
+ if (that === undefined) return fn;
+ switch (length) {
+ case 1: return function (a) {
+ return fn.call(that, a);
+ };
+ case 2: return function (a, b) {
+ return fn.call(that, a, b);
+ };
+ case 3: return function (a, b, c) {
+ return fn.call(that, a, b, c);
+ };
+ }
+ return function (/* ...args */) {
+ return fn.apply(that, arguments);
+ };
+};
+
+
+/***/ }),
+/* 48 */
+/***/ (function(module, exports) {
+
+module.exports = function (it) {
+ if (typeof it != 'function') throw TypeError(it + ' is not a function!');
+ return it;
+};
+
+
+/***/ }),
+/* 49 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var create = __webpack_require__(32);
+var descriptor = __webpack_require__(12);
+var setToStringTag = __webpack_require__(23);
+var IteratorPrototype = {};
+
+// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
+__webpack_require__(5)(IteratorPrototype, __webpack_require__(7)('iterator'), function () { return this; });
+
+module.exports = function (Constructor, NAME, next) {
+ Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });
+ setToStringTag(Constructor, NAME + ' Iterator');
+};
+
+
+/***/ }),
+/* 50 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var dP = __webpack_require__(1);
+var anObject = __webpack_require__(10);
+var getKeys = __webpack_require__(19);
+
+module.exports = __webpack_require__(2) ? Object.defineProperties : function defineProperties(O, Properties) {
+ anObject(O);
+ var keys = getKeys(Properties);
+ var length = keys.length;
+ var i = 0;
+ var P;
+ while (length > i) dP.f(O, P = keys[i++], Properties[P]);
+ return O;
+};
+
+
+/***/ }),
+/* 51 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// fallback for non-array-like ES3 and non-enumerable old V8 strings
+var cof = __webpack_require__(34);
+// eslint-disable-next-line no-prototype-builtins
+module.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {
+ return cof(it) == 'String' ? it.split('') : Object(it);
+};
+
+
+/***/ }),
+/* 52 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// false -> Array#indexOf
+// true -> Array#includes
+var toIObject = __webpack_require__(6);
+var toLength = __webpack_require__(53);
+var toAbsoluteIndex = __webpack_require__(54);
+module.exports = function (IS_INCLUDES) {
+ return function ($this, el, fromIndex) {
+ var O = toIObject($this);
+ var length = toLength(O.length);
+ var index = toAbsoluteIndex(fromIndex, length);
+ var value;
+ // Array#includes uses SameValueZero equality algorithm
+ // eslint-disable-next-line no-self-compare
+ if (IS_INCLUDES && el != el) while (length > index) {
+ value = O[index++];
+ // eslint-disable-next-line no-self-compare
+ if (value != value) return true;
+ // Array#indexOf ignores holes, Array#includes - not
+ } else for (;length > index; index++) if (IS_INCLUDES || index in O) {
+ if (O[index] === el) return IS_INCLUDES || index || 0;
+ } return !IS_INCLUDES && -1;
+ };
+};
+
+
+/***/ }),
+/* 53 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 7.1.15 ToLength
+var toInteger = __webpack_require__(14);
+var min = Math.min;
+module.exports = function (it) {
+ return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
+};
+
+
+/***/ }),
+/* 54 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var toInteger = __webpack_require__(14);
+var max = Math.max;
+var min = Math.min;
+module.exports = function (index, length) {
+ index = toInteger(index);
+ return index < 0 ? max(index + length, 0) : min(index, length);
+};
+
+
+/***/ }),
+/* 55 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var document = __webpack_require__(0).document;
+module.exports = document && document.documentElement;
+
+
+/***/ }),
+/* 56 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)
+var has = __webpack_require__(3);
+var toObject = __webpack_require__(57);
+var IE_PROTO = __webpack_require__(20)('IE_PROTO');
+var ObjectProto = Object.prototype;
+
+module.exports = Object.getPrototypeOf || function (O) {
+ O = toObject(O);
+ if (has(O, IE_PROTO)) return O[IE_PROTO];
+ if (typeof O.constructor == 'function' && O instanceof O.constructor) {
+ return O.constructor.prototype;
+ } return O instanceof Object ? ObjectProto : null;
+};
+
+
+/***/ }),
+/* 57 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 7.1.13 ToObject(argument)
+var defined = __webpack_require__(15);
+module.exports = function (it) {
+ return Object(defined(it));
+};
+
+
+/***/ }),
+/* 58 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(59);
+var global = __webpack_require__(0);
+var hide = __webpack_require__(5);
+var Iterators = __webpack_require__(18);
+var TO_STRING_TAG = __webpack_require__(7)('toStringTag');
+
+var DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +
+ 'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +
+ 'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +
+ 'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +
+ 'TextTrackList,TouchList').split(',');
+
+for (var i = 0; i < DOMIterables.length; i++) {
+ var NAME = DOMIterables[i];
+ var Collection = global[NAME];
+ var proto = Collection && Collection.prototype;
+ if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);
+ Iterators[NAME] = Iterators.Array;
+}
+
+
+/***/ }),
+/* 59 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var addToUnscopables = __webpack_require__(60);
+var step = __webpack_require__(61);
+var Iterators = __webpack_require__(18);
+var toIObject = __webpack_require__(6);
+
+// 22.1.3.4 Array.prototype.entries()
+// 22.1.3.13 Array.prototype.keys()
+// 22.1.3.29 Array.prototype.values()
+// 22.1.3.30 Array.prototype[@@iterator]()
+module.exports = __webpack_require__(28)(Array, 'Array', function (iterated, kind) {
+ this._t = toIObject(iterated); // target
+ this._i = 0; // next index
+ this._k = kind; // kind
+// 22.1.5.2.1 %ArrayIteratorPrototype%.next()
+}, function () {
+ var O = this._t;
+ var kind = this._k;
+ var index = this._i++;
+ if (!O || index >= O.length) {
+ this._t = undefined;
+ return step(1);
+ }
+ if (kind == 'keys') return step(0, index);
+ if (kind == 'values') return step(0, O[index]);
+ return step(0, [index, O[index]]);
+}, 'values');
+
+// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)
+Iterators.Arguments = Iterators.Array;
+
+addToUnscopables('keys');
+addToUnscopables('values');
+addToUnscopables('entries');
+
+
+/***/ }),
+/* 60 */
+/***/ (function(module, exports) {
+
+module.exports = function () { /* empty */ };
+
+
+/***/ }),
+/* 61 */
+/***/ (function(module, exports) {
+
+module.exports = function (done, value) {
+ return { value: value, done: !!done };
+};
+
+
+/***/ }),
+/* 62 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = { "default": __webpack_require__(63), __esModule: true };
+
+/***/ }),
+/* 63 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(64);
+__webpack_require__(70);
+__webpack_require__(71);
+__webpack_require__(72);
+module.exports = __webpack_require__(4).Symbol;
+
+
+/***/ }),
+/* 64 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+// ECMAScript 6 symbols shim
+var global = __webpack_require__(0);
+var has = __webpack_require__(3);
+var DESCRIPTORS = __webpack_require__(2);
+var $export = __webpack_require__(16);
+var redefine = __webpack_require__(31);
+var META = __webpack_require__(65).KEY;
+var $fails = __webpack_require__(11);
+var shared = __webpack_require__(21);
+var setToStringTag = __webpack_require__(23);
+var uid = __webpack_require__(13);
+var wks = __webpack_require__(7);
+var wksExt = __webpack_require__(24);
+var wksDefine = __webpack_require__(25);
+var enumKeys = __webpack_require__(66);
+var isArray = __webpack_require__(67);
+var anObject = __webpack_require__(10);
+var isObject = __webpack_require__(8);
+var toIObject = __webpack_require__(6);
+var toPrimitive = __webpack_require__(17);
+var createDesc = __webpack_require__(12);
+var _create = __webpack_require__(32);
+var gOPNExt = __webpack_require__(68);
+var $GOPD = __webpack_require__(69);
+var $DP = __webpack_require__(1);
+var $keys = __webpack_require__(19);
+var gOPD = $GOPD.f;
+var dP = $DP.f;
+var gOPN = gOPNExt.f;
+var $Symbol = global.Symbol;
+var $JSON = global.JSON;
+var _stringify = $JSON && $JSON.stringify;
+var PROTOTYPE = 'prototype';
+var HIDDEN = wks('_hidden');
+var TO_PRIMITIVE = wks('toPrimitive');
+var isEnum = {}.propertyIsEnumerable;
+var SymbolRegistry = shared('symbol-registry');
+var AllSymbols = shared('symbols');
+var OPSymbols = shared('op-symbols');
+var ObjectProto = Object[PROTOTYPE];
+var USE_NATIVE = typeof $Symbol == 'function';
+var QObject = global.QObject;
+// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173
+var setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;
+
+// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687
+var setSymbolDesc = DESCRIPTORS && $fails(function () {
+ return _create(dP({}, 'a', {
+ get: function () { return dP(this, 'a', { value: 7 }).a; }
+ })).a != 7;
+}) ? function (it, key, D) {
+ var protoDesc = gOPD(ObjectProto, key);
+ if (protoDesc) delete ObjectProto[key];
+ dP(it, key, D);
+ if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);
+} : dP;
+
+var wrap = function (tag) {
+ var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);
+ sym._k = tag;
+ return sym;
+};
+
+var isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {
+ return typeof it == 'symbol';
+} : function (it) {
+ return it instanceof $Symbol;
+};
+
+var $defineProperty = function defineProperty(it, key, D) {
+ if (it === ObjectProto) $defineProperty(OPSymbols, key, D);
+ anObject(it);
+ key = toPrimitive(key, true);
+ anObject(D);
+ if (has(AllSymbols, key)) {
+ if (!D.enumerable) {
+ if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));
+ it[HIDDEN][key] = true;
+ } else {
+ if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;
+ D = _create(D, { enumerable: createDesc(0, false) });
+ } return setSymbolDesc(it, key, D);
+ } return dP(it, key, D);
+};
+var $defineProperties = function defineProperties(it, P) {
+ anObject(it);
+ var keys = enumKeys(P = toIObject(P));
+ var i = 0;
+ var l = keys.length;
+ var key;
+ while (l > i) $defineProperty(it, key = keys[i++], P[key]);
+ return it;
+};
+var $create = function create(it, P) {
+ return P === undefined ? _create(it) : $defineProperties(_create(it), P);
+};
+var $propertyIsEnumerable = function propertyIsEnumerable(key) {
+ var E = isEnum.call(this, key = toPrimitive(key, true));
+ if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;
+ return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;
+};
+var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {
+ it = toIObject(it);
+ key = toPrimitive(key, true);
+ if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;
+ var D = gOPD(it, key);
+ if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;
+ return D;
+};
+var $getOwnPropertyNames = function getOwnPropertyNames(it) {
+ var names = gOPN(toIObject(it));
+ var result = [];
+ var i = 0;
+ var key;
+ while (names.length > i) {
+ if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);
+ } return result;
+};
+var $getOwnPropertySymbols = function getOwnPropertySymbols(it) {
+ var IS_OP = it === ObjectProto;
+ var names = gOPN(IS_OP ? OPSymbols : toIObject(it));
+ var result = [];
+ var i = 0;
+ var key;
+ while (names.length > i) {
+ if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);
+ } return result;
+};
+
+// 19.4.1.1 Symbol([description])
+if (!USE_NATIVE) {
+ $Symbol = function Symbol() {
+ if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');
+ var tag = uid(arguments.length > 0 ? arguments[0] : undefined);
+ var $set = function (value) {
+ if (this === ObjectProto) $set.call(OPSymbols, value);
+ if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;
+ setSymbolDesc(this, tag, createDesc(1, value));
+ };
+ if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });
+ return wrap(tag);
+ };
+ redefine($Symbol[PROTOTYPE], 'toString', function toString() {
+ return this._k;
+ });
+
+ $GOPD.f = $getOwnPropertyDescriptor;
+ $DP.f = $defineProperty;
+ __webpack_require__(36).f = gOPNExt.f = $getOwnPropertyNames;
+ __webpack_require__(26).f = $propertyIsEnumerable;
+ __webpack_require__(35).f = $getOwnPropertySymbols;
+
+ if (DESCRIPTORS && !__webpack_require__(9)) {
+ redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);
+ }
+
+ wksExt.f = function (name) {
+ return wrap(wks(name));
+ };
+}
+
+$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });
+
+for (var es6Symbols = (
+ // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14
+ 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'
+).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);
+
+for (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);
+
+$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {
+ // 19.4.2.1 Symbol.for(key)
+ 'for': function (key) {
+ return has(SymbolRegistry, key += '')
+ ? SymbolRegistry[key]
+ : SymbolRegistry[key] = $Symbol(key);
+ },
+ // 19.4.2.5 Symbol.keyFor(sym)
+ keyFor: function keyFor(sym) {
+ if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');
+ for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;
+ },
+ useSetter: function () { setter = true; },
+ useSimple: function () { setter = false; }
+});
+
+$export($export.S + $export.F * !USE_NATIVE, 'Object', {
+ // 19.1.2.2 Object.create(O [, Properties])
+ create: $create,
+ // 19.1.2.4 Object.defineProperty(O, P, Attributes)
+ defineProperty: $defineProperty,
+ // 19.1.2.3 Object.defineProperties(O, Properties)
+ defineProperties: $defineProperties,
+ // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)
+ getOwnPropertyDescriptor: $getOwnPropertyDescriptor,
+ // 19.1.2.7 Object.getOwnPropertyNames(O)
+ getOwnPropertyNames: $getOwnPropertyNames,
+ // 19.1.2.8 Object.getOwnPropertySymbols(O)
+ getOwnPropertySymbols: $getOwnPropertySymbols
+});
+
+// 24.3.2 JSON.stringify(value [, replacer [, space]])
+$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {
+ var S = $Symbol();
+ // MS Edge converts symbol values to JSON as {}
+ // WebKit converts symbol values to JSON as null
+ // V8 throws on boxed symbols
+ return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';
+})), 'JSON', {
+ stringify: function stringify(it) {
+ var args = [it];
+ var i = 1;
+ var replacer, $replacer;
+ while (arguments.length > i) args.push(arguments[i++]);
+ $replacer = replacer = args[1];
+ if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined
+ if (!isArray(replacer)) replacer = function (key, value) {
+ if (typeof $replacer == 'function') value = $replacer.call(this, key, value);
+ if (!isSymbol(value)) return value;
+ };
+ args[1] = replacer;
+ return _stringify.apply($JSON, args);
+ }
+});
+
+// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)
+$Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(5)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);
+// 19.4.3.5 Symbol.prototype[@@toStringTag]
+setToStringTag($Symbol, 'Symbol');
+// 20.2.1.9 Math[@@toStringTag]
+setToStringTag(Math, 'Math', true);
+// 24.3.3 JSON[@@toStringTag]
+setToStringTag(global.JSON, 'JSON', true);
+
+
+/***/ }),
+/* 65 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var META = __webpack_require__(13)('meta');
+var isObject = __webpack_require__(8);
+var has = __webpack_require__(3);
+var setDesc = __webpack_require__(1).f;
+var id = 0;
+var isExtensible = Object.isExtensible || function () {
+ return true;
+};
+var FREEZE = !__webpack_require__(11)(function () {
+ return isExtensible(Object.preventExtensions({}));
+});
+var setMeta = function (it) {
+ setDesc(it, META, { value: {
+ i: 'O' + ++id, // object ID
+ w: {} // weak collections IDs
+ } });
+};
+var fastKey = function (it, create) {
+ // return primitive with prefix
+ if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;
+ if (!has(it, META)) {
+ // can't set metadata to uncaught frozen object
+ if (!isExtensible(it)) return 'F';
+ // not necessary to add metadata
+ if (!create) return 'E';
+ // add missing metadata
+ setMeta(it);
+ // return object ID
+ } return it[META].i;
+};
+var getWeak = function (it, create) {
+ if (!has(it, META)) {
+ // can't set metadata to uncaught frozen object
+ if (!isExtensible(it)) return true;
+ // not necessary to add metadata
+ if (!create) return false;
+ // add missing metadata
+ setMeta(it);
+ // return hash weak collections IDs
+ } return it[META].w;
+};
+// add metadata on freeze-family methods calling
+var onFreeze = function (it) {
+ if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);
+ return it;
+};
+var meta = module.exports = {
+ KEY: META,
+ NEED: false,
+ fastKey: fastKey,
+ getWeak: getWeak,
+ onFreeze: onFreeze
+};
+
+
+/***/ }),
+/* 66 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// all enumerable object keys, includes symbols
+var getKeys = __webpack_require__(19);
+var gOPS = __webpack_require__(35);
+var pIE = __webpack_require__(26);
+module.exports = function (it) {
+ var result = getKeys(it);
+ var getSymbols = gOPS.f;
+ if (getSymbols) {
+ var symbols = getSymbols(it);
+ var isEnum = pIE.f;
+ var i = 0;
+ var key;
+ while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);
+ } return result;
+};
+
+
+/***/ }),
+/* 67 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 7.2.2 IsArray(argument)
+var cof = __webpack_require__(34);
+module.exports = Array.isArray || function isArray(arg) {
+ return cof(arg) == 'Array';
+};
+
+
+/***/ }),
+/* 68 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
+var toIObject = __webpack_require__(6);
+var gOPN = __webpack_require__(36).f;
+var toString = {}.toString;
+
+var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames
+ ? Object.getOwnPropertyNames(window) : [];
+
+var getWindowNames = function (it) {
+ try {
+ return gOPN(it);
+ } catch (e) {
+ return windowNames.slice();
+ }
+};
+
+module.exports.f = function getOwnPropertyNames(it) {
+ return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));
+};
+
+
+/***/ }),
+/* 69 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var pIE = __webpack_require__(26);
+var createDesc = __webpack_require__(12);
+var toIObject = __webpack_require__(6);
+var toPrimitive = __webpack_require__(17);
+var has = __webpack_require__(3);
+var IE8_DOM_DEFINE = __webpack_require__(29);
+var gOPD = Object.getOwnPropertyDescriptor;
+
+exports.f = __webpack_require__(2) ? gOPD : function getOwnPropertyDescriptor(O, P) {
+ O = toIObject(O);
+ P = toPrimitive(P, true);
+ if (IE8_DOM_DEFINE) try {
+ return gOPD(O, P);
+ } catch (e) { /* empty */ }
+ if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);
+};
+
+
+/***/ }),
+/* 70 */
+/***/ (function(module, exports) {
+
+
+
+/***/ }),
+/* 71 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(25)('asyncIterator');
+
+
+/***/ }),
+/* 72 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(25)('observable');
+
+
+/***/ }),
+/* 73 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var __vue_exports__, __vue_options__
+var __vue_styles__ = []
+
+/* styles */
+__vue_styles__.push(__webpack_require__(74)
+)
+
+/* script */
+__vue_exports__ = __webpack_require__(75)
+
+/* template */
+var __vue_template__ = __webpack_require__(86)
+__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+if (
+ typeof __vue_exports__.default === "object" ||
+ typeof __vue_exports__.default === "function"
+) {
+if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+__vue_options__ = __vue_exports__ = __vue_exports__.default
+}
+if (typeof __vue_options__ === "function") {
+ __vue_options__ = __vue_options__.options
+}
+__vue_options__.__file = "/Users/kw/github/weex-vue-examples/src/pages/guide/Guide.vue"
+__vue_options__.render = __vue_template__.render
+__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+__vue_options__._scopeId = "data-v-5490db22"
+__vue_options__.style = __vue_options__.style || {}
+__vue_styles__.forEach(function (module) {
+ for (var name in module) {
+ __vue_options__.style[name] = module[name]
+ }
+})
+if (typeof __register_static_styles__ === "function") {
+ __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+}
+
+module.exports = __vue_exports__
+
+
+/***/ }),
+/* 74 */
+/***/ (function(module, exports) {
+
+module.exports = {
+ "size": {
+ "width": "750",
+ "height": "320"
+ },
+ "center": {
+ "alignItems": "center",
+ "justifyContent": "center"
+ },
+ "slider": {
+ "width": "750",
+ "height": "400",
+ "boxShadow": "0 5px 10px rgba(0, 0, 0, 0.2)",
+ "marginBottom": "10"
+ },
+ "slider-title": {
+ "width": "750",
+ "paddingTop": 0,
+ "paddingRight": "30",
+ "paddingBottom": "30",
+ "paddingLeft": "30",
+ "fontSize": "46",
+ "textAlign": "center",
+ "color": "#FFFFFF"
+ },
+ "indicator": {
+ "position": "absolute",
+ "left": 0,
+ "right": 0,
+ "bottom": 0,
+ "width": "750",
+ "height": "30",
+ "itemSize": "12",
+ "itemColor": "#DDDDDD",
+ "itemSelectedColor": "rgb(0,180,255)"
+ }
+}
+
+/***/ }),
+/* 75 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _utils = __webpack_require__(27);
+
+var _Lesson = __webpack_require__(76);
+
+var _Lesson2 = _interopRequireDefault(_Lesson);
+
+var _mock = __webpack_require__(80);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var useStorage = false; //
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+exports.default = {
+ components: { Lesson: _Lesson2.default },
+ data: function data() {
+ return {
+ language: 'en',
+ navigationBarOptions: {
+ title: {
+ zh: 'Weex 入门',
+ en: 'Weex Guide'
+ }
+ },
+ lenssonIndex: 0,
+ guideLessons: _mock.guideLessons
+ };
+ },
+
+ computed: {
+ chosenLesson: function chosenLesson() {
+ return this.guideLessons[this.lenssonIndex];
+ }
+ },
+ watch: {
+ lenssonIndex: function lenssonIndex() {
+ this.navigationBarOptions.backgroundColor = this.chosenLesson.mainColor;
+ this.navigationBarOptions.title = this.chosenLesson.title;
+ },
+ navigationBarOptions: function navigationBarOptions() {
+ (0, _utils.setTitleBar)(this.navigationBarOptions, this.language);
+ }
+ },
+ beforeCreate: function beforeCreate() {
+ var _this = this;
+
+ (0, _utils.readGuide)(function (guide) {
+ _this.guideLessons = guide;
+ if (WXEnvironment.platform.toLowerCase() !== 'web') {
+ useStorage = true;
+ }
+ });
+ (0, _utils.fetchGuide)(function (result) {
+ (0, _utils.saveGuide)(result);
+ if (!useStorage) {
+ _this.guideLessons = result.guide;
+ }
+ });
+ }
+};
+
+/***/ }),
+/* 76 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var __vue_exports__, __vue_options__
+var __vue_styles__ = []
+
+/* styles */
+__vue_styles__.push(__webpack_require__(77)
+)
+
+/* script */
+__vue_exports__ = __webpack_require__(78)
+
+/* template */
+var __vue_template__ = __webpack_require__(79)
+__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+if (
+ typeof __vue_exports__.default === "object" ||
+ typeof __vue_exports__.default === "function"
+) {
+if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+__vue_options__ = __vue_exports__ = __vue_exports__.default
+}
+if (typeof __vue_options__ === "function") {
+ __vue_options__ = __vue_options__.options
+}
+__vue_options__.__file = "/Users/kw/github/weex-vue-examples/src/components/Lesson.vue"
+__vue_options__.render = __vue_template__.render
+__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+__vue_options__._scopeId = "data-v-2c29cf22"
+__vue_options__.style = __vue_options__.style || {}
+__vue_styles__.forEach(function (module) {
+ for (var name in module) {
+ __vue_options__.style[name] = module[name]
+ }
+})
+if (typeof __register_static_styles__ === "function") {
+ __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+}
+
+module.exports = __vue_exports__
+
+
+/***/ }),
+/* 77 */
+/***/ (function(module, exports) {
+
+module.exports = {
+ "center": {
+ "alignItems": "center",
+ "justifyContent": "center"
+ },
+ "title": {
+ "fontSize": "60",
+ "textAlign": "center",
+ "marginTop": "60",
+ "marginBottom": "60",
+ "color": "#606060"
+ },
+ "lesson": {
+ "borderBottomWidth": "1",
+ "borderBottomStyle": "solid",
+ "borderBottomColor": "#EEEEEE",
+ "flexDirection": "row",
+ "alignItems": "center"
+ },
+ "lesson-zh": {
+ "width": "600"
+ },
+ "lesson-en": {
+ "width": "630"
+ },
+ "lesson-index": {
+ "color": "#777777",
+ "textAlign": "right",
+ "paddingRight": "30"
+ },
+ "lesson-title": {
+ "paddingTop": "35",
+ "paddingBottom": "35"
+ },
+ "lesson-index-zh": {
+ "fontSize": "46",
+ "width": "120"
+ },
+ "lesson-title-zh": {
+ "fontSize": "42",
+ "width": "480"
+ },
+ "lesson-index-en": {
+ "fontSize": "42",
+ "width": "100"
+ },
+ "lesson-title-en": {
+ "fontSize": "38",
+ "width": "530"
+ },
+ "footer": {
+ "height": "120",
+ "paddingTop": "40"
+ },
+ "copyright": {
+ "fontSize": "22",
+ "color": "#A0A0A0",
+ "textAlign": "center"
+ }
+}
+
+/***/ }),
+/* 78 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+exports.default = {
+ props: ['mainColor', 'title', 'copyright', 'lessons'],
+ data: function data() {
+ return {
+ language: 'en'
+ };
+ }
+};
+
+/***/ }),
+/* 79 */
+/***/ (function(module, exports) {
+
+module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+ return _c('div', {
+ staticClass: ["wrapper"]
+ }, [_c('div', {
+ staticClass: ["center"]
+ }, [_c('text', {
+ staticClass: ["title"]
+ }, [_vm._v(_vm._s(_vm.i18n(_vm.title)))])]), _vm._l((_vm.lessons), function(lesson, i) {
+ return _c('div', {
+ key: i,
+ staticClass: ["center"]
+ }, [_c('div', {
+ class: ['lesson', ("lesson-" + _vm.language)],
+ on: {
+ "click": function($event) {
+ _vm.jumpTo(lesson.docLink, lesson.title)
+ }
+ }
+ }, [_c('text', {
+ class: ['lesson-index', ("lesson-index-" + _vm.language)]
+ }, [_vm._v(_vm._s(i + 1) + ".")]), _c('text', {
+ class: ['lesson-title', ("lesson-title-" + _vm.language)],
+ style: {
+ color: _vm.mainColor
+ }
+ }, [_vm._v(_vm._s(_vm.i18n(lesson.title)))])])])
+ }), _c('div', {
+ staticClass: ["footer", "center"]
+ }, [_c('text', {
+ staticClass: ["copyright"]
+ }, [_vm._v(_vm._s(_vm.i18n(_vm.copyright)))])])], 2)
+},staticRenderFns: []}
+module.exports.render._withStripped = true
+
+/***/ }),
+/* 80 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.aboutApp = exports.guideLessons = undefined;
+
+var _sliders = __webpack_require__(81);
+
+var _sliders2 = _interopRequireDefault(_sliders);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var guideLessons = exports.guideLessons = _sliders2.default;
+
+var aboutApp = exports.aboutApp = [{
+ title: { en: 'Weex Official Website', zh: 'Weex 官方网站' },
+ link: {
+ en: 'http://weex-project.io/',
+ zh: 'http://weex-project.io/cn/'
+ }
+}, {
+ title: { en: 'Apache Software Foundation', zh: 'Apache 软件基金会' },
+ link: 'http://www.apache.org/'
+}, {
+ title: { en: 'Who is using Weex', zh: '谁在使用 Weex' },
+ link: {
+ en: 'http://weex-project.io/who-is-using-weex.html',
+ zh: 'http://weex-project.io/cn/who-is-using-weex.html'
+ }
+}, {
+ title: { en: 'Contribution', zh: '参与贡献' },
+ link: {
+ en: 'http://weex-project.io/guide/contributing.html',
+ zh: 'http://weex-project.io/cn/guide/contributing.html'
+ }
+}, {
+ title: { en: 'Release Note', zh: '版本变更' },
+ link: {
+ en: 'http://weex-project.io/releasenote.html',
+ zh: 'http://weex-project.io/cn/releasenote.html'
+ }
+}, {
+ title: { en: 'FAQ', zh: '常见问题' },
+ link: {
+ en: 'http://weex-project.io/faq.html',
+ zh: 'http://weex-project.io/cn/faq.html'
+ }
+}];
+
+/***/ }),
+/* 81 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _defineProperty2 = __webpack_require__(82);
+
+var _defineProperty3 = _interopRequireDefault(_defineProperty2);
+
+var _ref, _ref2, _ref3;
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+exports.default = [{
+ subject: 'weex',
+ mainColor: '#00B4FF',
+ title: { zh: '学习 Weex', en: 'Learn Weex' },
+ poster: 'https://gw.alicdn.com/tfs/TB1.8Vdl9_I8KJjy0FoXXaFnVXa-3799-1615.png',
+ posterBg: '#E5F7FF',
+ posterStyle: {
+ width: '650px',
+ height: '304px'
+ },
+ copyright: {
+ zh: '来自 http://weex-project.io/cn/',
+ en: 'From http://weex-project.io/'
+ },
+ lessons: [{
+ title: {
+ zh: '快速入门',
+ en: 'Getting Started'
+ },
+ docLink: {
+ zh: 'http://weex-project.io/cn/guide/index.html',
+ en: 'http://weex-project.io/guide/index.html'
+ }
+ }, {
+ title: {
+ zh: '工作原理',
+ en: 'How it Works'
+ },
+ docLink: {
+ zh: 'http://weex-project.io/cn/wiki/index.html',
+ en: 'http://weex-project.io/wiki/index.html'
+ }
+ }, {
+ title: {
+ zh: 'Weex 中的前端框架',
+ en: 'Front-end Frameworks'
+ },
+ docLink: {
+ zh: 'http://weex-project.io/cn/guide/front-end-frameworks.html',
+ en: 'http://weex-project.io/guide/front-end-frameworks.html'
+ }
+ }, {
+ title: {
+ zh: '在 Weex 中使用 Vue.js',
+ en: 'Use Vue.js on Weex'
+ },
+ docLink: {
+ zh: 'http://weex-project.io/cn/guide/use-vue.html',
+ en: 'http://weex-project.io/guide/use-vue.html'
+ }
+ }, {
+ title: {
+ zh: '与 Web 平台的差异',
+ en: 'Platform difference with Web'
+ },
+ docLink: {
+ zh: 'http://weex-project.io/cn/wiki/platform-difference.html',
+ en: 'http://weex-project.io/wiki/platform-difference.html'
+ }
+ }, {
+ title: {
+ zh: '集成 Weex 到已有应用',
+ en: 'Integrate to Your App'
+ },
+ docLink: {
+ zh: 'http://weex-project.io/cn/guide/integrate-to-your-app.html',
+ en: 'http://weex-project.io/guide/integrate-to-your-app.html'
+ }
+ }, {
+ title: {
+ zh: '搭建开发环境',
+ en: 'Set Up Dev Environment'
+ },
+ docLink: {
+ zh: 'http://weex-project.io/cn/guide/set-up-env.html',
+ en: 'http://weex-project.io/guide/set-up-env.html'
+ }
+ }, {
+ title: {
+ zh: '通用样式',
+ en: 'Common Styles'
+ },
+ docLink: {
+ zh: 'http://weex-project.io/cn/wiki/common-styles.html',
+ en: 'http://weex-project.io/wiki/common-styles.html'
+ }
+ }, {
+ title: {
+ zh: '通用事件',
+ en: 'Common Events'
+ },
+ docLink: {
+ zh: 'http://weex-project.io/cn/wiki/common-events.html',
+ en: 'http://weex-project.io/wiki/common-events.html'
+ }
+ }, {
+ title: {
+ zh: 'Weex 实例变量',
+ en: 'The "weex" Variable'
+ },
+ docLink: {
+ zh: 'http://weex-project.io/cn/references/weex-variable.html',
+ en: 'http://weex-project.io/references/weex-variable.html'
+ }
+ }, {
+ title: {
+ zh: '内置组件',
+ en: 'Built-in Components'
+ },
+ docLink: {
+ zh: 'http://weex-project.io/cn/references/components/index.html',
+ en: 'http://weex-project.io/references/components/index.html'
+ }
+ }, {
+ title: {
+ zh: '内置模块',
+ en: 'Built-in Modules'
+ },
+ docLink: {
+ zh: 'http://weex-project.io/cn/references/modules/index.html',
+ en: 'http://weex-project.io/references/modules/index.html'
+ }
+ }, {
+ title: {
+ zh: '扩展 Android 组件/模块',
+ en: 'Extend Android'
+ },
+ docLink: {
+ zh: 'http://weex-project.io/cn/guide/extend-android.html',
+ en: 'http://weex-project.io/guide/extend-android.html'
+ }
+ }, {
+ title: {
+ zh: '扩展 iOS 组件/模块',
+ en: 'Extend iOS'
+ },
+ docLink: {
+ zh: 'http://weex-project.io/cn/guide/extend-ios.html',
+ en: 'http://weex-project.io/guide/extend-ios.html'
+ }
+ }, {
+ title: {
+ zh: '使用 weex-toolkit',
+ en: 'Use weex-toolkit'
+ },
+ docLink: {
+ zh: 'http://weex-project.io/cn/tools/toolkit.html',
+ en: 'http://weex-project.io/tools/toolkit.html'
+ }
+ }, {
+ title: {
+ zh: '如何参与贡献',
+ en: 'How to Contribute'
+ },
+ docLink: {
+ zh: 'http://weex-project.io/cn/contributing.html',
+ en: 'http://weex-project.io/contributing.html'
+ }
+ }]
+}, (_ref = {
+ subject: 'vue',
+ mainColor: '#42b983',
+ title: { zh: '学习 Vue.js', en: 'Learn Vue.js' },
+ poster: 'https://gw.alicdn.com/tfs/TB1J_uKcMMPMeJjy1XdXXasrXXa-400-400.png',
+ posterBg: '#E7FBF2',
+ posterStyle: {
+ width: '300px',
+ height: '300px'
+ }
+}, (0, _defineProperty3.default)(_ref, 'title', {
+ zh: '学习 Vue.js',
+ en: 'Learn Vue.js'
+}), (0, _defineProperty3.default)(_ref, 'copyright', {
+ zh: '来自 https://cn.vuejs.org/',
+ en: 'From https://vuejs.org/'
+}), (0, _defineProperty3.default)(_ref, 'lessons', [{
+ title: {
+ zh: 'Vue.js 是什么?',
+ en: 'What is Vue.js ?'
+ },
+ docLink: {
+ zh: 'https://cn.vuejs.org/v2/guide/index.html',
+ en: 'https://vuejs.org/v2/guide/index.html'
+ }
+}, {
+ title: {
+ zh: '单文件组件',
+ en: 'Single File Components'
+ },
+ docLink: {
+ zh: 'https://cn.vuejs.org/v2/guide/single-file-components.html',
+ en: 'https://vuejs.org/v2/guide/single-file-components.html'
+ }
+}, {
+ title: {
+ zh: '模板语法',
+ en: 'Template Syntax'
+ },
+ docLink: {
+ zh: 'https://cn.vuejs.org/v2/guide/syntax.html',
+ en: 'https://vuejs.org/v2/guide/syntax.html'
+ }
+}, {
+ title: {
+ zh: 'Class 与 Style 绑定',
+ en: 'Class and Style Bindings'
+ },
+ docLink: {
+ zh: 'https://cn.vuejs.org/v2/guide/class-and-style.html',
+ en: 'https://vuejs.org/v2/guide/class-and-style.html'
+ }
+}, {
+ title: {
+ zh: '条件渲染',
+ en: 'Conditional Rendering'
+ },
+ docLink: {
+ zh: 'https://cn.vuejs.org/v2/guide/conditional.html',
+ en: 'https://vuejs.org/v2/guide/conditional.html'
+ }
+}, {
+ title: {
+ zh: '列表渲染',
+ en: 'List Rendering'
+ },
+ docLink: {
+ zh: 'https://cn.vuejs.org/v2/guide/list.html',
+ en: 'https://vuejs.org/v2/guide/list.html'
+ }
+}, {
+ title: {
+ zh: '事件处理',
+ en: 'Event Handling'
+ },
+ docLink: {
+ zh: 'https://cn.vuejs.org/v2/guide/events.html',
+ en: 'https://vuejs.org/v2/guide/events.html'
+ }
+}, {
+ title: {
+ zh: '表单输入绑定',
+ en: 'Form Input Bindings'
+ },
+ docLink: {
+ zh: 'https://cn.vuejs.org/v2/guide/forms.html',
+ en: 'https://vuejs.org/v2/guide/forms.html'
+ }
+}, {
+ title: {
+ zh: 'Vue 实例',
+ en: 'The Vue Instance'
+ },
+ docLink: {
+ zh: 'https://cn.vuejs.org/v2/guide/instance.html',
+ en: 'https://vuejs.org/v2/guide/instance.html'
+ }
+}, {
+ title: {
+ zh: '在 Weex 中使用 Vue.js',
+ en: 'Use Vue.js on Weex'
+ },
+ docLink: {
+ zh: 'http://weex-project.io/cn/guide/use-vue.html',
+ en: 'http://weex-project.io/guide/use-vue.html'
+ }
+}, {
+ title: {
+ zh: '混合(mixins)',
+ en: 'Mixins'
+ },
+ docLink: {
+ zh: 'https://cn.vuejs.org/v2/guide/mixins.html',
+ en: 'https://vuejs.org/v2/guide/mixins.html'
+ }
+}, {
+ title: {
+ zh: '过滤器(filters)',
+ en: 'Filters'
+ },
+ docLink: {
+ zh: 'https://cn.vuejs.org/v2/guide/filters.html',
+ en: 'https://vuejs.org/v2/guide/filters.html'
+ }
+}, {
+ title: {
+ zh: '插件(plugins)',
+ en: 'Plugins'
+ },
+ docLink: {
+ zh: 'https://cn.vuejs.org/v2/guide/plugins.html',
+ en: 'https://vuejs.org/v2/guide/plugins.html'
+ }
+}, {
+ title: {
+ zh: '自定义指令',
+ en: 'Custom Directives'
+ },
+ docLink: {
+ zh: 'https://cn.vuejs.org/v2/guide/custom-directive.html',
+ en: 'https://vuejs.org/v2/guide/custom-directive.html'
+ }
+}, {
+ title: {
+ zh: '状态管理',
+ en: 'State Management'
+ },
+ docLink: {
+ zh: 'https://cn.vuejs.org/v2/guide/state-management.html',
+ en: 'https://vuejs.org/v2/guide/state-management.html'
+ }
+}, {
+ title: {
+ zh: '深入响应式原理',
+ en: 'Reactivity in Depth'
+ },
+ docLink: {
+ zh: 'https://cn.vuejs.org/v2/guide/reactivity.html',
+ en: 'https://vuejs.org/v2/guide/reactivity.html'
+ }
+}, {
+ title: {
+ zh: '渲染函数',
+ en: 'Render Functions'
+ },
+ docLink: {
+ zh: 'https://cn.vuejs.org/v2/guide/render-function.html',
+ en: 'https://vuejs.org/v2/guide/render-function.html'
+ }
+}, {
+ title: {
+ zh: 'TypeScript 支持',
+ en: 'TypeScript Support'
+ },
+ docLink: {
+ zh: 'https://cn.vuejs.org/v2/guide/typescript.html',
+ en: 'https://vuejs.org/v2/guide/typescript.html'
+ }
+}, {
+ title: 'API',
+ docLink: {
+ zh: 'https://cn.vuejs.org/v2/api/',
+ en: 'https://vuejs.org/v2/api/'
+ }
+}]), _ref), (_ref2 = {
+ subject: 'javascript',
+ mainColor: '#F7BD2A',
+ title: { zh: '学习 Javascript', en: 'Learn Javascript' },
+ poster: 'https://gw.alicdn.com/tfs/TB1bT98hMoQMeJjy0FpXXcTxpXa-1500-700.png',
+ posterBg: '#FAF3EB',
+ posterStyle: {
+ width: '750px',
+ height: '350px'
+ }
+}, (0, _defineProperty3.default)(_ref2, 'title', {
+ zh: '学习 Javascript',
+ en: 'Learn Javascript'
+}), (0, _defineProperty3.default)(_ref2, 'copyright', {
+ zh: '来自 MDN (Mozilla Developer Network)',
+ en: 'From MDN (Mozilla Developer Network)'
+}), (0, _defineProperty3.default)(_ref2, 'lessons', [{
+ title: {
+ zh: '什么是 Javascript ?',
+ en: 'What is Javascript ?'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/First_steps/What_is_JavaScript',
+ en: 'https://developer.mozilla.org/en-US/docs/Learn/JavaScript/First_steps/What_is_JavaScript'
+ }
+}, {
+ title: {
+ zh: 'JavaScript基础',
+ en: 'JavaScript basics'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/Getting_started_with_the_web/JavaScript_basics',
+ en: 'https://developer.mozilla.org/en-US/docs/Learn/Getting_started_with_the_web/JavaScript_basics'
+ }
+}, {
+ title: {
+ zh: '重新介绍 JavaScript',
+ en: 'A re-introduction to JavaScript'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/A_re-introduction_to_JavaScript',
+ en: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript'
+ }
+}, {
+ title: {
+ zh: '语法和数据类型',
+ en: 'Grammar and types'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Grammar_and_types#Variable_scope',
+ en: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Grammar_and_types#Variable_scope'
+ }
+}, {
+ title: {
+ zh: '数据类型和数据结构',
+ en: 'Data types and data structures'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Data_structures',
+ en: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures'
+ }
+}, {
+ title: {
+ zh: '变量',
+ en: 'Variables'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/First_steps/Variables',
+ en: 'https://developer.mozilla.org/en-US/docs/Learn/JavaScript/First_steps/Variables'
+ }
+}, {
+ title: {
+ zh: '数字和操作符',
+ en: 'Numbers and operators'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/First_steps/Math',
+ en: 'https://developer.mozilla.org/en-US/docs/Learn/JavaScript/First_steps/Math'
+ }
+}, {
+ title: {
+ zh: '字符串',
+ en: 'Handling text'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/First_steps/Strings',
+ en: 'https://developer.mozilla.org/en-US/docs/Learn/JavaScript/First_steps/Strings'
+ }
+}, {
+ title: {
+ zh: '常用的 String 方法',
+ en: 'Useful string methods'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/First_steps/Useful_string_methods',
+ en: 'https://developer.mozilla.org/en-US/docs/Learn/JavaScript/First_steps/Useful_string_methods'
+ }
+}, {
+ title: {
+ zh: '数组',
+ en: 'Arrays'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/First_steps/Arrays',
+ en: 'https://developer.mozilla.org/en-US/docs/Learn/JavaScript/First_steps/Arrays'
+ }
+}, {
+ title: {
+ zh: '函数',
+ en: 'Functions'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Functions',
+ en: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Functions'
+ }
+}, {
+ title: {
+ zh: 'JavaScript 对象基础',
+ en: 'JavaScript object basics'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/Objects/Basics',
+ en: 'https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/Basics'
+ }
+}, {
+ title: {
+ zh: '使用对象',
+ en: 'Working with objects'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Working_with_Objects',
+ en: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects'
+ }
+}, {
+ title: {
+ zh: '使用 JSON 数据',
+ en: 'Working with JSON'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/Objects/JSON',
+ en: 'https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/JSON'
+ }
+}, {
+ title: {
+ zh: '对象模型的细节',
+ en: 'Details of the object model'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Details_of_the_Object_Model',
+ en: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Details_of_the_Object_Model'
+ }
+}, {
+ title: {
+ zh: '对象原型',
+ en: 'Object prototypes'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/Object_prototypes',
+ en: 'https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/Objects/Object_prototypes'
+ }
+}, {
+ title: {
+ zh: 'JavaScript 中的继承',
+ en: 'Inheritance in JavaScript'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/Objects/Inheritance',
+ en: 'https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/Inheritance'
+ }
+}, {
+ title: {
+ zh: '继承与原型链',
+ en: 'Inheritance and the prototype chain'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Inheritance_and_the_prototype_chain',
+ en: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain'
+ }
+}, {
+ title: {
+ zh: '严格模式',
+ en: 'Strict mode'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Strict_mode',
+ en: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode'
+ }
+}, {
+ title: {
+ zh: '内存管理',
+ en: 'Memory Management'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Memory_Management',
+ en: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management'
+ }
+}, {
+ title: {
+ zh: '并发模型与事件循环',
+ en: 'Concurrency model and Event Loop'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/EventLoop',
+ en: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop'
+ }
+}, {
+ // title: {
+ // zh: '索引集合类',
+ // en: 'Indexed collections'
+ // },
+ // docLink: {
+ // zh: 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Indexed_collections',
+ // en: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Indexed_collections'
+ // }
+ // }, {
+ // title: {
+ // zh: '带键的集合',
+ // en: 'Keyed collections'
+ // },
+ // docLink: {
+ // zh: 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Keyed_collections',
+ // en: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Keyed_collections'
+ // }
+ // }, {
+ title: {
+ zh: 'JavaScript 标准库',
+ en: 'Standard built-in objects'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects',
+ en: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects'
+ }
+}]), _ref2), (_ref3 = {
+ subject: 'css',
+ mainColor: '#F56FC6',
+ title: { zh: '学习 CSS', en: 'Learn CSS' },
+ titleColor: '#FFFFFF',
+ poster: 'https://gw.alicdn.com/tfs/TB1k6anhMMPMeJjy1XdXXasrXXa-427-190.jpg',
+ posterBg: '#FFA2DE',
+ posterStyle: {
+ width: '517px',
+ height: '230px'
+ }
+}, (0, _defineProperty3.default)(_ref3, 'title', {
+ zh: '学习 CSS',
+ en: 'Learn CSS'
+}), (0, _defineProperty3.default)(_ref3, 'copyright', {
+ zh: '来自 MDN (Mozilla Developer Network)',
+ en: 'From MDN (Mozilla Developer Network)'
+}), (0, _defineProperty3.default)(_ref3, 'lessons', [{
+ title: {
+ zh: '什么是 CSS ?',
+ en: 'What is CSS ?'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Web/Guide/CSS/Getting_started/What_is_CSS',
+ en: 'https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_started/What_is_CSS'
+ }
+}, {
+ title: {
+ zh: 'CSS 语法',
+ en: 'CSS Syntax'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/CSS/Introduction_to_CSS/Syntax',
+ en: 'https://developer.mozilla.org/en-US/docs/Learn/CSS/Introduction_to_CSS/Syntax'
+ }
+}, {
+ title: {
+ zh: 'CSS的值和单位',
+ en: 'CSS Values and Units'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/CSS/Introduction_to_CSS/Values_and_units',
+ en: 'https://developer.mozilla.org/en-US/docs/Learn/CSS/Introduction_to_CSS/Values_and_units'
+ }
+}, {
+ title: {
+ zh: '盒模型',
+ en: 'The Box Model'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/CSS/Introduction_to_CSS/Box_model',
+ en: 'https://developer.mozilla.org/en-US/docs/Learn/CSS/Introduction_to_CSS/Box_model'
+ }
+}, {
+ title: {
+ zh: '盒模型的属性',
+ en: 'Box Model Properties'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_Box_Model',
+ en: 'https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Box_Model'
+ }
+}, {
+ title: {
+ zh: '定位布局',
+ en: 'Positioning'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/CSS/CSS_layout/%E5%AE%9A%E4%BD%8Dx',
+ en: 'https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layout/positioning'
+ }
+}, {
+ title: {
+ zh: '定位布局的属性',
+ en: 'CSS Positioning'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_Positioning',
+ en: 'https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning'
+ }
+}, {
+ title: {
+ zh: 'Flexbox 布局',
+ en: 'Flexbox Layout'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Learn/CSS/CSS_layout/Flexbox',
+ en: 'https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layout/Flexbox'
+ }
+}, {
+ title: {
+ zh: 'Flexbox 布局的属性',
+ en: 'CSS Flexible Box Layout'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_Flexible_Box_Layout',
+ en: 'https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flexible_Box_Layout'
+ }
+}, {
+ title: {
+ zh: 'Weex 中的通用样式',
+ en: 'Common Styles in Weex'
+ },
+ docLink: {
+ zh: 'http://weex-project.io/cn/references/common-style.html',
+ en: 'http://weex-project.io/references/common-style.html'
+ }
+}, {
+ title: {
+ zh: 'Weex 中的文本样式',
+ en: 'Text Styles in Weex'
+ },
+ docLink: {
+ zh: 'http://weex-project.io/cn/references/text-style.html',
+ en: 'http://weex-project.io/references/text-style.html'
+ }
+}, {
+ title: {
+ zh: '块格式化上下文(BFC)',
+ en: 'Block Formatting Context'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Web/Guide/CSS/Block_formatting_context',
+ en: 'https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Block_formatting_context'
+ }
+}, {
+ title: {
+ zh: '视觉格式化模型',
+ en: 'Visual Formatting Model'
+ },
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Web/Guide/CSS/Visual_formatting_model',
+ en: 'https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Visual_formatting_model'
+ }
+}, {
+ title: 'CSS Reference',
+ docLink: {
+ zh: 'https://developer.mozilla.org/zh-CN/docs/Web/CSS/Reference',
+ en: 'https://developer.mozilla.org/en-US/docs/Web/CSS/Reference'
+ }
+}]), _ref3)];
+
+/***/ }),
+/* 82 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+exports.__esModule = true;
+
+var _defineProperty = __webpack_require__(83);
+
+var _defineProperty2 = _interopRequireDefault(_defineProperty);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+exports.default = function (obj, key, value) {
+ if (key in obj) {
+ (0, _defineProperty2.default)(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+
+ return obj;
+};
+
+/***/ }),
+/* 83 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = { "default": __webpack_require__(84), __esModule: true };
+
+/***/ }),
+/* 84 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(85);
+var $Object = __webpack_require__(4).Object;
+module.exports = function defineProperty(it, key, desc) {
+ return $Object.defineProperty(it, key, desc);
+};
+
+
+/***/ }),
+/* 85 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var $export = __webpack_require__(16);
+// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)
+$export($export.S + $export.F * !__webpack_require__(2), 'Object', { defineProperty: __webpack_require__(1).f });
+
+
+/***/ }),
+/* 86 */
+/***/ (function(module, exports) {
+
+module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+ return _c('scroller', {
+ staticClass: ["wrapper"]
+ }, [_c('slider', {
+ staticClass: ["slider"],
+ attrs: {
+ "autoPlay": "true"
+ }
+ }, [_vm._l((_vm.guideLessons), function(item, i) {
+ return _c('div', {
+ key: item.subject,
+ staticClass: ["center"],
+ style: {
+ backgroundColor: item.posterBg
+ },
+ on: {
+ "click": function($event) {
+ _vm.lenssonIndex = i
+ }
+ }
+ }, [_c('div', {
+ staticClass: ["center", "size"]
+ }, [_c('image', {
+ style: item.posterStyle,
+ attrs: {
+ "resize": "cover",
+ "src": item.poster
+ }
+ })]), _c('text', {
+ staticClass: ["slider-title"],
+ style: {
+ color: item.titleColor || item.mainColor
+ }
+ }, [_vm._v(_vm._s(_vm.i18n(item.title)))])])
+ }), _c('indicator', {
+ staticClass: ["indicator"]
+ })], 2), _c('lesson', {
+ attrs: {
+ "mainColor": _vm.chosenLesson.mainColor,
+ "title": _vm.chosenLesson.title,
+ "lessons": _vm.chosenLesson.lessons,
+ "copyright": _vm.chosenLesson.copyright
+ }
+ })], 1)
+},staticRenderFns: []}
+module.exports.render._withStripped = true
+
+/***/ })
+/******/ ]);
\ No newline at end of file
diff --git a/ios/bundlejs/landing.weex.js b/ios/bundlejs/landing.weex.js
new file mode 100644
index 0000000..bbb0fb3
--- /dev/null
+++ b/ios/bundlejs/landing.weex.js
@@ -0,0 +1,2319 @@
+// { "framework": "Vue" }
+"use weex:vue";
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ // The module cache
+/******/ var installedModules = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/
+/******/ // Check if module is in cache
+/******/ if(installedModules[moduleId]) {
+/******/ return installedModules[moduleId].exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = installedModules[moduleId] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = true;
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = modules;
+/******/
+/******/ // expose the module cache
+/******/ __webpack_require__.c = installedModules;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, {
+/******/ configurable: false,
+/******/ enumerable: true,
+/******/ get: getter
+/******/ });
+/******/ }
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = 37);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ (function(module, exports) {
+
+// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
+var global = module.exports = typeof window != 'undefined' && window.Math == Math
+ ? window : typeof self != 'undefined' && self.Math == Math ? self
+ // eslint-disable-next-line no-new-func
+ : Function('return this')();
+if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef
+
+
+/***/ }),
+/* 1 */
+/***/ (function(module, exports) {
+
+var hasOwnProperty = {}.hasOwnProperty;
+module.exports = function (it, key) {
+ return hasOwnProperty.call(it, key);
+};
+
+
+/***/ }),
+/* 2 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var dP = __webpack_require__(3);
+var createDesc = __webpack_require__(12);
+module.exports = __webpack_require__(4) ? function (object, key, value) {
+ return dP.f(object, key, createDesc(1, value));
+} : function (object, key, value) {
+ object[key] = value;
+ return object;
+};
+
+
+/***/ }),
+/* 3 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var anObject = __webpack_require__(10);
+var IE8_DOM_DEFINE = __webpack_require__(29);
+var toPrimitive = __webpack_require__(17);
+var dP = Object.defineProperty;
+
+exports.f = __webpack_require__(4) ? Object.defineProperty : function defineProperty(O, P, Attributes) {
+ anObject(O);
+ P = toPrimitive(P, true);
+ anObject(Attributes);
+ if (IE8_DOM_DEFINE) try {
+ return dP(O, P, Attributes);
+ } catch (e) { /* empty */ }
+ if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');
+ if ('value' in Attributes) O[P] = Attributes.value;
+ return O;
+};
+
+
+/***/ }),
+/* 4 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// Thank's IE8 for his funny defineProperty
+module.exports = !__webpack_require__(11)(function () {
+ return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;
+});
+
+
+/***/ }),
+/* 5 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// to indexed object, toObject with fallback for non-array-like ES3 strings
+var IObject = __webpack_require__(51);
+var defined = __webpack_require__(16);
+module.exports = function (it) {
+ return IObject(defined(it));
+};
+
+
+/***/ }),
+/* 6 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var store = __webpack_require__(21)('wks');
+var uid = __webpack_require__(13);
+var Symbol = __webpack_require__(0).Symbol;
+var USE_SYMBOL = typeof Symbol == 'function';
+
+var $exports = module.exports = function (name) {
+ return store[name] || (store[name] =
+ USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));
+};
+
+$exports.store = store;
+
+
+/***/ }),
+/* 7 */
+/***/ (function(module, exports) {
+
+var core = module.exports = { version: '2.5.7' };
+if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef
+
+
+/***/ }),
+/* 8 */
+/***/ (function(module, exports) {
+
+module.exports = function (it) {
+ return typeof it === 'object' ? it !== null : typeof it === 'function';
+};
+
+
+/***/ }),
+/* 9 */
+/***/ (function(module, exports) {
+
+module.exports = true;
+
+
+/***/ }),
+/* 10 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var isObject = __webpack_require__(8);
+module.exports = function (it) {
+ if (!isObject(it)) throw TypeError(it + ' is not an object!');
+ return it;
+};
+
+
+/***/ }),
+/* 11 */
+/***/ (function(module, exports) {
+
+module.exports = function (exec) {
+ try {
+ return !!exec();
+ } catch (e) {
+ return true;
+ }
+};
+
+
+/***/ }),
+/* 12 */
+/***/ (function(module, exports) {
+
+module.exports = function (bitmap, value) {
+ return {
+ enumerable: !(bitmap & 1),
+ configurable: !(bitmap & 2),
+ writable: !(bitmap & 4),
+ value: value
+ };
+};
+
+
+/***/ }),
+/* 13 */
+/***/ (function(module, exports) {
+
+var id = 0;
+var px = Math.random();
+module.exports = function (key) {
+ return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
+};
+
+
+/***/ }),
+/* 14 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.fetchNews = exports.fetchDoodle = exports.readAbout = exports.saveAbout = exports.fetchAbout = exports.readGuide = exports.saveGuide = exports.fetchGuide = exports.readExamples = exports.saveExamples = exports.fetchExamples = undefined;
+
+var _stringify = __webpack_require__(40);
+
+var _stringify2 = _interopRequireDefault(_stringify);
+
+var _typeof2 = __webpack_require__(42);
+
+var _typeof3 = _interopRequireDefault(_typeof2);
+
+exports.createLink = createLink;
+exports.createURL = createURL;
+exports.i18n = i18n;
+exports.parseLanguage = parseLanguage;
+exports.setLanguage = setLanguage;
+exports.clearStorageLanguage = clearStorageLanguage;
+exports.getStorageLanguage = getStorageLanguage;
+exports.getSystemLanguage = getSystemLanguage;
+exports.getLanguage = getLanguage;
+exports.jumpTo = jumpTo;
+exports.viewSource = viewSource;
+exports.setTitleBar = setTitleBar;
+exports.fetchData = fetchData;
+exports.saveData = saveData;
+exports.readData = readData;
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var stream = weex.requireModule('stream');
+var storage = weex.requireModule('storage');
+var navigator = weex.requireModule('navigator');
+
+var encoder = typeof encodeURIComponent === 'function' ? encodeURIComponent : typeof encodeURI === 'function' ? encodeURI : function (x) {
+ return x;
+};
+
+function encodeParams(params) {
+ if (!params || (typeof params === 'undefined' ? 'undefined' : (0, _typeof3.default)(params)) !== 'object') {
+ return '';
+ }
+ var array = [];
+ for (var key in params) {
+ if (typeof params[key] === 'string') {
+ array.push(encoder(key) + '=' + encoder(params[key]));
+ }
+ }
+ return array.join('&');
+}
+
+function createLink(name) {
+ var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+ var args = [];
+ for (var key in params) {
+ if (typeof params[key] === 'string') {
+ args.push(encoder(key) + '=' + encoder(params[key]));
+ }
+ }
+ if (WXEnvironment.platform === 'Web') {
+ args.unshift('page=' + name + '.web.js');
+ return '/?' + args.join('&');
+ }
+ var base = getBaseURL();
+ return '' + base + name + '.weex.js' + (args.length ? '?' + args.join('&') : '');
+}
+
+function createURL(hash, params) {
+ if (WXEnvironment.platform === 'Web') {
+ return 'http://dotwe.org/raw/htmlVue/' + hash;
+ }
+ var url = 'http://dotwe.org/raw/dist/' + hash + '.bundle.wx';
+ var paramString = encodeParams(params);
+ if (WXEnvironment.appName === 'TB') {
+ return url + '?_wx_tpl=' + url + '&' + paramString;
+ }
+ if (WXEnvironment.appName === 'WXSample') {
+ return url + '?' + paramString;
+ }
+ return url + '?wx_weex=true&' + paramString;
+}
+
+function getBaseURL() {
+ var bundleUrl = weex.config.bundleUrl;
+ var isAndroidAssets = bundleUrl.indexOf('your_current_IP') >= 0 || bundleUrl.indexOf('file://assets/') >= 0;
+ var isiOSAssets = bundleUrl.indexOf('file:///') >= 0 && bundleUrl.indexOf('WeexDemo.app') > 0;
+ if (isAndroidAssets) {
+ return 'file://assets/';
+ } else if (isiOSAssets) {
+ // file:///var/mobile/Containers/Bundle/Application/{id}/WeexDemo.app/
+ // file:///Users/{user}/Library/Developer/CoreSimulator/Devices/{id}/data/Containers/Bundle/Application/{id}/WeexDemo.app/
+ return bundleUrl.substring(0, bundleUrl.lastIndexOf('/') + 1);
+ }
+ return '';
+}
+
+function i18n(text, language) {
+ if (typeof text === 'string') {
+ return text;
+ }
+ if (Object.prototype.toString.call(text) === '[object Object]') {
+ var lang = this && this.language || language || 'en';
+ return text[lang];
+ }
+}
+
+var supportedLanguageRE = /(en|zh)\_?\w*/i;
+function parseLanguage(language) {
+ var match = supportedLanguageRE.exec(language + '');
+ if (match && match[1]) {
+ return match[1];
+ }
+ return '';
+}
+
+function setLanguage(language) {
+ var lang = parseLanguage(language);
+ if (lang) {
+ storage.setItem('WEEX_PLAYGROUND_LANGUAGE', lang);
+ }
+}
+
+function clearStorageLanguage() {
+ storage.removeItem('WEEX_PLAYGROUND_LANGUAGE');
+}
+
+function getStorageLanguage(done) {
+ var fail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};
+
+ if (!(typeof done === 'undefined' ? 'undefined' : (0, _typeof3.default)(done)) === 'function') {
+ return;
+ }
+ try {
+ storage.getItem('WEEX_PLAYGROUND_LANGUAGE', function (event) {
+ if (event.result === 'success') {
+ var lang = parseLanguage(event.data);
+ lang ? done(lang) : fail();
+ } else {
+ fail(event);
+ }
+ });
+ } catch (err) {
+ fail(err);
+ }
+}
+
+function getSystemLanguage(done) {
+ var fail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};
+
+ if (!(typeof done === 'undefined' ? 'undefined' : (0, _typeof3.default)(done)) === 'function') {
+ return;
+ }
+ if (WXEnvironment.platform.toLowerCase() === 'web') {
+ var lang = parseLanguage(window.navigator.language);
+ lang ? done(lang) : fail();
+ } else {
+ try {
+ var locale = weex.requireModule('locale') || weex.requireModule('local');
+ var useSync = false;
+ var resSync = locale.getLanguage(function (language) {
+ var lang = parseLanguage(language);
+ if (lang) {
+ useSync || done(lang);
+ } else {
+ fail();
+ }
+ });
+ var langSync = parseLanguage(resSync);
+ if (langSync) {
+ useSync = true;
+ done(langSync);
+ } else {
+ fail();
+ }
+ } catch (e) {
+ fail(e);
+ }
+ }
+}
+
+var languageRE = /.+[\?\&]{1}language=([\d\w]+)[\?\&]?.*/i;
+function getLanguage() {
+ var done = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {};
+
+ var match = languageRE.exec(weex.config.bundleUrl || '');
+ var lang = parseLanguage(match && match[1]);
+ if (lang) {
+ done(lang);
+ } else {
+ getStorageLanguage(done, function () {
+ getSystemLanguage(done, function () {
+ done('en');
+ });
+ });
+ }
+}
+
+function jumpTo(url, title, lang) {
+ getLanguage(function (language) {
+ storage.setItem('CURRENT_DOCUMENT_URL', i18n(url, lang || language));
+ navigator.push({
+ url: createURL('bf0305c14b511b24a4e616f53926432b', { language: language, title: i18n(title, lang || language) })
+ });
+ });
+}
+
+function viewSource(hash) {
+ getLanguage(function (language) {
+ navigator.push({
+ url: createURL('f6ce29faf686eabc38b410bf4828fa5a', { hash: hash, language: language })
+ });
+ });
+}
+
+function setTitleBar(options) {
+ var language = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'en';
+
+ if (Object.prototype.toString.apply(options) !== '[object Object]') {
+ return;
+ }
+ var titleBar = weex.requireModule('titleBar');
+ if (options.color || options.backgroundColor) {
+ try {
+ titleBar.setStyle({
+ foregroundColor: options.color || '#FFFFFF',
+ backgroundColor: options.backgroundColor || '#00B4FF'
+ });
+ } catch (e) {}
+ }
+ var title = i18n(options.title, language);
+ if (title) {
+ try {
+ titleBar.setTitle(title);
+ } catch (e) {}
+ }
+}
+
+var storageKeys = {
+ doodle: 'WEEX_PLAYGROUND_APP_DOODLE',
+ guide: 'WEEX_PLAYGROUND_APP_GUIDE',
+ examples: 'WEEX_PLAYGROUND_APP_EXAMPLES',
+ news: 'WEEX_PLAYGROUND_APP_NEWS',
+ about: 'WEEX_PLAYGROUND_APP_ABOUT'
+};
+function fetchData(name) {
+ var done = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};
+ var fail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {};
+
+ try {
+ stream.fetch({
+ url: 'http://dotwe.org/query/weex-playground-app',
+ method: 'post',
+ headers: {
+ 'Content-Type': 'application/x-www-form-urlencoded'
+ },
+ type: 'json',
+ body: 'name=' + name
+ }, function (res) {
+ if (res.ok && res.data && res.data.success) {
+ done(res.data);
+ } else {
+ fail(res);
+ }
+ });
+ } catch (err) {
+ fail(err);
+ }
+}
+function saveData(name, result) {
+ var key = storageKeys[name];
+ if (!key) return;
+ if (result && (typeof result === 'undefined' ? 'undefined' : (0, _typeof3.default)(result)) === 'object') {
+ result.timestamp = Date.now();
+ storage.setItem(key, (0, _stringify2.default)(result));
+ }
+}
+function readData(name) {
+ var done = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};
+ var fail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {};
+
+ var key = storageKeys[name];
+ if (!key) return fail();
+ try {
+ storage.getItem(key, function (event) {
+ if (event.result === 'success') {
+ var result = JSON.parse(event.data);
+ if (result && Array.isArray(result[name])) {
+ return done(result[name]);
+ }
+ }
+ fail(event);
+ });
+ } catch (e) {
+ fail(e);
+ }
+}
+
+var fetchExamples = exports.fetchExamples = function fetchExamples() {
+ for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+
+ return fetchData.apply(undefined, ['examples'].concat(args));
+};
+var saveExamples = exports.saveExamples = function saveExamples() {
+ for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
+ args[_key2] = arguments[_key2];
+ }
+
+ return saveData.apply(undefined, ['examples'].concat(args));
+};
+var readExamples = exports.readExamples = function readExamples() {
+ for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
+ args[_key3] = arguments[_key3];
+ }
+
+ return readData.apply(undefined, ['examples'].concat(args));
+};
+
+var fetchGuide = exports.fetchGuide = function fetchGuide() {
+ for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
+ args[_key4] = arguments[_key4];
+ }
+
+ return fetchData.apply(undefined, ['guide'].concat(args));
+};
+var saveGuide = exports.saveGuide = function saveGuide() {
+ for (var _len5 = arguments.length, args = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
+ args[_key5] = arguments[_key5];
+ }
+
+ return saveData.apply(undefined, ['guide'].concat(args));
+};
+var readGuide = exports.readGuide = function readGuide() {
+ for (var _len6 = arguments.length, args = Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
+ args[_key6] = arguments[_key6];
+ }
+
+ return readData.apply(undefined, ['guide'].concat(args));
+};
+
+var fetchAbout = exports.fetchAbout = function fetchAbout() {
+ for (var _len7 = arguments.length, args = Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {
+ args[_key7] = arguments[_key7];
+ }
+
+ return fetchData.apply(undefined, ['about'].concat(args));
+};
+var saveAbout = exports.saveAbout = function saveAbout() {
+ for (var _len8 = arguments.length, args = Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {
+ args[_key8] = arguments[_key8];
+ }
+
+ return saveData.apply(undefined, ['about'].concat(args));
+};
+var readAbout = exports.readAbout = function readAbout() {
+ for (var _len9 = arguments.length, args = Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {
+ args[_key9] = arguments[_key9];
+ }
+
+ return readData.apply(undefined, ['about'].concat(args));
+};
+
+var fetchDoodle = exports.fetchDoodle = function fetchDoodle() {
+ for (var _len10 = arguments.length, args = Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {
+ args[_key10] = arguments[_key10];
+ }
+
+ return fetchData.apply(undefined, ['doodle'].concat(args));
+};
+var fetchNews = exports.fetchNews = function fetchNews() {
+ for (var _len11 = arguments.length, args = Array(_len11), _key11 = 0; _key11 < _len11; _key11++) {
+ args[_key11] = arguments[_key11];
+ }
+
+ return fetchData.apply(undefined, ['news'].concat(args));
+};
+
+/***/ }),
+/* 15 */
+/***/ (function(module, exports) {
+
+// 7.1.4 ToInteger
+var ceil = Math.ceil;
+var floor = Math.floor;
+module.exports = function (it) {
+ return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
+};
+
+
+/***/ }),
+/* 16 */
+/***/ (function(module, exports) {
+
+// 7.2.1 RequireObjectCoercible(argument)
+module.exports = function (it) {
+ if (it == undefined) throw TypeError("Can't call method on " + it);
+ return it;
+};
+
+
+/***/ }),
+/* 17 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 7.1.1 ToPrimitive(input [, PreferredType])
+var isObject = __webpack_require__(8);
+// instead of the ES6 spec version, we didn't implement @@toPrimitive case
+// and the second argument - flag - preferred type is a string
+module.exports = function (it, S) {
+ if (!isObject(it)) return it;
+ var fn, val;
+ if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
+ if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;
+ if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
+ throw TypeError("Can't convert object to primitive value");
+};
+
+
+/***/ }),
+/* 18 */
+/***/ (function(module, exports) {
+
+module.exports = {};
+
+
+/***/ }),
+/* 19 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 19.1.2.14 / 15.2.3.14 Object.keys(O)
+var $keys = __webpack_require__(33);
+var enumBugKeys = __webpack_require__(22);
+
+module.exports = Object.keys || function keys(O) {
+ return $keys(O, enumBugKeys);
+};
+
+
+/***/ }),
+/* 20 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var shared = __webpack_require__(21)('keys');
+var uid = __webpack_require__(13);
+module.exports = function (key) {
+ return shared[key] || (shared[key] = uid(key));
+};
+
+
+/***/ }),
+/* 21 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var core = __webpack_require__(7);
+var global = __webpack_require__(0);
+var SHARED = '__core-js_shared__';
+var store = global[SHARED] || (global[SHARED] = {});
+
+(module.exports = function (key, value) {
+ return store[key] || (store[key] = value !== undefined ? value : {});
+})('versions', []).push({
+ version: core.version,
+ mode: __webpack_require__(9) ? 'pure' : 'global',
+ copyright: '© 2018 Denis Pushkarev (zloirock.ru)'
+});
+
+
+/***/ }),
+/* 22 */
+/***/ (function(module, exports) {
+
+// IE 8- don't enum bug keys
+module.exports = (
+ 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'
+).split(',');
+
+
+/***/ }),
+/* 23 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var def = __webpack_require__(3).f;
+var has = __webpack_require__(1);
+var TAG = __webpack_require__(6)('toStringTag');
+
+module.exports = function (it, tag, stat) {
+ if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });
+};
+
+
+/***/ }),
+/* 24 */
+/***/ (function(module, exports, __webpack_require__) {
+
+exports.f = __webpack_require__(6);
+
+
+/***/ }),
+/* 25 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var global = __webpack_require__(0);
+var core = __webpack_require__(7);
+var LIBRARY = __webpack_require__(9);
+var wksExt = __webpack_require__(24);
+var defineProperty = __webpack_require__(3).f;
+module.exports = function (name) {
+ var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});
+ if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });
+};
+
+
+/***/ }),
+/* 26 */
+/***/ (function(module, exports) {
+
+exports.f = {}.propertyIsEnumerable;
+
+
+/***/ }),
+/* 27 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var LIBRARY = __webpack_require__(9);
+var $export = __webpack_require__(28);
+var redefine = __webpack_require__(31);
+var hide = __webpack_require__(2);
+var Iterators = __webpack_require__(18);
+var $iterCreate = __webpack_require__(49);
+var setToStringTag = __webpack_require__(23);
+var getPrototypeOf = __webpack_require__(56);
+var ITERATOR = __webpack_require__(6)('iterator');
+var BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`
+var FF_ITERATOR = '@@iterator';
+var KEYS = 'keys';
+var VALUES = 'values';
+
+var returnThis = function () { return this; };
+
+module.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {
+ $iterCreate(Constructor, NAME, next);
+ var getMethod = function (kind) {
+ if (!BUGGY && kind in proto) return proto[kind];
+ switch (kind) {
+ case KEYS: return function keys() { return new Constructor(this, kind); };
+ case VALUES: return function values() { return new Constructor(this, kind); };
+ } return function entries() { return new Constructor(this, kind); };
+ };
+ var TAG = NAME + ' Iterator';
+ var DEF_VALUES = DEFAULT == VALUES;
+ var VALUES_BUG = false;
+ var proto = Base.prototype;
+ var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];
+ var $default = $native || getMethod(DEFAULT);
+ var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;
+ var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;
+ var methods, key, IteratorPrototype;
+ // Fix native
+ if ($anyNative) {
+ IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));
+ if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {
+ // Set @@toStringTag to native iterators
+ setToStringTag(IteratorPrototype, TAG, true);
+ // fix for some old engines
+ if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);
+ }
+ }
+ // fix Array#{values, @@iterator}.name in V8 / FF
+ if (DEF_VALUES && $native && $native.name !== VALUES) {
+ VALUES_BUG = true;
+ $default = function values() { return $native.call(this); };
+ }
+ // Define iterator
+ if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {
+ hide(proto, ITERATOR, $default);
+ }
+ // Plug for library
+ Iterators[NAME] = $default;
+ Iterators[TAG] = returnThis;
+ if (DEFAULT) {
+ methods = {
+ values: DEF_VALUES ? $default : getMethod(VALUES),
+ keys: IS_SET ? $default : getMethod(KEYS),
+ entries: $entries
+ };
+ if (FORCED) for (key in methods) {
+ if (!(key in proto)) redefine(proto, key, methods[key]);
+ } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);
+ }
+ return methods;
+};
+
+
+/***/ }),
+/* 28 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var global = __webpack_require__(0);
+var core = __webpack_require__(7);
+var ctx = __webpack_require__(47);
+var hide = __webpack_require__(2);
+var has = __webpack_require__(1);
+var PROTOTYPE = 'prototype';
+
+var $export = function (type, name, source) {
+ var IS_FORCED = type & $export.F;
+ var IS_GLOBAL = type & $export.G;
+ var IS_STATIC = type & $export.S;
+ var IS_PROTO = type & $export.P;
+ var IS_BIND = type & $export.B;
+ var IS_WRAP = type & $export.W;
+ var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});
+ var expProto = exports[PROTOTYPE];
+ var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];
+ var key, own, out;
+ if (IS_GLOBAL) source = name;
+ for (key in source) {
+ // contains in native
+ own = !IS_FORCED && target && target[key] !== undefined;
+ if (own && has(exports, key)) continue;
+ // export native or passed
+ out = own ? target[key] : source[key];
+ // prevent global pollution for namespaces
+ exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]
+ // bind timers to global for call from export context
+ : IS_BIND && own ? ctx(out, global)
+ // wrap global constructors for prevent change them in library
+ : IS_WRAP && target[key] == out ? (function (C) {
+ var F = function (a, b, c) {
+ if (this instanceof C) {
+ switch (arguments.length) {
+ case 0: return new C();
+ case 1: return new C(a);
+ case 2: return new C(a, b);
+ } return new C(a, b, c);
+ } return C.apply(this, arguments);
+ };
+ F[PROTOTYPE] = C[PROTOTYPE];
+ return F;
+ // make static versions for prototype methods
+ })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
+ // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%
+ if (IS_PROTO) {
+ (exports.virtual || (exports.virtual = {}))[key] = out;
+ // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%
+ if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);
+ }
+ }
+};
+// type bitmap
+$export.F = 1; // forced
+$export.G = 2; // global
+$export.S = 4; // static
+$export.P = 8; // proto
+$export.B = 16; // bind
+$export.W = 32; // wrap
+$export.U = 64; // safe
+$export.R = 128; // real proto method for `library`
+module.exports = $export;
+
+
+/***/ }),
+/* 29 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = !__webpack_require__(4) && !__webpack_require__(11)(function () {
+ return Object.defineProperty(__webpack_require__(30)('div'), 'a', { get: function () { return 7; } }).a != 7;
+});
+
+
+/***/ }),
+/* 30 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var isObject = __webpack_require__(8);
+var document = __webpack_require__(0).document;
+// typeof document.createElement is 'object' in old IE
+var is = isObject(document) && isObject(document.createElement);
+module.exports = function (it) {
+ return is ? document.createElement(it) : {};
+};
+
+
+/***/ }),
+/* 31 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = __webpack_require__(2);
+
+
+/***/ }),
+/* 32 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
+var anObject = __webpack_require__(10);
+var dPs = __webpack_require__(50);
+var enumBugKeys = __webpack_require__(22);
+var IE_PROTO = __webpack_require__(20)('IE_PROTO');
+var Empty = function () { /* empty */ };
+var PROTOTYPE = 'prototype';
+
+// Create object with fake `null` prototype: use iframe Object with cleared prototype
+var createDict = function () {
+ // Thrash, waste and sodomy: IE GC bug
+ var iframe = __webpack_require__(30)('iframe');
+ var i = enumBugKeys.length;
+ var lt = '<';
+ var gt = '>';
+ var iframeDocument;
+ iframe.style.display = 'none';
+ __webpack_require__(55).appendChild(iframe);
+ iframe.src = 'javascript:'; // eslint-disable-line no-script-url
+ // createDict = iframe.contentWindow.Object;
+ // html.removeChild(iframe);
+ iframeDocument = iframe.contentWindow.document;
+ iframeDocument.open();
+ iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);
+ iframeDocument.close();
+ createDict = iframeDocument.F;
+ while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];
+ return createDict();
+};
+
+module.exports = Object.create || function create(O, Properties) {
+ var result;
+ if (O !== null) {
+ Empty[PROTOTYPE] = anObject(O);
+ result = new Empty();
+ Empty[PROTOTYPE] = null;
+ // add "__proto__" for Object.getPrototypeOf polyfill
+ result[IE_PROTO] = O;
+ } else result = createDict();
+ return Properties === undefined ? result : dPs(result, Properties);
+};
+
+
+/***/ }),
+/* 33 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var has = __webpack_require__(1);
+var toIObject = __webpack_require__(5);
+var arrayIndexOf = __webpack_require__(52)(false);
+var IE_PROTO = __webpack_require__(20)('IE_PROTO');
+
+module.exports = function (object, names) {
+ var O = toIObject(object);
+ var i = 0;
+ var result = [];
+ var key;
+ for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);
+ // Don't enum bug & hidden keys
+ while (names.length > i) if (has(O, key = names[i++])) {
+ ~arrayIndexOf(result, key) || result.push(key);
+ }
+ return result;
+};
+
+
+/***/ }),
+/* 34 */
+/***/ (function(module, exports) {
+
+var toString = {}.toString;
+
+module.exports = function (it) {
+ return toString.call(it).slice(8, -1);
+};
+
+
+/***/ }),
+/* 35 */
+/***/ (function(module, exports) {
+
+exports.f = Object.getOwnPropertySymbols;
+
+
+/***/ }),
+/* 36 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)
+var $keys = __webpack_require__(33);
+var hiddenKeys = __webpack_require__(22).concat('length', 'prototype');
+
+exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
+ return $keys(O, hiddenKeys);
+};
+
+
+/***/ }),
+/* 37 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+__webpack_require__(38);
+
+var _utils = __webpack_require__(14);
+
+var utils = _interopRequireWildcard(_utils);
+
+var _Landing = __webpack_require__(73);
+
+var _Landing2 = _interopRequireDefault(_Landing);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+// hide title bar
+try {
+ var titleBar = weex.requireModule('titleBar');
+ titleBar.showTitleBar(false);
+} catch (e) {}
+
+// fetch and save examples
+setTimeout(function () {
+ utils.fetchExamples(utils.saveExamples);
+ utils.fetchGuide(utils.saveGuide);
+ utils.fetchAbout(utils.saveAbout);
+}, 10);
+
+_Landing2.default.el = '#root';
+new Vue(_Landing2.default);
+
+/***/ }),
+/* 38 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _mixin = __webpack_require__(39);
+
+var _mixin2 = _interopRequireDefault(_mixin);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+// use shared mixins
+Vue.mixin(_mixin2.default);
+
+/***/ }),
+/* 39 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _index = __webpack_require__(14);
+
+var utils = _interopRequireWildcard(_index);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+var storage = weex.requireModule('storage');
+
+exports.default = {
+ filters: {
+ i18n: utils.i18n,
+ url: utils.createURL,
+ link: utils.createLink
+ },
+ methods: {
+ createLink: utils.createLink,
+ createURL: utils.createURL,
+ i18n: utils.i18n,
+ getLanguage: utils.getLanguage,
+ fetchData: utils.fetchData,
+ saveData: utils.saveData,
+ readData: utils.readData,
+ jumpTo: utils.jumpTo
+ },
+ created: function created() {
+ var _this = this;
+
+ // get and set language
+ utils.getLanguage(function (language) {
+ _this.language = language;
+ utils.setTitleBar(_this.navigationBarOptions, language);
+ });
+
+ // listen to the language change event
+ var channel = new BroadcastChannel('language');
+ channel.onmessage = function (event) {
+ if (event.data && event.data.language) {
+ _this.language = event.data.language;
+ }
+ };
+ },
+ beforeDestroy: function beforeDestroy() {
+ storage.removeItem('CURRENT_DOCUMENT_URL');
+ storage.removeItem('CURRENT_SOURCE_HASH');
+ }
+};
+
+/***/ }),
+/* 40 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = { "default": __webpack_require__(41), __esModule: true };
+
+/***/ }),
+/* 41 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var core = __webpack_require__(7);
+var $JSON = core.JSON || (core.JSON = { stringify: JSON.stringify });
+module.exports = function stringify(it) { // eslint-disable-line no-unused-vars
+ return $JSON.stringify.apply($JSON, arguments);
+};
+
+
+/***/ }),
+/* 42 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+exports.__esModule = true;
+
+var _iterator = __webpack_require__(43);
+
+var _iterator2 = _interopRequireDefault(_iterator);
+
+var _symbol = __webpack_require__(62);
+
+var _symbol2 = _interopRequireDefault(_symbol);
+
+var _typeof = typeof _symbol2.default === "function" && typeof _iterator2.default === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj; };
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+exports.default = typeof _symbol2.default === "function" && _typeof(_iterator2.default) === "symbol" ? function (obj) {
+ return typeof obj === "undefined" ? "undefined" : _typeof(obj);
+} : function (obj) {
+ return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof(obj);
+};
+
+/***/ }),
+/* 43 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = { "default": __webpack_require__(44), __esModule: true };
+
+/***/ }),
+/* 44 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(45);
+__webpack_require__(58);
+module.exports = __webpack_require__(24).f('iterator');
+
+
+/***/ }),
+/* 45 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var $at = __webpack_require__(46)(true);
+
+// 21.1.3.27 String.prototype[@@iterator]()
+__webpack_require__(27)(String, 'String', function (iterated) {
+ this._t = String(iterated); // target
+ this._i = 0; // next index
+// 21.1.5.2.1 %StringIteratorPrototype%.next()
+}, function () {
+ var O = this._t;
+ var index = this._i;
+ var point;
+ if (index >= O.length) return { value: undefined, done: true };
+ point = $at(O, index);
+ this._i += point.length;
+ return { value: point, done: false };
+});
+
+
+/***/ }),
+/* 46 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var toInteger = __webpack_require__(15);
+var defined = __webpack_require__(16);
+// true -> String#at
+// false -> String#codePointAt
+module.exports = function (TO_STRING) {
+ return function (that, pos) {
+ var s = String(defined(that));
+ var i = toInteger(pos);
+ var l = s.length;
+ var a, b;
+ if (i < 0 || i >= l) return TO_STRING ? '' : undefined;
+ a = s.charCodeAt(i);
+ return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff
+ ? TO_STRING ? s.charAt(i) : a
+ : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;
+ };
+};
+
+
+/***/ }),
+/* 47 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// optional / simple context binding
+var aFunction = __webpack_require__(48);
+module.exports = function (fn, that, length) {
+ aFunction(fn);
+ if (that === undefined) return fn;
+ switch (length) {
+ case 1: return function (a) {
+ return fn.call(that, a);
+ };
+ case 2: return function (a, b) {
+ return fn.call(that, a, b);
+ };
+ case 3: return function (a, b, c) {
+ return fn.call(that, a, b, c);
+ };
+ }
+ return function (/* ...args */) {
+ return fn.apply(that, arguments);
+ };
+};
+
+
+/***/ }),
+/* 48 */
+/***/ (function(module, exports) {
+
+module.exports = function (it) {
+ if (typeof it != 'function') throw TypeError(it + ' is not a function!');
+ return it;
+};
+
+
+/***/ }),
+/* 49 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var create = __webpack_require__(32);
+var descriptor = __webpack_require__(12);
+var setToStringTag = __webpack_require__(23);
+var IteratorPrototype = {};
+
+// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
+__webpack_require__(2)(IteratorPrototype, __webpack_require__(6)('iterator'), function () { return this; });
+
+module.exports = function (Constructor, NAME, next) {
+ Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });
+ setToStringTag(Constructor, NAME + ' Iterator');
+};
+
+
+/***/ }),
+/* 50 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var dP = __webpack_require__(3);
+var anObject = __webpack_require__(10);
+var getKeys = __webpack_require__(19);
+
+module.exports = __webpack_require__(4) ? Object.defineProperties : function defineProperties(O, Properties) {
+ anObject(O);
+ var keys = getKeys(Properties);
+ var length = keys.length;
+ var i = 0;
+ var P;
+ while (length > i) dP.f(O, P = keys[i++], Properties[P]);
+ return O;
+};
+
+
+/***/ }),
+/* 51 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// fallback for non-array-like ES3 and non-enumerable old V8 strings
+var cof = __webpack_require__(34);
+// eslint-disable-next-line no-prototype-builtins
+module.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {
+ return cof(it) == 'String' ? it.split('') : Object(it);
+};
+
+
+/***/ }),
+/* 52 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// false -> Array#indexOf
+// true -> Array#includes
+var toIObject = __webpack_require__(5);
+var toLength = __webpack_require__(53);
+var toAbsoluteIndex = __webpack_require__(54);
+module.exports = function (IS_INCLUDES) {
+ return function ($this, el, fromIndex) {
+ var O = toIObject($this);
+ var length = toLength(O.length);
+ var index = toAbsoluteIndex(fromIndex, length);
+ var value;
+ // Array#includes uses SameValueZero equality algorithm
+ // eslint-disable-next-line no-self-compare
+ if (IS_INCLUDES && el != el) while (length > index) {
+ value = O[index++];
+ // eslint-disable-next-line no-self-compare
+ if (value != value) return true;
+ // Array#indexOf ignores holes, Array#includes - not
+ } else for (;length > index; index++) if (IS_INCLUDES || index in O) {
+ if (O[index] === el) return IS_INCLUDES || index || 0;
+ } return !IS_INCLUDES && -1;
+ };
+};
+
+
+/***/ }),
+/* 53 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 7.1.15 ToLength
+var toInteger = __webpack_require__(15);
+var min = Math.min;
+module.exports = function (it) {
+ return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
+};
+
+
+/***/ }),
+/* 54 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var toInteger = __webpack_require__(15);
+var max = Math.max;
+var min = Math.min;
+module.exports = function (index, length) {
+ index = toInteger(index);
+ return index < 0 ? max(index + length, 0) : min(index, length);
+};
+
+
+/***/ }),
+/* 55 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var document = __webpack_require__(0).document;
+module.exports = document && document.documentElement;
+
+
+/***/ }),
+/* 56 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)
+var has = __webpack_require__(1);
+var toObject = __webpack_require__(57);
+var IE_PROTO = __webpack_require__(20)('IE_PROTO');
+var ObjectProto = Object.prototype;
+
+module.exports = Object.getPrototypeOf || function (O) {
+ O = toObject(O);
+ if (has(O, IE_PROTO)) return O[IE_PROTO];
+ if (typeof O.constructor == 'function' && O instanceof O.constructor) {
+ return O.constructor.prototype;
+ } return O instanceof Object ? ObjectProto : null;
+};
+
+
+/***/ }),
+/* 57 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 7.1.13 ToObject(argument)
+var defined = __webpack_require__(16);
+module.exports = function (it) {
+ return Object(defined(it));
+};
+
+
+/***/ }),
+/* 58 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(59);
+var global = __webpack_require__(0);
+var hide = __webpack_require__(2);
+var Iterators = __webpack_require__(18);
+var TO_STRING_TAG = __webpack_require__(6)('toStringTag');
+
+var DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +
+ 'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +
+ 'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +
+ 'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +
+ 'TextTrackList,TouchList').split(',');
+
+for (var i = 0; i < DOMIterables.length; i++) {
+ var NAME = DOMIterables[i];
+ var Collection = global[NAME];
+ var proto = Collection && Collection.prototype;
+ if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);
+ Iterators[NAME] = Iterators.Array;
+}
+
+
+/***/ }),
+/* 59 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var addToUnscopables = __webpack_require__(60);
+var step = __webpack_require__(61);
+var Iterators = __webpack_require__(18);
+var toIObject = __webpack_require__(5);
+
+// 22.1.3.4 Array.prototype.entries()
+// 22.1.3.13 Array.prototype.keys()
+// 22.1.3.29 Array.prototype.values()
+// 22.1.3.30 Array.prototype[@@iterator]()
+module.exports = __webpack_require__(27)(Array, 'Array', function (iterated, kind) {
+ this._t = toIObject(iterated); // target
+ this._i = 0; // next index
+ this._k = kind; // kind
+// 22.1.5.2.1 %ArrayIteratorPrototype%.next()
+}, function () {
+ var O = this._t;
+ var kind = this._k;
+ var index = this._i++;
+ if (!O || index >= O.length) {
+ this._t = undefined;
+ return step(1);
+ }
+ if (kind == 'keys') return step(0, index);
+ if (kind == 'values') return step(0, O[index]);
+ return step(0, [index, O[index]]);
+}, 'values');
+
+// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)
+Iterators.Arguments = Iterators.Array;
+
+addToUnscopables('keys');
+addToUnscopables('values');
+addToUnscopables('entries');
+
+
+/***/ }),
+/* 60 */
+/***/ (function(module, exports) {
+
+module.exports = function () { /* empty */ };
+
+
+/***/ }),
+/* 61 */
+/***/ (function(module, exports) {
+
+module.exports = function (done, value) {
+ return { value: value, done: !!done };
+};
+
+
+/***/ }),
+/* 62 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = { "default": __webpack_require__(63), __esModule: true };
+
+/***/ }),
+/* 63 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(64);
+__webpack_require__(70);
+__webpack_require__(71);
+__webpack_require__(72);
+module.exports = __webpack_require__(7).Symbol;
+
+
+/***/ }),
+/* 64 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+// ECMAScript 6 symbols shim
+var global = __webpack_require__(0);
+var has = __webpack_require__(1);
+var DESCRIPTORS = __webpack_require__(4);
+var $export = __webpack_require__(28);
+var redefine = __webpack_require__(31);
+var META = __webpack_require__(65).KEY;
+var $fails = __webpack_require__(11);
+var shared = __webpack_require__(21);
+var setToStringTag = __webpack_require__(23);
+var uid = __webpack_require__(13);
+var wks = __webpack_require__(6);
+var wksExt = __webpack_require__(24);
+var wksDefine = __webpack_require__(25);
+var enumKeys = __webpack_require__(66);
+var isArray = __webpack_require__(67);
+var anObject = __webpack_require__(10);
+var isObject = __webpack_require__(8);
+var toIObject = __webpack_require__(5);
+var toPrimitive = __webpack_require__(17);
+var createDesc = __webpack_require__(12);
+var _create = __webpack_require__(32);
+var gOPNExt = __webpack_require__(68);
+var $GOPD = __webpack_require__(69);
+var $DP = __webpack_require__(3);
+var $keys = __webpack_require__(19);
+var gOPD = $GOPD.f;
+var dP = $DP.f;
+var gOPN = gOPNExt.f;
+var $Symbol = global.Symbol;
+var $JSON = global.JSON;
+var _stringify = $JSON && $JSON.stringify;
+var PROTOTYPE = 'prototype';
+var HIDDEN = wks('_hidden');
+var TO_PRIMITIVE = wks('toPrimitive');
+var isEnum = {}.propertyIsEnumerable;
+var SymbolRegistry = shared('symbol-registry');
+var AllSymbols = shared('symbols');
+var OPSymbols = shared('op-symbols');
+var ObjectProto = Object[PROTOTYPE];
+var USE_NATIVE = typeof $Symbol == 'function';
+var QObject = global.QObject;
+// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173
+var setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;
+
+// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687
+var setSymbolDesc = DESCRIPTORS && $fails(function () {
+ return _create(dP({}, 'a', {
+ get: function () { return dP(this, 'a', { value: 7 }).a; }
+ })).a != 7;
+}) ? function (it, key, D) {
+ var protoDesc = gOPD(ObjectProto, key);
+ if (protoDesc) delete ObjectProto[key];
+ dP(it, key, D);
+ if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);
+} : dP;
+
+var wrap = function (tag) {
+ var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);
+ sym._k = tag;
+ return sym;
+};
+
+var isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {
+ return typeof it == 'symbol';
+} : function (it) {
+ return it instanceof $Symbol;
+};
+
+var $defineProperty = function defineProperty(it, key, D) {
+ if (it === ObjectProto) $defineProperty(OPSymbols, key, D);
+ anObject(it);
+ key = toPrimitive(key, true);
+ anObject(D);
+ if (has(AllSymbols, key)) {
+ if (!D.enumerable) {
+ if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));
+ it[HIDDEN][key] = true;
+ } else {
+ if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;
+ D = _create(D, { enumerable: createDesc(0, false) });
+ } return setSymbolDesc(it, key, D);
+ } return dP(it, key, D);
+};
+var $defineProperties = function defineProperties(it, P) {
+ anObject(it);
+ var keys = enumKeys(P = toIObject(P));
+ var i = 0;
+ var l = keys.length;
+ var key;
+ while (l > i) $defineProperty(it, key = keys[i++], P[key]);
+ return it;
+};
+var $create = function create(it, P) {
+ return P === undefined ? _create(it) : $defineProperties(_create(it), P);
+};
+var $propertyIsEnumerable = function propertyIsEnumerable(key) {
+ var E = isEnum.call(this, key = toPrimitive(key, true));
+ if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;
+ return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;
+};
+var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {
+ it = toIObject(it);
+ key = toPrimitive(key, true);
+ if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;
+ var D = gOPD(it, key);
+ if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;
+ return D;
+};
+var $getOwnPropertyNames = function getOwnPropertyNames(it) {
+ var names = gOPN(toIObject(it));
+ var result = [];
+ var i = 0;
+ var key;
+ while (names.length > i) {
+ if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);
+ } return result;
+};
+var $getOwnPropertySymbols = function getOwnPropertySymbols(it) {
+ var IS_OP = it === ObjectProto;
+ var names = gOPN(IS_OP ? OPSymbols : toIObject(it));
+ var result = [];
+ var i = 0;
+ var key;
+ while (names.length > i) {
+ if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);
+ } return result;
+};
+
+// 19.4.1.1 Symbol([description])
+if (!USE_NATIVE) {
+ $Symbol = function Symbol() {
+ if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');
+ var tag = uid(arguments.length > 0 ? arguments[0] : undefined);
+ var $set = function (value) {
+ if (this === ObjectProto) $set.call(OPSymbols, value);
+ if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;
+ setSymbolDesc(this, tag, createDesc(1, value));
+ };
+ if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });
+ return wrap(tag);
+ };
+ redefine($Symbol[PROTOTYPE], 'toString', function toString() {
+ return this._k;
+ });
+
+ $GOPD.f = $getOwnPropertyDescriptor;
+ $DP.f = $defineProperty;
+ __webpack_require__(36).f = gOPNExt.f = $getOwnPropertyNames;
+ __webpack_require__(26).f = $propertyIsEnumerable;
+ __webpack_require__(35).f = $getOwnPropertySymbols;
+
+ if (DESCRIPTORS && !__webpack_require__(9)) {
+ redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);
+ }
+
+ wksExt.f = function (name) {
+ return wrap(wks(name));
+ };
+}
+
+$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });
+
+for (var es6Symbols = (
+ // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14
+ 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'
+).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);
+
+for (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);
+
+$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {
+ // 19.4.2.1 Symbol.for(key)
+ 'for': function (key) {
+ return has(SymbolRegistry, key += '')
+ ? SymbolRegistry[key]
+ : SymbolRegistry[key] = $Symbol(key);
+ },
+ // 19.4.2.5 Symbol.keyFor(sym)
+ keyFor: function keyFor(sym) {
+ if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');
+ for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;
+ },
+ useSetter: function () { setter = true; },
+ useSimple: function () { setter = false; }
+});
+
+$export($export.S + $export.F * !USE_NATIVE, 'Object', {
+ // 19.1.2.2 Object.create(O [, Properties])
+ create: $create,
+ // 19.1.2.4 Object.defineProperty(O, P, Attributes)
+ defineProperty: $defineProperty,
+ // 19.1.2.3 Object.defineProperties(O, Properties)
+ defineProperties: $defineProperties,
+ // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)
+ getOwnPropertyDescriptor: $getOwnPropertyDescriptor,
+ // 19.1.2.7 Object.getOwnPropertyNames(O)
+ getOwnPropertyNames: $getOwnPropertyNames,
+ // 19.1.2.8 Object.getOwnPropertySymbols(O)
+ getOwnPropertySymbols: $getOwnPropertySymbols
+});
+
+// 24.3.2 JSON.stringify(value [, replacer [, space]])
+$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {
+ var S = $Symbol();
+ // MS Edge converts symbol values to JSON as {}
+ // WebKit converts symbol values to JSON as null
+ // V8 throws on boxed symbols
+ return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';
+})), 'JSON', {
+ stringify: function stringify(it) {
+ var args = [it];
+ var i = 1;
+ var replacer, $replacer;
+ while (arguments.length > i) args.push(arguments[i++]);
+ $replacer = replacer = args[1];
+ if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined
+ if (!isArray(replacer)) replacer = function (key, value) {
+ if (typeof $replacer == 'function') value = $replacer.call(this, key, value);
+ if (!isSymbol(value)) return value;
+ };
+ args[1] = replacer;
+ return _stringify.apply($JSON, args);
+ }
+});
+
+// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)
+$Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(2)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);
+// 19.4.3.5 Symbol.prototype[@@toStringTag]
+setToStringTag($Symbol, 'Symbol');
+// 20.2.1.9 Math[@@toStringTag]
+setToStringTag(Math, 'Math', true);
+// 24.3.3 JSON[@@toStringTag]
+setToStringTag(global.JSON, 'JSON', true);
+
+
+/***/ }),
+/* 65 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var META = __webpack_require__(13)('meta');
+var isObject = __webpack_require__(8);
+var has = __webpack_require__(1);
+var setDesc = __webpack_require__(3).f;
+var id = 0;
+var isExtensible = Object.isExtensible || function () {
+ return true;
+};
+var FREEZE = !__webpack_require__(11)(function () {
+ return isExtensible(Object.preventExtensions({}));
+});
+var setMeta = function (it) {
+ setDesc(it, META, { value: {
+ i: 'O' + ++id, // object ID
+ w: {} // weak collections IDs
+ } });
+};
+var fastKey = function (it, create) {
+ // return primitive with prefix
+ if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;
+ if (!has(it, META)) {
+ // can't set metadata to uncaught frozen object
+ if (!isExtensible(it)) return 'F';
+ // not necessary to add metadata
+ if (!create) return 'E';
+ // add missing metadata
+ setMeta(it);
+ // return object ID
+ } return it[META].i;
+};
+var getWeak = function (it, create) {
+ if (!has(it, META)) {
+ // can't set metadata to uncaught frozen object
+ if (!isExtensible(it)) return true;
+ // not necessary to add metadata
+ if (!create) return false;
+ // add missing metadata
+ setMeta(it);
+ // return hash weak collections IDs
+ } return it[META].w;
+};
+// add metadata on freeze-family methods calling
+var onFreeze = function (it) {
+ if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);
+ return it;
+};
+var meta = module.exports = {
+ KEY: META,
+ NEED: false,
+ fastKey: fastKey,
+ getWeak: getWeak,
+ onFreeze: onFreeze
+};
+
+
+/***/ }),
+/* 66 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// all enumerable object keys, includes symbols
+var getKeys = __webpack_require__(19);
+var gOPS = __webpack_require__(35);
+var pIE = __webpack_require__(26);
+module.exports = function (it) {
+ var result = getKeys(it);
+ var getSymbols = gOPS.f;
+ if (getSymbols) {
+ var symbols = getSymbols(it);
+ var isEnum = pIE.f;
+ var i = 0;
+ var key;
+ while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);
+ } return result;
+};
+
+
+/***/ }),
+/* 67 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 7.2.2 IsArray(argument)
+var cof = __webpack_require__(34);
+module.exports = Array.isArray || function isArray(arg) {
+ return cof(arg) == 'Array';
+};
+
+
+/***/ }),
+/* 68 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
+var toIObject = __webpack_require__(5);
+var gOPN = __webpack_require__(36).f;
+var toString = {}.toString;
+
+var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames
+ ? Object.getOwnPropertyNames(window) : [];
+
+var getWindowNames = function (it) {
+ try {
+ return gOPN(it);
+ } catch (e) {
+ return windowNames.slice();
+ }
+};
+
+module.exports.f = function getOwnPropertyNames(it) {
+ return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));
+};
+
+
+/***/ }),
+/* 69 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var pIE = __webpack_require__(26);
+var createDesc = __webpack_require__(12);
+var toIObject = __webpack_require__(5);
+var toPrimitive = __webpack_require__(17);
+var has = __webpack_require__(1);
+var IE8_DOM_DEFINE = __webpack_require__(29);
+var gOPD = Object.getOwnPropertyDescriptor;
+
+exports.f = __webpack_require__(4) ? gOPD : function getOwnPropertyDescriptor(O, P) {
+ O = toIObject(O);
+ P = toPrimitive(P, true);
+ if (IE8_DOM_DEFINE) try {
+ return gOPD(O, P);
+ } catch (e) { /* empty */ }
+ if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);
+};
+
+
+/***/ }),
+/* 70 */
+/***/ (function(module, exports) {
+
+
+
+/***/ }),
+/* 71 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(25)('asyncIterator');
+
+
+/***/ }),
+/* 72 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(25)('observable');
+
+
+/***/ }),
+/* 73 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var __vue_exports__, __vue_options__
+var __vue_styles__ = []
+
+/* styles */
+__vue_styles__.push(__webpack_require__(74)
+)
+
+/* script */
+__vue_exports__ = __webpack_require__(75)
+
+/* template */
+var __vue_template__ = __webpack_require__(80)
+__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+if (
+ typeof __vue_exports__.default === "object" ||
+ typeof __vue_exports__.default === "function"
+) {
+if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+__vue_options__ = __vue_exports__ = __vue_exports__.default
+}
+if (typeof __vue_options__ === "function") {
+ __vue_options__ = __vue_options__.options
+}
+__vue_options__.__file = "/Users/kw/github/weex-vue-examples/src/pages/landing/Landing.vue"
+__vue_options__.render = __vue_template__.render
+__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+__vue_options__._scopeId = "data-v-6b061736"
+__vue_options__.style = __vue_options__.style || {}
+__vue_styles__.forEach(function (module) {
+ for (var name in module) {
+ __vue_options__.style[name] = module[name]
+ }
+})
+if (typeof __register_static_styles__ === "function") {
+ __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+}
+
+module.exports = __vue_exports__
+
+
+/***/ }),
+/* 74 */
+/***/ (function(module, exports) {
+
+module.exports = {
+ "doodle": {
+ "width": "750",
+ "height": "880"
+ },
+ "menu-list": {
+ "flex": 1
+ },
+ "menu-row": {
+ "flex": 1,
+ "flexDirection": "row",
+ "justifyContent": "center",
+ "borderTopWidth": "1",
+ "borderTopStyle": "solid",
+ "borderTopColor": "#CCCCCC"
+ },
+ "menu-item": {
+ "flex": 1,
+ "backgroundColor": "#FBFBFB",
+ "justifyContent": "center",
+ "paddingTop": "50",
+ "paddingBottom": "50",
+ "backgroundColor:active": "#F2F2F2"
+ },
+ "menu-item-1": {
+ "borderRightWidth": "1",
+ "borderRightStyle": "solid",
+ "borderRightColor": "#CCCCCC"
+ },
+ "menu-text": {
+ "textAlign": "center",
+ "fontSize": "52",
+ "fontWeight": "bold",
+ "color": "#8B8B8B"
+ },
+ "menu-text-zh": {
+ "fontSize": "56"
+ }
+}
+
+/***/ }),
+/* 75 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _Doodle = __webpack_require__(76);
+
+var _Doodle2 = _interopRequireDefault(_Doodle);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+exports.default = {
+ components: { Doodle: _Doodle2.default },
+ data: function data() {
+ return {
+ language: 'en',
+ menus: [[{ name: 'guide', title: { en: 'Guide', zh: '教程' } }, { name: 'examples', title: { en: 'Examples', zh: '实例' } }], [{ name: 'news', title: { en: 'News', zh: '资讯' } }, { name: 'about', title: { en: 'About', zh: '关于' } }]]
+ };
+ }
+}; //
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+/***/ }),
+/* 76 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var __vue_exports__, __vue_options__
+var __vue_styles__ = []
+
+/* styles */
+__vue_styles__.push(__webpack_require__(77)
+)
+
+/* script */
+__vue_exports__ = __webpack_require__(78)
+
+/* template */
+var __vue_template__ = __webpack_require__(79)
+__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+if (
+ typeof __vue_exports__.default === "object" ||
+ typeof __vue_exports__.default === "function"
+) {
+if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+__vue_options__ = __vue_exports__ = __vue_exports__.default
+}
+if (typeof __vue_options__ === "function") {
+ __vue_options__ = __vue_options__.options
+}
+__vue_options__.__file = "/Users/kw/github/weex-vue-examples/src/components/Doodle.vue"
+__vue_options__.render = __vue_template__.render
+__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+__vue_options__._scopeId = "data-v-d429dafa"
+__vue_options__.style = __vue_options__.style || {}
+__vue_styles__.forEach(function (module) {
+ for (var name in module) {
+ __vue_options__.style[name] = module[name]
+ }
+})
+if (typeof __register_static_styles__ === "function") {
+ __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+}
+
+module.exports = __vue_exports__
+
+
+/***/ }),
+/* 77 */
+/***/ (function(module, exports) {
+
+module.exports = {
+ "wrapper": {
+ "alignItems": "center",
+ "justifyContent": "space-between",
+ "backgroundColor": "#FFFFFF"
+ },
+ "center": {
+ "alignItems": "center",
+ "justifyContent": "center"
+ },
+ "logo": {
+ "width": "750",
+ "height": "318"
+ },
+ "btn": {
+ "width": "450",
+ "height": "160",
+ "marginTop": "50",
+ "marginRight": "50",
+ "marginBottom": "50",
+ "marginLeft": "50",
+ "opacity": 0.7,
+ "opacity:active": 1
+ },
+ "scan-bg": {
+ "width": "450",
+ "height": "160",
+ "position": "absolute",
+ "top": 0,
+ "left": 0
+ },
+ "btn-text": {
+ "color": "#505050",
+ "fontSize": "56",
+ "textAlign": "center"
+ },
+ "btn-text-zh": {
+ "fontSize": "64"
+ }
+}
+
+/***/ }),
+/* 78 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _utils = __webpack_require__(14);
+
+var modal = weex.requireModule('modal'); //
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+var navigator = weex.requireModule('navigator');
+var event = weex.requireModule('event');
+
+function isValidDoodle(doodle) {
+ var now = new Date().getTime();
+ return doodle && doodle.src && parseInt(doodle.from, 10) < now && now < parseInt(doodle.to, 10);
+}
+
+exports.default = {
+ props: ['lang'],
+ data: function data() {
+ return {
+ language: this.lang || 'en',
+ showDoodle: false,
+ seenDoodle: false,
+ SCAN: { en: 'Scan QR Code', zh: '扫描二维码' },
+ doodle: {}
+ };
+ },
+ beforeCreate: function beforeCreate() {
+ var _this = this;
+
+ (0, _utils.fetchDoodle)(function (_ref) {
+ var doodle = _ref.doodle;
+
+ if (isValidDoodle(doodle) && !_this.seenDoodle) {
+ _this.doodle = doodle;
+ _this.showDoodle = true;
+ doodle.duration && setTimeout(function () {
+ _this.showDoodle = false;
+ _this.seenDoodle = true;
+ }, parseInt(doodle.duration, 10));
+ }
+ });
+ },
+
+ methods: {
+ scan: function scan() {
+ try {
+ event.openURL('weex://go/scan');
+ } catch (e) {
+ try {
+ navigator.push({ url: 'weex://go/scan' });
+ } catch (e) {}
+ }
+ },
+ magic: function magic() {
+ if (this.doodle && this.doodle.next) {
+ this.showDoodle = false;
+ navigator.push({
+ url: this.createURL(this.doodle.next, {
+ language: this.language
+ })
+ });
+ }
+ }
+ }
+};
+
+/***/ }),
+/* 79 */
+/***/ (function(module, exports) {
+
+module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+ return _c('div', {
+ staticClass: ["wrapper"]
+ }, [(_vm.showDoodle && _vm.doodle.src) ? _c('embed', {
+ staticStyle: {
+ flex: "1"
+ },
+ attrs: {
+ "src": _vm._f("url")(_vm.doodle.src)
+ },
+ on: {
+ "click": _vm.magic
+ }
+ }) : _c('div', {
+ staticClass: ["center"],
+ staticStyle: {
+ flex: "1"
+ }
+ }, [_c('image', {
+ staticClass: ["logo"],
+ attrs: {
+ "src": "https://gw.alicdn.com/tfs/TB1Q9VBkRfH8KJjy1XbXXbLdXXa-3799-1615.png"
+ }
+ }), _c('div', {
+ staticClass: ["btn", "center"],
+ on: {
+ "click": _vm.scan
+ }
+ }, [_c('image', {
+ staticClass: ["scan-bg"],
+ attrs: {
+ "src": "https://gw.alicdn.com/tfs/TB1qnO0kLDH8KJjy1XcXXcpdXXa-900-320.png"
+ }
+ }), _c('text', {
+ class: ['btn-text', 'btn-text-' + _vm.language]
+ }, [_vm._v(_vm._s(_vm.i18n(_vm.SCAN)))])])])])
+},staticRenderFns: []}
+module.exports.render._withStripped = true
+
+/***/ }),
+/* 80 */
+/***/ (function(module, exports) {
+
+module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+ return _c('div', {
+ staticClass: ["wrapper"]
+ }, [_c('doodle', {
+ staticClass: ["doodle"],
+ attrs: {
+ "lang": _vm.language
+ }
+ }), _c('div', {
+ staticClass: ["menu-list"]
+ }, _vm._l((_vm.menus), function(row, r) {
+ return _c('div', {
+ key: r,
+ class: ['menu-row', ("menu-row-" + (r+1))]
+ }, _vm._l((row), function(menu, i) {
+ return _c('a', {
+ key: menu.name,
+ class: ['menu-item', ("menu-item-" + (i+1))],
+ attrs: {
+ "href": _vm._f("link")(menu.name, {
+ language: _vm.language
+ })
+ }
+ }, [_c('text', {
+ class: ['menu-text', ("menu-text-" + _vm.language)]
+ }, [_vm._v(_vm._s(_vm.i18n(menu.title)))])])
+ }))
+ }))], 1)
+},staticRenderFns: []}
+module.exports.render._withStripped = true
+
+/***/ })
+/******/ ]);
\ No newline at end of file
diff --git a/ios/bundlejs/news.weex.js b/ios/bundlejs/news.weex.js
new file mode 100644
index 0000000..b8fc988
--- /dev/null
+++ b/ios/bundlejs/news.weex.js
@@ -0,0 +1,2266 @@
+// { "framework": "Vue" }
+"use weex:vue";
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ // The module cache
+/******/ var installedModules = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/
+/******/ // Check if module is in cache
+/******/ if(installedModules[moduleId]) {
+/******/ return installedModules[moduleId].exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = installedModules[moduleId] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = true;
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = modules;
+/******/
+/******/ // expose the module cache
+/******/ __webpack_require__.c = installedModules;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, {
+/******/ configurable: false,
+/******/ enumerable: true,
+/******/ get: getter
+/******/ });
+/******/ }
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = 37);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ (function(module, exports) {
+
+// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
+var global = module.exports = typeof window != 'undefined' && window.Math == Math
+ ? window : typeof self != 'undefined' && self.Math == Math ? self
+ // eslint-disable-next-line no-new-func
+ : Function('return this')();
+if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef
+
+
+/***/ }),
+/* 1 */
+/***/ (function(module, exports) {
+
+var hasOwnProperty = {}.hasOwnProperty;
+module.exports = function (it, key) {
+ return hasOwnProperty.call(it, key);
+};
+
+
+/***/ }),
+/* 2 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var dP = __webpack_require__(3);
+var createDesc = __webpack_require__(12);
+module.exports = __webpack_require__(4) ? function (object, key, value) {
+ return dP.f(object, key, createDesc(1, value));
+} : function (object, key, value) {
+ object[key] = value;
+ return object;
+};
+
+
+/***/ }),
+/* 3 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var anObject = __webpack_require__(10);
+var IE8_DOM_DEFINE = __webpack_require__(29);
+var toPrimitive = __webpack_require__(16);
+var dP = Object.defineProperty;
+
+exports.f = __webpack_require__(4) ? Object.defineProperty : function defineProperty(O, P, Attributes) {
+ anObject(O);
+ P = toPrimitive(P, true);
+ anObject(Attributes);
+ if (IE8_DOM_DEFINE) try {
+ return dP(O, P, Attributes);
+ } catch (e) { /* empty */ }
+ if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');
+ if ('value' in Attributes) O[P] = Attributes.value;
+ return O;
+};
+
+
+/***/ }),
+/* 4 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// Thank's IE8 for his funny defineProperty
+module.exports = !__webpack_require__(11)(function () {
+ return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;
+});
+
+
+/***/ }),
+/* 5 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// to indexed object, toObject with fallback for non-array-like ES3 strings
+var IObject = __webpack_require__(51);
+var defined = __webpack_require__(15);
+module.exports = function (it) {
+ return IObject(defined(it));
+};
+
+
+/***/ }),
+/* 6 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var store = __webpack_require__(20)('wks');
+var uid = __webpack_require__(13);
+var Symbol = __webpack_require__(0).Symbol;
+var USE_SYMBOL = typeof Symbol == 'function';
+
+var $exports = module.exports = function (name) {
+ return store[name] || (store[name] =
+ USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));
+};
+
+$exports.store = store;
+
+
+/***/ }),
+/* 7 */
+/***/ (function(module, exports) {
+
+var core = module.exports = { version: '2.5.7' };
+if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef
+
+
+/***/ }),
+/* 8 */
+/***/ (function(module, exports) {
+
+module.exports = function (it) {
+ return typeof it === 'object' ? it !== null : typeof it === 'function';
+};
+
+
+/***/ }),
+/* 9 */
+/***/ (function(module, exports) {
+
+module.exports = true;
+
+
+/***/ }),
+/* 10 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var isObject = __webpack_require__(8);
+module.exports = function (it) {
+ if (!isObject(it)) throw TypeError(it + ' is not an object!');
+ return it;
+};
+
+
+/***/ }),
+/* 11 */
+/***/ (function(module, exports) {
+
+module.exports = function (exec) {
+ try {
+ return !!exec();
+ } catch (e) {
+ return true;
+ }
+};
+
+
+/***/ }),
+/* 12 */
+/***/ (function(module, exports) {
+
+module.exports = function (bitmap, value) {
+ return {
+ enumerable: !(bitmap & 1),
+ configurable: !(bitmap & 2),
+ writable: !(bitmap & 4),
+ value: value
+ };
+};
+
+
+/***/ }),
+/* 13 */
+/***/ (function(module, exports) {
+
+var id = 0;
+var px = Math.random();
+module.exports = function (key) {
+ return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
+};
+
+
+/***/ }),
+/* 14 */
+/***/ (function(module, exports) {
+
+// 7.1.4 ToInteger
+var ceil = Math.ceil;
+var floor = Math.floor;
+module.exports = function (it) {
+ return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
+};
+
+
+/***/ }),
+/* 15 */
+/***/ (function(module, exports) {
+
+// 7.2.1 RequireObjectCoercible(argument)
+module.exports = function (it) {
+ if (it == undefined) throw TypeError("Can't call method on " + it);
+ return it;
+};
+
+
+/***/ }),
+/* 16 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 7.1.1 ToPrimitive(input [, PreferredType])
+var isObject = __webpack_require__(8);
+// instead of the ES6 spec version, we didn't implement @@toPrimitive case
+// and the second argument - flag - preferred type is a string
+module.exports = function (it, S) {
+ if (!isObject(it)) return it;
+ var fn, val;
+ if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
+ if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;
+ if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
+ throw TypeError("Can't convert object to primitive value");
+};
+
+
+/***/ }),
+/* 17 */
+/***/ (function(module, exports) {
+
+module.exports = {};
+
+
+/***/ }),
+/* 18 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 19.1.2.14 / 15.2.3.14 Object.keys(O)
+var $keys = __webpack_require__(33);
+var enumBugKeys = __webpack_require__(21);
+
+module.exports = Object.keys || function keys(O) {
+ return $keys(O, enumBugKeys);
+};
+
+
+/***/ }),
+/* 19 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var shared = __webpack_require__(20)('keys');
+var uid = __webpack_require__(13);
+module.exports = function (key) {
+ return shared[key] || (shared[key] = uid(key));
+};
+
+
+/***/ }),
+/* 20 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var core = __webpack_require__(7);
+var global = __webpack_require__(0);
+var SHARED = '__core-js_shared__';
+var store = global[SHARED] || (global[SHARED] = {});
+
+(module.exports = function (key, value) {
+ return store[key] || (store[key] = value !== undefined ? value : {});
+})('versions', []).push({
+ version: core.version,
+ mode: __webpack_require__(9) ? 'pure' : 'global',
+ copyright: '© 2018 Denis Pushkarev (zloirock.ru)'
+});
+
+
+/***/ }),
+/* 21 */
+/***/ (function(module, exports) {
+
+// IE 8- don't enum bug keys
+module.exports = (
+ 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'
+).split(',');
+
+
+/***/ }),
+/* 22 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var def = __webpack_require__(3).f;
+var has = __webpack_require__(1);
+var TAG = __webpack_require__(6)('toStringTag');
+
+module.exports = function (it, tag, stat) {
+ if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });
+};
+
+
+/***/ }),
+/* 23 */
+/***/ (function(module, exports, __webpack_require__) {
+
+exports.f = __webpack_require__(6);
+
+
+/***/ }),
+/* 24 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var global = __webpack_require__(0);
+var core = __webpack_require__(7);
+var LIBRARY = __webpack_require__(9);
+var wksExt = __webpack_require__(23);
+var defineProperty = __webpack_require__(3).f;
+module.exports = function (name) {
+ var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});
+ if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });
+};
+
+
+/***/ }),
+/* 25 */
+/***/ (function(module, exports) {
+
+exports.f = {}.propertyIsEnumerable;
+
+
+/***/ }),
+/* 26 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.fetchNews = exports.fetchDoodle = exports.readAbout = exports.saveAbout = exports.fetchAbout = exports.readGuide = exports.saveGuide = exports.fetchGuide = exports.readExamples = exports.saveExamples = exports.fetchExamples = undefined;
+
+var _stringify = __webpack_require__(40);
+
+var _stringify2 = _interopRequireDefault(_stringify);
+
+var _typeof2 = __webpack_require__(42);
+
+var _typeof3 = _interopRequireDefault(_typeof2);
+
+exports.createLink = createLink;
+exports.createURL = createURL;
+exports.i18n = i18n;
+exports.parseLanguage = parseLanguage;
+exports.setLanguage = setLanguage;
+exports.clearStorageLanguage = clearStorageLanguage;
+exports.getStorageLanguage = getStorageLanguage;
+exports.getSystemLanguage = getSystemLanguage;
+exports.getLanguage = getLanguage;
+exports.jumpTo = jumpTo;
+exports.viewSource = viewSource;
+exports.setTitleBar = setTitleBar;
+exports.fetchData = fetchData;
+exports.saveData = saveData;
+exports.readData = readData;
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var stream = weex.requireModule('stream');
+var storage = weex.requireModule('storage');
+var navigator = weex.requireModule('navigator');
+
+var encoder = typeof encodeURIComponent === 'function' ? encodeURIComponent : typeof encodeURI === 'function' ? encodeURI : function (x) {
+ return x;
+};
+
+function encodeParams(params) {
+ if (!params || (typeof params === 'undefined' ? 'undefined' : (0, _typeof3.default)(params)) !== 'object') {
+ return '';
+ }
+ var array = [];
+ for (var key in params) {
+ if (typeof params[key] === 'string') {
+ array.push(encoder(key) + '=' + encoder(params[key]));
+ }
+ }
+ return array.join('&');
+}
+
+function createLink(name) {
+ var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+ var args = [];
+ for (var key in params) {
+ if (typeof params[key] === 'string') {
+ args.push(encoder(key) + '=' + encoder(params[key]));
+ }
+ }
+ if (WXEnvironment.platform === 'Web') {
+ args.unshift('page=' + name + '.web.js');
+ return '/?' + args.join('&');
+ }
+ var base = getBaseURL();
+ return '' + base + name + '.weex.js' + (args.length ? '?' + args.join('&') : '');
+}
+
+function createURL(hash, params) {
+ if (WXEnvironment.platform === 'Web') {
+ return 'http://dotwe.org/raw/htmlVue/' + hash;
+ }
+ var url = 'http://dotwe.org/raw/dist/' + hash + '.bundle.wx';
+ var paramString = encodeParams(params);
+ if (WXEnvironment.appName === 'TB') {
+ return url + '?_wx_tpl=' + url + '&' + paramString;
+ }
+ if (WXEnvironment.appName === 'WXSample') {
+ return url + '?' + paramString;
+ }
+ return url + '?wx_weex=true&' + paramString;
+}
+
+function getBaseURL() {
+ var bundleUrl = weex.config.bundleUrl;
+ var isAndroidAssets = bundleUrl.indexOf('your_current_IP') >= 0 || bundleUrl.indexOf('file://assets/') >= 0;
+ var isiOSAssets = bundleUrl.indexOf('file:///') >= 0 && bundleUrl.indexOf('WeexDemo.app') > 0;
+ if (isAndroidAssets) {
+ return 'file://assets/';
+ } else if (isiOSAssets) {
+ // file:///var/mobile/Containers/Bundle/Application/{id}/WeexDemo.app/
+ // file:///Users/{user}/Library/Developer/CoreSimulator/Devices/{id}/data/Containers/Bundle/Application/{id}/WeexDemo.app/
+ return bundleUrl.substring(0, bundleUrl.lastIndexOf('/') + 1);
+ }
+ return '';
+}
+
+function i18n(text, language) {
+ if (typeof text === 'string') {
+ return text;
+ }
+ if (Object.prototype.toString.call(text) === '[object Object]') {
+ var lang = this && this.language || language || 'en';
+ return text[lang];
+ }
+}
+
+var supportedLanguageRE = /(en|zh)\_?\w*/i;
+function parseLanguage(language) {
+ var match = supportedLanguageRE.exec(language + '');
+ if (match && match[1]) {
+ return match[1];
+ }
+ return '';
+}
+
+function setLanguage(language) {
+ var lang = parseLanguage(language);
+ if (lang) {
+ storage.setItem('WEEX_PLAYGROUND_LANGUAGE', lang);
+ }
+}
+
+function clearStorageLanguage() {
+ storage.removeItem('WEEX_PLAYGROUND_LANGUAGE');
+}
+
+function getStorageLanguage(done) {
+ var fail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};
+
+ if (!(typeof done === 'undefined' ? 'undefined' : (0, _typeof3.default)(done)) === 'function') {
+ return;
+ }
+ try {
+ storage.getItem('WEEX_PLAYGROUND_LANGUAGE', function (event) {
+ if (event.result === 'success') {
+ var lang = parseLanguage(event.data);
+ lang ? done(lang) : fail();
+ } else {
+ fail(event);
+ }
+ });
+ } catch (err) {
+ fail(err);
+ }
+}
+
+function getSystemLanguage(done) {
+ var fail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};
+
+ if (!(typeof done === 'undefined' ? 'undefined' : (0, _typeof3.default)(done)) === 'function') {
+ return;
+ }
+ if (WXEnvironment.platform.toLowerCase() === 'web') {
+ var lang = parseLanguage(window.navigator.language);
+ lang ? done(lang) : fail();
+ } else {
+ try {
+ var locale = weex.requireModule('locale') || weex.requireModule('local');
+ var useSync = false;
+ var resSync = locale.getLanguage(function (language) {
+ var lang = parseLanguage(language);
+ if (lang) {
+ useSync || done(lang);
+ } else {
+ fail();
+ }
+ });
+ var langSync = parseLanguage(resSync);
+ if (langSync) {
+ useSync = true;
+ done(langSync);
+ } else {
+ fail();
+ }
+ } catch (e) {
+ fail(e);
+ }
+ }
+}
+
+var languageRE = /.+[\?\&]{1}language=([\d\w]+)[\?\&]?.*/i;
+function getLanguage() {
+ var done = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {};
+
+ var match = languageRE.exec(weex.config.bundleUrl || '');
+ var lang = parseLanguage(match && match[1]);
+ if (lang) {
+ done(lang);
+ } else {
+ getStorageLanguage(done, function () {
+ getSystemLanguage(done, function () {
+ done('en');
+ });
+ });
+ }
+}
+
+function jumpTo(url, title, lang) {
+ getLanguage(function (language) {
+ storage.setItem('CURRENT_DOCUMENT_URL', i18n(url, lang || language));
+ navigator.push({
+ url: createURL('bf0305c14b511b24a4e616f53926432b', { language: language, title: i18n(title, lang || language) })
+ });
+ });
+}
+
+function viewSource(hash) {
+ getLanguage(function (language) {
+ navigator.push({
+ url: createURL('f6ce29faf686eabc38b410bf4828fa5a', { hash: hash, language: language })
+ });
+ });
+}
+
+function setTitleBar(options) {
+ var language = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'en';
+
+ if (Object.prototype.toString.apply(options) !== '[object Object]') {
+ return;
+ }
+ var titleBar = weex.requireModule('titleBar');
+ if (options.color || options.backgroundColor) {
+ try {
+ titleBar.setStyle({
+ foregroundColor: options.color || '#FFFFFF',
+ backgroundColor: options.backgroundColor || '#00B4FF'
+ });
+ } catch (e) {}
+ }
+ var title = i18n(options.title, language);
+ if (title) {
+ try {
+ titleBar.setTitle(title);
+ } catch (e) {}
+ }
+}
+
+var storageKeys = {
+ doodle: 'WEEX_PLAYGROUND_APP_DOODLE',
+ guide: 'WEEX_PLAYGROUND_APP_GUIDE',
+ examples: 'WEEX_PLAYGROUND_APP_EXAMPLES',
+ news: 'WEEX_PLAYGROUND_APP_NEWS',
+ about: 'WEEX_PLAYGROUND_APP_ABOUT'
+};
+function fetchData(name) {
+ var done = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};
+ var fail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {};
+
+ try {
+ stream.fetch({
+ url: 'http://dotwe.org/query/weex-playground-app',
+ method: 'post',
+ headers: {
+ 'Content-Type': 'application/x-www-form-urlencoded'
+ },
+ type: 'json',
+ body: 'name=' + name
+ }, function (res) {
+ if (res.ok && res.data && res.data.success) {
+ done(res.data);
+ } else {
+ fail(res);
+ }
+ });
+ } catch (err) {
+ fail(err);
+ }
+}
+function saveData(name, result) {
+ var key = storageKeys[name];
+ if (!key) return;
+ if (result && (typeof result === 'undefined' ? 'undefined' : (0, _typeof3.default)(result)) === 'object') {
+ result.timestamp = Date.now();
+ storage.setItem(key, (0, _stringify2.default)(result));
+ }
+}
+function readData(name) {
+ var done = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};
+ var fail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {};
+
+ var key = storageKeys[name];
+ if (!key) return fail();
+ try {
+ storage.getItem(key, function (event) {
+ if (event.result === 'success') {
+ var result = JSON.parse(event.data);
+ if (result && Array.isArray(result[name])) {
+ return done(result[name]);
+ }
+ }
+ fail(event);
+ });
+ } catch (e) {
+ fail(e);
+ }
+}
+
+var fetchExamples = exports.fetchExamples = function fetchExamples() {
+ for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+
+ return fetchData.apply(undefined, ['examples'].concat(args));
+};
+var saveExamples = exports.saveExamples = function saveExamples() {
+ for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
+ args[_key2] = arguments[_key2];
+ }
+
+ return saveData.apply(undefined, ['examples'].concat(args));
+};
+var readExamples = exports.readExamples = function readExamples() {
+ for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
+ args[_key3] = arguments[_key3];
+ }
+
+ return readData.apply(undefined, ['examples'].concat(args));
+};
+
+var fetchGuide = exports.fetchGuide = function fetchGuide() {
+ for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
+ args[_key4] = arguments[_key4];
+ }
+
+ return fetchData.apply(undefined, ['guide'].concat(args));
+};
+var saveGuide = exports.saveGuide = function saveGuide() {
+ for (var _len5 = arguments.length, args = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
+ args[_key5] = arguments[_key5];
+ }
+
+ return saveData.apply(undefined, ['guide'].concat(args));
+};
+var readGuide = exports.readGuide = function readGuide() {
+ for (var _len6 = arguments.length, args = Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
+ args[_key6] = arguments[_key6];
+ }
+
+ return readData.apply(undefined, ['guide'].concat(args));
+};
+
+var fetchAbout = exports.fetchAbout = function fetchAbout() {
+ for (var _len7 = arguments.length, args = Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {
+ args[_key7] = arguments[_key7];
+ }
+
+ return fetchData.apply(undefined, ['about'].concat(args));
+};
+var saveAbout = exports.saveAbout = function saveAbout() {
+ for (var _len8 = arguments.length, args = Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {
+ args[_key8] = arguments[_key8];
+ }
+
+ return saveData.apply(undefined, ['about'].concat(args));
+};
+var readAbout = exports.readAbout = function readAbout() {
+ for (var _len9 = arguments.length, args = Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {
+ args[_key9] = arguments[_key9];
+ }
+
+ return readData.apply(undefined, ['about'].concat(args));
+};
+
+var fetchDoodle = exports.fetchDoodle = function fetchDoodle() {
+ for (var _len10 = arguments.length, args = Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {
+ args[_key10] = arguments[_key10];
+ }
+
+ return fetchData.apply(undefined, ['doodle'].concat(args));
+};
+var fetchNews = exports.fetchNews = function fetchNews() {
+ for (var _len11 = arguments.length, args = Array(_len11), _key11 = 0; _key11 < _len11; _key11++) {
+ args[_key11] = arguments[_key11];
+ }
+
+ return fetchData.apply(undefined, ['news'].concat(args));
+};
+
+/***/ }),
+/* 27 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var LIBRARY = __webpack_require__(9);
+var $export = __webpack_require__(28);
+var redefine = __webpack_require__(31);
+var hide = __webpack_require__(2);
+var Iterators = __webpack_require__(17);
+var $iterCreate = __webpack_require__(49);
+var setToStringTag = __webpack_require__(22);
+var getPrototypeOf = __webpack_require__(56);
+var ITERATOR = __webpack_require__(6)('iterator');
+var BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`
+var FF_ITERATOR = '@@iterator';
+var KEYS = 'keys';
+var VALUES = 'values';
+
+var returnThis = function () { return this; };
+
+module.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {
+ $iterCreate(Constructor, NAME, next);
+ var getMethod = function (kind) {
+ if (!BUGGY && kind in proto) return proto[kind];
+ switch (kind) {
+ case KEYS: return function keys() { return new Constructor(this, kind); };
+ case VALUES: return function values() { return new Constructor(this, kind); };
+ } return function entries() { return new Constructor(this, kind); };
+ };
+ var TAG = NAME + ' Iterator';
+ var DEF_VALUES = DEFAULT == VALUES;
+ var VALUES_BUG = false;
+ var proto = Base.prototype;
+ var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];
+ var $default = $native || getMethod(DEFAULT);
+ var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;
+ var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;
+ var methods, key, IteratorPrototype;
+ // Fix native
+ if ($anyNative) {
+ IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));
+ if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {
+ // Set @@toStringTag to native iterators
+ setToStringTag(IteratorPrototype, TAG, true);
+ // fix for some old engines
+ if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);
+ }
+ }
+ // fix Array#{values, @@iterator}.name in V8 / FF
+ if (DEF_VALUES && $native && $native.name !== VALUES) {
+ VALUES_BUG = true;
+ $default = function values() { return $native.call(this); };
+ }
+ // Define iterator
+ if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {
+ hide(proto, ITERATOR, $default);
+ }
+ // Plug for library
+ Iterators[NAME] = $default;
+ Iterators[TAG] = returnThis;
+ if (DEFAULT) {
+ methods = {
+ values: DEF_VALUES ? $default : getMethod(VALUES),
+ keys: IS_SET ? $default : getMethod(KEYS),
+ entries: $entries
+ };
+ if (FORCED) for (key in methods) {
+ if (!(key in proto)) redefine(proto, key, methods[key]);
+ } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);
+ }
+ return methods;
+};
+
+
+/***/ }),
+/* 28 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var global = __webpack_require__(0);
+var core = __webpack_require__(7);
+var ctx = __webpack_require__(47);
+var hide = __webpack_require__(2);
+var has = __webpack_require__(1);
+var PROTOTYPE = 'prototype';
+
+var $export = function (type, name, source) {
+ var IS_FORCED = type & $export.F;
+ var IS_GLOBAL = type & $export.G;
+ var IS_STATIC = type & $export.S;
+ var IS_PROTO = type & $export.P;
+ var IS_BIND = type & $export.B;
+ var IS_WRAP = type & $export.W;
+ var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});
+ var expProto = exports[PROTOTYPE];
+ var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];
+ var key, own, out;
+ if (IS_GLOBAL) source = name;
+ for (key in source) {
+ // contains in native
+ own = !IS_FORCED && target && target[key] !== undefined;
+ if (own && has(exports, key)) continue;
+ // export native or passed
+ out = own ? target[key] : source[key];
+ // prevent global pollution for namespaces
+ exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]
+ // bind timers to global for call from export context
+ : IS_BIND && own ? ctx(out, global)
+ // wrap global constructors for prevent change them in library
+ : IS_WRAP && target[key] == out ? (function (C) {
+ var F = function (a, b, c) {
+ if (this instanceof C) {
+ switch (arguments.length) {
+ case 0: return new C();
+ case 1: return new C(a);
+ case 2: return new C(a, b);
+ } return new C(a, b, c);
+ } return C.apply(this, arguments);
+ };
+ F[PROTOTYPE] = C[PROTOTYPE];
+ return F;
+ // make static versions for prototype methods
+ })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
+ // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%
+ if (IS_PROTO) {
+ (exports.virtual || (exports.virtual = {}))[key] = out;
+ // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%
+ if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);
+ }
+ }
+};
+// type bitmap
+$export.F = 1; // forced
+$export.G = 2; // global
+$export.S = 4; // static
+$export.P = 8; // proto
+$export.B = 16; // bind
+$export.W = 32; // wrap
+$export.U = 64; // safe
+$export.R = 128; // real proto method for `library`
+module.exports = $export;
+
+
+/***/ }),
+/* 29 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = !__webpack_require__(4) && !__webpack_require__(11)(function () {
+ return Object.defineProperty(__webpack_require__(30)('div'), 'a', { get: function () { return 7; } }).a != 7;
+});
+
+
+/***/ }),
+/* 30 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var isObject = __webpack_require__(8);
+var document = __webpack_require__(0).document;
+// typeof document.createElement is 'object' in old IE
+var is = isObject(document) && isObject(document.createElement);
+module.exports = function (it) {
+ return is ? document.createElement(it) : {};
+};
+
+
+/***/ }),
+/* 31 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = __webpack_require__(2);
+
+
+/***/ }),
+/* 32 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
+var anObject = __webpack_require__(10);
+var dPs = __webpack_require__(50);
+var enumBugKeys = __webpack_require__(21);
+var IE_PROTO = __webpack_require__(19)('IE_PROTO');
+var Empty = function () { /* empty */ };
+var PROTOTYPE = 'prototype';
+
+// Create object with fake `null` prototype: use iframe Object with cleared prototype
+var createDict = function () {
+ // Thrash, waste and sodomy: IE GC bug
+ var iframe = __webpack_require__(30)('iframe');
+ var i = enumBugKeys.length;
+ var lt = '<';
+ var gt = '>';
+ var iframeDocument;
+ iframe.style.display = 'none';
+ __webpack_require__(55).appendChild(iframe);
+ iframe.src = 'javascript:'; // eslint-disable-line no-script-url
+ // createDict = iframe.contentWindow.Object;
+ // html.removeChild(iframe);
+ iframeDocument = iframe.contentWindow.document;
+ iframeDocument.open();
+ iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);
+ iframeDocument.close();
+ createDict = iframeDocument.F;
+ while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];
+ return createDict();
+};
+
+module.exports = Object.create || function create(O, Properties) {
+ var result;
+ if (O !== null) {
+ Empty[PROTOTYPE] = anObject(O);
+ result = new Empty();
+ Empty[PROTOTYPE] = null;
+ // add "__proto__" for Object.getPrototypeOf polyfill
+ result[IE_PROTO] = O;
+ } else result = createDict();
+ return Properties === undefined ? result : dPs(result, Properties);
+};
+
+
+/***/ }),
+/* 33 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var has = __webpack_require__(1);
+var toIObject = __webpack_require__(5);
+var arrayIndexOf = __webpack_require__(52)(false);
+var IE_PROTO = __webpack_require__(19)('IE_PROTO');
+
+module.exports = function (object, names) {
+ var O = toIObject(object);
+ var i = 0;
+ var result = [];
+ var key;
+ for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);
+ // Don't enum bug & hidden keys
+ while (names.length > i) if (has(O, key = names[i++])) {
+ ~arrayIndexOf(result, key) || result.push(key);
+ }
+ return result;
+};
+
+
+/***/ }),
+/* 34 */
+/***/ (function(module, exports) {
+
+var toString = {}.toString;
+
+module.exports = function (it) {
+ return toString.call(it).slice(8, -1);
+};
+
+
+/***/ }),
+/* 35 */
+/***/ (function(module, exports) {
+
+exports.f = Object.getOwnPropertySymbols;
+
+
+/***/ }),
+/* 36 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)
+var $keys = __webpack_require__(33);
+var hiddenKeys = __webpack_require__(21).concat('length', 'prototype');
+
+exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
+ return $keys(O, hiddenKeys);
+};
+
+
+/***/ }),
+/* 37 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+__webpack_require__(38);
+
+var _News = __webpack_require__(73);
+
+var _News2 = _interopRequireDefault(_News);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+// show title bar
+try {
+ var titleBar = weex.requireModule('titleBar');
+ titleBar.showTitleBar(true);
+} catch (e) {}
+
+_News2.default.el = '#root';
+new Vue(_News2.default);
+
+/***/ }),
+/* 38 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _mixin = __webpack_require__(39);
+
+var _mixin2 = _interopRequireDefault(_mixin);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+// use shared mixins
+Vue.mixin(_mixin2.default);
+
+/***/ }),
+/* 39 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _index = __webpack_require__(26);
+
+var utils = _interopRequireWildcard(_index);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+var storage = weex.requireModule('storage');
+
+exports.default = {
+ filters: {
+ i18n: utils.i18n,
+ url: utils.createURL,
+ link: utils.createLink
+ },
+ methods: {
+ createLink: utils.createLink,
+ createURL: utils.createURL,
+ i18n: utils.i18n,
+ getLanguage: utils.getLanguage,
+ fetchData: utils.fetchData,
+ saveData: utils.saveData,
+ readData: utils.readData,
+ jumpTo: utils.jumpTo
+ },
+ created: function created() {
+ var _this = this;
+
+ // get and set language
+ utils.getLanguage(function (language) {
+ _this.language = language;
+ utils.setTitleBar(_this.navigationBarOptions, language);
+ });
+
+ // listen to the language change event
+ var channel = new BroadcastChannel('language');
+ channel.onmessage = function (event) {
+ if (event.data && event.data.language) {
+ _this.language = event.data.language;
+ }
+ };
+ },
+ beforeDestroy: function beforeDestroy() {
+ storage.removeItem('CURRENT_DOCUMENT_URL');
+ storage.removeItem('CURRENT_SOURCE_HASH');
+ }
+};
+
+/***/ }),
+/* 40 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = { "default": __webpack_require__(41), __esModule: true };
+
+/***/ }),
+/* 41 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var core = __webpack_require__(7);
+var $JSON = core.JSON || (core.JSON = { stringify: JSON.stringify });
+module.exports = function stringify(it) { // eslint-disable-line no-unused-vars
+ return $JSON.stringify.apply($JSON, arguments);
+};
+
+
+/***/ }),
+/* 42 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+exports.__esModule = true;
+
+var _iterator = __webpack_require__(43);
+
+var _iterator2 = _interopRequireDefault(_iterator);
+
+var _symbol = __webpack_require__(62);
+
+var _symbol2 = _interopRequireDefault(_symbol);
+
+var _typeof = typeof _symbol2.default === "function" && typeof _iterator2.default === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj; };
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+exports.default = typeof _symbol2.default === "function" && _typeof(_iterator2.default) === "symbol" ? function (obj) {
+ return typeof obj === "undefined" ? "undefined" : _typeof(obj);
+} : function (obj) {
+ return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof(obj);
+};
+
+/***/ }),
+/* 43 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = { "default": __webpack_require__(44), __esModule: true };
+
+/***/ }),
+/* 44 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(45);
+__webpack_require__(58);
+module.exports = __webpack_require__(23).f('iterator');
+
+
+/***/ }),
+/* 45 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var $at = __webpack_require__(46)(true);
+
+// 21.1.3.27 String.prototype[@@iterator]()
+__webpack_require__(27)(String, 'String', function (iterated) {
+ this._t = String(iterated); // target
+ this._i = 0; // next index
+// 21.1.5.2.1 %StringIteratorPrototype%.next()
+}, function () {
+ var O = this._t;
+ var index = this._i;
+ var point;
+ if (index >= O.length) return { value: undefined, done: true };
+ point = $at(O, index);
+ this._i += point.length;
+ return { value: point, done: false };
+});
+
+
+/***/ }),
+/* 46 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var toInteger = __webpack_require__(14);
+var defined = __webpack_require__(15);
+// true -> String#at
+// false -> String#codePointAt
+module.exports = function (TO_STRING) {
+ return function (that, pos) {
+ var s = String(defined(that));
+ var i = toInteger(pos);
+ var l = s.length;
+ var a, b;
+ if (i < 0 || i >= l) return TO_STRING ? '' : undefined;
+ a = s.charCodeAt(i);
+ return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff
+ ? TO_STRING ? s.charAt(i) : a
+ : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;
+ };
+};
+
+
+/***/ }),
+/* 47 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// optional / simple context binding
+var aFunction = __webpack_require__(48);
+module.exports = function (fn, that, length) {
+ aFunction(fn);
+ if (that === undefined) return fn;
+ switch (length) {
+ case 1: return function (a) {
+ return fn.call(that, a);
+ };
+ case 2: return function (a, b) {
+ return fn.call(that, a, b);
+ };
+ case 3: return function (a, b, c) {
+ return fn.call(that, a, b, c);
+ };
+ }
+ return function (/* ...args */) {
+ return fn.apply(that, arguments);
+ };
+};
+
+
+/***/ }),
+/* 48 */
+/***/ (function(module, exports) {
+
+module.exports = function (it) {
+ if (typeof it != 'function') throw TypeError(it + ' is not a function!');
+ return it;
+};
+
+
+/***/ }),
+/* 49 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var create = __webpack_require__(32);
+var descriptor = __webpack_require__(12);
+var setToStringTag = __webpack_require__(22);
+var IteratorPrototype = {};
+
+// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
+__webpack_require__(2)(IteratorPrototype, __webpack_require__(6)('iterator'), function () { return this; });
+
+module.exports = function (Constructor, NAME, next) {
+ Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });
+ setToStringTag(Constructor, NAME + ' Iterator');
+};
+
+
+/***/ }),
+/* 50 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var dP = __webpack_require__(3);
+var anObject = __webpack_require__(10);
+var getKeys = __webpack_require__(18);
+
+module.exports = __webpack_require__(4) ? Object.defineProperties : function defineProperties(O, Properties) {
+ anObject(O);
+ var keys = getKeys(Properties);
+ var length = keys.length;
+ var i = 0;
+ var P;
+ while (length > i) dP.f(O, P = keys[i++], Properties[P]);
+ return O;
+};
+
+
+/***/ }),
+/* 51 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// fallback for non-array-like ES3 and non-enumerable old V8 strings
+var cof = __webpack_require__(34);
+// eslint-disable-next-line no-prototype-builtins
+module.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {
+ return cof(it) == 'String' ? it.split('') : Object(it);
+};
+
+
+/***/ }),
+/* 52 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// false -> Array#indexOf
+// true -> Array#includes
+var toIObject = __webpack_require__(5);
+var toLength = __webpack_require__(53);
+var toAbsoluteIndex = __webpack_require__(54);
+module.exports = function (IS_INCLUDES) {
+ return function ($this, el, fromIndex) {
+ var O = toIObject($this);
+ var length = toLength(O.length);
+ var index = toAbsoluteIndex(fromIndex, length);
+ var value;
+ // Array#includes uses SameValueZero equality algorithm
+ // eslint-disable-next-line no-self-compare
+ if (IS_INCLUDES && el != el) while (length > index) {
+ value = O[index++];
+ // eslint-disable-next-line no-self-compare
+ if (value != value) return true;
+ // Array#indexOf ignores holes, Array#includes - not
+ } else for (;length > index; index++) if (IS_INCLUDES || index in O) {
+ if (O[index] === el) return IS_INCLUDES || index || 0;
+ } return !IS_INCLUDES && -1;
+ };
+};
+
+
+/***/ }),
+/* 53 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 7.1.15 ToLength
+var toInteger = __webpack_require__(14);
+var min = Math.min;
+module.exports = function (it) {
+ return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
+};
+
+
+/***/ }),
+/* 54 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var toInteger = __webpack_require__(14);
+var max = Math.max;
+var min = Math.min;
+module.exports = function (index, length) {
+ index = toInteger(index);
+ return index < 0 ? max(index + length, 0) : min(index, length);
+};
+
+
+/***/ }),
+/* 55 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var document = __webpack_require__(0).document;
+module.exports = document && document.documentElement;
+
+
+/***/ }),
+/* 56 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)
+var has = __webpack_require__(1);
+var toObject = __webpack_require__(57);
+var IE_PROTO = __webpack_require__(19)('IE_PROTO');
+var ObjectProto = Object.prototype;
+
+module.exports = Object.getPrototypeOf || function (O) {
+ O = toObject(O);
+ if (has(O, IE_PROTO)) return O[IE_PROTO];
+ if (typeof O.constructor == 'function' && O instanceof O.constructor) {
+ return O.constructor.prototype;
+ } return O instanceof Object ? ObjectProto : null;
+};
+
+
+/***/ }),
+/* 57 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 7.1.13 ToObject(argument)
+var defined = __webpack_require__(15);
+module.exports = function (it) {
+ return Object(defined(it));
+};
+
+
+/***/ }),
+/* 58 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(59);
+var global = __webpack_require__(0);
+var hide = __webpack_require__(2);
+var Iterators = __webpack_require__(17);
+var TO_STRING_TAG = __webpack_require__(6)('toStringTag');
+
+var DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +
+ 'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +
+ 'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +
+ 'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +
+ 'TextTrackList,TouchList').split(',');
+
+for (var i = 0; i < DOMIterables.length; i++) {
+ var NAME = DOMIterables[i];
+ var Collection = global[NAME];
+ var proto = Collection && Collection.prototype;
+ if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);
+ Iterators[NAME] = Iterators.Array;
+}
+
+
+/***/ }),
+/* 59 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var addToUnscopables = __webpack_require__(60);
+var step = __webpack_require__(61);
+var Iterators = __webpack_require__(17);
+var toIObject = __webpack_require__(5);
+
+// 22.1.3.4 Array.prototype.entries()
+// 22.1.3.13 Array.prototype.keys()
+// 22.1.3.29 Array.prototype.values()
+// 22.1.3.30 Array.prototype[@@iterator]()
+module.exports = __webpack_require__(27)(Array, 'Array', function (iterated, kind) {
+ this._t = toIObject(iterated); // target
+ this._i = 0; // next index
+ this._k = kind; // kind
+// 22.1.5.2.1 %ArrayIteratorPrototype%.next()
+}, function () {
+ var O = this._t;
+ var kind = this._k;
+ var index = this._i++;
+ if (!O || index >= O.length) {
+ this._t = undefined;
+ return step(1);
+ }
+ if (kind == 'keys') return step(0, index);
+ if (kind == 'values') return step(0, O[index]);
+ return step(0, [index, O[index]]);
+}, 'values');
+
+// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)
+Iterators.Arguments = Iterators.Array;
+
+addToUnscopables('keys');
+addToUnscopables('values');
+addToUnscopables('entries');
+
+
+/***/ }),
+/* 60 */
+/***/ (function(module, exports) {
+
+module.exports = function () { /* empty */ };
+
+
+/***/ }),
+/* 61 */
+/***/ (function(module, exports) {
+
+module.exports = function (done, value) {
+ return { value: value, done: !!done };
+};
+
+
+/***/ }),
+/* 62 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = { "default": __webpack_require__(63), __esModule: true };
+
+/***/ }),
+/* 63 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(64);
+__webpack_require__(70);
+__webpack_require__(71);
+__webpack_require__(72);
+module.exports = __webpack_require__(7).Symbol;
+
+
+/***/ }),
+/* 64 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+// ECMAScript 6 symbols shim
+var global = __webpack_require__(0);
+var has = __webpack_require__(1);
+var DESCRIPTORS = __webpack_require__(4);
+var $export = __webpack_require__(28);
+var redefine = __webpack_require__(31);
+var META = __webpack_require__(65).KEY;
+var $fails = __webpack_require__(11);
+var shared = __webpack_require__(20);
+var setToStringTag = __webpack_require__(22);
+var uid = __webpack_require__(13);
+var wks = __webpack_require__(6);
+var wksExt = __webpack_require__(23);
+var wksDefine = __webpack_require__(24);
+var enumKeys = __webpack_require__(66);
+var isArray = __webpack_require__(67);
+var anObject = __webpack_require__(10);
+var isObject = __webpack_require__(8);
+var toIObject = __webpack_require__(5);
+var toPrimitive = __webpack_require__(16);
+var createDesc = __webpack_require__(12);
+var _create = __webpack_require__(32);
+var gOPNExt = __webpack_require__(68);
+var $GOPD = __webpack_require__(69);
+var $DP = __webpack_require__(3);
+var $keys = __webpack_require__(18);
+var gOPD = $GOPD.f;
+var dP = $DP.f;
+var gOPN = gOPNExt.f;
+var $Symbol = global.Symbol;
+var $JSON = global.JSON;
+var _stringify = $JSON && $JSON.stringify;
+var PROTOTYPE = 'prototype';
+var HIDDEN = wks('_hidden');
+var TO_PRIMITIVE = wks('toPrimitive');
+var isEnum = {}.propertyIsEnumerable;
+var SymbolRegistry = shared('symbol-registry');
+var AllSymbols = shared('symbols');
+var OPSymbols = shared('op-symbols');
+var ObjectProto = Object[PROTOTYPE];
+var USE_NATIVE = typeof $Symbol == 'function';
+var QObject = global.QObject;
+// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173
+var setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;
+
+// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687
+var setSymbolDesc = DESCRIPTORS && $fails(function () {
+ return _create(dP({}, 'a', {
+ get: function () { return dP(this, 'a', { value: 7 }).a; }
+ })).a != 7;
+}) ? function (it, key, D) {
+ var protoDesc = gOPD(ObjectProto, key);
+ if (protoDesc) delete ObjectProto[key];
+ dP(it, key, D);
+ if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);
+} : dP;
+
+var wrap = function (tag) {
+ var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);
+ sym._k = tag;
+ return sym;
+};
+
+var isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {
+ return typeof it == 'symbol';
+} : function (it) {
+ return it instanceof $Symbol;
+};
+
+var $defineProperty = function defineProperty(it, key, D) {
+ if (it === ObjectProto) $defineProperty(OPSymbols, key, D);
+ anObject(it);
+ key = toPrimitive(key, true);
+ anObject(D);
+ if (has(AllSymbols, key)) {
+ if (!D.enumerable) {
+ if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));
+ it[HIDDEN][key] = true;
+ } else {
+ if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;
+ D = _create(D, { enumerable: createDesc(0, false) });
+ } return setSymbolDesc(it, key, D);
+ } return dP(it, key, D);
+};
+var $defineProperties = function defineProperties(it, P) {
+ anObject(it);
+ var keys = enumKeys(P = toIObject(P));
+ var i = 0;
+ var l = keys.length;
+ var key;
+ while (l > i) $defineProperty(it, key = keys[i++], P[key]);
+ return it;
+};
+var $create = function create(it, P) {
+ return P === undefined ? _create(it) : $defineProperties(_create(it), P);
+};
+var $propertyIsEnumerable = function propertyIsEnumerable(key) {
+ var E = isEnum.call(this, key = toPrimitive(key, true));
+ if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;
+ return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;
+};
+var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {
+ it = toIObject(it);
+ key = toPrimitive(key, true);
+ if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;
+ var D = gOPD(it, key);
+ if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;
+ return D;
+};
+var $getOwnPropertyNames = function getOwnPropertyNames(it) {
+ var names = gOPN(toIObject(it));
+ var result = [];
+ var i = 0;
+ var key;
+ while (names.length > i) {
+ if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);
+ } return result;
+};
+var $getOwnPropertySymbols = function getOwnPropertySymbols(it) {
+ var IS_OP = it === ObjectProto;
+ var names = gOPN(IS_OP ? OPSymbols : toIObject(it));
+ var result = [];
+ var i = 0;
+ var key;
+ while (names.length > i) {
+ if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);
+ } return result;
+};
+
+// 19.4.1.1 Symbol([description])
+if (!USE_NATIVE) {
+ $Symbol = function Symbol() {
+ if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');
+ var tag = uid(arguments.length > 0 ? arguments[0] : undefined);
+ var $set = function (value) {
+ if (this === ObjectProto) $set.call(OPSymbols, value);
+ if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;
+ setSymbolDesc(this, tag, createDesc(1, value));
+ };
+ if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });
+ return wrap(tag);
+ };
+ redefine($Symbol[PROTOTYPE], 'toString', function toString() {
+ return this._k;
+ });
+
+ $GOPD.f = $getOwnPropertyDescriptor;
+ $DP.f = $defineProperty;
+ __webpack_require__(36).f = gOPNExt.f = $getOwnPropertyNames;
+ __webpack_require__(25).f = $propertyIsEnumerable;
+ __webpack_require__(35).f = $getOwnPropertySymbols;
+
+ if (DESCRIPTORS && !__webpack_require__(9)) {
+ redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);
+ }
+
+ wksExt.f = function (name) {
+ return wrap(wks(name));
+ };
+}
+
+$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });
+
+for (var es6Symbols = (
+ // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14
+ 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'
+).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);
+
+for (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);
+
+$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {
+ // 19.4.2.1 Symbol.for(key)
+ 'for': function (key) {
+ return has(SymbolRegistry, key += '')
+ ? SymbolRegistry[key]
+ : SymbolRegistry[key] = $Symbol(key);
+ },
+ // 19.4.2.5 Symbol.keyFor(sym)
+ keyFor: function keyFor(sym) {
+ if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');
+ for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;
+ },
+ useSetter: function () { setter = true; },
+ useSimple: function () { setter = false; }
+});
+
+$export($export.S + $export.F * !USE_NATIVE, 'Object', {
+ // 19.1.2.2 Object.create(O [, Properties])
+ create: $create,
+ // 19.1.2.4 Object.defineProperty(O, P, Attributes)
+ defineProperty: $defineProperty,
+ // 19.1.2.3 Object.defineProperties(O, Properties)
+ defineProperties: $defineProperties,
+ // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)
+ getOwnPropertyDescriptor: $getOwnPropertyDescriptor,
+ // 19.1.2.7 Object.getOwnPropertyNames(O)
+ getOwnPropertyNames: $getOwnPropertyNames,
+ // 19.1.2.8 Object.getOwnPropertySymbols(O)
+ getOwnPropertySymbols: $getOwnPropertySymbols
+});
+
+// 24.3.2 JSON.stringify(value [, replacer [, space]])
+$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {
+ var S = $Symbol();
+ // MS Edge converts symbol values to JSON as {}
+ // WebKit converts symbol values to JSON as null
+ // V8 throws on boxed symbols
+ return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';
+})), 'JSON', {
+ stringify: function stringify(it) {
+ var args = [it];
+ var i = 1;
+ var replacer, $replacer;
+ while (arguments.length > i) args.push(arguments[i++]);
+ $replacer = replacer = args[1];
+ if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined
+ if (!isArray(replacer)) replacer = function (key, value) {
+ if (typeof $replacer == 'function') value = $replacer.call(this, key, value);
+ if (!isSymbol(value)) return value;
+ };
+ args[1] = replacer;
+ return _stringify.apply($JSON, args);
+ }
+});
+
+// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)
+$Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(2)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);
+// 19.4.3.5 Symbol.prototype[@@toStringTag]
+setToStringTag($Symbol, 'Symbol');
+// 20.2.1.9 Math[@@toStringTag]
+setToStringTag(Math, 'Math', true);
+// 24.3.3 JSON[@@toStringTag]
+setToStringTag(global.JSON, 'JSON', true);
+
+
+/***/ }),
+/* 65 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var META = __webpack_require__(13)('meta');
+var isObject = __webpack_require__(8);
+var has = __webpack_require__(1);
+var setDesc = __webpack_require__(3).f;
+var id = 0;
+var isExtensible = Object.isExtensible || function () {
+ return true;
+};
+var FREEZE = !__webpack_require__(11)(function () {
+ return isExtensible(Object.preventExtensions({}));
+});
+var setMeta = function (it) {
+ setDesc(it, META, { value: {
+ i: 'O' + ++id, // object ID
+ w: {} // weak collections IDs
+ } });
+};
+var fastKey = function (it, create) {
+ // return primitive with prefix
+ if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;
+ if (!has(it, META)) {
+ // can't set metadata to uncaught frozen object
+ if (!isExtensible(it)) return 'F';
+ // not necessary to add metadata
+ if (!create) return 'E';
+ // add missing metadata
+ setMeta(it);
+ // return object ID
+ } return it[META].i;
+};
+var getWeak = function (it, create) {
+ if (!has(it, META)) {
+ // can't set metadata to uncaught frozen object
+ if (!isExtensible(it)) return true;
+ // not necessary to add metadata
+ if (!create) return false;
+ // add missing metadata
+ setMeta(it);
+ // return hash weak collections IDs
+ } return it[META].w;
+};
+// add metadata on freeze-family methods calling
+var onFreeze = function (it) {
+ if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);
+ return it;
+};
+var meta = module.exports = {
+ KEY: META,
+ NEED: false,
+ fastKey: fastKey,
+ getWeak: getWeak,
+ onFreeze: onFreeze
+};
+
+
+/***/ }),
+/* 66 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// all enumerable object keys, includes symbols
+var getKeys = __webpack_require__(18);
+var gOPS = __webpack_require__(35);
+var pIE = __webpack_require__(25);
+module.exports = function (it) {
+ var result = getKeys(it);
+ var getSymbols = gOPS.f;
+ if (getSymbols) {
+ var symbols = getSymbols(it);
+ var isEnum = pIE.f;
+ var i = 0;
+ var key;
+ while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);
+ } return result;
+};
+
+
+/***/ }),
+/* 67 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 7.2.2 IsArray(argument)
+var cof = __webpack_require__(34);
+module.exports = Array.isArray || function isArray(arg) {
+ return cof(arg) == 'Array';
+};
+
+
+/***/ }),
+/* 68 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
+var toIObject = __webpack_require__(5);
+var gOPN = __webpack_require__(36).f;
+var toString = {}.toString;
+
+var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames
+ ? Object.getOwnPropertyNames(window) : [];
+
+var getWindowNames = function (it) {
+ try {
+ return gOPN(it);
+ } catch (e) {
+ return windowNames.slice();
+ }
+};
+
+module.exports.f = function getOwnPropertyNames(it) {
+ return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));
+};
+
+
+/***/ }),
+/* 69 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var pIE = __webpack_require__(25);
+var createDesc = __webpack_require__(12);
+var toIObject = __webpack_require__(5);
+var toPrimitive = __webpack_require__(16);
+var has = __webpack_require__(1);
+var IE8_DOM_DEFINE = __webpack_require__(29);
+var gOPD = Object.getOwnPropertyDescriptor;
+
+exports.f = __webpack_require__(4) ? gOPD : function getOwnPropertyDescriptor(O, P) {
+ O = toIObject(O);
+ P = toPrimitive(P, true);
+ if (IE8_DOM_DEFINE) try {
+ return gOPD(O, P);
+ } catch (e) { /* empty */ }
+ if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);
+};
+
+
+/***/ }),
+/* 70 */
+/***/ (function(module, exports) {
+
+
+
+/***/ }),
+/* 71 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(24)('asyncIterator');
+
+
+/***/ }),
+/* 72 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(24)('observable');
+
+
+/***/ }),
+/* 73 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var __vue_exports__, __vue_options__
+var __vue_styles__ = []
+
+/* styles */
+__vue_styles__.push(__webpack_require__(74)
+)
+
+/* script */
+__vue_exports__ = __webpack_require__(75)
+
+/* template */
+var __vue_template__ = __webpack_require__(76)
+__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+if (
+ typeof __vue_exports__.default === "object" ||
+ typeof __vue_exports__.default === "function"
+) {
+if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+__vue_options__ = __vue_exports__ = __vue_exports__.default
+}
+if (typeof __vue_options__ === "function") {
+ __vue_options__ = __vue_options__.options
+}
+__vue_options__.__file = "/Users/kw/github/weex-vue-examples/src/pages/news/News.vue"
+__vue_options__.render = __vue_template__.render
+__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+__vue_options__._scopeId = "data-v-59a504d6"
+__vue_options__.style = __vue_options__.style || {}
+__vue_styles__.forEach(function (module) {
+ for (var name in module) {
+ __vue_options__.style[name] = module[name]
+ }
+})
+if (typeof __register_static_styles__ === "function") {
+ __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+}
+
+module.exports = __vue_exports__
+
+
+/***/ }),
+/* 74 */
+/***/ (function(module, exports) {
+
+module.exports = {
+ "list": {
+ "backgroundColor": "#F1F1F1"
+ },
+ "refresh": {
+ "width": "750",
+ "alignItems": "center",
+ "backgroundColor": "#808080"
+ },
+ "indicator-text": {
+ "color": "#C5C5C5",
+ "fontSize": "34",
+ "paddingTop": "50",
+ "paddingRight": "50",
+ "paddingBottom": "50",
+ "paddingLeft": "50",
+ "textAlign": "center"
+ },
+ "cell": {
+ "alignItems": "center"
+ },
+ "message-time": {
+ "marginTop": "25",
+ "justifyContent": "center"
+ },
+ "time-text": {
+ "paddingTop": "5",
+ "paddingBottom": "5",
+ "paddingLeft": "18",
+ "paddingRight": "18",
+ "backgroundColor": "rgba(0,0,0,0.1)",
+ "fontSize": "25",
+ "borderRadius": "8",
+ "color": "#FEFEFE"
+ },
+ "message-box": {
+ "borderWidth": "1",
+ "borderColor": "#DDDDDD",
+ "borderRadius": "15",
+ "backgroundColor": "#FFFFFF",
+ "marginTop": "25",
+ "marginBottom": "35",
+ "backgroundColor:active": "#F8F8F8"
+ },
+ "related-article": {
+ "borderTopWidth": "1",
+ "borderTopColor": "#E6E6E6",
+ "flexDirection": "row",
+ "alignItems": "center",
+ "paddingTop": "10",
+ "paddingBottom": "15",
+ "paddingLeft": "30",
+ "paddingRight": "20",
+ "backgroundColor": "#FEFEFE"
+ },
+ "poster": {
+ "width": "680",
+ "height": "340",
+ "backgroundColor": "#D2D2D2"
+ },
+ "title": {
+ "width": "680",
+ "paddingTop": "30",
+ "paddingRight": "30",
+ "paddingBottom": "30",
+ "paddingLeft": "30",
+ "fontSize": "38",
+ "color": "#323232"
+ },
+ "shortcut": {
+ "width": "80",
+ "height": "80"
+ },
+ "subtitle": {
+ "width": "550",
+ "paddingRight": "25",
+ "fontSize": "34",
+ "color": "#454545"
+ },
+ "summary": {
+ "width": "680",
+ "marginTop": "-20",
+ "paddingLeft": "30",
+ "paddingRight": "30",
+ "paddingBottom": "30",
+ "fontSize": "28",
+ "color": "#929292",
+ "lines": 3
+ }
+}
+
+/***/ }),
+/* 75 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _utils = __webpack_require__(26);
+
+var modal = weex.requireModule('modal'); //
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+
+exports.default = {
+ data: function data() {
+ var dict = {
+ REFRESH: { en: 'Release to refresh', zh: '释放刷新' },
+ REFRESHING: { en: 'Fetching ...', zh: '正在加载……' },
+ UPDATED: { en: 'Updated', zh: '已更新' },
+ LOAD_MERE: { en: 'Load more', zh: '加载更多' },
+ NO_MORE_NEWS: { en: 'No more news', zh: '到底了' }
+ };
+ return {
+ language: 'en',
+ navigationBarOptions: {
+ // backgroundColor: '#5F5F5F',
+ title: {
+ zh: '资讯',
+ en: 'News'
+ }
+ },
+ dict: dict,
+ refreshNote: dict.REFRESH,
+ refreshing: false,
+ visibleCount: 6,
+ news: []
+ };
+ },
+
+ computed: {
+ visibleNews: function visibleNews() {
+ return this.news.slice(0, this.visibleCount);
+ }
+ },
+ beforeCreate: function beforeCreate() {
+ var _this = this;
+
+ (0, _utils.fetchNews)(function (res) {
+ if (Array.isArray(res.news)) {
+ _this.news = res.news;
+ }
+ });
+ },
+
+ methods: {
+ refresh: function refresh() {
+ var _this2 = this;
+
+ this.refreshing = true;
+ this.refreshNote = this.dict.REFRESHING;
+ var finish = function finish() {
+ _this2.refreshing = false;
+ setTimeout(function () {
+ _this2.refreshNote = _this2.dict.REFRESH;
+ }, 500);
+ };
+ (0, _utils.fetchNews)(function (res) {
+ if (Array.isArray(res.news)) {
+ if (_this2.news.length === res.news.length) {
+ modal.toast({
+ message: _this2.i18n(_this2.dict.UPDATED)
+ });
+ }
+ _this2.news = res.news;
+ finish();
+ }
+ setTimeout(function () {
+ return finish();
+ }, 5000);
+ });
+ },
+ loadmore: function loadmore() {
+ var step = 4;
+ var currentCount = this.visibleCount;
+ this.visibleCount = Math.min(currentCount + step, this.news.length);
+ modal.toast({
+ message: this.visibleCount > currentCount ? this.i18n(this.dict.LOAD_MERE) : this.i18n(this.dict.NO_MORE_NEWS)
+ });
+ }
+ }
+};
+
+/***/ }),
+/* 76 */
+/***/ (function(module, exports) {
+
+module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+ return _c('list', {
+ staticClass: ["list"],
+ attrs: {
+ "loadmoreoffset": "10"
+ },
+ on: {
+ "loadmore": _vm.loadmore
+ }
+ }, [_c('refresh', {
+ staticClass: ["refresh"],
+ attrs: {
+ "display": _vm.refreshing ? 'show' : 'hide'
+ },
+ on: {
+ "refresh": _vm.refresh
+ }
+ }, [_c('text', {
+ staticClass: ["indicator-text"]
+ }, [_vm._v(_vm._s(_vm.i18n(_vm.refreshNote)))])]), _vm._l((_vm.visibleNews), function(item, i) {
+ return _c('cell', {
+ key: i,
+ staticClass: ["cell"],
+ appendAsTree: true,
+ attrs: {
+ "append": "tree"
+ }
+ }, [(item.time) ? _c('div', {
+ staticClass: ["message-time"]
+ }, [_c('text', {
+ staticClass: ["time-text"]
+ }, [_vm._v(_vm._s(_vm.i18n(item.time)))])]) : _vm._e(), (item.type === 'article') ? _c('div', {
+ staticClass: ["message-box"]
+ }, [_c('div', {
+ staticClass: ["article"],
+ on: {
+ "click": function($event) {
+ _vm.jumpTo(item.link)
+ }
+ }
+ }, [_c('image', {
+ staticClass: ["poster"],
+ attrs: {
+ "resize": "cover",
+ "src": item.poster
+ }
+ }), _c('text', {
+ staticClass: ["title"]
+ }, [_vm._v(_vm._s(item.title))]), (item.summary) ? _c('text', {
+ staticClass: ["summary"],
+ attrs: {
+ "lines": 3
+ }
+ }, [_vm._v(_vm._s(item.summary))]) : _vm._e(), _c('div', {
+ staticClass: ["related"]
+ }, _vm._l((item.related), function(sub) {
+ return _c('div', {
+ key: sub.title,
+ staticClass: ["related-article"],
+ on: {
+ "click": function($event) {
+ _vm.jumpTo(sub.link)
+ }
+ }
+ }, [_c('text', {
+ staticClass: ["subtitle"]
+ }, [_vm._v(_vm._s(sub.title))]), _c('image', {
+ staticClass: ["shortcut"],
+ attrs: {
+ "resize": "cover",
+ "src": sub.poster
+ }
+ })])
+ }))])]) : _vm._e()])
+ })], 2)
+},staticRenderFns: []}
+module.exports.render._withStripped = true
+
+/***/ })
+/******/ ]);
\ No newline at end of file
diff --git a/ios/weex.png b/ios/weex.png
new file mode 100644
index 0000000..e8f8e52
--- /dev/null
+++ b/ios/weex.png
Binary files differ
diff --git a/ios/weex@2x.png b/ios/weex@2x.png
new file mode 100644
index 0000000..0b7542f
--- /dev/null
+++ b/ios/weex@2x.png
Binary files differ