ComponentTreeNode.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. Ext.define('PageAnalyzer.models.ComponentTreeNode', {
  2. extend: 'Ext.data.Model',
  3. fields: [
  4. { name: 'text', type: 'string' },
  5. { name: 'compId', type: 'string' },
  6. { name: 'refName', type: 'string' },
  7. { name: 'width', type: 'int'},
  8. { name: 'height', type: 'int'},
  9. { name: 'x', type: 'int'},
  10. { name: 'y', type: 'int'},
  11. { name: 'cssClass', type: 'string'},
  12. { name: 'xtype', type: 'string' },
  13. { name: 'rendered', type: 'boolean' },
  14. { name: 'hidden', type: 'boolean' },
  15. { name: 'isContainer', type: 'boolean' },
  16. { name: 'isElement', type: 'boolean' },
  17. { name: 'isComponent', type: 'boolean', defualtValue: false }
  18. ],
  19. jasmineTpl: [
  20. 'expect(Ext.widget({cfg})).toHaveLayout({spec});'
  21. ],
  22. isSimpleType: function(val) {
  23. // var t = (typeof val);
  24. // return (t == 'number' || t == 'string' || t == 'boolean');
  25. return Ext.isPrimitive(val);
  26. },
  27. isArray: function(val) {
  28. var t = (typeof val);
  29. return (Ext.isArray(val) || t == 'Ext.util.Queue');
  30. },
  31. getComponentConfig: function(initCfg) {
  32. var me = this,
  33. cfg = {},
  34. arry;
  35. initCfg = (initCfg.isComponent)
  36. ? initCfg.initialConfig
  37. : initCfg;
  38. if (me.isSimpleType(initCfg)) {
  39. return initCfg;
  40. }
  41. Ext.Object.each(initCfg, function(name, val){
  42. if (val) {
  43. if (me.isSimpleType(val)) {
  44. cfg[name] = val;
  45. } else if (val.isComponent) {
  46. cfg[name] = me.getComponentConfig(val.initialConfig);
  47. cfg['xtype'] = val.getXType();
  48. } else if (me.isArray(val)) {
  49. arry = cfg[name] || (cfg[name] = []);
  50. Ext.each(val, function(v) {
  51. if (v) {
  52. arry.push(me.getComponentConfig(v));
  53. }
  54. }, me);
  55. } else {
  56. cfg[name] = me.getComponentConfig(val);
  57. }
  58. }
  59. });
  60. return cfg;
  61. },
  62. getTestSpec: function() {
  63. var data = this.data,
  64. spec = {},
  65. children = this.childNodes,
  66. len = children.length,
  67. specs = [],
  68. child, i, name;
  69. if (data.refName == 'items' || data.refName == 'dockedItems') {
  70. for (i = 0; i < len; i++) {
  71. child = children[i];
  72. if (!child.data.hidden) {
  73. spec[i] = child.getTestSpec();
  74. }
  75. }
  76. return spec;
  77. } else if (data.isElement) {
  78. var dims = [];
  79. dims.push(data.x, data.y, data.width, data.height);
  80. return {
  81. xywh: dims.join(' ')
  82. };
  83. } else {
  84. for (i = 0; i < len; i++) {
  85. child = children[i];
  86. name = child.data.refName;
  87. if (!child.data.hidden) {
  88. spec[name] = child.getTestSpec();
  89. }
  90. }
  91. return spec;
  92. }
  93. },
  94. getJasmineSpec: function(){
  95. var me = this,
  96. data = me.data,
  97. ctx = {
  98. spec: Ext.JSON.encodeValue(me.getTestSpec(), '\n')
  99. };
  100. return Ext.XTemplate.getTpl(me, 'jasmineTpl').apply(ctx);
  101. }
  102. });