move the static files to the correct place
|
@ -1,7 +1,7 @@
|
||||||
{% load static %}
|
{% load static %}
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<head>
|
<head>
|
||||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.css">
|
<link rel="stylesheet" type="text/css" href="{% static "core/semantic.min.css" %}">
|
||||||
<title>Network Inventory</title>
|
<title>Network Inventory</title>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
@ -23,6 +23,6 @@
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
</footer>
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.js"></script>
|
<script type="text/javascript" src="{% static "core/semantic.min.js" %}"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -118,7 +118,4 @@ USE_TZ = True
|
||||||
# Static files (CSS, JavaScript, Images)
|
# Static files (CSS, JavaScript, Images)
|
||||||
# https://docs.djangoproject.com/en/2.0/howto/static-files/
|
# https://docs.djangoproject.com/en/2.0/howto/static-files/
|
||||||
STATIC_URL = '/static/'
|
STATIC_URL = '/static/'
|
||||||
|
STATIC_ROOT = os.path.join(BASE_DIR, "static")
|
||||||
STATICFILES_DIRS = [
|
|
||||||
os.path.join(BASE_DIR, "static"),
|
|
||||||
]
|
|
||||||
|
|
|
@ -441,6 +441,8 @@ select {
|
||||||
}
|
}
|
||||||
|
|
||||||
select[multiple] {
|
select[multiple] {
|
||||||
|
/* Allow HTML size attribute to override the height in the rule above. */
|
||||||
|
height: auto;
|
||||||
min-height: 150px;
|
min-height: 150px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -662,6 +664,11 @@ div.breadcrumbs a:focus, div.breadcrumbs a:hover {
|
||||||
|
|
||||||
/* ACTION ICONS */
|
/* ACTION ICONS */
|
||||||
|
|
||||||
|
.viewlink, .inlineviewlink {
|
||||||
|
padding-left: 16px;
|
||||||
|
background: url(../img/icon-viewlink.svg) 0 1px no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
.addlink {
|
.addlink {
|
||||||
padding-left: 16px;
|
padding-left: 16px;
|
||||||
background: url(../img/icon-addlink.svg) 0 1px no-repeat;
|
background: url(../img/icon-addlink.svg) 0 1px no-repeat;
|
||||||
|
@ -822,10 +829,12 @@ table#change-history tbody th {
|
||||||
|
|
||||||
#header {
|
#header {
|
||||||
width: auto;
|
width: auto;
|
||||||
height: 40px;
|
height: auto;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
padding: 10px 40px;
|
padding: 10px 40px;
|
||||||
background: #417690;
|
background: #417690;
|
||||||
line-height: 40px;
|
|
||||||
color: #ffc;
|
color: #ffc;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
|
@ -177,7 +177,7 @@ form .aligned table p {
|
||||||
padding-left: 0;
|
padding-left: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
fieldset .field-box {
|
fieldset .fieldBox {
|
||||||
float: left;
|
float: left;
|
||||||
margin-right: 20px;
|
margin-right: 20px;
|
||||||
}
|
}
|
||||||
|
@ -291,12 +291,29 @@ body.popup .submit-row {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.submit-row a.closelink {
|
||||||
|
display: inline-block;
|
||||||
|
background: #bbbbbb;
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 10px 15px;
|
||||||
|
height: 15px;
|
||||||
|
line-height: 15px;
|
||||||
|
margin: 0 0 0 5px;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
.submit-row a.deletelink:focus,
|
.submit-row a.deletelink:focus,
|
||||||
.submit-row a.deletelink:hover,
|
.submit-row a.deletelink:hover,
|
||||||
.submit-row a.deletelink:active {
|
.submit-row a.deletelink:active {
|
||||||
background: #a41515;
|
background: #a41515;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.submit-row a.closelink:focus,
|
||||||
|
.submit-row a.closelink:hover,
|
||||||
|
.submit-row a.closelink:active {
|
||||||
|
background: #aaaaaa;
|
||||||
|
}
|
||||||
|
|
||||||
/* CUSTOM FORM FIELDS */
|
/* CUSTOM FORM FIELDS */
|
||||||
|
|
||||||
.vSelectMultipleField {
|
.vSelectMultipleField {
|
||||||
|
@ -336,7 +353,7 @@ body.popup .submit-row {
|
||||||
width: 2.2em;
|
width: 2.2em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.vTextField {
|
.vTextField, .vUUIDField {
|
||||||
width: 20em;
|
width: 20em;
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,8 @@ body.login {
|
||||||
|
|
||||||
.login #header {
|
.login #header {
|
||||||
height: auto;
|
height: auto;
|
||||||
padding: 5px 16px;
|
padding: 15px 16px;
|
||||||
|
justify-content: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.login #header h1 {
|
.login #header h1 {
|
|
@ -38,11 +38,9 @@ input[type="submit"], button {
|
||||||
/* Header */
|
/* Header */
|
||||||
|
|
||||||
#header {
|
#header {
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
padding: 15px 30px;
|
padding: 15px 30px;
|
||||||
height: auto;
|
justify-content: flex-start;
|
||||||
line-height: 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#branding h1 {
|
#branding h1 {
|
||||||
|
@ -207,13 +205,13 @@ input[type="submit"], button {
|
||||||
min-height: 0;
|
min-height: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
fieldset .field-box {
|
fieldset .fieldBox {
|
||||||
float: none;
|
float: none;
|
||||||
margin: 0 -10px;
|
margin: 0 -10px;
|
||||||
padding: 0 10px;
|
padding: 0 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
fieldset .field-box + .field-box {
|
fieldset .fieldBox + .fieldBox {
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
padding-top: 10px;
|
padding-top: 10px;
|
||||||
border-top: 1px solid #eee;
|
border-top: 1px solid #eee;
|
||||||
|
@ -572,7 +570,7 @@ input[type="submit"], button {
|
||||||
width: auto;
|
width: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
fieldset .field-box + .field-box {
|
fieldset .fieldBox + .fieldBox {
|
||||||
margin-top: 15px;
|
margin-top: 15px;
|
||||||
padding-top: 15px;
|
padding-top: 15px;
|
||||||
}
|
}
|
||||||
|
@ -810,12 +808,16 @@ input[type="submit"], button {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.submit-row input, .submit-row input.default, .submit-row a {
|
.submit-row input, .submit-row input.default, .submit-row a, .submit-row a.closelink {
|
||||||
float: none;
|
float: none;
|
||||||
margin: 0 0 10px;
|
margin: 0 0 10px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.submit-row a.closelink {
|
||||||
|
padding: 10px 0;
|
||||||
|
}
|
||||||
|
|
||||||
.submit-row p.deletelink-box {
|
.submit-row p.deletelink-box {
|
||||||
order: 4;
|
order: 4;
|
||||||
}
|
}
|
|
@ -77,4 +77,8 @@
|
||||||
margin-left: 0;
|
margin-left: 0;
|
||||||
margin-right: 15px;
|
margin-right: 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[dir="rtl"] .aligned ul {
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -35,7 +35,7 @@ th {
|
||||||
margin-right: 1.5em;
|
margin-right: 1.5em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.addlink, .changelink {
|
.viewlink, .addlink, .changelink {
|
||||||
padding-left: 0;
|
padding-left: 0;
|
||||||
padding-right: 16px;
|
padding-right: 16px;
|
||||||
background-position: 100% 1px;
|
background-position: 100% 1px;
|
||||||
|
@ -170,6 +170,11 @@ form .aligned p.help, form .aligned div.help {
|
||||||
clear: right;
|
clear: right;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
form .aligned ul {
|
||||||
|
margin-right: 163px;
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
form ul.inline li {
|
form ul.inline li {
|
||||||
float: right;
|
float: right;
|
||||||
padding-right: 0;
|
padding-right: 0;
|
||||||
|
@ -180,7 +185,7 @@ input[type=submit].default, .submit-row input.default {
|
||||||
float: left;
|
float: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
fieldset .field-box {
|
fieldset .fieldBox {
|
||||||
float: right;
|
float: right;
|
||||||
margin-left: 20px;
|
margin-left: 20px;
|
||||||
margin-right: 0;
|
margin-right: 0;
|
|
@ -1,2 +1,3 @@
|
||||||
Roboto webfont source: https://www.google.com/fonts/specimen/Roboto
|
Roboto webfont source: https://www.google.com/fonts/specimen/Roboto
|
||||||
|
WOFF files extracted using https://github.com/majodev/google-webfonts-helper
|
||||||
Weights used in this project: Light (300), Regular (400), Bold (700)
|
Weights used in this project: Light (300), Regular (400), Bold (700)
|
|
@ -1,6 +1,6 @@
|
||||||
All icons are taken from Font Awesome (http://fontawesome.io/) project.
|
All icons are taken from Font Awesome (http://fontawesome.io/) project.
|
||||||
The Font Awesome font is licensed under the SIL OFL 1.1:
|
The Font Awesome font is licensed under the SIL OFL 1.1:
|
||||||
- http://scripts.sil.org/OFL
|
- https://scripts.sil.org/OFL
|
||||||
|
|
||||||
SVG icons source: https://github.com/encharm/Font-Awesome-SVG-PNG
|
SVG icons source: https://github.com/encharm/Font-Awesome-SVG-PNG
|
||||||
Font-Awesome-SVG-PNG is licensed under the MIT license (see file license
|
Font-Awesome-SVG-PNG is licensed under the MIT license (see file license
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 331 B After Width: | Height: | Size: 331 B |
Before Width: | Height: | Size: 504 B After Width: | Height: | Size: 504 B |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 380 B After Width: | Height: | Size: 380 B |
Before Width: | Height: | Size: 677 B After Width: | Height: | Size: 677 B |
Before Width: | Height: | Size: 392 B After Width: | Height: | Size: 392 B |
Before Width: | Height: | Size: 560 B After Width: | Height: | Size: 560 B |
Before Width: | Height: | Size: 655 B After Width: | Height: | Size: 655 B |
Before Width: | Height: | Size: 655 B After Width: | Height: | Size: 655 B |
|
@ -0,0 +1,3 @@
|
||||||
|
<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill="#2b70bf" d="M1664 960q-152-236-381-353 61 104 61 225 0 185-131.5 316.5t-316.5 131.5-316.5-131.5-131.5-316.5q0-121 61-225-229 117-381 353 133 205 333.5 326.5t434.5 121.5 434.5-121.5 333.5-326.5zm-720-384q0-20-14-34t-34-14q-125 0-214.5 89.5t-89.5 214.5q0 20 14 34t34 14 34-14 14-34q0-86 61-147t147-61q20 0 34-14t14-34zm848 384q0 34-20 69-140 230-376.5 368.5t-499.5 138.5-499.5-139-376.5-368q-20-35-20-69t20-69q140-229 376.5-368t499.5-139 499.5 139 376.5 368q20 35 20 69z"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 581 B |
Before Width: | Height: | Size: 436 B After Width: | Height: | Size: 436 B |
Before Width: | Height: | Size: 560 B After Width: | Height: | Size: 560 B |
Before Width: | Height: | Size: 458 B After Width: | Height: | Size: 458 B |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 331 B After Width: | Height: | Size: 331 B |
Before Width: | Height: | Size: 280 B After Width: | Height: | Size: 280 B |
|
@ -19,7 +19,7 @@
|
||||||
var box = document.getElementById(id);
|
var box = document.getElementById(id);
|
||||||
var node;
|
var node;
|
||||||
$(box).empty(); // clear all options
|
$(box).empty(); // clear all options
|
||||||
var new_options = box.outerHTML.slice(0, -9); // grab just the opening tag
|
var new_options = box.outerHTML.slice(0, -9); // grab just the opening tag
|
||||||
var cache = SelectBox.cache[id];
|
var cache = SelectBox.cache[id];
|
||||||
for (var i = 0, j = cache.length; i < j; i++) {
|
for (var i = 0, j = cache.length; i < j; i++) {
|
||||||
node = cache[i];
|
node = cache[i];
|
||||||
|
@ -48,7 +48,7 @@
|
||||||
token = tokens[k];
|
token = tokens[k];
|
||||||
if (node_text.indexOf(token) === -1) {
|
if (node_text.indexOf(token) === -1) {
|
||||||
node.displayed = 0;
|
node.displayed = 0;
|
||||||
break; // Once the first token isn't found we're done
|
break; // Once the first token isn't found we're done
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -164,15 +164,9 @@ Requires jQuery, core.js, and SelectBox.js.
|
||||||
|
|
||||||
if (!is_stacked) {
|
if (!is_stacked) {
|
||||||
// In horizontal mode, give the same height to the two boxes.
|
// In horizontal mode, give the same height to the two boxes.
|
||||||
var j_from_box = $(from_box);
|
var j_from_box = $('#' + field_id + '_from');
|
||||||
var j_to_box = $(to_box);
|
var j_to_box = $('#' + field_id + '_to');
|
||||||
var resize_filters = function() { j_to_box.height($(filter_p).outerHeight() + j_from_box.outerHeight()); };
|
j_to_box.height($(filter_p).outerHeight() + j_from_box.outerHeight());
|
||||||
if (j_from_box.outerHeight() > 0) {
|
|
||||||
resize_filters(); // This fieldset is already open. Resize now.
|
|
||||||
} else {
|
|
||||||
// This fieldset is probably collapsed. Wait for its 'show' event.
|
|
||||||
j_to_box.closest('fieldset').one('show.fieldset', resize_filters);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initial icon refresh
|
// Initial icon refresh
|
|
@ -8,59 +8,59 @@
|
||||||
var actionCheckboxes = $(this);
|
var actionCheckboxes = $(this);
|
||||||
var list_editable_changed = false;
|
var list_editable_changed = false;
|
||||||
var showQuestion = function() {
|
var showQuestion = function() {
|
||||||
$(options.acrossClears).hide();
|
$(options.acrossClears).hide();
|
||||||
$(options.acrossQuestions).show();
|
$(options.acrossQuestions).show();
|
||||||
$(options.allContainer).hide();
|
$(options.allContainer).hide();
|
||||||
},
|
},
|
||||||
showClear = function() {
|
showClear = function() {
|
||||||
$(options.acrossClears).show();
|
$(options.acrossClears).show();
|
||||||
$(options.acrossQuestions).hide();
|
$(options.acrossQuestions).hide();
|
||||||
$(options.actionContainer).toggleClass(options.selectedClass);
|
$(options.actionContainer).toggleClass(options.selectedClass);
|
||||||
$(options.allContainer).show();
|
$(options.allContainer).show();
|
||||||
$(options.counterContainer).hide();
|
$(options.counterContainer).hide();
|
||||||
},
|
},
|
||||||
reset = function() {
|
reset = function() {
|
||||||
$(options.acrossClears).hide();
|
$(options.acrossClears).hide();
|
||||||
$(options.acrossQuestions).hide();
|
$(options.acrossQuestions).hide();
|
||||||
$(options.allContainer).hide();
|
$(options.allContainer).hide();
|
||||||
$(options.counterContainer).show();
|
$(options.counterContainer).show();
|
||||||
},
|
},
|
||||||
clearAcross = function() {
|
clearAcross = function() {
|
||||||
reset();
|
|
||||||
$(options.acrossInput).val(0);
|
|
||||||
$(options.actionContainer).removeClass(options.selectedClass);
|
|
||||||
},
|
|
||||||
checker = function(checked) {
|
|
||||||
if (checked) {
|
|
||||||
showQuestion();
|
|
||||||
} else {
|
|
||||||
reset();
|
reset();
|
||||||
}
|
$(options.acrossInput).val(0);
|
||||||
$(actionCheckboxes).prop("checked", checked)
|
$(options.actionContainer).removeClass(options.selectedClass);
|
||||||
.parent().parent().toggleClass(options.selectedClass, checked);
|
},
|
||||||
},
|
checker = function(checked) {
|
||||||
updateCounter = function() {
|
if (checked) {
|
||||||
var sel = $(actionCheckboxes).filter(":checked").length;
|
|
||||||
// data-actions-icnt is defined in the generated HTML
|
|
||||||
// and contains the total amount of objects in the queryset
|
|
||||||
var actions_icnt = $('.action-counter').data('actionsIcnt');
|
|
||||||
$(options.counterContainer).html(interpolate(
|
|
||||||
ngettext('%(sel)s of %(cnt)s selected', '%(sel)s of %(cnt)s selected', sel), {
|
|
||||||
sel: sel,
|
|
||||||
cnt: actions_icnt
|
|
||||||
}, true));
|
|
||||||
$(options.allToggle).prop("checked", function() {
|
|
||||||
var value;
|
|
||||||
if (sel === actionCheckboxes.length) {
|
|
||||||
value = true;
|
|
||||||
showQuestion();
|
showQuestion();
|
||||||
} else {
|
} else {
|
||||||
value = false;
|
reset();
|
||||||
clearAcross();
|
|
||||||
}
|
}
|
||||||
return value;
|
$(actionCheckboxes).prop("checked", checked)
|
||||||
});
|
.parent().parent().toggleClass(options.selectedClass, checked);
|
||||||
};
|
},
|
||||||
|
updateCounter = function() {
|
||||||
|
var sel = $(actionCheckboxes).filter(":checked").length;
|
||||||
|
// data-actions-icnt is defined in the generated HTML
|
||||||
|
// and contains the total amount of objects in the queryset
|
||||||
|
var actions_icnt = $('.action-counter').data('actionsIcnt');
|
||||||
|
$(options.counterContainer).html(interpolate(
|
||||||
|
ngettext('%(sel)s of %(cnt)s selected', '%(sel)s of %(cnt)s selected', sel), {
|
||||||
|
sel: sel,
|
||||||
|
cnt: actions_icnt
|
||||||
|
}, true));
|
||||||
|
$(options.allToggle).prop("checked", function() {
|
||||||
|
var value;
|
||||||
|
if (sel === actionCheckboxes.length) {
|
||||||
|
value = true;
|
||||||
|
showQuestion();
|
||||||
|
} else {
|
||||||
|
value = false;
|
||||||
|
clearAcross();
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
});
|
||||||
|
};
|
||||||
// Show counter by default
|
// Show counter by default
|
||||||
$(options.counterContainer).show();
|
$(options.counterContainer).show();
|
||||||
// Check state of checkboxes and reinit state if needed
|
// Check state of checkboxes and reinit state if needed
|
||||||
|
@ -71,16 +71,16 @@
|
||||||
showClear();
|
showClear();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
$(options.allToggle).show().click(function() {
|
$(options.allToggle).show().on('click', function() {
|
||||||
checker($(this).prop("checked"));
|
checker($(this).prop("checked"));
|
||||||
updateCounter();
|
updateCounter();
|
||||||
});
|
});
|
||||||
$("a", options.acrossQuestions).click(function(event) {
|
$("a", options.acrossQuestions).on('click', function(event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
$(options.acrossInput).val(1);
|
$(options.acrossInput).val(1);
|
||||||
showClear();
|
showClear();
|
||||||
});
|
});
|
||||||
$("a", options.acrossClears).click(function(event) {
|
$("a", options.acrossClears).on('click', function(event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
$(options.allToggle).prop("checked", false);
|
$(options.allToggle).prop("checked", false);
|
||||||
clearAcross();
|
clearAcross();
|
||||||
|
@ -88,7 +88,7 @@
|
||||||
updateCounter();
|
updateCounter();
|
||||||
});
|
});
|
||||||
lastChecked = null;
|
lastChecked = null;
|
||||||
$(actionCheckboxes).click(function(event) {
|
$(actionCheckboxes).on('click', function(event) {
|
||||||
if (!event) { event = window.event; }
|
if (!event) { event = window.event; }
|
||||||
var target = event.target ? event.target : event.srcElement;
|
var target = event.target ? event.target : event.srcElement;
|
||||||
if (lastChecked && $.data(lastChecked) !== $.data(target) && event.shiftKey === true) {
|
if (lastChecked && $.data(lastChecked) !== $.data(target) && event.shiftKey === true) {
|
||||||
|
@ -112,12 +112,12 @@
|
||||||
$('form#changelist-form table#result_list tr').on('change', 'td:gt(0) :input', function() {
|
$('form#changelist-form table#result_list tr').on('change', 'td:gt(0) :input', function() {
|
||||||
list_editable_changed = true;
|
list_editable_changed = true;
|
||||||
});
|
});
|
||||||
$('form#changelist-form button[name="index"]').click(function(event) {
|
$('form#changelist-form button[name="index"]').on('click', function(event) {
|
||||||
if (list_editable_changed) {
|
if (list_editable_changed) {
|
||||||
return confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost."));
|
return confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost."));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
$('form#changelist-form input[name="_save"]').click(function(event) {
|
$('form#changelist-form input[name="_save"]').on('click', function(event) {
|
||||||
var action_changed = false;
|
var action_changed = false;
|
||||||
$('select option:selected', options.actionContainer).each(function() {
|
$('select option:selected', options.actionContainer).each(function() {
|
||||||
if ($(this).val()) {
|
if ($(this).val()) {
|
|
@ -0,0 +1,7 @@
|
||||||
|
(function(a){var f;a.fn.actions=function(e){var b=a.extend({},a.fn.actions.defaults,e),g=a(this),k=!1,l=function(){a(b.acrossClears).hide();a(b.acrossQuestions).show();a(b.allContainer).hide()},m=function(){a(b.acrossClears).show();a(b.acrossQuestions).hide();a(b.actionContainer).toggleClass(b.selectedClass);a(b.allContainer).show();a(b.counterContainer).hide()},n=function(){a(b.acrossClears).hide();a(b.acrossQuestions).hide();a(b.allContainer).hide();a(b.counterContainer).show()},p=function(){n();
|
||||||
|
a(b.acrossInput).val(0);a(b.actionContainer).removeClass(b.selectedClass)},q=function(c){c?l():n();a(g).prop("checked",c).parent().parent().toggleClass(b.selectedClass,c)},h=function(){var c=a(g).filter(":checked").length,d=a(".action-counter").data("actionsIcnt");a(b.counterContainer).html(interpolate(ngettext("%(sel)s of %(cnt)s selected","%(sel)s of %(cnt)s selected",c),{sel:c,cnt:d},!0));a(b.allToggle).prop("checked",function(){if(c===g.length){var a=!0;l()}else a=!1,p();return a})};a(b.counterContainer).show();
|
||||||
|
a(this).filter(":checked").each(function(c){a(this).parent().parent().toggleClass(b.selectedClass);h();1===a(b.acrossInput).val()&&m()});a(b.allToggle).show().on("click",function(){q(a(this).prop("checked"));h()});a("a",b.acrossQuestions).on("click",function(c){c.preventDefault();a(b.acrossInput).val(1);m()});a("a",b.acrossClears).on("click",function(c){c.preventDefault();a(b.allToggle).prop("checked",!1);p();q(0);h()});f=null;a(g).on("click",function(c){c||(c=window.event);var d=c.target?c.target:
|
||||||
|
c.srcElement;if(f&&a.data(f)!==a.data(d)&&!0===c.shiftKey){var e=!1;a(f).prop("checked",d.checked).parent().parent().toggleClass(b.selectedClass,d.checked);a(g).each(function(){if(a.data(this)===a.data(f)||a.data(this)===a.data(d))e=e?!1:!0;e&&a(this).prop("checked",d.checked).parent().parent().toggleClass(b.selectedClass,d.checked)})}a(d).parent().parent().toggleClass(b.selectedClass,d.checked);f=d;h()});a("form#changelist-form table#result_list tr").on("change","td:gt(0) :input",function(){k=!0});
|
||||||
|
a('form#changelist-form button[name="index"]').on("click",function(a){if(k)return confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost."))});a('form#changelist-form input[name="_save"]').on("click",function(c){var d=!1;a("select option:selected",b.actionContainer).each(function(){a(this).val()&&(d=!0)});if(d)return k?confirm(gettext("You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action.")):
|
||||||
|
confirm(gettext("You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button."))})};a.fn.actions.defaults={actionContainer:"div.actions",counterContainer:"span.action-counter",allContainer:"div.actions span.all",acrossInput:"div.actions input.select-across",acrossQuestions:"div.actions span.question",acrossClears:"div.actions span.clear",allToggle:"#action-toggle",selectedClass:"selected"};a(document).ready(function(){var e=
|
||||||
|
a("tr input.action-select");0<e.length&&e.actions()})})(django.jQuery);
|
|
@ -20,10 +20,10 @@
|
||||||
dismissClockFunc: [],
|
dismissClockFunc: [],
|
||||||
dismissCalendarFunc: [],
|
dismissCalendarFunc: [],
|
||||||
calendarDivName1: 'calendarbox', // name of calendar <div> that gets toggled
|
calendarDivName1: 'calendarbox', // name of calendar <div> that gets toggled
|
||||||
calendarDivName2: 'calendarin', // name of <div> that contains calendar
|
calendarDivName2: 'calendarin', // name of <div> that contains calendar
|
||||||
calendarLinkName: 'calendarlink',// name of the link that is used to toggle
|
calendarLinkName: 'calendarlink', // name of the link that is used to toggle
|
||||||
clockDivName: 'clockbox', // name of clock <div> that gets toggled
|
clockDivName: 'clockbox', // name of clock <div> that gets toggled
|
||||||
clockLinkName: 'clocklink', // name of the link that is used to toggle
|
clockLinkName: 'clocklink', // name of the link that is used to toggle
|
||||||
shortCutsClass: 'datetimeshortcuts', // class of the clock and cal shortcuts
|
shortCutsClass: 'datetimeshortcuts', // class of the clock and cal shortcuts
|
||||||
timezoneWarningClass: 'timezonewarning', // class of the warning for timezone mismatch
|
timezoneWarningClass: 'timezonewarning', // class of the warning for timezone mismatch
|
||||||
timezoneOffset: 0,
|
timezoneOffset: 0,
|
||||||
|
@ -63,7 +63,6 @@
|
||||||
},
|
},
|
||||||
// Add a warning when the time zone in the browser and backend do not match.
|
// Add a warning when the time zone in the browser and backend do not match.
|
||||||
addTimezoneWarning: function(inp) {
|
addTimezoneWarning: function(inp) {
|
||||||
var $ = django.jQuery;
|
|
||||||
var warningClass = DateTimeShortcuts.timezoneWarningClass;
|
var warningClass = DateTimeShortcuts.timezoneWarningClass;
|
||||||
var timezoneOffset = DateTimeShortcuts.timezoneOffset / 3600;
|
var timezoneOffset = DateTimeShortcuts.timezoneOffset / 3600;
|
||||||
|
|
||||||
|
@ -73,7 +72,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if warning is already there.
|
// Check if warning is already there.
|
||||||
if ($(inp).siblings('.' + warningClass).length) {
|
if (inp.parentNode.querySelectorAll('.' + warningClass).length) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -95,13 +94,11 @@
|
||||||
}
|
}
|
||||||
message = interpolate(message, [timezoneOffset]);
|
message = interpolate(message, [timezoneOffset]);
|
||||||
|
|
||||||
var $warning = $('<span>');
|
var warning = document.createElement('span');
|
||||||
$warning.attr('class', warningClass);
|
warning.className = warningClass;
|
||||||
$warning.text(message);
|
warning.textContent = message;
|
||||||
|
inp.parentNode.appendChild(document.createElement('br'));
|
||||||
$(inp).parent()
|
inp.parentNode.appendChild(warning);
|
||||||
.append($('<br>'))
|
|
||||||
.append($warning);
|
|
||||||
},
|
},
|
||||||
// Add clock widget to a given field
|
// Add clock widget to a given field
|
||||||
addClock: function(inp) {
|
addClock: function(inp) {
|
||||||
|
@ -115,7 +112,7 @@
|
||||||
inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling);
|
inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling);
|
||||||
var now_link = document.createElement('a');
|
var now_link = document.createElement('a');
|
||||||
now_link.setAttribute('href', "#");
|
now_link.setAttribute('href', "#");
|
||||||
now_link.appendChild(document.createTextNode(gettext('Now')));
|
now_link.textContent = gettext('Now');
|
||||||
now_link.addEventListener('click', function(e) {
|
now_link.addEventListener('click', function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
DateTimeShortcuts.handleClockQuicklink(num, -1);
|
DateTimeShortcuts.handleClockQuicklink(num, -1);
|
||||||
|
@ -345,7 +342,7 @@
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
DateTimeShortcuts.dismissCalendar(num);
|
DateTimeShortcuts.dismissCalendar(num);
|
||||||
});
|
});
|
||||||
django.jQuery(document).bind('keyup', function(event) {
|
document.addEventListener('keyup', function(event) {
|
||||||
if (event.which === 27) {
|
if (event.which === 27) {
|
||||||
// ESC key closes popup
|
// ESC key closes popup
|
||||||
DateTimeShortcuts.dismissCalendar(num);
|
DateTimeShortcuts.dismissCalendar(num);
|
||||||
|
@ -401,11 +398,11 @@
|
||||||
handleCalendarCallback: function(num) {
|
handleCalendarCallback: function(num) {
|
||||||
var format = get_format('DATE_INPUT_FORMATS')[0];
|
var format = get_format('DATE_INPUT_FORMATS')[0];
|
||||||
// the format needs to be escaped a little
|
// the format needs to be escaped a little
|
||||||
format = format.replace('\\', '\\\\');
|
format = format.replace('\\', '\\\\')
|
||||||
format = format.replace('\r', '\\r');
|
.replace('\r', '\\r')
|
||||||
format = format.replace('\n', '\\n');
|
.replace('\n', '\\n')
|
||||||
format = format.replace('\t', '\\t');
|
.replace('\t', '\\t')
|
||||||
format = format.replace("'", "\\'");
|
.replace("'", "\\'");
|
||||||
return function(y, m, d) {
|
return function(y, m, d) {
|
||||||
DateTimeShortcuts.calendarInputs[num].value = new Date(y, m - 1, d).strftime(format);
|
DateTimeShortcuts.calendarInputs[num].value = new Date(y, m - 1, d).strftime(format);
|
||||||
DateTimeShortcuts.calendarInputs[num].focus();
|
DateTimeShortcuts.calendarInputs[num].focus();
|
|
@ -58,7 +58,7 @@
|
||||||
|
|
||||||
function updateRelatedObjectLinks(triggeringLink) {
|
function updateRelatedObjectLinks(triggeringLink) {
|
||||||
var $this = $(triggeringLink);
|
var $this = $(triggeringLink);
|
||||||
var siblings = $this.nextAll('.change-related, .delete-related');
|
var siblings = $this.nextAll('.view-related, .change-related, .delete-related');
|
||||||
if (!siblings.length) {
|
if (!siblings.length) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -146,7 +146,7 @@
|
||||||
window.dismissAddAnotherPopup = dismissAddRelatedObjectPopup;
|
window.dismissAddAnotherPopup = dismissAddRelatedObjectPopup;
|
||||||
|
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
$("a[data-popup-opener]").click(function(event) {
|
$("a[data-popup-opener]").on('click', function(event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
opener.dismissRelatedLookupPopup(window, $(this).data("popup-opener"));
|
opener.dismissRelatedLookupPopup(window, $(this).data("popup-opener"));
|
||||||
});
|
});
|
|
@ -0,0 +1,13 @@
|
||||||
|
(function($) {
|
||||||
|
'use strict';
|
||||||
|
$(function() {
|
||||||
|
$('.cancel-link').on('click', function(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
if (window.location.search.indexOf('&_popup=1') === -1) {
|
||||||
|
window.history.back(); // Go back if not a popup.
|
||||||
|
} else {
|
||||||
|
window.close(); // Otherwise, close the popup.
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
})(django.jQuery);
|
|
@ -0,0 +1,55 @@
|
||||||
|
/*global gettext*/
|
||||||
|
(function() {
|
||||||
|
'use strict';
|
||||||
|
var closestElem = function(elem, tagName) {
|
||||||
|
if (elem.nodeName === tagName.toUpperCase()) {
|
||||||
|
return elem;
|
||||||
|
}
|
||||||
|
if (elem.parentNode.nodeName === 'BODY') {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return elem.parentNode && closestElem(elem.parentNode, tagName);
|
||||||
|
};
|
||||||
|
|
||||||
|
window.addEventListener('load', function() {
|
||||||
|
// Add anchor tag for Show/Hide link
|
||||||
|
var fieldsets = document.querySelectorAll('fieldset.collapse');
|
||||||
|
for (var i = 0; i < fieldsets.length; i++) {
|
||||||
|
var elem = fieldsets[i];
|
||||||
|
// Don't hide if fields in this fieldset have errors
|
||||||
|
if (elem.querySelectorAll('div.errors').length === 0) {
|
||||||
|
elem.classList.add('collapsed');
|
||||||
|
var h2 = elem.querySelector('h2');
|
||||||
|
var link = document.createElement('a');
|
||||||
|
link.setAttribute('id', 'fieldsetcollapser' + i);
|
||||||
|
link.setAttribute('class', 'collapse-toggle');
|
||||||
|
link.setAttribute('href', '#');
|
||||||
|
link.textContent = gettext('Show');
|
||||||
|
h2.appendChild(document.createTextNode(' ('));
|
||||||
|
h2.appendChild(link);
|
||||||
|
h2.appendChild(document.createTextNode(')'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Add toggle to hide/show anchor tag
|
||||||
|
var toggleFunc = function(ev) {
|
||||||
|
if (ev.target.matches('.collapse-toggle')) {
|
||||||
|
ev.preventDefault();
|
||||||
|
ev.stopPropagation();
|
||||||
|
var fieldset = closestElem(ev.target, 'fieldset');
|
||||||
|
if (fieldset.classList.contains('collapsed')) {
|
||||||
|
// Show
|
||||||
|
ev.target.textContent = gettext('Hide');
|
||||||
|
fieldset.classList.remove('collapsed');
|
||||||
|
} else {
|
||||||
|
// Hide
|
||||||
|
ev.target.textContent = gettext('Show');
|
||||||
|
fieldset.classList.add('collapsed');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var inlineDivs = document.querySelectorAll('fieldset.module');
|
||||||
|
for (i = 0; i < inlineDivs.length; i++) {
|
||||||
|
inlineDivs[i].addEventListener('click', toggleFunc);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
|
@ -0,0 +1,3 @@
|
||||||
|
(function(){var e=function(b,a){return b.nodeName===a.toUpperCase()?b:"BODY"===b.parentNode.nodeName?null:b.parentNode&&e(b.parentNode,a)};window.addEventListener("load",function(){for(var b=document.querySelectorAll("fieldset.collapse"),a=0;a<b.length;a++){var c=b[a];if(0===c.querySelectorAll("div.errors").length){c.classList.add("collapsed");c=c.querySelector("h2");var d=document.createElement("a");d.setAttribute("id","fieldsetcollapser"+a);d.setAttribute("class","collapse-toggle");d.setAttribute("href",
|
||||||
|
"#");d.textContent=gettext("Show");c.appendChild(document.createTextNode(" ("));c.appendChild(d);c.appendChild(document.createTextNode(")"))}}b=function(a){if(a.target.matches(".collapse-toggle")){a.preventDefault();a.stopPropagation();var b=e(a.target,"fieldset");b.classList.contains("collapsed")?(a.target.textContent=gettext("Hide"),b.classList.remove("collapsed")):(a.target.textContent=gettext("Show"),b.classList.add("collapsed"))}};c=document.querySelectorAll("fieldset.module");for(a=0;a<c.length;a++)c[a].addEventListener("click",
|
||||||
|
b)})})();
|
|
@ -30,7 +30,7 @@ function removeChildren(a) {
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// Find-position functions by PPK
|
// Find-position functions by PPK
|
||||||
// See http://www.quirksmode.org/js/findpos.html
|
// See https://www.quirksmode.org/js/findpos.html
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
function findPosX(obj) {
|
function findPosX(obj) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
@ -153,9 +153,9 @@ function findPosY(obj) {
|
||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// String object extensions
|
// String object extensions
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
String.prototype.pad_left = function(pad_length, pad_string) {
|
String.prototype.pad_left = function(pad_length, pad_string) {
|
||||||
var new_string = this;
|
var new_string = this;
|
||||||
for (var i = 0; new_string.length < pad_length; i++) {
|
for (var i = 0; new_string.length < pad_length; i++) {
|
||||||
|
@ -171,18 +171,18 @@ function findPosY(obj) {
|
||||||
var day, month, year;
|
var day, month, year;
|
||||||
while (i < split_format.length) {
|
while (i < split_format.length) {
|
||||||
switch (split_format[i]) {
|
switch (split_format[i]) {
|
||||||
case "%d":
|
case "%d":
|
||||||
day = date[i];
|
day = date[i];
|
||||||
break;
|
break;
|
||||||
case "%m":
|
case "%m":
|
||||||
month = date[i] - 1;
|
month = date[i] - 1;
|
||||||
break;
|
break;
|
||||||
case "%Y":
|
case "%Y":
|
||||||
year = date[i];
|
year = date[i];
|
||||||
break;
|
break;
|
||||||
case "%y":
|
case "%y":
|
||||||
year = date[i];
|
year = date[i];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
|
@ -13,7 +13,7 @@
|
||||||
* and modified for Django by Jannis Leidel, Travis Swicegood and Julien Phalip.
|
* and modified for Django by Jannis Leidel, Travis Swicegood and Julien Phalip.
|
||||||
*
|
*
|
||||||
* Licensed under the New BSD License
|
* Licensed under the New BSD License
|
||||||
* See: http://www.opensource.org/licenses/bsd-license.php
|
* See: https://opensource.org/licenses/bsd-license.php
|
||||||
*/
|
*/
|
||||||
(function($) {
|
(function($) {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
@ -58,13 +58,13 @@
|
||||||
addButton = $this.filter(":last").next().find("a");
|
addButton = $this.filter(":last").next().find("a");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
addButton.click(function(e) {
|
addButton.on('click', function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
var template = $("#" + options.prefix + "-empty");
|
var template = $("#" + options.prefix + "-empty");
|
||||||
var row = template.clone(true);
|
var row = template.clone(true);
|
||||||
row.removeClass(options.emptyCssClass)
|
row.removeClass(options.emptyCssClass)
|
||||||
.addClass(options.formCssClass)
|
.addClass(options.formCssClass)
|
||||||
.attr("id", options.prefix + "-" + nextIndex);
|
.attr("id", options.prefix + "-" + nextIndex);
|
||||||
if (row.is("tr")) {
|
if (row.is("tr")) {
|
||||||
// If the forms are laid out in table rows, insert
|
// If the forms are laid out in table rows, insert
|
||||||
// the remove button into the last table cell:
|
// the remove button into the last table cell:
|
||||||
|
@ -91,7 +91,7 @@
|
||||||
addButton.parent().hide();
|
addButton.parent().hide();
|
||||||
}
|
}
|
||||||
// The delete button of each row triggers a bunch of other things
|
// The delete button of each row triggers a bunch of other things
|
||||||
row.find("a." + options.deleteCssClass).click(function(e1) {
|
row.find("a." + options.deleteCssClass).on('click', function(e1) {
|
||||||
e1.preventDefault();
|
e1.preventDefault();
|
||||||
// Remove the parent form containing this button:
|
// Remove the parent form containing this button:
|
||||||
row.remove();
|
row.remove();
|
||||||
|
@ -131,26 +131,26 @@
|
||||||
|
|
||||||
/* Setup plugin defaults */
|
/* Setup plugin defaults */
|
||||||
$.fn.formset.defaults = {
|
$.fn.formset.defaults = {
|
||||||
prefix: "form", // The form prefix for your django formset
|
prefix: "form", // The form prefix for your django formset
|
||||||
addText: "add another", // Text for the add link
|
addText: "add another", // Text for the add link
|
||||||
deleteText: "remove", // Text for the delete link
|
deleteText: "remove", // Text for the delete link
|
||||||
addCssClass: "add-row", // CSS class applied to the add link
|
addCssClass: "add-row", // CSS class applied to the add link
|
||||||
deleteCssClass: "delete-row", // CSS class applied to the delete link
|
deleteCssClass: "delete-row", // CSS class applied to the delete link
|
||||||
emptyCssClass: "empty-row", // CSS class applied to the empty row
|
emptyCssClass: "empty-row", // CSS class applied to the empty row
|
||||||
formCssClass: "dynamic-form", // CSS class applied to each form in a formset
|
formCssClass: "dynamic-form", // CSS class applied to each form in a formset
|
||||||
added: null, // Function called each time a new form is added
|
added: null, // Function called each time a new form is added
|
||||||
removed: null, // Function called each time a form is deleted
|
removed: null, // Function called each time a form is deleted
|
||||||
addButton: null // Existing add button to use
|
addButton: null // Existing add button to use
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// Tabular inlines ---------------------------------------------------------
|
// Tabular inlines ---------------------------------------------------------
|
||||||
$.fn.tabularFormset = function(options) {
|
$.fn.tabularFormset = function(selector, options) {
|
||||||
var $rows = $(this);
|
var $rows = $(this);
|
||||||
var alternatingRows = function(row) {
|
var alternatingRows = function(row) {
|
||||||
$($rows.selector).not(".add-row").removeClass("row1 row2")
|
$(selector).not(".add-row").removeClass("row1 row2")
|
||||||
.filter(":even").addClass("row1").end()
|
.filter(":even").addClass("row1").end()
|
||||||
.filter(":odd").addClass("row2");
|
.filter(":odd").addClass("row2");
|
||||||
};
|
};
|
||||||
|
|
||||||
var reinitDateTimeShortCuts = function() {
|
var reinitDateTimeShortCuts = function() {
|
||||||
|
@ -212,10 +212,10 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
// Stacked inlines ---------------------------------------------------------
|
// Stacked inlines ---------------------------------------------------------
|
||||||
$.fn.stackedFormset = function(options) {
|
$.fn.stackedFormset = function(selector, options) {
|
||||||
var $rows = $(this);
|
var $rows = $(this);
|
||||||
var updateInlineLabel = function(row) {
|
var updateInlineLabel = function(row) {
|
||||||
$($rows.selector).find(".inline_label").each(function(i) {
|
$(selector).find(".inline_label").each(function(i) {
|
||||||
var count = i + 1;
|
var count = i + 1;
|
||||||
$(this).html($(this).html().replace(/(#\d+)/g, "#" + count));
|
$(this).html($(this).html().replace(/(#\d+)/g, "#" + count));
|
||||||
});
|
});
|
||||||
|
@ -281,13 +281,16 @@
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
$(".js-inline-admin-formset").each(function() {
|
$(".js-inline-admin-formset").each(function() {
|
||||||
var data = $(this).data(),
|
var data = $(this).data(),
|
||||||
inlineOptions = data.inlineFormset;
|
inlineOptions = data.inlineFormset,
|
||||||
|
selector;
|
||||||
switch(data.inlineType) {
|
switch(data.inlineType) {
|
||||||
case "stacked":
|
case "stacked":
|
||||||
$(inlineOptions.name + "-group .inline-related").stackedFormset(inlineOptions.options);
|
selector = inlineOptions.name + "-group .inline-related";
|
||||||
|
$(selector).stackedFormset(selector, inlineOptions.options);
|
||||||
break;
|
break;
|
||||||
case "tabular":
|
case "tabular":
|
||||||
$(inlineOptions.name + "-group .tabular.inline-related tbody:first > tr").tabularFormset(inlineOptions.options);
|
selector = inlineOptions.name + "-group .tabular.inline-related tbody:first > tr";
|
||||||
|
$(selector).tabularFormset(selector, inlineOptions.options);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
});
|
});
|
|
@ -0,0 +1,13 @@
|
||||||
|
var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(b,d,a){b instanceof String&&(b=String(b));for(var c=b.length,f=0;f<c;f++){var g=b[f];if(d.call(a,g,f,b))return{i:f,v:g}}return{i:-1,v:void 0}};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(b,d,a){b!=Array.prototype&&b!=Object.prototype&&(b[d]=a.value)};
|
||||||
|
$jscomp.getGlobal=function(b){return"undefined"!=typeof window&&window===b?b:"undefined"!=typeof global&&null!=global?global:b};$jscomp.global=$jscomp.getGlobal(this);$jscomp.polyfill=function(b,d,a,c){if(d){a=$jscomp.global;b=b.split(".");for(c=0;c<b.length-1;c++){var f=b[c];f in a||(a[f]={});a=a[f]}b=b[b.length-1];c=a[b];d=d(c);d!=c&&null!=d&&$jscomp.defineProperty(a,b,{configurable:!0,writable:!0,value:d})}};
|
||||||
|
$jscomp.polyfill("Array.prototype.find",function(b){return b?b:function(b,a){return $jscomp.findInternal(this,b,a).v}},"es6","es3");
|
||||||
|
(function(b){b.fn.formset=function(d){var a=b.extend({},b.fn.formset.defaults,d),c=b(this);d=c.parent();var f=function(a,e,d){var c=new RegExp("("+e+"-(\\d+|__prefix__))");e=e+"-"+d;b(a).prop("for")&&b(a).prop("for",b(a).prop("for").replace(c,e));a.id&&(a.id=a.id.replace(c,e));a.name&&(a.name=a.name.replace(c,e))},g=b("#id_"+a.prefix+"-TOTAL_FORMS").prop("autocomplete","off"),h=parseInt(g.val(),10),e=b("#id_"+a.prefix+"-MAX_NUM_FORMS").prop("autocomplete","off"),m=""===e.val()||0<e.val()-g.val();
|
||||||
|
c.each(function(e){b(this).not("."+a.emptyCssClass).addClass(a.formCssClass)});if(c.length&&m){var l=a.addButton;null===l&&("TR"===c.prop("tagName")?(c=this.eq(-1).children().length,d.append('<tr class="'+a.addCssClass+'"><td colspan="'+c+'"><a href="#">'+a.addText+"</a></tr>"),l=d.find("tr:last a")):(c.filter(":last").after('<div class="'+a.addCssClass+'"><a href="#">'+a.addText+"</a></div>"),l=c.filter(":last").next().find("a")));l.on("click",function(d){d.preventDefault();d=b("#"+a.prefix+"-empty");
|
||||||
|
var c=d.clone(!0);c.removeClass(a.emptyCssClass).addClass(a.formCssClass).attr("id",a.prefix+"-"+h);c.is("tr")?c.children(":last").append('<div><a class="'+a.deleteCssClass+'" href="#">'+a.deleteText+"</a></div>"):c.is("ul")||c.is("ol")?c.append('<li><a class="'+a.deleteCssClass+'" href="#">'+a.deleteText+"</a></li>"):c.children(":first").append('<span><a class="'+a.deleteCssClass+'" href="#">'+a.deleteText+"</a></span>");c.find("*").each(function(){f(this,a.prefix,g.val())});c.insertBefore(b(d));
|
||||||
|
b(g).val(parseInt(g.val(),10)+1);h+=1;""!==e.val()&&0>=e.val()-g.val()&&l.parent().hide();c.find("a."+a.deleteCssClass).on("click",function(d){d.preventDefault();c.remove();--h;a.removed&&a.removed(c);b(document).trigger("formset:removed",[c,a.prefix]);d=b("."+a.formCssClass);b("#id_"+a.prefix+"-TOTAL_FORMS").val(d.length);(""===e.val()||0<e.val()-d.length)&&l.parent().show();var m,g=function(){f(this,a.prefix,k)};var k=0;for(m=d.length;k<m;k++)f(b(d).get(k),a.prefix,k),b(d.get(k)).find("*").each(g)});
|
||||||
|
a.added&&a.added(c);b(document).trigger("formset:added",[c,a.prefix])})}return this};b.fn.formset.defaults={prefix:"form",addText:"add another",deleteText:"remove",addCssClass:"add-row",deleteCssClass:"delete-row",emptyCssClass:"empty-row",formCssClass:"dynamic-form",added:null,removed:null,addButton:null};b.fn.tabularFormset=function(d,a){var c=b(this),f=function(a){b(d).not(".add-row").removeClass("row1 row2").filter(":even").addClass("row1").end().filter(":odd").addClass("row2")},g=function(){"undefined"!==
|
||||||
|
typeof SelectFilter&&(b(".selectfilter").each(function(b,a){b=a.name.split("-");SelectFilter.init(a.id,b[b.length-1],!1)}),b(".selectfilterstacked").each(function(b,a){b=a.name.split("-");SelectFilter.init(a.id,b[b.length-1],!0)}))},h=function(a){a.find(".prepopulated_field").each(function(){var c=b(this).find("input, select, textarea"),d=c.data("dependency_list")||[],e=[];b.each(d,function(b,c){e.push("#"+a.find(".field-"+c).find("input, select, textarea").attr("id"))});e.length&&c.prepopulate(e,
|
||||||
|
c.attr("maxlength"))})};c.formset({prefix:a.prefix,addText:a.addText,formCssClass:"dynamic-"+a.prefix,deleteCssClass:"inline-deletelink",deleteText:a.deleteText,emptyCssClass:"empty-form",removed:f,added:function(a){h(a);"undefined"!==typeof DateTimeShortcuts&&(b(".datetimeshortcuts").remove(),DateTimeShortcuts.init());g();f(a)},addButton:a.addButton});return c};b.fn.stackedFormset=function(d,a){var c=b(this),f=function(a){b(d).find(".inline_label").each(function(a){a+=1;b(this).html(b(this).html().replace(/(#\d+)/g,
|
||||||
|
"#"+a))})},g=function(){"undefined"!==typeof SelectFilter&&(b(".selectfilter").each(function(a,b){a=b.name.split("-");SelectFilter.init(b.id,a[a.length-1],!1)}),b(".selectfilterstacked").each(function(a,b){a=b.name.split("-");SelectFilter.init(b.id,a[a.length-1],!0)}))},h=function(a){a.find(".prepopulated_field").each(function(){var c=b(this).find("input, select, textarea"),d=c.data("dependency_list")||[],e=[];b.each(d,function(b,c){e.push("#"+a.find(".form-row .field-"+c).find("input, select, textarea").attr("id"))});
|
||||||
|
e.length&&c.prepopulate(e,c.attr("maxlength"))})};c.formset({prefix:a.prefix,addText:a.addText,formCssClass:"dynamic-"+a.prefix,deleteCssClass:"inline-deletelink",deleteText:a.deleteText,emptyCssClass:"empty-form",removed:f,added:function(a){h(a);"undefined"!==typeof DateTimeShortcuts&&(b(".datetimeshortcuts").remove(),DateTimeShortcuts.init());g();f(a)},addButton:a.addButton});return c};b(document).ready(function(){b(".js-inline-admin-formset").each(function(){var d=b(this).data(),a=d.inlineFormset;
|
||||||
|
switch(d.inlineType){case "stacked":d=a.name+"-group .inline-related";b(d).stackedFormset(d,a.options);break;case "tabular":d=a.name+"-group .tabular.inline-related tbody:first > tr",b(d).tabularFormset(d,a.options)}})})})(django.jQuery);
|
|
@ -30,12 +30,12 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
prepopulatedField.data('_changed', false);
|
prepopulatedField.data('_changed', false);
|
||||||
prepopulatedField.change(function() {
|
prepopulatedField.on('change', function() {
|
||||||
prepopulatedField.data('_changed', true);
|
prepopulatedField.data('_changed', true);
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!prepopulatedField.val()) {
|
if (!prepopulatedField.val()) {
|
||||||
$(dependencies.join(',')).keyup(populate).change(populate).focus(populate);
|
$(dependencies.join(',')).on('keyup change focus', populate);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
|
@ -0,0 +1 @@
|
||||||
|
(function(b){b.fn.prepopulate=function(d,f,g){return this.each(function(){var a=b(this),h=function(){if(!a.data("_changed")){var e=[];b.each(d,function(a,c){c=b(c);0<c.val().length&&e.push(c.val())});a.val(URLify(e.join(" "),f,g))}};a.data("_changed",!1);a.on("change",function(){a.data("_changed",!0)});if(!a.val())b(d.join(",")).on("keyup change focus",h)})}})(django.jQuery);
|
|
@ -128,7 +128,7 @@
|
||||||
|
|
||||||
var Downcoder = {
|
var Downcoder = {
|
||||||
'Initialize': function() {
|
'Initialize': function() {
|
||||||
if (Downcoder.map) { // already made
|
if (Downcoder.map) { // already made
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Downcoder.map = {};
|
Downcoder.map = {};
|
||||||
|
@ -164,26 +164,32 @@
|
||||||
if (!allowUnicode) {
|
if (!allowUnicode) {
|
||||||
s = downcode(s);
|
s = downcode(s);
|
||||||
}
|
}
|
||||||
var removelist = [
|
var hasUnicodeChars = /[^\u0000-\u007f]/.test(s);
|
||||||
"a", "an", "as", "at", "before", "but", "by", "for", "from", "is",
|
// Remove English words only if the string contains ASCII (English)
|
||||||
"in", "into", "like", "of", "off", "on", "onto", "per", "since",
|
// characters.
|
||||||
"than", "the", "this", "that", "to", "up", "via", "with"
|
if (!hasUnicodeChars) {
|
||||||
];
|
var removeList = [
|
||||||
var r = new RegExp('\\b(' + removelist.join('|') + ')\\b', 'gi');
|
"a", "an", "as", "at", "before", "but", "by", "for", "from",
|
||||||
s = s.replace(r, '');
|
"is", "in", "into", "like", "of", "off", "on", "onto", "per",
|
||||||
|
"since", "than", "the", "this", "that", "to", "up", "via",
|
||||||
|
"with"
|
||||||
|
];
|
||||||
|
var r = new RegExp('\\b(' + removeList.join('|') + ')\\b', 'gi');
|
||||||
|
s = s.replace(r, '');
|
||||||
|
}
|
||||||
// if downcode doesn't hit, the char will be stripped here
|
// if downcode doesn't hit, the char will be stripped here
|
||||||
if (allowUnicode) {
|
if (allowUnicode) {
|
||||||
// Keep Unicode letters including both lowercase and uppercase
|
// Keep Unicode letters including both lowercase and uppercase
|
||||||
// characters, whitespace, and dash; remove other characters.
|
// characters, whitespace, and dash; remove other characters.
|
||||||
s = XRegExp.replace(s, XRegExp('[^-_\\p{L}\\p{N}\\s]', 'g'), '');
|
s = XRegExp.replace(s, XRegExp('[^-_\\p{L}\\p{N}\\s]', 'g'), '');
|
||||||
} else {
|
} else {
|
||||||
s = s.replace(/[^-\w\s]/g, ''); // remove unneeded chars
|
s = s.replace(/[^-\w\s]/g, ''); // remove unneeded chars
|
||||||
}
|
}
|
||||||
s = s.replace(/^\s+|\s+$/g, ''); // trim leading/trailing spaces
|
s = s.replace(/^\s+|\s+$/g, ''); // trim leading/trailing spaces
|
||||||
s = s.replace(/[-\s]+/g, '-'); // convert spaces to hyphens
|
s = s.replace(/[-\s]+/g, '-'); // convert spaces to hyphens
|
||||||
s = s.substring(0, num_chars); // trim to first num_chars chars
|
s = s.substring(0, num_chars); // trim to first num_chars chars
|
||||||
s = s.replace(/-+$/g, ''); // trim any trailing hyphens
|
s = s.replace(/-+$/g, ''); // trim any trailing hyphens
|
||||||
return s.toLowerCase(); // convert to lowercase
|
return s.toLowerCase(); // convert to lowercase
|
||||||
}
|
}
|
||||||
window.URLify = URLify;
|
window.URLify = URLify;
|
||||||
})();
|
})();
|