CMSFormField.js 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. MWF.xApplication.Selector = MWF.xApplication.Selector || {};
  2. MWF.xDesktop.requireApp("Selector", "Identity", null, false);
  3. MWF.xApplication.Selector.CMSFormField = new Class({
  4. Extends: MWF.xApplication.Selector.Identity,
  5. options: {
  6. "style": "default",
  7. "count": 0,
  8. "title": MWF.xApplication.Selector.LP.selectField,
  9. "fieldType": "",
  10. "values": [],
  11. "names": [],
  12. "application": "",
  13. "form" : "",
  14. "expand": false
  15. },
  16. getFields : function(){
  17. var dataTypes = {
  18. "string": ["htmledit", "radio", "select", "textarea", "textfield"],
  19. "person": ["personfield"],
  20. "date": ["calender"],
  21. "number": ["number"],
  22. "array": ["checkbox"]
  23. };
  24. fieldList = [];
  25. Object.each( this.relativeFormData.json.moduleList, function(moudle){
  26. var key = "";
  27. for (k in dataTypes){
  28. if (dataTypes[k].indexOf( ( moudle.moduleName || moudle.type ).toLowerCase())!==-1){
  29. key = k;
  30. break;
  31. }
  32. }
  33. if (key){
  34. fieldList.push({
  35. "name": moudle.id,
  36. "dataType": key
  37. });
  38. }
  39. }.bind(this));
  40. return fieldList;
  41. },
  42. loadSelectItems: function(addToNext){
  43. if( this.options.form ){
  44. this.cmsAction.getCMSForm(this.options.form, function(json){
  45. this.relativeFormData = (json.data.data) ? JSON.decode(MWF.decodeJsonString(json.data.data)): null;
  46. this.getFields().each( function( f ){
  47. if( !this.options.fieldType || this.options.fieldType === f.dataType ){
  48. f.id = f.name;
  49. var item = this._newItem(f, this, this.itemAreaNode);
  50. }
  51. }.bind(this));
  52. }.bind(this))
  53. }else{
  54. if (this.options.application){
  55. this.cmsAction.listCMSFormField(this.options.application, function(json){
  56. this.fieldData = json.data;
  57. if (this.options.fieldType){
  58. json.data[this.options.fieldType].each(function(data){
  59. data.id = data.name;
  60. var item = this._newItem(data, this, this.itemAreaNode);
  61. }.bind(this));
  62. }else{
  63. Object.each(json.data, function(v, k){
  64. var category = this._newItemCategory({"name": k, "data": v}, this, this.itemAreaNode);
  65. }.bind(this));
  66. }
  67. }.bind(this));
  68. }
  69. }
  70. },
  71. _scrollEvent: function(y){
  72. return true;
  73. },
  74. _getChildrenItemIds: function(){
  75. return null;
  76. },
  77. _newItemCategory: function(data, selector, item, level){
  78. return new MWF.xApplication.Selector.CMSFormField.ItemCategory(data, selector, item, level)
  79. },
  80. _listItemByKey: function(callback, failure, key){
  81. var data = [];
  82. if (this.options.fieldType){
  83. data = this.fieldData[this.options.fieldType];
  84. }else{
  85. Object.each(this.fieldData, function(v, k){
  86. data = (data.length) ? data.concat(v) : v
  87. }.bind(this));
  88. }
  89. var searchData = [];
  90. data.each(function(d){
  91. if (d.name.toLowerCase().indexOf(key.toLowerCase())!==-1) searchData.push(d);
  92. }.bind(this));
  93. if (callback) callback.apply(this, [{"data": searchData}]);
  94. //if (callback) callback({"data": {"name": key, "id": key}});
  95. },
  96. _getItem: function(callback, failure, id, async){
  97. if (callback) callback({"data": {"name": id, "id": id}});
  98. },
  99. _newItemSelected: function(data, selector, item){
  100. return new MWF.xApplication.Selector.CMSFormField.ItemSelected(data, selector, item)
  101. },
  102. _listItemByPinyin: function(callback, failure, key){
  103. this._listItemByKey(callback, failure, key);
  104. },
  105. _newItem: function(data, selector, container, level){
  106. return new MWF.xApplication.Selector.CMSFormField.Item(data, selector, container, level);
  107. }
  108. });
  109. MWF.xApplication.Selector.CMSFormField.Item = new Class({
  110. Extends: MWF.xApplication.Selector.Identity.Item,
  111. _getShowName: function(){
  112. return this.data.name;
  113. },
  114. _setIcon: function(){
  115. this.iconNode.setStyle("background-image", "url("+"/x_component_Selector/$Selector/default/icon/processicon.png)");
  116. },
  117. loadSubItem: function(){
  118. return false;
  119. // this.children = new Element("div", {
  120. // "styles": this.selector.css.selectorItemCategoryChildrenNode
  121. // }).inject(this.node, "after");
  122. // this.children.setStyle("display", "block");
  123. //// if (!this.selector.options.expand) this.children.setStyle("display", "none");
  124. //
  125. // this.selector.action.listProcess(function(subJson){
  126. // subJson.data.each(function(subData){
  127. // var category = this.selector._newItem(subData, this.selector, this.children, this.level+1);
  128. // }.bind(this));
  129. // }.bind(this), null, this.data.id);
  130. },
  131. getData: function(callback){
  132. if (callback) callback();
  133. },
  134. checkSelectedSingle: function(){
  135. var selectedItem = this.selector.options.values.filter(function(item, index){
  136. if (typeOf(item)==="object") return (this.data.name === item.name) ;
  137. if (typeOf(item)==="string") return (this.data.name === item);
  138. return false;
  139. }.bind(this));
  140. if (selectedItem.length){
  141. this.selectedSingle();
  142. }
  143. },
  144. checkSelected: function(){
  145. var selectedItem = this.selector.selectedItems.filter(function(item, index){
  146. return item.data.name === this.data.name;
  147. }.bind(this));
  148. if (selectedItem.length){
  149. //selectedItem[0].item = this;
  150. selectedItem[0].addItem(this);
  151. this.selectedItem = selectedItem[0];
  152. this.setSelected();
  153. }
  154. }
  155. });
  156. MWF.xApplication.Selector.CMSFormField.ItemSelected = new Class({
  157. Extends: MWF.xApplication.Selector.Person.ItemSelected,
  158. _getShowName: function(){
  159. return this.data.name;
  160. },
  161. _setIcon: function(){
  162. this.iconNode.setStyle("background-image", "url("+"/x_component_Selector/$Selector/default/icon/processicon.png)");
  163. }
  164. });
  165. MWF.xApplication.Selector.CMSFormField.ItemCategory = new Class({
  166. Extends: MWF.xApplication.Selector.Identity.ItemCategory,
  167. _setIcon: function(){
  168. this.iconNode.setStyle("background-image", "url("+"/x_component_Selector/$Selector/default/icon/applicationicon.png)");
  169. },
  170. loadSub: function(callback){
  171. if (!this.loaded){
  172. var subJson = this.selector.fieldData[this.data.name];
  173. //this.selector.action.listProcess(function(subJson){
  174. subJson.each(function(subData){
  175. //subData.applicationName = this.data.name;
  176. //subData.application = this.data.id;
  177. var category = this.selector._newItem(subData, this.selector, this.children, this.level+1);
  178. }.bind(this));
  179. this.loaded = true;
  180. if (callback) callback();
  181. //}.bind(this), null, this.data.id);
  182. }else{
  183. if (callback) callback();
  184. }
  185. },
  186. _hasChild: function(){
  187. var d = this.selector.fieldData[this.data.name];
  188. return (d && d.length);
  189. }
  190. });