diff --git a/Assets/Docs/Architecture/Sax-Online-AjaxCalls.xlsx b/Assets/Docs/Architecture/Sax-Online-AjaxCalls.xlsx
new file mode 100644
index 0000000..d1833df
Binary files /dev/null and b/Assets/Docs/Architecture/Sax-Online-AjaxCalls.xlsx differ
diff --git a/ReadMe.md b/ReadMe.md
index 94e0f33..052dfa6 100644
--- a/ReadMe.md
+++ b/ReadMe.md
@@ -46,11 +46,12 @@ The type of activity determines the sequence and period for which they are prese
##### Icons
-* Where to find icons: https://www.canva.com/learn/free-icons-download/
-* https://icons8.com
-* https://www.smashingmagazine.com/category/freebies
-* https://goodstuffnononsense.com/icons-category/free/
-* https://www.iconfinder.com/
+- **Bootstrap**: https://icons.getbootstrap.com/
+- Where to find icons: https://www.canva.com/learn/free-icons-download/
+- https://icons8.com
+- https://www.smashingmagazine.com/category/freebies
+- https://goodstuffnononsense.com/icons-category/free/
+- https://www.iconfinder.com/
##### Animated gifs
@@ -60,16 +61,17 @@ The type of activity determines the sequence and period for which they are prese
##### HTML Editor Controls
-* RoosterJS
- * https://github.com/microsoft/roosterjs
- * https://github.com/microsoft/roosterjs/wiki/How-to-use
- * https://github.com/microsoft/roosterjs/wiki#useful-links
- * https://www.npmjs.com/package/roosterjs - distribution files.
- * https://registry.npmjs.org/roosterjs/latest - dist - tarball for download URL.
- * Download specific version: https://registry.npmjs.org/roosterjs/-/roosterjs-8.41.0.tgz
-* TinyMCE
- * NuGet package available but effectively doesn nothing - no longer able to copy script filles to aapplication folders.
- * Manually copy files from: https://www.tiny.cloud/get-tiny/self-hosted/
+- RoosterJS
+ - https://github.com/microsoft/roosterjs
+ - https://github.com/microsoft/roosterjs/wiki/How-to-use
+ - https://github.com/microsoft/roosterjs/wiki#useful-links
+ - https://github.com/microsoft/roosterjs/tree/master/packages/roosterjs-editor-api/lib/format - styling interface.
+ - https://www.npmjs.com/package/roosterjs - distribution files.
+ - https://registry.npmjs.org/roosterjs/latest - dist - tarball for download URL.
+ - Download specific version: https://registry.npmjs.org/roosterjs/-/roosterjs-8.41.0.tgz
+- TinyMCE
+ - NuGet package available but effectively doesn nothing - no longer able to copy script filles to aapplication folders.
+ - Manually copy files from: https://www.tiny.cloud/get-tiny/self-hosted/
###### TinyMCE
diff --git a/SaxoniteCoreWebAdmin/Views/Support/UserReport/Index.cshtml b/SaxoniteCoreWebAdmin/Views/Support/UserReport/Index.cshtml
index 5f1a886..79649f9 100644
--- a/SaxoniteCoreWebAdmin/Views/Support/UserReport/Index.cshtml
+++ b/SaxoniteCoreWebAdmin/Views/Support/UserReport/Index.cshtml
@@ -4,7 +4,6 @@
/* User Report - Index */
ViewData["Title"] = "User Reports";
Model.AdditionalFiles_JS.Add("js/sax-spt-rpt.js");
- Model.AdditionalFiles_JS.Add("rjs/rooster-min.js");
}
diff --git a/SaxoniteCoreWebAdmin/Views/Support/UserReport/Panel-UserReportDialog.cshtml b/SaxoniteCoreWebAdmin/Views/Support/UserReport/Panel-UserReportDialog.cshtml
index b68313c..cd33b8e 100644
--- a/SaxoniteCoreWebAdmin/Views/Support/UserReport/Panel-UserReportDialog.cshtml
+++ b/SaxoniteCoreWebAdmin/Views/Support/UserReport/Panel-UserReportDialog.cshtml
@@ -3,6 +3,7 @@
@{
/* Support - User Report dialog */
Model.AdditionalFiles_CSS.Add("rjs/sax-rjs.css");
+ Model.AdditionalFiles_JS.Add("rjs/rooster-min.js");
Model.AdditionalFiles_JS.Add("rjs/sax-rjs.js");
}
@@ -22,7 +23,7 @@
@* User Report form *@
- @using (@Html.BeginForm(FormMethod.Post, new { @id = "frmUserReport", @class = "sax-form", @onSubmit = "return false;" }))
+ @using (@Html.BeginForm(FormMethod.Post, new { @id = "frmUserReport", @class = "sax-form", @autocomplete = "off", @onSubmit = "return false;" }))
{
@Html.HiddenFor(model => model.UserReport.Id, new { @class = "UserReportId" })
@Html.HiddenFor(model => model.UserReport.Exists, new { @class = "UserReportExists" })
@@ -73,7 +74,7 @@
@Html.HiddenFor(model => model.UserReport.Report, new { @id = "ifUserReportReport", @class = "UserReportReport sax-input" })
diff --git a/SaxoniteCoreWebAdmin/wwwroot/favicon.ico b/SaxoniteCoreWebAdmin/wwwroot/favicon.ico
index bf89086..274cb10 100644
Binary files a/SaxoniteCoreWebAdmin/wwwroot/favicon.ico and b/SaxoniteCoreWebAdmin/wwwroot/favicon.ico differ
diff --git a/SaxoniteCoreWebAdmin/wwwroot/img/Bootstrap/icon/indent.svg b/SaxoniteCoreWebAdmin/wwwroot/img/Bootstrap/icon/indent.svg
new file mode 100644
index 0000000..025acef
--- /dev/null
+++ b/SaxoniteCoreWebAdmin/wwwroot/img/Bootstrap/icon/indent.svg
@@ -0,0 +1,4 @@
+
\ No newline at end of file
diff --git a/SaxoniteCoreWebAdmin/wwwroot/img/Bootstrap/icon/list-ol.svg b/SaxoniteCoreWebAdmin/wwwroot/img/Bootstrap/icon/list-ol.svg
new file mode 100644
index 0000000..5782568
--- /dev/null
+++ b/SaxoniteCoreWebAdmin/wwwroot/img/Bootstrap/icon/list-ol.svg
@@ -0,0 +1,4 @@
+
\ No newline at end of file
diff --git a/SaxoniteCoreWebAdmin/wwwroot/img/Bootstrap/icon/list-ul.svg b/SaxoniteCoreWebAdmin/wwwroot/img/Bootstrap/icon/list-ul.svg
new file mode 100644
index 0000000..217d153
--- /dev/null
+++ b/SaxoniteCoreWebAdmin/wwwroot/img/Bootstrap/icon/list-ul.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/SaxoniteCoreWebAdmin/wwwroot/img/Bootstrap/icon/text-indent-left.svg b/SaxoniteCoreWebAdmin/wwwroot/img/Bootstrap/icon/text-indent-left.svg
new file mode 100644
index 0000000..34d8c55
--- /dev/null
+++ b/SaxoniteCoreWebAdmin/wwwroot/img/Bootstrap/icon/text-indent-left.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/SaxoniteCoreWebAdmin/wwwroot/img/Bootstrap/icon/text-indent-right.svg b/SaxoniteCoreWebAdmin/wwwroot/img/Bootstrap/icon/text-indent-right.svg
new file mode 100644
index 0000000..fdd837f
--- /dev/null
+++ b/SaxoniteCoreWebAdmin/wwwroot/img/Bootstrap/icon/text-indent-right.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/SaxoniteCoreWebAdmin/wwwroot/img/Bootstrap/icon/type-bold.svg b/SaxoniteCoreWebAdmin/wwwroot/img/Bootstrap/icon/type-bold.svg
new file mode 100644
index 0000000..276d133
--- /dev/null
+++ b/SaxoniteCoreWebAdmin/wwwroot/img/Bootstrap/icon/type-bold.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/SaxoniteCoreWebAdmin/wwwroot/img/Bootstrap/icon/type-h1.svg b/SaxoniteCoreWebAdmin/wwwroot/img/Bootstrap/icon/type-h1.svg
new file mode 100644
index 0000000..4c89181
--- /dev/null
+++ b/SaxoniteCoreWebAdmin/wwwroot/img/Bootstrap/icon/type-h1.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/SaxoniteCoreWebAdmin/wwwroot/img/Bootstrap/icon/type-h2.svg b/SaxoniteCoreWebAdmin/wwwroot/img/Bootstrap/icon/type-h2.svg
new file mode 100644
index 0000000..b6ab765
--- /dev/null
+++ b/SaxoniteCoreWebAdmin/wwwroot/img/Bootstrap/icon/type-h2.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/SaxoniteCoreWebAdmin/wwwroot/img/Bootstrap/icon/type-h3.svg b/SaxoniteCoreWebAdmin/wwwroot/img/Bootstrap/icon/type-h3.svg
new file mode 100644
index 0000000..154c293
--- /dev/null
+++ b/SaxoniteCoreWebAdmin/wwwroot/img/Bootstrap/icon/type-h3.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/SaxoniteCoreWebAdmin/wwwroot/img/Bootstrap/icon/type-italic.svg b/SaxoniteCoreWebAdmin/wwwroot/img/Bootstrap/icon/type-italic.svg
new file mode 100644
index 0000000..3ac6b09
--- /dev/null
+++ b/SaxoniteCoreWebAdmin/wwwroot/img/Bootstrap/icon/type-italic.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/SaxoniteCoreWebAdmin/wwwroot/img/Bootstrap/icon/type-strikethrough.svg b/SaxoniteCoreWebAdmin/wwwroot/img/Bootstrap/icon/type-strikethrough.svg
new file mode 100644
index 0000000..1c940e4
--- /dev/null
+++ b/SaxoniteCoreWebAdmin/wwwroot/img/Bootstrap/icon/type-strikethrough.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/SaxoniteCoreWebAdmin/wwwroot/img/Bootstrap/icon/type-underline.svg b/SaxoniteCoreWebAdmin/wwwroot/img/Bootstrap/icon/type-underline.svg
new file mode 100644
index 0000000..c299b8b
--- /dev/null
+++ b/SaxoniteCoreWebAdmin/wwwroot/img/Bootstrap/icon/type-underline.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/SaxoniteCoreWebAdmin/wwwroot/img/Bootstrap/icon/type.svg b/SaxoniteCoreWebAdmin/wwwroot/img/Bootstrap/icon/type.svg
new file mode 100644
index 0000000..9ab1e4c
--- /dev/null
+++ b/SaxoniteCoreWebAdmin/wwwroot/img/Bootstrap/icon/type.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/SaxoniteCoreWebAdmin/wwwroot/img/Bootstrap/icon/unindent.svg b/SaxoniteCoreWebAdmin/wwwroot/img/Bootstrap/icon/unindent.svg
new file mode 100644
index 0000000..1969283
--- /dev/null
+++ b/SaxoniteCoreWebAdmin/wwwroot/img/Bootstrap/icon/unindent.svg
@@ -0,0 +1,4 @@
+
\ No newline at end of file
diff --git a/SaxoniteCoreWebAdmin/wwwroot/rjs/sax-rjs.css b/SaxoniteCoreWebAdmin/wwwroot/rjs/sax-rjs.css
index c911938..b942b3c 100644
--- a/SaxoniteCoreWebAdmin/wwwroot/rjs/sax-rjs.css
+++ b/SaxoniteCoreWebAdmin/wwwroot/rjs/sax-rjs.css
@@ -16,8 +16,10 @@
.rjs-editor
{
- padding:4px 8px 4px 8px;
- overflow-y:scroll;
+ min-height: 96px;
+ max-height: 256px;
+ padding: 4px 8px 4px 8px;
+ overflow-y: scroll;
}
.rjs-editor:focus
@@ -27,16 +29,74 @@
.rjs-toolbar
{
- display:none;
- min-height:24px;
- padding:2px 4px 4px 4px;
- border-top:1px solid #808080;
- overflow:hidden;
+ display: none;
+ min-height: 16px;
+ padding: 2px 4px 2px 4px;
+ line-height: 0;
+ border-top: 1px solid #808080;
+ overflow: hidden;
}
.rjs-container.rjs-editing .rjs-toolbar
{
- display:block;
+ display: block;
+}
+
+.rjs-toolbar .rjs-action
+{
+ display: inline-block;
+ width: 24px;
+ height: 24px;
+ margin: 0 1px;
+ border: 1px solid transparent;
+ border-radius: 4px;
+ background-position: center center;
+ background-repeat: no-repeat;
+}
+
+.rjs-toolbar .rjs-action:hover
+{
+ border-color: #b0b0b0;
+}
+
+.rjs-toolbar .rjs-action.rjs-bold
+{
+ background-image: url("/img/Bootstrap/icon/type-bold.svg");
+}
+
+.rjs-toolbar .rjs-action.rjs-italic
+{
+ background-image: url("/img/Bootstrap/icon/type-italic.svg");
+}
+
+.rjs-toolbar .rjs-action.rjs-underline
+{
+ background-image: url("/img/Bootstrap/icon/type-underline.svg");
+}
+
+.rjs-toolbar .rjs-action.rjs-text
+{
+ background-image: url("/img/Bootstrap/icon/type-text.svg");
+}
+
+.rjs-toolbar .rjs-action.rjs-indent
+{
+ background-image: url("/img/Bootstrap/icon/indent.svg");
+}
+
+.rjs-toolbar .rjs-action.rjs-unindent
+{
+ background-image: url("/img/Bootstrap/icon/unindent.svg");
+}
+
+.rjs-toolbar .rjs-action.rjs-list-number
+{
+ background-image: url("/img/Bootstrap/icon/list-ol.svg");
+}
+
+.rjs-toolbar .rjs-action.rjs-list-bullit
+{
+ background-image: url("/img/Bootstrap/icon/list-ul.svg");
}
/* The End */
diff --git a/SaxoniteCoreWebAdmin/wwwroot/rjs/sax-rjs.js b/SaxoniteCoreWebAdmin/wwwroot/rjs/sax-rjs.js
index 1a5c15e..6d2c7c7 100644
--- a/SaxoniteCoreWebAdmin/wwwroot/rjs/sax-rjs.js
+++ b/SaxoniteCoreWebAdmin/wwwroot/rjs/sax-rjs.js
@@ -9,21 +9,38 @@
//--------------------------------------------------------------
rjs.init = function ($pnl, $inp, data)
{
+ let $con = $pnl.closest(".rjs-container");
+ let $tb = $('.rjs-toolbar', $con).empty();
let editor = roosterjs.createEditor($pnl[0], [], data);
- $pnl.off('focus').on('focus', function () { rjs.onFocusEditor($pnl, editor, $inp); });
- $pnl.off('blur').on('blur', function () { rjs.onBlurEditor($pnl, editor, $inp); });
+ $pnl.off('focus').on('focus', function (evt) { rjs.onFocusEditor(evt, $pnl, $con, $tb, editor, $inp); });
+ $pnl.off('blur').on('blur', function (evt) { rjs.onBlurEditor(evt, $pnl, $con, $tb, editor, $inp); });
+ rjs.initToolbar($pnl, $tb, editor);
return editor;
}
- rjs.onFocusEditor = function ($pnl, rjsEd, $inp)
+ rjs.initToolbar = function ($pnl, $tb, ed)
{
- //sax.debug('rjs.onFocusEditor', $pnl, rjsEd, $inp);
- $pnl.closest(".rjs-container").addClass("rjs-editing");
+ $tb.off('click').on('click', function () { $pnl.focus(); });
+ rjs.addTbAction($pnl, $tb, 'bold', 'Bold', function () { roosterjs.toggleBold(ed); });
+ rjs.addTbAction($pnl, $tb, 'italic', 'Italic', function () { roosterjs.toggleItalic(ed); });
+ rjs.addTbAction($pnl, $tb, 'underline', 'Underline', function () { roosterjs.toggleUnderline(ed); });
+ rjs.addTbAction($pnl, $tb, 'list-number', 'Numbered list', function () { roosterjs.toggleNumbering(ed); });
+ rjs.addTbAction($pnl, $tb, 'list-bullit', 'Bullit list', function () { roosterjs.toggleBullet(ed); });
+ rjs.addTbAction($pnl, $tb, 'indent', 'Indent', function () { roosterjs.setIndentation(ed, 0); });
+ rjs.addTbAction($pnl, $tb, 'unindent', 'Unindent', function () { roosterjs.setIndentation(ed, 1); });
}
- rjs.onBlurEditor = function ($pnl, rjsEd, $inp)
+ rjs.addTbAction = function ($pnl, $tb, act, ttl, fn)
{
- //sax.debug('rjs.onBlurEditor');
- $pnl.closest(".rjs-container").removeClass("rjs-editing");
- while ($pnl.children().length>1)
+ $tb.append($('
').addClass('rjs-action rjs-' + act).prop('title', ttl).prop('tabindex',9).on('click', fn));
+ }
+ rjs.onFocusEditor = function (evt, $pnl, $con, $tb, rjsEd, $inp)
+ {
+ $con.addClass("rjs-editing");
+ }
+ rjs.onBlurEditor = function (evt, $pnl, $con, $tb, rjsEd, $inp)
+ {
+ if ($.contains($con[0],evt.relatedTarget)) return;
+ $con.removeClass("rjs-editing");
+ while ($pnl.children().length > 1)
{
let lc = $pnl.children().last();
if (!lc || lc.text().trim().length) break;
@@ -32,9 +49,7 @@
$inp.val($pnl.html());
}
//--------------------------------------------------------------
- $(function ()
- {
- });
+ //$(function (){});
//--------------------------------------------------------------
}(window, window.document));
/* The End */
\ No newline at end of file
diff --git a/SaxoniteCoreWebOnline/SaxoniteCoreWebOnline.csproj b/SaxoniteCoreWebOnline/SaxoniteCoreWebOnline.csproj
index 1158bc2..78f6672 100644
--- a/SaxoniteCoreWebOnline/SaxoniteCoreWebOnline.csproj
+++ b/SaxoniteCoreWebOnline/SaxoniteCoreWebOnline.csproj
@@ -39,6 +39,10 @@
true
PreserveNewest
+
+ true
+ PreserveNewest
+
diff --git a/SaxoniteCoreWebOnline/Views/Support/Feedback.cshtml b/SaxoniteCoreWebOnline/Views/Support/Feedback.cshtml
index 4d5d7a3..666deee 100644
--- a/SaxoniteCoreWebOnline/Views/Support/Feedback.cshtml
+++ b/SaxoniteCoreWebOnline/Views/Support/Feedback.cshtml
@@ -3,7 +3,9 @@
@{
// Online - Support - Feedback.
ViewData["Title"] = "Support - Feedback";
- // Scripts.
+ Model.AdditionalFiles_CSS.Add("rjs/sax-rjs.css");
+ Model.AdditionalFiles_JS.Add("rjs/rooster-min.js");
+ Model.AdditionalFiles_JS.Add("rjs/sax-rjs.js");
Model.AdditionalFiles_JS.Add("js/sax-spt-rpt.js");
}
@@ -110,7 +112,7 @@
@* User Report dialog *@
- @using (Html.BeginForm(FormMethod.Post, new { @id = "frmUserReport", @class = "sax-form", @onSubmit = "return false;" }))
+ @using (Html.BeginForm(FormMethod.Post, new { @id = "frmUserReport", @class = "sax-form", @autocomplete = "off", @onSubmit = "return false;" }))
{
@Html.HiddenFor(model => model.UserReport.Id, new { @id = "", @class = "UserReportId" })
@Html.HiddenFor(model => model.UserReport.Exists, new { @id = "", @class = "UserReportExists" })
@@ -143,7 +145,7 @@
- @Html.TextBoxFor(model => model.UserReport.Title, new { @id = "ifUserReportTitle", @class = "UserReportTitle sax-input", @maxlength = @Model.GetControlMaxLength(SaxDbDfn_Support.ColumnIdx.UserReport_Report) })
+ @Html.TextBoxFor(model => model.UserReport.Title, new { @id = "ifUserReportTitle", @class = "UserReportTitle sax-input", @maxlength = @Model.GetControlMaxLength(SaxDbDfn_Support.ColumnIdx.UserReport_Title) })
@@ -160,7 +162,11 @@
- @Html.TextAreaFor(model => model.UserReport.Report, new { @id = "ifUserReportReport", @class = "UserReportReport sax-textarea", @rows = 15, @maxlength = @Model.GetControlMaxLength(SaxDbDfn_Support.ColumnIdx.UserReport_Report) })
+ @Html.HiddenFor(model => model.UserReport.Report, new { @id = "ifUserReportReport", @class = "UserReportReport sax-input" })
+
diff --git a/SaxoniteCoreWebOnline/wwwroot/css/sax-base.css b/SaxoniteCoreWebOnline/wwwroot/css/sax-base.css
index 14dd841..189264d 100644
--- a/SaxoniteCoreWebOnline/wwwroot/css/sax-base.css
+++ b/SaxoniteCoreWebOnline/wwwroot/css/sax-base.css
@@ -2,11 +2,13 @@
Base stylesheet.
*/
+@import url('https://fonts.googleapis.com/css2?family=Work+Sans&display=swap');
+
body
{
margin: 0;
padding: 0;
- font-family: Verdana, Helvetica, Arial, sans-serif;
+ font-family: 'Work Sans', Verdana, Helvetica, Arial, sans-serif;
font-size: 1rem;
line-height: 1.25rem;
background-color: #fff;
diff --git a/SaxoniteCoreWebOnline/wwwroot/css/sax-main.css b/SaxoniteCoreWebOnline/wwwroot/css/sax-main.css
index ba2cab3..4805769 100644
--- a/SaxoniteCoreWebOnline/wwwroot/css/sax-main.css
+++ b/SaxoniteCoreWebOnline/wwwroot/css/sax-main.css
@@ -49,7 +49,7 @@ html
body
{
- font-family: Verdana, Helvetica, Arial, Lucida, sans-serif;
+ font-family: 'Work Sans', Verdana, Helvetica, Arial, Lucida, sans-serif;
background-color: #e9edf6;
}
diff --git a/SaxoniteCoreWebOnline/wwwroot/img/Bootstrap/icon/indent.svg b/SaxoniteCoreWebOnline/wwwroot/img/Bootstrap/icon/indent.svg
new file mode 100644
index 0000000..025acef
--- /dev/null
+++ b/SaxoniteCoreWebOnline/wwwroot/img/Bootstrap/icon/indent.svg
@@ -0,0 +1,4 @@
+
\ No newline at end of file
diff --git a/SaxoniteCoreWebOnline/wwwroot/img/Bootstrap/icon/list-ol.svg b/SaxoniteCoreWebOnline/wwwroot/img/Bootstrap/icon/list-ol.svg
new file mode 100644
index 0000000..5782568
--- /dev/null
+++ b/SaxoniteCoreWebOnline/wwwroot/img/Bootstrap/icon/list-ol.svg
@@ -0,0 +1,4 @@
+
\ No newline at end of file
diff --git a/SaxoniteCoreWebOnline/wwwroot/img/Bootstrap/icon/list-ul.svg b/SaxoniteCoreWebOnline/wwwroot/img/Bootstrap/icon/list-ul.svg
new file mode 100644
index 0000000..217d153
--- /dev/null
+++ b/SaxoniteCoreWebOnline/wwwroot/img/Bootstrap/icon/list-ul.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/SaxoniteCoreWebOnline/wwwroot/img/Bootstrap/icon/text-indent-left.svg b/SaxoniteCoreWebOnline/wwwroot/img/Bootstrap/icon/text-indent-left.svg
new file mode 100644
index 0000000..34d8c55
--- /dev/null
+++ b/SaxoniteCoreWebOnline/wwwroot/img/Bootstrap/icon/text-indent-left.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/SaxoniteCoreWebOnline/wwwroot/img/Bootstrap/icon/text-indent-right.svg b/SaxoniteCoreWebOnline/wwwroot/img/Bootstrap/icon/text-indent-right.svg
new file mode 100644
index 0000000..fdd837f
--- /dev/null
+++ b/SaxoniteCoreWebOnline/wwwroot/img/Bootstrap/icon/text-indent-right.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/SaxoniteCoreWebOnline/wwwroot/img/Bootstrap/icon/type-bold.svg b/SaxoniteCoreWebOnline/wwwroot/img/Bootstrap/icon/type-bold.svg
new file mode 100644
index 0000000..276d133
--- /dev/null
+++ b/SaxoniteCoreWebOnline/wwwroot/img/Bootstrap/icon/type-bold.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/SaxoniteCoreWebOnline/wwwroot/img/Bootstrap/icon/type-h1.svg b/SaxoniteCoreWebOnline/wwwroot/img/Bootstrap/icon/type-h1.svg
new file mode 100644
index 0000000..4c89181
--- /dev/null
+++ b/SaxoniteCoreWebOnline/wwwroot/img/Bootstrap/icon/type-h1.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/SaxoniteCoreWebOnline/wwwroot/img/Bootstrap/icon/type-h2.svg b/SaxoniteCoreWebOnline/wwwroot/img/Bootstrap/icon/type-h2.svg
new file mode 100644
index 0000000..b6ab765
--- /dev/null
+++ b/SaxoniteCoreWebOnline/wwwroot/img/Bootstrap/icon/type-h2.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/SaxoniteCoreWebOnline/wwwroot/img/Bootstrap/icon/type-h3.svg b/SaxoniteCoreWebOnline/wwwroot/img/Bootstrap/icon/type-h3.svg
new file mode 100644
index 0000000..154c293
--- /dev/null
+++ b/SaxoniteCoreWebOnline/wwwroot/img/Bootstrap/icon/type-h3.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/SaxoniteCoreWebOnline/wwwroot/img/Bootstrap/icon/type-italic.svg b/SaxoniteCoreWebOnline/wwwroot/img/Bootstrap/icon/type-italic.svg
new file mode 100644
index 0000000..3ac6b09
--- /dev/null
+++ b/SaxoniteCoreWebOnline/wwwroot/img/Bootstrap/icon/type-italic.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/SaxoniteCoreWebOnline/wwwroot/img/Bootstrap/icon/type-strikethrough.svg b/SaxoniteCoreWebOnline/wwwroot/img/Bootstrap/icon/type-strikethrough.svg
new file mode 100644
index 0000000..1c940e4
--- /dev/null
+++ b/SaxoniteCoreWebOnline/wwwroot/img/Bootstrap/icon/type-strikethrough.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/SaxoniteCoreWebOnline/wwwroot/img/Bootstrap/icon/type-underline.svg b/SaxoniteCoreWebOnline/wwwroot/img/Bootstrap/icon/type-underline.svg
new file mode 100644
index 0000000..c299b8b
--- /dev/null
+++ b/SaxoniteCoreWebOnline/wwwroot/img/Bootstrap/icon/type-underline.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/SaxoniteCoreWebOnline/wwwroot/img/Bootstrap/icon/type.svg b/SaxoniteCoreWebOnline/wwwroot/img/Bootstrap/icon/type.svg
new file mode 100644
index 0000000..9ab1e4c
--- /dev/null
+++ b/SaxoniteCoreWebOnline/wwwroot/img/Bootstrap/icon/type.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/SaxoniteCoreWebOnline/wwwroot/img/Bootstrap/icon/unindent.svg b/SaxoniteCoreWebOnline/wwwroot/img/Bootstrap/icon/unindent.svg
new file mode 100644
index 0000000..1969283
--- /dev/null
+++ b/SaxoniteCoreWebOnline/wwwroot/img/Bootstrap/icon/unindent.svg
@@ -0,0 +1,4 @@
+
\ No newline at end of file
diff --git a/SaxoniteCoreWebOnline/wwwroot/js/sax-spt-rpt.js b/SaxoniteCoreWebOnline/wwwroot/js/sax-spt-rpt.js
index 876673b..2ac38d5 100644
--- a/SaxoniteCoreWebOnline/wwwroot/js/sax-spt-rpt.js
+++ b/SaxoniteCoreWebOnline/wwwroot/js/sax-spt-rpt.js
@@ -4,7 +4,7 @@
(function (win, doc, undef)
{
"use strict";
- let sf = sax.mdl.supportFeedback = sax.mdl.supportFeedback || { data: {}, ajax: {} };
+ let sf = sax.mdl.supportFeedback = sax.mdl.supportFeedback || { data: {}, ajax: {}, rjs: {}, $ctrl: {} };
let $pnl = sf.$pnl = {}, $dlg = sf.$dlg = {}, $frm = sf.$frm = {};
//--------------------------------------------------------------
sf.refreshResults = function (delay)
@@ -96,6 +96,7 @@
{
sf.clearItem();
$('#cbReportType', $frm.rpt).prepend($("