Changeset 533
- Timestamp:
- 01/20/06 14:57:23 (3 years ago)
- Files:
-
- mochikit/branches/scriptaculous/MochiKit/Controls.js (modified) (1 diff)
- mochikit/branches/scriptaculous/MochiKit/DragAndDrop.js (modified) (1 diff)
- mochikit/branches/scriptaculous/MochiKit/New.js (modified) (5 diffs)
- mochikit/branches/scriptaculous/MochiKit/Sortable.js (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
mochikit/branches/scriptaculous/MochiKit/Controls.js
r519 r533 37 37 38 38 ***/ 39 40 MochiKit.Form = { 41 serialize: function (form) { 42 var elements = MochiKit.Form.getElements(form); 43 var queryComponents = new Array(); 44 45 for (var i = 0; i < elements.length; i++) { 46 var queryComponent = MochiKit.Form.serializeElement(elements[i]); 47 if (queryComponent) { 48 queryComponents.push(queryComponent); 49 } 50 } 51 52 return queryComponents.join('&'); 53 }, 54 55 getElements: function (form) { 56 form = MochiKit.DOM.getElement(form); 57 var elements = new Array(); 58 59 for (tagName in MochiKit.Form.Serializers) { 60 var tagElements = form.getElementsByTagName(tagName); 61 for (var j = 0; j < tagElements.length; j++) { 62 elements.push(tagElements[j]); 63 } 64 } 65 return elements; 66 }, 67 68 serializeElement: function (element) { 69 element = MochiKit.DOM.getElement(element); 70 var method = element.tagName.toLowerCase(); 71 var parameter = MochiKit.Form.Serializers[method](element); 72 73 if (parameter) { 74 var key = encodeURIComponent(parameter[0]); 75 if (key.length === 0) { 76 return; 77 } 78 79 if (parameter[1].constructor != Array) { 80 parameter[1] = [parameter[1]]; 81 } 82 83 return parameter[1].map(function (value) { 84 return key + '=' + encodeURIComponent(value); 85 }).join('&'); 86 } 87 } 88 }; 89 90 MochiKit.Form.Serializers = { 91 input: function (element) { 92 switch (element.type.toLowerCase()) { 93 case 'submit': 94 case 'hidden': 95 case 'password': 96 case 'text': 97 return MochiKit.Form.Serializers.textarea(element); 98 case 'checkbox': 99 case 'radio': 100 return MochiKit.Form.Serializers.inputSelector(element); 101 } 102 return false; 103 }, 104 105 inputSelector: function (element) { 106 if (element.checked) { 107 return [element.name, element.value]; 108 } 109 }, 110 111 textarea: function (element) { 112 return [element.name, element.value]; 113 }, 114 115 select: function (element) { 116 return MochiKit.Form.Serializers[element.type == 'select-one' ? 117 'selectOne' : 'selectMany'](element); 118 }, 119 120 selectOne: function (element) { 121 var value = '', opt, index = element.selectedIndex; 122 if (index >= 0) { 123 opt = element.options[index]; 124 value = opt.value; 125 if (!value && !('value' in opt)) { 126 value = opt.text; 127 } 128 } 129 return [element.name, value]; 130 }, 131 132 selectMany: function (element) { 133 var value = new Array(); 134 for (var i = 0; i < element.length; i++) { 135 var opt = element.options[i]; 136 if (opt.selected) { 137 var optValue = opt.value; 138 if (!optValue && !('value' in opt)) { 139 optValue = opt.text; 140 } 141 value.push(optValue); 142 } 143 } 144 return [element.name, value]; 145 } 146 }; 147 148 var Ajax = { 149 activeRequestCount: 0 150 }; 151 152 Ajax.Responders = { 153 responders: [], 154 155 register: function (responderToAdd) { 156 if (MochiKit.Base.find(this.responders, responderToAdd) == -1) { 157 this.responders.push(responderToAdd); 158 } 159 }, 160 161 unregister: function (responderToRemove) { 162 this.responders = this.responders.without(responderToRemove); 163 }, 164 165 dispatch: function (callback, request, transport, json) { 166 MochiKit.Iter.forEach(this.responders, function (responder) { 167 if (responder[callback] && 168 typeof(responder[callback]) == 'function') { 169 try { 170 responder[callback].apply(responder, [request, transport, json]); 171 } catch (e) {} 172 } 173 }); 174 } 175 }; 176 177 Ajax.Responders.register({ 178 onCreate: function () { 179 Ajax.activeRequestCount++; 180 }, 181 182 onComplete: function () { 183 Ajax.activeRequestCount--; 184 } 185 }); 186 187 Ajax.Base = function () {}; 188 189 Ajax.Base.prototype = { 190 setOptions: function (options) { 191 this.options = { 192 method: 'post', 193 asynchronous: true, 194 parameters: '' 195 } 196 MochiKit.Base.update(this.options, options || {}); 197 }, 198 199 responseIsSuccess: function () { 200 return this.transport.status == undefined 201 || this.transport.status === 0 202 || (this.transport.status >= 200 && this.transport.status < 300); 203 }, 204 205 responseIsFailure: function () { 206 return !this.responseIsSuccess(); 207 } 208 }; 209 210 Ajax.Request = function (url, options) { 211 this.__init__(url, options); 212 }; 213 214 Ajax.Request.Events = ['Uninitialized', 'Loading', 'Loaded', 215 'Interactive', 'Complete']; 216 217 MochiKit.Base.update(Ajax.Request.prototype, Ajax.Base.prototype); 218 219 MochiKit.Base.update(Ajax.Request.prototype, { 220 __init__: function (url, options) { 221 this.transport = MochiKit.Async.getXMLHttpRequest(); 222 this.setOptions(options); 223 this.request(url); 224 }, 225 226 request: function (url) { 227 var parameters = this.options.parameters || ''; 228 if (parameters.length > 0){ 229 parameters += '&_='; 230 } 231 232 try { 233 this.url = url; 234 if (this.options.method == 'get' && parameters.length > 0) { 235 this.url += (this.url.match(/\?/) ? '&' : '?') + parameters; 236 } 237 Ajax.Responders.dispatch('onCreate', this, this.transport); 238 239 this.transport.open(this.options.method, this.url, 240 this.options.asynchronous); 241 242 if (this.options.asynchronous) { 243 this.transport.onreadystatechange = MochiKit.Base.bind(this.onStateChange, this); 244 setTimeout(MochiKit.Base.bind(function () { 245 this.respondToReadyState(1); 246 }, this), 10); 247 } 248 249 this.setRequestHeaders(); 250 251 var body = this.options.postBody ? this.options.postBody : parameters; 252 this.transport.send(this.options.method == 'post' ? body : null); 253 254 } catch (e) { 255 this.dispatchException(e); 256 } 257 }, 258 259 setRequestHeaders: function () { 260 var requestHeaders = ['X-Requested-With', 'XMLHttpRequest']; 261 262 if (this.options.method == 'post') { 263 requestHeaders.push('Content-type', 264 'application/x-www-form-urlencoded'); 265 266 /* Force 'Connection: close' for Mozilla browsers to work around 267 * a bug where XMLHttpRequest sends an incorrect Content-length 268 * header. See Mozilla Bugzilla #246651. 269 */ 270 if (this.transport.overrideMimeType) { 271 requestHeaders.push('Connection', 'close'); 272 } 273 } 274 275 if (this.options.requestHeaders) { 276 requestHeaders.push.apply(requestHeaders, this.options.requestHeaders); 277 } 278 279 for (var i = 0; i < requestHeaders.length; i += 2) { 280 this.transport.setRequestHeader(requestHeaders[i], requestHeaders[i+1]); 281 } 282 }, 283 284 onStateChange: function () { 285 var readyState = this.transport.readyState; 286 if (readyState != 1) { 287 this.respondToReadyState(this.transport.readyState); 288 } 289 }, 290 291 header: function (name) { 292 try { 293 return this.transport.getResponseHeader(name); 294 } catch (e) {} 295 }, 296 297 evalJSON: function () { 298 try { 299 return eval(this.header('X-JSON')); 300 } catch (e) {} 301 }, 302 303 evalResponse: function () { 304 try { 305 return eval(this.transport.responseText); 306 } catch (e) { 307 this.dispatchException(e); 308 } 309 }, 310 311 respondToReadyState: function (readyState) { 312 var event = Ajax.Request.Events[readyState]; 313 var transport = this.transport, json = this.evalJSON(); 314 315 if (event == 'Complete') { 316 try { 317 (this.options['on' + this.transport.status] 318 || this.options['on' + (this.responseIsSuccess() ? 'Success' : 'Failure')] 319 || MochiKit.Base.emptyFunction)(transport, json); 320 } catch (e) { 321 this.dispatchException(e); 322 } 323 324 if ((this.header('Content-type') || '').match(/^text\/javascript/i)) { 325 this.evalResponse(); 326 } 327 } 328 329 try { 330 (this.options['on' + event] || MochiKit.Base.emptyFunction)(transport, json); 331 Ajax.Responders.dispatch('on' + event, this, transport, json); 332 } catch (e) { 333 this.dispatchException(e); 334 } 335 336 /* Avoid memory leak in MSIE: clean up the oncomplete event handler */ 337 if (event == 'Complete') { 338 this.transport.onreadystatechange = MochiKit.Base.emptyFunction; 339 } 340 }, 341 342 dispatchException: function (exception) { 343 (this.options.onException || MochiKit.Base.emptyFunction)(this, exception); 344 Ajax.Responders.dispatch('onException', this, exception); 345 } 346 }); 347 348 Ajax.Updater = function (container, url, options) { 349 this.__init__(container, url, options); 350 }; 351 352 MochiKit.Base.update(Ajax.Updater.prototype, Ajax.Request.prototype); 353 354 MochiKit.Base.update(Ajax.Updater.prototype, { 355 __init__: function (container, url, options) { 356 this.containers = { 357 success: container.success ? MochiKit.DOM.getElement(container.success) : MochiKit.DOM.getElement(container), 358 failure: container.failure ? MochiKit.DOM.getElement(container.failure) : 359 (container.success ? null : MochiKit.DOM.getElement(container)) 360 } 361 this.transport = MochiKit.Async.getXMLHttpRequest(); 362 this.setOptions(options); 363 364 var onComplete = this.options.onComplete || MochiKit.Base.emptyFunction; 365 this.options.onComplete = MochiKit.Base.bind(function (transport, object) { 366 this.updateContent(); 367 onComplete(transport, object); 368 }, this); 369 370 this.request(url); 371 }, 372 373 updateContent: function () { 374 var receiver = this.responseIsSuccess() ? 375 this.containers.success : this.containers.failure; 376 var response = this.transport.responseText; 377 378 if (!this.options.evalScripts) { 379 response = MochiKit.Base.stripScripts(response); 380 } 381 382 if (receiver) { 383 if (this.options.insertion) { 384 new this.options.insertion(receiver, response); 385 } else { 386 MochiKit.DOM.getElement(receiver).innerHTML = 387 MochiKit.Base.stripScripts(response); 388 setTimeout(function() { 389 MochiKit.Base.evalScripts(response); 390 }, 10); 391 } 392 } 393 394 if (this.responseIsSuccess()) { 395 if (this.onComplete) { 396 setTimeout(MochiKit.Base.bind(this.onComplete, this), 10); 397 } 398 } 399 } 400 }); 401 402 var Field = { 403 clear: function () { 404 for (var i = 0; i < arguments.length; i++) { 405 MochiKit.DOM.getElement(arguments[i]).value = ''; 406 } 407 }, 408 409 focus: function (element) { 410 MochiKit.DOM.getElement(element).focus(); 411 }, 412 413 present: function () { 414 for (var i = 0; i < arguments.length; i++) { 415 if (MochiKit.DOM.getElement(arguments[i]).value == '') { 416 return false; 417 } 418 } 419 return true; 420 }, 421 422 select: function (element) { 423 MochiKit.DOM.getElement(element).select(); 424 }, 425 426 activate: function (element) { 427 element = MochiKit.DOM.getElement(element); 428 element.focus(); 429 if (element.select) { 430 element.select(); 431 } 432 }, 433 434 scrollFreeActivate: function (field) { 435 setTimeout(function () { 436 Field.activate(field); 437 }, 1); 438 } 439 }; 39 440 40 441 var Autocompleter = {}; mochikit/branches/scriptaculous/MochiKit/DragAndDrop.js
r523 r533 181 181 182 182 if (this.options.accept) { 183 this.options.accept = MochiKit. Iter.flatten([this.options.accept]);183 this.options.accept = MochiKit.Base.flatten([this.options.accept]); 184 184 } 185 185 mochikit/branches/scriptaculous/MochiKit/New.js
r519 r533 39 39 }, MochiKit.Base.extractScripts(str))); 40 40 }, 41 42 flatten: function (array) { 43 return MochiKit.Base.map(function (item) { 44 if (item.constructor == Array) { 45 return MochiKit.Base.flatten(item); 46 } else { 47 return item; 48 } 49 }, array); 50 }, 41 51 42 52 isIE: function () { … … 58 68 isOpera: function () { 59 69 return navigator.userAgent.indexOf('Opera') > 0; 60 }61 });62 63 MochiKit.Base.update(MochiKit.Iter, {64 flatten: function (array) {65 return MochiKit.Iter.list(MochiKit.Iter.imap(function (item) {66 if (item.constructor == Array) {67 return MochiKit.Iter.list(MochiKit.Iter.flatten(item));68 } else {69 return item;70 }71 }, array));72 70 } 73 71 }); … … 221 219 222 220 collectTextNodes: function (element) { 223 return MochiKit. Iter.flatten(MochiKit.Iter.imap(function (node) {221 return MochiKit.Base.flatten(MochiKit.Base.map(function (node) { 224 222 if (node.nodeType == 3) { 225 223 return node.nodeValue; … … 232 230 233 231 collectTextNodesIgnoreClass: function (element, className) { 234 return MochiKit. Iter.flatten(MochiKit.Iter.imap(function (node) {232 return MochiKit.Base.flatten(MochiKit.Base.map(function (node) { 235 233 if (node.nodeType == 3) { 236 234 return node.nodeValue; … … 508 506 MochiKit.Event.observe(window, 'unload', MochiKit.Event.unloadCache, false); 509 507 510 MochiKit.Form = {511 serialize: function (form) {512 var elements = MochiKit.Form.getElements(form);513 var queryComponents = new Array();514 515 for (var i = 0; i < elements.length; i++) {516 var queryComponent = MochiKit.Form.serializeElement(elements[i]);517 if (queryComponent) {518 queryComponents.push(queryComponent);519 }520 }521 522 return queryComponents.join('&');523 },524 525 getElements: function (form) {526 form = MochiKit.DOM.getElement(form);527 var elements = new Array();528 529 for (tagName in MochiKit.Form.Serializers) {530 var tagElements = form.getElementsByTagName(tagName);531 for (var j = 0; j < tagElements.length; j++) {532 elements.push(tagElements[j]);533 }534 }535 return elements;536 },537 538 serializeElement: function (element) {539 element = MochiKit.DOM.getElement(element);540 var method = element.tagName.toLowerCase();541 var parameter = MochiKit.Form.Serializers[method](element);542 543 if (parameter) {544 var key = encodeURIComponent(parameter[0]);545 if (key.length === 0) {546 return;547 }548 549 if (parameter[1].constructor != Array) {550 parameter[1] = [parameter[1]];551 }552 553 return parameter[1].map(function (value) {554 return key + '=' + encodeURIComponent(value);555 }).join('&');556 }557 }558 };559 560 MochiKit.Form.Serializers = {561 input: function (element) {562 switch (element.type.toLowerCase()) {563 case 'submit':564 case 'hidden':565 case 'password':566 case 'text':567 return MochiKit.Form.Serializers.textarea(element);568 case 'checkbox':569 case 'radio':570 return MochiKit.Form.Serializers.inputSelector(element);571 }572 return false;573 },574 575 inputSelector: function (element) {576 if (element.checked) {577 return [element.name, element.value];578 }579 },580 581 textarea: function (element) {582 return [element.name, element.value];583 },584 585 select: function (element) {586 return MochiKit.Form.Serializers[element.type == 'select-one' ?587 'selectOne' : 'selectMany'](element);588 },589 590 selectOne: function (element) {591 var value = '', opt, index = element.selectedIndex;592 if (index >= 0) {593 opt = element.options[index];594 value = opt.value;595 if (!value && !('value' in opt)) {596 value = opt.text;597 }598 }599 return [element.name, value];600 },601 602 selectMany: function (element) {603 var value = new Array();604 for (var i = 0; i < element.length; i++) {605 var opt = element.options[i];606 if (opt.selected) {607 var optValue = opt.value;608 if (!optValue && !('value' in opt)) {609 optValue = opt.text;610 }611 value.push(optValue);612 }613 }614 return [element.name, value];615 }616 };617 618 var Ajax = {619 activeRequestCount: 0620 };621 622 Ajax.Responders = {623 responders: [],624 625 register: function (responderToAdd) {626 if (MochiKit.Base.find(this.responders, responderToAdd) == -1) {627 this.responders.push(responderToAdd);628 }629 },630 631 unregister: function (responderToRemove) {632 this.responders = this.responders.without(responderToRemove);633 },634 635 dispatch: function (callback, request, transport, json) {636 MochiKit.Iter.forEach(this.responders, function (responder) {637 if (responder[callback] &&638 typeof(responder[callback]) == 'function') {639 try {640 responder[callback].apply(responder, [request, transport, json]);641 } catch (e) {}642 }643 });644 }645 };646 647 Ajax.Responders.register({648 onCreate: function () {649 Ajax.activeRequestCount++;650 },651 652 onComplete: function () {653 Ajax.activeRequestCount--;654 }655 });656 657 Ajax.Base = function () {};658 659 Ajax.Base.prototype = {660 setOptions: function (options) {661 this.options = {662 method: 'post',663 asynchronous: true,664 parameters: ''665 }666 MochiKit.Base.update(this.options, options || {});667 },668 669 responseIsSuccess: function () {670 return this.transport.status == undefined671 || this.transport.status === 0672 || (this.transport.status >= 200 && this.transport.status < 300);673 },674 675 responseIsFailure: function () {676 return !this.responseIsSuccess();677 }678 };679 680 Ajax.Request = function (url, options) {681 this.__init__(url, options);682 };683 684 Ajax.Request.Events = ['Uninitialized', 'Loading', 'Loaded',685 'Interactive', 'Complete'];686 687 MochiKit.Base.update(Ajax.Request.prototype, Ajax.Base.prototype);688 689 MochiKit.Base.update(Ajax.Request.prototype, {690 __init__: function (url, options) {691 this.transport = MochiKit.Async.getXMLHttpRequest();692 this.setOptions(options);693 this.request(url);694 },695 696 request: function (url) {697 var parameters = this.options.parameters || '';698 if (parameters.length > 0){699 parameters += '&_=';700 }701 702 try {703 this.url = url;704 if (this.options.method == 'get' && parameters.length > 0) {705 this.url += (this.url.match(/\?/) ? '&' : '?') + parameters;706 }707 Ajax.Responders.dispatch('onCreate', this, this.transport);708 709 this.transport.open(this.options.method, this.url,710 this.options.asynchronous);711 712 if (this.options.asynchronous) {713 this.transport.onreadystatechange = MochiKit.Base.bind(this.onStateChange, this);714 setTimeout(MochiKit.Base.bind(function () {715 this.respondToReadyState(1);716 }, this), 10);717 }718 719 this.setRequestHeaders();720 721 var body = this.options.postBody ? this.options.postBody : parameters;722 this.transport.send(this.options.method == 'post' ? body : null);723 724 } catch (e) {725 this.dispatchException(e);726 }727 },728 729 setRequestHeaders: function () {730 var requestHeaders = ['X-Requested-With', 'XMLHttpRequest'];731 732 if (this.options.method == 'post') {733 requestHeaders.push('Content-type',734 'application/x-www-form-urlencoded');735 736 /* Force 'Connection: close' for Mozilla browsers to work around737 * a bug where XMLHttpRequest sends an incorrect Content-length738 * header. See Mozilla Bugzilla #246651.739 */740 if (this.transport.overrideMimeType) {741 requestHeaders.push('Connection', 'close');742 }743 }744 745 if (this.options.requestHeaders) {746 requestHeaders.push.apply(requestHeaders, this.options.requestHeaders);747 }748 749 for (var i = 0; i < requestHeaders.length; i += 2) {750 this.transport.setRequestHeader(requestHeaders[i], requestHeaders[i+1]);751 }752 },753 754 onStateChange: function () {755 var readyState = this.transport.readyState;756 if (readyState != 1) {757 this.respondToReadyState(this.transport.readyState);758 }759 },760 761 header: function (name) {762 try {763 return this.transport.getResponseHeader(name);764 } catch (e) {}765 },766 767 evalJSON: function () {768 try {769 return eval(this.header('X-JSON'));770 } catch (e) {}771 },772 773 evalResponse: function () {774 try {775 return eval(this.transport.responseText);776 } catch (e) {777 this.dispatchException(e);778 }779 },780 781 respondToReadyState: function (readyState) {782 var event = Ajax.Request.Events[readyState];783 var transport = this.transport, json = this.evalJSON();784 785 if (event == 'Complete') {786 try {787 (this.options['on' + this.transport.status]788 || this.options['on' + (this.responseIsSuccess() ? 'Success' : 'Failure')]789 || MochiKit.Base.emptyFunction)(transport, json);790 } catch (e) {791 this.dispatchException(e);792 }793 794 if ((this.header('Content-type') || '').match(/^text\/javascript/i)) {795 this.evalResponse();796 }797 }798 799 try {800 (this.options['on' + event] || MochiKit.Base.emptyFunction)(transport, json);801 Ajax.Responders.dispatch('on' + event, this, transport, json);802 } catch (e) {803 this.dispatchException(e);804 }805 806 /* Avoid memory leak in MSIE: clean up the oncomplete event handler */807 if (event == 'Complete') {808 this.transport.onreadystatechange = MochiKit.Base.emptyFunction;809 }810 },811 812 dispatchException: function (exception) {813 (this.options.onException || MochiKit.Base.emptyFunction)(this, exception);814 Ajax.Responders.dispatch('onException', this, exception);815 }816 });817 818 Ajax.Updater = function (container, url, options) {819 this.__init__(container, url, options);820 };821 822 MochiKit.Base.update(Ajax.Updater.prototype, Ajax.Request.prototype);823 824 MochiKit.Base.update(Ajax.Updater.prototype, {825 __init__: function (container, url, options) {826 this.containers = {827 success: container.success ? MochiKit.DOM.getElement(container.success) : MochiKit.DOM.getElement(container),828 failure: container.failure ? MochiKit.DOM.getElement(container.failure) :829 (container.success ? null : MochiKit.DOM.getElement(container))830 }831 this.transport = MochiKit.Async.getXMLHttpRequest();832 this.setOptions(options);833 834 var onComplete = this.options.onComplete || MochiKit.Base.emptyFunction;835 this.options.onComplete = MochiKit.Base.bind(function (transport, object) {836 this.updateContent();837 onComplete(transport, object);838 }, this);839 840 this.request(url);841 },842 843 updateContent: function () {844 var receiver = this.responseIsSuccess() ?845 this.containers.success : this.containers.failure;846 var response = this.transport.responseText;847 848 if (!this.options.evalScripts) {849 response = MochiKit.Base.stripScripts(response);850 }851 852 if (receiver) {853 if (this.options.insertion) {854 new this.options.insertion(receiver, response);855 } else {856 MochiKit.DOM.getElement(receiver).innerHTML =857 MochiKit.Base.stripScripts(response);858 setTimeout(function() {859 MochiKit.Base.evalScripts(response);860 }, 10);861 }862 }863 864 if (this.responseIsSuccess()) {865 if (this.onComplete) {866 setTimeout(MochiKit.Base.bind(this.onComplete, this), 10);867 }868 }869 }870 });871 872 var Field = {873 clear: function () {874 for (var i = 0; i < arguments.length; i++) {875 MochiKit.DOM.getElement(arguments[i]).value = '';876 }877 },878 879 focus: function (element) {880 MochiKit.DOM.getElement(element).focus();881 },882 883 present: function () {884 for (var i = 0; i < arguments.length; i++) {885 if (MochiKit.DOM.getElement(arguments[i]).value == '') {886 return false;887 }888 }889 return true;890 },891 892 select: function (element) {893 MochiKit.DOM.getElement(element).select();894 },895 896 activate: function (element) {897 element = MochiKit.DOM.getElement(element);898 element.focus();899 if (element.select) {900 element.select();901 }902 },903 904 scrollFreeActivate: function (field) {905 setTimeout(function () {906 Field.activate(field);907 }, 1);908 }909 };910 mochikit/branches/scriptaculous/MochiKit/Sortable.js
r507 r533 59 59 return s.element == element; 60 60 }, this.sortables), function (s) { 61 DragAndDrop.Draggables.removeObserver(s.element);61 MochiKit.DragAndDrop.Draggables.removeObserver(s.element); 62 62 MochiKit.Iter.forEach(s.droppables, function (d) { 63 DragAndDrop.Droppables.remove(d);63 MochiKit.DragAndDrop.Droppables.remove(d); 64 64 }); 65 65 s.draggables.invoke('destroy'); … … 141 141 // drop on empty handling 142 142 if (options.dropOnEmpty) { 143 new DragAndDrop.Droppable(element,143 new MochiKit.DragAndDrop.Droppable(element, 144 144 {containment: options.containment, 145 145 onHover: Sortable.onEmptyHover, … … 154 154 options.handle, e)[0] : e; 155 155 options.draggables.push( 156 new DragAndDrop.Draggable(e,156 new MochiKit.DragAndDrop.Draggable(e, 157 157 MochiKit.Base.update(options_for_draggable, 158 158 {handle: handle}))); 159 new DragAndDrop.Droppable(e, options_for_droppable);159 new MochiKit.DragAndDrop.Droppable(e, options_for_droppable); 160 160 options.droppables.push(e); 161 161 }); … … 165 165 166 166 // for onupdate 167 DragAndDrop.Draggables.addObserver(167 MochiKit.DragAndDrop.Draggables.addObserver( 168 168 new SortableObserver(element, options.onUpdate)); 169 169 }, … … 190 190 }); 191 191 192 return (elements.length > 0 ? MochiKit. Iter.flatten(elements) : null);192 return (elements.length > 0 ? MochiKit.Base.flatten(elements) : null); 193 193 }, 194 194
