Refactored the audit trail settings UI and cleaned up a bunch of UI strings. Renamed some resource files.

This commit is contained in:
Daniel Stolt
2014-07-05 13:54:13 +02:00
parent 660ab8322e
commit 66aa1426dc
19 changed files with 188 additions and 185 deletions

View File

@@ -78,8 +78,10 @@
<None Include="Placement.info" />
<Content Include="Lib\XmlDiffPatch\xmldiffpatch.dll" />
<Content Include="Recipes\audit-trail.recipe.xml" />
<Content Include="Scripts\audit-trail-admin.js" />
<Content Include="Styles\admin.css" />
<Content Include="Scripts\audittrail-admin.js" />
<Content Include="Scripts\audittrail-checkall.js" />
<Content Include="Styles\audittrail-admin.css" />
<Content Include="Styles\audittrail-settings.css" />
<Content Include="Styles\custom-grid.css" />
<Content Include="Styles\menu.audit-trail-admin.css" />
<Content Include="Styles\menu.audit-trail.png" />

View File

@@ -8,7 +8,7 @@ namespace Orchard.AuditTrail.Providers.AuditTrail {
public override void Describe(DescribeContext context) {
context.For("AuditTrailSettings", T("Audit Trail Settings"))
.Event(this, EventsChanged, T("Events Changed"), T("Audit Trail event settings were changed."), enableByDefault: true, isMandatory: true);
.Event(this, EventsChanged, T("Events changed"), T("Audit trail event settings were changed."), enableByDefault: true, isMandatory: true);
}
}
}

View File

@@ -10,7 +10,7 @@ namespace Orchard.AuditTrail.Providers.AuditTrail {
public override void Describe(DescribeContext context) {
context.For("AuditTrailSettings", T("Audit Trail Settings"))
.Event(this, TrimmingSettingsChanged, T("Trimming Settings Changed"), T("Audit Trail trimming settings were changed."), enableByDefault: true);
.Event(this, TrimmingSettingsChanged, T("Trimming settings changed"), T("Audit trail trimming settings were changed."), enableByDefault: true);
}
}
}

View File

@@ -25,12 +25,12 @@ namespace Orchard.AuditTrail.Providers.Content {
}
public override void Describe(DescribeContext context) {
context.For("Content", T("Content"))
.Event(this, Created, T("Created"), T("Content was created."), enableByDefault: true)
.Event(this, Saved, T("Saved"), T("Content was saved."), enableByDefault: true)
.Event(this, Published, T("Published"), T("Content was published."), enableByDefault: true)
.Event(this, Unpublished, T("Unpublished"), T("Content was unpublished."), enableByDefault: true)
.Event(this, Removed, T("Removed"), T("Content was deleted."), enableByDefault: true);
context.For("Content", T("Content Items"))
.Event(this, Created, T("Created"), T("A content item was created."), enableByDefault: true)
.Event(this, Saved, T("Saved"), T("A content item was saved."), enableByDefault: true)
.Event(this, Published, T("Published"), T("A content item was published."), enableByDefault: true)
.Event(this, Unpublished, T("Unpublished"), T("A content item was unpublished."), enableByDefault: true)
.Event(this, Removed, T("Removed"), T("A content item was deleted."), enableByDefault: true);
context.QueryFilter(QueryFilter);
context.DisplayFilter(DisplayFilter);

View File

@@ -14,14 +14,14 @@ namespace Orchard.AuditTrail.Providers.ContentDefinition {
public const string FieldSettingsUpdated = "FieldSettingsUpdated";
public override void Describe(DescribeContext context) {
context.For("ContentPart", T("Content Part"))
.Event(this, Created, T("Created"), T("Content Type was created."), enableByDefault: true)
.Event(this, Removed, T("Removed"), T("Content Type was removed."), enableByDefault: true)
.Event(this, DescriptionChanged, T("Description changed"), T("Content Part description was changed."), enableByDefault: true)
.Event(this, FieldAdded, T("Field added"), T("Content Field was added."), enableByDefault: true)
.Event(this, FieldRemoved, T("Field removed"), T("Content Field was removed."), enableByDefault: true)
.Event(this, PartSettingsUpdated, T("Part settings updated"), T("Content Part settings were updated."), enableByDefault: true)
.Event(this, FieldSettingsUpdated, T("Field settings updated"), T("Content Field settings were updated."), enableByDefault: true);
context.For("ContentPart", T("Content Parts"))
.Event(this, Created, T("Created"), T("A content type was created."), enableByDefault: true)
.Event(this, Removed, T("Removed"), T("A content type was removed."), enableByDefault: true)
.Event(this, DescriptionChanged, T("Description changed"), T("A content part description was changed."), enableByDefault: true)
.Event(this, FieldAdded, T("Field added"), T("A field was added to a content part."), enableByDefault: true)
.Event(this, FieldRemoved, T("Field removed"), T("A field was removed from a content part."), enableByDefault: true)
.Event(this, PartSettingsUpdated, T("Part settings updated"), T("The settings of a content part were updated."), enableByDefault: true)
.Event(this, FieldSettingsUpdated, T("Field settings updated"), T("The settings of a field on a content part were updated."), enableByDefault: true);
}
}
}

View File

@@ -14,12 +14,12 @@ namespace Orchard.AuditTrail.Providers.Roles {
public const string UserRemoved = "UserRemoved";
public override void Describe(DescribeContext context) {
context.For("Role", T("Role"))
context.For("Role", T("Roles"))
.Event(this, Created, T("Created"), T("A role was created."), enableByDefault: true)
.Event(this, Removed, T("Removed"), T("A role was removed."), enableByDefault: true)
.Event(this, Renamed, T("Renamed"), T("A role was renamed."), enableByDefault: true)
.Event(this, PermissionAdded, T("Permission added"), T("Permission was added to a role."), enableByDefault: true)
.Event(this, PermissionRemoved, T("Permission removed"), T("Permission was removed from a role."), enableByDefault: true)
.Event(this, PermissionAdded, T("Permission added"), T("A permission was added to a role."), enableByDefault: true)
.Event(this, PermissionRemoved, T("Permission removed"), T("A permission was removed from a role."), enableByDefault: true)
.Event(this, UserAdded, T("User added"), T("A user was added to a role."), enableByDefault: true)
.Event(this, UserRemoved, T("User removed"), T("A user was removed from a role."), enableByDefault: true);
}

View File

@@ -11,10 +11,10 @@ namespace Orchard.AuditTrail.Providers.Users {
public const string PasswordChanged = "PasswordChanged";
public override void Describe(DescribeContext context) {
context.For("User", T("User"))
context.For("User", T("Users"))
.Event(this, LoggedIn, T("Logged in"), T("A user was successfully logged in."), enableByDefault: true)
.Event(this, LoggedOut, T("Logged out"), T("A user explicitly logged out."), enableByDefault: true)
.Event(this, LogInFailed, T("Login failed"), T("An attempt to login failed due to an incorrect username/email and/or password."), enableByDefault: true)
.Event(this, LoggedOut, T("Logged out"), T("A user actively logged out."), enableByDefault: true)
.Event(this, LogInFailed, T("Login failed"), T("An attempt to login failed due to incorrect credentials."), enableByDefault: true)
.Event(this, PasswordChanged, T("Password changed"), T("A user's password was changed."), enableByDefault: true);
}
}

View File

@@ -1,49 +0,0 @@
(function($) {
var initExpandoControl = function() {
$(".expando-wrapper legend").expandoControl(
function(controller) {
return controller.nextAll(".expando");
}, {
collapse: true,
remember: true
});
};
var initCheckAll = function() {
$("table.check-all").each(function() {
var table = $(this);
var controller = table.find("thead input[type=\"checkbox\"]");
var checkboxes = table.find("tbody input[type=\"checkbox\"]:not(:disabled)");
var updateController = function () {
var allChecked = checkboxes.filter(":not(:checked)").length == 0;
controller.prop("checked", allChecked);
}
table.on("change", "thead input[type=\"checkbox\"]", function() {
var isChecked = $(this).is(":checked");
checkboxes.prop("checked", isChecked);
});
table.on("change", "tbody input[type=\"checkbox\"]", function () {
updateController();
});
updateController();
});
};
var disableContentEditor = function () {
$(".content-disabled input").prop("disabled", true);
$(".content-disabled textarea").prop("disabled", true);
$(".content-disabled button").prop("disabled", true);
};
$(function() {
initExpandoControl();
initCheckAll();
disableContentEditor();
});
})(jQuery);

View File

@@ -0,0 +1,24 @@
(function($) {
var initExpandoControl = function() {
$(".expando-wrapper legend").expandoControl(
function(controller) {
return controller.nextAll(".expando");
}, {
collapse: true,
remember: true
});
};
var disableContentEditor = function () {
$(".content-disabled input").prop("disabled", true);
$(".content-disabled textarea").prop("disabled", true);
$(".content-disabled button").prop("disabled", true);
};
$(function() {
initExpandoControl();
disableContentEditor();
});
})(jQuery);

View File

@@ -0,0 +1,23 @@
$(function () {
$(".check-all-container").each(function () {
var container = $(this);
var master = container.find("input[type=\"checkbox\"].check-all-master");
var slaves = container.find("input[type=\"checkbox\"]:not(:disabled).check-all-slave");
var updateMaster = function () {
var allChecked = slaves.filter(":not(:checked)").length == 0;
master.prop("checked", allChecked);
}
master.on("change", function () {
var isChecked = $(this).is(":checked");
slaves.prop("checked", isChecked);
});
slaves.on("change", function () {
updateMaster();
});
updateMaster();
});
});

View File

@@ -1,52 +0,0 @@
.audit-trail-filter {
margin-bottom: 1em;
}
.audit-trail-filter fieldset label {
display: inline-block;
width: 10em;
}
.audit-trail-filter fieldset label.inline {
display: inline;
width: auto;
}
.audit-trail-list .info {
line-height: 25px;
}
.audit-trail-list .event-content .version {
font-size: 0.8em;
}
.audit-trail-event fieldset legend span {
font-size: 0.8em;
}
.audit-trail-site-settings table th.event-name {
width: 250px;
}
.audit-trail-site-settings table th.event-enabled {
width: 60px;
}
.content-disabled {
position: relative;
}
.content-disabled .overlay {
position: absolute;
left: -24px;
top: -16px;
right: -24px;
bottom: -28px;
background: url('overlay.png');
}
.content-disabled .edit-item-secondary,
.content-disabled .audit-trail.expando-wrapper,
.content-disabled .audit-trail-link {
display: none;
}

View File

@@ -0,0 +1,40 @@
.audit-trail-filter {
margin-bottom: 1em;
}
.audit-trail-filter fieldset label {
display: inline-block;
width: 10em;
}
.audit-trail-filter fieldset label.inline {
display: inline;
width: auto;
}
.audit-trail-list .info {
line-height: 25px;
}
.audit-trail-list .event-content .version {
font-size: 0.8em;
}
.content-disabled {
position: relative;
}
.content-disabled .overlay {
position: absolute;
left: -24px;
top: -16px;
right: -24px;
bottom: -28px;
background: url('overlay.png');
}
.content-disabled .edit-item-secondary,
.content-disabled .audit-trail.expando-wrapper,
.content-disabled .audit-trail-link {
display: none;
}

View File

@@ -0,0 +1,15 @@
.audittrail-settings-section table.audittrail-events-table {
width: auto;
min-width: 600px;
margin-top: 1em;
}
.audittrail-settings-section tbody.audittrail-category-body tr th {
background-color: #ebebeb;
font-size: 1.1em;
font-weight: bold;
}
.audittrail-settings-section .audittrail-events-table .audittrail-event-enabled-cell {
text-align: right;
}

View File

@@ -1,6 +1,6 @@
@model Orchard.AuditTrail.ViewModels.AuditTrailDetailsViewModel
@{
Style.Include("admin.css");
Style.Include("audittrail-admin.css");
}
@{
var record = Model.Record;

View File

@@ -2,7 +2,7 @@
@model Orchard.AuditTrail.ViewModels.AuditTrailViewModel
@{
Style.Include("custom-grid.css");
Style.Include("admin.css");
Style.Include("audittrail-admin.css");
var orderBy = Model.OrderBy;
var orderByItems = new List<SelectListItem> {
new SelectListItem {Text = T("Date (desc)").Text, Value = AuditTrailOrderBy.DateDescending.ToString(), Selected = Model.OrderBy == AuditTrailOrderBy.DateDescending},

View File

@@ -1,9 +1,9 @@
@using Orchard.ContentManagement
@{
Style.Include("admin.css");
Style.Include("audittrail-admin.css");
Script.Require("ShapesBase");
Script.Include("~/Themes/TheAdmin/scripts/admin.js").AtFoot();
Script.Include("audit-trail-admin.js").AtFoot();
Script.Include("audittrail-admin.js").AtFoot();
var contentItem = (ContentItem)Model.ContentItem;
Layout.Title = T("{0} - (version {1})", contentItem.ContentType, contentItem.Version);

View File

@@ -1,51 +1,53 @@
@model Orchard.AuditTrail.ViewModels.AuditTrailSettingsViewModel
@{
Style.Include("admin.css");
Style.Include("audittrail-settings.css");
Script.Require("ShapesBase");
Script.Include("~/Themes/TheAdmin/scripts/admin.js").AtFoot();
Script.Include("audit-trail-admin.js").AtFoot();
//Script.Include("~/Themes/TheAdmin/scripts/admin.js").AtFoot();
Script.Include("audittrail-checkall.js").AtFoot();
}
<div class="audit-trail-site-settings">
<fieldset>
<legend>@T("Specify the events to audit")</legend>
@{
var i = 0;
}
@foreach (var category in Model.Categories) {
<fieldset>
<legend>@category.Name</legend>
<input type="hidden" name="AuditTrailSettingsPart.Categories[@i].Category" value="@category.Category" />
<table class="items check-all">
<thead>
<tr>
<th class="event-name">@T("Event")</th>
<th>@T("Description")</th>
<th class="event-enabled">
<label>
<input type="checkbox"/>
@T("Enabled")
</label>
</th>
</tr>
</thead>
@{ var j = 0; }
@foreach (var evnt in category.Events) {
var checkboxId = String.Format("Event{0}{1}", i, j);
<tr>
<td>
<input type="hidden" name="AuditTrailSettingsPart.Categories[@i].Events[@j].Event" value="@evnt.Event" />
@evnt.Name
</td>
<td>@evnt.Description</td>
<td>
<input type="checkbox" id="@checkboxId" name="AuditTrailSettingsPart.Categories[@i].Events[@j].IsEnabled" value="@Boolean.TrueString" @if(evnt.IsEnabled || evnt.IsMandatory){<text>checked="checked"</text>} @if(evnt.IsMandatory){<text>disabled="disabled"</text>}/>
</td>
</tr>
j++;
}
</table>
</fieldset>
i++;
}
</fieldset>
</div>
<section class="audittrail-settings-section">
<h2>@T("Events to record in the audit trail")</h2>
<table class="audittrail-events-table items">
<thead>
<tr>
<th class="event-name">@T("Event")</th>
<th>@T("Description")</th>
<th class="audittrail-event-enabled-cell">
<label>
@T("Enabled")
</label>
</th>
</tr>
</thead>
@{ var i = 0; }
@foreach (var category in Model.Categories) {
<tbody class="audittrail-category-body check-all-container">
<tr>
<th colspan="2">
@category.Name
<input type="hidden" name="AuditTrailSettingsPart.Categories[@i].Category" value="@category.Category" />
</th>
<th class="audittrail-event-enabled-cell">
<input type="checkbox" class="check-all-master" />
</th>
</tr>
@{ var j = 0; }
@foreach (var e in category.Events) {
var checkboxId = String.Format("Event{0}{1}", i, j);
<tr>
<td>
<input type="hidden" name="AuditTrailSettingsPart.Categories[@i].Events[@j].Event" value="@e.Event" />
@e.Name
</td>
<td>@e.Description</td>
<td class="audittrail-event-enabled-cell">
<input id="@checkboxId" type="checkbox" class="check-all-slave" name="AuditTrailSettingsPart.Categories[@i].Events[@j].IsEnabled" value="@Boolean.TrueString" @if (e.IsEnabled || e.IsMandatory) { <text> checked="checked" </text> } @if (e.IsMandatory) { <text> disabled="disabled" </text> } />
</td>
</tr>
j++;
}
</tbody>
i++;
}
</table>
</section>

View File

@@ -1,9 +1,7 @@
@model Orchard.AuditTrail.ViewModels.AuditTrailTrimmingSettingsViewModel
<fieldset>
<legend>@T("Trimming Settings")</legend>
<div id="audittrail-trimming-retentionperiod-setting">
@Html.LabelFor(m => m.RetentionPeriod, T("Retention period"))
@Html.TextBoxFor(m => m.RetentionPeriod, new { @class = "text small" })
<span class="hint">@T("The number of days of audit log data to retain.")</span>
</div>
</fieldset>
<section class="audittrail-trimming-settings-section">
<h2>@T("Trimming settings")</h2>
@Html.LabelFor(m => m.RetentionPeriod, T("Retention period"))
@Html.TextBoxFor(m => m.RetentionPeriod, new { @class = "text small" })
<span class="hint">@T("The number of days of audit log data to retain.")</span>
</section>

View File

@@ -3,7 +3,7 @@
@{
Script.Require("ShapesBase");
Script.Include("~/Themes/TheAdmin/scripts/admin.js").AtFoot();
Script.Include("audit-trail-admin.js").AtFoot();
Script.Include("audittrail-admin.js").AtFoot();
}
@{
var records = (IEnumerable<AuditTrailEventSummaryViewModel>)Model.Records;