FindWorker.js 45 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095
  1. var _worker = self;
  2. var _action = {
  3. _checkRequest: function(s,f){
  4. if (this.request.readyState === XMLHttpRequest.DONE) {
  5. if (this.request.status === 200) {
  6. this._doneRequest(s);
  7. } else {
  8. this._errorRequest(f);
  9. }
  10. }
  11. },
  12. _createRequest: function(s, f){
  13. var request = new XMLHttpRequest();
  14. request.addEventListener("readystatechange",function(){
  15. if (this.readyState === XMLHttpRequest.DONE) {
  16. if (this.status === 200) {
  17. var json = JSON.parse(this.responseText);
  18. var xToken = this.getResponseHeader("x-token");
  19. if (xToken){
  20. json.xToken = xToken;
  21. }
  22. if (s) s(json);
  23. } else {
  24. if (f) f(this, this.responseText);
  25. }
  26. }
  27. });
  28. return request
  29. },
  30. sendRequest: function(data){
  31. return new Promise(function(s, f){
  32. var request = this._createRequest(s, f);
  33. var method = data.method;
  34. var noCache = !!data.noCache;
  35. var async = !!data.loadAsync;
  36. var withCredentials = !!data.credentials;
  37. var url = data.address;
  38. var body = data.body;
  39. var debug = data.debug;
  40. var token = data.token;
  41. if (noCache) url = url+(((url.indexOf("?")!==-1) ? "&" : "?")+(new Date()).getTime());
  42. request.open(method, url, async);
  43. request.withCredentials = withCredentials;
  44. request.setRequestHeader("Content-Type", "application/json; charset=utf-8");
  45. request.setRequestHeader("Accept", "text/html,application/json,*/*");
  46. if (debug) request.setRequestHeader("x-debugger", "true");
  47. if (token){
  48. request.setRequestHeader("x-token", token);
  49. request.setRequestHeader("authorization", token);
  50. }
  51. request.send(body);
  52. }.bind(this));
  53. },
  54. _doneRequest: function(s){
  55. var json = JSON.parse(this.request.responseText);
  56. var xToken = this.request.getResponseHeader("x-token");
  57. if (xToken){
  58. json.xToken = xToken;
  59. }
  60. if (s) s(json);
  61. // _worker.postMessage({"type": "done", "data": json});
  62. // _worker.close();
  63. },
  64. _errorRequest: function(f){
  65. if (s) s(this.request, this.request.responseText);
  66. // _worker.postMessage({"type":"error", "data": {"status": this.request.status, "statusText": this.request.statusText, "responseText":this.request.responseText}});
  67. // _worker.close();
  68. }
  69. };
  70. _worker.action = _action;
  71. _worker._receiveMessageReply = function(){
  72. _worker.postMessage({
  73. "type": "receive"
  74. });
  75. };
  76. _worker._readyMessageReply = function(){
  77. _worker.postMessage({
  78. "type": "ready",
  79. "count": this.filterOptionList.length
  80. });
  81. };
  82. _worker._getRequestOption = function(data, par){
  83. if (par){
  84. Object.keys(par).forEach(function(k){
  85. data.url = data.url.replace("{"+k+"}", par[k]);
  86. });
  87. }
  88. return {
  89. "method": data.method||"get",
  90. "noCache": false,
  91. "loadAsync": true,
  92. "credentials": true,
  93. "address": data.url,
  94. "body": data.body || "",
  95. "debug": data.debug || _worker.findData.debug,
  96. "token": data.token || _worker.findData.token
  97. };
  98. };
  99. _worker._createFilterOption = function(moduleType, appId, designerType, desingerId){
  100. var filterOption = JSON.parse(_worker.filterOptionTemplete);
  101. filterOption.moduleList.push({
  102. "moduleType": moduleType,
  103. "moduleAppList": [{"appId": appId, "designerList": [{"designerType": designerType, "designerIdList": [desingerId]}]}]
  104. });
  105. this.filterOptionList.push(filterOption);
  106. return filterOption;
  107. };
  108. _worker._getDesingerModule = function(id, restful, par, moduleType, designerType){
  109. var p = _worker.action.sendRequest(_worker._getRequestOption({"url": restful, "debug": _worker.findData.debug, "token": _worker.findData.token }, par));
  110. return p.then(function(json){
  111. list = json.data;
  112. list.forEach(function(designer){
  113. _worker._createFilterOption(moduleType, id, designerType, designer.id)
  114. });
  115. }, function(){});
  116. };
  117. _worker._getDesinger_processPlatform = function(id){
  118. var promiseArr = [];
  119. if (_worker.findData.filterOption.designerTypes.indexOf("script")!=-1){ //所有脚本
  120. promiseArr.push(_worker._getDesingerModule(id, _worker.findData.actions.listProcessScript, {"applicationId": id}, "processPlatform", "script"));
  121. }
  122. if (_worker.findData.filterOption.designerTypes.indexOf("form")!=-1){ //所有表单
  123. promiseArr.push(_worker._getDesingerModule(id, _worker.findData.actions.listProcessForm, {"applicationId": id}, "processPlatform", "form"));
  124. }
  125. if (_worker.findData.filterOption.designerTypes.indexOf("process")!=-1){ //所有流程
  126. promiseArr.push(_worker._getDesingerModule(id, _worker.findData.actions.listProcessProcess, {"applicationId": id}, "processPlatform", "process"));
  127. }
  128. return promiseArr;
  129. };
  130. _worker._getDesinger_cms = function(id){
  131. var promiseArr = [];
  132. if (_worker.findData.filterOption.designerTypes.indexOf("script")!=-1){ //所有脚本
  133. promiseArr.push(_worker._getDesingerModule(id, _worker.findData.actions.listCmsScript, {"flag": id}, "cms", "script"));
  134. }
  135. if (_worker.findData.filterOption.designerTypes.indexOf("form")!=-1){ //所有表单
  136. promiseArr.push(_worker._getDesingerModule(id, _worker.findData.actions.listCmsForm, {"appId": id}, "cms", "form"));
  137. }
  138. return promiseArr;
  139. };
  140. _worker._getDesinger_portal = function(id){
  141. var promiseArr = [];
  142. if (_worker.findData.filterOption.designerTypes.indexOf("script")!=-1){ //所有脚本
  143. promiseArr.push(_worker._getDesingerModule(id, _worker.findData.actions.listPortalScript, {"portalId": id}, "portal", "script"));
  144. }
  145. if (_worker.findData.filterOption.designerTypes.indexOf("page")!=-1){ //所有表单
  146. promiseArr.push(_worker._getDesingerModule(id, _worker.findData.actions.listPortalPage, {"portalId": id}, "portal", "page"));
  147. }
  148. if (_worker.findData.filterOption.designerTypes.indexOf("widget")!=-1){ //所有流程
  149. promiseArr.push(_worker._getDesingerModule(id, _worker.findData.actions.listPortalWidget, {"portalId": id}, "portal", "widget"));
  150. }
  151. return promiseArr;
  152. };
  153. _worker._getDesinger_query = function(id){
  154. var promiseArr = [];
  155. if (_worker.findData.filterOption.designerTypes.indexOf("view")!=-1){ //所有脚本
  156. promiseArr.push(_worker._getDesingerModule(id, _worker.findData.actions.listQueryView, {"flag": id}, "query", "view"));
  157. }
  158. if (_worker.findData.filterOption.designerTypes.indexOf("stat")!=-1){ //所有表单
  159. promiseArr.push(_worker._getDesingerModule(id, _worker.findData.actions.listQueryStat, {"flag": id}, "query", "stat"));
  160. }
  161. if (_worker.findData.filterOption.designerTypes.indexOf("statement")!=-1){ //所有流程
  162. promiseArr.push(_worker._getDesingerModule(id, _worker.findData.actions.listQueryStatement, {"flag": id}, "query", "statement"));
  163. }
  164. return promiseArr;
  165. };
  166. _worker._getDesinger_service = function(id){
  167. var promiseArr = [];
  168. if (_worker.findData.filterOption.designerTypes.indexOf("script")!=-1){ //所有脚本
  169. if (id=="invoke"){
  170. promiseArr.push(_worker._getDesingerModule(id, _worker.findData.actions.listInvoke, null, "service", "script"));
  171. }else{
  172. promiseArr.push(_worker._getDesingerModule(id, _worker.findData.actions.listAgent, null, "service", "script"));
  173. }
  174. }
  175. return promiseArr;
  176. };
  177. _worker._listApplication = function(type){
  178. switch (type){
  179. case "processPlatform":
  180. return this.action.sendRequest(_worker._getRequestOption({"url": this.findData.actions.listProcess, "debug": this.findData.debug, "token": this.findData.token }));
  181. case "cms":
  182. return this.action.sendRequest(_worker._getRequestOption({"url": this.findData.actions.listCms, "debug": this.findData.debug, "token": this.findData.token }));
  183. case "portal":
  184. return this.action.sendRequest(_worker._getRequestOption({"url": this.findData.actions.listPortal, "debug": this.findData.debug, "token": this.findData.token }));
  185. case "query":
  186. return this.action.sendRequest(_worker._getRequestOption({"url": this.findData.actions.listQuery, "debug": this.findData.debug, "token": this.findData.token }));
  187. }
  188. };
  189. _worker._parseFindModule = function(moduleList){
  190. var promiseArr = [];
  191. moduleList.forEach(function(module){
  192. if (module.moduleType==="service"){
  193. if (!module.flagList || !module.flagList.length){
  194. var filterOption = JSON.parse(_worker.filterOptionTemplete);
  195. filterOption.moduleList.push({
  196. "moduleType": module.moduleType,
  197. "moduleAppList": [{"appId": "invoke"}]
  198. });
  199. this.filterOptionList.push(filterOption);
  200. var filterOption = JSON.parse(_worker.filterOptionTemplete);
  201. filterOption.moduleList.push({
  202. "moduleType": module.moduleType,
  203. "moduleAppList": [{"appId": "agent"}]
  204. });
  205. this.filterOptionList.push(filterOption);
  206. promiseArr.push(Promise.resolve(""));
  207. // promiseArr = promiseArr.concat(_worker["_getDesinger_"+module.moduleType]("invoke"));
  208. // promiseArr = promiseArr.concat(_worker["_getDesinger_"+module.moduleType]("agent"));
  209. }else{
  210. module.flagList.forEach(function(flag){
  211. if (!flag.designerList || !flag.designerList.length){
  212. promiseArr = promiseArr.concat(_worker["_getDesinger_"+module.moduleType](flag.id));
  213. }else{
  214. flag.designerList.forEach(function(designer){
  215. var filterOption = _worker._createFilterOption(module.moduleType, flag.id, designer.designerType, designer.id)
  216. promiseArr = promiseArr.concat(Promise.resolve(filterOption));
  217. });
  218. }
  219. });
  220. }
  221. }else{
  222. if (!module.flagList || !module.flagList.length){
  223. var p = _worker._listApplication(module.moduleType);
  224. promiseArr.push(p.then(function(json){
  225. json.data.forEach(function(app){
  226. var filterOption = JSON.parse(_worker.filterOptionTemplete);
  227. filterOption.moduleList.push({
  228. "moduleType": module.moduleType,
  229. "moduleAppList": [{"appId": app.id}]
  230. });
  231. this.filterOptionList.push(filterOption);
  232. });
  233. return Promise.resolve("");
  234. //临时处理
  235. // var pArr = [];
  236. // json.data.forEach(function(app){
  237. // pArr = pArr.concat(_worker["_getDesinger_"+module.moduleType](app.id));
  238. // });
  239. // return Promise.all(pArr);
  240. }, function(){}));
  241. }else{
  242. module.flagList.forEach(function(flag){
  243. if (!flag.designerList || !flag.designerList.length){
  244. promiseArr = promiseArr.concat(_worker["_getDesinger_"+module.moduleType](flag.id));
  245. }else{
  246. flag.designerList.forEach(function(designer){
  247. var filterOption = _worker._createFilterOption(module.moduleType, flag.id, designer.designerType, designer.id)
  248. promiseArr = promiseArr.concat(Promise.resolve(filterOption));
  249. });
  250. }
  251. });
  252. }
  253. }
  254. }.bind(this));
  255. return promiseArr;
  256. }
  257. _worker._findMessageReply = function(data, option){
  258. _worker.setTimeout(function(){
  259. _worker.postMessage({
  260. "type": "find",
  261. "data": data,
  262. "option": option
  263. });
  264. }, 200);
  265. };
  266. _worker._findOptionReply = function(){
  267. _worker.postMessage({
  268. "type": "done"
  269. });
  270. };
  271. _worker._createFindMessageReplyData = function(module, designer, aliase, pattern){
  272. return {
  273. "module": module,
  274. "appId": designer.appId,
  275. "appName": designer.appName,
  276. "designerId": designer.designerId,
  277. "designerName": designer.designerName,
  278. "designerType": designer.designerType,
  279. "designerAliase": aliase,
  280. "pattern": pattern
  281. };
  282. };
  283. _worker._setFilterOptionRegex = function(){
  284. var keyword = _worker.findData.filterOption.keyword;
  285. if (_worker.findData.filterOption.matchRegExp){
  286. var flag = (_worker.findData.filterOption.caseSensitive) ? "gm" : "gmi";
  287. this.keywordRegexp = new RegExp(keyword, flag);
  288. }else{
  289. var flag = (_worker.findData.filterOption.caseSensitive) ? "gm" : "gmi";
  290. keyword = (_worker.findData.filterOption.matchWholeWord) ? "\\b"+keyword+"\\b" : keyword;
  291. this.keywordRegexp = new RegExp(keyword, flag);
  292. }
  293. };
  294. _worker._findProcessPlatformParse_script = function(designer, option, module){
  295. if (designer.patternList && designer.patternList.length){
  296. // var action = this.findData.actions.getProcessScript;
  297. //
  298. // var p = _worker.action.sendRequest(_worker._getRequestOption({"url": action}, {"id": designer.designerId}));
  299. // p.then(function(json){
  300. designer.patternList.forEach(function(pattern){
  301. if (pattern.property=="text"){
  302. //var scriptLines = json.data.text.split(/\n/);
  303. pattern.lines.forEach(function(line){
  304. var scriptText = line.lineValue;
  305. _worker._findMessageReply(_worker._createFindMessageReplyData(module, designer, "", {
  306. "property": pattern.property,
  307. "value": scriptText,
  308. "line": line.line
  309. }), option);
  310. // var scriptText = scriptLines[line-1];
  311. // while ((arr = this.keywordRegexp.exec(scriptText)) !== null) {
  312. // var col = arr.index;
  313. // var key = arr[0];
  314. // var value = arr.input;
  315. // _worker._findMessageReply(_worker._createFindMessageReplyData("processPlatform", designer, json.data.aliase, {
  316. // "property": pattern.property,
  317. // "value": value,
  318. // "line": line,
  319. // "column": col,
  320. // "key": key
  321. // }), option);
  322. // }
  323. });
  324. }else{
  325. // _worker._findMessageReply(_worker._createFindMessageReplyData(module, designer, "", {
  326. // "property": pattern.property,
  327. // "value": pattern.propertyValue
  328. // }), option);
  329. }
  330. });
  331. //}, function(){});
  332. }
  333. };
  334. _worker.findScriptLineValue = function(result, code, preLine, preIndex, len){
  335. var lineRegexp = /\r\n|\n|\r/g;
  336. var preText = code.substring(preIndex, result.index);
  337. var m = preText.match(lineRegexp);
  338. preLine += (m) ? m.length : 0;
  339. var value = result[0];
  340. var n = result.index-1;
  341. var char = code.charAt(n);
  342. while (!lineRegexp.test(char) && n>=0){
  343. value = char+value;
  344. n--;
  345. char = code.charAt(n);
  346. }
  347. n = this.keywordRegexp.lastIndex;
  348. char = code.charAt(n);
  349. while (!lineRegexp.test(char) && n<len){
  350. value = value+char;
  351. n++;
  352. char = code.charAt(n);
  353. }
  354. preIndex = this.keywordRegexp.lastIndex = n;
  355. return {"value": value, "preLine": preLine, "preIndex": preIndex};
  356. };
  357. _worker.findInDesigner_script = function(formData, key, module, designer, propertyDefinition, option, mode){
  358. var code = formData[key].code || formData[key];
  359. if (code){
  360. this.keywordRegexp.lastIndex = 0;
  361. var len = code.length;
  362. var preLine = 0;
  363. var preIndex = 0;
  364. var result;
  365. while ((result = this.keywordRegexp.exec(code)) !== null){
  366. var obj = _worker.findScriptLineValue(result, code, preLine, preIndex, len);
  367. preLine = obj.preLine;
  368. preIndex = obj.preIndex;
  369. _worker._findMessageReply(_worker._createFindMessageReplyData(module, designer, "", {
  370. "type": formData.type,
  371. "propertyType": propertyDefinition.type || "text",
  372. "propertyName": propertyDefinition.name,
  373. "name": formData.name || formData.id,
  374. "key": key,
  375. "value": obj.value,
  376. "line": preLine+1,
  377. "mode": mode
  378. }), option);
  379. }
  380. }
  381. };
  382. _worker.findInDesigner_events = function(formData, key, module, designer, propertyDefinition, option, mode){
  383. var eventObj = formData[key];
  384. Object.keys(eventObj).forEach(function(evkey){
  385. var code = eventObj[evkey].code;
  386. this.keywordRegexp.lastIndex = 0;
  387. var len = code.length;
  388. var preLine = 0;
  389. var preIndex = 0;
  390. var result;
  391. while ((result = this.keywordRegexp.exec(code)) !== null){
  392. var obj = _worker.findScriptLineValue(result, code, preLine, preIndex, len);
  393. preLine = obj.preLine;
  394. preIndex = obj.preIndex;
  395. _worker._findMessageReply(_worker._createFindMessageReplyData(module, designer, "", {
  396. "type": formData.type,
  397. "propertyType": propertyDefinition.type || "text",
  398. "propertyName": propertyDefinition.name,
  399. "name": formData.name || formData.id,
  400. "key": key,
  401. "evkey": evkey,
  402. "value": obj.value,
  403. "line": preLine+1,
  404. "mode": mode
  405. }), option);
  406. }
  407. });
  408. };
  409. _worker.findInDesigner_map = function(formData, key, module, designer, propertyDefinition, option, mode){
  410. var map = formData[key];
  411. Object.keys(map).forEach(function(evkey) {
  412. this.keywordRegexp.lastIndex = 0;
  413. var text = map[evkey];
  414. if (this.keywordRegexp.test(text)){
  415. _worker._findMessageReply(_worker._createFindMessageReplyData(module, designer, "", {
  416. "type": formData.type,
  417. "propertyType": propertyDefinition.type || "text",
  418. "propertyName": propertyDefinition.name,
  419. "name": formData.name || formData.id,
  420. "key": key,
  421. "value": evkey+": "+text,
  422. "mode": mode
  423. }), option);
  424. }
  425. });
  426. };
  427. _worker.findInDesigner_array = function(formData, key, module, designer, propertyDefinition, option, mode){
  428. var arr = formData[key];
  429. arr.forEach(function(v, i) {
  430. this.keywordRegexp.lastIndex = 0;
  431. var text = v.toString();
  432. if (this.keywordRegexp.test(text)){
  433. _worker._findMessageReply(_worker._createFindMessageReplyData(module, designer, "", {
  434. "type": formData.type,
  435. "propertyType": propertyDefinition.type || "text",
  436. "propertyName": propertyDefinition.name,
  437. "name": formData.name || formData.id,
  438. "line": i+1,
  439. "key": key,
  440. "value": text,
  441. "mode": mode
  442. }), option);
  443. }
  444. });
  445. };
  446. _worker.findInDesigner_objectArray = function(formData, key, module, designer, propertyDefinition, option, mode){
  447. var arr = formData[key];
  448. arr.forEach(function(map, i) {
  449. Object.keys(map).forEach(function(evkey) {
  450. this.keywordRegexp.lastIndex = 0;
  451. var text = map[evkey];
  452. if (this.keywordRegexp.test(text)){
  453. _worker._findMessageReply(_worker._createFindMessageReplyData(module, designer, "", {
  454. "type": formData.type,
  455. "propertyType": propertyDefinition.type || "text",
  456. "propertyName": propertyDefinition.name,
  457. "name": formData.name || formData.id,
  458. "line": i+1,
  459. "key": key,
  460. "value": evkey+": "+text,
  461. "mode": mode
  462. }), option);
  463. }
  464. });
  465. });
  466. };
  467. _worker.findInDesigner_duty = function(formData, key, module, designer, propertyDefinition, option, mode){
  468. var text = formData[key];
  469. if (text){
  470. var json = JSON.parse(text);
  471. json.forEach(function(duty, i) {
  472. this.keywordRegexp.lastIndex = 0;
  473. var text = duty.name;
  474. if (text) if (this.keywordRegexp.test(text)){
  475. _worker._findMessageReply(_worker._createFindMessageReplyData(module, designer, "", {
  476. "type": formData.type,
  477. "propertyType": propertyDefinition.type || "text",
  478. "propertyName": propertyDefinition.name,
  479. "name": formData.name || formData.id,
  480. "key": key,
  481. "line": i+1,
  482. "value": "name:"+text,
  483. "mode": mode
  484. }), option);
  485. }
  486. var code = duty.code;
  487. if (code){
  488. this.keywordRegexp.lastIndex = 0;
  489. var len = code.length;
  490. var idx = i+1;
  491. var preLine = 0;
  492. var preIndex = 0;
  493. var result;
  494. while ((result = this.keywordRegexp.exec(code)) !== null){
  495. var obj = _worker.findScriptLineValue(result, code, preLine, preIndex, len);
  496. preLine = obj.preLine;
  497. preIndex = obj.preIndex;
  498. _worker._findMessageReply(_worker._createFindMessageReplyData(module, designer, "", {
  499. "type": formData.type,
  500. "propertyType": propertyDefinition.type || "text",
  501. "propertyName": propertyDefinition.name+"(code)&nbsp;"+idx+"."+duty.name,
  502. "name": formData.name || formData.id,
  503. "key": key,
  504. "value": obj.value,
  505. "line": preLine+1,
  506. "mode": mode
  507. }), option);
  508. }
  509. }
  510. });
  511. }
  512. };
  513. _worker.findInDesigner_actions = function(formData, key, module, designer, propertyDefinition, option, mode){
  514. var arr = formData[key];
  515. arr.forEach(function(action, i) {
  516. this.keywordRegexp.lastIndex = 0;
  517. var text = action.text;
  518. if (text) if (this.keywordRegexp.test(text)){
  519. _worker._findMessageReply(_worker._createFindMessageReplyData(module, designer, "", {
  520. "type": formData.type,
  521. "propertyType": propertyDefinition.type || "text",
  522. "propertyName": propertyDefinition.name,
  523. "name": formData.name || formData.id,
  524. "key": key,
  525. "line": i+1,
  526. "value": "text:"+text,
  527. "mode": mode
  528. }), option);
  529. }
  530. var code = action.actionScript;
  531. if (code){
  532. this.keywordRegexp.lastIndex = 0;
  533. var len = code.length;
  534. var idx = i+1;
  535. var preLine = 0;
  536. var preIndex = 0;
  537. var result;
  538. while ((result = this.keywordRegexp.exec(code)) !== null){
  539. var obj = _worker.findScriptLineValue(result, code, preLine, preIndex, len);
  540. preLine = obj.preLine;
  541. preIndex = obj.preIndex;
  542. _worker._findMessageReply(_worker._createFindMessageReplyData(module, designer, "", {
  543. "type": formData.type,
  544. "propertyType": propertyDefinition.type || "text",
  545. "propertyName": propertyDefinition.name+"(actionScript)&nbsp;"+action.text,
  546. "name": formData.name || formData.id,
  547. "key": key,
  548. "value": obj.value,
  549. "line": preLine+1,
  550. "mode": mode
  551. }), option);
  552. }
  553. }
  554. code = action.condition;
  555. if (code){
  556. this.keywordRegexp.lastIndex = 0;
  557. var len = code.length;
  558. var idx = i+1;
  559. var preLine = 0;
  560. var preIndex = 0;
  561. var result;
  562. while ((result = this.keywordRegexp.exec(code)) !== null){
  563. var obj = _worker.findScriptLineValue(result, code, preLine, preIndex, len);
  564. preLine = obj.preLine;
  565. preIndex = obj.preIndex;
  566. _worker._findMessageReply(_worker._createFindMessageReplyData(module, designer, "", {
  567. "type": formData.type,
  568. "propertyType": propertyDefinition.type || "text",
  569. "propertyName": propertyDefinition.name+"(condition)&nbsp;"+action.text,
  570. "name": formData.name || formData.id,
  571. "key": key,
  572. "value": obj.value,
  573. "line": preLine+1,
  574. "mode": mode
  575. }), option);
  576. }
  577. }
  578. });
  579. };
  580. _worker.findInDesigner_filter = function(formData, key, module, designer, propertyDefinition, option, mode){
  581. var arr = formData[key];
  582. arr.forEach(function(filter, i) {
  583. this.keywordRegexp.lastIndex = 0;
  584. var text = filter.path;
  585. if (text) if (this.keywordRegexp.test(text)){
  586. _worker._findMessageReply(_worker._createFindMessageReplyData(module, designer, "", {
  587. "type": formData.type,
  588. "propertyType": propertyDefinition.type || "text",
  589. "propertyName": propertyDefinition.name,
  590. "name": formData.name || formData.id,
  591. "key": key,
  592. "line": i+1,
  593. "value": "path:"+text,
  594. "mode": mode
  595. }), option);
  596. }
  597. var code = filter.code.code;
  598. if (code){
  599. this.keywordRegexp.lastIndex = 0;
  600. var len = code.length;
  601. var idx = i+1;
  602. var preLine = 0;
  603. var preIndex = 0;
  604. var result;
  605. while ((result = this.keywordRegexp.exec(code)) !== null){
  606. var obj = _worker.findScriptLineValue(result, code, preLine, preIndex, len);
  607. preLine = obj.preLine;
  608. preIndex = obj.preIndex;
  609. _worker._findMessageReply(_worker._createFindMessageReplyData(module, designer, "", {
  610. "type": formData.type,
  611. "propertyType": propertyDefinition.type || "text",
  612. "propertyName": propertyDefinition.name+"(actionScript)&nbsp;"+filter.path,
  613. "name": formData.name || formData.id,
  614. "key": key,
  615. "value": obj.value,
  616. "line": preLine+1,
  617. "mode": mode
  618. }), option);
  619. }
  620. }
  621. });
  622. };
  623. _worker.findInDesigner_serial = function(formData, key, module, designer, propertyDefinition, option, mode){
  624. var text = formData[key];
  625. if (text) {
  626. var json = JSON.parse(text);
  627. json.forEach(function(serial, i) {
  628. this.keywordRegexp.lastIndex = 0;
  629. switch (serial.key){
  630. case "text":
  631. case "unitAttribute":
  632. if (this.keywordRegexp.test(serial.value)){
  633. _worker._findMessageReply(_worker._createFindMessageReplyData(module, designer, "", {
  634. "type": formData.type,
  635. "propertyType": propertyDefinition.type || "text",
  636. "propertyName": propertyDefinition.name+"&nbsp"+serial.key+"&nbsp",
  637. "name": formData.name || formData.id,
  638. "key": key,
  639. "value": serial.value
  640. }), option);
  641. }
  642. break;
  643. case "script":
  644. var code = serial.value;
  645. if (serial.value){
  646. if (code){
  647. this.keywordRegexp.lastIndex = 0;
  648. var len = code.length;
  649. var idx = i+1;
  650. var preLine = 0;
  651. var preIndex = 0;
  652. var result;
  653. while ((result = this.keywordRegexp.exec(code)) !== null){
  654. var obj = _worker.findScriptLineValue(result, code, preLine, preIndex, len);
  655. preLine = obj.preLine;
  656. preIndex = obj.preIndex;
  657. _worker._findMessageReply(_worker._createFindMessageReplyData(module, designer, "", {
  658. "type": formData.type,
  659. "propertyType": propertyDefinition.type || "text",
  660. "propertyName": propertyDefinition.name+"&nbsp"+serial.key+"&nbsp",
  661. "name": formData.name || formData.id,
  662. "key": key,
  663. "value": obj.value,
  664. "line": preLine+1
  665. }), option);
  666. }
  667. }
  668. }
  669. break;
  670. default:
  671. //nothing
  672. }
  673. });
  674. }
  675. };
  676. _worker.findInDesigner_projection = function(formData, key, module, designer, propertyDefinition, option, mode){
  677. var text = formData[key];
  678. if (text) {
  679. var json = JSON.parse(text);
  680. json.forEach(function(projection, i) {
  681. this.keywordRegexp.lastIndex = 0;
  682. var text = projection.path+"->"+projection.name;
  683. if (this.keywordRegexp.test(text)){
  684. _worker._findMessageReply(_worker._createFindMessageReplyData(module, designer, "", {
  685. "type": formData.type,
  686. "propertyType": propertyDefinition.type || "text",
  687. "propertyName": propertyDefinition.name,
  688. "name": formData.name || formData.id,
  689. "key": key,
  690. "value": text,
  691. "line": i
  692. }), option);
  693. }
  694. });
  695. }
  696. };
  697. _worker.findInDesigner_text = function(formData, key, module, designer, propertyDefinition, option, mode){
  698. this.keywordRegexp.lastIndex = 0;
  699. var text = formData[key];
  700. if (this.keywordRegexp.test(text)){
  701. _worker._findMessageReply(_worker._createFindMessageReplyData(module, designer, "", {
  702. "type": formData.type,
  703. "propertyType": propertyDefinition.type || "text",
  704. "propertyName": propertyDefinition.name,
  705. "name": formData.name || formData.id,
  706. "key": key,
  707. "value": text,
  708. "mode": mode
  709. }), option);
  710. }
  711. };
  712. _worker.findInDesignerProperty = function(key, propertyDefinition, formData, option, module, designer, mode){
  713. if (propertyDefinition){
  714. switch (propertyDefinition.type){
  715. case "html":
  716. _worker.findInDesigner_script(formData, key, module, designer, propertyDefinition, option, mode);
  717. break;
  718. case "script":
  719. case "css":
  720. case "sql":
  721. _worker.findInDesigner_script(formData, key, module, designer, propertyDefinition, option, mode);
  722. break;
  723. case "events":
  724. _worker.findInDesigner_events(formData, key, module, designer, propertyDefinition, option, mode);
  725. break;
  726. case "map":
  727. _worker.findInDesigner_map(formData, key, module, designer, propertyDefinition, option, mode);
  728. break;
  729. case "array":
  730. _worker.findInDesigner_array(formData, key, module, designer, propertyDefinition, option, mode);
  731. break;
  732. case "object-array":
  733. _worker.findInDesigner_objectArray(formData, key, module, designer, propertyDefinition, option, mode);
  734. break;
  735. case "duty":
  736. _worker.findInDesigner_duty(formData, key, module, designer, propertyDefinition, option, mode);
  737. break;
  738. case "actions":
  739. _worker.findInDesigner_actions(formData, key, module, designer, propertyDefinition, option, mode);
  740. break;
  741. case "filter":
  742. _worker.findInDesigner_filter(formData, key, module, designer, propertyDefinition, option, mode);
  743. break;
  744. case "serial":
  745. _worker.findInDesigner_serial(formData, key, module, designer, propertyDefinition, option, mode);
  746. break;
  747. case "projection":
  748. _worker.findInDesigner_projection(formData, key, module, designer, propertyDefinition, option, mode);
  749. break;
  750. default:
  751. _worker.findInDesigner_text(formData, key, module, designer, propertyDefinition, option, mode);
  752. }
  753. }
  754. }
  755. _worker.findInDesigner = function(formData, option, module, designer, mode){
  756. Object.keys(formData).forEach(function(key){
  757. var propertyDefinition = this.designerPropertysData.form[key];
  758. _worker.findInDesignerProperty(key, propertyDefinition, formData, option, module, designer, mode);
  759. });
  760. };
  761. _worker.decodeJsonString = function(str){
  762. var tmp = "[\""+str+"\"]";
  763. var dataObj = (JSON.parse(tmp));
  764. return dataObj[0];
  765. };
  766. _worker._getDesignerData = function(designer, module){
  767. var action = "";
  768. switch (designer.designerType){
  769. case "form":
  770. if (module=="processPlatform") action = this.findData.actions.getProcessForm
  771. else if (module=="cms") action = this.findData.actions.getCmsForm;
  772. break;
  773. case "process":
  774. action = this.findData.actions.getProcessProcess;
  775. break;
  776. }
  777. if (action){
  778. var formPromise = _worker.action.sendRequest(_worker._getRequestOption({"url": action}, {"id": designer.designerId}));
  779. if (!this.designerPropertysData) this.designerPropertysData = _worker.action.sendRequest(_worker._getRequestOption({"url": "../x_component_FindDesigner/propertys.json"}));
  780. return Promise.all([formPromise, this.designerPropertysData]);
  781. }
  782. };
  783. _worker._findInDesigner_form = function(formData, designer, option, module){
  784. var mode = formData.json.mode;
  785. _worker.findInDesigner(formData.json, option, module, designer, mode);
  786. for (key in formData.json.moduleList){
  787. _worker.findInDesigner(formData.json.moduleList[key], option, module, designer, mode);
  788. }
  789. };
  790. _worker._findProcessPlatformParse_form = function(designer, option, module){
  791. if (designer.patternList && designer.patternList.length){
  792. var p = _worker._getDesignerData(designer, module);
  793. if (p){
  794. var patternPropertys = designer.patternList.map(function(a){return a.property;});
  795. p.then(function(arr){
  796. var formJson = arr[0];
  797. this.designerPropertysData = arr[1];
  798. if (patternPropertys.indexOf("data")!=-1){
  799. var formData = JSON.parse(_worker.decodeJsonString(formJson.data.data));
  800. _worker._findInDesigner_form(formData, designer, option, module);
  801. }
  802. if (patternPropertys.indexOf("mobileData")!=-1){
  803. var formData = JSON.parse(_worker.decodeJsonString(formJson.data.mobileData));
  804. _worker._findInDesigner_form(formData, designer, option, module)
  805. }
  806. }, function(){});
  807. }
  808. }
  809. };
  810. _worker._findProcessPlatformParse_process = function(designer, option, module){
  811. if (designer.patternList && designer.patternList.length){
  812. var p = _worker._getDesignerData(designer, module);
  813. if (p){
  814. p.then(function(arr){
  815. var processData = arr[0].data;
  816. this.designerPropertysData = arr[1];
  817. designer.patternList.forEach(function(pattern){
  818. if (pattern.elementType === "process"){
  819. debugger;
  820. var propertyDefinition = this.designerPropertysData.process[pattern.property];
  821. processData.type = pattern.elementType;
  822. _worker.findInDesignerProperty(pattern.property, propertyDefinition, processData, option, module, designer);
  823. }else if (pattern.elementType === "route") {
  824. for (var i=0; i<processData.routeList.length; i++){
  825. if (processData.routeList[i].id===pattern.elementId) break;
  826. }
  827. Object.keys(processData.routeList[i]).forEach(function(key){
  828. var propertyDefinition = this.designerPropertysData.process[key];
  829. processData.routeList[i].type = pattern.elementType;
  830. _worker.findInDesignerProperty(key, propertyDefinition, processData.routeList[i], option, module, designer);
  831. }.bind(this));
  832. }else{
  833. if (pattern.elementType=="begin" && pattern.elementId===processData.begin.id){
  834. Object.keys(processData.begin).forEach(function(key){
  835. var propertyDefinition = this.designerPropertysData.process[key];
  836. processData.begin.type = pattern.elementType;
  837. _worker.findInDesignerProperty(key, propertyDefinition, processData.begin, option, module, designer);
  838. }.bind(this));
  839. }else{
  840. var arrKey = pattern.elementType+"List";
  841. for (var i=0; i<processData[arrKey].length; i++){
  842. if (processData[arrKey][i].id===pattern.elementId) break;
  843. }
  844. Object.keys(processData[arrKey][i]).forEach(function(key){
  845. var propertyDefinition = this.designerPropertysData.process[key];
  846. processData[arrKey][i].type = pattern.elementType;
  847. _worker.findInDesignerProperty(key, propertyDefinition, processData[arrKey][i], option, module, designer);
  848. }.bind(this));
  849. }
  850. }
  851. switch (pattern.elementType){
  852. case "process":
  853. break;
  854. case "activity":
  855. break;
  856. case "route":
  857. break;
  858. }
  859. // var propertyDefinition = this.designerPropertysData.process[pattern.property];
  860. // _worker.findInDesignerProperty(pattern.property, propertyDefinition, option, module, designer);
  861. });
  862. //var propertyDefinition = this.designerPropertysData.form[key];
  863. // elementId: "7ce87b0e-7fa8-4bea-bc4b-bbf816f584e7"
  864. // elementName: "开始"
  865. // elementType: "activity"
  866. // property: "validationScriptText"
  867. // propertyValue: "路由校验"
  868. // if (patternPropertys.indexOf("data")!=-1){
  869. // var formData = JSON.parse(_worker.decodeJsonString(formJson.data.data));
  870. // _worker._findInDesigner_form(formData, designer, option, module);
  871. // }
  872. // if (patternPropertys.indexOf("mobileData")!=-1){
  873. // var formData = JSON.parse(_worker.decodeJsonString(formJson.data.mobileData));
  874. // _worker._findInDesigner_form(formData, designer, option, module)
  875. // }
  876. }, function(){});
  877. }
  878. }
  879. };
  880. _worker._findProcessPlatformParse = function(resultList, option, module){
  881. resultList.forEach(function(designer){
  882. switch (designer.designerType){
  883. case "script":
  884. _worker._findProcessPlatformParse_script(designer, option, module);
  885. break;
  886. case "form":
  887. _worker._findProcessPlatformParse_form(designer, option, module);
  888. break;
  889. case "process":
  890. _worker._findProcessPlatformParse_process(designer, option, module);
  891. break;
  892. }
  893. });
  894. };
  895. _worker._doFindDesigner = function(option, idx){
  896. var option = this.filterOptionList[idx];
  897. var res = _worker._getRequestOption({
  898. "method": "post",
  899. "url": this.findData.actions.findAction,
  900. "body": JSON.stringify(option),
  901. "debug": this.findData.debug,
  902. "token": this.findData.token
  903. });
  904. this.action.sendRequest(res).then(function(json){
  905. if (json.data.processPlatformList && json.data.processPlatformList.length){
  906. // var worker = new Worker("../x_component_FindDesigner/PatternWorker.js");
  907. // worker.onmessage = function(e) {
  908. // if (e.data) _worker._findMessageReply(e.data, option);
  909. // }.bind(this);
  910. // worker.postMessage({
  911. // "parser": "_findProcessPlatformParse",
  912. // "actions": _worker.findData.actions,
  913. // "option": option,
  914. // "pattern": json.data.processPlatformList
  915. // });
  916. _worker._findProcessPlatformParse(json.data.processPlatformList, option, "processPlatform");
  917. }
  918. if (json.data.cmsList && json.data.cmsList.length){
  919. _worker._findProcessPlatformParse(json.data.cmsList, option, "cms");
  920. }
  921. if (json.data.portalList && json.data.portalList.length){
  922. _worker._findProcessPlatformParse(json.data.portalList, option, "portal");
  923. }
  924. if (json.data.queryList && json.data.queryList.length){
  925. }
  926. if (json.data.serviceList && json.data.serviceList.length){
  927. _worker._findProcessPlatformParse(json.data.serviceList, option, "service");
  928. }
  929. _worker._findOptionReply();
  930. idx++;
  931. if (this.filterOptionList.length>idx) _worker._doFindDesigner(null, idx);
  932. //this.filterOptionList[idx];
  933. //_worker._findMessageReply(json.data, option);
  934. }, function(xhr){
  935. _worker._findOptionReply(null);
  936. _worker._findMessageReply(null);
  937. idx++;
  938. if (this.filterOptionList.length>idx) _worker._doFindDesigner(null, idx);
  939. });
  940. },
  941. _worker._doFindDesignerFromFilterOption = function(){
  942. var idx = 0;
  943. //this.filterOptionList.forEach(function(option){
  944. // _worker._doFindDesigner(option, idx);
  945. //});
  946. _worker._doFindDesigner(null, idx);
  947. },
  948. onmessage = function(e) {
  949. this.findData = e.data;
  950. var moduleList = this.findData.filterOption.moduleList;
  951. this.findData.filterOption.moduleList = [];
  952. _worker._setFilterOptionRegex();
  953. this.filterOptionTemplete = JSON.stringify(this.findData.filterOption);
  954. this.filterOptionList = [];
  955. Promise.all(_worker._parseFindModule(moduleList)).then(function(){
  956. // this.filterOptionList[0].moduleList=[];
  957. // //_worker._doFindDesigner(this.filterOptionList[0]);
  958. // this.filterOptionList = [this.filterOptionList[0]];
  959. _worker._readyMessageReply();
  960. _worker._doFindDesignerFromFilterOption();
  961. });
  962. //"moduleType": "cms", "flagList": [];
  963. // designerTypes
  964. // flagList = [{
  965. // "id": "dddd",
  966. // "desingerList": [
  967. // {
  968. // "desingerType": "脚本(script)表单(form)流程(process)页面(page)部件(widget)视图(view)脚本(statement)统计(stat",
  969. // "id": ""
  970. // },
  971. // {
  972. // "desingerType": "脚本(script)表单(form)流程(process)页面(page)部件(widget)视图(view)脚本(statement)统计(stat",
  973. // "id": ""
  974. // }
  975. // ]
  976. // }]
  977. _worker._receiveMessageReply();
  978. //_worker.action.sendRequest(e.data);
  979. }