summaryrefslogtreecommitdiff
path: root/StoneIsland/plugins/cordova-plugin-customurlscheme/src/wp8/hooks/add-uri-mapper.js
diff options
context:
space:
mode:
Diffstat (limited to 'StoneIsland/plugins/cordova-plugin-customurlscheme/src/wp8/hooks/add-uri-mapper.js')
-rw-r--r--StoneIsland/plugins/cordova-plugin-customurlscheme/src/wp8/hooks/add-uri-mapper.js80
1 files changed, 80 insertions, 0 deletions
diff --git a/StoneIsland/plugins/cordova-plugin-customurlscheme/src/wp8/hooks/add-uri-mapper.js b/StoneIsland/plugins/cordova-plugin-customurlscheme/src/wp8/hooks/add-uri-mapper.js
new file mode 100644
index 00000000..1c1db69c
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-customurlscheme/src/wp8/hooks/add-uri-mapper.js
@@ -0,0 +1,80 @@
+module.exports = function (context) {
+ var deferred = context.requireCordovaModule('q').defer(),
+ fs = context.requireCordovaModule('fs'),
+ path = context.requireCordovaModule('path'),
+ projectRoot = context.opts.projectRoot;
+
+ // While on AppBuilder this may work, the Cordova CLI doesn't like it
+ // (or at least not all versions of it).
+ var appXaml = path.join(projectRoot, "App.xaml.cs");
+ var mainPageXaml = path.join(projectRoot, "MainPage.xaml.cs");
+ try {
+ fs.statSync(appXaml);
+ fs.statSync(mainPageXaml);
+ } catch (err) {
+ appXaml = path.join(projectRoot, "platforms", "wp8", "App.xaml.cs");
+ mainPageXaml = path.join(projectRoot, "platforms", "wp8", "MainPage.xaml.cs");
+ try {
+ fs.statSync(appXaml);
+ fs.statSync(mainPageXaml);
+ } catch (err2) {
+ console.error("Custom URL Scheme plugin couldn't find your App's xaml file! Try to adjust the file manually according to the 'add-uri-mapper.js' hook.");
+ return;
+ }
+ }
+
+ fs.readFile(appXaml, 'utf8', function (err,data) {
+ if (err) {
+ console.error("Error while configuring the Custom URL Scheme: " + err);
+ deferred.reject(err);
+ return;
+ }
+
+ var result = data.replace(/^(\s*?)(RootFrame.NavigationFailed\s*?\+=\s*?RootFrame_NavigationFailed;)/gm,
+ "$1$2\n\n$1// Assign the URI-mapper class to the application frame\n$1RootFrame.UriMapper = new CompositeUriMapper();");
+
+ fs.writeFile(appXaml, result, 'utf8', function (err) {
+ if (err){
+ deferred.reject(err);
+ } else{
+ deferred.resolve();
+ }
+ });
+ });
+
+ fs.readFile(mainPageXaml, 'utf8', function (err,data) {
+ if (err) {
+ console.error("Error while configuring the Custom URL Scheme: " + err);
+ deferred.reject(err);
+ return;
+ }
+
+ // first add a line to refer to a new method
+ var result = data.replace(/^(\s*?)(this.CordovaView.Loaded\s*?\+=\s*?CordovaView_Loaded;)/gm,
+ "$1$2\n\n$1// Wire a handler so we can check for our custom scheme\n$1this.CordovaView.Browser.LoadCompleted += CordovaBrowser_LoadCompleted;");
+
+ // now add that new method
+ result = result.replace(/^(\s*?)(\/\/ Constructor)/gm,
+ "$1void CordovaBrowser_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e) {\n"+
+ "$1\tif (CompositeUriMapper.launchUrl != null) {\n" +
+ "$1\t\tstring handleOpenURL = string.Format(\"(function() {{ document.addEventListener('deviceready', function() {{ if (typeof handleOpenURL === 'function') {{ handleOpenURL(\\\"{0}\\\"); }} }}); }})()\", CompositeUriMapper.launchUrl);\n" +
+ "$1\t\ttry {\n" +
+ "$1\t\t\tthis.CordovaView.CordovaBrowser.InvokeScript(\"eval\", new string[] { handleOpenURL });\n" +
+ "$1\t\t} catch (Exception) {}\n" +
+ "$1\t\tCompositeUriMapper.launchUrl = null;\n" +
+ "$1\t}\n" +
+ "$1\tthis.CordovaView.Browser.LoadCompleted -= CordovaBrowser_LoadCompleted;\n" +
+ "$1}\n\n" +
+ "$1$2");
+
+ fs.writeFile(mainPageXaml, result, 'utf8', function (err) {
+ if (err){
+ deferred.reject(err);
+ } else{
+ deferred.resolve();
+ }
+ });
+ });
+
+ return deferred.promise;
+} \ No newline at end of file