page.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. let nowFileName = "";
  2. function InitTable() {
  3. window.TabInstance = $('#filterTable').dxDataGrid({
  4. dataSource: [],
  5. keyExpr: 'resource_detail_id',
  6. remoteOperations: false,
  7. searchPanel: {
  8. visible: true,
  9. highlightCaseSensitive: true,
  10. },
  11. groupPanel: { visible: true },
  12. grouping: {
  13. allowCollapsing: true,
  14. autoExpandAll: true,
  15. expandMode: "rowClick"
  16. },
  17. selection: {
  18. mode: 'single'
  19. },
  20. allowColumnReordering: true,
  21. rowAlternationEnabled: true,
  22. showBorders: true,
  23. height: '100%',
  24. columns: [
  25. {
  26. dataField: 'JS文件',
  27. dataType: 'JS文件',
  28. groupIndex: 0
  29. },
  30. {
  31. dataField: "过滤器",
  32. caption: "过滤器"
  33. },
  34. {
  35. dataField: '选择器类型',
  36. dataType: '选择器类型',
  37. },
  38. {
  39. dataField: '调用方式',
  40. dataType: '调用方式',
  41. },
  42. {
  43. dataField: '所在位置',
  44. dataType: '所在位置',
  45. },
  46. {
  47. dataField: 'DOM操作分类',
  48. dataType: 'DOM操作分类',
  49. }
  50. ],
  51. onContentReady(e) {
  52. },
  53. onSelectionChanged: function (selectedItems) {
  54. let data = selectedItems.selectedRowsData[0];
  55. if (data) {
  56. let ast = data.astJSON;
  57. if (data.JS文件 !== nowFileName) {
  58. nowFileName = data.JS文件;
  59. let code = window.fileList.find(o => o.name === data.JS文件).code;
  60. //更改JS代码
  61. jsCode.SetCode(code);
  62. //更改ast
  63. //window.ShowASTTree(ast, document.getElementById('astJson'))
  64. }
  65. //jscode定位
  66. let { defineNode: { iid, loc: { end, start } } } = data.source_data;
  67. {
  68. //移出所有高亮
  69. jsCode.RemoveAllHighlight();
  70. //设置高亮
  71. jsCode.CreateHighlight({ startLine: start?.line, startColumn: start?.column + 1, endLine: end?.line, endColumn: end?.column + 1 });
  72. }
  73. {
  74. // //ast定位
  75. // let jsonNode = document.getElementById(iid);
  76. // if (jsonNode) {
  77. // let textNode = Array.from(jsonNode.parentNode.childNodes).find(item => item.classList.contains("node-text"));
  78. // $("#astJson").find(".monaco-highlight").removeClass("monaco-highlight");
  79. // textNode?.classList?.add("monaco-highlight");
  80. // scrollTo(jsonNode)
  81. // }
  82. }
  83. }
  84. }
  85. }).dxDataGrid("instance");
  86. window.CSSTabInstance = $('#cssJson').dxDataGrid({
  87. dataSource: [],
  88. keyExpr: 'id',
  89. remoteOperations: false,
  90. searchPanel: {
  91. visible: true,
  92. highlightCaseSensitive: true,
  93. },
  94. selection: {
  95. mode: 'single'
  96. },
  97. allowColumnReordering: true,
  98. rowAlternationEnabled: true,
  99. showBorders: true,
  100. height: '100%',
  101. columns: [
  102. {
  103. dataField: "key",
  104. caption: "属性名称"
  105. },
  106. {
  107. dataField: 'value',
  108. caption: '属性值',
  109. }
  110. ]
  111. }).dxDataGrid("instance");
  112. }
  113. chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
  114. if (request.msgToPopup === "发送页面") {
  115. //初始化JS代码编辑器
  116. window.jsCode = new CodeEditor();
  117. jsCode.InitEditor($('#jscode')[0], false, false, [], false);
  118. jsCode.dataType = 3;
  119. InitTable();
  120. let ret = request.data;
  121. console.log(ret);
  122. let { jslist, targe, csslist } = ret;
  123. parseCodeToAST(jslist.map(item => {
  124. return {
  125. code: item.data,
  126. name: item.fileName
  127. };
  128. }))
  129. let data = window.findSelector();
  130. let id = $(targe).attr('id');
  131. let classList = $(targe).attr('class').split(' ');
  132. data = data.filter(m => {
  133. let v = m.过滤器;
  134. if (v.includes(id)) return true;
  135. if (classList.length > 0) {
  136. for (const classitem of classList) {
  137. if (v.includes(classitem)) return true;
  138. }
  139. }
  140. });
  141. TabInstance.option({
  142. "dataSource": data
  143. });
  144. CSSTabInstance.option({
  145. "dataSource": Object.entries(csslist).map((a, index) => ({ id: index ,key: a[0], value: a[1] }))
  146. })
  147. }
  148. })