Page Menu
Home
In-Portal Phabricator
Search
Configure Global Search
Log In
Files
F804782
ajax.js
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Wed, Feb 26, 5:15 PM
Size
10 KB
Mime Type
text/plain
Expires
Fri, Feb 28, 5:15 PM (13 h, 9 m)
Engine
blob
Format
Raw Data
Handle
577185
Attached To
rINP In-Portal
ajax.js
View Options
function
preg_print_pre
(
obj
,
reg
)
{
if
(
!
reg
)
reg
=
/.*/
;
var
p
=
''
for
(
var
prop
in
obj
)
{
if
(
prop
.
match
(
reg
)
)
{
p
+=
prop
+
': '
+
obj
[
prop
]
+
'\n'
}
}
alert
(
p
)
}
// Main AJAX classs
function
Request
()
{}
Request
.
timeout
=
60000
;
//60 seconds
Request
.
method
=
'GET'
;
Request
.
headers
=
new
Array
();
Request
.
params
=
null
;
Request
.
makeRequest
=
function
(
p_url
,
p_busyReq
,
p_progId
,
p_successCallBack
,
p_errorCallBack
,
p_pass
,
p_object
)
{
//p_url: the web service url
//p_busyReq: is a request for this object currently in progress?
//p_progId: element id where progress HTML should be shown
//p_successCallBack: callback function for successful response
//p_errorCallBack: callback function for erroneous response
//p_pass: string of params to pass to callback functions
//p_object: object of params to pass to callback functions
if
(
p_busyReq
)
return
;
var
req
=
Request
.
getRequest
();
if
(
req
!=
null
)
{
p_busyReq
=
true
;
Request
.
showProgress
(
p_progId
);
req
.
onreadystatechange
=
function
()
{
if
(
req
.
readyState
==
4
)
{
p_busyReq
=
false
;
window
.
clearTimeout
(
toId
);
try
{
if
(
req
.
status
==
200
)
{
// preg_print_pre(req)
p_successCallBack
(
req
,
p_pass
,
p_object
);
}
else
{
p_errorCallBack
(
req
,
p_pass
,
p_object
);
}
Request
.
hideProgress
(
p_progId
);
}
catch
(
e
)
{
// alert('AJAX error')
}
}
}
var
$ajax_mark
=
(
p_url
.
indexOf
(
'?'
)
?
'&'
:
'?'
)
+
'ajax=yes'
;
req
.
open
(
Request
.
method
,
p_url
+
$ajax_mark
,
true
);
if
(
Request
.
method
==
'POST'
)
{
Request
.
headers
[
'Content-type'
]
=
'application/x-www-form-urlencoded'
;
Request
.
headers
[
'referer'
]
=
p_url
;
}
else
{
Request
.
headers
[
'If-Modified-Since'
]
=
'Sat, 1 Jan 2000 00:00:00 GMT'
;
}
Request
.
sendHeaders
(
req
);
if
(
Request
.
method
==
'POST'
)
{
req
.
send
(
Request
.
params
);
Request
.
method
=
'GET'
;
// restore method back to GET
}
else
{
req
.
send
(
null
);
}
var
toId
=
window
.
setTimeout
(
function
()
{
if
(
p_busyReq
)
req
.
abort
();},
Request
.
timeout
);
}
}
Request
.
sendHeaders
=
function
(
$request
)
{
for
(
var
$header_name
in
Request
.
headers
)
{
if
(
typeof
Request
.
headers
[
$header_name
]
==
'function'
)
{
continue
;
}
$request
.
setRequestHeader
(
$header_name
,
Request
.
headers
[
$header_name
]);
}
Request
.
headers
=
new
Array
();
// reset header afterwards
}
Request
.
getRequest
=
function
()
{
var
xmlHttp
;
try
{
xmlHttp
=
new
ActiveXObject
(
'MSXML2.XMLHTTP'
);
return
xmlHttp
;
}
catch
(
e
)
{}
try
{
xmlHttp
=
new
ActiveXObject
(
'Microsoft.XMLHTTP'
);
return
xmlHttp
;
}
catch
(
e
)
{}
try
{
xmlHttp
=
new
XMLHttpRequest
();
return
xmlHttp
;
}
catch
(
e
)
{}
return
null
;
}
Request
.
showProgress
=
function
(
p_id
)
{
if
(
p_id
!=
''
)
{
Request
.
setOpacity
(
20
,
p_id
);
if
(
!
document
.
getElementById
(
p_id
+
'_progress'
))
{
document
.
body
.
appendChild
(
Request
.
getProgressObject
(
p_id
));
}
else
{
var
$progress_div
=
document
.
getElementById
(
p_id
+
'_progress'
);
$progress_div
.
style
.
top
=
getRealTop
(
p_id
)
+
'px'
;
$progress_div
.
style
.
height
=
document
.
getElementById
(
p_id
).
clientHeight
;
$progress_div
.
style
.
display
=
'block'
;
}
// document.getElementById(p_id).innerHTML = Request.getProgressHtml();
}
}
Request
.
hideProgress
=
function
(
p_id
)
{
if
(
p_id
!=
''
)
{
document
.
getElementById
(
p_id
+
'_progress'
).
style
.
display
=
'none'
;
Request
.
setOpacity
(
100
,
p_id
);
}
}
Request
.
setOpacity
=
function
(
opacity
,
id
)
{
var
elem
=
typeof
(
id
)
==
'string'
?
document
.
getElementById
(
id
)
:
id
;
var
object
=
elem
.
style
;
object
.
opacity
=
(
opacity
/
100
);
object
.
MozOpacity
=
(
opacity
/
100
);
object
.
KhtmlOpacity
=
(
opacity
/
100
);
object
.
filter
=
"alpha(opacity="
+
opacity
+
")"
;
}
Request
.
getProgressHtml
=
function
()
{
return
"<p class='progress'>"
+
Request
.
progressText
+
"<br /><img src='img/ajax_progress.gif' align='absmiddle' width='100' height='7' alt='"
+
Request
.
progressText
+
"'/></p>"
;
}
Request
.
getProgressObject
=
function
(
$id
)
{
var
$div
=
document
.
createElement
(
'DIV'
);
var
$parent_div
=
document
.
getElementById
(
$id
);
$div
.
id
=
$id
+
'_progress'
;
$div
.
style
.
width
=
$parent_div
.
clientWidth
+
'px'
;
$div
.
style
.
height
=
'150px'
;
// default height if div is empty (first ajax request for div)
$div
.
style
.
left
=
getRealLeft
(
$parent_div
)
+
'px'
;
$div
.
style
.
top
=
getRealTop
(
$parent_div
)
+
'px'
;
$div
.
style
.
position
=
'absolute'
;
/*$div.style.border = '1px solid green';
$div.style.backgroundColor = '#FF0000';*/
$div
.
innerHTML
=
'<table style="width: 100%; height: 100%;"><tr><td style="text-align: center;">'
+
Request
.
progressText
+
'<br /><img src="img/ajax_progress.gif" align="absmiddle" width="100" height="7" alt="'
+
escape
(
Request
.
progressText
)
+
'" /></td></tr></table>'
;
return
$div
;
}
Request
.
getErrorHtml
=
function
(
p_req
)
{
//TODO: implement accepted way to handle request error
return
'[status: '
+
p_req
.
status
+
'; status_text: '
+
p_req
.
statusText
+
'; responce_text: '
+
p_req
.
responseText
+
']'
;
}
Request
.
serializeForm
=
function
(
theform
)
{
if
(
typeof
(
theform
)
==
'string'
)
{
theform
=
document
.
getElementById
(
theform
);
}
var
els
=
theform
.
elements
;
var
len
=
els
.
length
;
var
queryString
=
''
;
Request
.
addField
=
function
(
name
,
value
)
{
if
(
queryString
.
length
>
0
)
queryString
+=
'&'
;
queryString
+=
encodeURIComponent
(
name
)
+
'='
+
encodeURIComponent
(
value
);
};
for
(
var
i
=
0
;
i
<
len
;
i
++
)
{
var
el
=
els
[
i
];
if
(
el
.
disabled
)
continue
;
switch
(
el
.
type
)
{
case
'text'
:
case
'password'
:
case
'hidden'
:
case
'textarea'
:
Request
.
addField
(
el
.
name
,
el
.
value
);
break
;
case
'select-one'
:
if
(
el
.
selectedIndex
>=
0
)
{
Request
.
addField
(
el
.
name
,
el
.
options
[
el
.
selectedIndex
].
value
);
}
break
;
case
'select-multiple'
:
for
(
var
j
=
0
;
j
<
el
.
options
.
length
;
j
++
)
{
if
(
!
el
.
options
[
j
].
selected
)
continue
;
Request
.
addField
(
el
.
name
,
el
.
options
[
j
].
value
);
}
break
;
case
'checkbox'
:
case
'radio'
:
if
(
!
el
.
checked
)
continue
;
Request
.
addField
(
el
.
name
,
el
.
value
);
break
;
}
}
return
queryString
;
};
// AJAX ProgressBar class
function
AjaxProgressBar
(
$url
)
{
this
.
WindowTitle
=
this
.
GetWindow
().
document
.
title
;
this
.
URL
=
$url
;
this
.
BusyRequest
=
false
;
this
.
LastResponceTime
=
this
.
GetMicroTime
();
this
.
ProgressPercent
=
0
;
// progress percent
this
.
ProgressTime
=
new
Array
();
this
.
Query
();
}
AjaxProgressBar
.
prototype
.
GetWindow
=
function
()
{
return
window
.
parent
?
window
.
parent
:
window
;
}
AjaxProgressBar
.
prototype
.
GetMicroTime
=
function
()
{
var
$now
=
new
Date
();
return
Math
.
round
(
$now
.
getTime
()
/
1000
);
// because miliseconds are returned too
}
AjaxProgressBar
.
prototype
.
Query
=
function
()
{
// prompt('requestinng', this.URL);
Request
.
makeRequest
(
this
.
URL
,
this
.
BusyRequest
,
''
,
this
.
successCallback
,
this
.
errorCallback
,
''
,
this
);
}
// return time needed for progress to finish
AjaxProgressBar
.
prototype
.
GetEstimatedTime
=
function
()
{
return
Math
.
ceil
((
100
-
this
.
ProgressPercent
)
*
Math
.
sum
(
this
.
ProgressTime
)
/
this
.
ProgressPercent
);
}
AjaxProgressBar
.
prototype
.
successCallback
=
function
(
$request
,
$params
,
$object
)
{
var
$responce
=
$request
.
responseText
;
var
$match_redirect
=
new
RegExp
(
'^#redirect#(.*)'
).
exec
(
$responce
);
if
(
$match_redirect
!=
null
)
{
$object
.
showProgress
(
100
);
// redirect to external template requested
window
.
location
.
href
=
$match_redirect
[
1
];
return
false
;
}
if
(
$object
.
showProgress
(
$responce
))
{
$object
.
Query
();
}
}
AjaxProgressBar
.
prototype
.
errorCallback
=
function
(
$request
,
$params
,
$object
)
{
alert
(
'AJAX Error; class: AjaxProgressBar; '
+
Request
.
getErrorHtml
(
$request
));
}
AjaxProgressBar
.
prototype
.
FormatTime
=
function
(
$seconds
)
{
$seconds
=
parseInt
(
$seconds
);
var
$minutes
=
Math
.
floor
(
$seconds
/
60
);
if
(
$minutes
<
10
)
$minutes
=
'0'
+
$minutes
;
$seconds
=
$seconds
%
60
;
if
(
$seconds
<
10
)
$seconds
=
'0'
+
$seconds
;
return
$minutes
+
':'
+
$seconds
;
}
AjaxProgressBar
.
prototype
.
showProgress
=
function
(
$percent
)
{
this
.
ProgressPercent
=
$percent
;
var
$now
=
this
.
GetMicroTime
();
this
.
ProgressTime
[
this
.
ProgressTime
.
length
]
=
$now
-
this
.
LastResponceTime
;
this
.
LastResponceTime
=
$now
;
var
$display_progress
=
parseInt
(
this
.
ProgressPercent
);
this
.
GetWindow
().
document
.
title
=
$display_progress
+
'% - '
+
this
.
WindowTitle
;
document
.
getElementById
(
'progress_display[percents_completed]'
).
innerHTML
=
$display_progress
+
'%'
;
document
.
getElementById
(
'progress_display[elapsed_time]'
).
innerHTML
=
this
.
FormatTime
(
Math
.
sum
(
this
.
ProgressTime
)
);
document
.
getElementById
(
'progress_display[Estimated_time]'
).
innerHTML
=
this
.
FormatTime
(
this
.
GetEstimatedTime
()
);
document
.
getElementById
(
'progress_bar[done]'
).
style
.
width
=
$display_progress
+
'%'
;
document
.
getElementById
(
'progress_bar[left]'
).
style
.
width
=
(
100
-
$display_progress
)
+
'%'
;
return
$percent
<
100
?
true
:
false
;
}
// AJAX PopupManager class
function
AjaxPopupManager
(
$url
)
{
this
.
URL
=
$url
;
this
.
ResponceFunction
=
null
;
this
.
PopupSizes
=
new
Array
();
}
AjaxPopupManager
.
prototype
.
GetSize
=
function
(
$template
)
{
if
(
this
.
ResponceFunction
==
null
)
{
alert
(
'Please define responce function first (type: '
+
typeof
(
this
.
ResponceFunction
)
+
')'
);
}
if
(
!
isset
(
this
.
PopupSizes
[
$template
]))
{
var
$url
=
this
.
URL
+
'&type=GetPopupSize&template_name='
+
$template
;
// alert('from ajax: '+$url);
Request
.
makeRequest
(
$url
,
this
.
BusyRequest
,
''
,
this
.
successCallback
,
this
.
errorCallback
,
[
'GetSize'
,
$template
],
this
);
}
else
{
// alert('from cache');
this
.
ResponceFunction
(
this
.
PopupSizes
[
$template
]);
}
}
AjaxPopupManager
.
prototype
.
successCallback
=
function
(
$request
,
$params
,
$object
)
{
var
$responce
=
$request
.
responseText
;
var
$match_redirect
=
new
RegExp
(
'^#redirect#(.*)'
).
exec
(
$responce
);
if
(
$match_redirect
!=
null
)
{
// redirect to external template requested
window
.
location
.
href
=
$match_redirect
[
1
];
return
false
;
}
switch
(
$params
[
0
])
{
case
'GetSize'
:
// store responce to cache for future use
$object
.
PopupSizes
[
$params
[
1
]
]
=
$responce
;
break
;
}
$object
.
ResponceFunction
(
$responce
);
$object
.
ResponceFunction
=
null
;
// reset responce function
}
AjaxPopupManager
.
prototype
.
errorCallback
=
function
(
$request
,
$params
,
$object
)
{
alert
(
'AJAX Error; class: AjaxPopupManager; '
+
Request
.
getErrorHtml
(
$request
));
}
Event Timeline
Log In to Comment