You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by fi...@apache.org on 2012/02/23 18:53:19 UTC

[19/35] git commit: do a little feature detection to use either built-in ProgressEvents or our own polyfill in FileWriter

do a little feature detection to use either built-in ProgressEvents or our own polyfill in FileWriter


Project: http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/commit/428521a1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/tree/428521a1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/diff/428521a1

Branch: refs/heads/ios
Commit: 428521a1b5725d9d436024a088c2bcf04e2f88c1
Parents: 2c3d0bb
Author: Fil Maj <fi...@nitobi.com>
Authored: Fri Feb 17 10:39:41 2012 -0800
Committer: Fil Maj <fi...@nitobi.com>
Committed: Fri Feb 17 10:39:41 2012 -0800

----------------------------------------------------------------------
 lib/plugin/FileWriter.js |   30 +++++++++++++++++++++++++++---
 1 files changed, 27 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cordova-js/blob/428521a1/lib/plugin/FileWriter.js
----------------------------------------------------------------------
diff --git a/lib/plugin/FileWriter.js b/lib/plugin/FileWriter.js
index b85d885..83c94bd 100644
--- a/lib/plugin/FileWriter.js
+++ b/lib/plugin/FileWriter.js
@@ -1,7 +1,31 @@
 var exec = require('cordova/exec'),
-    FileError = require('cordova/plugin/FileError'),
-    // if ProgressEvent exists in global context, use it already, otherwise use our own polyfill
-    ProgressEvent = window.ProgressEvent || require('cordova/plugin/ProgressEvent');
+    FileError = require('cordova/plugin/FileError');
+
+// If ProgressEvent exists in global context, use it already, otherwise use our own polyfill
+// Feature test: See if we can instantiate a native ProgressEvent; if so, use that approach, otherwise fill-in with our own implementation.
+var ProgressEvent = (function() {
+    var createEvent = function(data) {
+      var event = document.createEvent('Events');
+      event.initEvent('ProgressEvent', false, false);
+      if (data) {
+        for (var i in data) {
+          if (data.hasOwnProperty(i)) {
+            event[i] = data[i];
+          }
+        }
+      }
+      return event;
+    };
+    try {
+      var ev = createEvent({type:"abort",target:document});
+      return function(type, data) {
+          data.type = type;
+          return createEvent(data);
+      };
+    } catch(e){
+      return require('cordova/plugin/ProgressEvent');
+    }
+})();
 
 /**
  * This class writes to the mobile device file system.