@@ -0,0 +1,25 | |||||
|
1 | /** | |||
|
2 | * @author Jose Antonio Sal y Rosas Celi | |||
|
3 | * @contact: jose.salyrosas@jro.igp.gob.pe, arturo.jasyrc@gmail.com | |||
|
4 | */ | |||
|
5 | ||||
|
6 | $(document).on('ready',function(){ | |||
|
7 | $('#listProfiles').change(function() { | |||
|
8 | if($(this).val() != -1){ | |||
|
9 | location.href="/abscontrol/view/" + $(this).val(); | |||
|
10 | } | |||
|
11 | }); | |||
|
12 | ||||
|
13 | $('#lnkSave').click(function() { | |||
|
14 | $('#frmPattern').submit(); | |||
|
15 | }); | |||
|
16 | ||||
|
17 | $('#lnkCancel').click(function() { | |||
|
18 | if ($("#pattern_id").val() == 0){ | |||
|
19 | location.href="/abscontrol/edit/" + $("#profile_id").val(); | |||
|
20 | }else{ | |||
|
21 | location.href="/abscontrol/" + $("#profile_id").val() + "/view/" + $("#pattern_id").val() | |||
|
22 | } | |||
|
23 | ||||
|
24 | }); | |||
|
25 | }); No newline at end of file |
@@ -0,0 +1,12 | |||||
|
1 | /** | |||
|
2 | * @author Jose Antonio Sal y Rosas Celi | |||
|
3 | * @contact: jose.salyrosas@jro.igp.gob.pe, arturo.jasyrc@gmail.com | |||
|
4 | */ | |||
|
5 | ||||
|
6 | $(document).on('ready',function(){ | |||
|
7 | $('#listProfiles').change(function() { | |||
|
8 | if($(this).val() != -1){ | |||
|
9 | location.href="/abscontrol/view/" + $(this).val(); | |||
|
10 | } | |||
|
11 | }); | |||
|
12 | }); No newline at end of file |
@@ -0,0 +1,65 | |||||
|
1 | {% extends "abscontrol/edit.html" %} | |||
|
2 | ||||
|
3 | {% block mnuPattern %} | |||
|
4 | <div class="divMenu" id="divMnuPattern"> | |||
|
5 | <nav class="MnuHorizontal"> | |||
|
6 | <ul class="mnu" id="mnuPattern"> | |||
|
7 | <li><a href="#" id="lnkSave">Save</a></li> | |||
|
8 | <li><a href="#" id="lnkCancel">Cancel</a></li> | |||
|
9 | </ul> | |||
|
10 | </nav> | |||
|
11 | </div> | |||
|
12 | <div class="cleardivs"></div> | |||
|
13 | {% endblock %} | |||
|
14 | {% block pattern %} | |||
|
15 | <div id="infoPattern"> | |||
|
16 | <form action="/abscontrol/{{ objProfile.id }}/save/" id="frmPattern" method="post"> | |||
|
17 | <div id="antennaUp"> | |||
|
18 | <fieldset class="flsAntenna"> | |||
|
19 | <legend>UP</legend> | |||
|
20 | <div class="divAntenna"> | |||
|
21 | <label for="lblAntenna">Antenna</label> | |||
|
22 | <textarea name="txtAntennaUp" class="txtAntenna" cols="38" rows="8">{{ txtAntenna }}</textarea> | |||
|
23 | </div> | |||
|
24 | <div class="divTx"> | |||
|
25 | <label for="lblTx">Tx</label> | |||
|
26 | <textarea name="txtTxUp" class="txtTR" cols="20" rows="8">{{ txtTxUp }}</textarea> | |||
|
27 | </div> | |||
|
28 | <div class="divTx"> | |||
|
29 | <label for="lblRx">Rx</label> | |||
|
30 | <textarea name="txtRxUp" class="txtTR" cols="20" rows="8">{{ txtRxUp }}</textarea> | |||
|
31 | </div> | |||
|
32 | <div class="cleardivs"></div> | |||
|
33 | <div class="divUes"> | |||
|
34 | <label for="lblUes">Ues:</label> | |||
|
35 | <input type="text" name="txtUesUp" value="{{ txtUes }}" /> | |||
|
36 | </div> | |||
|
37 | </fieldset> | |||
|
38 | </div> | |||
|
39 | <div id="antennaDown"> | |||
|
40 | <fieldset class="flsAntenna"> | |||
|
41 | <legend>DOWN</legend> | |||
|
42 | <div class="divAntenna"> | |||
|
43 | <label for="lblAntenna">Antenna</label> | |||
|
44 | <textarea name="txtAntennaDown" class="txtAntenna" cols="38" rows="8">{{ txtAntenna }}</textarea> | |||
|
45 | </div> | |||
|
46 | <div class="divTx"> | |||
|
47 | <label for="lblTx">Tx</label> | |||
|
48 | <textarea name="txtTxDown" class="txtTR" cols="20" rows="8">{{ txtTxDown }}</textarea> | |||
|
49 | </div> | |||
|
50 | <div class="divTx"> | |||
|
51 | <label for="lblRx">Rx</label> | |||
|
52 | <textarea name="txtRxDown" class="txtTR" cols="20" rows="8">{{ txtRxDown }}</textarea> | |||
|
53 | </div> | |||
|
54 | <div class="cleardivs"></div> | |||
|
55 | <div class="divUes"> | |||
|
56 | <label for="lblUes">Ues:</label> | |||
|
57 | <input type="text" name="txtUesDown" value="{{ txtUes }}" /> | |||
|
58 | </div> | |||
|
59 | </fieldset> | |||
|
60 | </div> | |||
|
61 | <input type="hidden" name="pattern_id" id="pattern_id" value="0" /> | |||
|
62 | <input type="hidden" name="profile_id" id="profile_id" value="{{ objProfile.id }}" /> | |||
|
63 | </form> | |||
|
64 | </div> | |||
|
65 | {% endblock %} |
@@ -0,0 +1,93 | |||||
|
1 | {% extends "abscontrol/index.html" %} | |||
|
2 | {% block title %}ABS CONTROL:::PROFILE:::{{ objProfile.name }}{% endblock %} | |||
|
3 | {% block scripting %} | |||
|
4 | <script src="/static/static/js/patterns.js"></script> | |||
|
5 | {% endblock %} | |||
|
6 | {% block maincolumn%} | |||
|
7 | <div id="maincolumn"> | |||
|
8 | <div id="divProfile"> | |||
|
9 | <label for="lblName">Profile:</label> | |||
|
10 | <label for="lblProfile">{{ objProfile.name }}</label> | |||
|
11 | </div> | |||
|
12 | <div id="divPattern"> | |||
|
13 | {% block mnuPattern %} | |||
|
14 | <div class="divMenu" id="divMnuPattern"> | |||
|
15 | <nav class="MnuHorizontal"> | |||
|
16 | <ul class="mnu" id="mnuPattern"> | |||
|
17 | <li><a href="/abscontrol/{{ objProfile.id }}/add">Add</a></li> | |||
|
18 | <li><a href="/abscontrol/{{ objProfile.id }}/edit/{{ patternChoosen.id }}">Edit</a></li> | |||
|
19 | {% if lsPatterns|length > 1 %} | |||
|
20 | <li><a href="/abscontrol/{{ objProfile.id }}/delete/{{ patternChoosen.id }}">Delete</a></li> | |||
|
21 | {% endif %} | |||
|
22 | <li><a href="#">Apply</a></li> | |||
|
23 | </ul> | |||
|
24 | </nav> | |||
|
25 | </div> | |||
|
26 | <div class="cleardivs"></div> | |||
|
27 | {% endblock %} | |||
|
28 | {% block pattern %} | |||
|
29 | <div id="infoPattern"> | |||
|
30 | {% if patternChoosen %} | |||
|
31 | <div id="navPatterns"> | |||
|
32 | <nav class="MnuHorizontal"> | |||
|
33 | <ul class="mnu" id="navPatternList"> | |||
|
34 | {% for element in lsPatterns %} | |||
|
35 | {% if patternChoosen.id == element.id %} | |||
|
36 | <li><a href="/abscontrol/{{ objProfile.id }}/view/{{ element.id }}" class="lnkPatternSelected">{{ element.value }}</a></li> | |||
|
37 | {% else %} | |||
|
38 | <li><a href="/abscontrol/{{ objProfile.id }}/view/{{ element.id }}" class="lnkPattern">{{ element.value }}</a></li> | |||
|
39 | {% endif %} | |||
|
40 | {% endfor %} | |||
|
41 | </ul> | |||
|
42 | </nav> | |||
|
43 | </div> | |||
|
44 | {% endif %} | |||
|
45 | <div id="antennaUp"> | |||
|
46 | <fieldset class="flsAntenna"> | |||
|
47 | <legend>UP</legend> | |||
|
48 | <div class="divAntenna"> | |||
|
49 | <label for="lblAntenna">Antenna</label> | |||
|
50 | <p>{{ antennaUp.value }}</p> | |||
|
51 | </div> | |||
|
52 | <div class="divTx"> | |||
|
53 | <label for="lblTx">Tx</label> | |||
|
54 | <p>{{ antennaUp.tx }}</p> | |||
|
55 | </div> | |||
|
56 | <div class="divTx"> | |||
|
57 | <label for="lblRx">Rx</label> | |||
|
58 | <p>{{ antennaUp.rx }}</p> | |||
|
59 | </div> | |||
|
60 | <div class="cleardivs"></div> | |||
|
61 | <div class="divUes"> | |||
|
62 | <label for="lblUes">Ues:</label> | |||
|
63 | <label for="lblAntennaUpUes">{{ antennaUp.ues }}</label> | |||
|
64 | </div> | |||
|
65 | </fieldset> | |||
|
66 | </div> | |||
|
67 | <div id="antennaDown"> | |||
|
68 | <fieldset class="flsAntenna"> | |||
|
69 | <legend>DOWN</legend> | |||
|
70 | <div class="divAntenna"> | |||
|
71 | <label for="lblAntenna">Antenna</label> | |||
|
72 | <p>{{ antennaDown.value }}</textarea> | |||
|
73 | </div> | |||
|
74 | <div class="divTx"> | |||
|
75 | <label for="lblTx">Tx</label> | |||
|
76 | <p>{{ antennaDown.tx }}</p> | |||
|
77 | </div> | |||
|
78 | <div class="divTx"> | |||
|
79 | <label for="lblRx">Rx</label> | |||
|
80 | <p>{{ antennaDown.rx }}</p> | |||
|
81 | </div> | |||
|
82 | <div class="cleardivs"></div> | |||
|
83 | <div class="divUes"> | |||
|
84 | <label for="lblUes">Ues:</label> | |||
|
85 | <label for="lblAntennaDownUes">{{ antennaDown.ues }}</label> | |||
|
86 | </div> | |||
|
87 | </fieldset> | |||
|
88 | </div> | |||
|
89 | </div> | |||
|
90 | {% endblock %} | |||
|
91 | </div> | |||
|
92 | </div> | |||
|
93 | {% endblock %} |
@@ -0,0 +1,69 | |||||
|
1 | {% extends "abscontrol/edit.html" %} | |||
|
2 | ||||
|
3 | {% block mnuPattern %} | |||
|
4 | <div class="divMenu" id="divMnuPattern"> | |||
|
5 | <nav class="MnuHorizontal"> | |||
|
6 | <ul class="mnu" id="mnuPattern"> | |||
|
7 | <li><a href="#" id="lnkSave">Save</a></li> | |||
|
8 | <li><a href="#" id="lnkCancel">Cancel</a></li> | |||
|
9 | </ul> | |||
|
10 | </nav> | |||
|
11 | </div> | |||
|
12 | <div class="cleardivs"></div> | |||
|
13 | {% endblock %} | |||
|
14 | {% block pattern %} | |||
|
15 | <div id="infoPattern"> | |||
|
16 | {% if patternChoosen %} | |||
|
17 | <div id="navPatterns"> | |||
|
18 | <label for="lblValue">Pattern:</label> | |||
|
19 | <label for="lblPatternValue">{{ patternChoosen.value }}</label> | |||
|
20 | </div> | |||
|
21 | {% endif %} | |||
|
22 | <div id="antennaUp"> | |||
|
23 | <fieldset class="flsAntenna"> | |||
|
24 | <legend>UP</legend> | |||
|
25 | <div class="divAntenna"> | |||
|
26 | <label for="lblAntenna">Antenna</label> | |||
|
27 | <textarea name="txtAntennaUp" class="txtAntenna" cols="38" rows="8">{{ antennaUp.value }}</textarea> | |||
|
28 | </div> | |||
|
29 | <div class="divTx"> | |||
|
30 | <label for="lblTx">Tx</label> | |||
|
31 | <textarea name="txtTxUp" class="txtTR" cols="20" rows="8">{{ antennaUp.tx }}</textarea> | |||
|
32 | </div> | |||
|
33 | <div class="divTx"> | |||
|
34 | <label for="lblRx">Rx</label> | |||
|
35 | <textarea name="txtRxUp" class="txtTR" cols="20" rows="8">{{ antennaUp.rx }}</textarea> | |||
|
36 | </div> | |||
|
37 | <div class="cleardivs"></div> | |||
|
38 | <div class="divUes"> | |||
|
39 | <label for="lblUes">Ues:</label> | |||
|
40 | <input type="text" name="txtUesUp" value="{{ antennaUp.ues }}" /> | |||
|
41 | </div> | |||
|
42 | </fieldset> | |||
|
43 | </div> | |||
|
44 | <div id="antennaDown"> | |||
|
45 | <fieldset class="flsAntenna"> | |||
|
46 | <legend>DOWN</legend> | |||
|
47 | <div class="divAntenna"> | |||
|
48 | <label for="lblAntenna">Antenna</label> | |||
|
49 | <textarea name="txtAntennaDown" class="txtAntenna" cols="38" rows="8">{{ antennaDown.value }}</textarea> | |||
|
50 | </div> | |||
|
51 | <div class="divTx"> | |||
|
52 | <label for="lblTx">Tx</label> | |||
|
53 | <textarea name="txtTxDown" class="txtTR" cols="20" rows="8">{{ antennaDown.tx }}</textarea> | |||
|
54 | </div> | |||
|
55 | <div class="divTx"> | |||
|
56 | <label for="lblRx">Rx</label> | |||
|
57 | <textarea name="txtRxDown" class="txtTR" cols="20" rows="8">{{ antennaDown.rx }}</textarea> | |||
|
58 | </div> | |||
|
59 | <div class="cleardivs"></div> | |||
|
60 | <div class="divUes"> | |||
|
61 | <label for="lblUes">Ues:</label> | |||
|
62 | <input type="text" name="txtUesDown" value="{{ antennaDown.ues }}" /> | |||
|
63 | </div> | |||
|
64 | </fieldset> | |||
|
65 | </div> | |||
|
66 | <input type="hidden" name="pattern_id" id="pattern_id" value="{{ patternChoosen.id }}" /> | |||
|
67 | <input type="hidden" name="profile_id" id="profile_id" value="{{ objProfile.id }}" /> | |||
|
68 | </div> | |||
|
69 | {% endblock %} |
@@ -0,0 +1,80 | |||||
|
1 | {% extends "abscontrol/edit.html" %} | |||
|
2 | ||||
|
3 | {% block mnuPattern %} | |||
|
4 | <div class="divMenu" id="divMnuPattern"> | |||
|
5 | <nav class="MnuHorizontal"> | |||
|
6 | <ul class="mnu" id="mnuPattern"> | |||
|
7 | <li><a href="/abscontrol/{{ objProfile.id }}/edit/{{ patternChoosen.id }}">Edit</a></li> | |||
|
8 | {% if lsPatterns|length > 1 %} | |||
|
9 | <li><a href="/abscontrol/{{ objProfile.id }}/delete/{{ patternChoosen.id }}">Delete</a></li> | |||
|
10 | {% endif %} | |||
|
11 | <li><a href="#">Apply</a></li> | |||
|
12 | </ul> | |||
|
13 | </nav> | |||
|
14 | </div> | |||
|
15 | <div class="cleardivs"></div> | |||
|
16 | {% endblock %} | |||
|
17 | {% block pattern %} | |||
|
18 | <div id="infoPattern"> | |||
|
19 | {% if patternChoosen %} | |||
|
20 | <div id="navPatterns"> | |||
|
21 | <nav class="MnuHorizontal"> | |||
|
22 | <ul class="mnu" id="navPatternList"> | |||
|
23 | {% for element in lsPatterns %} | |||
|
24 | {% if patternChoosen.id == element.id %} | |||
|
25 | <li><a href="/abscontrol/{{ objProfile.id }}/view/{{ element.id }}" class="lnkPatternSelected">{{ element.value }}</a></li> | |||
|
26 | {% else %} | |||
|
27 | <li><a href="/abscontrol/{{ objProfile.id }}/view/{{ element.id }}" class="lnkPattern">{{ element.value }}</a></li> | |||
|
28 | {% endif %} | |||
|
29 | {% endfor %} | |||
|
30 | </ul> | |||
|
31 | </nav> | |||
|
32 | </div> | |||
|
33 | {% endif %} | |||
|
34 | <div id="antennaUp"> | |||
|
35 | <fieldset class="flsAntenna"> | |||
|
36 | <legend>UP</legend> | |||
|
37 | <div class="divAntenna"> | |||
|
38 | <label for="lblAntenna">Antenna</label> | |||
|
39 | <p>{{ antennaUp.value }}</p> | |||
|
40 | </div> | |||
|
41 | <div class="divTx"> | |||
|
42 | <label for="lblTx">Tx</label> | |||
|
43 | <p>{{ antennaUp.tx }}</p> | |||
|
44 | </div> | |||
|
45 | <div class="divTx"> | |||
|
46 | <label for="lblRx">Rx</label> | |||
|
47 | <p>{{ antennaUp.rx }}</p> | |||
|
48 | </div> | |||
|
49 | <div class="cleardivs"></div> | |||
|
50 | <div class="divUes"> | |||
|
51 | <label for="lblUes">Ues:</label> | |||
|
52 | <label for="lblAntennaUpUes">{{ antennaUp.ues }}</label> | |||
|
53 | </div> | |||
|
54 | </fieldset> | |||
|
55 | </div> | |||
|
56 | <div id="antennaDown"> | |||
|
57 | <fieldset class="flsAntenna"> | |||
|
58 | <legend>DOWN</legend> | |||
|
59 | <div class="divAntenna"> | |||
|
60 | <label for="lblAntenna">Antenna</label> | |||
|
61 | <p>{{ antennaDown.value }}</p> | |||
|
62 | </div> | |||
|
63 | <div class="divTx"> | |||
|
64 | <label for="lblTx">Tx</label> | |||
|
65 | <p>{{ antennaDown.tx }}</p> | |||
|
66 | </div> | |||
|
67 | <div class="divTx"> | |||
|
68 | <label for="lblRx">Rx</label> | |||
|
69 | <p>{{ antennaDown.rx }}</p> | |||
|
70 | </div> | |||
|
71 | <div class="cleardivs"></div> | |||
|
72 | <div class="divUes"> | |||
|
73 | <label for="lblUes">Ues:</label> | |||
|
74 | <label for="lblAntennaDownUes">{{ antennaDown.ues }}</label> | |||
|
75 | </div> | |||
|
76 | </fieldset> | |||
|
77 | </div> | |||
|
78 | <input type="hidden" name="profile_id" id="profile_id" value="{{ objProfile.id }}" /> | |||
|
79 | </div> | |||
|
80 | {% endblock %} |
@@ -1,11 +1,17 | |||||
1 | from django.conf.urls import patterns, url |
|
1 | from django.conf.urls import patterns, url | |
2 |
|
2 | |||
3 | urlpatterns = patterns('abscontrol.views', |
|
3 | urlpatterns = patterns('abscontrol.views', | |
4 | url(r'^$', 'index'), |
|
4 | url(r'^$', 'index'), | |
5 | url(r'^new/$', 'new'), |
|
5 | url(r'^new/$', 'new'), | |
6 | url(r'^save/$', 'save'), |
|
6 | url(r'^save/$', 'save'), | |
7 | url(r'^view/(?P<profile_id>\d+)/$', 'view'), |
|
7 | url(r'^view/(?P<profile_id>\d+)/$', 'view'), | |
|
8 | url(r'^edit/(?P<profile_id>\d+)/$', 'edit'), | |||
8 | #url(r'^(?P<profile_id>\d+)/$', 'detail'), |
|
9 | #url(r'^(?P<profile_id>\d+)/$', 'detail'), | |
|
10 | url(r'^(?P<profile_id>\d+)/add/$', 'addPattern'), | |||
|
11 | url(r'^(?P<profile_id>\d+)/save/$', 'savePattern'), | |||
|
12 | url(r'^(?P<profile_id>\d+)/edit/(?P<pattern_id>\d+)/$', 'editPattern'), | |||
|
13 | url(r'^(?P<profile_id>\d+)/view/(?P<pattern_id>\d+)/$', 'viewPattern'), | |||
|
14 | url(r'^(?P<profile_id>\d+)/delete/(?P<pattern_id>\d+)/$', 'deletePattern'), | |||
9 | #url(r'^(?P<poll_id>\d+)/results/$', 'results'), |
|
15 | #url(r'^(?P<poll_id>\d+)/results/$', 'results'), | |
10 | #url(r'^(?P<poll_id>\d+)/vote/$', 'vote'), |
|
16 | #url(r'^(?P<poll_id>\d+)/vote/$', 'vote'), | |
11 | ) No newline at end of file |
|
17 | ) |
@@ -1,103 +1,211 | |||||
1 | from django.shortcuts import render_to_response, redirect |
|
1 | from django.shortcuts import render_to_response, redirect | |
2 | from abscontrol.models import Profile |
|
2 | from abscontrol.models import Profile, Pattern | |
|
3 | ||||
|
4 | txtAntenna = "[[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5]," \ | |||
|
5 | "[1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0]," \ | |||
|
6 | "[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5]," \ | |||
|
7 | "[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5]," \ | |||
|
8 | "[1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0]," \ | |||
|
9 | "[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5]," \ | |||
|
10 | "[1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0]," \ | |||
|
11 | "[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5]]" | |||
|
12 | ||||
|
13 | txtTxUp = "[[1,1,1,1,1,1,1,1]," \ | |||
|
14 | "[1,1,1,1,1,1,1,1]," \ | |||
|
15 | "[1,1,1,1,1,1,1,1]," \ | |||
|
16 | "[1,1,1,1,1,1,1,1]," \ | |||
|
17 | "[1,1,1,1,1,1,1,1]," \ | |||
|
18 | "[1,1,1,1,1,1,1,1]," \ | |||
|
19 | "[1,1,1,1,1,1,1,1]," \ | |||
|
20 | "[1,1,1,1,1,1,1,1]]" | |||
|
21 | ||||
|
22 | txtTxDown = "[[1,1,1,1,0,0,0,0]," \ | |||
|
23 | "[1,1,1,1,0,0,0,0]," \ | |||
|
24 | "[1,1,1,1,0,0,0,0]," \ | |||
|
25 | "[1,1,1,1,0,0,0,0]," \ | |||
|
26 | "[0,0,0,0,1,1,1,1]," \ | |||
|
27 | "[0,0,0,0,1,1,1,1]," \ | |||
|
28 | "[0,0,0,0,1,1,1,1]," \ | |||
|
29 | "[0,0,0,0,1,1,1,1]]" | |||
|
30 | ||||
|
31 | txtRxUp = "[[0,0,0,0,1,1,1,1]," \ | |||
|
32 | "[0,0,0,0,1,1,1,1]," \ | |||
|
33 | "[0,0,0,0,1,1,1,1]," \ | |||
|
34 | "[0,0,0,0,1,1,1,1]," \ | |||
|
35 | "[1,1,1,1,1,1,1,1]," \ | |||
|
36 | "[1,1,1,1,1,1,1,1]," \ | |||
|
37 | "[1,1,1,1,1,1,1,1]," \ | |||
|
38 | "[1,1,1,1,1,1,1,1]]" | |||
|
39 | ||||
|
40 | txtRxDown = "[[1,1,1,1,1,1,1,1]," \ | |||
|
41 | "[1,1,1,1,1,1,1,1]," \ | |||
|
42 | "[1,1,1,1,1,1,1,1]," \ | |||
|
43 | "[1,1,1,1,1,1,1,1]," \ | |||
|
44 | "[1,1,1,1,1,1,1,1]," \ | |||
|
45 | "[1,1,1,1,1,1,1,1]," \ | |||
|
46 | "[1,1,1,1,1,1,1,1]," \ | |||
|
47 | "[1,1,1,1,1,1,1,1]]" | |||
|
48 | ||||
|
49 | txtUes = "[0.533333,0.00000,1.06667,0.00000]" | |||
3 |
|
50 | |||
4 | def index(request): |
|
51 | def index(request): | |
5 | #latest_poll_list = profileAntenna.objects.all().order_by('-pub_date')[:5] |
|
52 | #latest_poll_list = profileAntenna.objects.all().order_by('-pub_date')[:5] | |
6 | profile_list = Profile.objects.all() |
|
53 | profile_list = Profile.objects.all() | |
7 | return render_to_response('abscontrol/index.html', {'profile_list': profile_list}) |
|
54 | return render_to_response('abscontrol/index.html', {'profile_list': profile_list}) | |
8 |
|
55 | |||
9 | def new(request): |
|
56 | def new(request): | |
10 | profile_list = Profile.objects.all() |
|
57 | profile_list = Profile.objects.all() | |
11 | txtAntenna = "[[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5]," \ |
|
|||
12 | "[1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0]," \ |
|
|||
13 | "[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5]," \ |
|
|||
14 | "[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5]," \ |
|
|||
15 | "[1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0]," \ |
|
|||
16 | "[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5]," \ |
|
|||
17 | "[1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0]," \ |
|
|||
18 | "[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5]]" |
|
|||
19 | txtTxUp = "[[1,1,1,1,1,1,1,1]," \ |
|
|||
20 | "[1,1,1,1,1,1,1,1]," \ |
|
|||
21 | "[1,1,1,1,1,1,1,1]," \ |
|
|||
22 | "[1,1,1,1,1,1,1,1]," \ |
|
|||
23 | "[1,1,1,1,1,1,1,1]," \ |
|
|||
24 | "[1,1,1,1,1,1,1,1]," \ |
|
|||
25 | "[1,1,1,1,1,1,1,1]," \ |
|
|||
26 | "[1,1,1,1,1,1,1,1]]" |
|
|||
27 | txtTxDown = "[[1,1,1,1,0,0,0,0]," \ |
|
|||
28 | "[1,1,1,1,0,0,0,0]," \ |
|
|||
29 | "[1,1,1,1,0,0,0,0]," \ |
|
|||
30 | "[1,1,1,1,0,0,0,0]," \ |
|
|||
31 | "[0,0,0,0,1,1,1,1]," \ |
|
|||
32 | "[0,0,0,0,1,1,1,1]," \ |
|
|||
33 | "[0,0,0,0,1,1,1,1]," \ |
|
|||
34 | "[0,0,0,0,1,1,1,1]]" |
|
|||
35 | txtRxUp = "[[0,0,0,0,1,1,1,1]," \ |
|
|||
36 | "[0,0,0,0,1,1,1,1]," \ |
|
|||
37 | "[0,0,0,0,1,1,1,1]," \ |
|
|||
38 | "[0,0,0,0,1,1,1,1]," \ |
|
|||
39 | "[1,1,1,1,1,1,1,1]," \ |
|
|||
40 | "[1,1,1,1,1,1,1,1]," \ |
|
|||
41 | "[1,1,1,1,1,1,1,1]," \ |
|
|||
42 | "[1,1,1,1,1,1,1,1]]" |
|
|||
43 | txtRxDown = "[[1,1,1,1,1,1,1,1]," \ |
|
|||
44 | "[1,1,1,1,1,1,1,1]," \ |
|
|||
45 | "[1,1,1,1,1,1,1,1]," \ |
|
|||
46 | "[1,1,1,1,1,1,1,1]," \ |
|
|||
47 | "[1,1,1,1,1,1,1,1]," \ |
|
|||
48 | "[1,1,1,1,1,1,1,1]," \ |
|
|||
49 | "[1,1,1,1,1,1,1,1]," \ |
|
|||
50 | "[1,1,1,1,1,1,1,1]]" |
|
|||
51 |
|
||||
52 | txtUes = "[0.533333,0.00000,1.06667,0.00000]" |
|
|||
53 |
|
58 | |||
54 | return render_to_response('abscontrol/new.html', {'profile_list': profile_list, |
|
59 | return render_to_response('abscontrol/new.html', {'profile_list': profile_list, | |
55 | 'txtAntenna' : txtAntenna, |
|
60 | 'txtAntenna' : txtAntenna, | |
56 | 'txtUes' : txtUes, 'txtTxUp' : txtTxUp, |
|
61 | 'txtUes' : txtUes, 'txtTxUp' : txtTxUp, | |
57 | 'txtTxDown' : txtTxDown, 'txtRxUp' : txtRxUp, |
|
62 | 'txtTxDown' : txtTxDown, 'txtRxUp' : txtRxUp, | |
58 | 'txtRxDown' : txtRxDown, |
|
63 | 'txtRxDown' : txtRxDown, | |
59 | }) |
|
64 | }) | |
60 |
|
65 | |||
61 | def save(request): |
|
66 | def save(request): | |
62 |
|
67 | |||
63 | txtProfile = request.POST["txtProfile"] |
|
68 | txtProfile = request.POST["txtProfile"] | |
64 |
|
69 | |||
65 | txtAntennaUp = request.POST["txtAntennaUp"] |
|
70 | txtAntennaUp = request.POST["txtAntennaUp"] | |
66 | txtTxUp = request.POST["txtTxUp"] |
|
71 | txtTxUp = request.POST["txtTxUp"] | |
67 | txtRxUp = request.POST["txtRxUp"] |
|
72 | txtRxUp = request.POST["txtRxUp"] | |
68 | txtUesUp = request.POST["txtUesUp"] |
|
73 | txtUesUp = request.POST["txtUesUp"] | |
69 |
|
74 | |||
70 | txtAntennaDown = request.POST["txtAntennaDown"] |
|
75 | txtAntennaDown = request.POST["txtAntennaDown"] | |
71 | txtTxDown = request.POST["txtTxDown"] |
|
76 | txtTxDown = request.POST["txtTxDown"] | |
72 | txtRxDown = request.POST["txtRxDown"] |
|
77 | txtRxDown = request.POST["txtRxDown"] | |
73 | txtUesDown = request.POST["txtUesDown"] |
|
78 | txtUesDown = request.POST["txtUesDown"] | |
74 |
|
79 | |||
75 | newprofile = Profile(name=txtProfile) |
|
80 | newprofile = Profile(name=txtProfile) | |
76 | newprofile.save() |
|
81 | newprofile.save() | |
77 |
|
82 | |||
78 | newpattern = newprofile.pattern_set.create(value=1) |
|
83 | newpattern = newprofile.pattern_set.create(value=1) | |
79 | newpattern.antennaup_set.create(value=txtAntennaUp,tx=txtTxUp,rx=txtRxUp,ues=txtUesUp) |
|
84 | newpattern.antennaup_set.create(value=txtAntennaUp,tx=txtTxUp,rx=txtRxUp,ues=txtUesUp) | |
80 | newpattern.antennadown_set.create(value=txtAntennaDown,tx=txtTxDown,rx=txtRxDown,ues=txtUesDown) |
|
85 | newpattern.antennadown_set.create(value=txtAntennaDown,tx=txtTxDown,rx=txtRxDown,ues=txtUesDown) | |
81 |
|
86 | |||
82 | newurl = '/abscontrol/view/%d' % newprofile.id |
|
87 | newurl = '/abscontrol/view/%d' % newprofile.id | |
83 |
|
88 | |||
84 | return redirect(newurl) |
|
89 | return redirect(newurl) | |
85 |
|
90 | |||
86 | def view(request, profile_id): |
|
91 | def view(request, profile_id): | |
|
92 | nextPattern = 0 | |||
|
93 | ||||
87 | if request.method == 'GET' and 'pattern' in request.GET: |
|
94 | if request.method == 'GET' and 'pattern' in request.GET: | |
88 | pattern_value = request.GET["pattern"] |
|
95 | pattern_value = request.GET["pattern"] | |
89 | else: |
|
96 | else: | |
90 | pattern_value = 1 |
|
97 | pattern_value = 1 | |
91 |
|
98 | |||
92 | profile_list = Profile.objects.all() |
|
99 | profile_list = Profile.objects.all() | |
93 | objProfile = Profile.objects.get(pk=profile_id) |
|
100 | objProfile = Profile.objects.get(pk=profile_id) | |
94 |
|
101 | |||
95 | lsPatterns = objProfile.pattern_set.all() |
|
102 | lsPatterns = objProfile.pattern_set.all() | |
96 | patternChoosen = objProfile.pattern_set.get(value=pattern_value) |
|
103 | patternChoosen = objProfile.pattern_set.get(value=pattern_value) | |
97 | objAntennaUp = patternChoosen.antennaup_set.get() |
|
104 | objAntennaUp = patternChoosen.antennaup_set.get() | |
98 | objAntennaDown = patternChoosen.antennadown_set.get() |
|
105 | objAntennaDown = patternChoosen.antennadown_set.get() | |
99 |
|
106 | |||
|
107 | if len(lsPatterns) > 1: | |||
|
108 | if pattern_value == 1: | |||
|
109 | nextValuePattern = pattern_value + 1 | |||
|
110 | nextPattern = objProfile.pattern_set.get(value=nextValuePattern) | |||
|
111 | ||||
|
112 | ||||
100 | return render_to_response('abscontrol/view.html', {'objProfile': objProfile, 'profile_list': profile_list, |
|
113 | return render_to_response('abscontrol/view.html', {'objProfile': objProfile, 'profile_list': profile_list, | |
101 | 'patternChoosen' : patternChoosen, 'lsPatterns' : lsPatterns, |
|
114 | 'patternChoosen' : patternChoosen, 'lsPatterns' : lsPatterns, | |
102 | 'antennaUp' : objAntennaUp, 'antennaDown' : objAntennaDown, |
|
115 | 'antennaUp' : objAntennaUp, 'antennaDown' : objAntennaDown, | |
|
116 | 'nextPattern' : nextPattern, | |||
103 | }) |
|
117 | }) | |
|
118 | ||||
|
119 | def edit(request, profile_id): | |||
|
120 | if request.method == 'GET' and 'pattern' in request.GET: | |||
|
121 | pattern_value = request.GET["pattern"] | |||
|
122 | else: | |||
|
123 | pattern_value = 1 | |||
|
124 | ||||
|
125 | profile_list = Profile.objects.all() | |||
|
126 | objProfile = Profile.objects.get(pk=profile_id) | |||
|
127 | ||||
|
128 | lsPatterns = objProfile.pattern_set.all() | |||
|
129 | patternChoosen = objProfile.pattern_set.get(value=pattern_value) | |||
|
130 | objAntennaUp = patternChoosen.antennaup_set.get() | |||
|
131 | objAntennaDown = patternChoosen.antennadown_set.get() | |||
|
132 | ||||
|
133 | return render_to_response('abscontrol/edit.html', {'objProfile': objProfile, 'profile_list': profile_list, | |||
|
134 | 'patternChoosen' : patternChoosen, 'lsPatterns' : lsPatterns, | |||
|
135 | 'antennaUp' : objAntennaUp, 'antennaDown' : objAntennaDown, | |||
|
136 | }) | |||
|
137 | ||||
|
138 | def addPattern(request, profile_id): | |||
|
139 | profile_list = Profile.objects.all() | |||
|
140 | objProfile = Profile.objects.get(pk=profile_id) | |||
|
141 | ||||
|
142 | return render_to_response('abscontrol/addPattern.html', {'objProfile': objProfile, 'profile_list': profile_list, | |||
|
143 | 'txtAntenna' : txtAntenna, 'txtUes' : txtUes, | |||
|
144 | 'txtTxUp' : txtTxUp, 'txtTxDown' : txtTxDown, | |||
|
145 | 'txtRxUp' : txtRxUp, 'txtRxDown' : txtRxDown, | |||
|
146 | }) | |||
|
147 | ||||
|
148 | def editPattern(request, profile_id, pattern_id): | |||
|
149 | profile_list = Profile.objects.all() | |||
|
150 | objProfile = Profile.objects.get(pk=profile_id) | |||
|
151 | lsPatterns = objProfile.pattern_set.all() | |||
|
152 | patternChoosen = Pattern.objects.get(pk=pattern_id) | |||
|
153 | objAntennaUp = patternChoosen.antennaup_set.get() | |||
|
154 | objAntennaDown = patternChoosen.antennadown_set.get() | |||
|
155 | ||||
|
156 | return render_to_response('abscontrol/editPattern.html', {'objProfile': objProfile, 'profile_list': profile_list, | |||
|
157 | 'patternChoosen' : patternChoosen, 'lsPatterns' : lsPatterns, | |||
|
158 | 'antennaUp' : objAntennaUp, 'antennaDown' : objAntennaDown, | |||
|
159 | }) | |||
|
160 | ||||
|
161 | def savePattern(request, profile_id): | |||
|
162 | maxValuePattern = 0 | |||
|
163 | txtAntennaUp = request.POST["txtAntennaUp"] | |||
|
164 | txtTxUp = request.POST["txtTxUp"] | |||
|
165 | txtRxUp = request.POST["txtRxUp"] | |||
|
166 | txtUesUp = request.POST["txtUesUp"] | |||
|
167 | ||||
|
168 | txtAntennaDown = request.POST["txtAntennaDown"] | |||
|
169 | txtTxDown = request.POST["txtTxDown"] | |||
|
170 | txtRxDown = request.POST["txtRxDown"] | |||
|
171 | txtUesDown = request.POST["txtUesDown"] | |||
|
172 | ||||
|
173 | objProfile = Profile.objects.get(pk=profile_id) | |||
|
174 | lsPatterns = objProfile.pattern_set.all() | |||
|
175 | for element in lsPatterns: | |||
|
176 | if element.value > maxValuePattern: | |||
|
177 | maxPattern = element.value | |||
|
178 | ||||
|
179 | if maxPattern < 10 : | |||
|
180 | newValuePattern = maxPattern + 1 | |||
|
181 | newpattern = objProfile.pattern_set.create(value=newValuePattern) | |||
|
182 | newpattern.antennaup_set.create(value=txtAntennaUp,tx=txtTxUp,rx=txtRxUp,ues=txtUesUp) | |||
|
183 | newpattern.antennadown_set.create(value=txtAntennaDown,tx=txtTxDown,rx=txtRxDown,ues=txtUesDown) | |||
|
184 | ||||
|
185 | newurl = '/abscontrol/%d/view/%d' % (int(profile_id), newpattern.id) | |||
|
186 | else: | |||
|
187 | newurl = '/abscontrol/edit/%d' % (int(profile_id)) | |||
|
188 | ||||
|
189 | return redirect(newurl) | |||
|
190 | ||||
|
191 | def viewPattern(request, profile_id, pattern_id): | |||
|
192 | ||||
|
193 | profile_list = Profile.objects.all() | |||
|
194 | objProfile = Profile.objects.get(pk=profile_id) | |||
|
195 | ||||
|
196 | patternChoosen = Pattern.objects.get(pk=pattern_id) | |||
|
197 | ||||
|
198 | objAntennaUp = patternChoosen.antennaup_set.get() | |||
|
199 | objAntennaDown = patternChoosen.antennadown_set.get() | |||
|
200 | ||||
|
201 | lsPatterns = objProfile.pattern_set.all() | |||
|
202 | ||||
|
203 | return render_to_response('abscontrol/viewPattern.html', {'objProfile': objProfile, 'profile_list': profile_list, | |||
|
204 | 'patternChoosen' : patternChoosen, 'lsPatterns' : lsPatterns, | |||
|
205 | 'antennaUp' : objAntennaUp, 'antennaDown' : objAntennaDown, | |||
|
206 | }) | |||
|
207 | ||||
|
208 | def deletePattern(request, profile_id, pattern_id): | |||
|
209 | newurl = '/abscontrol/edit/%d' % int(profile_id) | |||
|
210 | ||||
|
211 | return redirect(newurl) |
@@ -1,103 +1,120 | |||||
1 | @font-face { |
|
1 | @font-face { | |
2 | font-family: 'Open Sans'; |
|
2 | font-family: 'Open Sans'; | |
3 | font-style: normal; |
|
3 | font-style: normal; | |
4 | font-weight: 300; |
|
4 | font-weight: 300; | |
5 | src: local('Open Sans Light'), local('OpenSans-Light'), url(http://themes.googleusercontent.com/static/fonts/opensans/v6/DXI1ORHCpsQm3Vp6mXoaTXhCUOGz7vYGh680lGh-uXM.woff) format('woff'); |
|
5 | src: local('Open Sans Light'), local('OpenSans-Light'), url(http://themes.googleusercontent.com/static/fonts/opensans/v6/DXI1ORHCpsQm3Vp6mXoaTXhCUOGz7vYGh680lGh-uXM.woff) format('woff'); | |
6 | } |
|
6 | } | |
7 | @font-face { |
|
7 | @font-face { | |
8 | font-family: 'Open Sans'; |
|
8 | font-family: 'Open Sans'; | |
9 | font-style: normal; |
|
9 | font-style: normal; | |
10 | font-weight: 400; |
|
10 | font-weight: 400; | |
11 | src: local('Open Sans'), local('OpenSans'), url(http://themes.googleusercontent.com/static/fonts/opensans/v6/cJZKeOuBrn4kERxqtaUH3T8E0i7KZn-EPnyo3HZu7kw.woff) format('woff'); |
|
11 | src: local('Open Sans'), local('OpenSans'), url(http://themes.googleusercontent.com/static/fonts/opensans/v6/cJZKeOuBrn4kERxqtaUH3T8E0i7KZn-EPnyo3HZu7kw.woff) format('woff'); | |
12 | } |
|
12 | } | |
13 | @font-face { |
|
13 | @font-face { | |
14 | font-family: 'Open Sans'; |
|
14 | font-family: 'Open Sans'; | |
15 | font-style: normal; |
|
15 | font-style: normal; | |
16 | font-weight: 600; |
|
16 | font-weight: 600; | |
17 | src: local('Open Sans Semibold'), local('OpenSans-Semibold'), url(http://themes.googleusercontent.com/static/fonts/opensans/v6/MTP_ySUJH_bn48VBG8sNSnhCUOGz7vYGh680lGh-uXM.woff) format('woff'); |
|
17 | src: local('Open Sans Semibold'), local('OpenSans-Semibold'), url(http://themes.googleusercontent.com/static/fonts/opensans/v6/MTP_ySUJH_bn48VBG8sNSnhCUOGz7vYGh680lGh-uXM.woff) format('woff'); | |
18 | } |
|
18 | } | |
19 | @font-face { |
|
19 | @font-face { | |
20 | font-family: 'Open Sans'; |
|
20 | font-family: 'Open Sans'; | |
21 | font-style: normal; |
|
21 | font-style: normal; | |
22 | font-weight: 700; |
|
22 | font-weight: 700; | |
23 | src: local('Open Sans Bold'), local('OpenSans-Bold'), url(http://themes.googleusercontent.com/static/fonts/opensans/v6/k3k702ZOKiLJc3WVjuplzHhCUOGz7vYGh680lGh-uXM.woff) format('woff'); |
|
23 | src: local('Open Sans Bold'), local('OpenSans-Bold'), url(http://themes.googleusercontent.com/static/fonts/opensans/v6/k3k702ZOKiLJc3WVjuplzHhCUOGz7vYGh680lGh-uXM.woff) format('woff'); | |
24 | } |
|
24 | } | |
25 | @font-face { |
|
25 | @font-face { | |
26 | font-family: 'Open Sans'; |
|
26 | font-family: 'Open Sans'; | |
27 | font-style: normal; |
|
27 | font-style: normal; | |
28 | font-weight: 800; |
|
28 | font-weight: 800; | |
29 | src: local('Open Sans Extrabold'), local('OpenSans-Extrabold'), url(http://themes.googleusercontent.com/static/fonts/opensans/v6/EInbV5DfGHOiMmvb1Xr-hnhCUOGz7vYGh680lGh-uXM.woff) format('woff'); |
|
29 | src: local('Open Sans Extrabold'), local('OpenSans-Extrabold'), url(http://themes.googleusercontent.com/static/fonts/opensans/v6/EInbV5DfGHOiMmvb1Xr-hnhCUOGz7vYGh680lGh-uXM.woff) format('woff'); | |
30 | } |
|
30 | } | |
31 | @font-face { |
|
31 | @font-face { | |
32 | font-family: 'Open Sans'; |
|
32 | font-family: 'Open Sans'; | |
33 | font-style: italic; |
|
33 | font-style: italic; | |
34 | font-weight: 300; |
|
34 | font-weight: 300; | |
35 | src: local('Open Sans Light Italic'), local('OpenSansLight-Italic'), url(http://themes.googleusercontent.com/static/fonts/opensans/v6/PRmiXeptR36kaC0GEAetxh_xHqYgAV9Bl_ZQbYUxnQU.woff) format('woff'); |
|
35 | src: local('Open Sans Light Italic'), local('OpenSansLight-Italic'), url(http://themes.googleusercontent.com/static/fonts/opensans/v6/PRmiXeptR36kaC0GEAetxh_xHqYgAV9Bl_ZQbYUxnQU.woff) format('woff'); | |
36 | } |
|
36 | } | |
37 | @font-face { |
|
37 | @font-face { | |
38 | font-family: 'Open Sans'; |
|
38 | font-family: 'Open Sans'; | |
39 | font-style: italic; |
|
39 | font-style: italic; | |
40 | font-weight: 400; |
|
40 | font-weight: 400; | |
41 | src: local('Open Sans Italic'), local('OpenSans-Italic'), url(http://themes.googleusercontent.com/static/fonts/opensans/v6/xjAJXh38I15wypJXxuGMBobN6UDyHWBl620a-IRfuBk.woff) format('woff'); |
|
41 | src: local('Open Sans Italic'), local('OpenSans-Italic'), url(http://themes.googleusercontent.com/static/fonts/opensans/v6/xjAJXh38I15wypJXxuGMBobN6UDyHWBl620a-IRfuBk.woff) format('woff'); | |
42 | } |
|
42 | } | |
43 | @font-face { |
|
43 | @font-face { | |
44 | font-family: 'Open Sans'; |
|
44 | font-family: 'Open Sans'; | |
45 | font-style: italic; |
|
45 | font-style: italic; | |
46 | font-weight: 600; |
|
46 | font-weight: 600; | |
47 | src: local('Open Sans Semibold Italic'), local('OpenSans-SemiboldItalic'), url(http://themes.googleusercontent.com/static/fonts/opensans/v6/PRmiXeptR36kaC0GEAetxn5HxGBcBvicCpTp6spHfNo.woff) format('woff'); |
|
47 | src: local('Open Sans Semibold Italic'), local('OpenSans-SemiboldItalic'), url(http://themes.googleusercontent.com/static/fonts/opensans/v6/PRmiXeptR36kaC0GEAetxn5HxGBcBvicCpTp6spHfNo.woff) format('woff'); | |
48 | } |
|
48 | } | |
49 | @font-face { |
|
49 | @font-face { | |
50 | font-family: 'Open Sans'; |
|
50 | font-family: 'Open Sans'; | |
51 | font-style: italic; |
|
51 | font-style: italic; | |
52 | font-weight: 700; |
|
52 | font-weight: 700; | |
53 | src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'), url(http://themes.googleusercontent.com/static/fonts/opensans/v6/PRmiXeptR36kaC0GEAetxjqR_3kx9_hJXbbyU8S6IN0.woff) format('woff'); |
|
53 | src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'), url(http://themes.googleusercontent.com/static/fonts/opensans/v6/PRmiXeptR36kaC0GEAetxjqR_3kx9_hJXbbyU8S6IN0.woff) format('woff'); | |
54 | } |
|
54 | } | |
55 | @font-face { |
|
55 | @font-face { | |
56 | font-family: 'Open Sans'; |
|
56 | font-family: 'Open Sans'; | |
57 | font-style: italic; |
|
57 | font-style: italic; | |
58 | font-weight: 800; |
|
58 | font-weight: 800; | |
59 | src: local('Open Sans Extrabold Italic'), local('OpenSans-ExtraboldItalic'), url(http://themes.googleusercontent.com/static/fonts/opensans/v6/PRmiXeptR36kaC0GEAetxkCDe67GEgBv_HnyvHTfdew.woff) format('woff'); |
|
59 | src: local('Open Sans Extrabold Italic'), local('OpenSans-ExtraboldItalic'), url(http://themes.googleusercontent.com/static/fonts/opensans/v6/PRmiXeptR36kaC0GEAetxkCDe67GEgBv_HnyvHTfdew.woff) format('woff'); | |
60 | } |
|
60 | } | |
61 |
|
61 | |||
62 | body {font-size: 11px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif} |
|
62 | body {font-size: 11px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif} | |
63 | article, aside, figure, footer, header, hgroup, nav, section { display:block; } |
|
63 | article, aside, figure, footer, header, hgroup, nav, section { display:block; } | |
64 | header {border: 1px solid #fcc; font-size: 2em; height: 50px; text-align: center; line-height: 50px} |
|
64 | header {border: 1px solid #fcc; font-size: 2em; height: 50px; text-align: center; line-height: 50px} | |
65 | #schema {margin: 0 auto; width: 980px; border: 1px solid #f00; padding: 10px 10px 10px 10px} |
|
65 | #schema {margin: 0 auto; width: 980px; border: 1px solid #f00; padding: 10px 10px 10px 10px} | |
66 | #content {border: 1px solid #1cc; margin-top: 5px; margin-bottom: 5px} |
|
66 | #content {border: 1px solid #1cc; margin-top: 5px; margin-bottom: 5px} | |
67 | #content #leftcolumn {float: left;border: 1px solid #c55; width: 150px; font-family: Monaco;} |
|
67 | #content #leftcolumn {float: left;border: 1px solid #c55; width: 150px; font-family: Monaco;} | |
68 | #content #maincolumn {float: left; border: 1px solid #000; width: 800px; padding-left: 20px;} |
|
68 | #content #maincolumn {float: left; border: 1px solid #000; width: 800px; padding-left: 20px;} | |
69 | footer {border: 1px solid #200; font-size: 0.9em; height: 30px; text-align: center; line-height: 20px} |
|
69 | footer {border: 1px solid #200; font-size: 0.9em; height: 30px; text-align: center; line-height: 20px} | |
70 |
|
70 | |||
71 |
.cleardivs {clear: both; border: |
|
71 | .cleardivs {clear: both; border: 0px solid #400; height: 0px} | |
72 |
|
72 | /****************************************************************************************/ | ||
|
73 | /****** ESTILOS GENERALES *****************/ | |||
|
74 | /****************************************************************************************/ | |||
|
75 | .mnu{ height: 22px; border: 1px solid #c55 !important;} | |||
|
76 | .mnu li{ display:inline;} | |||
|
77 | /*.MnuHorizontal{ display: -webkit-box; -webkit-box-orient:horizontal;}*/ | |||
|
78 | /*.MnuHorizontal a{ display:block; padding:10px; -webkit-box-flex:1; text-align:center; }*/ | |||
73 |
|
79 | |||
74 | /****************************************************************************************/ |
|
80 | /****************************************************************************************/ | |
75 | /****** MENU DE NAVEGACION DE PERFILES **********************************/ |
|
81 | /****** MENU DE NAVEGACION DE PERFILES **********************************/ | |
76 | /****************************************************************************************/ |
|
82 | /****************************************************************************************/ | |
77 | #content #infoProfiles {border: 1px solid #d00; width: 140px; margin: 0px; padding-top: 2px; padding-bottom: 2px} |
|
83 | #content #infoProfiles {border: 1px solid #d00; width: 140px; margin: 0px; padding-top: 2px; padding-bottom: 2px} | |
78 | .lblInfo {padding-left: 12px; line-height: 20px;} |
|
84 | .lblInfo {padding-left: 12px; line-height: 20px;} | |
79 | #infoProfiles select {padding-left: 12px; line-height: 20px;margin-left: 12px} |
|
85 | #infoProfiles select {padding-left: 12px; line-height: 20px;margin-left: 12px} | |
80 |
#content nav {border: |
|
86 | #content nav {border: 0px solid #c55 !important; margin: 0px; font-family: Monaco; font-size: 1.2em;} | |
81 |
#content nav ul{list-style: none; list-style-type: none; margin: |
|
87 | #content nav ul{list-style: none; list-style-type: none; margin: 0; padding-left: 20px; border: 0px solid #eee !important} | |
82 |
#content nav ul li{line-height: 2 |
|
88 | #content nav ul li{line-height: 22px; } | |
83 |
|
89 | |||
84 | /****************************************************************************************/ |
|
90 | /****************************************************************************************/ | |
85 | /******** FORMULARIO DE PERFILES *************************************/ |
|
91 | /******** FORMULARIO DE PERFILES *************************************/ | |
86 | /****************************************************************************************/ |
|
92 | /****************************************************************************************/ | |
87 | #divProfile {border: 0px solid #dff; margin: 10px 0px; padding: 10px 10px; width: 500px} |
|
93 | #divProfile { border: 0px solid #dff; margin: 10px 0px; padding: 10px 10px; width: 500px } | |
88 | .flsAntenna {margin: 10px 0px; width: 750px; padding: 10px 10px} |
|
94 | .flsAntenna { margin: 10px 0px; width: 750px; padding: 10px 10px } | |
89 |
#divPattern textarea,input[type=text],label |
|
95 | #divPattern textarea,input[type=text],label{ font-family: Monaco; font-size: inherit; } | |
90 |
|
96 | |||
91 | #divPattern textarea {resize: none; overflow: hidden} |
|
97 | #divPattern textarea {resize: none; overflow: hidden} | |
92 |
|
98 | |||
93 |
.divAntenna {float: left; margin: 10px; height: 160px; border: |
|
99 | .divAntenna { float: left; margin: 10px; height: 160px; border: 0px solid #fcc !important; width: 260px } | |
94 |
.divAntenna label |
|
100 | .divAntenna label{ display: block } | |
95 | .txtAntenna {max-width: 250px; max-height: 125px; width: 250px; height: 125px} |
|
101 | .txtAntenna { max-width: 250px; max-height: 125px; width: 250px; height: 125px } | |
|
102 | .divAntenna p{ max-width: 250px; max-height: 125px; width: 250px; height: 125px } | |||
96 |
|
103 | |||
97 | .divTx {display: block; float: left; margin: 10px; height: 150px} |
|
104 | .divTx { display: block; float: left; margin: 10px; height: 150px } | |
98 |
.divTx label |
|
105 | .divTx label{ display: block } | |
99 |
.divTx textarea |
|
106 | .divTx textarea{ width: 135px; max-width: 135px; height: 125px; max-height: 125px; text-align: justify } | |
|
107 | .divTx p{ width: 135px; max-width: 135px; height: 125px; max-height: 125px; text-align: justify } | |||
100 |
|
108 | |||
101 | .divUes {display: block; margin: 10px} |
|
109 | .divUes { display: block; margin: 10px} | |
102 | .divUes input[type=text] {width: 240px; max-width: 240px;} |
|
110 | .divUes input[type=text] { width: 240px; max-width: 240px;} | |
103 |
|
111 | |||
|
112 | /****************************************************************************************/ | |||
|
113 | /****** MENU DE NAVEGACION DE PATRONES **********************************/ | |||
|
114 | /****************************************************************************************/ | |||
|
115 | #divMnuPattern{ width: 350px; height: 25px; display: block; border: 1px solid #1cc !important; float: right } | |||
|
116 | #infoPattern{ display: block; border: 1px solid #1494f6 !important, margin: 5px 2px; } | |||
|
117 | #navPatterns{ margin: 5px auto; padding: 2px; border: 1px solid #d00 !important; width: 400px; height: 25px} | |||
|
118 | #navPatterns ul li{ width: 50px; border: 1px solid #1cc !important} | |||
|
119 | #navPatterns a{ width: 50px; border: 0px solid #1cc !important} | |||
|
120 | #navPatternList{ margin: 0px auto; border: 1px solid #ecc !important} |
@@ -1,64 +1,60 | |||||
1 | {% extends "base.html" %} |
|
1 | {% extends "base.html" %} | |
2 |
|
2 | |||
3 | {% block title %}ABS CONTROL:::::{% endblock %} |
|
3 | {% block title %}ABS CONTROL:::::{% endblock %} | |
4 | {% block scripting %} |
|
4 | {% block scripting %} | |
5 | {% if profile_list %} |
|
5 | {% if profile_list %} | |
6 | <script type="text/javascript"> |
|
6 | <script src="/static/static/js/profiles.js"></script> | |
7 | $(document).on('ready',function(){ |
|
|||
8 | $('#listProfiles').change(function() { |
|
|||
9 | if($(this).val() != -1){ |
|
|||
10 | location.href="/abscontrol/view/" + $(this).val(); |
|
|||
11 | } |
|
|||
12 | }); |
|
|||
13 | }); |
|
|||
14 | </script> |
|
|||
15 | {% endif %} |
|
7 | {% endif %} | |
16 | {% endblock %} |
|
8 | {% endblock %} | |
17 | {% block content %} |
|
9 | {% block content %} | |
18 | <div id="content"> |
|
10 | <div id="content"> | |
19 | {% block leftcolumn %} |
|
11 | {% block leftcolumn %} | |
20 | <div id="leftcolumn"> |
|
12 | <div id="leftcolumn"> | |
21 | <div id="lsProfiles"> |
|
13 | <div id="lsProfiles"> | |
22 | <div id="infoProfiles"> |
|
14 | <div id="infoProfiles"> | |
23 | <label for="lblProfile" class="lblInfo">Profiles:</label><br /> |
|
15 | <label for="lblProfile" class="lblInfo">Profiles:</label><br /> | |
24 | {% if profile_list %} |
|
16 | {% if profile_list %} | |
25 | <select name="lsProfiles" id="listProfiles"> |
|
17 | <select name="lsProfiles" id="listProfiles"> | |
26 | <option value="-1">Choose ...</option> |
|
18 | <option value="-1">Choose ...</option> | |
27 | {% for entry in profile_list %} |
|
19 | {% for entry in profile_list %} | |
28 | {% if objProfile %} |
|
20 | {% if objProfile %} | |
29 | {% if objProfile.id == entry.id %} |
|
21 | {% if objProfile.id == entry.id %} | |
30 | <option value="{{ entry.id }}" selected>{{ entry.name }}</option> |
|
22 | <option value="{{ entry.id }}" selected>{{ entry.name }}</option> | |
31 | {% else %} |
|
23 | {% else %} | |
32 | <option value="{{ entry.id }}">{{ entry.name }}</option> |
|
24 | <option value="{{ entry.id }}">{{ entry.name }}</option> | |
33 | {% endif %} |
|
25 | {% endif %} | |
34 | {% else %} |
|
26 | {% else %} | |
35 | <option value="{{ entry.id }}">{{ entry.name }}</option> |
|
27 | <option value="{{ entry.id }}">{{ entry.name }}</option> | |
36 | {% endif %} |
|
28 | {% endif %} | |
37 | {% endfor %} |
|
29 | {% endfor %} | |
38 | </select> |
|
30 | </select> | |
39 | {% else %} |
|
31 | {% else %} | |
40 | <label for="lblMessage" class="lblInfo">No profiles.</label> |
|
32 | <label for="lblMessage" class="lblInfo">No profiles.</label> | |
41 | {% endif %} |
|
33 | {% endif %} | |
42 | </div> |
|
34 | </div> | |
43 | </div> |
|
35 | </div> | |
44 | {% block mnu_profile %} |
|
36 | {% block mnu_profile %} | |
45 | <nav> |
|
37 | <nav> | |
46 | <ul> |
|
38 | <ul> | |
47 | <li><a href="/abscontrol/new">New</a></li> |
|
39 | <li><a href="/abscontrol/new">New</a></li> | |
|
40 | {% if objProfile %} | |||
|
41 | <li><a href="/abscontrol/edit/{{ objProfile.id }}">Edit</a></li> | |||
|
42 | <li><a href="#">Save</a></li> | |||
|
43 | {% endif %} | |||
48 | <li><a href="#">Save as</a></li> |
|
44 | <li><a href="#">Save as</a></li> | |
49 | <li><a href="#">Import</a></li> |
|
45 | <li><a href="#">Import</a></li> | |
50 | <li><a href="#">Export</a></li> |
|
46 | <li><a href="#">Export</a></li> | |
51 | <li><a href="#">Apply</a></li> |
|
47 | <li><a href="#">Apply</a></li> | |
52 | </ul> |
|
48 | </ul> | |
53 | </nav> |
|
49 | </nav> | |
54 | {% endblock %} |
|
50 | {% endblock %} | |
55 | </div> |
|
51 | </div> | |
56 | {% endblock %} |
|
52 | {% endblock %} | |
57 | {% block maincolumn %} |
|
53 | {% block maincolumn %} | |
58 | <div id="maincolumn"> |
|
54 | <div id="maincolumn"> | |
59 |
|
55 | |||
60 | </div> |
|
56 | </div> | |
61 | {% endblock %} |
|
57 | {% endblock %} | |
62 | <div class="cleardivs"></div> |
|
58 | <div class="cleardivs"></div> | |
63 | </div> |
|
59 | </div> | |
64 | {% endblock %} No newline at end of file |
|
60 | {% endblock %} |
@@ -1,63 +1,74 | |||||
1 | {% extends "abscontrol/index.html" %} |
|
1 | {% extends "abscontrol/index.html" %} | |
2 | {% block title %}ABS CONTROL:::PROFILE:::{{ objProfile.name }}{% endblock %} |
|
2 | {% block title %}ABS CONTROL:::PROFILE:::{{ objProfile.name }}{% endblock %} | |
3 |
|
3 | |||
4 | {% block maincolumn%} |
|
4 | {% block maincolumn%} | |
5 | <div id="maincolumn"> |
|
5 | <div id="maincolumn"> | |
6 | <form action="/abscontrol/save/" method="post"> |
|
|||
7 | <div id="divProfile"> |
|
6 | <div id="divProfile"> | |
8 | <label for="lblName">Profile:</label> |
|
7 | <label for="lblName">Profile:</label> | |
9 | <label for="lblProfile">{{ objProfile.name }}</label> |
|
8 | <label for="lblProfile">{{ objProfile.name }}</label> | |
10 | </div> |
|
9 | </div> | |
11 | <div id="divPattern"> |
|
10 | <div id="divPattern"> | |
12 | {% if patternChoosen %} |
|
11 | <div id="infoPattern"> | |
13 | <label for="lblValue">Pattern:</label> |
|
12 | {% if patternChoosen %} | |
14 | <label for="lblPatternValue">{{ patternChoosen.value }}</label> |
|
13 | <div id="navPatterns"> | |
15 | {% endif %} |
|
14 | <nav class="MnuHorizontal"> | |
16 | <div id="antennaUp"> |
|
15 | <ul class="mnu" id="navPatternList"> | |
17 | <fieldset class="flsAntenna"> |
|
16 | {% for element in lsPatterns %} | |
18 | <legend>UP</legend> |
|
17 | {% if patternChoosen.id == element.id %} | |
19 | <div class="divAntenna"> |
|
18 | <li><a href="/abscontrol/{{ objProfile.id }}/view/{{ element.id }}" class="lnkPatternSelected">{{ element.value }}</a></li> | |
20 | <label for="lblAntenna">Antenna</label> |
|
19 | {% else %} | |
21 | <textarea name="txtAntennaUp" class="txtAntenna" cols="38" rows="8">{{ antennaUp.value }}</textarea> |
|
20 | <li><a href="/abscontrol/{{ objProfile.id }}/view/{{ element.id }}" class="lnkPattern">{{ element.value }}</a></li> | |
22 |
|
|
21 | {% endif %} | |
23 | <div class="divTx"> |
|
22 | {% endfor %} | |
24 |
< |
|
23 | </ul> | |
25 | <textarea name="txtTxUp" class="txtTR" cols="20" rows="8">{{ antennaUp.tx }}</textarea> |
|
24 | </nav> | |
26 |
|
|
25 | </div> | |
27 | <div class="divTx"> |
|
26 | {% endif %} | |
28 | <label for="lblRx">Rx</label> |
|
27 | <div id="antennaUp"> | |
29 | <textarea name="txtRxUp" class="txtTR" cols="20" rows="8">{{ antennaUp.rx }}</textarea> |
|
28 | <fieldset class="flsAntenna"> | |
30 |
</d |
|
29 | <legend>UP</legend> | |
31 |
<div class=" |
|
30 | <div class="divAntenna"> | |
32 | <div class="divUes"> |
|
31 | <label for="lblAntenna">Antenna</label> | |
33 | <label for="lblUes">Ues:</label> |
|
32 | <p>{{ antennaUp.value }}</p> | |
34 | <label for="lblAntennaUpUes">{{ antennaUp.ues }}</label> |
|
33 | </div> | |
35 |
< |
|
34 | <div class="divTx"> | |
36 | </fieldset> |
|
35 | <label for="lblTx">Tx</label> | |
37 | </div> |
|
36 | <p>{{ antennaUp.tx }}</p> | |
38 | <div id="antennaDown"> |
|
37 | </div> | |
39 |
< |
|
38 | <div class="divTx"> | |
40 | <legend>DOWN</legend> |
|
39 | <label for="lblRx">Rx</label> | |
41 | <div class="divAntenna"> |
|
40 | <p>{{ antennaUp.rx }}</p> | |
42 | <label for="lblAntenna">Antenna</label> |
|
41 | </div> | |
43 | <textarea name="txtAntennaDown" class="txtAntenna" cols="38" rows="8">{{ antennaDown.value }}</textarea> |
|
42 | <div class="cleardivs"></div> | |
44 |
< |
|
43 | <div class="divUes"> | |
45 | <div class="divTx"> |
|
44 | <label for="lblUes">Ues:</label> | |
46 |
<label for="lbl |
|
45 | <label for="lblAntennaUpUes">{{ antennaUp.ues }}</label> | |
47 | <textarea name="txtTxDown" class="txtTR" cols="20" rows="8">{{ antennaDown.tx }}</textarea> |
|
46 | </div> | |
48 |
</ |
|
47 | </fieldset> | |
49 |
|
|
48 | </div> | |
50 | <label for="lblRx">Rx</label> |
|
49 | <div id="antennaDown"> | |
51 | <textarea name="txtRxDown" class="txtTR" cols="20" rows="8">{{ antennaDown.rx }}</textarea> |
|
50 | <fieldset class="flsAntenna"> | |
52 |
</d |
|
51 | <legend>DOWN</legend> | |
53 |
<div class=" |
|
52 | <div class="divAntenna"> | |
54 | <div class="divUes"> |
|
53 | <label for="lblAntenna">Antenna</label> | |
55 | <label for="lblUes">Ues:</label> |
|
54 | <p>{{ antennaDown.value }}</p> | |
56 | <label for="lblAntennaDownUes">{{ antennaDown.ues }}</label> |
|
55 | </div> | |
57 |
< |
|
56 | <div class="divTx"> | |
58 | </fieldset> |
|
57 | <label for="lblTx">Tx</label> | |
|
58 | <p>{{ antennaDown.tx }}</p> | |||
|
59 | </div> | |||
|
60 | <div class="divTx"> | |||
|
61 | <label for="lblRx">Rx</label> | |||
|
62 | <p>{{ antennaDown.rx }}</p> | |||
|
63 | </div> | |||
|
64 | <div class="cleardivs"></div> | |||
|
65 | <div class="divUes"> | |||
|
66 | <label for="lblUes">Ues:</label> | |||
|
67 | <label for="lblAntennaDownUes">{{ antennaDown.ues }}</label> | |||
|
68 | </div> | |||
|
69 | </fieldset> | |||
|
70 | </div> | |||
59 | </div> |
|
71 | </div> | |
60 | </div> |
|
72 | </div> | |
61 | </form> |
|
|||
62 | </div> |
|
73 | </div> | |
63 | {% endblock %} |
|
74 | {% endblock %} |
@@ -1,52 +1,52 | |||||
1 | {% load static %} |
|
1 | {% load static %} | |
2 | <!DOCTYPE html> |
|
2 | <!DOCTYPE html> | |
3 | <html lang="en"> |
|
3 | <html lang="en"> | |
4 | <head> |
|
4 | <head> | |
5 | <meta charset="utf-8" /> |
|
5 | <meta charset="utf-8" /> | |
6 | {% comment %} |
|
6 | {% comment %} | |
7 | <!-- Always force latest IE rendering engine (even in intranet) & Chrome Frame |
|
7 | <!-- Always force latest IE rendering engine (even in intranet) & Chrome Frame | |
8 | Remove this if you use the .htaccess --> |
|
8 | Remove this if you use the .htaccess --> | |
9 | <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> |
|
9 | <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> | |
10 | {% endcomment %} |
|
10 | {% endcomment %} | |
11 | <link rel="stylesheet" href="{% static 'static/css/style.css' %}" type="text/css" /> |
|
11 | <link rel="stylesheet" href="{% static 'static/css/style.css' %}" type="text/css" /> | |
12 | <script src="{% static 'static/js/jquery-1.9.1.min.js' %}"></script> |
|
12 | <script src="{% static 'static/js/jquery-1.9.1.min.js' %}"></script> | |
|
13 | {% block scripting %}{% endblock %} | |||
13 | <title>{% block title %}JRO WEB APPS::::{% endblock %}</title> |
|
14 | <title>{% block title %}JRO WEB APPS::::{% endblock %}</title> | |
14 | <meta name="description" content="JRO WEB APPLICATIONS" /> |
|
15 | <meta name="description" content="JRO WEB APPLICATIONS" /> | |
15 | <meta name="author" content="Jose Antonio Sal y Rosas Celi" /> |
|
16 | <meta name="author" content="Jose Antonio Sal y Rosas Celi" /> | |
16 |
|
17 | |||
17 | {# <meta name="viewport" content="width=device-width; initial-scale=1.0" /> #} |
|
18 | {# <meta name="viewport" content="width=device-width; initial-scale=1.0" /> #} | |
18 | {% comment %} |
|
19 | {% comment %} | |
19 | <!-- Replace favicon.ico & apple-touch-icon.png in the root of your domain and delete these references --> |
|
20 | <!-- Replace favicon.ico & apple-touch-icon.png in the root of your domain and delete these references --> | |
20 | <link rel="shortcut icon" href="/favicon.ico" /> |
|
21 | <link rel="shortcut icon" href="/favicon.ico" /> | |
21 | <link rel="apple-touch-icon" href="/apple-touch-icon.png" /> |
|
22 | <link rel="apple-touch-icon" href="/apple-touch-icon.png" /> | |
22 | {% endcomment %} |
|
23 | {% endcomment %} | |
23 | {% block scripting %}{% endblock %} |
|
|||
24 | </head> |
|
24 | </head> | |
25 | <body> |
|
25 | <body> | |
26 | <div id="schema"> |
|
26 | <div id="schema"> | |
27 | <header> |
|
27 | <header> | |
28 | {% block header %} |
|
28 | {% block header %} | |
29 | <nav> |
|
29 | <nav> | |
30 | <a href="/abscontrol">ABS</a> | |
|
30 | <a href="/abscontrol">ABS</a> | | |
31 | <a href="#">CR</a> | |
|
31 | <a href="#">CR</a> | | |
32 | <a href="#">DDS</a> | |
|
32 | <a href="#">DDS</a> | | |
33 | <a href="#">JARS</a> |
|
33 | <a href="#">JARS</a> | |
34 | </nav> |
|
34 | </nav> | |
35 | {% endblock %} |
|
35 | {% endblock %} | |
36 | </header> |
|
36 | </header> | |
37 | {% block content %} |
|
37 | {% block content %} | |
38 | <div id="content"> |
|
38 | <div id="content"> | |
39 | <nav> |
|
39 | <nav> | |
40 | <p><a href="/">Home</a></p> |
|
40 | <p><a href="/">Home</a></p> | |
41 | <p><a href="/contact">Contact</a></p> |
|
41 | <p><a href="/contact">Contact</a></p> | |
42 | </nav> |
|
42 | </nav> | |
43 | </div> |
|
43 | </div> | |
44 | {% endblock %} |
|
44 | {% endblock %} | |
45 | <footer> |
|
45 | <footer> | |
46 | {% block footer %} |
|
46 | {% block footer %} | |
47 | <p>© Copyright by Jicamarca Radio Observatory</p> |
|
47 | <p>© Copyright by Jicamarca Radio Observatory</p> | |
48 | {% endblock %} |
|
48 | {% endblock %} | |
49 | </footer> |
|
49 | </footer> | |
50 | </div> |
|
50 | </div> | |
51 | </body> |
|
51 | </body> | |
52 | </html> |
|
52 | </html> |
General Comments 0
You need to be logged in to leave comments.
Login now