1 {% extends "base.html" %}
4 {% if user.is_authenticated %}
5 <script type="text/javascript" src="{% url load-js 'poller' %}"></script>
7 <script type="text/javascript" src="/static/js/jquery.dataTables.js"></script>
8 <link rel="stylesheet" type="text/css" href="/static/css/engage.itoggle.css"/>
9 <script type="text/javascript" src="/static/js/engage.itoggle-min.js"></script>
10 <script type="text/javascript">
11 $(document).ready(function(){
12 $("#hid_mid").val('');
19 '{% trans "Suspend" %}': function(){
20 route = $('#route_to_delete').text();
21 route_url_id = '#del_route_' + route;
22 url = $(route_url_id).attr('href');
26 success: function(data){
27 $('#dialog').dialog('close');
28 window.setTimeout('location.reload()', 1000);
32 '{% trans "Cancel" %}': function(){
33 $('#dialog').dialog('close');
37 update_val = $("#hid_mid").val();
38 if (update_val == 'UPDATED') {
39 $("#hid_mid").val('');
40 window.setTimeout('location.reload()', 500);
44 $('#console').dialog({
49 overlay: { opacity: 0.5, background: 'black'},
51 update_val = $("#hid_mid").val();
52 if (update_val == 'UPDATED') {
53 $("#hid_mid").val('');
54 window.setTimeout('location.reload()', 500);
58 $('#console').parent().css('opacity', 0.9);
59 $('#console').parent().css('filter', 'alpha(opacity=90)');
60 $(".button_place #routebutton").button({
62 primary: "ui-icon-circle-plus"
65 $(".edit_button").button({
67 primary: "ui-icon-wrench"
69 }).css('width','110px').css('margin-bottom','2px');
70 $(" .del_button").button({
72 primary: "ui-icon-circle-close"
75 $('#dialog').dialog('open');
77 }).css('width','110px');
78 $("#consolebutton").button({
80 primary: "ui-icon-image"
83 $("#consolebutton").stop().stop();
84 $("#consolebutton").css('color', '#555555');
85 $('#console').dialog('open');
88 $(".statustootipclass").tooltip();
89 $(".expiresclass").tooltip();
90 $(".commentclass").tooltip();
91 var oTable = $('#routes_table').dataTable({
120 "bSearchable": false,
123 "aaSorting": [[0, 'desc']],
124 "iDisplayLength": 25,
126 "sLengthMenu": '{% trans "Display" %} <select><option value="25">25</option><option value="50">50</option><option value="-1">{% trans "All" %}</option></select> {% trans "rules" %}',
127 "sProcessing": "Processing...",
128 "sZeroRecords": '{% trans "No records to display" %}',
129 "sInfo": "Showing _START_ to _END_ of _TOTAL_ entries",
130 "sInfoEmpty": "{% trans "Showing 0 to 0 of 0 entries" %}",
131 "sInfoFiltered": "(filtered from _MAX_ total entries)",
133 "sSearch": '{% trans "Search:" %}',
136 "sFirst": '{% trans "First" %}',
137 "sPrevious": '{% trans "Previous" %}',
138 "sNext": '{% trans "Next" %}',
139 "sLast": '{% trans "Last" %}'
144 $('input[name="status_filter"]').click(function(){
145 //slice off the last '|' or it doesn't work
146 //also be sure to use the third parameter
151 var checkboxs = document.getElementsByName('status_filter');
152 for (var i = 0, inp; inp = checkboxs[i]; i++) {
153 checkCookie = readCookie("cookie_" + inp.value);
155 if (checkCookie == 'true') {
156 $(inp).attr('checked', true);
159 $(inp).attr('checked', false);
163 if (inp.type.toLowerCase() == 'checkbox' && inp.checked == true) {
164 reg_exp = reg_exp + inp.value + '|';
171 oTable.fnFilter(reg_exp.slice(0, -1), 4, true);
173 $('input[name="status_filter"]').iToggle({
177 var checkboxs = document.getElementsByName('status_filter');
179 for (var i = 0, inp; inp = checkboxs[i]; i++) {
180 if (inp.type.toLowerCase() == 'checkbox' && inp.checked) {
181 reg_exp = reg_exp + inp.value + '|';
183 createCookie("cookie_" + inp.value, inp.checked, 30);
185 //passing an empty string will result in no filter
186 //thus, it must be set to something that will not exist in the column
190 oTable.fnFilter(reg_exp.slice(0, -1), 4, true);
195 function delete_route(route){
197 $('#route_to_delete').text(route_name);
204 <style type="text/css">
206 background: none repeat scroll 0 0 #36102a !important;
207 color: #edeae8 !important;
208 font-family: monospace !important;
211 font-family: monospace !important;
215 background:transparent url(/static/black_arrow.png);
225 {% block title %}{% trans "My rules" %}{% endblock %}
228 <div style="float:left">
229 <h3 style="margin-top: 0px;">{% trans "My rules" %}</h3>
231 <div class='button_place' style="float:right">
232 <button id="consolebutton">{% trans "Console" %}</button> <a href="{% url add-route %}" id="routebutton">{% trans "Add Rule" %}</a>
237 <table cellpadding="0" cellspacing="0" border="0" class="display" style='width:200px;'>
240 <th>ACTIVE</th><th>SUSPENDED</th><th>ERROR</th><th>PENDING</th>
244 <input type="checkbox" class="onoff" name="status_filter" value="ACTIVE" checked id="show_active"/>
248 <input type="checkbox" class="onoff" name="status_filter" value="SUSPENDED" id="show_inactive"/>
251 <input type="checkbox" class="onoff" name="status_filter" value="ERROR" id="show_error"/>
255 <input type="checkbox" class="onoff" name="status_filter" value="PENDING" id="show_pending"/>
261 <table class="display" width="100%" id="routes_table">
265 <th>{% trans "Name" %}</th>
266 <th>{% trans "Match" %}</th>
267 <th style="text-align: center;">{% trans "Then" %}</th>
268 <th style="text-align: center; ">{% trans "Status" %}</th>
269 {% comment %}<th style="text-align: center;">{% trans "Details" %}</th>{% endcomment %}
270 <th style="text-align: center;">{% trans "Applier" %}</th>
271 <th style="text-align: center;">{% trans "Expires" %}</th>
272 <th style="text-align: center;">{% trans "Response" %}</th>
273 <th style="text-align: center; width:180px;">{% trans "Actions" %}</th>
278 {% for route in routes %}
281 <td>{{ route.pk }}</td>
282 <td><span {% if route.comments %} class="commentclass" style="border-bottom:1px dotted red;" title="{{route.comments}}" {% endif %}>{{ route.name }}</span></td>
283 <td>{{ route.get_match|safe|escape }}</td>
284 <td style="text-align: center;">{{route.get_then|safe|escape}}</td>
285 <td style="text-align: center; "><span {% if route.status == 'EXPIRED' or route.status == 'ADMININACTIVE' or route.status == 'INACTIVE' or route.status == 'OUTOFSYNC'%} class="statustootipclass" style="border-bottom:1px dotted red;"
286 title = "{% ifequal route.status 'INACTIVE' %}Suspended by user{% else %}{% ifequal route.status 'ADMININACTIVE' %}Suspended by administrator{% else %}{% ifequal route.status 'EXPIRED' %}Suspended due to expiration{% else %}{% ifequal route.status 'OUTOFSYNC' %}Syncronization error. Configuration in device deffers from rule{% endifequal %}{% endifequal %}{% endifequal %}{% endifequal %}"{% endif %}>{% if route.status == 'EXPIRED' or route.status == 'ADMININACTIVE' or route.status == 'INACTIVE' %}SUSPENDED{% else %}{% if route.status == 'OUTOFSYNC' %}ERROR{% else %}{{route.status}}{% endif %}{% endif %}</span></td>
287 {% comment %}<td style="text-align: center;">{{ route.response }}</td>{% endcomment %}
288 <td style="text-align: center;">{{ route.applier }}</td>
289 <td style="text-align: center;"><span {% if route.status == 'EXPIRED' or route.status == 'ADMININACTIVE' or route.status == 'INACTIVE' or route.status == 'OUTOFSYNC'%}{% else %}{% if route.days_to_expire %}
291 style="border-bottom:2px dashed red;"
292 title="Expires {% ifequal route.days_to_expire '0' %}today{% else%}in {{route.days_to_expire}} day{{ route.days_to_expire|pluralize }}{% endifequal %}"
293 {% endif %}{% endif %}>{{ route.expires }}</span></td>
294 <td style="text-align: center;">{% if route.status == 'EXPIRED' %}{% trans "Rule expired" %}{% else %}{% if route.status == 'ADMININACTIVE' %}{% trans "Suspended by administrator" %}{% else %}{% if route.status == 'INACTIVE' %}{% trans "Suspended by user" %}{% else %}{{ route.response }}{% if route.status == 'PENDING' %}<img src="/static/dots.gif">{% endif %}{% endif %}{% endif %}{% endif %}</td>
295 <td style="text-align: center; width:180px;">
296 {% ifequal route.status 'ACTIVE' %}
297 <a href="{% url edit-route route.name %}" class="edit_button" id="edit_button_{{route.pk}}">{% trans "Edit" %}</a>
298 <button class="del_button" id="{{route.name}}" onclick="javascript:delete_route(this.id)">{% trans "Suspend" %}</button>
299 <a href="{% url delete-route route.name %}" style="display:none" id="del_route_{{route.name}}"></a>
301 {% if route.status == 'EXPIRED' or route.status == 'ADMININACTIVE' or route.status == 'INACTIVE' %}
302 <a href="{% url edit-route route.name %}" class="edit_button" id="edit_button_{{route.pk}}">{% trans "Reactivate" %}</a>
304 {% ifequal route.status 'OUTOFSYNC' %}
305 <a href="{% url edit-route route.name %}" class="edit_button" id="edit_button_{{route.pk}}">{% trans "ReSync" %}</a>
307 {% ifequal route.status 'ERROR' %}
308 <a href="{% url edit-route route.name %}" class="edit_button" id="edit_button_{{route.pk}}">{% trans "Fix it!" %}</a>
322 <div id="dialog" title="Suspend Rule">
323 <p>{% blocktrans %}You are about to suspend rule{% endblocktrans %} <strong><span id="route_to_delete"></span></strong></p>
324 <p>{% blocktrans %}Suspending the rule will automatically remove the configuration from the network and mark this rule as inactive.{% endblocktrans %}</p>
325 <p>{% blocktrans %}Are you sure you want to proceed?{% endblocktrans %}</p>
327 <div id="console" title="{% trans "Console" %}">
328 {% include "poll.html" %}