diff --git a/caravel/assets/javascripts/common.js b/caravel/assets/javascripts/common.js new file mode 100644 index 000000000..abe9e694a --- /dev/null +++ b/caravel/assets/javascripts/common.js @@ -0,0 +1,11 @@ +var $ = require('jquery'); +var utils = require('./modules/utils'); + +$(document).ready(function () { + $(':checkbox[data-checkbox-api-prefix]').change(function () { + var $this = $(this); + var prefix = $this.data('checkbox-api-prefix'); + var id = $this.attr('id'); + utils.toggleCheckbox(prefix, "#" + id); + }); +}); diff --git a/caravel/assets/javascripts/dashboard.jsx b/caravel/assets/javascripts/dashboard.jsx index 3d050d887..6496a23b0 100644 --- a/caravel/assets/javascripts/dashboard.jsx +++ b/caravel/assets/javascripts/dashboard.jsx @@ -365,9 +365,12 @@ var Dashboard = function (dashboardData) { }); }, error: function (error) { + var respJSON = error.responseJSON; + var errorMsg = (respJSON && respJSON.message) ? respJSON.message : + error.responseText; showModal({ title: "Error", - body: "Sorry, there was an error saving this dashboard:
" + error + body: "Sorry, there was an error saving this dashboard:
" + errorMsg }); console.warn("Save dashboard error", error); } diff --git a/caravel/assets/javascripts/modules/utils.js b/caravel/assets/javascripts/modules/utils.js index 5c27f4727..94dfb8140 100644 --- a/caravel/assets/javascripts/modules/utils.js +++ b/caravel/assets/javascripts/modules/utils.js @@ -74,7 +74,30 @@ function showModal(options) { $(options.modalSelector).modal("show"); } +var showApiMessage = function (resp) { + var template = '
' + + '
'; + + var severity = resp.severity || 'info'; + $(template) + .addClass('alert-' + severity) + .append(resp.message) + .appendTo($('#alert-container')); +}; + +var toggleCheckbox = function (apiUrlPrefix, selector) { + var apiUrl = apiUrlPrefix + $(selector)[0].checked; + $.get(apiUrl).fail(function (xhr, textStatus, errorThrown) { + var resp = xhr.responseJSON; + if (resp && resp.message) { + showApiMessage(resp); + } + }); +}; + module.exports = { wrapSvgText: wrapSvgText, - showModal: showModal + showModal: showModal, + toggleCheckbox: toggleCheckbox }; diff --git a/caravel/assets/webpack.config.js b/caravel/assets/webpack.config.js index cabb8bc12..6f26479f2 100644 --- a/caravel/assets/webpack.config.js +++ b/caravel/assets/webpack.config.js @@ -10,7 +10,8 @@ var config = { explore: APP_DIR + '/javascripts/explore.js', welcome: APP_DIR + '/javascripts/welcome.js', sql: APP_DIR + '/javascripts/sql.js', - standalone: APP_DIR + '/javascripts/standalone.js' + standalone: APP_DIR + '/javascripts/standalone.js', + common: APP_DIR + '/javascripts/common.js' }, output: { path: BUILD_DIR, diff --git a/caravel/templates/appbuilder/baselayout.html b/caravel/templates/appbuilder/baselayout.html index 33110ce16..ba18c4439 100644 --- a/caravel/templates/appbuilder/baselayout.html +++ b/caravel/templates/appbuilder/baselayout.html @@ -16,7 +16,7 @@
{% block messages %} - {% include 'appbuilder/flash.html' %} + {% include 'caravel/flash_wrapper.html' %} {% endblock %} {% block content %} {% endblock %} diff --git a/caravel/templates/appbuilder/general/widgets/list.html b/caravel/templates/appbuilder/general/widgets/list.html index 51c958772..294aa5b4c 100644 --- a/caravel/templates/appbuilder/general/widgets/list.html +++ b/caravel/templates/appbuilder/general/widgets/list.html @@ -64,7 +64,7 @@ {{'checked' if item[value] }} name="{{ '{}__{}'.format(pk, value) }}" id="{{ '{}__{}'.format(pk, value) }}" - onchange="$.get('/caravel/checkbox/{{ modelview_name }}/{{ pk }}/{{ value }}/' + $('#{{ '{}__{}'.format(pk, value) }}')[0].checked ) + '/';"> + data-checkbox-api-prefix="/caravel/checkbox/{{ modelview_name }}/{{ pk }}/{{ value }}/"> {% else %} {{ item[value]|safe }} {% endif %} diff --git a/caravel/templates/caravel/base.html b/caravel/templates/caravel/base.html index 2dacdffce..e2664e7fa 100644 --- a/caravel/templates/caravel/base.html +++ b/caravel/templates/caravel/base.html @@ -10,3 +10,8 @@ {{super()}} {% endblock %} + + {% block tail_js %} + {{super()}} + + {% endblock %} diff --git a/caravel/templates/caravel/basic.html b/caravel/templates/caravel/basic.html index 72b8485cb..07782418e 100644 --- a/caravel/templates/caravel/basic.html +++ b/caravel/templates/caravel/basic.html @@ -27,6 +27,7 @@ {% endblock %} {% block body %} + {% include 'caravel/flash_wrapper.html' %}
Oops! React.js is not working properly.
diff --git a/caravel/templates/caravel/dashboard.html b/caravel/templates/caravel/dashboard.html index bde25e203..861f1e318 100644 --- a/caravel/templates/caravel/dashboard.html +++ b/caravel/templates/caravel/dashboard.html @@ -8,6 +8,7 @@ {% block body %}
+ {% include 'caravel/flash_wrapper.html' %}