diff --git a/src/Umbraco.Core/Migrations/Install/DatabaseSchemaCreator.cs b/src/Umbraco.Core/Migrations/Install/DatabaseSchemaCreator.cs index 5a4290aadd..14ffcda2ec 100644 --- a/src/Umbraco.Core/Migrations/Install/DatabaseSchemaCreator.cs +++ b/src/Umbraco.Core/Migrations/Install/DatabaseSchemaCreator.cs @@ -141,13 +141,7 @@ namespace Umbraco.Core.Migrations.Install //get the db index defs result.DbIndexDefinitions = SqlSyntax.GetDefinedIndexes(_database) - .Select(x => new DbIndexDefinition - { - TableName = x.Item1, - IndexName = x.Item2, - ColumnName = x.Item3, - IsUnique = x.Item4 - }).ToArray(); + .Select(x => new DbIndexDefinition(x)).ToArray(); result.TableDefinitions.AddRange(OrderedTables .Select(x => DefinitionFactory.GetTableDefinition(x, SqlSyntax))); @@ -160,6 +154,14 @@ namespace Umbraco.Core.Migrations.Install return result; } + /// + /// This validates the Primary/Foreign keys in the database + /// + /// + /// + /// This does not validate any database constraints that are not PKs or FKs because Umbraco does not create a database with non PK/FK contraints. + /// Any unique "constraints" in the database are done with unique indexes. + /// private void ValidateDbConstraints(DatabaseSchemaResult result) { //MySql doesn't conform to the "normal" naming of constraints, so there is currently no point in doing these checks. @@ -172,8 +174,7 @@ namespace Umbraco.Core.Migrations.Install var constraintsInDatabase = SqlSyntax.GetConstraintsPerColumn(_database).DistinctBy(x => x.Item3).ToList(); var foreignKeysInDatabase = constraintsInDatabase.Where(x => x.Item3.InvariantStartsWith("FK_")).Select(x => x.Item3).ToList(); var primaryKeysInDatabase = constraintsInDatabase.Where(x => x.Item3.InvariantStartsWith("PK_")).Select(x => x.Item3).ToList(); - var indexesInDatabase = constraintsInDatabase.Where(x => x.Item3.InvariantStartsWith("IX_")).Select(x => x.Item3).ToList(); - var indexesInSchema = result.TableDefinitions.SelectMany(x => x.Indexes.Select(y => y.Name)).ToList(); + var unknownConstraintsInDatabase = constraintsInDatabase.Where( x => @@ -188,7 +189,7 @@ namespace Umbraco.Core.Migrations.Install // In theory you could have: FK_ or fk_ ...or really any standard that your development department (or developer) chooses to use. foreach (var unknown in unknownConstraintsInDatabase) { - if (foreignKeysInSchema.InvariantContains(unknown) || primaryKeysInSchema.InvariantContains(unknown) || indexesInSchema.InvariantContains(unknown)) + if (foreignKeysInSchema.InvariantContains(unknown) || primaryKeysInSchema.InvariantContains(unknown)) { result.ValidConstraints.Add(unknown); } @@ -230,23 +231,6 @@ namespace Umbraco.Core.Migrations.Install result.Errors.Add(new Tuple("Constraint", primaryKey)); } - //Constaints: - - //NOTE: SD: The colIndex checks above should really take care of this but I need to keep this here because it was here before - // and some schema validation checks might rely on this data remaining here! - //Add valid and invalid index differences to the result object - var validIndexDifferences = indexesInDatabase.Intersect(indexesInSchema, StringComparer.InvariantCultureIgnoreCase); - foreach (var index in validIndexDifferences) - { - result.ValidConstraints.Add(index); - } - var invalidIndexDifferences = - indexesInDatabase.Except(indexesInSchema, StringComparer.InvariantCultureIgnoreCase) - .Union(indexesInSchema.Except(indexesInDatabase, StringComparer.InvariantCultureIgnoreCase)); - foreach (var index in invalidIndexDifferences) - { - result.Errors.Add(new Tuple("Constraint", index)); - } } private void ValidateDbColumns(DatabaseSchemaResult result) diff --git a/src/Umbraco.Core/Migrations/Upgrade/V_7_12_0/AddRelationTypeForMediaFolderOnDelete.cs b/src/Umbraco.Core/Migrations/Upgrade/V_7_12_0/AddRelationTypeForMediaFolderOnDelete.cs index 349c39b980..f34ed9fb68 100644 --- a/src/Umbraco.Core/Migrations/Upgrade/V_7_12_0/AddRelationTypeForMediaFolderOnDelete.cs +++ b/src/Umbraco.Core/Migrations/Upgrade/V_7_12_0/AddRelationTypeForMediaFolderOnDelete.cs @@ -1,5 +1,4 @@ -using System; -using Umbraco.Core.Persistence.Dtos; +using Umbraco.Core.Persistence.Dtos; namespace Umbraco.Core.Migrations.Upgrade.V_7_12_0 { @@ -12,20 +11,22 @@ namespace Umbraco.Core.Migrations.Upgrade.V_7_12_0 public override void Migrate() { - var exists = Context.Database.FirstOrDefault("WHERE alias=@alias", new { alias = Constants.Conventions.RelationTypes.RelateParentMediaFolderOnDeleteAlias }); - if (exists == null) + var relationTypeCount = Context.Database.ExecuteScalar("SELECT COUNT(*) FROM umbracoRelationType WHERE alias=@alias", + new { alias = Constants.Conventions.RelationTypes.RelateParentMediaFolderOnDeleteAlias }); + + if (relationTypeCount > 0) + return; + + var uniqueId = (Constants.Conventions.RelationTypes.RelateParentMediaFolderOnDeleteAlias + "____" + Constants.Conventions.RelationTypes.RelateParentMediaFolderOnDeleteName).ToGuid(); + Insert.IntoTable("umbracoRelationType").Row(new { - var uniqueId = (Constants.Conventions.RelationTypes.RelateParentMediaFolderOnDeleteAlias + "____" + Constants.Conventions.RelationTypes.RelateParentMediaFolderOnDeleteName).ToGuid(); - Insert.IntoTable("umbracoRelationType").Row(new - { - typeUniqueId = uniqueId, - alias = Constants.Conventions.RelationTypes.RelateParentMediaFolderOnDeleteAlias, - name = Constants.Conventions.RelationTypes.RelateParentMediaFolderOnDeleteName, - childObjectType = Constants.ObjectTypes.MediaType, - parentObjectType = Constants.ObjectTypes.MediaType, - dual = false + typeUniqueId = uniqueId, + alias = Constants.Conventions.RelationTypes.RelateParentMediaFolderOnDeleteAlias, + name = Constants.Conventions.RelationTypes.RelateParentMediaFolderOnDeleteName, + childObjectType = Constants.ObjectTypes.MediaType, + parentObjectType = Constants.ObjectTypes.MediaType, + dual = false }).Do(); - } } } diff --git a/src/Umbraco.Core/Migrations/Upgrade/V_7_12_0/IncreaseLanguageIsoCodeColumnLength.cs b/src/Umbraco.Core/Migrations/Upgrade/V_7_12_0/IncreaseLanguageIsoCodeColumnLength.cs index 895a28728d..fc7a21f4fa 100644 --- a/src/Umbraco.Core/Migrations/Upgrade/V_7_12_0/IncreaseLanguageIsoCodeColumnLength.cs +++ b/src/Umbraco.Core/Migrations/Upgrade/V_7_12_0/IncreaseLanguageIsoCodeColumnLength.cs @@ -1,5 +1,6 @@ using System.Linq; using Umbraco.Core.Persistence.DatabaseModelDefinitions; +using Umbraco.Core.Persistence.SqlSyntax; namespace Umbraco.Core.Migrations.Upgrade.V_7_12_0 { @@ -11,16 +12,16 @@ namespace Umbraco.Core.Migrations.Upgrade.V_7_12_0 public override void Migrate() { - var dbIndexes = SqlSyntax.GetDefinedIndexes(Context.Database) - .Select(x => new DbIndexDefinition - { - TableName = x.Item1, - IndexName = x.Item2, - ColumnName = x.Item3, - IsUnique = x.Item4 - }).ToArray(); + // Some people seem to have a constraint in their DB instead of an index, we'd need to drop that one + // See: https://our.umbraco.com/forum/using-umbraco-and-getting-started/93282-upgrade-from-711-to-712-fails + var constraints = SqlSyntax.GetConstraintsPerTable(Context.Database).Distinct().ToArray(); + if (constraints.Any(x => x.Item2.InvariantEquals("IX_umbracoLanguage_languageISOCode"))) + { + Delete.UniqueConstraint("IX_umbracoLanguage_languageISOCode").FromTable("umbracoLanguage").Do(); + } - //Ensure the index exists before dropping it + //Now check for indexes of that name and drop that if it exists + var dbIndexes = SqlSyntax.GetDefinedIndexesDefinitions(Context.Database); if (dbIndexes.Any(x => x.IndexName.InvariantEquals("IX_umbracoLanguage_languageISOCode"))) { Delete.Index("IX_umbracoLanguage_languageISOCode").OnTable("umbracoLanguage").Do(); @@ -35,8 +36,11 @@ namespace Umbraco.Core.Migrations.Upgrade.V_7_12_0 Create.Index("IX_umbracoLanguage_languageISOCode") .OnTable("umbracoLanguage") .OnColumn("languageISOCode") + .Ascending() + .WithOptions() .Unique() .Do(); } + } } diff --git a/src/Umbraco.Core/Persistence/DatabaseModelDefinitions/ConstraintDefinition.cs b/src/Umbraco.Core/Persistence/DatabaseModelDefinitions/ConstraintDefinition.cs index 8b618a6619..63cbbf332b 100644 --- a/src/Umbraco.Core/Persistence/DatabaseModelDefinitions/ConstraintDefinition.cs +++ b/src/Umbraco.Core/Persistence/DatabaseModelDefinitions/ConstraintDefinition.cs @@ -6,13 +6,13 @@ namespace Umbraco.Core.Persistence.DatabaseModelDefinitions { public ConstraintDefinition(ConstraintType type) { - constraintType = type; + _constraintType = type; } - private ConstraintType constraintType; - public bool IsPrimaryKeyConstraint { get { return ConstraintType.PrimaryKey == constraintType; } } - public bool IsUniqueConstraint { get { return ConstraintType.Unique == constraintType; } } - public bool IsNonUniqueConstraint { get { return ConstraintType.NonUnique == constraintType; } } + private readonly ConstraintType _constraintType; + public bool IsPrimaryKeyConstraint => ConstraintType.PrimaryKey == _constraintType; + public bool IsUniqueConstraint => ConstraintType.Unique == _constraintType; + public bool IsNonUniqueConstraint => ConstraintType.NonUnique == _constraintType; public string SchemaName { get; set; } public string ConstraintName { get; set; } diff --git a/src/Umbraco.Core/Persistence/DatabaseModelDefinitions/DbIndexDefinition.cs b/src/Umbraco.Core/Persistence/DatabaseModelDefinitions/DbIndexDefinition.cs index 33d9e20311..f447d6a560 100644 --- a/src/Umbraco.Core/Persistence/DatabaseModelDefinitions/DbIndexDefinition.cs +++ b/src/Umbraco.Core/Persistence/DatabaseModelDefinitions/DbIndexDefinition.cs @@ -1,13 +1,23 @@ -namespace Umbraco.Core.Persistence.DatabaseModelDefinitions +using System; + +namespace Umbraco.Core.Persistence.DatabaseModelDefinitions { /// /// Represents a database index definition retreived by querying the database /// internal class DbIndexDefinition { - public virtual string IndexName { get; set; } - public virtual string TableName { get; set; } - public virtual string ColumnName { get; set; } - public virtual bool IsUnique { get; set; } + public DbIndexDefinition(Tuple data) + { + TableName = data.Item1; + IndexName = data.Item2; + ColumnName = data.Item3; + IsUnique = data.Item4; + } + + public string IndexName { get; } + public string TableName { get; } + public string ColumnName { get; } + public bool IsUnique { get; } } } diff --git a/src/Umbraco.Core/Persistence/SqlSyntax/ISqlSyntaxProvider.cs b/src/Umbraco.Core/Persistence/SqlSyntax/ISqlSyntaxProvider.cs index d027cf44a9..af58604bf0 100644 --- a/src/Umbraco.Core/Persistence/SqlSyntax/ISqlSyntaxProvider.cs +++ b/src/Umbraco.Core/Persistence/SqlSyntax/ISqlSyntaxProvider.cs @@ -44,6 +44,8 @@ namespace Umbraco.Core.Persistence.SqlSyntax string TruncateTable { get; } string CreateConstraint { get; } string DeleteConstraint { get; } + + [Obsolete("This is never used, use the Format(ForeignKeyDefinition) instead")] string CreateForeignKeyConstraint { get; } string DeleteDefaultConstraint { get; } string FormatDateTime(DateTime date, bool includeTime = true); @@ -80,8 +82,32 @@ namespace Umbraco.Core.Persistence.SqlSyntax IEnumerable GetTablesInSchema(IDatabase db); IEnumerable GetColumnsInSchema(IDatabase db); + + /// + /// Returns all constraints defined in the database (Primary keys, foreign keys, unique constraints...) (does not include indexes) + /// + /// + /// + /// A Tuple containing: TableName, ConstraintName + /// IEnumerable> GetConstraintsPerTable(IDatabase db); + + /// + /// Returns all constraints defined in the database (Primary keys, foreign keys, unique constraints...) (does not include indexes) + /// + /// + /// + /// A Tuple containing: TableName, ColumnName, ConstraintName + /// IEnumerable> GetConstraintsPerColumn(IDatabase db); + + /// + /// Returns all defined Indexes in the database excluding primary keys + /// + /// + /// + /// A Tuple containing: TableName, IndexName, ColumnName, IsUnique + /// IEnumerable> GetDefinedIndexes(IDatabase db); } } diff --git a/src/Umbraco.Core/Persistence/SqlSyntax/MySqlSyntaxProvider.cs b/src/Umbraco.Core/Persistence/SqlSyntax/MySqlSyntaxProvider.cs index e0eaa46048..fc967da9bf 100644 --- a/src/Umbraco.Core/Persistence/SqlSyntax/MySqlSyntaxProvider.cs +++ b/src/Umbraco.Core/Persistence/SqlSyntax/MySqlSyntaxProvider.cs @@ -79,6 +79,7 @@ namespace Umbraco.Core.Persistence.SqlSyntax return list; } + /// public override IEnumerable> GetConstraintsPerTable(IDatabase db) { List> list; @@ -101,6 +102,7 @@ namespace Umbraco.Core.Persistence.SqlSyntax return list; } + /// public override IEnumerable> GetConstraintsPerColumn(IDatabase db) { List> list; @@ -127,6 +129,7 @@ namespace Umbraco.Core.Persistence.SqlSyntax return list; } + /// public override IEnumerable> GetDefinedIndexes(IDatabase db) { List> list; diff --git a/src/Umbraco.Core/Persistence/SqlSyntax/SqlCeSyntaxProvider.cs b/src/Umbraco.Core/Persistence/SqlSyntax/SqlCeSyntaxProvider.cs index c41cd59f4e..75fc9c0b69 100644 --- a/src/Umbraco.Core/Persistence/SqlSyntax/SqlCeSyntaxProvider.cs +++ b/src/Umbraco.Core/Persistence/SqlSyntax/SqlCeSyntaxProvider.cs @@ -107,40 +107,27 @@ namespace Umbraco.Core.Persistence.SqlSyntax item.IS_NULLABLE, item.DATA_TYPE)).ToList(); } + /// public override IEnumerable> GetConstraintsPerTable(IDatabase db) { var items = db.Fetch("SELECT TABLE_NAME, CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS"); - var indexItems = db.Fetch("SELECT TABLE_NAME, INDEX_NAME FROM INFORMATION_SCHEMA.INDEXES"); - return - items.Select(item => new Tuple(item.TABLE_NAME, item.CONSTRAINT_NAME)) - .Union( - indexItems.Select( - indexItem => new Tuple(indexItem.TABLE_NAME, indexItem.INDEX_NAME))) - .ToList(); + return items.Select(item => new Tuple(item.TABLE_NAME, item.CONSTRAINT_NAME)).ToList(); } + /// public override IEnumerable> GetConstraintsPerColumn(IDatabase db) { - var items = - db.Fetch( - "SELECT CONSTRAINT_NAME, TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE"); - var indexItems = db.Fetch("SELECT INDEX_NAME, TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.INDEXES"); - return - items.Select( - item => new Tuple(item.TABLE_NAME, item.COLUMN_NAME, item.CONSTRAINT_NAME)) - .Union( - indexItems.Select( - indexItem => - new Tuple(indexItem.TABLE_NAME, indexItem.COLUMN_NAME, - indexItem.INDEX_NAME))).ToList(); + var items = db.Fetch("SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE"); + return items.Select(item => new Tuple(item.TABLE_NAME, item.COLUMN_NAME, item.CONSTRAINT_NAME)).ToList(); } + /// public override IEnumerable> GetDefinedIndexes(IDatabase db) { var items = db.Fetch( @"SELECT TABLE_NAME, INDEX_NAME, COLUMN_NAME, [UNIQUE] FROM INFORMATION_SCHEMA.INDEXES -WHERE INDEX_NAME NOT LIKE 'PK_%' +WHERE PRIMARY_KEY=0 ORDER BY TABLE_NAME, INDEX_NAME"); return items.Select( diff --git a/src/Umbraco.Core/Persistence/SqlSyntax/SqlServerSyntaxProvider.cs b/src/Umbraco.Core/Persistence/SqlSyntax/SqlServerSyntaxProvider.cs index d7dadd9f08..9c6e95971c 100644 --- a/src/Umbraco.Core/Persistence/SqlSyntax/SqlServerSyntaxProvider.cs +++ b/src/Umbraco.Core/Persistence/SqlSyntax/SqlServerSyntaxProvider.cs @@ -163,6 +163,7 @@ namespace Umbraco.Core.Persistence.SqlSyntax item.IS_NULLABLE, item.DATA_TYPE)).ToList(); } + /// public override IEnumerable> GetConstraintsPerTable(IDatabase db) { var items = @@ -171,6 +172,7 @@ namespace Umbraco.Core.Persistence.SqlSyntax return items.Select(item => new Tuple(item.TABLE_NAME, item.CONSTRAINT_NAME)).ToList(); } + /// public override IEnumerable> GetConstraintsPerColumn(IDatabase db) { var items = @@ -179,6 +181,7 @@ namespace Umbraco.Core.Persistence.SqlSyntax return items.Select(item => new Tuple(item.TABLE_NAME, item.COLUMN_NAME, item.CONSTRAINT_NAME)).ToList(); } + /// public override IEnumerable> GetDefinedIndexes(IDatabase db) { var items = @@ -188,7 +191,7 @@ CASE WHEN I.is_unique_constraint = 1 OR I.is_unique = 1 THEN 1 ELSE 0 END AS [U from sys.tables as T inner join sys.indexes as I on T.[object_id] = I.[object_id] inner join sys.index_columns as IC on IC.[object_id] = I.[object_id] and IC.[index_id] = I.[index_id] inner join sys.all_columns as AC on IC.[object_id] = AC.[object_id] and IC.[column_id] = AC.[column_id] -WHERE I.name NOT LIKE 'PK_%' +WHERE I.is_primary_key = 0 order by T.name, I.name"); return items.Select(item => new Tuple(item.TABLE_NAME, item.INDEX_NAME, item.COLUMN_NAME, item.UNIQUE == 1)).ToList(); diff --git a/src/Umbraco.Core/Persistence/SqlSyntax/SqlSyntaxProviderExtensions.cs b/src/Umbraco.Core/Persistence/SqlSyntax/SqlSyntaxProviderExtensions.cs index b53f6224c4..02f1370b83 100644 --- a/src/Umbraco.Core/Persistence/SqlSyntax/SqlSyntaxProviderExtensions.cs +++ b/src/Umbraco.Core/Persistence/SqlSyntax/SqlSyntaxProviderExtensions.cs @@ -10,13 +10,7 @@ namespace Umbraco.Core.Persistence.SqlSyntax public static IEnumerable GetDefinedIndexesDefinitions(this ISqlSyntaxProvider sql, IDatabase db) { return sql.GetDefinedIndexes(db) - .Select(x => new DbIndexDefinition - { - TableName = x.Item1, - IndexName = x.Item2, - ColumnName = x.Item3, - IsUnique = x.Item4 - }).ToArray(); + .Select(x => new DbIndexDefinition(x)).ToArray(); } /// diff --git a/src/Umbraco.Web.UI.Client/src/less/components/umb-nested-content.less b/src/Umbraco.Web.UI.Client/src/less/components/umb-nested-content.less index e2a8c8fc81..d1ad8ee8ff 100644 --- a/src/Umbraco.Web.UI.Client/src/less/components/umb-nested-content.less +++ b/src/Umbraco.Web.UI.Client/src/less/components/umb-nested-content.less @@ -1,16 +1,13 @@ -.nested-content -{ +.umb-nested-content { text-align: center; } -.nested-content--not-supported -{ +.umb-nested-content--not-supported { opacity: 0.3; pointer-events: none; } -.nested-content-overlay -{ +.umb-nested-content-overlay { position: absolute; top: 0; left: 0; @@ -19,47 +16,39 @@ z-index: 1000; } -.nested-content__item -{ +.umb-nested-content__item { position: relative; text-align: left; border-top: solid 1px transparent; - background: white; - - + background: @white; } -.nested-content__item--active:not(.nested-content__item--single) -{ - background: #f8f8f8; +.umb-nested-content__item--active:not(.umb-nested-content__item--single) { + background: @gray-10; } -.nested-content__item.ui-sortable-placeholder -{ - background: #f8f8f8; - border: 1px dashed #d9d9d9; +.umb-nested-content__item.ui-sortable-placeholder { + background: @gray-10; + border: 1px dashed @gray-8; visibility: visible !important; height: 55px; margin-top: -1px; } -.nested-content__item--single > .nested-content__content -{ +.umb-nested-content__item--single > .umb-nested-content__content { border: 0; } -.nested-content__item--single > .nested-content__content > .umb-pane -{ +.umb-nested-content__item--single > .umb-nested-content__content > .umb-pane { margin: 0; } -.nested-content__header-bar -{ +.umb-nested-content__header-bar { padding: 15px 20px; - border-bottom: 1px dashed #e0e0e0; + border-bottom: 1px dashed @gray-8; text-align: right; cursor: pointer; - background-color: white; + background-color: @white; -moz-user-select: none; -khtml-user-select: none; @@ -67,24 +56,21 @@ -o-user-select: none; } -.nested-content__heading { +.umb-nested-content__heading { line-height: 20px; position: relative; - &.-with-icon - { + &.-with-icon { padding-left: 20px; } - i - { - color: #999; /* same icon color as the icons in the item type picker */ + i { + color: @gray-2; position: absolute; left: 0; } - .nested-content__item-name - { + .umb-nested-content__item-name { max-height: 20px; text-align: left; white-space: nowrap; @@ -94,22 +80,16 @@ } } -.nested-content__icons -{ +.umb-nested-content__icons { opacity: 0; - transition: opacity .15s ease-in-out; - -moz-transition: opacity .15s ease-in-out; - -webkit-transition: opacity .15s ease-in-out; - position: absolute; right: 0px; top: 2px; - background-color: white; + background-color: @white; padding: 5px; - &:before - { + &:before { content: ' '; position: absolute; display: block; @@ -117,126 +97,118 @@ left: -30px; top: 0; bottom: 0; - background: -webkit-linear-gradient(90deg, rgba(255,255,255,0), white); - background: -moz-linear-gradient(90deg, rgba(255,255,255,0), white); background: linear-gradient(90deg, rgba(255,255,255,0), white); } } -.nested-content__header-bar:hover .nested-content__icons, -.nested-content__item--active > .nested-content__header-bar .nested-content__icons -{ +.umb-nested-content__header-bar:hover .umb-nested-content__icons, +.umb-nested-content__item--active > .umb-nested-content__header-bar .umb-nested-content__icons { opacity: 1; } -.nested-content__icon, -.nested-content__icon.nested-content__icon--disabled:hover -{ +.umb-nested-content__icon, +.umb-nested-content__icon.umb-nested-content__icon--disabled:hover { display: inline-block; padding: 4px 6px; margin: 2px; cursor: pointer; - background: #fff; - border: 1px solid #b6b6b6; + background: @white; + border: 1px solid @gray-7; border-radius: 200px; text-decoration: none !important; } -.nested-content__icon:hover, -.nested-content__icon--active +.umb-nested-content__icon:hover, +.umb-nested-content__icon--active { - color: white; - background: #2e8aea; - border-color: #2e8aea; + color: @white; + background: @turquoise-d1; + border-color: @turquoise-d1; text-decoration: none; } -.nested-content__icon .icon, -.nested-content__icon.nested-content__icon--disabled:hover .icon -{ +.umb-nested-content__icon .icon, +.umb-nested-content__icon.umb-nested-content__icon--disabled:hover .icon { display: block; font-size: 16px !important; - color: #5f5f5f; + color: @gray-3; } -.nested-content__icon:hover .icon, -.nested-content__icon--active .icon -{ - color: white; +.umb-nested-content__icon:hover .icon, +.umb-nested-content__icon--active .icon { + color: @white; } -.nested-content__icon--disabled -{ +.umb-nested-content__icon--disabled { opacity: 0.3; } -.nested-content__footer-bar -{ +.umb-nested-content__footer-bar { text-align: center; padding-top: 20px; } -.nested-content__content -{ - border-bottom: 1px dashed #e0e0e0; +.umb-nested-content__content { + border-bottom: 1px dashed @gray-8; } -.nested-content__content .umb-control-group { +.umb-nested-content__content .umb-control-group { padding-bottom: 0; } -.nested-content__item.ui-sortable-helper .nested-content__content -{ +.umb-nested-content__item.ui-sortable-helper .umb-nested-content__content { display: none !important; } -.nested-content__help-text -{ +.umb-nested-content__help-text { display: inline-block; padding: 10px 20px 10px 20px; clear: both; font-size: 14px; - color: #555; - background: #f8f8f8; + color: @gray-3; + background: @gray-10; border-radius: 15px; } -.nested-content__doctypepicker table input, .nested-content__doctypepicker table select { +.umb-nested-content__doctypepicker table input, +.umb-nested-content__doctypepicker table select { width: 100%; padding-right: 0; } -.nested-content__doctypepicker table td.icon-navigation, .nested-content__doctypepicker i.nested-content__help-icon { +.umb-nested-content__doctypepicker table td.icon-navigation, +.umb-nested-content__doctypepicker i.umb-nested-content__help-icon { vertical-align: middle; - color: #CCC; + color: @gray-7; } -.nested-content__doctypepicker table td.icon-navigation:hover, .nested-content__doctypepicker i.nested-content__help-icon:hover { - color: #343434; +.umb-nested-content__doctypepicker table td.icon-navigation:hover, +.umb-nested-content__doctypepicker i.umb-nested-content__help-icon:hover { + color: @gray-2; } -.nested-content__doctypepicker i.nested-content__help-icon { +.umb-nested-content__doctypepicker i.umb-nested-content__help-icon { margin-left: 10px; } -.form-horizontal .nested-content--narrow .controls-row +.form-horizontal .umb-nested-content--narrow .controls-row { margin-left: 40% !important; } -.form-horizontal .nested-content--narrow .controls-row .umb-textstring, -.form-horizontal .nested-content--narrow .controls-row .umb-textarea +.form-horizontal .umb-nested-content--narrow .controls-row .umb-textstring, +.form-horizontal .umb-nested-content--narrow .controls-row .umb-textarea { width: 95%; } -.form-horizontal .nested-content--narrow .controls-row .umb-dropdown { +.form-horizontal .umb-nested-content--narrow .controls-row .umb-dropdown { width: 99%; } -.usky-grid.nested-content__node-type-picker .cell-tools-menu { +.usky-grid.umb-nested-content__node-type-picker .cell-tools-menu { position: relative; transform: translate(-50%, -25%); } diff --git a/src/Umbraco.Web.UI.Client/src/views/components/buttons/umb-toggle.html b/src/Umbraco.Web.UI.Client/src/views/components/buttons/umb-toggle.html index ba9257bac7..fc62485521 100644 --- a/src/Umbraco.Web.UI.Client/src/views/components/buttons/umb-toggle.html +++ b/src/Umbraco.Web.UI.Client/src/views/components/buttons/umb-toggle.html @@ -1,4 +1,4 @@ -