mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2026-02-09 09:16:41 +08:00
Compare commits
28 Commits
feature/de
...
issue/6991
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b8acabd3e0 | ||
|
|
8218535d27 | ||
|
|
a7c4dfbf7c | ||
|
|
bc74aec232 | ||
|
|
84a95e3cb9 | ||
|
|
50224d5ebe | ||
|
|
357f1aa166 | ||
|
|
27d5c6658a | ||
|
|
8ec6e8a724 | ||
|
|
e3c0c97b66 | ||
|
|
be31746c4e | ||
|
|
0cac0ac601 | ||
|
|
01fa02bd90 | ||
|
|
94ddb257e1 | ||
|
|
1c1e9e4c97 | ||
|
|
84288aeff6 | ||
|
|
0deab6bd0d | ||
|
|
4c1254e128 | ||
|
|
dcc63228e5 | ||
|
|
35c379191e | ||
|
|
dbbeb175a6 | ||
|
|
a5b1aa5d2a | ||
|
|
e04b12d177 | ||
|
|
74011e659b | ||
|
|
7aa6371ec1 | ||
|
|
c004545eeb | ||
|
|
31f07a44e4 | ||
|
|
13f3473868 |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -68,6 +68,9 @@ ipch/
|
||||
_ReSharper*/
|
||||
*.[Rr]e[Ss]harper
|
||||
|
||||
# CodeRush is a .NET coding add-in
|
||||
.cr*/
|
||||
|
||||
# TeamCity is a build add-in
|
||||
_TeamCity*
|
||||
|
||||
|
||||
10
README.md
10
README.md
@@ -6,7 +6,7 @@ Orchard is a free, open source, community-focused Content Management System buil
|
||||
|
||||
You can try it for free on [DotNest.com](https://dotnest.com) or on Microsoft Azure by clicking on this button.
|
||||
|
||||
[](https://portal.azure.com/#create/OutercurveFoundation.OrchardCMS.1.0.4)
|
||||
[](https://portal.azure.com/#create/OutercurveFoundation.OrchardCMS)
|
||||
|
||||
## About The Orchard Project
|
||||
|
||||
@@ -22,8 +22,10 @@ Our mission is to empower our users and foster a dedicated and diverse community
|
||||
|
||||
## Project Status
|
||||
|
||||
Orchard is currently in version 1.9.2. We invite participation by the developer community in shaping the project’s direction, so that we can publicly validate our designs and development approach.
|
||||
Our 1.9.2 release is available from our Downloads page, and is easy to [Install Orchard using the Web Platform Installer](http://docs.orchardproject.net/Documentation/Installing-Orchard). We encourage interested developers to check out the source code on the Orchard Github site and get involved with the project.
|
||||
Orchard is currently in version **[1.10.1](https://github.com/OrchardCMS/Orchard/releases/tag/1.10.1)**: It contains bugfixes and the more impactful changes and new features added in the latest major version (*1.10*).
|
||||
|
||||
We invite participation by the developer community in shaping the project’s direction, so that we can publicly validate our designs and development approach.
|
||||
All our releases are available on our [Releases](https://github.com/OrchardCMS/Orchard/releases) page, and it's easy to [Install Orchard using the Web Platform Installer](http://docs.orchardproject.net/Documentation/Installing-Orchard) as well. We encourage interested developers to check out the source code on the Orchard GitHub site and get involved with the project.
|
||||
|
||||
* [Download the latest release](https://github.com/OrchardCMS/Orchard/releases)
|
||||
* [Feature roadmap](http://docs.orchardproject.net/Documentation/feature-roadmap)
|
||||
@@ -51,4 +53,4 @@ There are many ways you can [contribute to Orchard](http://orchardproject.net/co
|
||||
|
||||
## The Future Of Orchard CMS: Orchard 2
|
||||
|
||||
As the underlying frameworks (.NET, ASP.NET and ASP.NET MVC) are constantly evolving, Orchard of course keeps track of the changes and improvements of these: Orchard 2 is the next generation of Orchard releases that is based on [ASP.NET vNext](http://www.asp.net/vnext). Just like the current Orchard project, it's fully [open-source and is publicly available on GitHub](https://github.com/OrchardCMS/Orchard2). Orchard 2 (as a framework) is being built from scratch: it's still in development and does not share any of its code base (at least directly) with the current versions of Orchard.
|
||||
As the underlying frameworks (.NET, ASP.NET and ASP.NET MVC) are constantly evolving, Orchard of course keeps track of the changes and improvements of these: Orchard 2 is the next generation of Orchard releases that is based on [ASP.NET Core](http://www.asp.net/core). Just like the current Orchard project, it's fully [open-source and is publicly available on GitHub](https://github.com/OrchardCMS/Orchard2). Orchard 2 (as a framework) is being built from scratch: it's still in development and does not share any of its code base (at least directly) with the current versions of Orchard.
|
||||
|
||||
@@ -140,11 +140,10 @@ function buildCssPipeline(assetGroup, doConcat, doRebuild) {
|
||||
.pipe(gulpif(generateSourceMaps, sourcemaps.init()))
|
||||
.pipe(gulpif("*.less", less()))
|
||||
.pipe(gulpif("*.scss", sass({
|
||||
precision: 10
|
||||
precision: 10
|
||||
})))
|
||||
.pipe(gulpif(doConcat, concat(assetGroup.outputFileName)))
|
||||
.pipe(autoprefixer({ browsers: ["last 2 versions"] }))
|
||||
// TODO: Start using below whenever gulp-header supports sourcemaps.
|
||||
.pipe(header(
|
||||
"/*\n" +
|
||||
"** NOTE: This file is generated by Gulp and should not be edited directly!\n" +
|
||||
@@ -183,8 +182,7 @@ function buildJsPipeline(assetGroup, doConcat, doRebuild) {
|
||||
noEmitOnError: true,
|
||||
sortOutput: true,
|
||||
}).js))
|
||||
.pipe(gulpif(doConcat, concat(assetGroup.outputFileName)))
|
||||
// TODO: Start using below whenever gulp-header supports sourcemaps.
|
||||
.pipe(gulpif(doConcat, concat(assetGroup.outputFileName)))
|
||||
.pipe(header(
|
||||
"/*\n" +
|
||||
"** NOTE: This file is generated by Gulp and should not be edited directly!\n" +
|
||||
@@ -193,9 +191,9 @@ function buildJsPipeline(assetGroup, doConcat, doRebuild) {
|
||||
"*/\n\n"))
|
||||
.pipe(gulpif(generateSourceMaps, sourcemaps.write()))
|
||||
.pipe(gulp.dest(assetGroup.outputDir))
|
||||
.pipe(uglify())
|
||||
.pipe(rename({
|
||||
suffix: ".min"
|
||||
}))
|
||||
.pipe(gulp.dest(assetGroup.outputDir));
|
||||
.pipe(uglify())
|
||||
.pipe(rename({
|
||||
suffix: ".min"
|
||||
}))
|
||||
.pipe(gulp.dest(assetGroup.outputDir));
|
||||
}
|
||||
|
||||
@@ -1,9 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->
|
||||
<log4net xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
|
||||
|
||||
<root>
|
||||
<priority value="ERROR" xdt:Transform="SetAttributes(value)" />
|
||||
<appender-ref ref="debug-file" xdt:Locator="Match(ref)" xdt:Transform="Remove" />
|
||||
</root>
|
||||
|
||||
<logger name="Orchard" xdt:Locator="Match(name)" xdt:Transform="Remove" />
|
||||
<appender name="debugger" xdt:Locator="Match(name)" xdt:Transform="Remove" />
|
||||
<appender name="debug-file" xdt:Locator="Match(name)" xdt:Transform="Remove" />
|
||||
|
||||
<appender>
|
||||
<immediateFlush value="false" xdt:Transform="SetAttributes(value)" />
|
||||
</appender>
|
||||
|
||||
</log4net>
|
||||
@@ -1,8 +1,12 @@
|
||||
@using Orchard.Utility.Extensions;
|
||||
@{
|
||||
var contentTypeClassName = ((string)Model.ContentItem.ContentType).HtmlClassify();
|
||||
Model.Classes.Add(contentTypeClassName);
|
||||
Model.Classes.Add("content-item");
|
||||
|
||||
var tag = Tag(Model, "article");
|
||||
}
|
||||
<article class="content-item @contentTypeClassName">
|
||||
@tag.StartElement
|
||||
<header>
|
||||
@Display(Model.Header)
|
||||
@if (Model.Meta != null) {
|
||||
@@ -17,4 +21,4 @@
|
||||
@Display(Model.Footer)
|
||||
</footer>
|
||||
}
|
||||
</article>
|
||||
@tag.EndElement
|
||||
|
||||
@@ -168,7 +168,7 @@ namespace Lucene.Services {
|
||||
writer.DeleteDocuments(query);
|
||||
}
|
||||
catch (Exception ex) {
|
||||
Logger.Error(ex, "An unexpected error occured while removing the documents [{0}] from the index [{1}].", String.Join(", ", documentIds), indexName);
|
||||
Logger.Error(ex, "An unexpected error occurred while removing the documents [{0}] from the index [{1}].", String.Join(", ", documentIds), indexName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -172,8 +172,8 @@ namespace Orchard.Alias.Controllers {
|
||||
}
|
||||
catch (Exception ex) {
|
||||
Services.TransactionManager.Cancel();
|
||||
Services.Notifier.Error(T("An error occured while creating the alias {0}: {1}. Please check the values are correct.", aliasPath, ex.Message));
|
||||
Logger.Error(ex, T("An error occured while creating the alias {0}", aliasPath).Text);
|
||||
Services.Notifier.Error(T("An error occurred while creating the alias {0}: {1}. Please check the values are correct.", aliasPath, ex.Message));
|
||||
Logger.Error(ex, T("An error occurred while creating the alias {0}", aliasPath).Text);
|
||||
|
||||
ViewBag.Path = aliasPath;
|
||||
ViewBag.Route = routePath;
|
||||
@@ -236,8 +236,8 @@ namespace Orchard.Alias.Controllers {
|
||||
}
|
||||
catch (Exception ex) {
|
||||
Services.TransactionManager.Cancel();
|
||||
Services.Notifier.Error(T("An error occured while editing the alias '{0}': {1}. Please check the values are correct.", aliasPath, ex.Message));
|
||||
Logger.Error(ex, T("An error occured while creating the alias '{0}'", aliasPath).Text);
|
||||
Services.Notifier.Error(T("An error occurred while editing the alias '{0}': {1}. Please check the values are correct.", aliasPath, ex.Message));
|
||||
Logger.Error(ex, T("An error occurred while creating the alias '{0}'", aliasPath).Text);
|
||||
|
||||
ViewBag.Path = aliasPath;
|
||||
ViewBag.Route = routePath;
|
||||
|
||||
@@ -41,14 +41,14 @@ namespace Orchard.Alias.Navigation {
|
||||
var urlLevel = endsWithSlash ? requestUrl.Count(l => l == '/') - 1 : requestUrl.Count(l => l == '/');
|
||||
var menuLevel = menuPosition.Count(l => l == '.');
|
||||
|
||||
// Checking menu item if it's the leaf element or it's an intermediate element
|
||||
// Checking the menu item whether it's the leaf element or it's an intermediate element
|
||||
// or it's an unneccessary element according to the url.
|
||||
RouteValueDictionary contentRoute;
|
||||
if (menuLevel == urlLevel) {
|
||||
contentRoute = request.RequestContext.RouteData.Values;
|
||||
}
|
||||
else {
|
||||
// If menuLevel doesn't equal with urlLevel it can mean that this menu item is
|
||||
// If menuLevel doesn't equal to urlLevel it can mean that this menu item is
|
||||
// an intermediate element (the difference is a positive value) or this menu
|
||||
// item is lower in the navigation hierarchy according to the url (negative
|
||||
// value). If the value is negative, removing the menu item, if the value
|
||||
|
||||
@@ -36,7 +36,7 @@ namespace Orchard.AntiSpam.Services {
|
||||
return SpamStatus.Ham;
|
||||
}
|
||||
catch(Exception e) {
|
||||
Logger.Error(e, "An error occured while checking for spam");
|
||||
Logger.Error(e, "An error occurred while checking for spam");
|
||||
return SpamStatus.Spam;
|
||||
}
|
||||
}
|
||||
@@ -46,7 +46,7 @@ namespace Orchard.AntiSpam.Services {
|
||||
var result = ExecuteValidateRequest(context, "submit-spam");
|
||||
}
|
||||
catch (Exception e) {
|
||||
Logger.Error(e, "An error occured while reporting spam");
|
||||
Logger.Error(e, "An error occurred while reporting spam");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,7 +55,7 @@ namespace Orchard.AntiSpam.Services {
|
||||
var result = ExecuteValidateRequest(context, "submit-ham");
|
||||
}
|
||||
catch (Exception e) {
|
||||
Logger.Error(e, "An error occured while reporting ham");
|
||||
Logger.Error(e, "An error occurred while reporting ham");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -141,7 +141,7 @@ namespace Orchard.Azure.Services.Caching.Output {
|
||||
return Retry(function, times--);
|
||||
}
|
||||
catch (Exception e) {
|
||||
Logger.Error(e, "An unexpected error occured while releasing a DataCacheFactory.");
|
||||
Logger.Error(e, "An unexpected error occurred while releasing a DataCacheFactory.");
|
||||
return default(T);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -82,7 +82,7 @@ namespace Orchard.Azure.Services.FileSystems {
|
||||
private static string ConvertToRelativeUriPath(string path) {
|
||||
var newPath = path.Replace(@"\", "/");
|
||||
|
||||
if (newPath.StartsWith("/") || newPath.StartsWith("http://") || newPath.StartsWith("https://")) {
|
||||
if (newPath.StartsWith("/", StringComparison.OrdinalIgnoreCase) || newPath.StartsWith("http://", StringComparison.OrdinalIgnoreCase) || newPath.StartsWith("https://", StringComparison.OrdinalIgnoreCase)) {
|
||||
throw new ArgumentException("Path must be relative");
|
||||
}
|
||||
|
||||
@@ -106,7 +106,7 @@ namespace Orchard.Azure.Services.FileSystems {
|
||||
return path2;
|
||||
}
|
||||
|
||||
if (path2.StartsWith("http://") || path2.StartsWith("https://")) {
|
||||
if (path2.StartsWith("http://", StringComparison.OrdinalIgnoreCase) || path2.StartsWith("https://", StringComparison.OrdinalIgnoreCase)) {
|
||||
return path2;
|
||||
}
|
||||
|
||||
|
||||
@@ -134,7 +134,7 @@ namespace Orchard.Blogs.Commands {
|
||||
Context.Output.WriteLine(T("Found {0} items", doc.Descendants("item").Count()));
|
||||
}
|
||||
catch (Exception ex) {
|
||||
throw new OrchardException(T("An error occured while loading the feed at {0}.", FeedUrl), ex);
|
||||
throw new OrchardException(T("An error occurred while loading the feed at {0}.", FeedUrl), ex);
|
||||
}
|
||||
|
||||
var blog = _blogService.Get(BlogId, VersionOptions.Latest);
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
@using Orchard.Mvc.Html;
|
||||
@{
|
||||
Layout.Title = T("New Blog");
|
||||
}
|
||||
<div class="edit-item">
|
||||
<div class="edit-item-primary">
|
||||
@if (Model.Content != null) {
|
||||
@@ -22,4 +19,4 @@
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -517,7 +517,7 @@ namespace Orchard.CodeGeneration.Commands {
|
||||
File.SetLastWriteTime(solutionPath, DateTime.Now);
|
||||
}
|
||||
catch {
|
||||
output.WriteLine(T("An unexpected error occured while trying to refresh the Visual Studio solution. Please reload it."));
|
||||
output.WriteLine(T("An unexpected error occurred while trying to refresh the Visual Studio solution. Please reload it."));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -241,7 +241,7 @@ namespace Orchard.Comments.Services {
|
||||
_messageService.Send("Email", parameters);
|
||||
}
|
||||
catch(Exception e) {
|
||||
Logger.Error(e, "An unexpected error occured while sending a notification email");
|
||||
Logger.Error(e, "An unexpected error occurred while sending a notification email");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@ namespace Orchard.DynamicForms.Drivers {
|
||||
Id: "Value",
|
||||
Name: "Value",
|
||||
Title: "Value",
|
||||
Classes: new[] { "text", "large", "tokenized" },
|
||||
Classes: new[] { "text", "large" },
|
||||
Description: T("The value of this checkbox.")));
|
||||
|
||||
return form;
|
||||
|
||||
@@ -31,7 +31,7 @@ namespace Orchard.DynamicForms.Drivers {
|
||||
Id: "Value",
|
||||
Name: "Value",
|
||||
Title: "Value",
|
||||
Classes: new[] { "text", "medium", "tokenized" },
|
||||
Classes: new[] { "text", "medium" },
|
||||
Description: T("The value of this email field.")));
|
||||
|
||||
return form;
|
||||
|
||||
@@ -27,7 +27,7 @@ namespace Orchard.DynamicForms.Drivers {
|
||||
Id: "Value",
|
||||
Name: "Value",
|
||||
Title: "Value",
|
||||
Classes: new[] { "text", "medium", "tokenized" },
|
||||
Classes: new[] { "text", "medium" },
|
||||
Description: T("The value of this hidden field.")));
|
||||
|
||||
return form;
|
||||
|
||||
@@ -30,7 +30,7 @@ namespace Orchard.DynamicForms.Drivers {
|
||||
Id: "Value",
|
||||
Name: "Value",
|
||||
Title: "Value",
|
||||
Classes: new[] { "text", "large", "tokenized" },
|
||||
Classes: new[] { "text", "large" },
|
||||
Description: T("The value of this text area.")),
|
||||
_Rows: shape.Textbox(
|
||||
Id: "Rows",
|
||||
|
||||
@@ -31,7 +31,7 @@ namespace Orchard.DynamicForms.Drivers {
|
||||
Id: "Value",
|
||||
Name: "Value",
|
||||
Title: "Value",
|
||||
Classes: new[] { "text", "medium", "tokenized" },
|
||||
Classes: new[] { "text", "medium" },
|
||||
Description: T("The value of this text field.")));
|
||||
|
||||
return form;
|
||||
|
||||
@@ -31,7 +31,7 @@ namespace Orchard.DynamicForms.Drivers {
|
||||
Id: "Value",
|
||||
Name: "Value",
|
||||
Title: "Value",
|
||||
Classes: new[] {"text", "medium", "tokenized"},
|
||||
Classes: new[] { "text", "medium" },
|
||||
Description: T("The value of this URL field.")));
|
||||
|
||||
return form;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<div class="editor-field" data-controllerid="@Html.FieldIdFor(m => m.Optional)">
|
||||
<label class="forpicker" for="@Html.FieldIdFor(m => m.NotSetLabel)">@T("Neutral option text")</label>
|
||||
<label for="@Html.FieldIdFor(m => m.NotSetLabel)">@T("Neutral option text")</label>
|
||||
@Html.TextBoxFor(m => m.NotSetLabel, new { @class = "text" })
|
||||
@Html.ValidationMessageFor(m => m.NotSetLabel)
|
||||
<span class="hint">@T("The text displayed when the field is not selected.")</span>
|
||||
@@ -17,14 +17,14 @@
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<div class="editor-field">
|
||||
<label class="forpicker" for="@Html.FieldIdFor(m => m.OnLabel)">@T("On Label")</label>
|
||||
<label for="@Html.FieldIdFor(m => m.OnLabel)">@T("On Label")</label>
|
||||
@Html.TextBoxFor(m => m.OnLabel, new { @class = "text"})
|
||||
@Html.ValidationMessageFor(m => m.OnLabel)
|
||||
<span class="hint">@T("The text displayed when the field is selected.")</span>
|
||||
</div>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<label class="forpicker" for="@Html.FieldIdFor(m => m.OffLabel)">@T("Off Label")</label>
|
||||
<label for="@Html.FieldIdFor(m => m.OffLabel)">@T("Off Label")</label>
|
||||
<div class="editor-field">
|
||||
@Html.TextBoxFor(m => m.OffLabel, new { @class = "text" })
|
||||
@Html.ValidationMessageFor(m => m.OffLabel)
|
||||
@@ -32,7 +32,7 @@
|
||||
</div>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<label class="forpicker" for="@Html.FieldIdFor(m => m.SelectionMode)">@T("Selection mode")</label>
|
||||
<label for="@Html.FieldIdFor(m => m.SelectionMode)">@T("Selection mode")</label>
|
||||
<select id="@Html.FieldIdFor(m => m.SelectionMode)" name="@Html.FieldNameFor(m => m.SelectionMode)">
|
||||
@Html.SelectOption(SelectionMode.Checkbox, Model.SelectionMode == SelectionMode.Checkbox, T("Checkbox").ToString())
|
||||
@Html.SelectOption(SelectionMode.Radiobutton, Model.SelectionMode == SelectionMode.Radiobutton, T("Radio buttons").ToString())
|
||||
@@ -41,7 +41,7 @@
|
||||
<span class="hint">@T("When Checkbox is selected, the label for 'on' will be used.")</span>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<label class="forpicker" for="@Html.FieldIdFor(m => m.DefaultValue)">@T("Default value")</label>
|
||||
<label for="@Html.FieldIdFor(m => m.DefaultValue)">@T("Default value")</label>
|
||||
<select id="@Html.FieldIdFor(m => m.DefaultValue)" name="@Html.FieldNameFor(m => m.DefaultValue)">
|
||||
@Html.SelectOption((object)String.Empty, !Model.DefaultValue.HasValue, T("Neutral").ToString())
|
||||
@Html.SelectOption((object)true, Model.DefaultValue.HasValue && Model.DefaultValue == true, T("True").ToString())
|
||||
|
||||
@@ -7,14 +7,14 @@
|
||||
</div>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<label class="forpicker" for="@Html.FieldIdFor(m => m.Options)">@T("Options")</label>
|
||||
<label for="@Html.FieldIdFor(m => m.Options)">@T("Options")</label>
|
||||
<div class="editor-field">
|
||||
@Html.TextAreaFor(m => m.Options, new { @class = "text medium", rows = "5" })
|
||||
@Html.ValidationMessageFor(m => m.Options)
|
||||
<span class="hint">@T("Enter an option per line.")</span>
|
||||
</div>
|
||||
|
||||
<label class="forpicker" for="@Html.FieldIdFor(m => m.ListMode)">@T("List mode")</label>
|
||||
<label for="@Html.FieldIdFor(m => m.ListMode)">@T("List mode")</label>
|
||||
<select id="@Html.FieldIdFor(m => m.ListMode)" name="@Html.FieldNameFor(m => m.ListMode)">
|
||||
@Html.SelectOption(ListMode.Dropdown, Model.ListMode == ListMode.Dropdown, T("Dropdown list").ToString())
|
||||
@Html.SelectOption(ListMode.Radiobutton, Model.ListMode == ListMode.Radiobutton, T("Radio button list").ToString())
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
<fieldset>
|
||||
<div>
|
||||
<label class="forpicker" for="@Html.FieldIdFor(m => m.Type)">@T("Input type")</label>
|
||||
<label for="@Html.FieldIdFor(m => m.Type)">@T("Input type")</label>
|
||||
<select id="@Html.FieldIdFor(m => m.Type)" name="@Html.FieldNameFor(m => m.Type)">
|
||||
@Html.SelectOption(Orchard.Fields.Settings.InputType.Text, Model.Type == Orchard.Fields.Settings.InputType.Text, T("Text").ToString(), new { id = Html.FieldIdFor(m => m.Type) + "-text" })
|
||||
@Html.SelectOption(Orchard.Fields.Settings.InputType.Url, Model.Type == Orchard.Fields.Settings.InputType.Url, T("Url").ToString())
|
||||
@@ -12,7 +12,7 @@
|
||||
<span class="hint">@T("Defines what format should be applied to the text.")</span>
|
||||
</div>
|
||||
<div class="editor-field" data-controllerid="@(Html.FieldIdFor(m => m.Type) + "-text")">
|
||||
<label class="forpicker" for="@Html.FieldIdFor(m => m.Pattern)">@T("Pattern")</label>
|
||||
<label for="@Html.FieldIdFor(m => m.Pattern)">@T("Pattern")</label>
|
||||
@Html.TextBoxFor(m => m.Pattern, new { @class = "text medium" })
|
||||
@Html.ValidationMessageFor(m => m.Pattern)
|
||||
<span class="hint">@T("Declaring what pattern should be used for validating a field’s value, in the form of a regular expression. (optional)")</span>
|
||||
@@ -20,7 +20,7 @@
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<div class="editor-field">
|
||||
<label class="forpicker" for="@Html.FieldIdFor(m => m.Title)">@T("Title")</label>
|
||||
<label for="@Html.FieldIdFor(m => m.Title)">@T("Title")</label>
|
||||
@Html.TextBoxFor(m => m.Title, new { @class = "text"})
|
||||
@Html.ValidationMessageFor(m => m.Title)
|
||||
<span class="hint">@T("The title attribute of the field. (optional)")</span>
|
||||
@@ -46,7 +46,7 @@
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<div class="editor-field">
|
||||
<label class="forpicker" for="@Html.FieldIdFor(m => m.Placeholder)">@T("Watermark")</label>
|
||||
<label for="@Html.FieldIdFor(m => m.Placeholder)">@T("Watermark")</label>
|
||||
@Html.TextBoxFor(m => m.Placeholder, new { @class = "text" })
|
||||
@Html.ValidationMessageFor(m => m.Placeholder)
|
||||
<span class="hint">@T("A hint to display when the input is empty. (optional)")</span>
|
||||
@@ -54,7 +54,7 @@
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<div class="editor-field">
|
||||
<label class="forpicker" for="@Html.FieldIdFor(m => m.EditorCssClass)">@T("Editor css class")</label>
|
||||
<label for="@Html.FieldIdFor(m => m.EditorCssClass)">@T("Editor css class")</label>
|
||||
@Html.TextBoxFor(m => m.EditorCssClass, new { @class = "text" })
|
||||
@Html.ValidationMessageFor(m => m.EditorCssClass)
|
||||
<span class="hint">@T("The css class to use for the editor. (optional)")</span>
|
||||
@@ -62,7 +62,7 @@
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<div class="editor-field">
|
||||
<label class="forpicker" for="@Html.FieldIdFor(m => m.MaxLength)">@T("Maximum length")</label>
|
||||
<label for="@Html.FieldIdFor(m => m.MaxLength)">@T("Maximum length")</label>
|
||||
@Html.TextBoxFor(m => m.MaxLength, new { @class = "text small" })
|
||||
@Html.ValidationMessageFor(m => m.MaxLength)
|
||||
<span class="hint">@T("The maximum number of chars allowed. (optional)")</span>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
<fieldset>
|
||||
<div>
|
||||
<label class="forpicker" for="@Html.FieldIdFor(m => m.TargetMode)">@T("Target")</label>
|
||||
<label for="@Html.FieldIdFor(m => m.TargetMode)">@T("Target")</label>
|
||||
<select id="@Html.FieldIdFor(m => m.TargetMode)" name="@Html.FieldNameFor(m => m.TargetMode)">
|
||||
@Html.SelectOption(TargetMode.None, Model.TargetMode == TargetMode.None, T("No target").ToString())
|
||||
@Html.SelectOption(TargetMode.NewWindow, Model.TargetMode == TargetMode.NewWindow, T("Open link in new window").ToString())
|
||||
@@ -21,7 +21,7 @@
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<div>
|
||||
<label class="forpicker" for="@Html.FieldIdFor(m => m.LinkTextMode)">@T("Link text")</label>
|
||||
<label for="@Html.FieldIdFor(m => m.LinkTextMode)">@T("Link text")</label>
|
||||
<select id="@Html.FieldIdFor(m => m.LinkTextMode)" name="@Html.FieldNameFor(m => m.LinkTextMode)">
|
||||
@Html.SelectOption(LinkTextMode.Optional, Model.LinkTextMode == LinkTextMode.Optional, T("Optional").ToString())
|
||||
@Html.SelectOption(LinkTextMode.Required, Model.LinkTextMode == LinkTextMode.Required, T("Required").ToString())
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<div class="editor-field">
|
||||
<label class="forpicker" for="@Html.FieldIdFor(m => m.Scale)">@T("Scale")</label>
|
||||
<label for="@Html.FieldIdFor(m => m.Scale)">@T("Scale")</label>
|
||||
@Html.TextBoxFor(m => m.Scale, new { @class = "text small" })
|
||||
@Html.ValidationMessageFor(m => m.Scale)
|
||||
<span class="hint">@T("The number of digits to the right of the decimal. Put 0 for integers.")</span>
|
||||
@@ -17,7 +17,7 @@
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<div class="editor-field">
|
||||
<label class="forpicker" for="@Html.FieldIdFor(m => m.Minimum)">@T("Minimum")</label>
|
||||
<label for="@Html.FieldIdFor(m => m.Minimum)">@T("Minimum")</label>
|
||||
@Html.TextBoxFor(m => m.Minimum, new { @class = "text small" })
|
||||
@Html.ValidationMessageFor(m => m.Minimum)
|
||||
<span class="hint">@T("The minimum value allowed. (optional)")</span>
|
||||
@@ -25,7 +25,7 @@
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<div class="editor-field">
|
||||
<label class="forpicker" for="@Html.FieldIdFor(m => m.Maximum)">@T("Maximum")</label>
|
||||
<label for="@Html.FieldIdFor(m => m.Maximum)">@T("Maximum")</label>
|
||||
@Html.TextBoxFor(m => m.Maximum, new { @class = "text small" })
|
||||
@Html.ValidationMessageFor(m => m.Maximum)
|
||||
<span class="hint">@T("The maximum value allowed. (optional)")</span>
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
var settings = Model.PartFieldDefinition.Settings.GetModel<BooleanFieldSettings>();
|
||||
}
|
||||
<fieldset>
|
||||
<label for="@Html.FieldIdFor(m => m.Value)">@Model.DisplayName</label>
|
||||
<label for="@Html.FieldIdFor(m => m.Value)" @if (!settings.Optional) { <text> class="required" </text> }>@Model.DisplayName</label>
|
||||
@switch (settings.SelectionMode) {
|
||||
case SelectionMode.Checkbox:
|
||||
<input type="checkbox" id="@(Html.FieldIdFor(m => m.Value))" value="true" name="@Html.FieldNameFor(m => m.Value)" @if(Model.Value.HasValue && Model.Value.Value) { <text>checked="checked"</text> } /><input name="@Html.FieldNameFor(m => m.Value)" type="hidden" value="false" />
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Reset
|
||||
/* Reset
|
||||
***************************************************************/
|
||||
|
||||
html, body, div, span, applet, object, iframe,
|
||||
@@ -335,7 +335,7 @@ button:hover, .button:hover, a.button:hover {
|
||||
background: -moz-linear-gradient(top, rgba(110, 127, 69, 1.0), rgba(106, 123, 66, 1.0));
|
||||
}
|
||||
|
||||
button:active, .buton:active, a.button:active {
|
||||
button:active, .button:active, a.button:active {
|
||||
text-decoration:none;
|
||||
background:#6a7b42;
|
||||
border:1px solid #487328;
|
||||
|
||||
@@ -83,8 +83,8 @@ namespace Orchard.Indexing.Controllers {
|
||||
Services.Notifier.Information(T("Index named {0} created successfully", id));
|
||||
}
|
||||
catch(Exception e) {
|
||||
Services.Notifier.Error(T("An error occured while creating the index: {0}", id));
|
||||
Logger.Error("An error occured while creatign the index " + id, e);
|
||||
Services.Notifier.Error(T("An error occurred while creating the index: {0}", id));
|
||||
Logger.Error("An error occurred while creatign the index " + id, e);
|
||||
return View("Create", id);
|
||||
}
|
||||
|
||||
|
||||
@@ -288,7 +288,7 @@ namespace Orchard.Indexing.Services {
|
||||
}
|
||||
}
|
||||
catch (Exception ex) {
|
||||
Logger.Warning(ex, "An error occured while adding a document to the index");
|
||||
Logger.Warning(ex, "An error occurred while adding a document to the index");
|
||||
}
|
||||
|
||||
// removing documents from the index
|
||||
@@ -299,7 +299,7 @@ namespace Orchard.Indexing.Services {
|
||||
}
|
||||
}
|
||||
catch (Exception ex) {
|
||||
Logger.Warning(ex, "An error occured while removing a document from the index");
|
||||
Logger.Warning(ex, "An error occurred while removing a document from the index");
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
@@ -14,9 +14,10 @@ namespace Orchard.Layouts.Helpers {
|
||||
public static OrchardTagBuilder CreateElementTagBuilder(dynamic shape, string tag = "div") {
|
||||
return AddCommonElementAttributes(new OrchardTagBuilder(tag), shape);
|
||||
}
|
||||
|
||||
|
||||
public static OrchardTagBuilder AddCommonElementAttributes(this OrchardTagBuilder tagBuilder, dynamic shape) {
|
||||
var attributes = GetCommonElementAttributes(shape);
|
||||
tagBuilder.MergeAttributes(shape.Attributes);
|
||||
tagBuilder.MergeAttributes(attributes);
|
||||
return tagBuilder;
|
||||
}
|
||||
@@ -46,7 +47,7 @@ namespace Orchard.Layouts.Helpers {
|
||||
classes.Add(cssClass);
|
||||
}
|
||||
|
||||
if(classes.Any())
|
||||
if (classes.Any())
|
||||
attributes["class"] = String.Join(" ", classes);
|
||||
|
||||
return attributes;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web.Mvc;
|
||||
@@ -52,20 +52,18 @@ namespace Orchard.Layouts.Providers {
|
||||
}
|
||||
|
||||
private IEnumerable<Tuple<ContentPartDefinition, ContentPartFieldDefinition>> GetContentFieldTuples(HarvestElementsContext context) {
|
||||
var contentTypeDefinition = context.Content != null
|
||||
? _contentDefinitionManager.Value.GetTypeDefinition(context.Content.ContentItem.ContentType)
|
||||
: default(ContentTypeDefinition);
|
||||
|
||||
var parts = contentTypeDefinition != null
|
||||
? contentTypeDefinition.Parts.Select(x => x.PartDefinition)
|
||||
: _contentDefinitionManager.Value.ListPartDefinitions();
|
||||
// If there is no content item provided as context, there are no fields made available.
|
||||
if (context.Content == null)
|
||||
return Enumerable.Empty<Tuple<ContentPartDefinition, ContentPartFieldDefinition>>();
|
||||
|
||||
var contentTypeDefinition = _contentDefinitionManager.Value.GetTypeDefinition(context.Content.ContentItem.ContentType);
|
||||
var parts = contentTypeDefinition.Parts.Select(x => x.PartDefinition);
|
||||
var fields = parts.SelectMany(part => part.Fields.Select(field => Tuple.Create(part, field)));
|
||||
|
||||
// TODO: Each module should be able to tell which fields are supported as droppable elements.
|
||||
var blackList = new string[0];
|
||||
|
||||
return fields.Where(t => blackList.All(x => t.Item2.FieldDefinition.Name != x));
|
||||
return fields.Where(t => blackList.All(x => t.Item2.FieldDefinition.Name != x)).ToList();
|
||||
}
|
||||
|
||||
private void Displaying(ElementDisplayingContext context) {
|
||||
@@ -88,4 +86,4 @@ namespace Orchard.Layouts.Providers {
|
||||
context.ElementShape.ContentField = contentFieldShape;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -755,7 +755,7 @@ button:hover, .button:hover, a.button:hover {
|
||||
background: -moz-linear-gradient(top, rgba(110, 127, 69, 1.0), rgba(106, 123, 66, 1.0));
|
||||
}
|
||||
|
||||
button:active, .buton:active, a.button:active {
|
||||
button:active, .button:active, a.button:active {
|
||||
text-decoration:none;
|
||||
background:#6a7b42;
|
||||
border:1px solid #487328;
|
||||
|
||||
@@ -54,7 +54,7 @@ namespace Orchard.MediaProcessing.Shapes {
|
||||
Output.Write(_imageProfileManager.Value.GetImageProfileUrl(Path, Profile, CustomFilter, ContentItem));
|
||||
}
|
||||
catch (Exception ex) {
|
||||
Logger.Error(ex, "An error occured while rendering shape {0} for image {1}", Profile, Path);
|
||||
Logger.Error(ex, "An error occurred while rendering shape {0} for image {1}", Profile, Path);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -82,7 +82,7 @@ namespace Orchard.MessageBus.Brokers.SqlServer {
|
||||
}
|
||||
}
|
||||
catch(Exception e) {
|
||||
Logger.Error(e, "An error occured while creating a Worker.");
|
||||
Logger.Error(e, "An error occurred while creating a Worker.");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -72,7 +72,7 @@ namespace Orchard.MessageBus.Brokers.SqlServer {
|
||||
|
||||
}
|
||||
catch (Exception e) {
|
||||
Logger.Error(e, "An unexpected error occured while monitoring sql dependencies.");
|
||||
Logger.Error(e, "An unexpected error occurred while monitoring sql dependencies.");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ namespace Orchard.Migrations.Commands {
|
||||
}
|
||||
}
|
||||
catch ( Exception ex ) {
|
||||
throw new OrchardException(T("An error occured while upgrading the database."), ex);
|
||||
throw new OrchardException(T("An error occurred while upgrading the database."), ex);
|
||||
}
|
||||
|
||||
Context.Output.WriteLine(T("Database upgraded"));
|
||||
|
||||
@@ -29,7 +29,7 @@ namespace Orchard.Migrations.Commands {
|
||||
_schemaCommandGenerator.UpdateDatabase();
|
||||
}
|
||||
catch ( Exception ex ) {
|
||||
throw new OrchardException(T("An error occured while updating the database."), ex);
|
||||
throw new OrchardException(T("An error occurred while updating the database."), ex);
|
||||
}
|
||||
|
||||
Context.Output.WriteLine(T("Database updated"));
|
||||
@@ -54,7 +54,7 @@ namespace Orchard.Migrations.Commands {
|
||||
}
|
||||
}
|
||||
catch ( Exception ex ) {
|
||||
throw new OrchardException(T("An error occured while creating the tables."), ex);
|
||||
throw new OrchardException(T("An error occurred while creating the tables."), ex);
|
||||
}
|
||||
|
||||
Context.Output.WriteLine(T("Tables created"));
|
||||
|
||||
@@ -232,7 +232,7 @@ namespace Orchard.Modules.Controllers {
|
||||
Services.Notifier.Information(T("The feature {0} was updated successfully", id));
|
||||
}
|
||||
catch (Exception exception) {
|
||||
Services.Notifier.Error(T("An error occured while updating the feature {0}: {1}", id, exception.Message));
|
||||
Services.Notifier.Error(T("An error occurred while updating the feature {0}: {1}", id, exception.Message));
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -226,6 +226,12 @@ namespace Orchard.OutputCache.Filters {
|
||||
// To prevent access to the original lifetime scope a new work context scope should be created here and dependencies
|
||||
// should be resolved from it.
|
||||
|
||||
// Recheck the response status code incase it was modified before the callback.
|
||||
if (response.StatusCode != 200) {
|
||||
Logger.Debug("Response for item '{0}' will not be cached because status code was set to {1} during rendering.", _cacheKey, response.StatusCode);
|
||||
return;
|
||||
}
|
||||
|
||||
using (var scope = _workContextAccessor.CreateWorkContextScope()) {
|
||||
var cacheItem = new CacheItem() {
|
||||
CachedOnUtc = _now,
|
||||
@@ -613,7 +619,7 @@ namespace Orchard.OutputCache.Filters {
|
||||
return cacheItem;
|
||||
}
|
||||
catch (Exception e) {
|
||||
Logger.Error(e, "An unexpected error occured while reading a cache entry");
|
||||
Logger.Error(e, "An unexpected error occurred while reading a cache entry");
|
||||
}
|
||||
|
||||
return null;
|
||||
|
||||
@@ -69,6 +69,8 @@ namespace Orchard.Projections.FilterEditors.Forms {
|
||||
case StringOperator.Contains:
|
||||
return x => x.Like(property, Convert.ToString(value), HqlMatchMode.Anywhere);
|
||||
case StringOperator.ContainsAny:
|
||||
if (string.IsNullOrEmpty((string)value))
|
||||
return x => x.Eq("Id", "0");
|
||||
var values1 = Convert.ToString(value).Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
|
||||
var predicates1 = values1.Skip(1).Select<string, Action<IHqlExpressionFactory>>(x => y => y.Like(property, x, HqlMatchMode.Anywhere)).ToArray();
|
||||
return x => x.Disjunction(y => y.Like(property, values1[0], HqlMatchMode.Anywhere), predicates1);
|
||||
|
||||
@@ -63,7 +63,7 @@ namespace Orchard.Redis.MessageBus {
|
||||
|
||||
}
|
||||
catch (Exception e) {
|
||||
Logger.Error(e, "An error occured while subscribing to " + channel);
|
||||
Logger.Error(e, "An error occurred while subscribing to " + channel);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -128,7 +128,7 @@ namespace Orchard.Setup.Services {
|
||||
|
||||
using (var environment = bootstrapLifetimeScope.CreateWorkContextScope()) {
|
||||
|
||||
// Check if the database is already created (in case an exception occured in the second phase).
|
||||
// Check if the database is already created (in case an exception occurred in the second phase).
|
||||
var schemaBuilder = new SchemaBuilder(environment.Resolve<IDataMigrationInterpreter>());
|
||||
var installationPresent = true;
|
||||
try {
|
||||
|
||||
@@ -249,8 +249,8 @@ namespace Orchard.Themes.Controllers {
|
||||
Services.Notifier.Information(T("The theme {0} was updated successfully.", themeId));
|
||||
Logger.Information("The theme {0} was updated successfully.", themeId);
|
||||
} catch (Exception exception) {
|
||||
Logger.Error(T("An error occured while updating the theme {0}: {1}", themeId, exception.Message).Text);
|
||||
Services.Notifier.Error(T("An error occured while updating the theme {0}: {1}", themeId, exception.Message));
|
||||
Logger.Error(T("An error occurred while updating the theme {0}: {1}", themeId, exception.Message).Text);
|
||||
Services.Notifier.Error(T("An error occurred while updating the theme {0}: {1}", themeId, exception.Message));
|
||||
}
|
||||
|
||||
return RedirectToAction("Index");
|
||||
|
||||
@@ -67,6 +67,8 @@ namespace Orchard.Users.Activities {
|
||||
yield break;
|
||||
}
|
||||
|
||||
userName = userName.Trim();
|
||||
|
||||
var user = _membershipService.CreateUser(
|
||||
new CreateUserParams(
|
||||
userName,
|
||||
|
||||
@@ -5,4 +5,7 @@
|
||||
<div class="secondary">
|
||||
@Display(Model.Sidebar)
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@if (!String.IsNullOrWhiteSpace(Request.QueryString["returnUrl"])) {
|
||||
@Html.Hidden("returnUrl", Request.QueryString["returnUrl"])
|
||||
}
|
||||
|
||||
@@ -41,7 +41,7 @@ namespace Orchard.Warmup.Services {
|
||||
return null;
|
||||
}
|
||||
catch(Exception e) {
|
||||
Logger.Error(e, "An error occured while downloading url: {0}", url);
|
||||
Logger.Error(e, "An error occurred while downloading url: {0}", url);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,7 +56,7 @@ namespace Orchard.Widgets.Layouts.Providers {
|
||||
? _contentManager.Value.Get(widgetId.Value, versionOptions)
|
||||
: _contentManager.Value.New(contentTypeName);
|
||||
|
||||
var widgetShape = widget != null ? _contentManager.Value.BuildDisplay(widget) : default(dynamic);
|
||||
var widgetShape = widget != null ? _contentManager.Value.BuildDisplay(widget, context.DisplayType) : default(dynamic);
|
||||
context.ElementShape.Widget = widget;
|
||||
context.ElementShape.WidgetShape = widgetShape;
|
||||
}
|
||||
|
||||
@@ -15,5 +15,5 @@
|
||||
<fieldset>
|
||||
@Html.LabelFor(layer => layer.LayerRule, T("Layer Rule"))
|
||||
@Html.TextAreaFor(layer => layer.LayerRule, new { spellcheck = "false" })
|
||||
<span class="hint">@T("An expression that evaluates to true when the widgets in this layer must be displayed. See <a href=\"http://docs.orchardproject.net/Documentation/Managing-widgets#AddingaLayer\">http://docs.orchardproject.net/Documentation/Managing-widgets#AddingaLayer</a> for more information.")</span>
|
||||
<span class="hint">@T("An expression that evaluates to true when the widgets in this layer must be displayed. See <a href=\"http://docs.orchardproject.net/en/latest/Documentation/Managing-widgets/#adding-a-layer\">http://docs.orchardproject.net/en/latest/Documentation/Managing-widgets/#adding-a-layer</a> for more information.")</span>
|
||||
</fieldset>
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
}
|
||||
<div class="layout-placeholder">
|
||||
@if (widget != null) {
|
||||
@String.Format("{0} - {1}", Html.ItemDisplayText(widget), widget.TypeDefinition.DisplayName)
|
||||
@T("{0} - {1}", Html.ItemDisplayText(widget), widget.TypeDefinition.DisplayName)
|
||||
}
|
||||
else {
|
||||
@T("Widget Not Found");
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
8
src/Orchard.Web/Modules/TinyMce/Assets.json
Normal file
8
src/Orchard.Web/Modules/TinyMce/Assets.json
Normal file
@@ -0,0 +1,8 @@
|
||||
[
|
||||
{
|
||||
"inputs": [
|
||||
"Assets/Less/orchard-tinymce.less"
|
||||
],
|
||||
"output": "Styles/orchard-tinymce.css"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,10 @@
|
||||
#stickyContainer.sticky-top {
|
||||
top: 0;
|
||||
position: fixed;
|
||||
background-color: white;
|
||||
border-top: 1px solid #9e9e9e;
|
||||
border-bottom: 1px solid #9e9e9e;
|
||||
}
|
||||
#stickyContainer.container-layout {
|
||||
width: 100%;
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
#stickyContainer.sticky-top {
|
||||
top: 0;
|
||||
position: fixed;
|
||||
background-color: white;
|
||||
border-top: 1px solid #9e9e9e;
|
||||
border-bottom: 1px solid #9e9e9e;
|
||||
}
|
||||
#stickyContainer.container-layout {
|
||||
width: 100%;
|
||||
}
|
||||
1
src/Orchard.Web/Modules/TinyMce/Assets/Less/orchard-tinymce.min.css
vendored
Normal file
1
src/Orchard.Web/Modules/TinyMce/Assets/Less/orchard-tinymce.min.css
vendored
Normal file
@@ -0,0 +1 @@
|
||||
#stickyContainer.sticky-top{top:0;position:fixed;background-color:#fff;border-top:1px solid #9e9e9e;border-bottom:1px solid #9e9e9e;}#stickyContainer.container-layout{width:100%;}
|
||||
@@ -6,6 +6,7 @@ namespace TinyMce {
|
||||
var manifest = builder.Add();
|
||||
manifest.DefineScript("TinyMce").SetUrl("tinymce.min.js").SetVersion("4.1.6").SetDependencies("jQuery");
|
||||
manifest.DefineScript("OrchardTinyMce").SetUrl("orchard-tinymce.js").SetDependencies("TinyMce");
|
||||
manifest.DefineStyle("OrchardTinyMce").SetUrl("orchard-tinymce.css");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,5 +34,75 @@ tinyMCE.init({
|
||||
$(document).bind("localization.ui.directionalitychanged", function(event, directionality) {
|
||||
editor.getBody().dir = directionality;
|
||||
});
|
||||
|
||||
// If the focused editable area is taller than the window, make the menu and the toolbox sticky-positioned within the editor
|
||||
// to help the user avoid excessive vertical scrolling.
|
||||
// There is a built-in fixed_toolbar_container option in the TinyMCE, but we can't use it, because it is only
|
||||
// available if the selector is a DIV with inline mode.
|
||||
|
||||
editor.on('focus', function () {
|
||||
var $contentArea = $(this.contentAreaContainer.parentElement);
|
||||
stickyToolbar($contentArea);
|
||||
});
|
||||
|
||||
editor.on('blur', function () {
|
||||
var $contentArea = $(this.contentAreaContainer.parentElement);
|
||||
var isAdded = false;
|
||||
$contentArea.prepend($contentArea.find("div.mce-toolbar-grp"));
|
||||
$contentArea.prepend($contentArea.find("div.mce-menubar"));
|
||||
$("#stickyContainer").remove();
|
||||
$("#stickyPlaceholder").remove();
|
||||
});
|
||||
|
||||
function stickyToolbar($contentArea) {
|
||||
var $container = $("<div/>", { id: "stickyContainer", class: "container-layout" });
|
||||
|
||||
$contentArea.prepend($container);
|
||||
$container.append($contentArea.find("div.mce-menubar"));
|
||||
$container.append($contentArea.find("div.mce-toolbar-grp"));
|
||||
|
||||
var $containerPosition = $container.offset();
|
||||
var $placeholder = $("<div/>", { id: "stickyPlaceholder" });
|
||||
var isAdded = false;
|
||||
|
||||
if ($(window).scrollTop() >= $containerPosition.top && !isAdded) {
|
||||
$container.addClass("sticky-top");
|
||||
$placeholder.insertBefore($container);
|
||||
$container.width($placeholder.width());
|
||||
$placeholder.height($container.height());
|
||||
}
|
||||
|
||||
$(window).scroll(function (event) {
|
||||
var $statusbarPosition = $contentArea.find("div.mce-statusbar").offset();
|
||||
if ($(window).scrollTop() >= $containerPosition.top && !isAdded) {
|
||||
$container.addClass("sticky-top");
|
||||
$placeholder.insertBefore($container);
|
||||
$container.width($placeholder.width());
|
||||
$placeholder.height($container.height());
|
||||
$(window).on("resize", function () {
|
||||
$container.width($placeholder.width());
|
||||
$placeholder.height($container.height());
|
||||
});
|
||||
isAdded = true;
|
||||
} else if ($(window).scrollTop() < $containerPosition.top && isAdded) {
|
||||
$container.removeClass("sticky-top");
|
||||
$placeholder.remove();
|
||||
$(window).on("resize", function () {
|
||||
$container.width("100%");
|
||||
});
|
||||
isAdded = false;
|
||||
}
|
||||
if ($(window).scrollTop() >= ($statusbarPosition.top - $container.height())) {
|
||||
$container.hide();
|
||||
} else if ($(window).scrollTop() < ($statusbarPosition.top - $container.height()) && isAdded) {
|
||||
$container.show();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
12
src/Orchard.Web/Modules/TinyMce/Styles/Web.config
Normal file
12
src/Orchard.Web/Modules/TinyMce/Styles/Web.config
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<system.webServer>
|
||||
<staticContent>
|
||||
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="7.00:00:00" />
|
||||
</staticContent>
|
||||
<handlers accessPolicy="Script,Read">
|
||||
<!-- For any request to a file exists on disk, return it via native http module. AccessPolicy="Script" above is to allow for a managed 404 page. -->
|
||||
<add name="StaticFile" path="*" verb="*" modules="StaticFileModule" preCondition="integratedMode" resourceType="File" requireAccess="Read" />
|
||||
</handlers>
|
||||
</system.webServer>
|
||||
</configuration>
|
||||
17
src/Orchard.Web/Modules/TinyMce/Styles/orchard-tinymce.css
Normal file
17
src/Orchard.Web/Modules/TinyMce/Styles/orchard-tinymce.css
Normal file
@@ -0,0 +1,17 @@
|
||||
/*
|
||||
** NOTE: This file is generated by Gulp and should not be edited directly!
|
||||
** Any changes made directly to this file will be overwritten next time its asset group is processed by Gulp.
|
||||
*/
|
||||
|
||||
#stickyContainer.sticky-top {
|
||||
top: 0;
|
||||
position: fixed;
|
||||
background-color: white;
|
||||
border-top: 1px solid #9e9e9e;
|
||||
border-bottom: 1px solid #9e9e9e;
|
||||
}
|
||||
#stickyContainer.container-layout {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm9yY2hhcmQtdGlueW1jZS5jc3MiLCJvcmNoYXJkLXRpbnltY2UubGVzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQUNMQTtFQUNFLE9BQUE7RUFDQSxnQkFBQTtFQUNBLHdCQUFBO0VBQ0EsOEJBQUE7RUFDQSxpQ0FBQTtDRENEO0FDQ0Q7RUFDRSxZQUFBO0NEQ0QiLCJmaWxlIjoib3JjaGFyZC10aW55bWNlLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIiNzdGlja3lDb250YWluZXIuc3RpY2t5LXRvcCB7XG4gIHRvcDogMDtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICM5ZTllOWU7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjOWU5ZTllO1xufVxuI3N0aWNreUNvbnRhaW5lci5jb250YWluZXItbGF5b3V0IHtcbiAgd2lkdGg6IDEwMCU7XG59XG4iLCLvu78jc3RpY2t5Q29udGFpbmVyLnN0aWNreS10b3Age1xyXG4gIHRvcDogMDtcclxuICBwb3NpdGlvbjogZml4ZWQ7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XHJcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICM5ZTllOWU7XHJcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM5ZTllOWU7XHJcbn1cclxuI3N0aWNreUNvbnRhaW5lci5jb250YWluZXItbGF5b3V0IHtcclxuICB3aWR0aDogMTAwJTtcclxufVxyXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= */
|
||||
1
src/Orchard.Web/Modules/TinyMce/Styles/orchard-tinymce.min.css
vendored
Normal file
1
src/Orchard.Web/Modules/TinyMce/Styles/orchard-tinymce.min.css
vendored
Normal file
@@ -0,0 +1 @@
|
||||
#stickyContainer.sticky-top{top:0;position:fixed;background-color:#fff;border-top:1px solid #9e9e9e;border-bottom:1px solid #9e9e9e}#stickyContainer.container-layout{width:100%}
|
||||
@@ -88,6 +88,12 @@
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Assets\Less\orchard-tinymce.css">
|
||||
<DependentUpon>orchard-tinymce.less</DependentUpon>
|
||||
</Content>
|
||||
<Content Include="Assets\Less\orchard-tinymce.min.css">
|
||||
<DependentUpon>orchard-tinymce.css</DependentUpon>
|
||||
</Content>
|
||||
<Content Include="Module.txt" />
|
||||
<Content Include="Scripts\langs\ar.js" />
|
||||
<Content Include="Scripts\langs\ar_SA.js" />
|
||||
@@ -258,6 +264,7 @@
|
||||
<Compile Include="Services\TinyMceShapeDisplayEvent.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Styles\orchard-tinymce.css" />
|
||||
<Content Include="Views\Body-Html.Editor.cshtml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
@@ -305,6 +312,15 @@
|
||||
<ItemGroup>
|
||||
<Content Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Styles\Web.config">
|
||||
<SubType>Designer</SubType>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Assets.json" />
|
||||
<Content Include="Assets\Less\orchard-tinymce.less" />
|
||||
</ItemGroup>
|
||||
<PropertyGroup>
|
||||
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
|
||||
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
Script.Require("OrchardTinyMce");
|
||||
Script.Require("jQueryColorBox");
|
||||
Style.Require("jQueryColorBox");
|
||||
Style.Require("OrchardTinyMce");
|
||||
}
|
||||
|
||||
@Html.TextArea("Text", (string)Model.Text, 25, 80,
|
||||
|
||||
@@ -239,7 +239,7 @@ button:hover, .button:hover, a.button:hover {
|
||||
background: -webkit-gradient(linear, 0 0, 0 100%, from(rgba(110, 127, 69, 1.0)), to(rgba(106, 123, 66, 1.0)));
|
||||
background: -moz-linear-gradient(top, rgba(110, 127, 69, 1.0), rgba(106, 123, 66, 1.0));
|
||||
}
|
||||
button:active, .buton:active, a.button:active {
|
||||
button:active, .button:active, a.button:active {
|
||||
text-decoration:none;
|
||||
background:#6a7b42;
|
||||
border:1px solid #487328;
|
||||
@@ -336,4 +336,4 @@ span.message {
|
||||
}
|
||||
.debug.message:before {
|
||||
content:"DEBUG » ";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -775,7 +775,7 @@ button:hover, .button:hover, a.button:hover {
|
||||
background: -moz-linear-gradient(top, rgba(110, 127, 69, 1.0), rgba(106, 123, 66, 1.0));
|
||||
}
|
||||
|
||||
button:active, .buton:active, a.button:active {
|
||||
button:active, .button:active, a.button:active {
|
||||
text-decoration:none;
|
||||
background:#6a7b42;
|
||||
border:1px solid #487328;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 14
|
||||
VisualStudioVersion = 14.0.24720.0
|
||||
VisualStudioVersion = 14.0.25420.1
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Modules", "Modules", "{E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5}"
|
||||
EndProject
|
||||
|
||||
@@ -76,7 +76,7 @@ namespace Orchard.Data.Migration.Schema {
|
||||
if (ex.IsFatal()) {
|
||||
throw;
|
||||
}
|
||||
throw new OrchardException(T("An unexpected error occured while executing the SQL statement: {0}", sql), ex); // Add the sql to the nested exception information
|
||||
throw new OrchardException(T("An unexpected error occurred while executing the SQL statement: {0}", sql), ex); // Add the sql to the nested exception information
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -55,12 +55,14 @@ namespace Orchard.Environment {
|
||||
var appBuilder = new AppBuilder();
|
||||
appBuilder.Properties["host.AppName"] = _shellSettings.Name;
|
||||
|
||||
var orderedMiddlewares = _owinMiddlewareProviders
|
||||
.SelectMany(p => p.GetOwinMiddlewares())
|
||||
.OrderBy(obj => obj.Priority, new FlatPositionComparer());
|
||||
using (var scope = _workContextAccessor.CreateWorkContextScope()) {
|
||||
var orderedMiddlewares = _owinMiddlewareProviders
|
||||
.SelectMany(p => p.GetOwinMiddlewares())
|
||||
.OrderBy(obj => obj.Priority, new FlatPositionComparer());
|
||||
|
||||
foreach (var middleware in orderedMiddlewares) {
|
||||
middleware.Configure(appBuilder);
|
||||
foreach (var middleware in orderedMiddlewares) {
|
||||
middleware.Configure(appBuilder);
|
||||
}
|
||||
}
|
||||
|
||||
// Register the Orchard middleware after all others.
|
||||
@@ -104,7 +106,7 @@ namespace Orchard.Environment {
|
||||
throw;
|
||||
}
|
||||
|
||||
Logger.Error(ex, "An unexpected error occured while terminating the Shell");
|
||||
Logger.Error(ex, "An unexpected error occurred while terminating the Shell");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@ namespace Orchard.Exceptions.Filters {
|
||||
}
|
||||
|
||||
public void OnActionExecuted(ActionExecutedContext filterContext) {
|
||||
// for exceptions which occured during the action execution
|
||||
// for exceptions which occurred during the action execution
|
||||
|
||||
// don't provide custom errors if the action has some custom code to handle exceptions
|
||||
if (!filterContext.ActionDescriptor.GetCustomAttributes(typeof(HandleErrorAttribute), false).Any()) {
|
||||
@@ -92,7 +92,7 @@ namespace Orchard.Exceptions.Filters {
|
||||
}
|
||||
|
||||
public void OnResultExecuted(ResultExecutedContext filterContext) {
|
||||
// for exceptions which occured during the action execution
|
||||
// for exceptions which occurred during the action execution
|
||||
|
||||
// don't provide custom errors if the action has some custom code to handle exceptions
|
||||
if (!filterContext.ExceptionHandled && filterContext.Exception != null) {
|
||||
|
||||
@@ -31,7 +31,7 @@ namespace Orchard.FileSystems.LockFile {
|
||||
return true;
|
||||
}
|
||||
catch {
|
||||
// an error occured while reading/creating the lock file
|
||||
// an error occurred while reading/creating the lock file
|
||||
return false;
|
||||
}
|
||||
finally {
|
||||
@@ -46,7 +46,7 @@ namespace Orchard.FileSystems.LockFile {
|
||||
return IsLockedImpl(path);
|
||||
}
|
||||
catch {
|
||||
// an error occured while reading the file
|
||||
// an error occurred while reading the file
|
||||
return true;
|
||||
}
|
||||
finally {
|
||||
|
||||
@@ -45,7 +45,7 @@ namespace Orchard.Messaging.Services {
|
||||
if (ex.IsFatal()) {
|
||||
throw;
|
||||
}
|
||||
Logger.Error(ex, "An error occured while sending the message {0}", type);
|
||||
Logger.Error(ex, "An error occurred while sending the message {0}", type);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,7 +68,7 @@ namespace Orchard.Messaging.Services {
|
||||
if (ex.IsFatal()) {
|
||||
throw;
|
||||
}
|
||||
Logger.Error(ex, "An error occured while sending the message {0}", type);
|
||||
Logger.Error(ex, "An error occurred while sending the message {0}", type);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user