Test Failed
Push — master ( 357bf5...71cdad )
by Russell
03:53
created

external-content/javascript/ExternalContentUpdate.js   C

Complexity

Total Complexity 54
Complexity/F 2.57

Size

Lines of Code 297
Function Count 21

Duplication

Duplicated Lines 297
Ratio 100 %

Importance

Changes 0
Metric Value
wmc 54
eloc 163
c 0
b 0
f 0
dl 297
loc 297
rs 6.4799
mnd 33
bc 33
fnc 21
bpm 1.5713
cpm 2.5714
noi 44

How to fix   Duplicated Code    Complexity   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

Complexity

 Tip:   Before tackling complexity, make sure that you eliminate any duplication first. This often can reduce the size of classes significantly.

Complex classes like external-content/javascript/ExternalContentUpdate.js often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

1
/**
2
 * Configuration for the left hand tree
3
 */
4
if(typeof SiteTreeHandlers == 'undefined') SiteTreeHandlers = {};
5
// SiteTreeHandlers.parentChanged_url = 'admin/assets/ajaxupdateparent';
6
// SiteTreeHandlers.orderChanged_url = 'admin/assets/ajaxupdatesort';
7
SiteTreeHandlers.controller_url = 'admin/external-content';
8
SiteTreeHandlers.loadPage_url = SiteTreeHandlers.controller_url + '/getitem';
9
SiteTreeHandlers.loadTree_url = SiteTreeHandlers.controller_url + '/getsubtree';
10
SiteTreeHandlers.showRecord_url = SiteTreeHandlers.controller_url + '/show/';
11
12
13
var _HANDLER_FORMS = {
14
	addpage : 'addpage_options',
15
	deletepage : 'Form_DeleteItemsForm',
16
	sortitems : 'sortitems_options'
17
};
18
19
/**
20
 * Set up save folder name action
21
 */
22
if (CMSRightForm) {
23
	CMSRightForm.prototype.loadURLFromServer = function(url) {
24
			var urlParts = url.match( /ID=(\d+)(|.*)?/ );
25
			var id = urlParts ? urlParts[1] : null;
26
27
			if( !url.match( /^https?:\/\/.*/ ) )
28
				url = document.getElementsByTagName('base')[0].href + url;
29
30
			new Ajax.Request( url + '&ajax=1', {
31
				asynchronous : true,
32
				onSuccess : function( response ) {
33
					$('Form_EditForm').successfullyReceivedPage(response,id);
34
				},
35
				onFailure : function(response) {
36
					alert(response.responseText);
37
					errorMessage('error loading page',response);
38
				}
39
			});
40
	};
41
42
	CMSRightForm.prototype.successfullyReceivedPage = function(response,pageID) {
43
		var loadingNode = $('sitetree').loadingNode;
44
45
		// not needed with compound IDs
46
		//if( loadingNode && pageID && parseInt( $('sitetree').getIdxOf( loadingNode ) ) != pageID ) {
47
			// return;
48
		// }
49
50
		// must wait until the javascript has finished
51
		document.body.style.cursor = 'wait';
52
53
		this.loadNewPage(response.responseText);
54
55
		var subform;
56
		if(subform = $('Form_MemberForm')) subform.close();
57
		if(subform = $('Form_SubForm')) subform.close();
58
59
		if(this.elements.ID) {
60
			this.notify('PageLoaded', this.elements.ID.value);
61
		}
62
63
		if(this.receivingID) {
64
			// Treenode might not exist if that part of the tree is closed
65
			var treeNode = loadingNode ? loadingNode : $('sitetree').getTreeNodeByIdx(this.receivingID);
66
			if(treeNode) {
67
				$('sitetree').setCurrentByIdx(treeNode.getIdx());
68
				treeNode.removeNodeClass('loading');
69
			}
70
			statusMessage('');
71
		}
72
73
		// must wait until the javascript has finished
74
		document.body.style.cursor = 'default';
75
76
	};
77
78
	CMSRightForm.prototype.getPageFromServer = function(id, treeNode) {
79
			if(id) {
80
				this.receivingID = id;
81
82
				// Treenode might not exist if that part of the tree is closed
83
				if(!treeNode) treeNode = $('sitetree').getTreeNodeByIdx(id);
84
85
				if(treeNode) {
86
					$('sitetree').loadingNode = treeNode;
87
					treeNode.addNodeClass('loading');
88
					url = treeNode.aTag.href + (treeNode.aTag.href.indexOf('?')==-1?'?':'&') + 'ajax=1';
89
				}
90
				if(SiteTreeHandlers.loadPage_url) {
91
					var sep = (SiteTreeHandlers.loadPage_url.indexOf('?') == -1) ? '?' : '&';
92
					url = SiteTreeHandlers.loadPage_url + sep + 'ID=' + id;
93
				}
94
95
				// used to set language in CMSMain->init()
96
				var lang = $('LangSelector') ? $F('LangSelector') : null;
97
				if(lang) {
98
				  url += '&locale='+lang;
99
				}
100
101
				statusMessage("loading...");
102
				this.loadURLFromServer(url);
103
			} else {
104
				throw("getPageFromServer: Bad page  ID: " + id);
105
			}
106
	};
107
}
108
109
// CMSRightForm.applyTo('#Form_EditForm', 'right');
110
111
/**
112
 * Add File Action
113
 */
114
addfolder = Class.create();
115
addfolder.applyTo('#addpage');
116
addfolder.prototype = {
117
	initialize: function () {
118
		Observable.applyTo($('Form_CreateProviderForm'));
119
		$('Form_CreateProviderForm').onsubmit = this.form_submit;
120
	},
121
122
	onclick : function() {
123
		statusMessage('Creating new provider...');
124
		this.form_submit();
125
		return false;
126
	},
127
128
	form_submit : function() {
129
		var st = $('sitetree');
130
131
		$('Form_CreateProviderForm').elements.ParentID.value = st.getIdxOf(st.firstSelected());
132
		Ajax.SubmitForm('Form_CreateProviderForm', null, {
133
			onSuccess : this.onSuccess,
134
			onFailure : this.showAddPageError
135
		});
136
		return false;
137
	},
138
	onSuccess: function(response) {
139
		Ajax.Evaluator(response);
140
		// Make it possible to drop files into the new folder
141
		DropFileItem.applyTo('#sitetree li');
142
	},
143
	showAddPageError: function(response) {
144
		errorMessage('Error adding provider', response);
145
	}
146
}
147
148
149
/**
150
 * Delete folder action
151
 */
152
deletefolder = {
153
	button_onclick : function() {
154
		if(treeactions.toggleSelection(this)) {
155
			deletefolder.o1 = $('sitetree').observeMethod('SelectionChanged', deletefolder.treeSelectionChanged);
156
			deletefolder.o2 = $('Form_DeleteItemsForm').observeMethod('Close', deletefolder.popupClosed);
157
158
			addClass($('sitetree'),'multiselect');
159
160
			deletefolder.selectedNodes = { };
161
162
			var sel = $('sitetree').firstSelected()
163
			if(sel) {
164
				var selIdx = $('sitetree').getIdxOf(sel);
165
				deletefolder.selectedNodes[selIdx] = true;
166
				sel.removeNodeClass('current');
167
				sel.addNodeClass('selected');
168
			}
169
		}
170
		return false;
171
	},
172
173
	treeSelectionChanged : function(selectedNode) {
174
		var idx = $('sitetree').getIdxOf(selectedNode);
175
176
		if(selectedNode.selected) {
177
			selectedNode.removeNodeClass('selected');
178
			selectedNode.selected = false;
179
			deletefolder.selectedNodes[idx] = false;
180
181
		} else {
182
			selectedNode.addNodeClass('selected');
183
			selectedNode.selected = true;
184
			deletefolder.selectedNodes[idx] = true;
185
		}
186
187
		return false;
188
	},
189
190
	popupClosed : function() {
191
		removeClass($('sitetree'),'multiselect');
192
		$('sitetree').stopObserving(deletefolder.o1);
193
		$('Form_DeleteItemsForm').stopObserving(deletefolder.o2);
194
195
		for(var idx in deletefolder.selectedNodes) {
196
			if(deletefolder.selectedNodes[idx]) {
197
				node = $('sitetree').getTreeNodeByIdx(idx);
198
				if(node) {
199
					node.removeNodeClass('selected');
200
					node.selected = false;
201
				}
202
			}
203
		}
204
	},
205
206
	form_submit : function() {
207
		var csvIDs = "";
208
		for(var idx in deletefolder.selectedNodes) {
209
			var selectedNode = $('sitetree').getTreeNodeByIdx(idx);
210
			var link = selectedNode.getElementsByTagName('a')[0];
211
212
			if(deletefolder.selectedNodes[idx] && ( !Element.hasClassName( link, 'contents' ) || confirm( "Are you sure you want to remove '" + link.firstChild.nodeValue + "'" ) ) )
213
				csvIDs += (csvIDs ? "," : "") + idx;
214
		}
215
216
		if(csvIDs) {
217
			$('Form_DeleteItemsForm').elements.csvIDs.value = csvIDs;
218
219
			statusMessage('deleting providers');
220
221
			Ajax.SubmitForm('Form_DeleteItemsForm', null, {
222
				onSuccess : deletefolder.submit_success,
223
				onFailure : function(response) {
224
					errorMessage('Error deleting pages', response);
225
				}
226
			});
227
228
		} else {
229
			alert("Please select at least 1 page.");
230
		}
231
232
		return false;
233
	},
234
235
	submit_success: function(response) {
236
		Ajax.Evaluator(response);
237
		treeactions.closeSelection($('deletepage'));
238
	}
239
}
240
241
Behaviour.register({
242
	'#Form_EditForm_Files': {
243
		removeFile : function(fileID) {
244
			var record;
245
			if(record = $('record-' + fileID)) {
246
				record.parentNode.removeChild(record);
247
			}
248
		}
249
	},
250
251
	'#Form_EditForm_Files a.deletelink' : {
252
		onclick : function(event) {
253
			ajaxLink(this.href);
254
			Event.stop(event);
255
			return false;
256
		}
257
	},
258
259
	'#Form_EditForm' : {
260
		changeDetection_fieldsToIgnore : {
261
			'Files[]' : true
262
		}
263
	}
264
});
265
266
/**
267
 * We don't want hitting the enter key in the name field
268
 * to submit the form.
269
 */
270
 Behaviour.register({
271
 	'#Form_EditForm_Name' : {
272
 		onkeypress : function(event) {
273
 			event = (event) ? event : window.event;
274
 			var kc = event.keyCode ? event.keyCode : event.charCode;
275
 			if(kc == 13) {
276
 				return false;
277
 			}
278
 		}
279
 	}
280
 });
281
282
/**
283
 * Initialisation function to set everything up
284
 */
285
appendLoader(function () {
286
	// Set up delete page
287
	Observable.applyTo($('Form_DeleteItemsForm'));
288
	if($('deletepage')) {
289
		$('deletepage').onclick = deletefolder.button_onclick;
290
		// $('deletepage').onclick = function() { Element.show('Form_DeleteItemsForm'); return false; };
291
		$('Form_DeleteItemsForm').onsubmit = deletefolder.form_submit;
292
		Element.hide('Form_DeleteItemsForm');
293
	}
294
295
});
296
297
function refreshAsset() {
298
	frames[0].location.reload(0);
299
	frames[1].location.reload(1);
300
}
301
302