PageSourceSearch

https://datosabiertos.olavarria.gov.ar/static/core/scripts/modules/dashboards/models/DashboardModel.js

js olavarria.gov.ar collected 2026-09-24 20:50:52 UTC 8,481 bytes, 259 lines download raw bytes

1var Dashboards = Dashboards || {models:{},views:{},collections:{}};
2Dashboards.models.DashboardModel = Backbone.Model.extend({
3
4	url: '/dashboards',
5
6	defaults:{
7		title: '',
8		description: '',
9		category_id: '',
10		notes: '',
11		featured_dashboard: false,
12		show_related: false,
13		htmlCount: 0,
14		resourceListCount: 0,
15		individualResourceCount: 0,
16		mobile: false
17	},
18
19	initialize: function(options){
20
21		this.retryConfig = options.retryConfig;
22		this.widgets = new Dashboards.collections.WidgetCollection();
23
24		_.forEach(options.widgets,function(data){
25			if(data.resource_type == "html"){
26				this.addHTMLBlock(data);
27			} else if (data.resource_type == "RESOURCE_LIST"){
28				this.addResourceList(data);
29			} else if (data.resource_type == "INDIVIDUAL_RESOURCE"){
30				this.addIndividualResource(data);
31			} else {
32				this.widgets.add(new Dashboards.models.WidgetModel(_.extend(data, {retryConfig: _.clone(this.retryConfig)})));
33			}
34		}.bind(this));
35
36		this.tags = new Dashboards.collections.TagsCollection();
37
38		_.forEach(options.tags,function(data){
39			var model = new this.tags.model({
40				tag__name: data.name
41			});
42			if(model.isValid(true)){
43				this.tags.add(model.toJSON());
44			}
45		}.bind(this));
46
47	},
48
49	addHTMLBlock: function(data){
50		data.resource_id = this.getHTMLCount();
51		data.resource_type = 'html';
52		var resource = new Dashboards.models.ResourceModel(data);
53		this.addResource(resource);
54	},
55
56	getHTMLCount: function(){
57		var resp = this.get('htmlCount');
58		this.set('htmlCount',resp+1);
59		return resp;
60	},
61
62	addResourceList: function(data){
63		data.resource_id = this.getResourceListCount();
64		data.resource_type = 'RESOURCES_LIST';
65		var resource = new Dashboards.models.ResourceModel(data);
66		this.addResource(resource);
67	},
68
69	getResourceListCount: function(){
70		var resp = this.get('resourceListCount');
71		this.set('resourceListCount',resp+1);
72		return resp;
73	},
74
75	addIndividualResource: function(data){
76		data.resource_id = this.getIndividualResourceCount();
77		data.resource_type = 'INDIVIDUAL_RESOURCE';
78		var resource = new Dashboards.models.ResourceModel(data);
79		this.addResource(resource);
80	},
81
82	getIndividualResourceCount: function(){
83		var resp = this.get('individualResourceCount');
84		this.set('individualResourceCount',resp+1);
85		return resp;
86	},
87
88	addResource: function(resource){
89			this.addWidget(resource);
90	},
91
92	removeResource: function(resource){
93			this.removeWidget(resource);
94	},
95
96	updateWidgetsData: function(newData){
97		var that = this;
98		_.forEach(newData,function(data){
99			var item = that.widgets.get(data.id);
100			if(item){
101				item.set('x', data.x ),
102				item.set('y', data.y ),
103				item.set('w', data.w ),
104				item.set('h', data.h )
105			}
106		});
107	},
108
109	addWidget: function(data){
110		var id = 'id-widget-'+data.createID();
111		var item = this.widgets.get(id);
112		if(!item){
113			this.widgets.add(new Dashboards.models.WidgetModel(
114				_.extend(data.toJSON(), {retryConfig: _.clone(this.retryConfig)})
115			));
116		}
117	},
118
119	removeWidget: function(data){
120		this.removeWidgetById('id-widget-'+data.createID());
121	},
122
123	removeWidgetById: function(id){
124		var item = this.widgets.get(id);
125		if(item){
126			this.widgets.remove(item);
127		}
128	},
129
130	save: function (attrs, options) {
131			var data = this.getSettings();
132
133			return $.ajax({
134					type:'POST',
135					data: data,
136					dataType: 'json'
137			}).then(function (response) {
138					if(response.status=='ok'){
139							// console.log(response);
140							return response;
141					} else {
142							// console.error(response);
143					}
144			});
145	},
146
147	getSettings: function(){
148		var widgetsObjs = {};
149
150		this.widgets.sort();
151
152		this.widgets.each(function(e,i){
153			var params = [];
154			_.forEach(e.resource.get('parameters'),function(p){
155				params.push('pArgument'+p.position+'='+p.value);
156			});
157
158			widgetsObjs['widgets-'+i+'-x'] = e.get('x');
159			widgetsObjs['widgets-'+i+'-y'] = e.get('y');
160			widgetsObjs['widgets-'+i+'-w'] = e.get('w');
161			widgetsObjs['widgets-'+i+'-h'] = e.get('h');
162			widgetsObjs['widgets-'+i+'-resource_type'] = e.resource.get('resource_type');
163			if(e.resource.get('resource_type')!='html'){
164				widgetsObjs['widgets-'+i+'-resource_id'] = e.resource.get('resource_id');
165			}
166			widgetsObjs['widgets-'+i+'-html'] = e.resource.get('html');
167			widgetsObjs['widgets-'+i+'-order'] = i;
168			widgetsObjs['widgets-'+i+'-parameters'] = params.join('&');
169
170			if(e.resource.get('resource_type') == 'RESOURCES_LIST'){
171				widgetsObjs['widgets-'+i+'-list_name'] = e.resource.get('list_name');
172				widgetsObjs['widgets-'+i+'-list_name_color'] = e.resource.get('list_name_color');
173				widgetsObjs['widgets-'+i+'-links_color'] = e.resource.get('links_color');
174				widgetsObjs['widgets-'+i+'-title_blocks-TOTAL_FORMS'] = e.resource.get("title_blocks").length;
175				widgetsObjs['widgets-'+i+'-title_blocks-INITIAL_FORMS'] = 0;
176				widgetsObjs['widgets-'+i+'-title_blocks-MAX_NUM_FORMS'] = '';
177				_.forEach(e.resource.get("title_blocks").models, function(tb,j){
178					widgetsObjs['widgets-'+i+'-title_blocks-'+j+'-order'] = j;
179					widgetsObjs['widgets-'+i+'-title_blocks-'+j+'-htmlContent'] = tb.get("htmlContent");
180					widgetsObjs['widgets-'+i+'-title_blocks-'+j+'-backgroundColor'] = tb.get("backgroundColor");
181					widgetsObjs['widgets-'+i+'-title_blocks-'+j+'-borderColor'] = tb.get("borderColor");
182					widgetsObjs['widgets-'+i+'-title_blocks-'+j+'-borderWidth'] = tb.get("borderWidth");
183				});
184				widgetsObjs['widgets-'+i+'-resources_list-TOTAL_FORMS'] = e.resource.get("resources_list").length;
185				widgetsObjs['widgets-'+i+'-resources_list-INITIAL_FORMS'] = 0;
186				widgetsObjs['widgets-'+i+'-resources_list-MAX_NUM_FORMS'] = '';
187				_.forEach(e.resource.get("resources_list").models, function(rlr,j){
188					widgetsObjs['widgets-'+i+'-resources_list-'+j+'-order'] = j;
189					widgetsObjs['widgets-'+i+'-resources_list-'+j+'-resource_id'] = rlr.get("resource_id");
190					widgetsObjs['widgets-'+i+'-resources_list-'+j+'-resource_name'] = rlr.get("resource_name");
191					widgetsObjs['widgets-'+i+'-resources_list-'+j+'-direct_download'] = rlr.get("direct_download");
192					widgetsObjs['widgets-'+i+'-resources_list-'+j+'-hide_icon'] 
192= rlr.get("hide_icon");
193				});
194			} else if (e.resource.get('resource_type') == 'INDIVIDUAL_RESOURCE'){
195				widgetsObjs['widgets-'+i+'-gradient_begin_color'] = e.resource.get('gradient_begin_color');
196				widgetsObjs['widgets-'+i+'-gradient_end_color'] = e.resource.get('gradient_end_color');
197				widgetsObjs['widgets-'+i+'-gradient_type'] = e.resource.get('gradient_type');
198				widgetsObjs['widgets-'+i+'-resource_id'] = e.resource.get('selected_resource').get("resource_id");
199				widgetsObjs['widgets-'+i+'-resource_name'] = e.resource.get('selected_resource').get("resource_name");
200				widgetsObjs['widgets-'+i+'-text_color'] = e.resource.get('selected_resource').get("text_color");
201				widgetsObjs['widgets-'+i+'-text_size'] = e.resource.get('selected_resource').get("text_size");
202				widgetsObjs['widgets-'+i+'-direct_download'] = e.resource.get('selected_resource').get("direct_download");
203			}
204		});
205
206		var tagsObj = {};
207		this.tags.each(function(e,i){
208			tagsObj['tags-'+i+'-name'] = e.get('tag__name');
209		});
210
211		var extraParams = _.extend(widgetsObjs,tagsObj);
212
213		return _.extend(
214			{
215				title: 			this.get('title'),
216				description: 	this.get('description'),
217				category: 		this.get('category_id'),
218				notes: 			this.get('notes'),
219				show_related: 	this.get('show_related'),
220				featured_dashboard: this.get('featured_dashboard'),
221				'widgets-TOTAL_FORMS':   this.widgets.length,
222				'widgets-INITIAL_FORMS': 0,
223				'widgets-MAX_NUM_FORMS': '',
224				'tags-TOTAL_FORMS':   this.tags.length,
225				'tags-INITIAL_FORMS': 0,
226				'tags-MAX_NUM_FORMS': ''
227			},
228			extraParams
229		);
230	},
231
232	validateMetadata: function(){
233				var validTitle = !_.isEmpty(this.get('title')),
234						validDescription = !_.isEmpty(this.get('description')),
235						validCategory = !_.isEmpty(""+this.get('category_id'));
236
237				return {
238					valid: (  validTitle &&  validDescription && validCategory ),
239					fields:{
240						'title':  !validTitle,
241						'description':  !validDescription,
242						'category':  !validCategory
243					}
244				};
245		},
246
247		remove: function (options) {
248		var opts = _.extend({url: '/dashboards/remove/' + this.id}, options || {});
249
250		return Backbone.Model.prototype.destroy.call(this, opts);
251	},
252
253	remove_revision: function (options) {
254		var opts = _.extend({url: '/dashboards/remove/revision/' + this.id}, options || {});
255
256		return Backbone.Model.prototype.destroy.call(this, opts);
257	}
258
259});

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.