prototype.js解読

Insertion.Beforeクラス

【抜粋】 Insertion.Before = Class.create(); Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), { initializeRange: function() { this.range.setStartBefore(this.element); }, insertContent: function(fragments) { …

Insertionオブジェクト(名前空間)

【抜粋】 var Insertion = new Object();後述のInsertion.Before、Insertion.Top、Insertion.Bottom、Insertion.Afterクラスの名前空間用オブジェクトです。

Abstract.Insertionクラス

前提条件:DOMについての理解 Insertion関連のクラスを理解するためには、DOMについての理解が不可欠になります。実は筆者もあまり詳しいとは言えません^^; このため、不適切な記述があるかもしれませんが、ご容赦ください。気がついたらその都度修正しま…

Toggleオブジェクト

【抜粋】 var Toggle = new Object(); Toggle.display = Element.toggle;メンバはdisplayメソッドのみです。前述Element.toggleメソッドの別名となっています。例は省略します。

Elementオブジェクト(に対する拡張)(3)

makePositionedメソッド 【抜粋】 makePositioned: function(element) { element = $(element); var pos = Element.getStyle(element, 'position'); if (pos == 'static' || !pos) { element._madePositioned = true; element.style.position = 'relative'; …

Elementオブジェクト(に対する拡張)(2)

getStyleメソッド 【抜粋】 getStyle: function(element, style) { element = $(element); var value = element.style[style.camelize()]; if (!value) { if (document.defaultView && document.defaultView.getComputedStyle) { var css = document.default…

Elementオブジェクト(に対する拡張)(1)

【抜粋】一部省略 if (!window.Element) { var Element = new Object(); } Object.extend(Element, { visible: function(element) { return $(element).style.display != 'none'; }, (省略) undoClipping: function(element) { element = $(element); if (el…

document.getElementsByClassNameメソッド

やっと半分まできました^^;申し訳ありませんが、以降は逐行の解読ではなく、ポイントのみの記述とさせてください。ここまでのすべてを理解された方なら、問題ないと思います。 【抜粋】 document.getElementsByClassName = function(className, parentEle…

Ajax.Requestでのフォームデータ送信サンプル(postbodyへの設定)

※http://d.hatena.ne.jp/susie-t/20070531/1180585173 へ移しました。

Ajax.PeriodicalUpdaterクラス

【抜粋】一部省略 Ajax.PeriodicalUpdater = Class.create(); Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), { initialize: function(container, url, options) { (省略) }, (省略) onTimerEvent: function() { this.updater = new Aj…

Ajax.Updaterクラス

【抜粋】一部省略 Ajax.Updater = Class.create(); Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), { initialize: function(container, url, options) { (省略) }, (省略) if (this.responseIsSuccess()) { if (this.onComp…

Ajax.Requestクラス(2)

respondToReadyStateメソッド 【抜粋】 respondToReadyState: function(readyState) { var event = Ajax.Request.Events[readyState]; var transport = this.transport, json = this.evalJSON(); if (event == 'Complete') { try { (this.options['on' + thi…

Ajax.Requestクラス(1)

【抜粋】一部省略 Ajax.Request = Class.create(); Ajax.Request.Events = ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; Ajax.Request.prototype = Object.extend(new Ajax.Base(), { initialize: function(url, options) { this.tr…

Ajax.Baseクラス

【抜粋】一部省略 Ajax.Base = function() {}; Ajax.Base.prototype = { setOptions: function(options) { this.options = { method: 'post', asynchronous: true, parameters: '' } Object.extend(this.options, options || {}); }, (省略) responseIsFailu…

Ajax.Respondersオブジェクト

【抜粋】一部省略 Ajax.Responders = { responders: [], (省略) dispatch: function(callback, request, transport, json) { this.each(function(responder) { if (responder[callback] && typeof responder[callback] == 'function') { try { responder[cal…

Ajaxオブジェクト

prototype.js解読のもう一つの山場。というか、ここが肝でしょうか。Ajax.Responders, Ajax.Base, Ajax.Request, Ajax.Updater, Ajax.PeriodicalUpdaterはそれぞれ別に解読します。Ajaxオブジェクトは上記のAjax関連のクラス・オブジェクトの名前空間(他と名…

$R関数

【抜粋】 var $R = function(start, end, exclusive) { return new ObjectRange(start, end, exclusive); }前述ObjectRangeクラスのオブジェクトを作成、返却します。 【例】前述のObjectRangeクラスの例を$R関数に変えただけ。 var objR1 = $R(-2, 3, true)…

ObjectRangeクラス

【抜粋】 ObjectRange = Class.create(); Object.extend(ObjectRange.prototype, Enumerable); Object.extend(ObjectRange.prototype, { initialize: function(start, end, exclusive) { this.start = start; this.end = end; this.exclusive = exclusive; }…

$H関数

【抜粋】 function $H(object) { var hash = Object.extend({}, object || {}); Object.extend(hash, Enumerable); Object.extend(hash, Hash); return hash; }空のオブジェクトに、引数object(nullの場合は空オブジェクト)を継承させています。これにより引…

HashクラスのEnumerableクラスから継承したメソッド使用サンプル(2006/09/04追記)

HashクラスのEnumerableクラスから継承したメソッドについて、使用サンプルを羅列します。いっぺんには書けないので少しずつ追加していきます。・・・そのうち字数制限に引っかかるかも^^; そのときは別の日に移します。。。基本的に「Enumerableクラス(2…

Hashクラス

【抜粋】一部省略 var Hash = { _each: function(iterator) { for (key in this) { var value = this[key]; if (typeof value == 'function') continue; var pair = [key, value]; pair.key = key; pair.value = value; iterator(pair); } }, (省略) inspect…

Arrayクラスに対する拡張

【抜粋】一部省略 Object.extend(Array.prototype, Enumerable); Array.prototype._reverse = Array.prototype.reverse; Object.extend(Array.prototype, { _each: function(iterator) { for (var i = 0; i < this.length; i++) iterator(this[i]); }, (省略…

$A関数

【抜粋】 var $A = Array.from = function(iterable) { if (!iterable) return []; if (iterable.toArray) { return iterable.toArray(); } else { var results = []; for (var i = 0; i < iterable.length; i++) results.push(iterable[i]); return results…

Enumerableクラス(5)

以下はそれぞれ、メソッドの別名を定義しています。Enumerableオブジェクトにmap, find, select, member, entriesメソッドを持つ無名オブジェクトを継承させています。 【抜粋】 Object.extend(Enumerable, { map: Enumerable.collect, find: Enumerable.det…

Enumerableクラス(4)

zipメソッド 【抜粋】 zip: function() { var iterator = Prototype.K, args = $A(arguments); if (typeof args.last() == 'function') iterator = args.pop(); var collections = [this].concat(args).map($A); return this.map(function(value, index) { i…

Enumerableクラス(3)

injectメソッド 【抜粋】 inject: function(memo, iterator) { this.each(function(value, index) { memo = iterator(memo, value, index); }); return memo; },第一引数memoを初期値として、iteratorによりmemoを変更していき、最終的にこれを返却していま…

Enumerableクラス(2)

allメソッド 【抜粋】 all: function(iterator) { var result = true; this.each(function(value, index) { result = result && !!(iterator || Prototype.K)(value, index); if (!result) throw $break; }); return result; },前述eachメソッドを、無名内部…

Enumerableクラス(1)

prototype.js解読の山場のひとつです。 【抜粋 一部省略】 var Enumerable = { each: function(iterator) { var index = 0; try { this._each(function(value) { try { iterator(value, index++); } catch (e) { if (e != $continue) throw e; } }); } catch…

$breakeオブジェクト、$continueオブジェクト

【抜粋】 var $break = new Object(); var $continue = new Object();次のEnumerableクラスでエラーオブジェクトとして使用します。

Stringクラスに対する拡張(3)

toQueryParamsメソッド 【抜粋】 toQueryParams: function() { var pairs = this.match(/^\??(.*)$/)[1].split('&'); return pairs.inject({}, function(params, pairString) { var pair = pairString.split('='); params[pair[0]] = pair[1]; return params…