--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/thirdparty/google_appengine/google/appengine/ext/admin/templates/js/webhook.js Fri Jun 19 16:13:32 2009 +0200
@@ -0,0 +1,74 @@
+// Copyright 2009 Google Inc. All Rights Reserved.
+
+function Webhook(formId) {
+ this.formId = formId;
+ this.action = null;
+ this.headers = {};
+ this.method = null;
+ this.payload = null;
+};
+
+Webhook.prototype.HEADER_KEY = 'header:';
+
+Webhook.prototype.parse = function() {
+ var form = document.getElementById(this.formId);
+ if (form == null) {
+ return 'could not find form with id "' + this.formId + '"';
+ };
+ this.action = form.action;
+ this.method = form.method;
+ for (var i = 0, n = form.elements.length; i < n; i++) {
+ var currentElement = form.elements[i];
+ if (currentElement.tagName != 'INPUT' ||
+ currentElement.type.toUpperCase() != 'HIDDEN') {
+ continue;
+ }
+ var key = currentElement.name;
+ var value = currentElement.value;
+ var headerIndex = key.indexOf(this.HEADER_KEY);
+ if (headerIndex == 0) {
+ var header = key.substr(this.HEADER_KEY.length);
+ this.headers[header] = value;
+ } else if (key == 'payload') {
+ this.payload = value;
+ }
+ }
+
+ if (this.action == '') {
+ return 'action not found';
+ }
+ if (this.method == '') {
+ return 'method not found';
+ }
+ return '';
+};
+
+Webhook.prototype.send = function(callback) {
+ var req = null;
+ if (window.XMLHttpRequest) {
+ req = new XMLHttpRequest();
+ } else if (window.ActiveXObject) {
+ req = new ActiveXObject('MSXML2.XMLHTTP.3.0');
+ }
+
+ try {
+ req.open(this.method, this.action, false);
+ for (var key in this.headers) {
+ req.setRequestHeader(key, this.headers[key]);
+ };
+ req.send(this.payload);
+ } catch (e) {
+ callback(this, req, e);
+ return;
+ }
+ callback(this, req, null);
+};
+
+Webhook.prototype.run = function(callback) {
+ var error = this.parse();
+ if (error != '') {
+ callback(this, null, error);
+ } else {
+ this.send(callback);
+ }
+};