diff --git a/src/YoYo.Cms.EntityFramework/Migrations/201708291553133_Add_Upgrade_ABP2_3.Designer.cs b/src/YoYo.Cms.EntityFramework/Migrations/201708291553133_Add_Upgrade_ABP2_3.Designer.cs
new file mode 100644
index 0000000..37a3ea3
--- /dev/null
+++ b/src/YoYo.Cms.EntityFramework/Migrations/201708291553133_Add_Upgrade_ABP2_3.Designer.cs
@@ -0,0 +1,29 @@
+//
+namespace YoYo.Cms.Migrations
+{
+ using System.CodeDom.Compiler;
+ using System.Data.Entity.Migrations;
+ using System.Data.Entity.Migrations.Infrastructure;
+ using System.Resources;
+
+ [GeneratedCode("EntityFramework.Migrations", "6.1.3-40302")]
+ public sealed partial class Add_Upgrade_ABP2_3 : IMigrationMetadata
+ {
+ private readonly ResourceManager Resources = new ResourceManager(typeof(Add_Upgrade_ABP2_3));
+
+ string IMigrationMetadata.Id
+ {
+ get { return "201708291553133_Add_Upgrade_ABP2_3"; }
+ }
+
+ string IMigrationMetadata.Source
+ {
+ get { return null; }
+ }
+
+ string IMigrationMetadata.Target
+ {
+ get { return Resources.GetString("Target"); }
+ }
+ }
+}
diff --git a/src/YoYo.Cms.EntityFramework/Migrations/201708291553133_Add_Upgrade_ABP2_3.cs b/src/YoYo.Cms.EntityFramework/Migrations/201708291553133_Add_Upgrade_ABP2_3.cs
new file mode 100644
index 0000000..0df0ef4
--- /dev/null
+++ b/src/YoYo.Cms.EntityFramework/Migrations/201708291553133_Add_Upgrade_ABP2_3.cs
@@ -0,0 +1,62 @@
+namespace YoYo.Cms.Migrations
+{
+ using System;
+ using System.Collections.Generic;
+ using System.Data.Entity.Infrastructure.Annotations;
+ using System.Data.Entity.Migrations;
+
+ public partial class Add_Upgrade_ABP2_3 : DbMigration
+ {
+ public override void Up()
+ {
+ AlterTableAnnotations(
+ "ABP.UserOrganizationUnits",
+ c => new
+ {
+ Id = c.Long(nullable: false, identity: true),
+ TenantId = c.Int(),
+ UserId = c.Long(nullable: false),
+ OrganizationUnitId = c.Long(nullable: false),
+ IsDeleted = c.Boolean(nullable: false),
+ CreationTime = c.DateTime(nullable: false),
+ CreatorUserId = c.Long(),
+ },
+ annotations: new Dictionary
+ {
+ {
+ "DynamicFilter_UserOrganizationUnit_SoftDelete",
+ new AnnotationValues(oldValue: null, newValue: "EntityFramework.DynamicFilters.DynamicFilterDefinition")
+ },
+ });
+
+ AddColumn("ABP.Languages", "IsDisabled", c => c.Boolean(nullable: false));
+ AddColumn("ABP.UserOrganizationUnits", "IsDeleted", c => c.Boolean(nullable: false));
+ }
+
+ public override void Down()
+ {
+ DropColumn("ABP.UserOrganizationUnits", "IsDeleted");
+ DropColumn("ABP.Languages", "IsDisabled");
+ AlterTableAnnotations(
+ "ABP.UserOrganizationUnits",
+ c => new
+ {
+ Id = c.Long(nullable: false, identity: true),
+ TenantId = c.Int(),
+ UserId = c.Long(nullable: false),
+ OrganizationUnitId = c.Long(nullable: false),
+ IsDeleted = c.Boolean(nullable: false),
+ CreationTime = c.DateTime(nullable: false),
+ CreatorUserId = c.Long(),
+ },
+ annotations: new Dictionary
+ {
+ {
+ "DynamicFilter_UserOrganizationUnit_SoftDelete",
+ new AnnotationValues(oldValue: "EntityFramework.DynamicFilters.DynamicFilterDefinition", newValue: null)
+ },
+ });
+
+ }
+ }
+}
diff --git a/src/YoYo.Cms.EntityFramework/Migrations/201708291553133_Add_Upgrade_ABP2_3.resx b/src/YoYo.Cms.EntityFramework/Migrations/201708291553133_Add_Upgrade_ABP2_3.resx
new file mode 100644
index 0000000..24083a5
--- /dev/null
+++ b/src/YoYo.Cms.EntityFramework/Migrations/201708291553133_Add_Upgrade_ABP2_3.resx
@@ -0,0 +1,126 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 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
+
+
+ dbo
+
+
\ No newline at end of file
diff --git a/src/YoYo.Cms.EntityFramework/YoYo.Cms.EntityFramework.csproj b/src/YoYo.Cms.EntityFramework/YoYo.Cms.EntityFramework.csproj
index 3c3c91b..24e093a 100644
--- a/src/YoYo.Cms.EntityFramework/YoYo.Cms.EntityFramework.csproj
+++ b/src/YoYo.Cms.EntityFramework/YoYo.Cms.EntityFramework.csproj
@@ -139,6 +139,10 @@
201704281345333_YoYoCms_Initial.cs
+
+
+ 201708291553133_Add_Upgrade_ABP2_3.cs
+
@@ -167,6 +171,9 @@
201704281345333_YoYoCms_Initial.cs
+
+ 201708291553133_Add_Upgrade_ABP2_3.cs
+
diff --git a/src/YoYo.Cms.Web/Abp/Framework/scripts/abp.es5.js b/src/YoYo.Cms.Web/Abp/Framework/scripts/abp.es5.js
new file mode 100644
index 0000000..d9dc5f6
--- /dev/null
+++ b/src/YoYo.Cms.Web/Abp/Framework/scripts/abp.es5.js
@@ -0,0 +1,879 @@
+'use strict';
+
+var abp = abp || {};
+(function ($) {
+
+ /* Application paths *****************************************/
+
+ //Current application root path (including virtual directory if exists).
+ abp.appPath = abp.appPath || '/';
+
+ abp.pageLoadTime = new Date();
+
+ //Converts given path to absolute path using abp.appPath variable.
+ abp.toAbsAppPath = function (path) {
+ if (path.indexOf('/') == 0) {
+ path = path.substring(1);
+ }
+
+ return abp.appPath + path;
+ };
+
+ /* MULTITENANCY */
+
+ abp.multiTenancy = abp.multiTenancy || {};
+
+ abp.multiTenancy.isEnabled = false;
+
+ abp.multiTenancy.sides = {
+ TENANT: 1,
+ HOST: 2
+ };
+
+ abp.multiTenancy.tenantIdCookieName = 'Abp.TenantId';
+
+ abp.multiTenancy.setTenantIdCookie = function (tenantId) {
+ if (tenantId) {
+ abp.utils.setCookieValue(abp.multiTenancy.tenantIdCookieName, tenantId.toString(), new Date(new Date().getTime() + 5 * 365 * 86400000), //5 years
+ abp.appPath);
+ } else {
+ abp.utils.deleteCookie(abp.multiTenancy.tenantIdCookieName, abp.appPath);
+ }
+ };
+
+ abp.multiTenancy.getTenantIdCookie = function () {
+ var value = abp.utils.getCookieValue(abp.multiTenancy.tenantIdCookieName);
+ if (!value) {
+ return null;
+ }
+
+ return parseInt(value);
+ };
+
+ /* SESSION */
+
+ abp.session = abp.session || {
+ multiTenancySide: abp.multiTenancy.sides.HOST
+ };
+
+ /* LOCALIZATION ***********************************************/
+ //Implements Localization API that simplifies usage of localization scripts generated by Abp.
+
+ abp.localization = abp.localization || {};
+
+ abp.localization.languages = [];
+
+ abp.localization.currentLanguage = {};
+
+ abp.localization.sources = [];
+
+ abp.localization.values = {};
+
+ abp.localization.localize = function (key, sourceName) {
+ sourceName = sourceName || abp.localization.defaultSourceName;
+
+ var source = abp.localization.values[sourceName];
+
+ if (!source) {
+ abp.log.warn('Could not find localization source: ' + sourceName);
+ return key;
+ }
+
+ var value = source[key];
+ if (value == undefined) {
+ return key;
+ }
+
+ var copiedArguments = Array.prototype.slice.call(arguments, 0);
+ copiedArguments.splice(1, 1);
+ copiedArguments[0] = value;
+
+ return abp.utils.formatString.apply(this, copiedArguments);
+ };
+
+ abp.localization.getSource = function (sourceName) {
+ return function (key) {
+ var copiedArguments = Array.prototype.slice.call(arguments, 0);
+ copiedArguments.splice(1, 0, sourceName);
+ return abp.localization.localize.apply(this, copiedArguments);
+ };
+ };
+
+ abp.localization.isCurrentCulture = function (name) {
+ return abp.localization.currentCulture && abp.localization.currentCulture.name && abp.localization.currentCulture.name.indexOf(name) == 0;
+ };
+
+ abp.localization.defaultSourceName = undefined;
+ abp.localization.abpWeb = abp.localization.getSource('AbpWeb');
+
+ /* AUTHORIZATION **********************************************/
+ //Implements Authorization API that simplifies usage of authorization scripts generated by Abp.
+
+ abp.auth = abp.auth || {};
+
+ abp.auth.allPermissions = abp.auth.allPermissions || {};
+
+ abp.auth.grantedPermissions = abp.auth.grantedPermissions || {};
+
+ //Deprecated. Use abp.auth.isGranted instead.
+ abp.auth.hasPermission = function (permissionName) {
+ return abp.auth.isGranted.apply(this, arguments);
+ };
+
+ //Deprecated. Use abp.auth.isAnyGranted instead.
+ abp.auth.hasAnyOfPermissions = function () {
+ return abp.auth.isAnyGranted.apply(this, arguments);
+ };
+
+ //Deprecated. Use abp.auth.areAllGranted instead.
+ abp.auth.hasAllOfPermissions = function () {
+ return abp.auth.areAllGranted.apply(this, arguments);
+ };
+
+ abp.auth.isGranted = function (permissionName) {
+ return abp.auth.allPermissions[permissionName] != undefined && abp.auth.grantedPermissions[permissionName] != undefined;
+ };
+
+ abp.auth.isAnyGranted = function () {
+ if (!arguments || arguments.length <= 0) {
+ return true;
+ }
+
+ for (var i = 0; i < arguments.length; i++) {
+ if (abp.auth.isGranted(arguments[i])) {
+ return true;
+ }
+ }
+
+ return false;
+ };
+
+ abp.auth.areAllGranted = function () {
+ if (!arguments || arguments.length <= 0) {
+ return true;
+ }
+
+ for (var i = 0; i < arguments.length; i++) {
+ if (!abp.auth.isGranted(arguments[i])) {
+ return false;
+ }
+ }
+
+ return true;
+ };
+
+ abp.auth.tokenCookieName = 'Abp.AuthToken';
+
+ abp.auth.setToken = function (authToken, expireDate) {
+ abp.utils.setCookieValue(abp.auth.tokenCookieName, authToken, expireDate, abp.appPath);
+ };
+
+ abp.auth.getToken = function () {
+ return abp.utils.getCookieValue(abp.auth.tokenCookieName);
+ };
+
+ abp.auth.clearToken = function () {
+ abp.auth.setToken();
+ };
+
+ /* FEATURE SYSTEM *********************************************/
+ //Implements Features API that simplifies usage of feature scripts generated by Abp.
+
+ abp.features = abp.features || {};
+
+ abp.features.allFeatures = abp.features.allFeatures || {};
+
+ abp.features.get = function (name) {
+ return abp.features.allFeatures[name];
+ };
+
+ abp.features.getValue = function (name) {
+ var feature = abp.features.get(name);
+ if (feature == undefined) {
+ return undefined;
+ }
+
+ return feature.value;
+ };
+
+ abp.features.isEnabled = function (name) {
+ var value = abp.features.getValue(name);
+ return value == 'true' || value == 'True';
+ };
+
+ /* SETTINGS **************************************************/
+ //Implements Settings API that simplifies usage of setting scripts generated by Abp.
+
+ abp.setting = abp.setting || {};
+
+ abp.setting.values = abp.setting.values || {};
+
+ abp.setting.get = function (name) {
+ return abp.setting.values[name];
+ };
+
+ abp.setting.getBoolean = function (name) {
+ var value = abp.setting.get(name);
+ return value == 'true' || value == 'True';
+ };
+
+ abp.setting.getInt = function (name) {
+ return parseInt(abp.setting.values[name]);
+ };
+
+ /* REALTIME NOTIFICATIONS ************************************/
+
+ abp.notifications = abp.notifications || {};
+
+ abp.notifications.severity = {
+ INFO: 0,
+ SUCCESS: 1,
+ WARN: 2,
+ ERROR: 3,
+ FATAL: 4
+ };
+
+ abp.notifications.userNotificationState = {
+ UNREAD: 0,
+ READ: 1
+ };
+
+ abp.notifications.getUserNotificationStateAsString = function (userNotificationState) {
+ switch (userNotificationState) {
+ case abp.notifications.userNotificationState.READ:
+ return 'READ';
+ case abp.notifications.userNotificationState.UNREAD:
+ return 'UNREAD';
+ default:
+ abp.log.warn('Unknown user notification state value: ' + userNotificationState);
+ return '?';
+ }
+ };
+
+ abp.notifications.getUiNotifyFuncBySeverity = function (severity) {
+ switch (severity) {
+ case abp.notifications.severity.SUCCESS:
+ return abp.notify.success;
+ case abp.notifications.severity.WARN:
+ return abp.notify.warn;
+ case abp.notifications.severity.ERROR:
+ return abp.notify.error;
+ case abp.notifications.severity.FATAL:
+ return abp.notify.error;
+ case abp.notifications.severity.INFO:
+ default:
+ return abp.notify.info;
+ }
+ };
+
+ abp.notifications.messageFormatters = {};
+
+ abp.notifications.messageFormatters['Abp.Notifications.MessageNotificationData'] = function (userNotification) {
+ return userNotification.notification.data.message || userNotification.notification.data.properties.Message;
+ };
+
+ abp.notifications.messageFormatters['Abp.Notifications.LocalizableMessageNotificationData'] = function (userNotification) {
+ var message = userNotification.notification.data.message || userNotification.notification.data.properties.Message;
+ var localizedMessage = abp.localization.localize(message.name, message.sourceName);
+
+ if (userNotification.notification.data.properties) {
+ if ($) {
+ //Prefer to use jQuery if possible
+ $.each(userNotification.notification.data.properties, function (key, value) {
+ localizedMessage = localizedMessage.replace('{' + key + '}', value);
+ });
+ } else {
+ //alternative for $.each
+ var properties = Object.keys(userNotification.notification.data.properties);
+ for (var i = 0; i < properties.length; i++) {
+ localizedMessage = localizedMessage.replace('{' + properties[i] + '}', userNotification.notification.data.properties[properties[i]]);
+ }
+ }
+ }
+
+ return localizedMessage;
+ };
+
+ abp.notifications.getFormattedMessageFromUserNotification = function (userNotification) {
+ var formatter = abp.notifications.messageFormatters[userNotification.notification.data.type];
+ if (!formatter) {
+ abp.log.warn('No message formatter defined for given data type: ' + userNotification.notification.data.type);
+ return '?';
+ }
+
+ if (!abp.utils.isFunction(formatter)) {
+ abp.log.warn('Message formatter should be a function! It is invalid for data type: ' + userNotification.notification.data.type);
+ return '?';
+ }
+
+ return formatter(userNotification);
+ };
+
+ abp.notifications.showUiNotifyForUserNotification = function (userNotification, options) {
+ var message = abp.notifications.getFormattedMessageFromUserNotification(userNotification);
+ var uiNotifyFunc = abp.notifications.getUiNotifyFuncBySeverity(userNotification.notification.severity);
+ uiNotifyFunc(message, undefined, options);
+ };
+
+ /* LOGGING ***************************************************/
+ //Implements Logging API that provides secure & controlled usage of console.log
+
+ abp.log = abp.log || {};
+
+ abp.log.levels = {
+ DEBUG: 1,
+ INFO: 2,
+ WARN: 3,
+ ERROR: 4,
+ FATAL: 5
+ };
+
+ abp.log.level = abp.log.levels.DEBUG;
+
+ abp.log.log = function (logObject, logLevel) {
+ if (!window.console || !window.console.log) {
+ return;
+ }
+
+ if (logLevel != undefined && logLevel < abp.log.level) {
+ return;
+ }
+
+ console.log(logObject);
+ };
+
+ abp.log.debug = function (logObject) {
+ abp.log.log("DEBUG: ", abp.log.levels.DEBUG);
+ abp.log.log(logObject, abp.log.levels.DEBUG);
+ };
+
+ abp.log.info = function (logObject) {
+ abp.log.log("INFO: ", abp.log.levels.INFO);
+ abp.log.log(logObject, abp.log.levels.INFO);
+ };
+
+ abp.log.warn = function (logObject) {
+ abp.log.log("WARN: ", abp.log.levels.WARN);
+ abp.log.log(logObject, abp.log.levels.WARN);
+ };
+
+ abp.log.error = function (logObject) {
+ abp.log.log("ERROR: ", abp.log.levels.ERROR);
+ abp.log.log(logObject, abp.log.levels.ERROR);
+ };
+
+ abp.log.fatal = function (logObject) {
+ abp.log.log("FATAL: ", abp.log.levels.FATAL);
+ abp.log.log(logObject, abp.log.levels.FATAL);
+ };
+
+ /* NOTIFICATION *********************************************/
+ //Defines Notification API, not implements it
+
+ abp.notify = abp.notify || {};
+
+ abp.notify.success = function (message, title, options) {
+ abp.log.warn('abp.notify.success is not implemented!');
+ };
+
+ abp.notify.info = function (message, title, options) {
+ abp.log.warn('abp.notify.info is not implemented!');
+ };
+
+ abp.notify.warn = function (message, title, options) {
+ abp.log.warn('abp.notify.warn is not implemented!');
+ };
+
+ abp.notify.error = function (message, title, options) {
+ abp.log.warn('abp.notify.error is not implemented!');
+ };
+
+ /* MESSAGE **************************************************/
+ //Defines Message API, not implements it
+
+ abp.message = abp.message || {};
+
+ var showMessage = function showMessage(message, title) {
+ alert((title || '') + ' ' + message);
+
+ if (!$) {
+ abp.log.warn('abp.message can not return promise since jQuery is not defined!');
+ return null;
+ }
+
+ return $.Deferred(function ($dfd) {
+ $dfd.resolve();
+ });
+ };
+
+ abp.message.info = function (message, title) {
+ abp.log.warn('abp.message.info is not implemented!');
+ return showMessage(message, title);
+ };
+
+ abp.message.success = function (message, title) {
+ abp.log.warn('abp.message.success is not implemented!');
+ return showMessage(message, title);
+ };
+
+ abp.message.warn = function (message, title) {
+ abp.log.warn('abp.message.warn is not implemented!');
+ return showMessage(message, title);
+ };
+
+ abp.message.error = function (message, title) {
+ abp.log.warn('abp.message.error is not implemented!');
+ return showMessage(message, title);
+ };
+
+ abp.message.confirm = function (message, titleOrCallback, callback) {
+ abp.log.warn('abp.message.confirm is not implemented!');
+
+ if (titleOrCallback && !(typeof titleOrCallback == 'string')) {
+ callback = titleOrCallback;
+ }
+
+ var result = confirm(message);
+ callback && callback(result);
+
+ if (!$) {
+ abp.log.warn('abp.message can not return promise since jQuery is not defined!');
+ return null;
+ }
+
+ return $.Deferred(function ($dfd) {
+ $dfd.resolve();
+ });
+ };
+
+ /* UI *******************************************************/
+
+ abp.ui = abp.ui || {};
+
+ /* UI BLOCK */
+ //Defines UI Block API, not implements it
+
+ abp.ui.block = function (elm) {
+ abp.log.warn('abp.ui.block is not implemented!');
+ };
+
+ abp.ui.unblock = function (elm) {
+ abp.log.warn('abp.ui.unblock is not implemented!');
+ };
+
+ /* UI BUSY */
+ //Defines UI Busy API, not implements it
+
+ abp.ui.setBusy = function (elm, optionsOrPromise) {
+ abp.log.warn('abp.ui.setBusy is not implemented!');
+ };
+
+ abp.ui.clearBusy = function (elm) {
+ abp.log.warn('abp.ui.clearBusy is not implemented!');
+ };
+
+ /* SIMPLE EVENT BUS *****************************************/
+
+ abp.event = (function () {
+
+ var _callbacks = {};
+
+ var on = function on(eventName, callback) {
+ if (!_callbacks[eventName]) {
+ _callbacks[eventName] = [];
+ }
+
+ _callbacks[eventName].push(callback);
+ };
+
+ var off = function off(eventName, callback) {
+ var callbacks = _callbacks[eventName];
+ if (!callbacks) {
+ return;
+ }
+
+ var index = -1;
+ for (var i = 0; i < callbacks.length; i++) {
+ if (callbacks[i] === callback) {
+ index = i;
+ break;
+ }
+ }
+
+ if (index < 0) {
+ return;
+ }
+
+ _callbacks[eventName].splice(index, 1);
+ };
+
+ var trigger = function trigger(eventName) {
+ var callbacks = _callbacks[eventName];
+ if (!callbacks || !callbacks.length) {
+ return;
+ }
+
+ var args = Array.prototype.slice.call(arguments, 1);
+ for (var i = 0; i < callbacks.length; i++) {
+ callbacks[i].apply(this, args);
+ }
+ };
+
+ // Public interface ///////////////////////////////////////////////////
+
+ return {
+ on: on,
+ off: off,
+ trigger: trigger
+ };
+ })();
+
+ /* UTILS ***************************************************/
+
+ abp.utils = abp.utils || {};
+
+ /* Creates a name namespace.
+ * Example:
+ * var taskService = abp.utils.createNamespace(abp, 'services.task');
+ * taskService will be equal to abp.services.task
+ * first argument (root) must be defined first
+ ************************************************************/
+ abp.utils.createNamespace = function (root, ns) {
+ var parts = ns.split('.');
+ for (var i = 0; i < parts.length; i++) {
+ if (typeof root[parts[i]] == 'undefined') {
+ root[parts[i]] = {};
+ }
+
+ root = root[parts[i]];
+ }
+
+ return root;
+ };
+
+ /* Find and replaces a string (search) to another string (replacement) in
+ * given string (str).
+ * Example:
+ * abp.utils.replaceAll('This is a test string', 'is', 'X') = 'ThX X a test string'
+ ************************************************************/
+ abp.utils.replaceAll = function (str, search, replacement) {
+ var fix = search.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
+ return str.replace(new RegExp(fix, 'g'), replacement);
+ };
+
+ /* Formats a string just like string.format in C#.
+ * Example:
+ * abp.utils.formatString('Hello {0}','Tuana') = 'Hello Tuana'
+ ************************************************************/
+ abp.utils.formatString = function () {
+ if (arguments.length < 1) {
+ return null;
+ }
+
+ var str = arguments[0];
+
+ for (var i = 1; i < arguments.length; i++) {
+ var placeHolder = '{' + (i - 1) + '}';
+ str = abp.utils.replaceAll(str, placeHolder, arguments[i]);
+ }
+
+ return str;
+ };
+
+ abp.utils.toPascalCase = function (str) {
+ if (!str || !str.length) {
+ return str;
+ }
+
+ if (str.length === 1) {
+ return str.charAt(0).toUpperCase();
+ }
+
+ return str.charAt(0).toUpperCase() + str.substr(1);
+ };
+
+ abp.utils.toCamelCase = function (str) {
+ if (!str || !str.length) {
+ return str;
+ }
+
+ if (str.length === 1) {
+ return str.charAt(0).toLowerCase();
+ }
+
+ return str.charAt(0).toLowerCase() + str.substr(1);
+ };
+
+ abp.utils.truncateString = function (str, maxLength) {
+ if (!str || !str.length || str.length <= maxLength) {
+ return str;
+ }
+
+ return str.substr(0, maxLength);
+ };
+
+ abp.utils.truncateStringWithPostfix = function (str, maxLength, postfix) {
+ postfix = postfix || '...';
+
+ if (!str || !str.length || str.length <= maxLength) {
+ return str;
+ }
+
+ if (maxLength <= postfix.length) {
+ return postfix.substr(0, maxLength);
+ }
+
+ return str.substr(0, maxLength - postfix.length) + postfix;
+ };
+
+ abp.utils.isFunction = function (obj) {
+ if ($) {
+ //Prefer to use jQuery if possible
+ return $.isFunction(obj);
+ }
+
+ //alternative for $.isFunction
+ return !!(obj && obj.constructor && obj.call && obj.apply);
+ };
+
+ /**
+ * parameterInfos should be an array of { name, value } objects
+ * where name is query string parameter name and value is it's value.
+ * includeQuestionMark is true by default.
+ */
+ abp.utils.buildQueryString = function (parameterInfos, includeQuestionMark) {
+ if (includeQuestionMark === undefined) {
+ includeQuestionMark = true;
+ }
+
+ var qs = '';
+
+ function addSeperator() {
+ if (!qs.length) {
+ if (includeQuestionMark) {
+ qs = qs + '?';
+ }
+ } else {
+ qs = qs + '&';
+ }
+ }
+
+ for (var i = 0; i < parameterInfos.length; ++i) {
+ var parameterInfo = parameterInfos[i];
+ if (parameterInfo.value === undefined) {
+ continue;
+ }
+
+ if (parameterInfo.value === null) {
+ parameterInfo.value = '';
+ }
+
+ addSeperator();
+
+ if (parameterInfo.value.toJSON && typeof parameterInfo.value.toJSON === "function") {
+ qs = qs + parameterInfo.name + '=' + encodeURIComponent(parameterInfo.value.toJSON());
+ } else if (Array.isArray(parameterInfo.value) && parameterInfo.value.length) {
+ for (var j = 0; j < parameterInfo.value.length; j++) {
+ if (j > 0) {
+ addSeperator();
+ }
+
+ qs = qs + parameterInfo.name + '[' + j + ']=' + encodeURIComponent(parameterInfo.value[j]);
+ }
+ } else {
+ qs = qs + parameterInfo.name + '=' + encodeURIComponent(parameterInfo.value);
+ }
+ }
+
+ return qs;
+ };
+
+ /**
+ * Sets a cookie value for given key.
+ * This is a simple implementation created to be used by ABP.
+ * Please use a complete cookie library if you need.
+ * @param {string} key
+ * @param {string} value
+ * @param {Date} expireDate (optional). If not specified the cookie will expire at the end of session.
+ * @param {string} path (optional)
+ */
+ abp.utils.setCookieValue = function (key, value, expireDate, path) {
+ var cookieValue = encodeURIComponent(key) + '=';
+
+ if (value) {
+ cookieValue = cookieValue + encodeURIComponent(value);
+ }
+
+ if (expireDate) {
+ cookieValue = cookieValue + "; expires=" + expireDate.toUTCString();
+ }
+
+ if (path) {
+ cookieValue = cookieValue + "; path=" + path;
+ }
+
+ document.cookie = cookieValue;
+ };
+
+ /**
+ * Gets a cookie with given key.
+ * This is a simple implementation created to be used by ABP.
+ * Please use a complete cookie library if you need.
+ * @param {string} key
+ * @returns {string} Cookie value or null
+ */
+ abp.utils.getCookieValue = function (key) {
+ var equalities = document.cookie.split('; ');
+ for (var i = 0; i < equalities.length; i++) {
+ if (!equalities[i]) {
+ continue;
+ }
+
+ var splitted = equalities[i].split('=');
+ if (splitted.length != 2) {
+ continue;
+ }
+
+ if (decodeURIComponent(splitted[0]) === key) {
+ return decodeURIComponent(splitted[1] || '');
+ }
+ }
+
+ return null;
+ };
+
+ /**
+ * Deletes cookie for given key.
+ * This is a simple implementation created to be used by ABP.
+ * Please use a complete cookie library if you need.
+ * @param {string} key
+ * @param {string} path (optional)
+ */
+ abp.utils.deleteCookie = function (key, path) {
+ var cookieValue = encodeURIComponent(key) + '=';
+
+ cookieValue = cookieValue + "; expires=" + new Date(new Date().getTime() - 86400000).toUTCString();
+
+ if (path) {
+ cookieValue = cookieValue + "; path=" + path;
+ }
+
+ document.cookie = cookieValue;
+ };
+
+ /* TIMING *****************************************/
+ abp.timing = abp.timing || {};
+
+ abp.timing.utcClockProvider = (function () {
+
+ var toUtc = function toUtc(date) {
+ return Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), date.getUTCMilliseconds());
+ };
+
+ var now = function now() {
+ return new Date();
+ };
+
+ var normalize = function normalize(date) {
+ if (!date) {
+ return date;
+ }
+
+ return new Date(toUtc(date));
+ };
+
+ // Public interface ///////////////////////////////////////////////////
+
+ return {
+ now: now,
+ normalize: normalize,
+ supportsMultipleTimezone: true
+ };
+ })();
+
+ abp.timing.localClockProvider = (function () {
+
+ var toLocal = function toLocal(date) {
+ return new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());
+ };
+
+ var now = function now() {
+ return toLocal(new Date());
+ };
+
+ var normalize = function normalize(date) {
+ if (!date) {
+ return date;
+ }
+
+ return toLocal(date);
+ };
+
+ // Public interface ///////////////////////////////////////////////////
+
+ return {
+ now: now,
+ normalize: normalize,
+ supportsMultipleTimezone: false
+ };
+ })();
+
+ abp.timing.unspecifiedClockProvider = (function () {
+
+ var now = function now() {
+ return new Date();
+ };
+
+ var normalize = function normalize(date) {
+ return date;
+ };
+
+ // Public interface ///////////////////////////////////////////////////
+
+ return {
+ now: now,
+ normalize: normalize,
+ supportsMultipleTimezone: false
+ };
+ })();
+
+ abp.timing.convertToUserTimezone = function (date) {
+ var localTime = date.getTime();
+ var utcTime = localTime + date.getTimezoneOffset() * 60000;
+ var targetTime = parseInt(utcTime) + parseInt(abp.timing.timeZoneInfo.windows.currentUtcOffsetInMilliseconds);
+ return new Date(targetTime);
+ };
+
+ /* CLOCK *****************************************/
+ abp.clock = abp.clock || {};
+
+ abp.clock.now = function () {
+ if (abp.clock.provider) {
+ return abp.clock.provider.now();
+ }
+
+ return new Date();
+ };
+
+ abp.clock.normalize = function (date) {
+ if (abp.clock.provider) {
+ return abp.clock.provider.normalize(date);
+ }
+
+ return date;
+ };
+
+ abp.clock.provider = abp.timing.unspecifiedClockProvider;
+
+ /* SECURITY ***************************************/
+ abp.security = abp.security || {};
+ abp.security.antiForgery = abp.security.antiForgery || {};
+
+ abp.security.antiForgery.tokenCookieName = 'XSRF-TOKEN';
+ abp.security.antiForgery.tokenHeaderName = 'X-XSRF-TOKEN';
+
+ abp.security.antiForgery.getToken = function () {
+ return abp.utils.getCookieValue(abp.security.antiForgery.tokenCookieName);
+ };
+})(jQuery);
+
diff --git a/src/YoYo.Cms.Web/Abp/Framework/scripts/abp.es5.min.js b/src/YoYo.Cms.Web/Abp/Framework/scripts/abp.es5.min.js
new file mode 100644
index 0000000..98e318a
--- /dev/null
+++ b/src/YoYo.Cms.Web/Abp/Framework/scripts/abp.es5.min.js
@@ -0,0 +1 @@
+"use strict";var abp=abp||{};(function(n){abp.appPath=abp.appPath||"/";abp.pageLoadTime=new Date;abp.toAbsAppPath=function(n){return n.indexOf("/")==0&&(n=n.substring(1)),abp.appPath+n};abp.multiTenancy=abp.multiTenancy||{};abp.multiTenancy.isEnabled=!1;abp.multiTenancy.sides={TENANT:1,HOST:2};abp.multiTenancy.tenantIdCookieName="Abp.TenantId";abp.multiTenancy.setTenantIdCookie=function(n){n?abp.utils.setCookieValue(abp.multiTenancy.tenantIdCookieName,n.toString(),new Date((new Date).getTime()+15768e7),abp.appPath):abp.utils.deleteCookie(abp.multiTenancy.tenantIdCookieName,abp.appPath)};abp.multiTenancy.getTenantIdCookie=function(){var n=abp.utils.getCookieValue(abp.multiTenancy.tenantIdCookieName);return n?parseInt(n):null};abp.session=abp.session||{multiTenancySide:abp.multiTenancy.sides.HOST};abp.localization=abp.localization||{};abp.localization.languages=[];abp.localization.currentLanguage={};abp.localization.sources=[];abp.localization.values={};abp.localization.localize=function(n,t){var r,u,i;return(t=t||abp.localization.defaultSourceName,r=abp.localization.values[t],!r)?(abp.log.warn("Could not find localization source: "+t),n):(u=r[n],u==undefined)?n:(i=Array.prototype.slice.call(arguments,0),i.splice(1,1),i[0]=u,abp.utils.formatString.apply(this,i))};abp.localization.getSource=function(n){return function(){var t=Array.prototype.slice.call(arguments,0);return t.splice(1,0,n),abp.localization.localize.apply(this,t)}};abp.localization.isCurrentCulture=function(n){return abp.localization.currentCulture&&abp.localization.currentCulture.name&&abp.localization.currentCulture.name.indexOf(n)==0};abp.localization.defaultSourceName=undefined;abp.localization.abpWeb=abp.localization.getSource("AbpWeb");abp.auth=abp.auth||{};abp.auth.allPermissions=abp.auth.allPermissions||{};abp.auth.grantedPermissions=abp.auth.grantedPermissions||{};abp.auth.hasPermission=function(){return abp.auth.isGranted.apply(this,arguments)};abp.auth.hasAnyOfPermissions=function(){return abp.auth.isAnyGranted.apply(this,arguments)};abp.auth.hasAllOfPermissions=function(){return abp.auth.areAllGranted.apply(this,arguments)};abp.auth.isGranted=function(n){return abp.auth.allPermissions[n]!=undefined&&abp.auth.grantedPermissions[n]!=undefined};abp.auth.isAnyGranted=function(){if(!arguments||arguments.length<=0)return!0;for(var n=0;n0&&e(),r=r+i.name+"["+u+"]="+encodeURIComponent(i.value[u]);else r=r+i.name+"="+encodeURIComponent(i.value);return r};abp.utils.setCookieValue=function(n,t,i,r){var u=encodeURIComponent(n)+"=";t&&(u=u+encodeURIComponent(t));i&&(u=u+"; expires="+i.toUTCString());r&&(u=u+"; path="+r);document.cookie=u};abp.utils.getCookieValue=function(n){for(var i,r=document.cookie.split("; "),t=0;t str.length) {
+ return false;
+ }
+
+ return str.indexOf(suffix, str.length - suffix.length) !== -1;
+ }
+
+ abp.event.on('abp.dynamicScriptsInitialized', function () {
+ abp.ng.http.defaultError.message = abp.localization.abpWeb('DefaultError');
+ abp.ng.http.defaultError.details = abp.localization.abpWeb('DefaultErrorDetail');
+ abp.ng.http.defaultError401.message = abp.localization.abpWeb('DefaultError401');
+ abp.ng.http.defaultError401.details = abp.localization.abpWeb('DefaultErrorDetail401');
+ abp.ng.http.defaultError403.message = abp.localization.abpWeb('DefaultError403');
+ abp.ng.http.defaultError403.details = abp.localization.abpWeb('DefaultErrorDetail403');
+ abp.ng.http.defaultError404.message = abp.localization.abpWeb('DefaultError404');
+ abp.ng.http.defaultError404.details = abp.localization.abpWeb('DefaultErrorDetail404');
+ });
+})(abp || (abp = {}), angular || undefined);
+
diff --git a/src/YoYo.Cms.Web/Abp/Framework/scripts/libs/angularjs/abp.ng.es5.min.js b/src/YoYo.Cms.Web/Abp/Framework/scripts/libs/angularjs/abp.ng.es5.min.js
new file mode 100644
index 0000000..c0a6002
--- /dev/null
+++ b/src/YoYo.Cms.Web/Abp/Framework/scripts/libs/angularjs/abp.ng.es5.min.js
@@ -0,0 +1 @@
+"use strict";(function(n,t){function r(n,t){return t.length>n.length?!1:n.indexOf(t,n.length-t.length)!==-1}if(t){n.ng=n.ng||{};n.ng.http={defaultError:{message:"An error has occurred!",details:"Error detail not sent by server."},defaultError401:{message:"You are not authenticated!",details:"You should be authenticated (sign in) in order to perform this operation."},defaultError403:{message:"You are not authorized!",details:"You are not allowed to perform this operation."},defaultError404:{message:"Resource not found!",details:"The resource requested could not found on the server."},logError:function(t){n.log.error(t)},showError:function(t){return t.details?n.message.error(t.details,t.message||n.ng.http.defaultError.message):n.message.error(t.message||n.ng.http.defaultError.message)},handleTargetUrl:function(t){location.href=t?t:n.appPath},handleNonAbpErrorResponse:function(t,i){if(t.config.abpHandleError!==!1)switch(t.status){case 401:n.ng.http.handleUnAuthorizedRequest(n.ng.http.showError(n.ng.http.defaultError401),n.appPath);break;case 403:n.ng.http.showError(n.ajax.defaultError403);break;case 404:n.ng.http.showError(n.ajax.defaultError404);break;default:n.ng.http.showError(n.ng.http.defaultError)}i.reject(t)},handleUnAuthorizedRequest:function(t,i){t?t.done(function(){n.ng.http.handleTargetUrl(i||n.appPath)}):n.ng.http.handleTargetUrl(i||n.appPath)},handleResponse:function(t,i){var r=t.data,u;r.success===!0?(t.data=r.result,i.resolve(t),r.targetUrl&&n.ng.http.handleTargetUrl(r.targetUrl)):r.success===!1?(u=null,r.error?t.config.abpHandleError!==!1&&(u=n.ng.http.showError(r.error)):r.error=defaultError,n.ng.http.logError(r.error),t.data=r.error,i.reject(t),t.status==401&&t.config.abpHandleError!==!1&&n.ng.http.handleUnAuthorizedRequest(u,r.targetUrl)):i.resolve(t)}};var i=t.module("abp",[]);i.config(["$httpProvider",function(t){t.interceptors.push(["$q",function(t){return{request:function(t){return r(t.url,".cshtml")&&(t.url=n.appPath+"AbpAppView/Load?viewUrl="+t.url+"&_t="+n.pageLoadTime.getTime()),t},response:function(i){if(!i.data||!i.data.__abp)return i;var r=t.defer();return n.ng.http.handleResponse(i,r),r.promise},responseError:function(i){var r=t.defer();return i.data&&i.data.__abp?n.ng.http.handleResponse(i,r):n.ng.http.handleNonAbpErrorResponse(i,r),r.promise}}}])}]);n.event.on("abp.dynamicScriptsInitialized",function(){n.ng.http.defaultError.message=n.localization.abpWeb("DefaultError");n.ng.http.defaultError.details=n.localization.abpWeb("DefaultErrorDetail");n.ng.http.defaultError401.message=n.localization.abpWeb("DefaultError401");n.ng.http.defaultError401.details=n.localization.abpWeb("DefaultErrorDetail401");n.ng.http.defaultError403.message=n.localization.abpWeb("DefaultError403");n.ng.http.defaultError403.details=n.localization.abpWeb("DefaultErrorDetail403");n.ng.http.defaultError404.message=n.localization.abpWeb("DefaultError404");n.ng.http.defaultError404.details=n.localization.abpWeb("DefaultErrorDetail404")})}})(abp||(abp={}),angular||undefined);
\ No newline at end of file
diff --git a/src/YoYo.Cms.Web/App/Admin/app.es5.js b/src/YoYo.Cms.Web/App/Admin/app.es5.js
new file mode 100644
index 0000000..efa3e3a
--- /dev/null
+++ b/src/YoYo.Cms.Web/App/Admin/app.es5.js
@@ -0,0 +1,102 @@
+'use strict';
+
+var yoyocmsModule = angular.module('YoYoCms', ['ui.router', 'ui.bootstrap', 'ui.utils', 'ui.jq', 'ngAnimate', 'ngSanitize', 'angularMoment', 'ui.slimscroll', 'ngJsTree', 'angular-progress-button-styles', 'daterangepicker', 'ui.grid', 'ui.grid.pagination', 'ui.grid.selection', 'abp']);
+
+//Configuration for Angular UI routing.
+yoyocmsModule.config(['$stateProvider', '$urlRouterProvider', '$locationProvider', '$qProvider', function ($stateProvider, $urlRouterProvider, $locationProvider, $qProvider) {
+ $locationProvider.hashPrefix('');
+
+ $urlRouterProvider.otherwise('/dashboard');
+
+ $qProvider.errorOnUnhandledRejections(false);
+
+ if (abp.auth.hasPermission('Pages.Users')) {
+ $stateProvider.state('users', {
+ url: '/users',
+ templateUrl: '/App/Admin/views/users/index.cshtml',
+ menu: 'Users',
+ displayName: app.localize('Users')
+ });
+ }
+
+ if (abp.auth.hasPermission('Pages.Tenants')) {
+ $stateProvider.state('tenants', {
+ url: '/tenants',
+ templateUrl: '/App/Admin/views/tenants/index.cshtml',
+ menu: 'Tenants', //Matches to name of 'Tenants' menu in CmsNavigationProvider
+ displayName: app.localize('Tenants')
+ });
+ }
+
+ //无,权限判断的路由设置,name需要两个进行对应
+ $stateProvider.state('home', {
+ url: '/home',
+ templateUrl: '/App/Admin/views/home/home.cshtml',
+ menu: 'Home', //Matches to name of 'Home' menu in CmsNavigationProvider
+ displayName: app.localize('Home')
+ }).state('dashboard', {
+ url: '/dashboard',
+ templateUrl: '/App/Admin/views/dashboard/index.cshtml',
+ menu: 'Dashboard',
+ displayName: app.localize('Dashboard')
+ }).state('about', {
+ url: '/about',
+ templateUrl: '/App/Admin/views/about/about.cshtml',
+ menu: 'About', //Matches to name of 'About' menu in CmsNavigationProvider,
+ displayName: app.localize('About')
+ }).state('notifications', //对应浏览器地址栏的地址信息
+ {
+ url: '/notifications',
+ templateUrl: '/App/Admin/views/notifications/index.cshtml',
+ menu: 'Notifications', //此处对应CmsNavigationProvider中的name
+ displayName: app.localize('Notifications')
+ }).state('smsmanage', //对应浏览器地址栏的地址信息
+ {
+ url: '/smsmanage',
+ templateUrl: '/App/Admin/views/smsmanage/index.cshtml',
+ menu: 'SmsManage', //此处对应CmsNavigationProvider中的name
+ displayName: app.localize('SmsManage')
+ }).state('orgmanage', //对应浏览器地址栏的地址信息
+ {
+ url: '/orgmanage',
+ templateUrl: '/App/Admin/views/organizationUnits/index.cshtml',
+ menu: 'OrgManage', //此处对应CmsNavigationProvider中的name
+ displayName: app.localize('OrgManage')
+ }).state('roles', //对应浏览器地址栏的地址信息
+ {
+ url: '/roles',
+ templateUrl: '/App/Admin/views/roles/index.cshtml',
+ menu: 'roles', //此处对应CmsNavigationProvider中的name
+ displayName: app.localize('RoleManage')
+ }).state('auditlog', //对应浏览器地址栏的地址信息
+ {
+ url: '/auditlog',
+ templateUrl: '/App/Admin/views/auditlog/index.cshtml',
+ menu: 'AuditLog', //此处对应CmsNavigationProvider中的name
+ displayName: app.localize('AuditLog')
+ });
+}]);
+
+yoyocmsModule.run(["$rootScope", "$state", 'i18nService', '$uibModalStack', function ($rootScope, $state, i18nService, $uibModalStack) {
+ $rootScope.$state = $state;
+ $rootScope.$state.current.title = "sdfsdfsd";
+
+ //Set Ui-Grid language
+ if (i18nService.get(abp.localization.currentCulture.name)) {
+ i18nService.setCurrentLang(abp.localization.currentCulture.name);
+ } else {
+ i18nService.setCurrentLang("en");
+ }
+
+ $rootScope.safeApply = function (fn) {
+ var phase = this.$root.$$phase;
+ if (phase == '$apply' || phase == '$digest') {
+ if (fn && typeof fn === 'function') {
+ fn();
+ }
+ } else {
+ this.$apply(fn);
+ }
+ };
+}]);
+
diff --git a/src/YoYo.Cms.Web/App/Admin/app.es5.min.js b/src/YoYo.Cms.Web/App/Admin/app.es5.min.js
new file mode 100644
index 0000000..1a2f2fc
--- /dev/null
+++ b/src/YoYo.Cms.Web/App/Admin/app.es5.min.js
@@ -0,0 +1 @@
+"use strict";var yoyocmsModule=angular.module("YoYoCms",["ui.router","ui.bootstrap","ui.utils","ui.jq","ngAnimate","ngSanitize","angularMoment","ui.slimscroll","ngJsTree","angular-progress-button-styles","daterangepicker","ui.grid","ui.grid.pagination","ui.grid.selection","abp"]);yoyocmsModule.config(["$stateProvider","$urlRouterProvider","$locationProvider","$qProvider",function(n,t,i,r){i.hashPrefix("");t.otherwise("/dashboard");r.errorOnUnhandledRejections(!1);abp.auth.hasPermission("Pages.Users")&&n.state("users",{url:"/users",templateUrl:"/App/Admin/views/users/index.cshtml",menu:"Users",displayName:app.localize("Users")});abp.auth.hasPermission("Pages.Tenants")&&n.state("tenants",{url:"/tenants",templateUrl:"/App/Admin/views/tenants/index.cshtml",menu:"Tenants",displayName:app.localize("Tenants")});n.state("home",{url:"/home",templateUrl:"/App/Admin/views/home/home.cshtml",menu:"Home",displayName:app.localize("Home")}).state("dashboard",{url:"/dashboard",templateUrl:"/App/Admin/views/dashboard/index.cshtml",menu:"Dashboard",displayName:app.localize("Dashboard")}).state("about",{url:"/about",templateUrl:"/App/Admin/views/about/about.cshtml",menu:"About",displayName:app.localize("About")}).state("notifications",{url:"/notifications",templateUrl:"/App/Admin/views/notifications/index.cshtml",menu:"Notifications",displayName:app.localize("Notifications")}).state("smsmanage",{url:"/smsmanage",templateUrl:"/App/Admin/views/smsmanage/index.cshtml",menu:"SmsManage",displayName:app.localize("SmsManage")}).state("orgmanage",{url:"/orgmanage",templateUrl:"/App/Admin/views/organizationUnits/index.cshtml",menu:"OrgManage",displayName:app.localize("OrgManage")}).state("roles",{url:"/roles",templateUrl:"/App/Admin/views/roles/index.cshtml",menu:"roles",displayName:app.localize("RoleManage")}).state("auditlog",{url:"/auditlog",templateUrl:"/App/Admin/views/auditlog/index.cshtml",menu:"AuditLog",displayName:app.localize("AuditLog")})}]);yoyocmsModule.run(["$rootScope","$state","i18nService","$uibModalStack",function(n,t,i){n.$state=t;n.$state.current.title="sdfsdfsd";i.get(abp.localization.currentCulture.name)?i.setCurrentLang(abp.localization.currentCulture.name):i.setCurrentLang("en");n.safeApply=function(n){var t=this.$root.$$phase;t=="$apply"||t=="$digest"?n&&typeof n=="function"&&n():this.$apply(n)}}]);
\ No newline at end of file
diff --git a/src/YoYo.Cms.Web/YoYo.Cms.Web.csproj b/src/YoYo.Cms.Web/YoYo.Cms.Web.csproj
index 6e380e6..6a9b36e 100644
--- a/src/YoYo.Cms.Web/YoYo.Cms.Web.csproj
+++ b/src/YoYo.Cms.Web/YoYo.Cms.Web.csproj
@@ -308,6 +308,12 @@
+
+ abp.js
+
+
+ abp.es5.js
+
@@ -321,6 +327,12 @@
+
+ abp.ng.js
+
+
+ abp.ng.es5.js
+
@@ -333,6 +345,12 @@
+
+ app.js
+
+
+ app.es5.js
+
diff --git a/src/YoYo.Cms.Web/compilerconfig.json b/src/YoYo.Cms.Web/compilerconfig.json
index 79d4df3..27ff41f 100644
--- a/src/YoYo.Cms.Web/compilerconfig.json
+++ b/src/YoYo.Cms.Web/compilerconfig.json
@@ -10,5 +10,9 @@
{
"outputFile": "Abp/Framework/scripts/libs/angularjs/abp.ng.es5.js",
"inputFile": "Abp/Framework/scripts/libs/angularjs/abp.ng.js"
+ },
+ {
+ "outputFile": "App/Admin/app.es5.js",
+ "inputFile": "App/Admin/app.js"
}
]
\ No newline at end of file