source: Dev/trunk/src/client/dojox/mvc/equals.js @ 529

Last change on this file since 529 was 483, checked in by hendrikvanantwerpen, 11 years ago

Added Dojo 1.9.3 release.

File size: 2.6 KB
Line 
1define([
2        "dojo/_base/array",
3        "dojo/_base/lang",
4        "dojo/Stateful",
5        "./StatefulArray"
6], function(array, lang, Stateful, StatefulArray){
7        var equalsOptions = {
8                // summary:
9                //              Options used for dojox/mvc/equals().
10
11                getType: function(/*Anything*/ v){
12                        // summary:
13                        //              Returns the type of the given value.
14                        // v: Anything
15                        //              The value.
16
17                        return lang.isArray(v) ? "array" : lang.isFunction((v || {}).getTime) ? "date" : v != null && ({}.toString.call(v) == "[object Object]" || lang.isFunction((v || {}).set) && lang.isFunction((v || {}).watch)) ? "object" : "value";
18                },
19
20                equalsArray: function(/*Anything[]*/ dst, /*Anything[]*/ src){
21                        // summary:
22                        //              Returns if the given two stateful arrays are equal.
23                        // dst: Anything[]
24                        //              The array to compare with.
25                        // src: Anything[]
26                        //              The array to compare with.
27
28                        for(var i = 0, l = Math.max(dst.length, src.length); i < l; i++){
29                                if(!equals(dst[i], src[i])){ return false; }
30                        }
31                        return true;
32                },
33
34                equalsDate: function(/*Date*/ dst, /*Date*/ src){
35                        return dst.getTime() == src.getTime();
36                },
37
38                equalsObject: function(/*Object*/ dst, /*Object*/ src){
39                        // summary:
40                        //              Returns if the given two stateful objects are equal.
41                        // dst: Object
42                        //              The object to compare with.
43                        // src: Object
44                        //              The object to compare with.
45
46                        var list = lang.mixin({}, dst, src);
47                        for(var s in list){
48                                if(!(s in Stateful.prototype) && s != "_watchCallbacks" && !equals(dst[s], src[s])){ return false; }
49                        }
50                        return true;
51                },
52
53                equalsValue: function(/*Anything*/ dst, /*Anything*/ src){
54                        // summary:
55                        //              Returns if the given two values are equal.
56
57                        return dst === src; // Boolean
58                }
59        };
60
61        var equals = function(/*Anything*/ dst, /*Anything*/ src, /*dojox/mvc/equalsOptions*/ options){
62                // summary:
63                //              Compares two dojo/Stateful objects, by diving into the leaves.
64                // description:
65                //              Recursively iterates and compares stateful values.
66                // dst: Anything
67                //              The stateful value to compare with.
68                // src: Anything
69                //              The stateful value to compare with.
70                // options: dojox/mvc/equalsOptions
71                //              The object that defines how two stateful values are compared.
72                // returns: Boolean
73                //              True if dst equals to src, false otherwise.
74
75                var opts = options || equals, types = [opts.getType(dst), opts.getType(src)];
76                return types[0] != types[1] ? false : opts["equals" + types[0].replace(/^[a-z]/, function(c){ return c.toUpperCase(); })](dst, src); // Boolean
77        };
78
79        // lang.setObject() thing is for back-compat, remove it in 2.0
80        return lang.setObject("dojox.mvc.equals", lang.mixin(equals, equalsOptions));
81});
Note: See TracBrowser for help on using the repository browser.