##// END OF EJS Templates
- Modificada la presentacion de la aplicacion web, y agregando la funcionalidad para guardar los perfiles temporales.
jsalyrosas -
r181:182
parent child
Show More
@@ -1,24 +1,24
1 1 from django.conf.urls import patterns, url
2 2
3 3 urlpatterns = patterns('abscontrol.views',
4 4 url(r'^$', 'index'),
5 5 url(r'^new/$', 'new'),
6 6 url(r'^save/$', 'save'),
7 7 url(r'^view/(?P<profile_id>\d+)/$', 'view'),
8 8 url(r'^edit/(?P<profile_id>\d+)/$', 'edit'),
9 #url(r'^(?P<profile_id>\d+)/edit/$', 'edit'),
9 url(r'^update/(?P<profile_id>\d+)/$', 'update'),
10 10 #url(r'^(?P<profile_id>\d+)/$', 'detail'),
11 11 url(r'^(?P<profile_id>\d+)/add/$', 'addPattern'),
12 12 url(r'^(?P<profile_id>\d+)/save/$', 'savePattern'),
13 13 url(r'^(?P<profile_id>\d+)/edit/(?P<pattern_id>\d+)/$', 'editPattern'),
14 14 url(r'^(?P<profile_id>\d+)/view/(?P<pattern_id>\d+)/$', 'viewPattern'),
15 15 url(r'^(?P<profile_id>\d+)/delete/(?P<pattern_id>\d+)/$', 'deletePattern'),
16 16 #url(r'^(?P<poll_id>\d+)/results/$', 'results'),
17 17 #url(r'^(?P<poll_id>\d+)/vote/$', 'vote'),
18 18 url(r'^import/$', 'importProfile'),
19 19 url(r'^showImport/$', 'showImport'),
20 20 url(r'^saveImport/$', 'saveImport'),
21 21 url(r'^(?P<profile_id>\d+)/(?P<pattern_id>\d+)/overjro/(?P<antenna_id>\d+)/$', 'overJRO'),
22 22 url(r'^export/(?P<profile_id>\d+)/$', 'export'),
23 23 url(r'^send/(?P<profile_id>\d+)/$', 'send'),
24 24 ) No newline at end of file
@@ -1,401 +1,404
1 1 from django.shortcuts import render_to_response, redirect
2 2 from django.http import HttpResponse
3 3 from django.conf import settings
4 4 from django.utils.encoding import smart_str
5 5 from django.core.servers.basehttp import FileWrapper
6 6 import mimetypes
7 7
8 8 from datetime import datetime
9 9
10 10 from abscontrol.models import Profile, Pattern, AntennaDown, AntennaUp
11 11
12 12 from util.readABSFile import readABSFile
13 13 from util.saveABSFile import saveABSFile
14 14 from scripts.sendFile import sendFile
15 15
16 16 txtAntenna = "[[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5]," \
17 17 "[1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0]," \
18 18 "[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5]," \
19 19 "[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5]," \
20 20 "[1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0]," \
21 21 "[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5]," \
22 22 "[1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0]," \
23 23 "[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5]]"
24 24
25 25 txtTxUp = "[[1,1,1,1,1,1,1,1]," \
26 26 "[1,1,1,1,1,1,1,1]," \
27 27 "[1,1,1,1,1,1,1,1]," \
28 28 "[1,1,1,1,1,1,1,1]," \
29 29 "[1,1,1,1,1,1,1,1]," \
30 30 "[1,1,1,1,1,1,1,1]," \
31 31 "[1,1,1,1,1,1,1,1]," \
32 32 "[1,1,1,1,1,1,1,1]]"
33 33
34 34 txtTxDown = "[[1,1,1,1,0,0,0,0]," \
35 35 "[1,1,1,1,0,0,0,0]," \
36 36 "[1,1,1,1,0,0,0,0]," \
37 37 "[1,1,1,1,0,0,0,0]," \
38 38 "[0,0,0,0,1,1,1,1]," \
39 39 "[0,0,0,0,1,1,1,1]," \
40 40 "[0,0,0,0,1,1,1,1]," \
41 41 "[0,0,0,0,1,1,1,1]]"
42 42
43 43 txtRxUp = "[[0,0,0,0,1,1,1,1]," \
44 44 "[0,0,0,0,1,1,1,1]," \
45 45 "[0,0,0,0,1,1,1,1]," \
46 46 "[0,0,0,0,1,1,1,1]," \
47 47 "[1,1,1,1,1,1,1,1]," \
48 48 "[1,1,1,1,1,1,1,1]," \
49 49 "[1,1,1,1,1,1,1,1]," \
50 50 "[1,1,1,1,1,1,1,1]]"
51 51
52 52 txtRxDown = "[[1,1,1,1,1,1,1,1]," \
53 53 "[1,1,1,1,1,1,1,1]," \
54 54 "[1,1,1,1,1,1,1,1]," \
55 55 "[1,1,1,1,1,1,1,1]," \
56 56 "[1,1,1,1,1,1,1,1]," \
57 57 "[1,1,1,1,1,1,1,1]," \
58 58 "[1,1,1,1,1,1,1,1]," \
59 59 "[1,1,1,1,1,1,1,1]]"
60 60
61 61 txtUes = "[0.533333,0.00000,1.06667,0.00000]"
62 62
63 63 def index(request):
64 64 #latest_poll_list = profileAntenna.objects.all().order_by('-pub_date')[:5]
65 65 profile_list = Profile.objects.filter(state=1)
66 66 return render_to_response('abscontrol/index.html', {'profile_list': profile_list})
67 67
68 68 def new(request):
69 69 profile_list = Profile.objects.filter(state=1)
70 70 txtProfile = datetime.now().strftime("%Y%m%d%H%M%S%f")
71 71 newprofile = Profile(name=txtProfile)
72 72 newprofile.save()
73 73
74 74 lsPatterns = None
75 75
76 76 return render_to_response('abscontrol/new.html', {'profile_list': profile_list,
77 77 'txtAntenna' : txtAntenna,
78 78 'profile_name' : newprofile.name,
79 79 'profile_id' : newprofile.id,
80 80 'lsPatterns' : lsPatterns,
81 81 'txtUes' : txtUes, 'txtTxUp' : txtTxUp,
82 82 'txtTxDown' : txtTxDown, 'txtRxUp' : txtRxUp,
83 83 'txtRxDown' : txtRxDown,
84 84 })
85 85
86 86 def save(request):
87 87
88 88 txtProfile = request.POST["txtProfile"]
89 89
90 90 txtAntennaUp = request.POST["txtAntennaUp"]
91 91 txtTxUp = request.POST["txtTxUp"]
92 92 txtRxUp = request.POST["txtRxUp"]
93 93 txtUesUp = request.POST["txtUesUp"]
94 94
95 95 txtAntennaDown = request.POST["txtAntennaDown"]
96 96 txtTxDown = request.POST["txtTxDown"]
97 97 txtRxDown = request.POST["txtRxDown"]
98 98 txtUesDown = request.POST["txtUesDown"]
99 99
100 100 newprofile = Profile(name=txtProfile)
101 101 newprofile.save()
102 102
103 103 newpattern = newprofile.pattern_set.create(value=1)
104 104 newpattern.antennaup_set.create(value=txtAntennaUp,tx=txtTxUp,rx=txtRxUp,ues=txtUesUp)
105 105 newpattern.antennadown_set.create(value=txtAntennaDown,tx=txtTxDown,rx=txtRxDown,ues=txtUesDown)
106 106
107 107 newurl = '/abscontrol/view/%d' % newprofile.id
108 108
109 109 return redirect(newurl)
110
111 def update(request, profile_id):
112 pass
110 113
111 114 def view(request, profile_id):
112 115 nextPattern = 0
113 116
114 117 if request.method == 'GET' and 'pattern' in request.GET:
115 118 pattern_value = request.GET["pattern"]
116 119 else:
117 120 pattern_value = 1
118 121
119 122 profile_list = Profile.objects.filter(state=1)
120 123 objProfile = Profile.objects.get(pk=profile_id)
121 124
122 125 lsPatterns = objProfile.pattern_set.all()
123 126 patternChoosen = objProfile.pattern_set.get(value=pattern_value)
124 127 objAntennaUp = patternChoosen.antennaup_set.get()
125 128 objAntennaDown = patternChoosen.antennadown_set.get()
126 129
127 130 if len(lsPatterns) > 1:
128 131 if pattern_value == 1:
129 132 nextValuePattern = pattern_value + 1
130 133 nextPattern = objProfile.pattern_set.get(value=nextValuePattern)
131 134
132 135
133 136 return render_to_response('abscontrol/view.html', {'objProfile': objProfile, 'profile_list': profile_list,
134 137 'patternChoosen' : patternChoosen, 'lsPatterns' : lsPatterns,
135 138 'antennaUp' : objAntennaUp, 'antennaDown' : objAntennaDown,
136 139 'nextPattern' : nextPattern,
137 140 })
138 141
139 142 def edit(request, profile_id):
140 143 if request.method == 'GET' and 'pattern' in request.GET:
141 144 pattern_value = request.GET["pattern"]
142 145 else:
143 146 pattern_value = 1
144 147
145 148 profile_list = Profile.objects.filter(state=1)
146 149 objProfile = Profile.objects.get(pk=profile_id)
147 150
148 151 lsPatterns = objProfile.pattern_set.all()
149 152 patternChoosen = objProfile.pattern_set.get(value=pattern_value)
150 153 objAntennaUp = patternChoosen.antennaup_set.get()
151 154 objAntennaDown = patternChoosen.antennadown_set.get()
152 155
153 156 return render_to_response('abscontrol/edit.html', {'objProfile': objProfile, 'profile_list': profile_list,
154 157 'patternChoosen' : patternChoosen, 'lsPatterns' : lsPatterns,
155 158 'antennaUp' : objAntennaUp, 'antennaDown' : objAntennaDown,
156 159 })
157 160
158 161 def addPattern(request, profile_id):
159 162 profile_list = Profile.objects.filter(state=1)
160 163 objProfile = Profile.objects.get(pk=profile_id)
161 164
162 165 return render_to_response('abscontrol/addPattern.html', {'objProfile': objProfile, 'profile_list': profile_list,
163 166 'txtAntenna' : txtAntenna, 'txtUes' : txtUes,
164 167 'txtTxUp' : txtTxUp, 'txtTxDown' : txtTxDown,
165 168 'txtRxUp' : txtRxUp, 'txtRxDown' : txtRxDown,
166 169 })
167 170
168 171 def editPattern(request, profile_id, pattern_id):
169 172 profile_list = Profile.objects.filter(state=1)
170 173 objProfile = Profile.objects.get(pk=profile_id)
171 174 lsPatterns = objProfile.pattern_set.all()
172 175 patternChoosen = Pattern.objects.get(pk=pattern_id)
173 176 objAntennaUp = patternChoosen.antennaup_set.get()
174 177 objAntennaDown = patternChoosen.antennadown_set.get()
175 178
176 179 return render_to_response('abscontrol/editPattern.html', {'objProfile': objProfile, 'profile_list': profile_list,
177 180 'patternChoosen' : patternChoosen, 'lsPatterns' : lsPatterns,
178 181 'antennaUp' : objAntennaUp, 'antennaDown' : objAntennaDown,
179 182 })
180 183
181 184 def savePattern(request, profile_id):
182 185 pattern_id = 0
183 186 method = "save"
184 187
185 188 if 'pattern_id' in request.POST:
186 189 pattern_id = request.POST["pattern_id"]
187 190 method = "update"
188 191
189 192 maxValuePattern = 0
190 193 txtAntennaUp = request.POST["txtAntennaUp"]
191 194 txtTxUp = request.POST["txtTxUp"]
192 195 txtRxUp = request.POST["txtRxUp"]
193 196 txtUesUp = request.POST["txtUesUp"]
194 197
195 198 txtAntennaDown = request.POST["txtAntennaDown"]
196 199 txtTxDown = request.POST["txtTxDown"]
197 200 txtRxDown = request.POST["txtRxDown"]
198 201 txtUesDown = request.POST["txtUesDown"]
199 202
200 203 mode = request.POST["mode"]
201 204
202 205 if method == "save":
203 206 objProfile = Profile.objects.get(pk=profile_id)
204 207 lsPatterns = objProfile.pattern_set.all()
205 208 if len(lsPatterns) > 0:
206 209 for element in lsPatterns:
207 210 if element.value > maxValuePattern:
208 211 maxPattern = element.value
209 212 else:
210 213 maxPattern = 0
211 214
212 215 if maxPattern < 10 :
213 216 newValuePattern = maxPattern + 1
214 217 newpattern = objProfile.pattern_set.create(value=newValuePattern)
215 218 newpattern.antennaup_set.create(value=txtAntennaUp,tx=txtTxUp,rx=txtRxUp,ues=txtUesUp)
216 219 newpattern.antennadown_set.create(value=txtAntennaDown,tx=txtTxDown,rx=txtRxDown,ues=txtUesDown)
217 220 error = 0
218 221 else:
219 222 error = 1 # Can not add more patterns
220 223
221 224 if mode == "e":
222 225 newurl = '/abscontrol/%d/edit/%d' % (int(profile_id), newpattern.id)
223 226 else:
224 227 newurl = '/abscontrol/%d/view/%d' % (int(profile_id), newpattern.id)
225 228 else:
226 229 txtAntennaUpId = request.POST["txtAntennaUpId"]
227 230 objAntennaUp = AntennaUp.objects.get(pk=txtAntennaUpId)
228 231 objAntennaUp.value = txtAntennaUp
229 232 objAntennaUp.tx = txtTxUp
230 233 objAntennaUp.rx = txtRxUp
231 234 objAntennaUp.ues = txtUesUp
232 235 objAntennaUp.save()
233 236
234 237 txtAntennaDownId = request.POST["txtAntennaDownId"]
235 238 objAntennaDown = AntennaDown.objects.get(pk=txtAntennaDownId)
236 239 objAntennaDown.value = txtAntennaDown
237 240 objAntennaDown.tx = txtTxDown
238 241 objAntennaDown.rx = txtRxDown
239 242 objAntennaDown.ues = txtUesDown
240 243 objAntennaDown.save()
241 244
242 245 if mode == "e":
243 246 newurl = '/abscontrol/%d/edit/%d' % (int(profile_id), int(pattern_id))
244 247 else:
245 248 newurl = '/abscontrol/%d/view/%d' % (int(profile_id), int(pattern_id))
246 249
247 250 return redirect(newurl)
248 251
249 252 def viewPattern(request, profile_id, pattern_id):
250 253
251 254 profile_list = Profile.objects.filter(state=1)
252 255 objProfile = Profile.objects.get(pk=profile_id)
253 256
254 257 patternChoosen = Pattern.objects.get(pk=pattern_id)
255 258
256 259 objAntennaUp = patternChoosen.antennaup_set.get()
257 260 objAntennaDown = patternChoosen.antennadown_set.get()
258 261
259 262 lsPatterns = objProfile.pattern_set.all()
260 263
261 264 return render_to_response('abscontrol/viewPattern.html', {'objProfile': objProfile, 'profile_list': profile_list,
262 265 'patternChoosen' : patternChoosen, 'lsPatterns' : lsPatterns,
263 266 'antennaUp' : objAntennaUp, 'antennaDown' : objAntennaDown,
264 267 })
265 268
266 269 def deletePattern(request, profile_id, pattern_id):
267 270 newurl = '/abscontrol/edit/%d' % int(profile_id)
268 271
269 272 return redirect(newurl)
270 273
271 274 def importProfile(request):
272 275 profile_list = Profile.objects.filter(state=1)
273 276 return render_to_response('abscontrol/import.html', {'profile_list': profile_list,})
274 277
275 278 def showImport(request):
276 279 if request.method == 'POST':
277 280 txtFilename = request.FILES['txtFile']
278 281 if txtFilename:
279 282 destination = open('/tmp/'+txtFilename.name, 'wb+')
280 283 for chunk in txtFilename.chunks():
281 284 destination.write(chunk)
282 285 destination.close()
283 286 filename = '/tmp/'+txtFilename.name
284 287 readFile = readABSFile(filename)
285 288 expName, num_patterns, patterns = readFile.getMetadata()
286 289 else:
287 290 txtFilename = "Error"
288 291 #content = "Error"
289 292 expName = ""
290 293 num_patterns = 0
291 294
292 295 return render_to_response('abscontrol/upload-edit.html', {'txtFilename': txtFilename, 'patterns' : patterns,
293 296 'expName' : expName, 'num_patterns' : num_patterns,
294 297 })
295 298
296 299 def saveImport(request):
297 300 patterns = []
298 301
299 302 expName = request.POST["txtProfile"]
300 303 num_patterns = int(request.POST["txtNumPatterns"])
301 304
302 305 newprofile = Profile(name=expName)
303 306 newprofile.save()
304 307
305 308 for i in range(0,num_patterns):
306 309 number = request.POST["txtNumberPattern"+str(i+1)]
307 310 txtAntennaUp = request.POST["txtAntennaUp"+str(i+1)]
308 311 txtAntennaDown = request.POST["txtAntennaDown"+str(i+1)]
309 312 dicPattern = {"number" : number, "up" : txtAntennaUp, "down" : txtAntennaDown}
310 313 patterns.append(dicPattern)
311 314 newpattern = newprofile.pattern_set.create(value=number)
312 315 newpattern.antennaup_set.create(value=txtAntennaUp)
313 316 newpattern.antennadown_set.create(value=txtAntennaDown)
314 317
315 318 newurl = '/abscontrol/view/%d' % newprofile.id
316 319
317 320 return redirect(newurl)
318 321 '''
319 322 return render_to_response('abscontrol/upload-view.html', {'expName' : expName, 'patterns' : patterns,
320 323 'num_patterns' : num_patterns,
321 324 })
322 325 '''
323 326
324 327 def overJRO(request, profile_id, pattern_id, antenna_id):
325 328 if request.GET["beam"] == "Up":
326 329 objAntenna = AntennaUp.objects.get(pk=antenna_id)
327 330 else:
328 331 objAntenna = AntennaDown.objects.get(pk=antenna_id)
329 332 objProfile = Profile.objects.get(pk=profile_id)
330 333 exp_name = objProfile.name
331 334
332 335 phase_tx = objAntenna.value
333 336 gain_tx = objAntenna.tx
334 337 gain_rx = objAntenna.rx
335 338 ues_tx = objAntenna.ues
336 339 only_rx = objAntenna.only_rx
337 340
338 341 return exp_name, phase_tx, gain_tx, gain_rx, ues_tx, only_rx
339 342
340 343 def export(request, profile_id):
341 344 listPatterns = []
342 345 objProfile = Profile.objects.get(pk=profile_id)
343 346 exp_name = objProfile.name
344 347 lsPatterns = objProfile.pattern_set.all()
345 348 for element in lsPatterns:
346 349 objAntennaUp = element.antennaup_set.get()
347 350 objAntennaDown = element.antennadown_set.get()
348 351 dicPatterns = {"number" : element.value, "up" : objAntennaUp.value, "down" : objAntennaDown.value}
349 352 listPatterns.append(dicPatterns)
350 353
351 354 absFile = saveABSFile()
352 355 absFile.setParameters(settings.MEDIA_ROOT, exp_name, listPatterns)
353 356 filename, filesize = absFile.save()
354 357
355 358 wrapper = FileWrapper( open( filename, "r" ) )
356 359 content_type = mimetypes.guess_type( filename )[0]
357 360
358 361 response = HttpResponse(wrapper, content_type = content_type)
359 362 response['Content-Description'] = 'File Transfer'
360 363 response['Content-Disposition'] = 'attachment; filename=%s' % smart_str(filename)
361 364 response['Content-Transfer-Encoding'] = 'binary'
362 365 response['Expires'] = '0'
363 366 response['Cache-Control'] = 'must-revalidate'
364 367 response['Pragma'] = 'public'
365 368 response['Content-Length'] = '%s' % str(filesize)
366 369 response['X-Sendfile'] = '%s' % smart_str(filename)
367 370
368 371 return response
369 372
370 373 def send(request, profile_id):
371 374 listPatterns = []
372 375 objProfile = Profile.objects.get(pk=profile_id)
373 376 exp_name = objProfile.name
374 377
375 378 lsPatterns = objProfile.pattern_set.all()
376 379 for element in lsPatterns:
377 380 objAntennaUp = element.antennaup_set.get()
378 381 objAntennaDown = element.antennadown_set.get()
379 382 dicPatterns = {"number" : element.value, "up" : objAntennaUp.value, "down" : objAntennaDown.value}
380 383 listPatterns.append(dicPatterns)
381 384
382 385 absFile = saveABSFile()
383 386 absFile.setParameters(settings.MEDIA_ROOT, exp_name, listPatterns)
384 387 filename, filesize = absFile.save()
385 388
386 389 apiclient = sendFile()
387 390 apiclient.execute(filename)
388 391 output = apiclient.getOutput()
389 392
390 393 if output == "OK":
391 394 message = "File sent successfully."
392 395 objProfile.hits += 1
393 396 objProfile.save()
394 397 else:
395 398 message = "Error sending file."
396 399
397 400 profile_list = Profile.objects.all()
398 401
399 402 return render_to_response('abscontrol/sendFile.html', {'message': message, "profile_list" : profile_list,
400 403 'objProfile': objProfile,
401 404 })
@@ -1,99 +1,114
1 1 /*
2 2 * font-family: 'Droid Sans', sans-serif;
3 3 * font-family: 'Ubuntu', sans-serif;
4 4 * font-family: 'Open Sans', sans-serif;
5 5 * font-family: 'Open Sans Condensed', sans-serif;
6 6 * font-family: 'Roboto Condensed', sans-serif;
7 7 */
8 8
9 9 body { font-size: 12px; }
10 header {border: 1px solid #fcc; font-size: 2em; height: 50px; text-align: center; line-height: 50px}
11 #schema {margin: 0 auto; width: 980px; border: 1px solid #f00 !important; padding: 10px 10px 10px 10px}
10 header {width: 980px; border: 0px solid #fcc !important; height: 50px; text-align: center; line-height: 50px}
11 #schema {margin: 0 auto; width: 980px; border: 0px solid #f00 !important; padding: 10px 10px 10px 10px}
12 12 #content {border: 0px solid #1cc; margin-top: 5px; margin-bottom: 5px}
13 #content #topcolumn {float: left;border: 1px solid #ddd !important; width: 980px; height: 40px; line-height: 35px;
13 #content #topcolumn {float: left; border: 1px solid #ddd !important; width: 980px; height: 40px; line-height: 35px;
14 14 margin: 2px 0px; box-shadow: 2px 2px 5px #888;}
15 #content #maincolumn {float: left; border: 0px solid #000 !important; width: 980px; margin: 2px 0px; padding: 0px 0px;
15 #content #maincolumn {float: left; border: 1px solid #ddd !important; width: 980px; margin: 2px 0px; padding: 0px 0px;
16 16 box-shadow: 2px 2px 5px #666;}
17 footer {border: 1px solid #200; font-size: 0.9em; height: 30px; text-align: center; line-height: 20px}
17 footer {border: 0px solid #200 !important; height: 30px; text-align: center; line-height: 30px;
18 margin: 2px 0px; box-shadow: 2px 2px 5px #888;}
18 19
19 20 .cleardivs {clear: both; border: 0px solid #400; height: 0px}
20 21 /****************************************************************************************/
21 22 /****** ESTILOS GENERALES *****************/
22 23 /****************************************************************************************/
23 24 .mnu{ height: 22px; border: 0px solid #c55 !important;}
24 25 .mnu li{ display:inline;}
25 26 .MnuVertical, .MnuHorizontal { font-family: 'Droid Sans', sans-serif; font-size: 1.2em; font-style: italic; text-shadow: 2px 2px #eee}
26 27 .MnuHorizontal ul{ list-style: none; list-style-type: none; margin: 0;}
27 28
28 29 /*.MnuHorizontal{ display: -webkit-box; -webkit-box-orient:horizontal;}*/
29 30 /*.MnuHorizontal a{ display:block; padding:10px; -webkit-box-flex:1; text-align:center; }*/
30 31
31 32 /****************************************************************************************/
32 33 /****** MENU DE NAVEGACION DE PERFILES **********************************/
33 34 /****************************************************************************************/
34 35 #infoProfiles {border: 0px solid #1cc !important; width: 300px; margin: 0px; padding-top: 2px; padding-bottom: 2px;
35 36 float: left;}
36 37 #infoProfiles label {padding: 10px 10px 10px 12px; margin: 10px 0}
37 38 #infoProfiles select {padding: 4px 0px; margin: 0; font-family: 'Droid Sans', sans-serif;
38 39 font-size: 12px; letter-spacing: 0.029em; width: 200px;}
39 40 #mnuProfiles{margin: 0px; border: 0px solid #1494F6 !important; float: left; padding: 2px 10px}
40 41 #mnuProfiles ul{list-style: none; list-style-type: none; margin: 0; padding-left: 20px; border: 0px solid #f00 !important}
41 42 #mnuProfiles li{ width: 80px; padding: 2px; border: 0px solid #c55 !important; float: left; }
42 43 #mnuProfiles a{ font-weight: normal; color: #1494F6; display: block; border: 0px solid #1cc !important; text-align: center}
43 44
44 45 /****************************************************************************************/
45 46 /******** FORMULARIO DE PERFILES *************************************/
46 47 /****************************************************************************************/
47 48 #divProfile { border: 0px solid #dff !important; margin: 10px 0px; padding: 10px 10px; width: 500px }
48 49 .flsAntenna { margin: 0; width: 100%; padding: 0px; border: 0px solid #f00 !important }
49 50 #divPattern textarea,input[type=text],label{ font-family: "Open Sans"; font-size: inherit; }
50 51 #divPattern textarea {resize: none; overflow: hidden}
51 52 .antenna{ border: 0px solid #1494F6 !important; padding: 2px; margin: 5px 10px; float: left; width: 480px}
52 53 .infoAntenna{ border: 0px solid #f00 !important; width: 480px; float: left}
53 54 .overJRO{ border: 0px solid #1cc !important; width: 250px; float: left; margin: 0px 5px}
54 55 .divAntenna { float: left; margin: 10px; border: 0px solid #fcc !important; width: 190px }
55 56 .divAntenna label{ display: block }
56 57 .txtAntenna { width: 175px; max-width: 180px; height: 160px; max-height: 165px; background: #fdfdfb; padding: 4px;
57 58 border: 2px solid #eee !important; /*font-family: "Ubuntu"; font-size: inherit;*/
58 59 text-align: justify; margin: 0 auto; line-height: 20px}
59 60 .divAntenna p{ width: 175px; max-width: 180px; height: 160px; max-height: 165px; background: #fdfdfb; padding: 2px;
60 61 border: 1px solid #eee !important; font-family: "Ubuntu"; font-size: inherit;
61 62 text-align: justify; margin: 0 auto; line-height: 20px}
62 63
63 64 .divTx { display: block; float: left; margin: 10px; height: 150px }
64 65 .divTx label{ display: block }
65 66 .divTx textarea{ width: 135px; max-width: 135px; height: 135px; max-height: 140px; text-align: justify }
66 67 .divTx p{ width: 100px; max-width: 105px; height: 160px; max-height: 165px; background: #fdfdfb; padding: 2px;
67 68 border: 1px solid #eee !important; font-family: "Ubuntu"; font-size: inherit;
68 69 text-align: justify; margin: 0 auto; line-height: 20px;}
69 70
70 71 .divUes { display: block; margin: 10px}
71 72 .divUes input[type=text] { width: 240px; max-width: 240px; font-family: "Ubuntu"; font-size: inherit;}
72 73
73 74 .overJRO img{width: 400px; height: 200px; text-align: center; vertical-align: middle; margin: 40px 5px 5px 5px;
74 75 display: block; background: #fdfdfb; border: 1px solid #eee !important;}
75 76 .overJRO a{ text-align: center; margin: 0 auto; display: block}
76 77
77 78 /****************************************************************************************/
78 79 /****** MENU DE NAVEGACION DE PATRONES **********************************/
79 80 /****************************************************************************************/
80 81 #divMnuPattern{ width: 280px; height: 25px; display: block; border: 0px solid #1cc !important; float: right;
81 82 margin: 5px 40px 5px 0px;}
82 83 #divMnuPattern li{ float: right; display: block; width: 60px; border: 0px solid #2cc !important}
83 84 #divMnuPattern a{ display: block; line-height: 22px; text-decoration: none; padding: 0px 5px;
84 85 border-bottom: 1px solid #1494F6 !important; margin: 0px 2px; text-align: center; color: #1494F6
85 86 }
86 87 #infoPattern{ display: block; border: 1px solid #1494f6 !important; margin: 5px 2px; }
87 88
88 89 #navPatterns{ margin: 0 auto; border: 0px solid #d00 !important; width: 700px; height: 30px;
89 90 font-family: 'Ubuntu', sans-serif; font-size: 14px; padding: 5px 0px}
90 91 #navPatternList{ margin: 0 auto; border: 0px solid #ecc !important}
91 92 #navPatternList ul{ list-style: none; list-style-type: none; margin: 0;}
92 93 #navPatternList ul li{ float: left; width: 50px; border: 1px solid #eee !important; }
93 94 #navPatternList a{ width: 50px; border: 0px solid #1cc !important; display: block; text-align: center; line-height: 30px; padding: 1px 0px}
94 95 .lnkPattern{ background-color: #ccc !important; color: #eee;}
95 96 .lnkPatternSelected{ background-color: #2cc !important; color: #fff;}
96 97
97 98 .divListofPatterns{ width: 650px; display: block; border: 1px solid #1cc !important; margin: 0 auto}
98 99 .divPattern{ width: 600px; display: block; border: 1px solid #f00 !important; margin: 2px auto; }
99 100
101 /****************************************************************************************/
102 /****** HEADER *************/
103 /****************************************************************************************/
104 header nav{width: 960px; border: 0px solid #1cc !important; margin: 0 auto; height: 100%}
105 header nav a{font-family: 'Roboto Condensed', sans-serif; font-size: 1.98em; text-transform: uppercase; width: 232px;
106 padding: 2px; text-align: center; border: 1px solid #ddd !important; box-shadow: 1px 1px 2px #ddd; display: block;
107 float: left; height: 45px; text-decoration: none; background: #eee; line-height: 45px;
108 color: #15425d; margin: 0px 1px}
109
110 /****************************************************************************************/
111 /****** FOOTER *************/
112 /****************************************************************************************/
113 footer p{font-family: 'Roboto Condensed', sans-serif; font-size: 0.98em}
114
@@ -1,110 +1,114
1 1 {% extends "abscontrol/index.html" %}
2 2 {% block title %}ABS CONTROL:::PROFILE:::{{ objProfile.name }}{% endblock %}
3 3 {% block scripting %}
4 4 <script src="/static/static/js/patterns.js"></script>
5 5 {% endblock %}
6 6 {% block mnu_profile %}
7 7 <nav class="MnuVertical" id="mnuProfiles">
8 8 <ul>
9 <li><a href="/abscontrol/new">New</a></li>
10 <li><a href="#">Save</a></li>
9 <li><a href="/abscontrol/new/">New</a></li>
10 {% if objProfile.state == 0 %}
11 <li><a href="/abscontrol/update/{{ objProfile.id }}/?opt=changeName">Save</a></li>
12 {% else %}
13 <li><a href="/abscontrol/update/{{ objProfile.id }}/?opt=update">Save</a></li>
14 {% endif %}
11 15 <li><a href="#">Save as</a></li>
12 <li><a href="/abscontrol/import">Import</a></li>
16 <li><a href="/abscontrol/import/">Import</a></li>
13 17 {% if objProfile %}
14 18 <li><a href="#" id="lnkExport" alt="{{ objProfile.id }}">Export</a></li>
15 19 {% endif %}
16 20 </ul>
17 21 </nav>
18 22 {% endblock %}
19 23 {% block maincolumn%}
20 24 <div id="maincolumn">
21 25 <div id="divProfile">
22 26 <label for="lblName">Profile:</label>
23 27 <label for="lblProfile">{{ objProfile.name }}</label>
24 28 </div>
25 29 {% if patternChoosen %}
26 30 <div id="navPatterns">
27 31 <nav class="" id="navPatternList">
28 32 <ul>
29 33 {% for element in lsPatterns %}
30 34 {% if patternChoosen.id == element.id %}
31 35 <li><a href="/abscontrol/{{ objProfile.id }}/edit/{{ element.id }}" class="lnkPatternSelected">{{ element.value }}</a></li>
32 36 {% else %}
33 37 <li><a href="/abscontrol/{{ objProfile.id }}/edit/{{ element.id }}" class="lnkPattern">{{ element.value }}</a></li>
34 38 {% endif %}
35 39 {% endfor %}
36 40 </ul>
37 41 </nav>
38 42 </div>
39 43 {% endif %}
40 44 <div id="divPattern">
41 45 {% block mnuPattern %}
42 46 <div class="divMenu" id="divMnuPattern">
43 47 <nav class="MnuHorizontal">
44 48 <ul class="mnu" id="mnuPattern">
45 49 {% if lsPatterns|length > 1 %}
46 50 <li><a href="/abscontrol/{{ objProfile.id }}/delete/{{ patternChoosen.id }}">Delete</a></li>
47 51 {% endif %}
48 52 <li><a href="#" class="" id="lnkSave">Save</a></li>
49 53 {% if lsPatterns|length < 10 %}
50 54 <li><a href="/abscontrol/{{ objProfile.id }}/add">Add</a></li>
51 55 {% endif %}
52 56 </ul>
53 57 </nav>
54 58 </div>
55 59 <div class="cleardivs"></div>
56 60 {% endblock %}
57 61 {% block pattern %}
58 62 <div id="infoPattern">
59 63
60 64 <div id="antennaUp">
61 65 <fieldset class="flsAntenna">
62 66 <legend>UP</legend>
63 67 <div class="divAntenna">
64 68 <label for="lblAntenna">Antenna</label>
65 69 <textarea name="txtAntennaUp" class="txtAntenna" cols="38" rows="8">{{ antennaUp.value }}</textarea>
66 70 </div>
67 71 <div class="divTx">
68 72 <label for="lblTx">Tx</label>
69 73 <textarea name="txtTxUp" class="txtTR" cols="20" rows="8">{{ antennaUp.tx }}</textarea>
70 74 </div>
71 75 <div class="divTx">
72 76 <label for="lblRx">Rx</label>
73 77 <textarea name="txtRxUp" class="txtTR" cols="20" rows="8">{{ antennaUp.rx }}</textarea>
74 78 </div>
75 79 <div class="cleardivs"></div>
76 80 <div class="divUes">
77 81 <label for="lblUes">Ues:</label>
78 82 <input type="text" name="txtUesUp" value="{{ antennaUp.ues }}" />
79 83 </div>
80 84 <input type="hidden" name="txtAntennaUpId" value="{{ antennaUp.id }}" />
81 85 </fieldset>
82 86 </div>
83 87 <div id="antennaDown">
84 88 <fieldset class="flsAntenna">
85 89 <legend>DOWN</legend>
86 90 <div class="divAntenna">
87 91 <label for="lblAntenna">Antenna</label>
88 92 <textarea name="txtAntennaDown" class="txtAntenna" cols="38" rows="8">{{ antennaDown.value }}</textarea>
89 93 </div>
90 94 <div class="divTx">
91 95 <label for="lblTx">Tx</label>
92 96 <textarea name="txtTxDown" class="txtTR" cols="20" rows="8">{{ antennaDown.tx }}</textarea>
93 97 </div>
94 98 <div class="divTx">
95 99 <label for="lblRx">Rx</label>
96 100 <textarea name="txtRxDown" class="txtTR" cols="20" rows="8">{{ antennaDown.rx }}</textarea>
97 101 </div>
98 102 <div class="cleardivs"></div>
99 103 <div class="divUes">
100 104 <label for="lblUes">Ues:</label>
101 105 <input type="text" name="txtUesDown" value="{{ antennaDown.ues }}" />
102 106 </div>
103 107 <input type="hidden" name="txtAntennaDownId" value="{{ antennaDown.id }}" />
104 108 </fieldset>
105 109 </div>
106 110 </div>
107 111 {% endblock %}
108 112 </div>
109 113 </div>
110 114 {% endblock %}
@@ -1,66 +1,64
1 1 {% extends "base.html" %}
2 2
3 3 {% block title %}ABS CONTROL:::::{% endblock %}
4 4 {% block scripting %}
5 5 {% if profile_list %}
6 6 <script src="/static/static/js/profiles.js"></script>
7 7 {% endif %}
8 8 {% endblock %}
9 9 {% block content %}
10 10 <div id="content">
11 11 {% block topcolumn %}
12 12 <div id="topcolumn">
13 13 <div id="lsProfiles">
14 14 <div id="infoProfiles">
15 15 <label for="lblProfile" class="lblInfo">Profiles: </label>
16 16 {% if profile_list %}
17 17 <select name="lsProfiles" id="listProfiles">
18 18 <option value="-1">Choose ...</option>
19 19 {% for entry in profile_list %}
20 20 {% if objProfile %}
21 21 {% if objProfile.id == entry.id %}
22 22 <option value="{{ entry.id }}" selected>{{ entry.name }}</option>
23 23 {% else %}
24 24 <option value="{{ entry.id }}">{{ entry.name }}</option>
25 25 {% endif %}
26 26 {% else %}
27 27 <option value="{{ entry.id }}">{{ entry.name }}</option>
28 28 {% endif %}
29 29 {% endfor %}
30 30 </select>
31 31 {% else %}
32 32 <label for="lblMessage" class="lblInfo">No profiles.</label>
33 33 {% endif %}
34 34 </div>
35 35 </div>
36 36 {% block mnu_profile %}
37 37 <div id="mnuProfiles">
38 38 <nav class="MnuVertical" id="navProfiles">
39 39 <ul>
40 40 <li><a href="/abscontrol/new">New</a></li>
41 41 {% if objProfile %}
42 42 <li><a href="/abscontrol/edit/{{ objProfile.id }}">Edit</a></li>
43 43 <li><a href="#">Save</a></li>
44 44 {% endif %}
45 45 <li><a href="#">Save as</a></li>
46 46 <li><a href="/abscontrol/import">Import</a></li>
47 47 {% if objProfile %}
48 48 <li><a href="#" id="lnkExport" alt="{{ objProfile.id }}">Export</a></li>
49 49 <li><a href="#" id="lnkSendFile" alt="{{ objProfile.id }}">Send</a></li>
50 50 {% endif %}
51 51 </ul>
52 52 <div class="cleardivs"></div>
53 53 </nav>
54 54 </div>
55 55 {% endblock %}
56 56 <div class="cleardivs"></div>
57 57 </div>
58 58 {% endblock %}
59 59 {% block maincolumn %}
60 <div id="maincolumn">
61
62 </div>
60 <div id="maincolumn" style="height: 50px"></div>
63 61 {% endblock %}
64 62 <div class="cleardivs"></div>
65 63 </div>
66 64 {% endblock %} No newline at end of file
@@ -1,48 +1,48
1 1 {% load static %}
2 2 <!DOCTYPE html>
3 3 <html lang="en">
4 4 <head>
5 5 <meta charset="utf-8" />
6 6 {% comment %}
7 7 <!-- Always force latest IE rendering engine (even in intranet) & Chrome Frame
8 8 Remove this if you use the .htaccess -->
9 9 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
10 10 {% endcomment %}
11 11 <link href='http://fonts.googleapis.com/css?family=Droid+Sans|Ubuntu:400,500,300italic|Open+Sans:400,300,600|Open+Sans+Condensed:300,700|Roboto+Condensed:400,300' rel='stylesheet' type='text/css'>
12 12 <link rel="stylesheet" href="{% static 'static/css/style.css' %}" type="text/css" />
13 13 <script src="{% static 'static/js/jquery-1.9.1.min.js' %}"></script>
14 14 {% block scripting %}{% endblock %}
15 15 <title>{% block title %}JRO WEB APPS::::{% endblock %}</title>
16 16 <meta name="description" content="JRO WEB APPLICATIONS" />
17 17 <meta name="author" content="Jose Antonio Sal y Rosas Celi" />
18 18
19 19 {# <meta name="viewport" content="width=device-width; initial-scale=1.0" /> #}
20 20 {% comment %}
21 21 <!-- Replace favicon.ico & apple-touch-icon.png in the root of your domain and delete these references -->
22 22 <link rel="shortcut icon" href="/favicon.ico" />
23 23 <link rel="apple-touch-icon" href="/apple-touch-icon.png" />
24 24 {% endcomment %}
25 25 </head>
26 26 <body>
27 27 <div id="schema">
28 28 <header>
29 29 {% block header %}
30 <nav>
31 <a href="/abscontrol/">ABS</a> |
32 <a href="#">CR</a> |
33 <a href="#">DDS</a> |
30 <nav id="header">
31 <a href="/abscontrol/">ABS</a>
32 <a href="#">CR</a>
33 <a href="#">DDS</a>
34 34 <a href="#">JARS</a>
35 35 </nav>
36 36 {% endblock %}
37 37 </header>
38 38 {% block content %}
39 39 <div id="content"></div>
40 40 {% endblock %}
41 41 <footer>
42 42 {% block footer %}
43 <p>&copy; Copyright by Jicamarca Radio Observatory</p>
43 <p>&copy; Copyright 2013 by Jicamarca Radio Observatory</p>
44 44 {% endblock %}
45 45 </footer>
46 46 </div>
47 47 </body>
48 48 </html>
General Comments 0
You need to be logged in to leave comments. Login now