comparison PalanthirExplorer/libs/jquery-file-upload/js/cors/jquery.postmessage-transport.js @ 45:33d67e1ab173

r
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 05 Sep 2012 13:24:59 +0200
parents PalantirExplorer/libs/jquery-file-upload/js/cors/jquery.postmessage-transport.js@3959d33612cc
children
comparison
equal deleted inserted replaced
43:9be852ad33d2 45:33d67e1ab173
1 /*
2 * jQuery postMessage Transport Plugin 1.1
3 * https://github.com/blueimp/jQuery-File-Upload
4 *
5 * Copyright 2011, Sebastian Tschan
6 * https://blueimp.net
7 *
8 * Licensed under the MIT license:
9 * http://www.opensource.org/licenses/MIT
10 */
11
12 /*jslint unparam: true, nomen: true */
13 /*global define, window, document */
14
15 (function (factory) {
16 'use strict';
17 if (typeof define === 'function' && define.amd) {
18 // Register as an anonymous AMD module:
19 define(['jquery'], factory);
20 } else {
21 // Browser globals:
22 factory(window.jQuery);
23 }
24 }(function ($) {
25 'use strict';
26
27 var counter = 0,
28 names = [
29 'accepts',
30 'cache',
31 'contents',
32 'contentType',
33 'crossDomain',
34 'data',
35 'dataType',
36 'headers',
37 'ifModified',
38 'mimeType',
39 'password',
40 'processData',
41 'timeout',
42 'traditional',
43 'type',
44 'url',
45 'username'
46 ],
47 convert = function (p) {
48 return p;
49 };
50
51 $.ajaxSetup({
52 converters: {
53 'postmessage text': convert,
54 'postmessage json': convert,
55 'postmessage html': convert
56 }
57 });
58
59 $.ajaxTransport('postmessage', function (options) {
60 if (options.postMessage && window.postMessage) {
61 var iframe,
62 loc = $('<a>').prop('href', options.postMessage)[0],
63 target = loc.protocol + '//' + loc.host,
64 xhrUpload = options.xhr().upload;
65 return {
66 send: function (_, completeCallback) {
67 var message = {
68 id: 'postmessage-transport-' + (counter += 1)
69 },
70 eventName = 'message.' + message.id;
71 iframe = $(
72 '<iframe style="display:none;" src="' +
73 options.postMessage + '" name="' +
74 message.id + '"></iframe>'
75 ).bind('load', function () {
76 $.each(names, function (i, name) {
77 message[name] = options[name];
78 });
79 message.dataType = message.dataType.replace('postmessage ', '');
80 $(window).bind(eventName, function (e) {
81 e = e.originalEvent;
82 var data = e.data,
83 ev;
84 if (e.origin === target && data.id === message.id) {
85 if (data.type === 'progress') {
86 ev = document.createEvent('Event');
87 ev.initEvent(data.type, false, true);
88 $.extend(ev, data);
89 xhrUpload.dispatchEvent(ev);
90 } else {
91 completeCallback(
92 data.status,
93 data.statusText,
94 {postmessage: data.result},
95 data.headers
96 );
97 iframe.remove();
98 $(window).unbind(eventName);
99 }
100 }
101 });
102 iframe[0].contentWindow.postMessage(
103 message,
104 target
105 );
106 }).appendTo(document.body);
107 },
108 abort: function () {
109 if (iframe) {
110 iframe.remove();
111 }
112 }
113 };
114 }
115 });
116
117 }));