@capawesome/capacitor-in-app-browser 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/CapawesomeCapacitorInAppBrowser.podspec +17 -0
  2. package/LICENSE +21 -0
  3. package/Package.swift +28 -0
  4. package/README.md +690 -0
  5. package/android/build.gradle +60 -0
  6. package/android/src/main/AndroidManifest.xml +2 -0
  7. package/android/src/main/java/io/capawesome/capacitorjs/plugins/inappbrowser/InAppBrowser.java +242 -0
  8. package/android/src/main/java/io/capawesome/capacitorjs/plugins/inappbrowser/InAppBrowserPlugin.java +289 -0
  9. package/android/src/main/java/io/capawesome/capacitorjs/plugins/inappbrowser/classes/CustomException.java +20 -0
  10. package/android/src/main/java/io/capawesome/capacitorjs/plugins/inappbrowser/classes/CustomExceptions.java +20 -0
  11. package/android/src/main/java/io/capawesome/capacitorjs/plugins/inappbrowser/classes/WebViewDialog.java +343 -0
  12. package/android/src/main/java/io/capawesome/capacitorjs/plugins/inappbrowser/classes/events/BrowserPageNavigationCompletedEvent.java +23 -0
  13. package/android/src/main/java/io/capawesome/capacitorjs/plugins/inappbrowser/classes/events/MessageReceivedEvent.java +23 -0
  14. package/android/src/main/java/io/capawesome/capacitorjs/plugins/inappbrowser/classes/options/ExecuteScriptOptions.java +29 -0
  15. package/android/src/main/java/io/capawesome/capacitorjs/plugins/inappbrowser/classes/options/GetCookiesOptions.java +29 -0
  16. package/android/src/main/java/io/capawesome/capacitorjs/plugins/inappbrowser/classes/options/OpenInExternalBrowserOptions.java +30 -0
  17. package/android/src/main/java/io/capawesome/capacitorjs/plugins/inappbrowser/classes/options/OpenInSystemBrowserOptions.java +74 -0
  18. package/android/src/main/java/io/capawesome/capacitorjs/plugins/inappbrowser/classes/options/OpenInWebViewOptions.java +112 -0
  19. package/android/src/main/java/io/capawesome/capacitorjs/plugins/inappbrowser/classes/options/PostMessageOptions.java +30 -0
  20. package/android/src/main/java/io/capawesome/capacitorjs/plugins/inappbrowser/classes/options/WebViewToolbarOptions.java +87 -0
  21. package/android/src/main/java/io/capawesome/capacitorjs/plugins/inappbrowser/classes/results/ExecuteScriptResult.java +25 -0
  22. package/android/src/main/java/io/capawesome/capacitorjs/plugins/inappbrowser/classes/results/GetCookiesResult.java +28 -0
  23. package/android/src/main/java/io/capawesome/capacitorjs/plugins/inappbrowser/interfaces/Callback.java +5 -0
  24. package/android/src/main/java/io/capawesome/capacitorjs/plugins/inappbrowser/interfaces/EmptyCallback.java +5 -0
  25. package/android/src/main/java/io/capawesome/capacitorjs/plugins/inappbrowser/interfaces/NonEmptyResultCallback.java +7 -0
  26. package/android/src/main/java/io/capawesome/capacitorjs/plugins/inappbrowser/interfaces/Result.java +7 -0
  27. package/android/src/main/res/.gitkeep +0 -0
  28. package/dist/docs.json +1173 -0
  29. package/dist/esm/definitions.d.ts +540 -0
  30. package/dist/esm/definitions.js +19 -0
  31. package/dist/esm/definitions.js.map +1 -0
  32. package/dist/esm/index.d.ts +4 -0
  33. package/dist/esm/index.js +7 -0
  34. package/dist/esm/index.js.map +1 -0
  35. package/dist/esm/web.d.ts +14 -0
  36. package/dist/esm/web.js +35 -0
  37. package/dist/esm/web.js.map +1 -0
  38. package/dist/plugin.cjs.js +68 -0
  39. package/dist/plugin.cjs.js.map +1 -0
  40. package/dist/plugin.js +71 -0
  41. package/dist/plugin.js.map +1 -0
  42. package/ios/Plugin/Classes/Events/BrowserPageNavigationCompletedEvent.swift +16 -0
  43. package/ios/Plugin/Classes/Events/MessageReceivedEvent.swift +24 -0
  44. package/ios/Plugin/Classes/Options/ExecuteScriptOptions.swift +17 -0
  45. package/ios/Plugin/Classes/Options/GetCookiesOptions.swift +20 -0
  46. package/ios/Plugin/Classes/Options/OpenInExternalBrowserOptions.swift +20 -0
  47. package/ios/Plugin/Classes/Options/OpenInSystemBrowserOptions.swift +52 -0
  48. package/ios/Plugin/Classes/Options/OpenInWebViewOptions.swift +48 -0
  49. package/ios/Plugin/Classes/Options/PostMessageOptions.swift +17 -0
  50. package/ios/Plugin/Classes/Options/WebViewToolbarOptions.swift +37 -0
  51. package/ios/Plugin/Classes/Results/ExecuteScriptResult.swift +25 -0
  52. package/ios/Plugin/Classes/Results/GetCookiesResult.swift +20 -0
  53. package/ios/Plugin/Classes/WebViewController.swift +224 -0
  54. package/ios/Plugin/Enums/CustomError.swift +49 -0
  55. package/ios/Plugin/InAppBrowser.swift +194 -0
  56. package/ios/Plugin/InAppBrowserHelper.swift +49 -0
  57. package/ios/Plugin/InAppBrowserPlugin.swift +191 -0
  58. package/ios/Plugin/Info.plist +24 -0
  59. package/ios/Plugin/Protocols/Result.swift +5 -0
  60. package/package.json +91 -0
@@ -0,0 +1,68 @@
1
+ 'use strict';
2
+
3
+ var core = require('@capacitor/core');
4
+
5
+ /**
6
+ * @since 0.1.0
7
+ */
8
+ exports.ErrorCode = void 0;
9
+ (function (ErrorCode) {
10
+ /**
11
+ * No app was found on the device that can open the URL.
12
+ *
13
+ * @since 0.1.0
14
+ */
15
+ ErrorCode["BrowserNotFound"] = "BROWSER_NOT_FOUND";
16
+ /**
17
+ * No browser is currently open.
18
+ *
19
+ * @since 0.1.0
20
+ */
21
+ ErrorCode["NoBrowserOpen"] = "NO_BROWSER_OPEN";
22
+ })(exports.ErrorCode || (exports.ErrorCode = {}));
23
+
24
+ const InAppBrowser = core.registerPlugin('InAppBrowser', {
25
+ web: () => Promise.resolve().then(function () { return web; }).then(m => new m.InAppBrowserWeb()),
26
+ });
27
+
28
+ class InAppBrowserWeb extends core.WebPlugin {
29
+ async clearCache() {
30
+ throw this.unimplemented('Not implemented on web.');
31
+ }
32
+ async clearSessionData() {
33
+ throw this.unimplemented('Not implemented on web.');
34
+ }
35
+ async close() {
36
+ throw this.unimplemented('Not implemented on web.');
37
+ }
38
+ async executeScript() {
39
+ throw this.unimplemented('Not implemented on web.');
40
+ }
41
+ async getCookies() {
42
+ throw this.unimplemented('Not implemented on web.');
43
+ }
44
+ async openInExternalBrowser(options) {
45
+ if (!options.url) {
46
+ throw new Error(InAppBrowserWeb.errorUrlMissing);
47
+ }
48
+ window.open(options.url, '_blank');
49
+ }
50
+ async openInSystemBrowser() {
51
+ throw this.unimplemented('Not implemented on web.');
52
+ }
53
+ async openInWebView() {
54
+ throw this.unimplemented('Not implemented on web.');
55
+ }
56
+ async postMessage() {
57
+ throw this.unimplemented('Not implemented on web.');
58
+ }
59
+ }
60
+ InAppBrowserWeb.errorUrlMissing = 'url must be provided.';
61
+
62
+ var web = /*#__PURE__*/Object.freeze({
63
+ __proto__: null,
64
+ InAppBrowserWeb: InAppBrowserWeb
65
+ });
66
+
67
+ exports.InAppBrowser = InAppBrowser;
68
+ //# sourceMappingURL=plugin.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.cjs.js","sources":["esm/definitions.js","esm/index.js","esm/web.js"],"sourcesContent":["/**\n * @since 0.1.0\n */\nexport var ErrorCode;\n(function (ErrorCode) {\n /**\n * No app was found on the device that can open the URL.\n *\n * @since 0.1.0\n */\n ErrorCode[\"BrowserNotFound\"] = \"BROWSER_NOT_FOUND\";\n /**\n * No browser is currently open.\n *\n * @since 0.1.0\n */\n ErrorCode[\"NoBrowserOpen\"] = \"NO_BROWSER_OPEN\";\n})(ErrorCode || (ErrorCode = {}));\n//# sourceMappingURL=definitions.js.map","import { registerPlugin } from '@capacitor/core';\nconst InAppBrowser = registerPlugin('InAppBrowser', {\n web: () => import('./web').then(m => new m.InAppBrowserWeb()),\n});\nexport * from './definitions';\nexport { InAppBrowser };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nexport class InAppBrowserWeb extends WebPlugin {\n async clearCache() {\n throw this.unimplemented('Not implemented on web.');\n }\n async clearSessionData() {\n throw this.unimplemented('Not implemented on web.');\n }\n async close() {\n throw this.unimplemented('Not implemented on web.');\n }\n async executeScript() {\n throw this.unimplemented('Not implemented on web.');\n }\n async getCookies() {\n throw this.unimplemented('Not implemented on web.');\n }\n async openInExternalBrowser(options) {\n if (!options.url) {\n throw new Error(InAppBrowserWeb.errorUrlMissing);\n }\n window.open(options.url, '_blank');\n }\n async openInSystemBrowser() {\n throw this.unimplemented('Not implemented on web.');\n }\n async openInWebView() {\n throw this.unimplemented('Not implemented on web.');\n }\n async postMessage() {\n throw this.unimplemented('Not implemented on web.');\n }\n}\nInAppBrowserWeb.errorUrlMissing = 'url must be provided.';\n//# sourceMappingURL=web.js.map"],"names":["ErrorCode","registerPlugin","WebPlugin"],"mappings":";;;;AAAA;AACA;AACA;AACWA;AACX,CAAC,UAAU,SAAS,EAAE;AACtB;AACA;AACA;AACA;AACA;AACA,IAAI,SAAS,CAAC,iBAAiB,CAAC,GAAG,mBAAmB;AACtD;AACA;AACA;AACA;AACA;AACA,IAAI,SAAS,CAAC,eAAe,CAAC,GAAG,iBAAiB;AAClD,CAAC,EAAEA,iBAAS,KAAKA,iBAAS,GAAG,EAAE,CAAC,CAAC;;AChB5B,MAAC,YAAY,GAAGC,mBAAc,CAAC,cAAc,EAAE;AACpD,IAAI,GAAG,EAAE,MAAM,mDAAe,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,eAAe,EAAE,CAAC;AACjE,CAAC;;ACFM,MAAM,eAAe,SAASC,cAAS,CAAC;AAC/C,IAAI,MAAM,UAAU,GAAG;AACvB,QAAQ,MAAM,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC;AAC3D,IAAI;AACJ,IAAI,MAAM,gBAAgB,GAAG;AAC7B,QAAQ,MAAM,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC;AAC3D,IAAI;AACJ,IAAI,MAAM,KAAK,GAAG;AAClB,QAAQ,MAAM,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC;AAC3D,IAAI;AACJ,IAAI,MAAM,aAAa,GAAG;AAC1B,QAAQ,MAAM,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC;AAC3D,IAAI;AACJ,IAAI,MAAM,UAAU,GAAG;AACvB,QAAQ,MAAM,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC;AAC3D,IAAI;AACJ,IAAI,MAAM,qBAAqB,CAAC,OAAO,EAAE;AACzC,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;AAC1B,YAAY,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,eAAe,CAAC;AAC5D,QAAQ;AACR,QAAQ,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC;AAC1C,IAAI;AACJ,IAAI,MAAM,mBAAmB,GAAG;AAChC,QAAQ,MAAM,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC;AAC3D,IAAI;AACJ,IAAI,MAAM,aAAa,GAAG;AAC1B,QAAQ,MAAM,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC;AAC3D,IAAI;AACJ,IAAI,MAAM,WAAW,GAAG;AACxB,QAAQ,MAAM,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC;AAC3D,IAAI;AACJ;AACA,eAAe,CAAC,eAAe,GAAG,uBAAuB;;;;;;;;;"}
package/dist/plugin.js ADDED
@@ -0,0 +1,71 @@
1
+ var capacitorInAppBrowser = (function (exports, core) {
2
+ 'use strict';
3
+
4
+ /**
5
+ * @since 0.1.0
6
+ */
7
+ exports.ErrorCode = void 0;
8
+ (function (ErrorCode) {
9
+ /**
10
+ * No app was found on the device that can open the URL.
11
+ *
12
+ * @since 0.1.0
13
+ */
14
+ ErrorCode["BrowserNotFound"] = "BROWSER_NOT_FOUND";
15
+ /**
16
+ * No browser is currently open.
17
+ *
18
+ * @since 0.1.0
19
+ */
20
+ ErrorCode["NoBrowserOpen"] = "NO_BROWSER_OPEN";
21
+ })(exports.ErrorCode || (exports.ErrorCode = {}));
22
+
23
+ const InAppBrowser = core.registerPlugin('InAppBrowser', {
24
+ web: () => Promise.resolve().then(function () { return web; }).then(m => new m.InAppBrowserWeb()),
25
+ });
26
+
27
+ class InAppBrowserWeb extends core.WebPlugin {
28
+ async clearCache() {
29
+ throw this.unimplemented('Not implemented on web.');
30
+ }
31
+ async clearSessionData() {
32
+ throw this.unimplemented('Not implemented on web.');
33
+ }
34
+ async close() {
35
+ throw this.unimplemented('Not implemented on web.');
36
+ }
37
+ async executeScript() {
38
+ throw this.unimplemented('Not implemented on web.');
39
+ }
40
+ async getCookies() {
41
+ throw this.unimplemented('Not implemented on web.');
42
+ }
43
+ async openInExternalBrowser(options) {
44
+ if (!options.url) {
45
+ throw new Error(InAppBrowserWeb.errorUrlMissing);
46
+ }
47
+ window.open(options.url, '_blank');
48
+ }
49
+ async openInSystemBrowser() {
50
+ throw this.unimplemented('Not implemented on web.');
51
+ }
52
+ async openInWebView() {
53
+ throw this.unimplemented('Not implemented on web.');
54
+ }
55
+ async postMessage() {
56
+ throw this.unimplemented('Not implemented on web.');
57
+ }
58
+ }
59
+ InAppBrowserWeb.errorUrlMissing = 'url must be provided.';
60
+
61
+ var web = /*#__PURE__*/Object.freeze({
62
+ __proto__: null,
63
+ InAppBrowserWeb: InAppBrowserWeb
64
+ });
65
+
66
+ exports.InAppBrowser = InAppBrowser;
67
+
68
+ return exports;
69
+
70
+ })({}, capacitorExports);
71
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sources":["esm/definitions.js","esm/index.js","esm/web.js"],"sourcesContent":["/**\n * @since 0.1.0\n */\nexport var ErrorCode;\n(function (ErrorCode) {\n /**\n * No app was found on the device that can open the URL.\n *\n * @since 0.1.0\n */\n ErrorCode[\"BrowserNotFound\"] = \"BROWSER_NOT_FOUND\";\n /**\n * No browser is currently open.\n *\n * @since 0.1.0\n */\n ErrorCode[\"NoBrowserOpen\"] = \"NO_BROWSER_OPEN\";\n})(ErrorCode || (ErrorCode = {}));\n//# sourceMappingURL=definitions.js.map","import { registerPlugin } from '@capacitor/core';\nconst InAppBrowser = registerPlugin('InAppBrowser', {\n web: () => import('./web').then(m => new m.InAppBrowserWeb()),\n});\nexport * from './definitions';\nexport { InAppBrowser };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nexport class InAppBrowserWeb extends WebPlugin {\n async clearCache() {\n throw this.unimplemented('Not implemented on web.');\n }\n async clearSessionData() {\n throw this.unimplemented('Not implemented on web.');\n }\n async close() {\n throw this.unimplemented('Not implemented on web.');\n }\n async executeScript() {\n throw this.unimplemented('Not implemented on web.');\n }\n async getCookies() {\n throw this.unimplemented('Not implemented on web.');\n }\n async openInExternalBrowser(options) {\n if (!options.url) {\n throw new Error(InAppBrowserWeb.errorUrlMissing);\n }\n window.open(options.url, '_blank');\n }\n async openInSystemBrowser() {\n throw this.unimplemented('Not implemented on web.');\n }\n async openInWebView() {\n throw this.unimplemented('Not implemented on web.');\n }\n async postMessage() {\n throw this.unimplemented('Not implemented on web.');\n }\n}\nInAppBrowserWeb.errorUrlMissing = 'url must be provided.';\n//# sourceMappingURL=web.js.map"],"names":["ErrorCode","registerPlugin","WebPlugin"],"mappings":";;;IAAA;IACA;IACA;AACWA;IACX,CAAC,UAAU,SAAS,EAAE;IACtB;IACA;IACA;IACA;IACA;IACA,IAAI,SAAS,CAAC,iBAAiB,CAAC,GAAG,mBAAmB;IACtD;IACA;IACA;IACA;IACA;IACA,IAAI,SAAS,CAAC,eAAe,CAAC,GAAG,iBAAiB;IAClD,CAAC,EAAEA,iBAAS,KAAKA,iBAAS,GAAG,EAAE,CAAC,CAAC;;AChB5B,UAAC,YAAY,GAAGC,mBAAc,CAAC,cAAc,EAAE;IACpD,IAAI,GAAG,EAAE,MAAM,mDAAe,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,eAAe,EAAE,CAAC;IACjE,CAAC;;ICFM,MAAM,eAAe,SAASC,cAAS,CAAC;IAC/C,IAAI,MAAM,UAAU,GAAG;IACvB,QAAQ,MAAM,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC;IAC3D,IAAI;IACJ,IAAI,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,MAAM,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC;IAC3D,IAAI;IACJ,IAAI,MAAM,KAAK,GAAG;IAClB,QAAQ,MAAM,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC;IAC3D,IAAI;IACJ,IAAI,MAAM,aAAa,GAAG;IAC1B,QAAQ,MAAM,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC;IAC3D,IAAI;IACJ,IAAI,MAAM,UAAU,GAAG;IACvB,QAAQ,MAAM,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC;IAC3D,IAAI;IACJ,IAAI,MAAM,qBAAqB,CAAC,OAAO,EAAE;IACzC,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;IAC1B,YAAY,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,eAAe,CAAC;IAC5D,QAAQ;IACR,QAAQ,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC;IAC1C,IAAI;IACJ,IAAI,MAAM,mBAAmB,GAAG;IAChC,QAAQ,MAAM,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC;IAC3D,IAAI;IACJ,IAAI,MAAM,aAAa,GAAG;IAC1B,QAAQ,MAAM,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC;IAC3D,IAAI;IACJ,IAAI,MAAM,WAAW,GAAG;IACxB,QAAQ,MAAM,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC;IAC3D,IAAI;IACJ;IACA,eAAe,CAAC,eAAe,GAAG,uBAAuB;;;;;;;;;;;;;;;"}
@@ -0,0 +1,16 @@
1
+ import Foundation
2
+ import Capacitor
3
+
4
+ @objc public class BrowserPageNavigationCompletedEvent: NSObject, Result {
5
+ let url: String
6
+
7
+ init(url: String) {
8
+ self.url = url
9
+ }
10
+
11
+ @objc public func toJSObject() -> AnyObject {
12
+ var result = JSObject()
13
+ result["url"] = url
14
+ return result as AnyObject
15
+ }
16
+ }
@@ -0,0 +1,24 @@
1
+ import Foundation
2
+ import Capacitor
3
+
4
+ @objc public class MessageReceivedEvent: NSObject, Result {
5
+ let data: Any
6
+
7
+ init(data: Any) {
8
+ self.data = data
9
+ }
10
+
11
+ @objc public func toJSObject() -> AnyObject {
12
+ var result = JSObject()
13
+ if let dictionary = data as? [AnyHashable: Any] {
14
+ result["data"] = JSTypes.coerceDictionaryToJSObject(dictionary) ?? JSObject()
15
+ } else if let array = data as? [Any] {
16
+ result["data"] = JSTypes.coerceArrayToJSArray(array) ?? JSArray()
17
+ } else if let value = data as? JSValue {
18
+ result["data"] = value
19
+ } else {
20
+ result["data"] = NSNull()
21
+ }
22
+ return result as AnyObject
23
+ }
24
+ }
@@ -0,0 +1,17 @@
1
+ import Foundation
2
+ import Capacitor
3
+
4
+ @objc public class ExecuteScriptOptions: NSObject {
5
+ let script: String
6
+
7
+ init(_ call: CAPPluginCall) throws {
8
+ self.script = try ExecuteScriptOptions.getScriptFromCall(call)
9
+ }
10
+
11
+ private static func getScriptFromCall(_ call: CAPPluginCall) throws -> String {
12
+ guard let script = call.getString("script"), !script.isEmpty else {
13
+ throw CustomError.scriptMissing
14
+ }
15
+ return script
16
+ }
17
+ }
@@ -0,0 +1,20 @@
1
+ import Foundation
2
+ import Capacitor
3
+
4
+ @objc public class GetCookiesOptions: NSObject {
5
+ let url: URL
6
+
7
+ init(_ call: CAPPluginCall) throws {
8
+ self.url = try GetCookiesOptions.getUrlFromCall(call)
9
+ }
10
+
11
+ private static func getUrlFromCall(_ call: CAPPluginCall) throws -> URL {
12
+ guard let urlString = call.getString("url"), !urlString.isEmpty else {
13
+ throw CustomError.urlMissing
14
+ }
15
+ guard let url = URL(string: urlString) else {
16
+ throw CustomError.urlInvalid
17
+ }
18
+ return url
19
+ }
20
+ }
@@ -0,0 +1,20 @@
1
+ import Foundation
2
+ import Capacitor
3
+
4
+ @objc public class OpenInExternalBrowserOptions: NSObject {
5
+ let url: URL
6
+
7
+ init(_ call: CAPPluginCall) throws {
8
+ self.url = try OpenInExternalBrowserOptions.getUrlFromCall(call)
9
+ }
10
+
11
+ private static func getUrlFromCall(_ call: CAPPluginCall) throws -> URL {
12
+ guard let urlString = call.getString("url"), !urlString.isEmpty else {
13
+ throw CustomError.urlMissing
14
+ }
15
+ guard let url = URL(string: urlString) else {
16
+ throw CustomError.urlInvalid
17
+ }
18
+ return url
19
+ }
20
+ }
@@ -0,0 +1,52 @@
1
+ import Foundation
2
+ import Capacitor
3
+ import SafariServices
4
+ import UIKit
5
+
6
+ @objc public class OpenInSystemBrowserOptions: NSObject {
7
+ let barCollapsing: Bool
8
+ let dismissButtonStyle: SFSafariViewController.DismissButtonStyle
9
+ let readerMode: Bool
10
+ let toolbarColor: UIColor?
11
+ let url: URL
12
+
13
+ init(_ call: CAPPluginCall) throws {
14
+ let iosOptions = call.getObject("ios")
15
+ self.barCollapsing = iosOptions?["barCollapsing"] as? Bool ?? true
16
+ self.dismissButtonStyle = OpenInSystemBrowserOptions.getDismissButtonStyleFromObject(iosOptions)
17
+ self.readerMode = iosOptions?["readerMode"] as? Bool ?? false
18
+ self.toolbarColor = try OpenInSystemBrowserOptions.getToolbarColorFromObject(iosOptions)
19
+ self.url = try OpenInSystemBrowserOptions.getUrlFromCall(call)
20
+ }
21
+
22
+ private static func getDismissButtonStyleFromObject(_ object: JSObject?) -> SFSafariViewController.DismissButtonStyle {
23
+ switch object?["dismissButtonStyle"] as? String {
24
+ case "cancel":
25
+ return .cancel
26
+ case "close":
27
+ return .close
28
+ default:
29
+ return .done
30
+ }
31
+ }
32
+
33
+ private static func getToolbarColorFromObject(_ object: JSObject?) throws -> UIColor? {
34
+ guard let toolbarColor = object?["toolbarColor"] as? String else {
35
+ return nil
36
+ }
37
+ guard let color = InAppBrowserHelper.parseColor(toolbarColor) else {
38
+ throw CustomError.toolbarColorInvalid
39
+ }
40
+ return color
41
+ }
42
+
43
+ private static func getUrlFromCall(_ call: CAPPluginCall) throws -> URL {
44
+ guard let urlString = call.getString("url"), !urlString.isEmpty else {
45
+ throw CustomError.urlMissing
46
+ }
47
+ guard let url = URL(string: urlString), let scheme = url.scheme, ["http", "https"].contains(scheme.lowercased()) else {
48
+ throw CustomError.urlInvalid
49
+ }
50
+ return url
51
+ }
52
+ }
@@ -0,0 +1,48 @@
1
+ import Foundation
2
+ import Capacitor
3
+
4
+ @objc public class OpenInWebViewOptions: NSObject {
5
+ let allowsBackForwardNavigationGestures: Bool
6
+ let headers: [String: String]
7
+ let isolatedDataStore: Bool
8
+ let mediaPlaybackRequiresUserAction: Bool
9
+ let overscroll: Bool
10
+ let toolbar: WebViewToolbarOptions
11
+ let url: URL
12
+ let userAgent: String?
13
+
14
+ init(_ call: CAPPluginCall) throws {
15
+ let iosOptions = call.getObject("ios")
16
+ self.allowsBackForwardNavigationGestures = iosOptions?["allowsBackForwardNavigationGestures"] as? Bool ?? false
17
+ self.headers = OpenInWebViewOptions.getHeadersFromCall(call)
18
+ self.isolatedDataStore = call.getString("dataStore") == "isolated"
19
+ self.mediaPlaybackRequiresUserAction = call.getBool("mediaPlaybackRequiresUserAction", false)
20
+ self.overscroll = iosOptions?["overscroll"] as? Bool ?? true
21
+ self.toolbar = try WebViewToolbarOptions(call.getObject("toolbar"))
22
+ self.url = try OpenInWebViewOptions.getUrlFromCall(call)
23
+ self.userAgent = call.getString("userAgent")
24
+ }
25
+
26
+ private static func getHeadersFromCall(_ call: CAPPluginCall) -> [String: String] {
27
+ var headers: [String: String] = [:]
28
+ guard let headersObject = call.getObject("headers") else {
29
+ return headers
30
+ }
31
+ for (key, value) in headersObject {
32
+ if let value = value as? String {
33
+ headers[key] = value
34
+ }
35
+ }
36
+ return headers
37
+ }
38
+
39
+ private static func getUrlFromCall(_ call: CAPPluginCall) throws -> URL {
40
+ guard let urlString = call.getString("url"), !urlString.isEmpty else {
41
+ throw CustomError.urlMissing
42
+ }
43
+ guard let url = URL(string: urlString), let scheme = url.scheme, ["http", "https"].contains(scheme.lowercased()) else {
44
+ throw CustomError.urlInvalid
45
+ }
46
+ return url
47
+ }
48
+ }
@@ -0,0 +1,17 @@
1
+ import Foundation
2
+ import Capacitor
3
+
4
+ @objc public class PostMessageOptions: NSObject {
5
+ let data: JSObject
6
+
7
+ init(_ call: CAPPluginCall) throws {
8
+ self.data = try PostMessageOptions.getDataFromCall(call)
9
+ }
10
+
11
+ private static func getDataFromCall(_ call: CAPPluginCall) throws -> JSObject {
12
+ guard let data = call.getObject("data") else {
13
+ throw CustomError.dataMissing
14
+ }
15
+ return data
16
+ }
17
+ }
@@ -0,0 +1,37 @@
1
+ import Foundation
2
+ import Capacitor
3
+ import UIKit
4
+
5
+ @objc public class WebViewToolbarOptions: NSObject {
6
+ let backgroundColor: UIColor?
7
+ let closeButtonText: String
8
+ let color: UIColor?
9
+ let showNavigationButtons: Bool
10
+ let showUrl: Bool
11
+ let title: String?
12
+ let visible: Bool
13
+
14
+ init(_ object: JSObject?) throws {
15
+ self.backgroundColor = try WebViewToolbarOptions.getColorFromObject(
16
+ object,
17
+ key: "backgroundColor",
18
+ invalidError: CustomError.backgroundColorInvalid
19
+ )
20
+ self.closeButtonText = object?["closeButtonText"] as? String ?? "Close"
21
+ self.color = try WebViewToolbarOptions.getColorFromObject(object, key: "color", invalidError: CustomError.colorInvalid)
22
+ self.showNavigationButtons = object?["showNavigationButtons"] as? Bool ?? false
23
+ self.showUrl = object?["showUrl"] as? Bool ?? false
24
+ self.title = object?["title"] as? String
25
+ self.visible = object?["visible"] as? Bool ?? true
26
+ }
27
+
28
+ private static func getColorFromObject(_ object: JSObject?, key: String, invalidError: Error) throws -> UIColor? {
29
+ guard let value = object?[key] as? String else {
30
+ return nil
31
+ }
32
+ guard let color = InAppBrowserHelper.parseColor(value) else {
33
+ throw invalidError
34
+ }
35
+ return color
36
+ }
37
+ }
@@ -0,0 +1,25 @@
1
+ import Foundation
2
+ import Capacitor
3
+
4
+ @objc public class ExecuteScriptResult: NSObject, Result {
5
+ let result: String?
6
+
7
+ init(value: Any?) {
8
+ if let value = value, !(value is NSNull), let data = try? JSONSerialization.data(withJSONObject: value, options: [.fragmentsAllowed]),
9
+ let string = String(data: data, encoding: .utf8) {
10
+ self.result = string
11
+ } else {
12
+ self.result = nil
13
+ }
14
+ }
15
+
16
+ @objc public func toJSObject() -> AnyObject {
17
+ var result = JSObject()
18
+ if let value = self.result {
19
+ result["result"] = value
20
+ } else {
21
+ result["result"] = NSNull()
22
+ }
23
+ return result as AnyObject
24
+ }
25
+ }
@@ -0,0 +1,20 @@
1
+ import Foundation
2
+ import Capacitor
3
+
4
+ @objc public class GetCookiesResult: NSObject, Result {
5
+ let cookies: [String: String]
6
+
7
+ init(cookies: [String: String]) {
8
+ self.cookies = cookies
9
+ }
10
+
11
+ @objc public func toJSObject() -> AnyObject {
12
+ var cookies = JSObject()
13
+ for (key, value) in self.cookies {
14
+ cookies[key] = value
15
+ }
16
+ var result = JSObject()
17
+ result["cookies"] = cookies
18
+ return result as AnyObject
19
+ }
20
+ }