PageSourceSearch

https://www.pkudata.com/zztj/scripts/ext/analyser/AnalysisTool.js

js pkudata.com collected 2026-10-07 22:16:15 UTC 10,338 bytes, 292 lines download raw bytes

1w.importStatic( w.oo, w.scml );
2
3var AnalysisTool = function () {
4	
5	
6	var checkFieldValues =
7		function (values) {
8			return ((values.length == 1 && values[0] == "") ? [] : values); };
9		
10	var collectFormValues =
11		function (form, params) {
12			form = $(form).get(0);
13			var values = { };
14			foreach(
15				function (pname, param) {
16					switch (param.type) {
17					case "hidden" :
18					case "string" :
19						if (!form[pname]) { return; }
20						values[pname] = checkFieldValues(
21											form[pname].value
22												.replace(/^\s+|\s+$/g, "")
23												.replace(/\s+/g, " ")
24												.split(" "));
25						break;
26					case "checkbox" :
27						if (!form[pname]) { return; }
28						values[pname] = [ form[pname].checked ? "是" : "否" ];
29						break;
30					case "radio" :
31						if (!form[pname]) { return; }
32						foreach(function (item) {
33									if (item.checked) {
34										values[pname] = [ item.value ]; } },
35								form[pname]);
36						break;
37					case "multi-checkbox" :
38						if (!form[pname]) { return; }
39						values[pname] = [];
40						var value = { name : pname, values : [] };
41						foreach(
42							function (item) {
43								if (item.checked) {
44									values[pname].push(item.value); } },
45							form[pname]);
46						break;
47					case "range" :
48						if (!form[pname + "_" + param.name1]) { return; }
49						values[pname + "_" + param.name1] = 
50							checkFieldValues([ form[pname + "_" + param.name1].value ]);
51						values[pname + "_" + param.name2] =
52							checkFieldValues([ form[pname + "_" + param.name2].value ]);
53						break;
54					case "double" :
55						if (!form[pname + "_" + param.subname]) { return; }
56						values[pname + "_" + param.name] = 
57							checkFieldValues([ form[pname + "_" + param.name].value ]);
58						values[pname + "_" + param.subname] =
59							checkFieldValues([ form[pname + "_" + param.subname].value ]);
60						break;
61					case "double2" :						
62						if (form[pname + "_" + param.subname]) {
63							checkFieldValues.s1 = form[pname + "_" + param.name].value;
64							checkFieldValues.s2 = form[pname + "_" + param.subname].value;
65							checkFieldValues.ary1 = [];
66							checkFieldValues.ary1.push("," + checkFieldValues.s1);
67							checkFieldValues.ary1.push(checkFieldValues.s2 ? "-" : "");
68							checkFieldValues.ary1.push(checkFieldValues.s2 + ",");
69							if(checkFieldValues.s1 != "" || checkFieldValues.s2 != "" ){
70							values[pname] = 
71								checkFieldValues([checkFieldValues.ary1.join("")]);
72							}
73						}
74						break;
75					case "twoselect" :
76						if(!form[pname + "_" + param.name1]){ return; }
77						values[pname + "_" + param.name1] = checkFieldValues([form[pname + "_" + param.name1].value]);
78						values[pname + "_" + param.name2] = checkFieldValues([form[pname + "_" + param.name2].value]);						
79						break;
80					case "select" :
81						if (!form[pname]) {return;}
82						values[pname] = checkFieldValues([form[pname].value]);
83						break;
84					}
85				}, params);
86			
87			return values; };
88		
89	var buildScript =
90		function (name, analysis, form) {
91			var submit = $("input[type='button']", $(form));
92			var type = submit.val();
93			var subtype = (type != "相關性分析") ? "" :
94				$("input[name='相關類型']", form).val().replace(/^相關/, "");
95			var params =
96				(type == "全景分析") ?	analysis.queryParams :
97				(type == "相關性分析") ?	analysis.relationParams[subtype] :
98				(type == "聚類分析") ?	analysis.clusterParams : 
99				(type == "統計分析") ?	analysis.statisticParams : [];
100			var script =
101				$template("analysis-script")(name, type, collectFormValues(form, params))
102					.replace(/[\n\r]/g, " ")
103					.replace(/\s+/g, " ")
104					.replace(/\s\)/g, ")");
105//			alert(script);
106			return script; };
107	
108	var bindFormEvents =
109		function (analysisTool, analysisForm, name, analysis) {
110			
111			var bind = function (form, pname, p) {
112				if (!(p.type == "double" || p.type == "double2")) {
113					return;
114				}
115				var main = $("select[name='" + pname + "_" + p.name + "']", form);
116				var sub  = $("select[name='" + pname + "_" + p.subname + "']", form);
117				main.change(function () {
118					sub.html($template("select-options")(p.subvalues[main.val()]));
119					sub.val("");
120				});
121			};
122			
123			var scope = analysisForm.body.dom;
124			var pform = $(".analysis_" + name + "_panorama");
125			foreach(function (qpname, qp) {
126				bind(pform, qpname, qp);
127			}, analysis.queryParams);
128			
129			foreach(function (rname, r) {
130				var rform = $(".analysis_" + name + "_rel_" + rname, scope);
131				foreach(function (rpname, rp) {
132					bind(rform, rpname, rp);
133				}, r);
134			}, analysis.relationParams);
135
136			var cform = $(".analysis_" + name + "_clustering", scope);
137			foreach(function (cpname, cp) {
138				bind(cform, cpname, cp);
139			}, analysis.clusterParams);
140			
141			var sform = $(".analysis_" + name + "_statistics", scope);
142			foreach(function (qpname, qp) {
143				bind(sform, qpname, qp);
144			}, analysis.statisticParams);
145			
146			
147			//080718 add by zhout start
148			
149			var tr = $("tr",cform).eq(1);	
150			$("input[type='radio'][value='事件']",cform).click(function(){
151				tr.html($template("select")(DATA.selectData));							
152				var main = $("select[name='事件類型_主類型']", cform);
153				var sub  = $("select[name='事件類型_次類型']", cform);
154				main.change(function () {
155					sub.html($template("select-options")(DATA.selectData["事件類型"].subvalues[main.val()]));
156					sub.val("");
157				});		
158				
159				delete analysis.clusterParams["類目關鍵字"];
160				analysis.clusterParams["事件類型"] = DATA.selectData["事件類型"];
161			});
162			
163			$("input[type='radio'][value!='事件']",cform).each(function (i) {
164				var typeKeyword = analysis.clusterParams["類目關鍵字"];
165				$(this).click(function(){
166					var tdStr1   = "<td class='queryAttr analysisAttr'><label>類目關鍵字:</label></td><td class='tdright'>";
167					var tdStr2 = "<input name='類目關鍵字' class='string' type='text' value='' /></td>";
168					tr.html(tdStr1 + tdStr2);	
169					
170					delete analysis.clusterParams["事件類型"];
171					analysis.clusterParams["類目關鍵字"] = typeKeyword;
172				});
173			});
174			
175			//080718 add by zhout end
176			var forms = $("form", analysisForm.body.dom);
177			foreach(
178				function (form) {					
179					function dosubmit() {						
180						var type = submit.val();
181						var val = null;
182						var boo = false;
183						switch(type) {
184							case "全景分析" : 
185								var inputs = $("input[type!='button']", form);
186								var selects = $("select",form);
187								for(var i=0;i<inputs.length;i++) {
188									val = inputs[i].value;
189									if(val!="" && val!=null) {
190											boo = true;		}}								
191								for(var j=0;j<selects.length;j++) {
192									val = selects[j].value;
193									if(val!="" && val!=null){
194										boo = true;         }}																	
195								if(!boo){
196									Ext.Msg.alert('抱歉!', 
197												   "请在输入框中输入或在下拉列表中选择至少一个检索条件",
198												   function(){$(inputs[0]).focus();});
199									return;
200								}break;
201							
202							case "相關性分析" : 							
203								var inputs2 = $("input[type='text']",form);
204								var selects2 = $("select[class='double-main']",form);
205								var selet = selects2[0];				
206								for(var e=0;e<inputs2.length;e++) {
207									val = inputs2[e].value;
208									var iname = inputs2[e].name;
209									if(val=="" || val==null) {
210										Ext.Msg.alert('抱歉!', "请输入:" + iname,function(){$(inputs2[e]).focus();});
211										return; } }																	
212								if(selet){									
213									if(selet.value==""||selet.value==null){
214											Ext.Msg.alert('抱歉!', "请输入:" + selet.name,function(){$(selet).focus();});
215											return;  }									
216								}break;								
217							
218							case "聚類分析" : 
219								var radios = $("input[type='radio']",form);
220								var inputs3 = $("input[name='最少元素']",form);								
221								$(radios).each(function(i){
222									if(this.checked == true) boo = true; });	 
223							   if(!boo){
224									Ext.Msg.alert('抱歉!', "请选择聚类类型",function(){$(radios[0]).focus();} );
225									return; }
226								if(inputs3[0] && (inputs3[0].value=="" || inputs3[0].value == null)) {
227										Ext.Msg.alert('抱歉!', "请输入:" + inputs3[0].name,function(){$(inputs3[0]).focus();});
228										return; 
229								}break;	
230														
231						}
232						analysisTool.doAnalysis(buildScript(name, analysis, form)); }
233						
234					$(form).keydown(function(event){
235						if(event.keyCode==13){
236							dosubmit();
237						}
238					});
239					var submit = $("input[type='button']", form);			
240					submit.click(dosubmit);
241				}, forms);
242		};
243			
244	var constructor = function () {
245
246		var createAnalysisForm =
247			function (analysisTool, name, analysis) {
248				var analysisForm =
249					new Ext.Panel({
250						title :	"分析:" + name,
251						html :	$template("analysis-form")(name, analysis) });
252					analysisForm.on({
253						"bodyresize" :	function () {
254											bindFormEvents(analysisTool, analysisForm, name, analysis); },
255						scope :			this,
256						single :		true });
257
258				return analysisForm; };
259
260		var createPanels =
261			function (analysisTool) {
262				var analysisForms =
263					map(function (name, analysis) {
264							return createAnalysisForm(analysisTool, name, analysis); },
265						DATA.analysises,
266						true);
267				return { analysisForms : analysisForms }; };
268
269		var createDefaultOpts = 
270			function (analysisTool) {
271				return {
272					autoScroll :	false,
273					plain :			true,
274					layout :		"accordion",
275					activeItem :	analysisTool.analysisForms.length - 1,
276					layoutConfig :	{ animate : false },
277					defaults :		{ autoShow : true, autoScroll : true, border : false },
278					items :			analysisTool.analysisForms }; };
279
280		var constructor =
281			function (userOpts) {
282				copyMembers(this, createPanels(this));
283				this.supr(copyMembers({ }, createDefaultOpts(this), userOpts)); };
284
285		return constructor; } ();
286
287	var methods = {
288
289		doAnalysis :	function (script) {
290							UNIMPLEMENT_METHOD(); } };
291
292	return extendClass(Ext.Panel, constructor, methods); } (); 

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.