Skip to content

Commit dccb864

Browse files
committed
more valid
better demo
1 parent fb3d13c commit dccb864

29 files changed

+935
-1978
lines changed

client/js/ajax.requester.js

+8-8
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ qq.AjaxRequestor = function (o) {
4545
sendRequest(nextId);
4646
}
4747
};
48-
48+
4949
onComplete = function (id) {
5050
var xhr = requestState[id].xhr,
5151
method = getMethod(),
@@ -57,7 +57,7 @@ qq.AjaxRequestor = function (o) {
5757
}
5858
options.onComplete(id, xhr, isError);
5959
};
60-
60+
6161
sendRequest = function (id) {
6262
var xhr = new XMLHttpRequest(),
6363
method = getMethod(),
@@ -82,7 +82,7 @@ qq.AjaxRequestor = function (o) {
8282
xhr.send();
8383
}
8484
};
85-
85+
8686
createUrl = function (id, params) {
8787
var endpoint = options.endpointStore.getEndpoint(id),
8888
addToPath = requestState[id].addToPath;
@@ -94,7 +94,7 @@ qq.AjaxRequestor = function (o) {
9494
}
9595
return endpoint;
9696
};
97-
97+
9898
getReadyStateChangeHandler = function (id) {
9999
var xhr = requestState[id].xhr;
100100
return function () {
@@ -103,7 +103,7 @@ qq.AjaxRequestor = function (o) {
103103
}
104104
};
105105
};
106-
106+
107107
setHeaders = function (id) {
108108
var xhr = requestState[id].xhr,
109109
customHeaders = options.customHeaders;
@@ -113,7 +113,7 @@ qq.AjaxRequestor = function (o) {
113113
xhr.setRequestHeader(name, val);
114114
});
115115
};
116-
116+
117117
cancelRequest = function (id) {
118118
var xhr = requestState[id].xhr,
119119
method = getMethod();
@@ -127,11 +127,11 @@ qq.AjaxRequestor = function (o) {
127127
}
128128
return false;
129129
};
130-
130+
131131
isResponseSuccessful = function (responseCode) {
132132
return qq.indexOf(options.successfulResponseCodes, responseCode) >= 0;
133133
};
134-
134+
135135
getMethod = function () {
136136
if (options.demoMode) {
137137
return "GET";

client/js/button.js

+29-23
Original file line numberDiff line numberDiff line change
@@ -15,37 +15,43 @@ qq.UploadButton = function (o) {
1515
focusClass: 'qq-upload-button-focus'
1616
};
1717
qq.extend(this.options, o);
18-
this._disposeSupport = new qq.DisposeSupport();
19-
this._element = this.options.element;
18+
this.disposeSupport = new qq.DisposeSupport();
19+
this.element = this.options.element;
2020
// make button suitable container for input
21-
qq(this._element).css({
21+
qq(this.element).css({
2222
position: 'relative',
2323
overflow: 'hidden',
2424
// Make sure browse button is in the right side
2525
// in Internet Explorer
2626
direction: 'ltr'
2727
});
28-
this._input = this._createInput();
28+
this.input = this.createInput();
2929
};
3030
qq.UploadButton.prototype = {
3131
/* returns file input element */
3232
getInput: function () {
33-
return this._input;
33+
"use strict";
34+
return this.input;
3435
},
3536
/* cleans/recreates the file input */
3637
reset: function () {
37-
if (this._input.parentNode) {
38-
qq(this._input).remove();
38+
"use strict";
39+
if (this.input.parentNode) {
40+
qq(this.input).remove();
3941
}
40-
qq(this._element).removeClass(this.options.focusClass);
41-
this._input = this._createInput();
42+
qq(this.element).removeClass(this.options.focusClass);
43+
this.input = this.createInput();
4244
},
43-
_createInput: function () {
44-
var input = document.createElement("input");
45+
createInput: function () {
46+
"use strict";
47+
var input = document.createElement("input"),
48+
self;
4549
if (this.options.multiple) {
4650
input.setAttribute("multiple", "multiple");
4751
}
48-
if (this.options.acceptFiles) input.setAttribute("accept", this.options.acceptFiles);
52+
if (this.options.acceptFiles) {
53+
input.setAttribute("accept", this.options.acceptFiles);
54+
}
4955
input.setAttribute("type", "file");
5056
input.setAttribute("name", this.options.name);
5157
qq(input).css({
@@ -63,22 +69,22 @@ qq.UploadButton.prototype = {
6369
cursor: 'pointer',
6470
opacity: 0
6571
});
66-
this._element.appendChild(input);
67-
var self = this;
68-
this._disposeSupport.attach(input, 'change', function () {
72+
this.element.appendChild(input);
73+
self = this;
74+
this.disposeSupport.attach(input, 'change', function () {
6975
self.options.onChange(input);
7076
});
71-
this._disposeSupport.attach(input, 'mouseover', function () {
72-
qq(self._element).addClass(self.options.hoverClass);
77+
this.disposeSupport.attach(input, 'mouseover', function () {
78+
qq(self.element).addClass(self.options.hoverClass);
7379
});
74-
this._disposeSupport.attach(input, 'mouseout', function () {
75-
qq(self._element).removeClass(self.options.hoverClass);
80+
this.disposeSupport.attach(input, 'mouseout', function () {
81+
qq(self.element).removeClass(self.options.hoverClass);
7682
});
77-
this._disposeSupport.attach(input, 'focus', function () {
78-
qq(self._element).addClass(self.options.focusClass);
83+
this.disposeSupport.attach(input, 'focus', function () {
84+
qq(self.element).addClass(self.options.focusClass);
7985
});
80-
this._disposeSupport.attach(input, 'blur', function () {
81-
qq(self._element).removeClass(self.options.focusClass);
86+
this.disposeSupport.attach(input, 'blur', function () {
87+
qq(self.element).removeClass(self.options.focusClass);
8288
});
8389
// IE and Opera, unfortunately have 2 tab stops on file input
8490
// which is unacceptable in our case, disable keyboard access

client/js/handler.base.js

+10-5
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,17 @@
22
* Class for uploading files, uploading itself is handled by child classes
33
*/
44

5+
/*jslint browser: true, unparam: true, indent: 2 */
56
/*globals qq*/
67

78
qq.UploadHandler = function (o) {
89
"use strict";
910
var queue = [],
10-
options, log, dequeue, handlerImpl;
11+
options,
12+
log,
13+
dequeue,
14+
handlerImpl;
15+
1116
// Default options, can be overridden by the user
1217
options = {
1318
debug: false,
@@ -45,15 +50,16 @@ qq.UploadHandler = function (o) {
4550
paramNames: {
4651
name: 'qqblobname'
4752
}
48-
},
53+
}
54+
/*,
4955
log: function (str, level) {},
5056
onProgress: function (id, fileName, loaded, total) {},
5157
onComplete: function (id, fileName, response, xhr) {},
5258
onCancel: function (id, fileName) {},
5359
onUpload: function (id, fileName) {},
5460
onUploadChunk: function (id, fileName, chunkData) {},
5561
onAutoRetry: function (id, fileName, response, xhr) {},
56-
onResume: function (id, fileName, chunkData) {}
62+
onResume: function (id, fileName, chunkData) {}*/
5763
};
5864
qq.extend(options, o);
5965
log = options.log;
@@ -99,9 +105,8 @@ qq.UploadHandler = function (o) {
99105
var i = qq.indexOf(queue, id);
100106
if (i >= 0) {
101107
return handlerImpl.upload(id, true);
102-
} else {
103-
return this.upload(id);
104108
}
109+
return this.upload(id);
105110
},
106111
/**
107112
* Cancels file upload by id

client/js/handler.form.js

+6-7
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
/*globals qq, document, setTimeout*/
22

3+
/*jslint browser: true, unparam: true, indent: 2 */
34
/*globals clearTimeout*/
45

56
qq.UploadHandlerForm = function (o, uploadCompleteCallback, logCallback) {
@@ -73,9 +74,7 @@ qq.UploadHandlerForm = function (o, uploadCompleteCallback, logCallback) {
7374
}
7475
try {
7576
// fixing Opera 10.53
76-
if (iframe.contentDocument &&
77-
iframe.contentDocument.body &&
78-
iframe.contentDocument.body.innerHTML == "false") {
77+
if (iframe.contentDocument && iframe.contentDocument.body && iframe.contentDocument.body.innerHTML == "false") {
7978
// In Opera event is fired second time
8079
// when body.innerHTML changed from false
8180
// to server response approx. after 1 sec
@@ -96,12 +95,12 @@ qq.UploadHandlerForm = function (o, uploadCompleteCallback, logCallback) {
9695

9796
function getIframeContentJson(iframe) {
9897
/*jshint evil: true*/
99-
var response;
98+
var response, doc, innerHTML;
10099
//IE may throw an "access is denied" error when attempting to access contentDocument on the iframe in some cases
101100
try {
102101
// iframe.contentWindow.document - for IE<7
103-
var doc = iframe.contentDocument || iframe.contentWindow.document,
104-
innerHTML = doc.body.innerHTML;
102+
doc = iframe.contentDocument || iframe.contentWindow.document;
103+
innerHTML = doc.body.innerHTML;
105104
log("converting iframe's innerHTML to JSON");
106105
log("innerHTML = " + innerHTML);
107106
//plain text response may be wrapped in <pre> tag
@@ -215,7 +214,7 @@ qq.UploadHandlerForm = function (o, uploadCompleteCallback, logCallback) {
215214
form.appendChild(input);
216215
attachLoadEvent(iframe, function (responseFromMessage) {
217216
log('iframe loaded');
218-
var response = responseFromMessage ? responseFromMessage : getIframeContentJson(iframe);
217+
var response = responseFromMessage || getIframeContentJson(iframe);
219218
detachLoadEvent(id);
220219
//we can't remove an iframe if the iframe doesn't belong to the same domain
221220
if (!options.cors.expected) {

0 commit comments

Comments
 (0)