js 代碼
-
prototype?1.3.1?版本和之前的?1.2.0?版本有了不少改進,并增加了新的功能:? ??
-
1.?增加了事件注冊管理? ??
-
2.?增加了空間定位的常用函數(shù)? ??
-
3.?改善了?xmlhttp?的封裝? ??
-
4.?移除了?Effect.js,交給?Rico?或者?script.aculo.us?這些擴展庫類實現(xiàn)。? ??
-
5.?bug?修復? ??
-
代碼:? ??
-
?
-
?
-
? ??
-
var
?Prototype?=?{? ??
-
Version:?'1.3.1',? ??
-
??
-
emptyFunction:?
function
()?{}? ??
-
}? ??
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
? ??
-
var
?Class?=?{? ??
-
create:?
function
()?{? ??
-
return
?
function
()?{? ??
-
this
.initialize.apply(
this
,?arguments);? ??
-
}? ??
-
}? ??
-
}? ??
-
?
-
?
-
?
-
?
-
? ??
-
var
?Abstract?=?
new
?Object();? ??
-
Object.extend?=?
function
(destination,?source)?{? ??
-
for
?(property?
in
?source)?{? ??
-
destination[property]?=?source[property];? ??
-
}? ??
-
return
?destination;? ??
-
}? ??
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
? ??
-
Object.prototype.extend?=?
function
(object)?{? ??
-
return
?Object.extend.apply(
this
,?[
this
,?object]);? ??
-
}? ??
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
? ??
-
Function.prototype.bind?=?
function
(object)?{? ??
-
var
?__method?=?
this
;? ??
-
return
?
function
()?{? ??
-
__method.apply(object,?arguments);? ??
-
}? ??
-
}? ??
-
?
-
?
-
?
-
? ??
-
Function.prototype.bindAsEventListener?=?
function
(object)?{? ??
-
var
?__method?=?
this
;? ??
-
return
?
function
(event)?{? ??
-
__method.call(object,?event?||?window.event);? ??
-
}? ??
-
}? ??
-
?
-
?
-
? ??
-
Number.prototype.toColorPart?=?
function
()?{? ??
-
var
?digits?=?
this
.toString(16);? ??
-
if
?(
this
?<?16)?
return
?'0'?+?digits;? ??
-
return
?digits;? ??
-
}? ??
-
?
-
?
-
? ??
-
var
?Try?=?{? ??
-
these:?
function
()?{? ??
-
var
?returnValue;? ??
-
for
?(
var
?i?=?0;?i?<?arguments.length;?i++)?{? ??
-
var
?lambda?=?arguments;? ??
-
try
?{? ??
-
returnValue?=?lambda();? ??
-
break
;? ??
-
}?
catch
?(e)?{}? ??
-
}? ??
-
return
?returnValue;? ??
-
}? ??
-
}? ??
-
? ??
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
? ??
-
var
?PeriodicalExecuter?=?Class.create();? ??
-
PeriodicalExecuter.prototype?=?{? ??
-
initialize:?
function
(callback,?frequency)?{? ??
-
this
.callback?=?callback;? ??
-
this
.frequency?=?frequency;? ??
-
this
.currentlyExecuting?=?
false
;? ??
-
this
.registerCallback();? ??
-
},? ??
-
registerCallback:?
function
()?{? ??
-
setInterval(
this
.onTimerEvent.bind(
this
),?
this
.frequency?*?1000);? ??
-
},? ??
-
onTimerEvent:?
function
()?{? ??
-
if
?(!
this
.currentlyExecuting)?{? ??
-
try
?{? ??
-
this
.currentlyExecuting?=?
true
;? ??
-
this
.callback();? ??
-
}?
finally
?{? ??
-
this
.currentlyExecuting?=?
false
;? ??
-
}? ??
-
}? ??
-
}? ??
-
}? ??
-
? ??
-
?
-
?
-
?
-
?
-
?
-
?
-
? ??
-
function
?$()?{? ??
-
var
?elements?=?
new
?Array();? ??
-
for
?(
var
?i?=?0;?i?<?arguments.length;?i++)?{? ??
-
var
?element?=?arguments;? ??
-
if
?(
typeof
?element?==?'string')? ??
-
element?=?document.getElementById(element);? ??
-
if
?(arguments.length?==?1)? ??
-
return
?element;? ??
-
elements.push(element);? ??
-
}? ??
-
return
?elements;? ??
-
}? ??
-
?
-
?
-
? ??
-
if
?(!Array.prototype.push)?{? ??
-
Array.prototype.push?=?
function
()?{? ??
-
var
?startLength?=?
this
.length;? ??
-
for
?(
var
?i?=?0;?i?<?arguments.length;?i++)? ??
-
this
[startLength?+?i]?=?arguments;? ??
-
return
?
this
.length;? ??
-
}? ??
-
}? ??
-
?
-
?
-
? ??
-
if
?(!Function.prototype.apply)?{? ??
-
??
-
Function.prototype.apply?=?
function
(object,?parameters)?{? ??
-
var
?parameterStrings?=?
new
?Array();? ??
-
if
?(!object)?object?=?window;? ??
-
if
?(!parameters)?parameters?=?
new
?Array();? ??
-
??
-
for
?(
var
?i?=?0;?i?<?parameters.length;?i++)? ??
-
parameterStrings?=?'parameters['?+?i?+?']';? ??
-
??
-
object.__apply__?=?
this
;? ??
-
var
?result?=?eval('object.__apply__('?+? ??
-
parameterStrings.join(',?')?+?')');? ??
-
object.__apply__?=?
null
;? ??
-
??
-
return
?result;? ??
-
}? ??
-
}? ??
-
?
-
?
-
? ??
-
String.prototype.extend({? ??
-
?
-
?
-
? ??
-
stripTags:?
function
()?{? ??
-
return
?
this
.replace(/</?[^>]+>/gi,?
''
);? ??
-
},? ??
-
?
-
?
-
?
-
?
-
? ??
-
escapeHTML:?
function
()?{? ??
-
var
?div?=?document.createElement('div');? ??
-
var
?text?=?document.createTextNode(
this
);? ??
-
div.appendChild(text);? ??
-
return
?div.innerHTML;? ??
-
},? ??
-
?
-
?
-
? ??
-
unescapeHTML:?
function
()?{? ??
-
var
?div?=?document.createElement('div');? ??
-
div.innerHTML?=?
this
.stripTags();? ??
-
return
?div.childNodes[0].nodeValue;? ??
-
}? ??
-
});? ??
-
?
-
?
-
? ??
-
var
?Ajax?=?{? ??
-
getTransport:?
function
()?{? ??
-
return
?Try.these(? ??
-
function
()?{
return
?
new
?ActiveXObject('Msxml2.XMLHTTP')},? ??
-
function
()?{
return
?
new
?ActiveXObject('Microsoft.XMLHTTP')},? ??
-
function
()?{
return
?
new
?XMLHttpRequest()}? ??
-
)?||?
false
;? ??
-
}? ??
-
}? ??
-
?
-
?
-
?
-
?
-
?
-
?
-
? ??
-
Ajax.Base?=?
function
()?{};? ??
-
Ajax.Base.prototype?=?{? ??
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
? ??
-
setOptions:?
function
(options)?{? ??
-
this
.options?=?{? ??
-
method:?'post',? ??
-
asynchronous:?
true
,? ??
-
parameters:?
''
? ??
-
}.extend(options?||?{});? ??
-
},? ??
-
?
-
?
-
?
-
? ??
-
responseIsSuccess:?
function
()?{? ??
-
return
?
this
.transport.status?==?undefined? ??
-
||?
this
.transport.status?==?0? ??
-
||?(
this
.transport.status?>=?200?&&?
this
.transport.status?<?300);? ??
-
},? ??
-
?
-
?
-
? ??
-
responseIsFailure:?
function
()?{? ??
-
return
?!
this
.responseIsSuccess();? ??
-
}? ??
-
}? ??
-
?
-
?
-
? ??
-
Ajax.Request?=?Class.create();? ??
-
?
-
?
-
? ??
-
Ajax.Request.Events?=? ??
-
['Uninitialized',?'Loading',?'Loaded',?'Interactive',?'Complete'];? ??
-
?
-
?
-
? ??
-
Ajax.Request.prototype?=?(
new
?Ajax.Base()).extend({? ??
-
initialize:?
function
(url,?options)?{? ??
-
this
.transport?=?Ajax.getTransport();? ??
-
this
.setOptions(options);? ??
-
this
.request(url);? ??
-
},? ??
-
?
-
?
-
? ??
-
request:?
function
(url)?{? ??
-
var
?parameters?=?
this
.options.parameters?||?
''
;? ??
-
if
?(parameters.length?>?0)?parameters?+=?'&_=';? ??
-
try
?{? ??
-
if
?(
this
.options.method?==?'get')? ??
-
url?+=?'?'?+?parameters;? ??
-
this
.transport.open(
this
.options.method,?url,? ??
-
this
.options.asynchronous);? ??
-
if
?(
this
.options.asynchronous)?{? ??
-
this
.transport.onreadystatechange?=?
this
.onStateChange.bind(
this
);? ??
-
setTimeout((
function
()?{
this
.respondToReadyState(1)}).bind(
this
),?10);? ??
-
}? ??
-
this
.setRequestHeaders();? ??
-
var
?body?=?
this
.options.postBody???
this
.options.postBody?:?parameters;? ??
-
this
.transport.send(
this
.options.method?==?'post'???body?:?
null
);? ??
-
}?
catch
?(e)?{? ??
-
}? ??
-
},? ??
-
?
-
?
-
? ??
-
setRequestHeaders:?
function
()?{? ??
-
var
?requestHeaders?=? ??
-
['X-Requested-With',?'XMLHttpRequest',? ??
-
'X-Prototype-Version',?Prototype.Version];? ??
-
if
?(
this
.options.method?==?'post')?{? ??
-
requestHeaders.push('Content-type',? ??
-
'application/x-www-form-urlencoded');? ??
-
?
-
?
-
?
-
? ??
-
if
?(
this
.transport.overrideMimeType)? ??
-
requestHeaders.push('Connection',?'close');? ??
-
}? ??
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
? ??
-
if
?(
this
.options.requestHeaders)? ??
-
requestHeaders.push.apply(requestHeaders,?
this
.options.requestHeaders);? ??
-
for
?(
var
?i?=?0;?i?<?requestHeaders.length;?i?+=?2)? ??
-
this
.transport.setRequestHeader(requestHeaders,?requestHeaders[i+1]);? ??
-
},? ??
-
onStateChange:?
function
()?{? ??
-
var
?readyState?=?
this
.transport.readyState;? ??
-
?
-
?
-
? ??
-
if
?(readyState?!=?1)? ??
-
this
.respondToReadyState(
this
.transport.readyState);? ??
-
},? ??
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
? ??
-
respondToReadyState:?
function
(readyState)?{? ??
-
var
?event?=?Ajax.Request.Events[readyState];? ??
-
?
-
?
-
?
-
? ??
-
if
?(event?==?'Complete')? ??
-
(
this
.options['on'?+?
this
.transport.status]? ??
-
||?
this
.options['on'?+?(
this
.responseIsSuccess()???'Success'?:?'Failure')]? ??
-
||?Prototype.emptyFunction)(
this
.transport);? ??
-
(
this
.options['on'?+?event]?||?Prototype.emptyFunction)(
this
.transport);? ??
-
? ??
-
if
?(event?==?'Complete')? ??
-
this
.transport.onreadystatechange?=?Prototype.emptyFunction;? ??
-
}? ??
-
});? ??
-
?
-
?
-
?
-
? ??
-
Ajax.Updater?=?Class.create();? ??
-
Ajax.Updater.ScriptFragment?=?'(?:<script>)((n|.)*?)(?:</script>)';? ??
-
Ajax.Updater.prototype.extend(Ajax.Request.prototype).extend({? ??
-
initialize:?
function
(container,?url,?options)?{? ??
-
?
-
?
-
?
-
?
-
?
-
?
-
?
-
? ??
-
this
.containers?=?{? ??
-
success:?container.success???$(container.success)?:?$(container),? ??
-
failure:?container.failure???$(container.failure)?:? ??
-
(container.success???
null
?:?$(container))? ??
-
}? ??
-
this
.transport?=?Ajax.getTransport();? ??
-
this
.setOptions(options);? ??
-
var
?onComplete?=?
this
.options.onComplete?||?Prototype.emptyFunction;? ??
-
this
.options.onComplete?=?(
function
()?{? ??
-
this
.updateContent();? ??
-
onComplete(
this
.transport);? ??
-
}).bind(
this
);? ??
-
this
.request(url);? ??
-
},? ??
-
updateContent:?
function
()?{? ??
-
var
?receiver?=?
this
.responseIsSuccess()??? ??
-
this
.containers.success?:?
this
.containers.failure;? ??
-
var
?match?=?
new
?RegExp(Ajax.Updater.ScriptFragment,?'img');? ??
-
var
?response?=?
this
.transport.responseText.replace(match,?
''
);? ??
-
var
?scripts?=?
this
.transport.responseText.match(match);? ??
-
if
?(receiver)?{? ??
-
if
?(
this
.options.insertion)?{? ??
-
new
?
this
.options.insertion(receiver,?response);? ??
-
}?
else
?{? ??
-
receiver.innerHTML?=?response;? ??
-
}? ??
-
}? ??
-
if
?(
this
.responseIsSuccess())?{? ??
-
if
?(
this
.onComplete)? ??
-
setTimeout((
function
()?{
this
.onComplete(? ??
-
this
.transport)}).bind(
this
),?10);? ??
-
}???
|