rearrange.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. // wrapped by build app
  2. define("dojox/lang/oo/rearrange", ["dijit","dojo","dojox"], function(dijit,dojo,dojox){
  3. dojo.provide("dojox.lang.oo.rearrange");
  4. (function(){
  5. var extraNames = dojo._extraNames, extraLen = extraNames.length,
  6. opts = Object.prototype.toString, empty = {};
  7. dojox.lang.oo.rearrange = function(bag, map){
  8. // summary:
  9. // Process properties in place by removing and renaming them.
  10. // description:
  11. // Properties of an object are to be renamed or removed specified
  12. // by "map" argument. Only own properties of "map" are processed.
  13. // example:
  14. // | oo.rearrange(bag, {
  15. // | abc: "def", // rename "abc" attribute to "def"
  16. // | ghi: null // remove/hide "ghi" attribute
  17. // | });
  18. // bag: Object:
  19. // the object to be processed
  20. // map: Object:
  21. // the dictionary for renaming (false value indicates removal of the named property)
  22. // returns: Object:
  23. // the original object
  24. var name, newName, prop, i, t;
  25. for(name in map){
  26. newName = map[name];
  27. if(!newName || opts.call(newName) == "[object String]"){
  28. prop = bag[name];
  29. if(!(name in empty) || empty[name] !== prop){
  30. if(!(delete bag[name])){
  31. // can't delete => hide it
  32. bag[name] = undefined;
  33. }
  34. if(newName){
  35. bag[newName] = prop;
  36. }
  37. }
  38. }
  39. }
  40. if(extraLen){
  41. for(i = 0; i < extraLen; ++i){
  42. name = extraNames[i];
  43. // repeating the body above
  44. newName = map[name];
  45. if(!newName || opts.call(newName) == "[object String]"){
  46. prop = bag[name];
  47. if(!(name in empty) || empty[name] !== prop){
  48. if(!(delete bag[name])){
  49. // can't delete => hide it
  50. bag[name] = undefined;
  51. }
  52. if(newName){
  53. bag[newName] = prop;
  54. }
  55. }
  56. }
  57. }
  58. }
  59. return bag; // Object
  60. };
  61. })();
  62. });