From d66c2f01d8fb3229d77a44a70351af5c3b05ff11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 5 May 2020 03:37:27 +0300 Subject: [PATCH] Add ui-extensions --- .../SharedThemeGlobalScriptContributor.cs | 1 + .../datatables/datatables-extensions.js | 3 +- .../ui-extensions.js | 192 ++++++++++++++++++ 3 files changed, 194 insertions(+), 2 deletions(-) create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/ui-extensions.js 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 0f4cc752c9..892f0d497a 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 @@ -36,6 +36,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Bundling { context.Files.AddRange(new[] { + "/libs/abp/aspnetcore-mvc-ui-theme-shared/ui-extensions.js", "/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", diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-extensions.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-extensions.js index 36f864e201..cd31e73bc4 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-extensions.js +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-extensions.js @@ -1,5 +1,4 @@ -var abp = abp; - +var abp = abp || {}; (function ($) { var datatables = abp.utils.createNamespace(abp, 'libs.datatables'); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/ui-extensions.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/ui-extensions.js new file mode 100644 index 0000000000..19882fbc62 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/ui-extensions.js @@ -0,0 +1,192 @@ +var abp = abp || {}; +(function () { + abp.ui = abp.ui || {}; + abp.ui.extensions = abp.ui.extensions || {}; + + abp.ui.extensions.ActionList = function () { + return new abp.utils.common.LinkedList(); + }; + + abp.ui.extensions.ColumnList = function () { + return new abp.utils.common.LinkedList(); + }; + + abp.ui.extensions.entityActions = (function () { + var _callbackLists = {}; + + function _get(name) { + var callbackList = _callbackLists[name]; + + if (!callbackList) { + callbackList = _callbackLists[name] = []; + } + + return { + addContributor: _addContributor, + get actions() { + return _getActions(); + } + }; + + function _addContributor(contributeCallback, order) { + if (order === undefined || order >= callbackList.length) { + callbackList.push(contributeCallback); + } else if (order === 0) { + callbackList.unshift(contributeCallback); + } else { + callbackList.splice(order, 0, contributeCallback); + } + } + + function _getActions() { + var actionList = new abp.ui.extensions.ActionList(); + + callbackList.forEach(function (callback) { + callback(actionList); + }); + + return actionList; + } + } + + return { + get: _get + }; + })(); + + abp.ui.extensions.tableColumns = (function () { + var _callbackLists = {}; + + function _get(name) { + var callbackList = _callbackLists[name]; + + if (!callbackList) { + callbackList = _callbackLists[name] = []; + } + + return { + addContributor: _addContributor, + get columns() { + return _getColumns(); + } + }; + + function _addContributor(contributeCallback, order) { + if (order === undefined || order >= callbackList.length) { + callbackList.push(contributeCallback); + } else if (order === 0) { + callbackList.unshift(contributeCallback); + } else { + callbackList.splice(order, 0, contributeCallback); + } + } + + function _getColumns() { + var columnList = new abp.ui.extensions.ColumnList(); + + callbackList.forEach(function (callback) { + callback(columnList); + }); + + return columnList; + } + } + + return { + get: _get + }; + })(); + + function initializeObjectExtensions() { + + function localizeDisplayName(propertyName, displayName) { + if (displayName && displayName.name) { + return abp.localization.localize(displayName.name, displayName.resource); + } + + if (abp.localization.isLocalized('DisplayName:' + propertyName)) { + return abp.localization.localize('DisplayName:' + propertyName); + } + + return abp.localization.localize(propertyName); + } + + function configureTableColumns(tableName, columnConfigs) { + abp.ui.extensions.tableColumns.get(tableName) + .addContributor( + function (columnList) { + columnList.addManyTail(columnConfigs); + } + ); + } + + function getTableProperties(objectConfig) { + var propertyNames = Object.keys(objectConfig.properties); + var tableProperties = []; + for (var i = 0; i < propertyNames.length; i++) { + var propertyName = propertyNames[i]; + var propertyConfig = objectConfig.properties[propertyName]; + if (propertyConfig.ui.onTable.isVisible) { + tableProperties.push({ + name: propertyName, + config: propertyConfig + }); + } + } + + return tableProperties; + } + + function convertPropertiesToColumnConfigs(properties) { + var columnConfigs = []; + + for (var i = 0; i < properties.length; i++) { + var tableProperty = properties[i]; + columnConfigs.push({ + title: localizeDisplayName(tableProperty.name, tableProperty.config.displayName), + data: "extraProperties." + tableProperty.name + }); + } + + return columnConfigs; + } + + function configureEntity(moduleName, entityName, entityConfig) { + var tableProperties = getTableProperties(entityConfig); + + if (tableProperties.length > 0) { + var tableName = abp.utils.toCamelCase(moduleName) + "." + abp.utils.toCamelCase(entityName); + var columnConfigs = convertPropertiesToColumnConfigs(tableProperties); + configureTableColumns( + tableName, + columnConfigs + ); + } + } + + function configureModule(moduleName, moduleConfig) { + var entityNames = Object.keys(moduleConfig.entities); + for (var i = 0; i < entityNames.length; i++) { + configureEntity( + moduleName, + entityNames[i], + moduleConfig.entities[entityNames[i]] + ); + } + } + + var moduleNames = Object.keys(abp.objectExtensions.modules); + + for (var i = 0; i < moduleNames.length; i++) { + configureModule( + moduleNames[i], + abp.objectExtensions.modules[moduleNames[i]] + ); + } + } + + abp.event.on('abp.configurationInitialized', function () { + initializeObjectExtensions(); + }); + +})();