Moving themes into a themes folder (#287)
* Moving themes into a themes folder This unifies themes under a themes folder which makes it easier to develop themes and install them.
@@ -23,9 +23,11 @@ __version__ = '1.0.2'
|
|||||||
class ThemeLoader(FileSystemLoader):
|
class ThemeLoader(FileSystemLoader):
|
||||||
def get_source(self, environment, template):
|
def get_source(self, environment, template):
|
||||||
if template.startswith('admin/'):
|
if template.startswith('admin/'):
|
||||||
|
template = template.lstrip('admin/')
|
||||||
|
template = "/".join(['admin', 'templates', template])
|
||||||
return super(ThemeLoader, self).get_source(environment, template)
|
return super(ThemeLoader, self).get_source(environment, template)
|
||||||
theme = utils.get_config('ctf_theme')
|
theme = utils.get_config('ctf_theme')
|
||||||
template = "/".join([theme, template])
|
template = "/".join([theme, 'templates', template])
|
||||||
return super(ThemeLoader, self).get_source(environment, template)
|
return super(ThemeLoader, self).get_source(environment, template)
|
||||||
|
|
||||||
|
|
||||||
@@ -33,7 +35,7 @@ def create_app(config='CTFd.config.Config'):
|
|||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
with app.app_context():
|
with app.app_context():
|
||||||
app.config.from_object(config)
|
app.config.from_object(config)
|
||||||
app.jinja_loader = ThemeLoader(os.path.join(app.root_path, app.template_folder), followlinks=True)
|
app.jinja_loader = ThemeLoader(os.path.join(app.root_path, 'themes'), followlinks=True)
|
||||||
|
|
||||||
from CTFd.models import db, Teams, Solves, Challenges, WrongKeys, Keys, Tags, Files, Tracking
|
from CTFd.models import db, Teams, Solves, Challenges, WrongKeys, Keys, Tags, Files, Tracking
|
||||||
|
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 357 KiB After Width: | Height: | Size: 357 KiB |
|
Before Width: | Height: | Size: 231 KiB After Width: | Height: | Size: 231 KiB |
|
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 57 KiB |
@@ -1,8 +1,8 @@
|
|||||||
function load_chal_template(chal_type_name){
|
function load_chal_template(chal_type_name){
|
||||||
$.get(script_root + '/static/admin/js/templates/challenges/'+ chal_type_name +'/' + chal_type_name + '-challenge-create.hbs', function(template_data){
|
$.get(script_root + '/themes/admin/static/js/templates/challenges/'+ chal_type_name +'/' + chal_type_name + '-challenge-create.hbs', function(template_data){
|
||||||
var template = Handlebars.compile(template_data);
|
var template = Handlebars.compile(template_data);
|
||||||
$("#create-chal-entry-div").html(template({'nonce':nonce, 'script_root':script_root}));
|
$("#create-chal-entry-div").html(template({'nonce':nonce, 'script_root':script_root}));
|
||||||
$.getScript(script_root + '/static/admin/js/templates/challenges/'+chal_type_name+'/'+chal_type_name+'-challenge-create.js', function(){
|
$.getScript(script_root + '/themes/admin/static/js/templates/challenges/'+chal_type_name+'/'+chal_type_name+'-challenge-create.js', function(){
|
||||||
console.log('loaded');
|
console.log('loaded');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -22,7 +22,7 @@ String.prototype.hashCode = function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
function load_edit_key_modal(key_id, key_type_name) {
|
function load_edit_key_modal(key_id, key_type_name) {
|
||||||
$.get(script_root + '/static/admin/js/templates/keys/'+key_type_name+'/edit-'+key_type_name+'-modal.hbs', function(template_data){
|
$.get(script_root + '/themes/admin/static/js/templates/keys/'+key_type_name+'/edit-'+key_type_name+'-modal.hbs', function(template_data){
|
||||||
$.get(script_root + '/admin/keys/' + key_id, function(key_data){
|
$.get(script_root + '/admin/keys/' + key_id, function(key_data){
|
||||||
$('#edit-keys').empty();
|
$('#edit-keys').empty();
|
||||||
var template = Handlebars.compile(template_data);
|
var template = Handlebars.compile(template_data);
|
||||||
@@ -43,11 +43,11 @@ function load_chal_template(id, success_cb){
|
|||||||
obj = $.grep(challenges['game'], function (e) {
|
obj = $.grep(challenges['game'], function (e) {
|
||||||
return e.id == id;
|
return e.id == id;
|
||||||
})[0]
|
})[0]
|
||||||
$.get(script_root + '/static/admin/js/templates/challenges/'+ obj['type_name'] +'/' + obj['type_name'] + '-challenge-update.hbs', function(template_data){
|
$.get(script_root + '/themes/admin/static/js/templates/challenges/'+ obj['type_name'] +'/' + obj['type_name'] + '-challenge-update.hbs', function(template_data){
|
||||||
var template = Handlebars.compile(template_data);
|
var template = Handlebars.compile(template_data);
|
||||||
$("#update-modals-entry-div").html(template({'nonce':$('#nonce').val(), 'script_root':script_root}));
|
$("#update-modals-entry-div").html(template({'nonce':$('#nonce').val(), 'script_root':script_root}));
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: script_root + '/static/admin/js/templates/challenges/'+obj['type_name']+'/'+obj['type_name']+'-challenge-update.js',
|
url: script_root + '/themes/admin/static/js/templates/challenges/'+obj['type_name']+'/'+obj['type_name']+'-challenge-update.js',
|
||||||
dataType: "script",
|
dataType: "script",
|
||||||
success: success_cb,
|
success: success_cb,
|
||||||
cache: true,
|
cache: true,
|
||||||
@@ -57,7 +57,7 @@ function loadkeys(chal){
|
|||||||
keys = $.parseJSON(JSON.stringify(data));
|
keys = $.parseJSON(JSON.stringify(data));
|
||||||
keys = keys['keys'];
|
keys = keys['keys'];
|
||||||
$('#current-keys').empty();
|
$('#current-keys').empty();
|
||||||
$.get(script_root + "/static/admin/js/templates/admin-keys-table.hbs", function(data){
|
$.get(script_root + "/themes/admin/static/js/templates/admin-keys-table.hbs", function(data){
|
||||||
var template = Handlebars.compile(data);
|
var template = Handlebars.compile(data);
|
||||||
var wrapper = {keys: keys, script_root: script_root};
|
var wrapper = {keys: keys, script_root: script_root};
|
||||||
$('#current-keys').append(template(wrapper));
|
$('#current-keys').append(template(wrapper));
|
||||||
@@ -317,7 +317,7 @@ $('#create-key').click(function(e){
|
|||||||
$('#create-keys-select').change(function(){
|
$('#create-keys-select').change(function(){
|
||||||
var key_type_name = $(this).find("option:selected").text();
|
var key_type_name = $(this).find("option:selected").text();
|
||||||
|
|
||||||
$.get(script_root + '/static/admin/js/templates/keys/'+key_type_name +'/'+key_type_name+'.hbs', function(template_data){
|
$.get(script_root + '/themes/admin/static/js/templates/keys/'+key_type_name +'/'+key_type_name+'.hbs', function(template_data){
|
||||||
var template = Handlebars.compile(template_data);
|
var template = Handlebars.compile(template_data);
|
||||||
$("#create-keys-entry-div").html(template());
|
$("#create-keys-entry-div").html(template());
|
||||||
$("#create-keys-button-div").show();
|
$("#create-keys-button-div").show();
|
||||||
@@ -5,17 +5,17 @@
|
|||||||
<title>Admin Panel</title>
|
<title>Admin Panel</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">
|
||||||
<link rel="shortcut icon" href="{{ request.script_root }}/static/original/img/favicon.ico" type="image/x-icon">
|
<link rel="shortcut icon" href="{{ request.script_root }}/themes/original/static/img/favicon.ico" type="image/x-icon">
|
||||||
<link rel="icon" href="{{ request.script_root }}/static/original/img/favicon.ico" type="image/x-icon">
|
<link rel="icon" href="{{ request.script_root }}/themes/original/static/img/favicon.ico" type="image/x-icon">
|
||||||
<link rel="stylesheet" href="{{ request.script_root }}/static/admin/css/vendor/bootstrap.min.css">
|
<link rel="stylesheet" href="{{ request.script_root }}/themes/admin/static/css/vendor/bootstrap.min.css">
|
||||||
<link rel="stylesheet" href="{{ request.script_root }}/static/admin/css/vendor/font-awesome/css/font-awesome.min.css" />
|
<link rel="stylesheet" href="{{ request.script_root }}/themes/admin/static/css/vendor/font-awesome/css/font-awesome.min.css" />
|
||||||
<link rel="stylesheet" href="{{ request.script_root }}/static/admin/css/style.css">
|
<link rel="stylesheet" href="{{ request.script_root }}/themes/admin/static/css/style.css">
|
||||||
<link href='{{ request.script_root }}/static/admin/css/vendor/lato.css' rel='stylesheet' type='text/css'>
|
<link href='{{ request.script_root }}/themes/admin/static/css/vendor/lato.css' rel='stylesheet' type='text/css'>
|
||||||
<link href='{{ request.script_root }}/static/admin/css/vendor/raleway.css' rel='stylesheet' type='text/css'>
|
<link href='{{ request.script_root }}/themes/admin/static/css/vendor/raleway.css' rel='stylesheet' type='text/css'>
|
||||||
<link rel="stylesheet" type="text/css" href="{{ request.script_root }}/static/admin/css/style.css">
|
<link rel="stylesheet" type="text/css" href="{{ request.script_root }}/themes/admin/static/css/style.css">
|
||||||
<script src="{{ request.script_root }}/static/admin/js/vendor/moment.min.js"></script>
|
<script src="{{ request.script_root }}/themes/admin/static/js/vendor/moment.min.js"></script>
|
||||||
<script src="{{ request.script_root }}/static/admin/js/vendor/moment-timezone-with-data.min.js"></script>
|
<script src="{{ request.script_root }}/themes/admin/static/js/vendor/moment-timezone-with-data.min.js"></script>
|
||||||
<script src="{{ request.script_root }}/static/admin/js/vendor/handlebars.min.js"></script>
|
<script src="{{ request.script_root }}/themes/admin/static/js/vendor/handlebars.min.js"></script>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
var script_root = "{{ request.script_root }}";
|
var script_root = "{{ request.script_root }}";
|
||||||
</script>
|
</script>
|
||||||
@@ -74,11 +74,11 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script src="{{ request.script_root }}/static/admin/js/vendor/jquery.min.js"></script>
|
<script src="{{ request.script_root }}/themes/admin/static/js/vendor/jquery.min.js"></script>
|
||||||
<script src="{{ request.script_root }}/static/admin/js/vendor/marked.min.js"></script>
|
<script src="{{ request.script_root }}/themes/admin/static/js/vendor/marked.min.js"></script>
|
||||||
<script src="{{ request.script_root }}/static/admin/js/vendor/bootstrap.min.js"></script>
|
<script src="{{ request.script_root }}/themes/admin/static/js/vendor/bootstrap.min.js"></script>
|
||||||
<script src="{{ request.script_root }}/static/admin/js/main.js"></script>
|
<script src="{{ request.script_root }}/themes/admin/static/js/main.js"></script>
|
||||||
<script src="{{ request.script_root }}/static/admin/js/utils.js"></script>
|
<script src="{{ request.script_root }}/themes/admin/static/js/utils.js"></script>
|
||||||
{% block scripts %} {% endblock %}
|
{% block scripts %} {% endblock %}
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
@@ -50,7 +50,7 @@
|
|||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block scripts %}
|
{% block scripts %}
|
||||||
<script src="{{ request.script_root }}/static/admin/js/utils.js"></script>
|
<script src="{{ request.script_root }}/themes/admin/static/js/utils.js"></script>
|
||||||
<script src="{{ request.script_root }}/static/admin/js/chalboard.js"></script>
|
<script src="{{ request.script_root }}/themes/admin/static/js/chalboard.js"></script>
|
||||||
<script src="{{ request.script_root }}/static/admin/js/multi-modal.js"></script>
|
<script src="{{ request.script_root }}/themes/admin/static/js/multi-modal.js"></script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
@@ -31,15 +31,15 @@
|
|||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block scripts %}
|
{% block scripts %}
|
||||||
<script src="{{ request.script_root }}/static/admin/js/utils.js"></script>
|
<script src="{{ request.script_root }}/themes/admin/static/js/utils.js"></script>
|
||||||
<script src="{{ request.script_root }}/static/admin/js/vendor/codemirror.min.js"></script>
|
<script src="{{ request.script_root }}/themes/admin/static/js/vendor/codemirror.min.js"></script>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
function load_chal_template(chal_type_name){
|
function load_chal_template(chal_type_name){
|
||||||
$.get(script_root + '/static/admin/js/templates/challenges/'+ chal_type_name +'/' + chal_type_name + '-challenge-create.hbs', function(template_data){
|
$.get(script_root + '/themes/admin/static/js/templates/challenges/'+ chal_type_name +'/' + chal_type_name + '-challenge-create.hbs', function(template_data){
|
||||||
var template = Handlebars.compile(template_data);
|
var template = Handlebars.compile(template_data);
|
||||||
$("#create-chal-entry-div").html(template({'nonce':nonce, 'script_root':script_root}));
|
$("#create-chal-entry-div").html(template({'nonce':nonce, 'script_root':script_root}));
|
||||||
$.getScript(script_root + '/static/admin/js/templates/challenges/'+chal_type_name+'/'+chal_type_name+'-challenge-create.js', function(){
|
$.getScript(script_root + '/themes/admin/static/js/templates/challenges/'+chal_type_name+'/'+chal_type_name+'-challenge-create.js', function(){
|
||||||
console.log('loaded');
|
console.log('loaded');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -77,7 +77,7 @@
|
|||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block scripts %}
|
{% block scripts %}
|
||||||
<script src="{{ request.script_root }}/static/admin/js/utils.js"></script>
|
<script src="{{ request.script_root }}/themes/admin/static/js/utils.js"></script>
|
||||||
<script>
|
<script>
|
||||||
$('#delete-solve').click(function(e){
|
$('#delete-solve').click(function(e){
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
{% extends "admin/base.html" %}
|
{% extends "admin/base.html" %}
|
||||||
|
|
||||||
{% block stylesheets %}
|
{% block stylesheets %}
|
||||||
<link rel="stylesheet" type="text/css" href="{{ request.script_root }}/static/admin/css/vendor/codemirror.min.css">
|
<link rel="stylesheet" type="text/css" href="{{ request.script_root }}/themes/admin/static/css/vendor/codemirror.min.css">
|
||||||
<style>
|
<style>
|
||||||
.row-fluid { margin: 25px; padding-bottom: 25px; }
|
.row-fluid { margin: 25px; padding-bottom: 25px; }
|
||||||
.media-item-wrapper { height: 120px; margin: 5px;
|
.media-item-wrapper { height: 120px; margin: 5px;
|
||||||
@@ -129,8 +129,8 @@
|
|||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block scripts %}
|
{% block scripts %}
|
||||||
<script src="{{ request.script_root }}/static/admin/js/utils.js"></script>
|
<script src="{{ request.script_root }}/themes/admin/static/js/utils.js"></script>
|
||||||
<script src="{{ request.script_root }}/static/admin/js/vendor/codemirror.min.js"></script>
|
<script src="{{ request.script_root }}/themes/admin/static/js/vendor/codemirror.min.js"></script>
|
||||||
<script>
|
<script>
|
||||||
function uploadfiles(){
|
function uploadfiles(){
|
||||||
var form = $('#media-library-upload')[0];
|
var form = $('#media-library-upload')[0];
|
||||||
@@ -29,7 +29,7 @@
|
|||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<script src="{{ request.script_root }}/static/admin/js/vendor/plotly.min.js"></script>
|
<script src="{{ request.script_root }}/themes/admin/static/js/vendor/plotly.min.js"></script>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
// $.distint(array)
|
// $.distint(array)
|
||||||
// Unique elements in array
|
// Unique elements in array
|
||||||
@@ -5,17 +5,17 @@
|
|||||||
<title>Admin Panel</title>
|
<title>Admin Panel</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">
|
||||||
<link rel="shortcut icon" href="{{ request.script_root }}/static/original/img/favicon.ico" type="image/x-icon">
|
<link rel="shortcut icon" href="{{ request.script_root }}/themes/original/static/img/favicon.ico" type="image/x-icon">
|
||||||
<link rel="icon" href="{{ request.script_root }}/static/original/img/favicon.ico" type="image/x-icon">
|
<link rel="icon" href="{{ request.script_root }}/themes/original/static/img/favicon.ico" type="image/x-icon">
|
||||||
<link rel="stylesheet" href="{{ request.script_root }}/static/admin/css/vendor/bootstrap.min.css">
|
<link rel="stylesheet" href="{{ request.script_root }}/themes/admin/static/css/vendor/bootstrap.min.css">
|
||||||
<link rel="stylesheet" href="{{ request.script_root }}/static/admin/css/vendor/font-awesome/css/font-awesome.min.css" />
|
<link rel="stylesheet" href="{{ request.script_root }}/themes/admin/static/css/vendor/font-awesome/css/font-awesome.min.css" />
|
||||||
<link rel="stylesheet" href="{{ request.script_root }}/static/admin/css/style.css">
|
<link rel="stylesheet" href="{{ request.script_root }}/themes/admin/static/css/style.css">
|
||||||
<link href='{{ request.script_root }}/static/admin/css/vendor/lato.css' rel='stylesheet' type='text/css'>
|
<link href='{{ request.script_root }}/themes/admin/static/css/vendor/lato.css' rel='stylesheet' type='text/css'>
|
||||||
<link href='{{ request.script_root }}/static/admin/css/vendor/raleway.css' rel='stylesheet' type='text/css'>
|
<link href='{{ request.script_root }}/themes/admin/static/css/vendor/raleway.css' rel='stylesheet' type='text/css'>
|
||||||
<link rel="stylesheet" type="text/css" href="{{ request.script_root }}/static/admin/css/style.css">
|
<link rel="stylesheet" type="text/css" href="{{ request.script_root }}/themes/admin/static/css/style.css">
|
||||||
<script src="{{ request.script_root }}/static/admin/js/vendor/moment.min.js"></script>
|
<script src="{{ request.script_root }}/themes/admin/static/js/vendor/moment.min.js"></script>
|
||||||
<script src="{{ request.script_root }}/static/admin/js/vendor/moment-timezone-with-data.min.js"></script>
|
<script src="{{ request.script_root }}/themes/admin/static/js/vendor/moment-timezone-with-data.min.js"></script>
|
||||||
<script src="{{ request.script_root }}/static/admin/js/vendor/handlebars.min.js"></script>
|
<script src="{{ request.script_root }}/themes/admin/static/js/vendor/handlebars.min.js"></script>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
var script_root = "{{ request.script_root }}";
|
var script_root = "{{ request.script_root }}";
|
||||||
</script>
|
</script>
|
||||||
@@ -70,9 +70,9 @@
|
|||||||
{{ content | safe }}
|
{{ content | safe }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script src="{{ request.script_root }}/static/admin/js/vendor/jquery.min.js"></script>
|
<script src="{{ request.script_root }}/themes/admin/static/js/vendor/jquery.min.js"></script>
|
||||||
<script src="{{ request.script_root }}/static/admin/js/vendor/marked.min.js"></script>
|
<script src="{{ request.script_root }}/themes/admin/static/js/vendor/marked.min.js"></script>
|
||||||
<script src="{{ request.script_root }}/static/admin/js/vendor/bootstrap.min.js"></script>
|
<script src="{{ request.script_root }}/themes/admin/static/js/vendor/bootstrap.min.js"></script>
|
||||||
{% block scripts %} {% endblock %}
|
{% block scripts %} {% endblock %}
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
{% extends "admin/base.html" %}
|
{% extends "admin/base.html" %}
|
||||||
|
|
||||||
{% block stylesheets %}
|
{% block stylesheets %}
|
||||||
<link rel="stylesheet" type="text/css" href="{{ request.script_root }}/static/admin/css/vendor/codemirror.min.css">
|
<link rel="stylesheet" type="text/css" href="{{ request.script_root }}/themes/admin/static/css/vendor/codemirror.min.css">
|
||||||
<style>
|
<style>
|
||||||
.CodeMirror {
|
.CodeMirror {
|
||||||
padding-left: 15px;
|
padding-left: 15px;
|
||||||
@@ -78,7 +78,7 @@
|
|||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block scripts %}
|
{% block scripts %}
|
||||||
<script src="{{ request.script_root }}/static/admin/js/vendor/codemirror.min.js"></script>
|
<script src="{{ request.script_root }}/themes/admin/static/js/vendor/codemirror.min.js"></script>
|
||||||
<script>
|
<script>
|
||||||
var editor = CodeMirror.fromTextArea(document.getElementById("pages-editor"), {
|
var editor = CodeMirror.fromTextArea(document.getElementById("pages-editor"), {
|
||||||
lineNumbers: true,
|
lineNumbers: true,
|
||||||
@@ -221,10 +221,10 @@
|
|||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block scripts %}
|
{% block scripts %}
|
||||||
<script src="{{ request.script_root }}/static/admin/js/vendor/moment.min.js"></script>
|
<script src="{{ request.script_root }}/themes/admin/static/js/vendor/moment.min.js"></script>
|
||||||
<script src="{{ request.script_root }}/static/admin/js/vendor/plotly.min.js"></script>
|
<script src="{{ request.script_root }}/themes/admin/static/js/vendor/plotly.min.js"></script>
|
||||||
<script src="{{ request.script_root }}/static/admin/js/utils.js"></script>
|
<script src="{{ request.script_root }}/themes/admin/static/js/utils.js"></script>
|
||||||
<script src="{{ request.script_root }}/static/admin/js/team.js"></script>
|
<script src="{{ request.script_root }}/themes/admin/static/js/team.js"></script>
|
||||||
<script>
|
<script>
|
||||||
$('#delete-solve').click(function (e) {
|
$('#delete-solve').click(function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
@@ -84,7 +84,7 @@
|
|||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block scripts %}
|
{% block scripts %}
|
||||||
<script src="{{ request.script_root }}/static/admin/js/utils.js"></script>
|
<script src="{{ request.script_root }}/themes/admin/static/js/utils.js"></script>
|
||||||
<script>
|
<script>
|
||||||
$('#delete-solve').click(function (e) {
|
$('#delete-solve').click(function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
Before Width: | Height: | Size: 357 KiB After Width: | Height: | Size: 357 KiB |