リポジトリの差分を追う
第四回目です。
前回,
これはSubversionのannotateサブコマンドで確認することができます。
% svn annotate http://svn.rubyonrails.org/rails/spinoffs/prototype/trunk/src/prototype.js 3362 sam <%= include 'HEADER' %> 3362 sam 3362 sam var Prototype = { ...
これでその行が最後に変更されたリビジョンがわかるので,
最終的に変更点のリビジョンを突き止めたら,
では,
Ajaxオブジェクト
0932: var Ajax = {
0933: getTransport: function() {
0934: return Try.these(
0935: function() {return new XMLHttpRequest()},
0936: function() {return new ActiveXObject('Msxml2.XMLHTTP')},
0937: function() {return new ActiveXObject('Microsoft.XMLHTTP')}
0938: ) || false;
0939: },
0940:
0941: activeRequestCount: 0
0942: }
0943:
Ajaxは複数のクラスを包含するための名前空間となっており,
getTransport()関数は,
941行目のactiveRequestCountは,
0944: Ajax.Responders = {
0945: responders: [],
0946:
0947: _each: function(iterator) {
0948: this.responders._each(iterator);
0949: },
0950:
Ajax.
register(),
Ajax.
948行目では,
0951: register: function(responder) {
0952: if (!this.include(responder))
0953: this.responders.push(responder);
0954: },
0955:
0956: unregister: function(responder) {
0957: this.responders = this.responders.without(responder);
0958: },
0959:
951行目からのregister()関数では,
ここで,
このとき,
956行目からはunregister()関数です。Array.
0960: dispatch: function(callback, request, transport, json) {
0961: this.each(function(responder) {
0962: if (typeof responder[callback] == 'function') {
0963: try {
0964: responder[callback].apply(responder, [request, transport, json]);
0965: } catch (e) {}
0966: }
0967: });
0968: }
0969: };
0970:
960行目からのdispatch()関数は,
最初の引数callbackには,
961行目のeach()で,
0971: Object.extend(Ajax.Responders, Enumerable);
0972:
Ajax.
0973: Ajax.Responders.register({
0974: onCreate: function() {
0975: Ajax.activeRequestCount++;
0976: },
0977: onComplete: function() {
0978: Ajax.activeRequestCount--;
0979: }
0980: });
0981:
973行目で,
これにより,
0982: Ajax.Base = function() {};
0983: Ajax.Base.prototype = {
0984: setOptions: function(options) {
0985: this.options = {
0986: method: 'post',
0987: asynchronous: true,
0988: contentType: 'application/x-www-form-urlencoded',
0989: encoding: 'UTF-8',
0990: parameters: ''
0991: }
0992: Object.extend(this.options, options || {});
0993:
0994: this.options.method = this.options.method.toLowerCase();
0995: if (typeof this.options.parameters == 'string')
0996: this.options.parameters = this.options.parameters.toQueryParams();
0997: }
0998: }
0999:
他のAjax.*クラスで利用するための,
982行目でコンストラクタ用に空の関数を定義して,
ここでは,
994行目ではoptions.
options.