diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Bundling/SharedThemeGlobalScriptContributor.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Bundling/SharedThemeGlobalScriptContributor.cs index 83aa8506d5..a533dc74f3 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Bundling/SharedThemeGlobalScriptContributor.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Bundling/SharedThemeGlobalScriptContributor.cs @@ -35,6 +35,8 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Bundling { "/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/jquery-extensions.js", "/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery-form/jquery-form-extensions.js", + "/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/widget-manager.js", + "/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/dashboard-manager.js", "/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/dom-event-handlers.js", "/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/modal-manager.js", "/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-extensions.js", diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/dashboard-manager.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/dashboard-manager.js new file mode 100644 index 0000000000..4a12085076 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/dashboard-manager.js @@ -0,0 +1,54 @@ +(function ($) { + + abp.DashboardManager = function (opts) { + + if (typeof opts === 'string') { + opts = { + wrapper: opts + }; + } + + var $dashboardWrapper; + if (typeof opts.wrapper === 'string') { + $dashboardWrapper = $(opts.wrapper); + } else { + $dashboardWrapper = opts.wrapper; + } + + var init = function () { + $dashboardWrapper.find('.abp-widget-wrapper').each(function () { + var widgetManager = new abp.WidgetManager({ + wrapper: $(this), + filterCallback: opts.filterCallback || function () { + if (opts.filterForm) { + return opts.filterForm.serializeFormToObject(); + } + + return {}; + } + }); + + widgetManager.init(); + }); + }; + + var refresh = function () { + $dashboardWrapper.find('.abp-widget-wrapper').each(function () { + var widgetManager = $(this).data('abp-widget-manager'); + widgetManager && widgetManager.refresh(); + }); + }; + + if (opts.filterForm) { + opts.filterForm.submit(function (e) { + e.preventDefault(); + refresh(); + }); + } + + return { + init: init, + refresh: refresh + }; + }; +})(jQuery); \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/widget-manager.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/widget-manager.js new file mode 100644 index 0000000000..019ab3644b --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/widget-manager.js @@ -0,0 +1,86 @@ +(function ($) { + abp.widgets = abp.widgets || {}; + + abp.WidgetManager = function (opts) { + if (typeof opts === 'string') { + opts = { + wrapper: opts + }; + } + + var $widgetWrapperDiv; + if (typeof opts.wrapper === 'string') { + $widgetWrapperDiv = $(opts.wrapper); + } else { + $widgetWrapperDiv = opts.wrapper; + } + + if (!$widgetWrapperDiv.hasClass('abp-widget-wrapper')) { + $widgetWrapperDiv = $widgetWrapperDiv.closest('.abp-widget-wrapper'); + } + + var getFilters = function () { + var filters = {}; + + if (opts.filterCallback) { + filters = opts.filterCallback(); + } + + var widgetApi = $widgetWrapperDiv.data('abp-widget-api'); + if (widgetApi && widgetApi.getFilters) { + filters = $.extend(filters, widgetApi.getFilters()); + } + + return filters; + }; + + var init = function () { + var widgetName = $widgetWrapperDiv.attr('data-widget-name'); + var widgetApiClass = abp.widgets[widgetName]; + if (widgetApiClass) { + var widgetApi = new widgetApiClass($widgetWrapperDiv); + $widgetWrapperDiv.data('abp-widget-api', widgetApi); + if (widgetApi.init) { + widgetApi.init(getFilters($widgetWrapperDiv)); + } + } + }; + + var callRefreshWidgetApi = function () { + var widgetApi = $widgetWrapperDiv.data('abp-widget-api'); + if (widgetApi && widgetApi.refresh) { + widgetApi.refresh(getFilters($widgetWrapperDiv)); + } + } + + var refresh = function () { + var refreshUrl = $widgetWrapperDiv.attr('data-refresh-url'); + if (refreshUrl) { + abp.ajax({ + url: refreshUrl, + type: 'GET', + dataType: 'html', + contentType: 'application/x-www-form-urlencoded; charset=UTF-8', + data: getFilters() + }).then(function (result) { + var $newWidgetWrapperDiv = $(result); + $widgetWrapperDiv.replaceWith($newWidgetWrapperDiv); + $widgetWrapperDiv = $newWidgetWrapperDiv; + $widgetWrapperDiv.data('abp-widget-manager', publicApi); + init(); + }); + } else { + callRefreshWidgetApi(); + } + }; + + var publicApi = { + init: init, + refresh: refresh + }; + + $widgetWrapperDiv.data('abp-widget-manager', publicApi); + + return publicApi; + }; +})(jQuery); \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.Web/Pages/MyDashboard.js b/samples/DashboardDemo/src/DashboardDemo.Web/Pages/MyDashboard.js index 7da4a80aa1..b601fe3128 100644 --- a/samples/DashboardDemo/src/DashboardDemo.Web/Pages/MyDashboard.js +++ b/samples/DashboardDemo/src/DashboardDemo.Web/Pages/MyDashboard.js @@ -1,141 +1,9 @@ -abp.widgets = abp.widgets || {}; //TODO: Remove later -(function () { - - abp.WidgetManager = function (opts) { - if (typeof opts === 'string') { - opts = { - wrapper: opts - }; - } - - var $widgetWrapperDiv; - if (typeof opts.wrapper === 'string') { - $widgetWrapperDiv = $(opts.wrapper); - } else { - $widgetWrapperDiv = opts.wrapper; - } - - if (!$widgetWrapperDiv.hasClass('abp-widget-wrapper')) { - $widgetWrapperDiv = $widgetWrapperDiv.closest('.abp-widget-wrapper'); - } - - var getFilters = function () { - var filters = {}; - - if (opts.filterCallback) { - filters = opts.filterCallback(); - } - - var widgetApi = $widgetWrapperDiv.data('abp-widget-api'); - if (widgetApi && widgetApi.getFilters) { - filters = $.extend(filters, widgetApi.getFilters()); - } - - return filters; - }; - - var init = function () { - var widgetName = $widgetWrapperDiv.attr('data-widget-name'); - var widgetApiClass = abp.widgets[widgetName]; - if (widgetApiClass) { - var widgetApi = new widgetApiClass($widgetWrapperDiv); - $widgetWrapperDiv.data('abp-widget-api', widgetApi); - if (widgetApi.init) { - widgetApi.init(getFilters($widgetWrapperDiv)); - } - } - }; - - var callRefreshWidgetApi = function () { - var widgetApi = $widgetWrapperDiv.data('abp-widget-api'); - if (widgetApi && widgetApi.refresh) { - widgetApi.refresh(getFilters($widgetWrapperDiv)); - } - } - - var refresh = function () { - var refreshUrl = $widgetWrapperDiv.attr('data-refresh-url'); - if (refreshUrl) { - abp.ajax({ - url: refreshUrl, - type: 'GET', - dataType: 'html', - contentType: 'application/x-www-form-urlencoded; charset=UTF-8', - data: getFilters() - }).then(function (result) { - var $newWidgetWrapperDiv = $(result); - $widgetWrapperDiv.replaceWith($newWidgetWrapperDiv); - $widgetWrapperDiv = $newWidgetWrapperDiv; - $widgetWrapperDiv.data('abp-widget-manager', publicApi); - init(); - }); - } else { - callRefreshWidgetApi(); - } - }; - - var publicApi = { - init: init, - refresh: refresh - }; - - $widgetWrapperDiv.data('abp-widget-manager', publicApi); - - return publicApi; - }; - - abp.DashboardManager = function (opts) { - - if (typeof opts === 'string') { - opts = { - wrapper: opts - }; - } - - var $dashboardWrapper; - if (typeof opts.wrapper === 'string') { - $dashboardWrapper = $(opts.wrapper); - } else { - $dashboardWrapper = opts.wrapper; - } - - var init = function() { - $dashboardWrapper.find('.abp-widget-wrapper').each(function() { - var widgetManager = new abp.WidgetManager({ - wrapper: $(this), - filterCallback: opts.filterCallback - }); - - widgetManager.init(); - }); - }; - - var refresh = function () { - $dashboardWrapper.find('.abp-widget-wrapper').each(function () { - var widgetManager = $(this).data('abp-widget-manager'); - widgetManager && widgetManager.refresh(); - }); - }; - - return { - init: init, - refresh: refresh - }; - }; - - var filterForm = $('#MyDashboardFilterForm'); +(function () { var myDashboard = new abp.DashboardManager({ wrapper: '#MyDashboardWidgetsArea', - filterCallback: function () { - return filterForm.serializeFormToObject(); - } + filterForm: $('#MyDashboardFilterForm') }); myDashboard.init(); - - filterForm.submit(function (e) { - e.preventDefault(); - myDashboard.refresh(); - }); })(); \ No newline at end of file