NopStation plugins
|
|
@ -0,0 +1,94 @@
|
|||
@model IEnumerable<PluginInfoModel>
|
||||
|
||||
@{
|
||||
Layout = "_AdminLayout";
|
||||
|
||||
//page title
|
||||
ViewBag.PageTitle = T("Admin.NopStation.Core.AssemblyInfo").Text;
|
||||
//active menu item (system name)
|
||||
NopHtml.SetActiveMenuItemSystemName("NopStationCore.AssemblyInfo");
|
||||
|
||||
var i = 1;
|
||||
}
|
||||
|
||||
<style>
|
||||
.plugin-item {
|
||||
border-bottom: 1px solid #eee;
|
||||
padding: 15px 10px;
|
||||
}
|
||||
|
||||
.plugin-item span.a-version {
|
||||
background: yellow;
|
||||
padding: 0px 9px;
|
||||
border-radius: 10px;
|
||||
font-weight: normal;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.plugin-item span.f-version {
|
||||
background: #80FF00;
|
||||
padding: 0px 9px;
|
||||
border-radius: 10px;
|
||||
font-weight: normal;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.plugin-item span.build {
|
||||
background: green;
|
||||
padding: 0px 9px;
|
||||
border-radius: 10px;
|
||||
font-weight: normal;
|
||||
color: white;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.plugin-item-flie {
|
||||
color: white;
|
||||
background: #03a1db;
|
||||
width: fit-content;
|
||||
padding: 0 8px;
|
||||
border-radius: 10px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="content-header clearfix">
|
||||
<h1 class="float-left">
|
||||
@T("Admin.NopStation.Core.AssemblyInfo")
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
<div class="form-horizontal">
|
||||
<div class="cards-group">
|
||||
<div class="card card-default">
|
||||
<div class="card-body">
|
||||
@foreach (var item in Model)
|
||||
{
|
||||
<div class="plugin-item">
|
||||
<div style="font-weight: bold;">
|
||||
@(i++.ToString("00")). @item.AssemblyName
|
||||
<span class="a-version">Assembly version=@(item.AssemblyVersion)</span>
|
||||
<span class="f-version">File version=@(item.FileVersion)</span>
|
||||
@if (!string.IsNullOrWhiteSpace(item.BuildType))
|
||||
{
|
||||
<span class="build">Build=@(item.BuildType)</span>
|
||||
}
|
||||
</div>
|
||||
<i>@item.FilePath</i>
|
||||
<div class="plugin-item-flie">@item.FileName</div>
|
||||
<div class="plugin-item-description">@item.Description</div>
|
||||
<span>
|
||||
<span style="font-weight: bold">Created on:</span>
|
||||
@item.CreatedOn.ToLongDateString()
|
||||
@item.CreatedOn.ToLongTimeString()
|
||||
@item.CreatedOn.ToString("\"GMT\" zzz")
|
||||
</span>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
|
@ -0,0 +1,73 @@
|
|||
@model ConfigurationModel
|
||||
|
||||
@{
|
||||
Layout = "_AdminLayout";
|
||||
NopHtml.SetActiveMenuItemSystemName("NopStationCore.Configure");
|
||||
|
||||
ViewBag.PageTitle = T("Admin.NopStation.Core.Configuration").Text;
|
||||
}
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$("#@Html.IdFor(model => model.RestrictMainMenuByCustomerRoles)").change(toggleRestrictMainMenuByCustomerRoles);
|
||||
|
||||
toggleRestrictMainMenuByCustomerRoles();
|
||||
});
|
||||
|
||||
function toggleRestrictMainMenuByCustomerRoles() {
|
||||
if ($('#@Html.IdFor(model => model.RestrictMainMenuByCustomerRoles)').is(':checked')) {
|
||||
$('#pnlAllowedCustomerRoleIds').show();
|
||||
} else {
|
||||
$('#pnlAllowedCustomerRoleIds').hide();
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<form asp-controller="NopStationCore" asp-action="Configure" method="post">
|
||||
<div class="content-header clearfix">
|
||||
<h1 class="float-left">
|
||||
@T("Admin.NopStation.Core.Configuration")
|
||||
</h1>
|
||||
<div class="float-right">
|
||||
<button type="submit" name="save" class="btn btn-primary">
|
||||
<i class="far fa-save"></i>
|
||||
@T("Admin.Common.Save")
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
<div class="form-horizontal">
|
||||
@await Component.InvokeAsync(typeof(StoreScopeConfigurationViewComponent))
|
||||
<div asp-validation-summary="All"></div>
|
||||
<div class="cards-group">
|
||||
<div class="card card-default">
|
||||
<div class="card-body">
|
||||
<div class="form-group row">
|
||||
<div class="col-md-3">
|
||||
<nop-override-store-checkbox asp-for="RestrictMainMenuByCustomerRoles_OverrideForStore" asp-input="RestrictMainMenuByCustomerRoles" asp-store-scope="@Model.ActiveStoreScopeConfiguration" />
|
||||
<nop-label asp-for="RestrictMainMenuByCustomerRoles" />
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<nop-editor asp-for="RestrictMainMenuByCustomerRoles" />
|
||||
</div>
|
||||
</div>
|
||||
<nop-nested-setting asp-for="RestrictMainMenuByCustomerRoles">
|
||||
<div class="form-group row" id="pnlAllowedCustomerRoleIds">
|
||||
<div class="col-md-3">
|
||||
<nop-label asp-for="AllowedCustomerRoleIds" />
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<nop-select asp-for="AllowedCustomerRoleIds" asp-items="Model.AvailableCustomerRoles" asp-multiple="true" />
|
||||
<span asp-validation-for="AllowedCustomerRoleIds"></span>
|
||||
</div>
|
||||
</div>
|
||||
</nop-nested-setting>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</form>
|
||||
|
|
@ -0,0 +1,131 @@
|
|||
@model CoreLocaleResourceSearchModel
|
||||
@inject AdminAreaSettings adminAreaSettings
|
||||
@using Nop.Web.Areas.Admin.Models.Localization
|
||||
|
||||
@{
|
||||
Layout = "_AdminLayout";
|
||||
|
||||
//page title
|
||||
ViewBag.PageTitle = T("Admin.NopStation.Core.LocaleResources").Text;
|
||||
//active menu item (system name)
|
||||
NopHtml.SetActiveMenuItemSystemName("NopStationCore.LocaleResources");
|
||||
}
|
||||
|
||||
@{
|
||||
const string hideSearchBlockAttributeName = "CoreLocaleResourcesPage.HideSearchBlock";
|
||||
var hideSearchBlock = await genericAttributeService.GetAttributeAsync<bool>(workContext.GetCurrentCustomerAsync().Result, hideSearchBlockAttributeName);
|
||||
}
|
||||
|
||||
<div class="content-header clearfix">
|
||||
<h1 class="float-left">
|
||||
@T("Admin.NopStation.Core.LocaleResources")
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
<div class="form-horizontal">
|
||||
<div class="cards-group">
|
||||
<div class="card card-default card-search">
|
||||
<div class="card-body">
|
||||
<div class="row search-row @(!hideSearchBlock ? "opened" : "")" data-hideAttribute="@hideSearchBlockAttributeName">
|
||||
<div class="search-text">@T("Admin.Common.Search")</div>
|
||||
<div class="icon-search"><i class="fas fa-search" aria-hidden="true"></i></div>
|
||||
<div class="icon-collapse"><i class="far fa-angle-@(!hideSearchBlock ? "up" : "down")" aria-hidden="true"></i></div>
|
||||
</div>
|
||||
|
||||
<div class="search-body @(hideSearchBlock ? "closed" : "")">
|
||||
<div class="row">
|
||||
<div class="col-md-5">
|
||||
<div class="form-group row">
|
||||
<div class="col-md-3">
|
||||
<nop-label asp-for="SearchResourceName" />
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<nop-editor asp-for="SearchResourceName" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<div class="col-md-3">
|
||||
<nop-label asp-for="SearchLanguageId" />
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<nop-select asp-for="SearchLanguageId" asp-items="Model.AvailableLanguages" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-7">
|
||||
<div class="form-group row">
|
||||
<div class="col-md-3">
|
||||
<nop-label asp-for="SearchPluginSystemName" />
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<nop-select asp-for="SearchPluginSystemName" asp-items="Model.AvailablePlugins" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-7 offset-md-5">
|
||||
<div class="form-group row">
|
||||
<button type="button" id="search-resource" class="btn btn-primary btn-search">
|
||||
<i class="fa fa-search"></i>
|
||||
@T("Admin.Common.Search")
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card card-body">
|
||||
@await Html.PartialAsync("Table", new DataTablesModel
|
||||
{
|
||||
Name = "resource-grid",
|
||||
UrlRead = new DataUrl("LocaleResource", "NopStationCore", null),
|
||||
UrlUpdate = new DataUrl("ResourceUpdate", "NopStationCore", null),
|
||||
Length = adminAreaSettings.DefaultGridPageSize,
|
||||
LengthMenu = adminAreaSettings.GridPageSizes,
|
||||
SearchButtonId = "search-resource",
|
||||
Filters = new List<FilterParameter>
|
||||
{
|
||||
new FilterParameter(nameof(Model.SearchLanguageId)),
|
||||
new FilterParameter(nameof(Model.SearchPluginSystemName)),
|
||||
new FilterParameter(nameof(Model.SearchResourceName))
|
||||
},
|
||||
ColumnCollection = new List<ColumnProperty>
|
||||
{
|
||||
new ColumnProperty(nameof(CoreLocaleResourceModel.ResourceName))
|
||||
{
|
||||
Title = T("Admin.NopStation.Core.Resources.Fields.Name").Text,
|
||||
Width = "200"
|
||||
},
|
||||
new ColumnProperty(nameof(CoreLocaleResourceModel.ResourceValue))
|
||||
{
|
||||
Title = T("Admin.NopStation.Core.Resources.Fields.Value").Text,
|
||||
Width = "300",
|
||||
Editable = true,
|
||||
EditType = EditType.String
|
||||
},
|
||||
new ColumnProperty(nameof(CoreLocaleResourceModel.LanguageId))
|
||||
{
|
||||
Title = T("Admin.NopStation.Core.Resources.Fields.Value").Text,
|
||||
Editable = true,
|
||||
EditType = EditType.Number,
|
||||
Visible = false
|
||||
},
|
||||
new ColumnProperty(nameof(CoreLocaleResourceModel.ResourceNameLanguageId))
|
||||
{
|
||||
Title = T("Admin.Common.Edit").Text,
|
||||
Width = "200",
|
||||
ClassName = NopColumnClassDefaults.Button,
|
||||
Render = new RenderButtonsInlineEdit()
|
||||
}
|
||||
}
|
||||
})
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
|
@ -0,0 +1,105 @@
|
|||
@using Nop.Web.Areas.Admin.Models.Security
|
||||
@using static Nop.Services.Common.NopLinksDefaults
|
||||
|
||||
@model PermissionConfigurationModel
|
||||
|
||||
@{
|
||||
Layout = "_AdminLayout";
|
||||
|
||||
//page title
|
||||
ViewBag.PageTitle = T("Admin.NopStation.Core.ACL").Text;
|
||||
//active menu item (system name)
|
||||
NopHtml.SetActiveMenuItemSystemName("NopStationCore.ACL");
|
||||
}
|
||||
|
||||
<style type="text/css">
|
||||
table.dataTable.table-hover>tbody>tr:hover>*{box-shadow:inset 0 0 0 9999px rgba(255, 255, 255, 1)}
|
||||
|
||||
table.dataTable.table-striped>tbody>tr.odd>*{box-shadow:inset 0 0 0 9999px rgba(0, 0, 0, 0.05)}
|
||||
</style>
|
||||
|
||||
<script type="text/javascript">
|
||||
$(function () {
|
||||
$('#permissions-grid').on( 'init.dt', function () {
|
||||
$('tr').css('bg-color', 'white');
|
||||
} );
|
||||
});
|
||||
</script>
|
||||
|
||||
<form asp-controller="NopStationCore" asp-action="Permissions" method="post" id="permissions-form">
|
||||
<div class="content-header clearfix">
|
||||
<div class="float-right">
|
||||
@await Component.InvokeAsync(typeof(AdminWidgetViewComponent), new { widgetZone = AdminWidgetZones.PermissionListButtons, additionalData = Model })
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
<div class="form-horizontal">
|
||||
<div class="cards-group">
|
||||
<div class="card card-default">
|
||||
<div class="card-body">
|
||||
<p>
|
||||
@T("Admin.Configuration.ACL.Description")
|
||||
<nop-doc-reference asp-string-resource="@T("Admin.Documentation.Reference.Acl", Docs.Acl + Utm.OnAdmin)" asp-add-wrapper="false" />
|
||||
</p>
|
||||
@if (!Model.IsPermissionsAvailable)
|
||||
{
|
||||
<text>@T("Admin.Configuration.ACL.NoPermissionsDefined")</text>
|
||||
}
|
||||
else if (!Model.AreCustomerRolesAvailable)
|
||||
{
|
||||
<text>@T("Admin.Configuration.ACL.NoCustomerRolesAvailable")</text>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="scroll-wrapper">
|
||||
@await Html.PartialAsync("Table", new DataTablesModel
|
||||
{
|
||||
Name = "permission-items-grid",
|
||||
UrlRead = new DataUrl("PermissionCategory", "Security", new RouteValueDictionary
|
||||
{
|
||||
[nameof(PermissionItemSearchModel.PermissionCategoryName)] = "NopStation"
|
||||
}),
|
||||
IsChildTable = true,
|
||||
Length = Model.PermissionCategorySearchModel.PageSize,
|
||||
LengthMenu = Model.PermissionCategorySearchModel.AvailablePageSizes,
|
||||
ColumnCollection = new List<ColumnProperty>
|
||||
{
|
||||
new(nameof(PermissionItemModel.PermissionName))
|
||||
{
|
||||
Title = T("Admin.Configuration.ACL.Permission.PermissionName").Text,
|
||||
Width = "400px"
|
||||
},
|
||||
new(nameof(PermissionItemModel.PermissionAppliedFor))
|
||||
{
|
||||
Title = T("Admin.Customers.CustomerRoles").Text,
|
||||
AutoWidth = true,
|
||||
Render = new RenderCustom("renderPermissionText")
|
||||
},
|
||||
new(nameof(PermissionItemModel.Id))
|
||||
{
|
||||
Title = T("Admin.Common.Edit").Text,
|
||||
Width = "100px",
|
||||
ClassName = NopColumnClassDefaults.Button,
|
||||
Render = new RenderCustom("renderPermissionEdit")
|
||||
},
|
||||
}
|
||||
})
|
||||
<script>
|
||||
function renderPermissionEdit(data, type, row, meta) {
|
||||
return '<button onclick=\"javascript:OpenWindow(\'@Url.Content("~/Admin/Security/PermissionEditPopup/")' + data + '\', 800, 300, true); return false;\" class="btn btn-default"><i class="fas fa-pencil"></i>@T("Admin.Common.Edit").Text</button>';
|
||||
}
|
||||
function renderPermissionText(data, type, row, meta) {
|
||||
return '<span id="permission-applied-for-' + row.Id + '">' + data + '</span>';
|
||||
}
|
||||
</script>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</form>
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
@model LicenseModel
|
||||
|
||||
@{
|
||||
Layout = "_AdminLayout";
|
||||
NopHtml.SetActiveMenuItemSystemName("NopStationCore.License");
|
||||
ViewBag.PageTitle = T("Admin.NopStation.Core.License").Text;
|
||||
}
|
||||
|
||||
<form asp-controller="NopStationLicense" asp-action="License" method="post">
|
||||
<div class="content-header clearfix">
|
||||
<h1 class="float-left">
|
||||
@T("Admin.NopStation.Core.License")
|
||||
</h1>
|
||||
<div class="float-right">
|
||||
<button type="submit" name="save" class="btn btn-primary">
|
||||
<i class="far fa-save"></i>
|
||||
@T("Admin.Common.Save")
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
<div class="form-horizontal">
|
||||
<div asp-validation-summary="All"></div>
|
||||
<div class="cards-group">
|
||||
<div class="card card-default">
|
||||
<div class="card-body">
|
||||
<div class="form-group row">
|
||||
<div class="col-md-3">
|
||||
<nop-label asp-for="LicenseString" />
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<nop-editor asp-for="LicenseString" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</form>
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
@model int
|
||||
@inject Nop.Services.Catalog.ICategoryService categoryService
|
||||
|
||||
<select class="form-control" data-placeholder="Search for a category" style="width: 100%" id="@Html.IdForModel()" name="@Html.NameForModel()">
|
||||
@if (Model > 0)
|
||||
{
|
||||
var category = await categoryService.GetCategoryByIdAsync(Model);
|
||||
if (category != null && !category.Deleted)
|
||||
{
|
||||
<option value="@Model" selected="selected">@(await categoryService.GetFormattedBreadCrumbAsync(category))</option>
|
||||
}
|
||||
}
|
||||
</select>
|
||||
|
||||
<script>
|
||||
$(document).ready(function () {
|
||||
$('#@Html.IdForModel()').select2({
|
||||
ajax: {
|
||||
url: '@(Url.Action("Categories", "Select2"))',
|
||||
dataType: 'json',
|
||||
data: function (params) {
|
||||
var query = {
|
||||
q: params.term,
|
||||
page: params.page || 1
|
||||
}
|
||||
return query;
|
||||
},
|
||||
processResults: function (data, params) {
|
||||
params.page = params.page || 1;
|
||||
|
||||
return data;
|
||||
},
|
||||
placeholder: 'Search for a category',
|
||||
minimumInputLength: 1
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
@model int
|
||||
@inject Nop.Services.Catalog.IManufacturerService manufacturerService
|
||||
|
||||
<select class="form-control" data-placeholder="Search for a manufacturer" style="width: 100%" id="@Html.IdForModel()" name="@Html.NameForModel()">
|
||||
@if (Model > 0)
|
||||
{
|
||||
var manufacturer = await manufacturerService.GetManufacturerByIdAsync(Model);
|
||||
if (manufacturer != null && !manufacturer.Deleted)
|
||||
{
|
||||
<option value="@Model" selected="selected">@manufacturer.Name</option>
|
||||
}
|
||||
}
|
||||
</select>
|
||||
|
||||
<script>
|
||||
$(document).ready(function () {
|
||||
$('#@Html.IdForModel()').select2({
|
||||
ajax: {
|
||||
url: '@(Url.Action("Manufacturers", "Select2"))',
|
||||
dataType: 'json',
|
||||
data: function (params) {
|
||||
var query = {
|
||||
q: params.term,
|
||||
page: params.page || 1
|
||||
}
|
||||
return query;
|
||||
},
|
||||
processResults: function (data, params) {
|
||||
params.page = params.page || 1;
|
||||
|
||||
return data;
|
||||
},
|
||||
minimumInputLength: 1
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
@model int
|
||||
@inject Nop.Services.Catalog.IProductService productService
|
||||
|
||||
<select class="form-control" data-placeholder="Search for a product" style="width: 100%" id="@Html.IdForModel()" name="@Html.NameForModel()">
|
||||
@if (Model > 0)
|
||||
{
|
||||
var product = await productService.GetProductByIdAsync(Model);
|
||||
if (product != null && !product.Deleted)
|
||||
{
|
||||
<option value="@Model" selected="selected">@product.Name</option>
|
||||
}
|
||||
}
|
||||
</select>
|
||||
|
||||
<script>
|
||||
$(document).ready(function () {
|
||||
$('#@Html.IdForModel()').select2({
|
||||
ajax: {
|
||||
url: '@(Url.Action("Products", "Select2"))',
|
||||
dataType: 'json',
|
||||
data: function (params) {
|
||||
var query = {
|
||||
q: params.term,
|
||||
page: params.page || 1
|
||||
}
|
||||
return query;
|
||||
},
|
||||
processResults: function (data, params) {
|
||||
params.page = params.page || 1;
|
||||
|
||||
return data;
|
||||
},
|
||||
minimumInputLength: 1
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
@model DateTime
|
||||
<input id="@Html.IdForModel()" name="@Html.NameForModel()" value="@((Model > DateTime.MinValue ? Model : DateTime.Today).ToString("hh:mm tt"))" type="date" class="form-control" />
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
@model DateTime?
|
||||
<input id="@Html.IdForModel()" name="@Html.NameForModel()" value="@(Model > DateTime.MinValue || Model.HasValue ? Model.Value.ToShortDateString() : null)" type="date" class="form-control" />
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
@inherits Nop.Web.Framework.Mvc.Razor.NopRazorPage<TModel>
|
||||
@inject Nop.Services.Common.IGenericAttributeService genericAttributeService
|
||||
@inject Nop.Core.IWorkContext workContext
|
||||
@inject INopHtmlHelper NopHtml
|
||||
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
|
||||
@addTagHelper *, Nop.Web.Framework
|
||||
@addTagHelper *, NopStation.Plugin.Misc.Actions
|
||||
|
||||
@using Microsoft.AspNetCore.Mvc.ViewFeatures
|
||||
@using Nop.Web.Framework.UI
|
||||
@using Nop.Web.Framework.Extensions
|
||||
@using System.Text.Encodings.Web
|
||||
@using Nop.Services.Events
|
||||
@using Nop.Web.Framework.Events
|
||||
@using Nop.Web.Framework.Infrastructure
|
||||
@using NopStation.Plugin.Misc.Core.Models
|
||||
@using Nop.Core.Domain.Common
|
||||
@using Nop.Web.Framework.Models.DataTables
|
||||
@using Microsoft.AspNetCore.Routing
|
||||
@using Microsoft.AspNetCore.Mvc.Rendering
|
||||
@using Nop.Core.Infrastructure
|
||||
@using Nop.Web.Areas.Admin.Components
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
@font-face {
|
||||
font-family: 'icomoon';
|
||||
src: url('/Plugins/NopStation.Core/contents/fonts/icomoon.eot?h5ssf6');
|
||||
src: url('/Plugins/NopStation.Core/contents/fonts/icomoon.eot?h5ssf6#iefix') format('embedded-opentype'), url('/Plugins/NopStation.Core/contents/fonts/icomoon.ttf?h5ssf6') format('truetype'), url('/Plugins/NopStation.Core/contents/fonts/icomoon.woff?h5ssf6') format('woff'), url('/Plugins/NopStation.Core/contents/fonts/icomoon.svg?h5ssf6#icomoon') format('svg');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
font-display: block;
|
||||
}
|
||||
|
||||
[class^="icon-"], [class*=" icon-"] {
|
||||
/* use !important to prevent issues with browser extensions that change fonts */
|
||||
font-family: 'icomoon' !important;
|
||||
speak: never;
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
font-variant: normal;
|
||||
text-transform: none;
|
||||
line-height: 1;
|
||||
/* Better Font Rendering =========== */
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
.icon-nop-station:before {
|
||||
content: "\e900";
|
||||
}
|
||||
|
||||
.icon-plugins:before {
|
||||
content: "\e901";
|
||||
}
|
||||
|
||||
.icon-themes:before {
|
||||
content: "\e902";
|
||||
}
|
||||
|
||||
.select2-container--default .select2-selection--single {
|
||||
border-radius: 0 !important;
|
||||
}
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<metadata>Generated by IcoMoon</metadata>
|
||||
<defs>
|
||||
<font id="icomoon" horiz-adv-x="1024">
|
||||
<font-face units-per-em="1024" ascent="960" descent="-64" />
|
||||
<missing-glyph horiz-adv-x="1024" />
|
||||
<glyph unicode=" " horiz-adv-x="512" d="" />
|
||||
<glyph unicode="" glyph-name="nopStation-logo" d="M156.212 589.382c-7.626-19.602-14.144-39.186-18.51-58.774 20.698 0 40.28-4.35 62.054-13.076l141.494-56.6c25.042-8.706 47.89-8.706 70.75 0 22.848 8.7 39.18 25.036 48.984 48.994l48.974 120.828c9.814 22.86 8.71 46.796-2.172 69.636-9.788 22.884-27.21 39.19-52.24 48.994l-109.924 43.54c-90.362-42.44-152.398-109.918-189.41-203.542zM431.594 822.316l45.724-18.51c40.264-14.158 68.566-42.446 87.076-80.534 17.41-38.096 18.51-76.188 3.262-114.306l-47.88-121.902c-16.326-38.096-43.55-65.306-82.726-80.558-39.19-15.238-78.396-15.238-117.556 0l-141.51 56.622c-58.506 19.080-53.114-4.524-48.83-50.464 5.166-55.24 21.308-107.578 49.908-157.43 38.108-67.504 98.406-121.932 168.066-155.668l12.64 37.018 180.68-71.834c121.928 8.7 216.598 63.128 286.254 161.072-1.078 8.706-3.256 18.51-7.606 30.486-10.878 22.864-28.308 40.274-53.324 48.974l-132.81 54.424c-3.492-1.756-6.99-2.788-9.938-3.144-4.104-1.14-8.458-1.73-12.932-1.73-26.66 0-48.28 21.58-48.28 48.246 0 26.686 21.622 48.292 48.28 48.292 22.392 0 41.204-15.212 46.652-35.874l131.864-53.612c23.958-8.706 47.896-8.706 72.932 0 10.882 5.45 20.682 10.882 29.386 19.608 18.51 106.674-3.25 202.44-67.484 291.684l-215.516 84.908 18.51 45.724 3.796 10.046c-38.476 11.088-78.314 17.394-118.348 17.394-26.792 0-53.666-2.824-80.29-8.932z" />
|
||||
<glyph unicode="" glyph-name="plugins" d="M897.282 293.888v-154.112c0-42.558-34.5-77.056-77.056-77.056h-154.112v77.056c0 42.558-34.5 77.056-77.056 77.056s-77.058-34.5-77.058-77.058v-77.056h-154.112c-42.558 0-77.056 34.5-77.056 77.056v154.112h-77.056c-42.558 0-77.056 34.5-77.056 77.056s34.498 77.058 77.054 77.058h77.056v154.112c0 42.382 34.676 77.056 77.056 77.056h154.114v77.056c0 42.558 34.5 77.056 77.056 77.056s77.056-34.5 77.056-77.056v-77.056h154.112c42.558 0 77.056-34.5 77.056-77.056v-154.112h-77.056c-42.558 0-77.056-34.5-77.056-77.056s34.5-77.056 77.056-77.056h77.058z" />
|
||||
<glyph unicode="" glyph-name="themes" d="M916 589.87c0 0.778-404.012 227.964-405.338 227.932-0.638-0.016-92.032-51.178-203.166-113.732s-201.92-113.964-201.816-114.284c0.234-0.716 402.332-232.71 404.32-233.276 1.324-0.378 406 232.22 406 233.36zM510.826 211.050l84.284 47.446c46.326 26.078 119.74 67.412 163.014 91.784 43.344 24.41 90.65 51.024 105.25 59.214 14.586 8.182 26.818 15.152 27.182 15.488 0.792 0.732-17.818 44.822-18.896 44.764-0.456-0.024-81.798-45.486-180.832-101.068l-180.004-101.024-175.238 98.994c-96.382 54.448-175.76 99.188-176.398 99.424-1.326 0.492-29.292-40.106-28.26-41.028 0.364-0.326 86.024-48.626 190.28-107.294l189.618-106.7zM693.068 227.252c-99.118-55.848-180.83-101.73-181.536-101.936-0.706-0.204-36.714 19.272-79.974 43.26-43.284 24.002-122.074 67.702-175.114 97.128s-96.91 53.532-97.502 53.578c-0.596 0.046-7.198-7.708-14.752-17.32-10.224-13.012-13.424-17.646-12.68-18.362 1.574-1.518 378.19-213.272 379.316-213.272 1.574 0 383.58 213.258 383.6 214.148 0.024 1.078-20.18 44.396-20.692 44.364-0.228-0.014-81.548-45.74-180.666-101.588z" />
|
||||
</font></defs></svg>
|
||||
|
After Width: | Height: | Size: 3.3 KiB |
|
|
@ -0,0 +1,34 @@
|
|||
@font-face {
|
||||
font-family: 'icomoon';
|
||||
src: url('/Plugins/NopStation.Core/contents/fonts/icomoon.eot?h5ssf6');
|
||||
src: url('/Plugins/NopStation.Core/contents/fonts/icomoon.eot?h5ssf6#iefix') format('embedded-opentype'), url('/Plugins/NopStation.Core/contents/fonts/icomoon.ttf?h5ssf6') format('truetype'), url('/Plugins/NopStation.Core/contents/fonts/icomoon.woff?h5ssf6') format('woff'), url('/Plugins/NopStation.Core/contents/fonts/icomoon.svg?h5ssf6#icomoon') format('svg');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
font-display: block;
|
||||
}
|
||||
|
||||
[class^="icon-"], [class*=" icon-"] {
|
||||
/* use !important to prevent issues with browser extensions that change fonts */
|
||||
font-family: 'icomoon' !important;
|
||||
speak: never;
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
font-variant: normal;
|
||||
text-transform: none;
|
||||
line-height: 1;
|
||||
/* Better Font Rendering =========== */
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
.icon-nop-station:before {
|
||||
content: "\e900";
|
||||
}
|
||||
|
||||
.icon-plugins:before {
|
||||
content: "\e901";
|
||||
}
|
||||
|
||||
.icon-themes:before {
|
||||
content: "\e902";
|
||||
}
|
||||
|
After Width: | Height: | Size: 9.8 KiB |
|
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"Group": "Nop-Station",
|
||||
"FriendlyName": "Nop-Station Core",
|
||||
"SystemName": "NopStation.Core",
|
||||
"Version": "4.80.1.0",
|
||||
"SupportedVersions": [
|
||||
"4.80"
|
||||
],
|
||||
"Author": "Nop-Station Team",
|
||||
"DisplayOrder": -100,
|
||||
"FileName": "NopStation.Plugin.Misc.Core.dll",
|
||||
"Description": "This plugin is used to manage Nop-Station plugins."
|
||||
}
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
@model ConfigurationModel
|
||||
|
||||
@{
|
||||
Layout = "_AdminLayout";
|
||||
NopHtml.SetActiveMenuItemSystemName("CarHaven.Configuration");
|
||||
|
||||
ViewBag.PageTitle = T("Admin.NopStation.Theme.CarHaven.Configuration").Text;
|
||||
|
||||
var customer = await workContext.GetCurrentCustomerAsync();
|
||||
const string hideColorBlockAttributeName = "CarHavenConfigurationPage.HideColorBlock";
|
||||
var hideColorBlock = await genericAttributeService.GetAttributeAsync<bool>(customer, hideColorBlockAttributeName, defaultValue: true);
|
||||
|
||||
const string hideGeneralBlockAttributeName = "CarHavenConfigurationPage.HideGeneralBlock";
|
||||
var hideGeneralBlock = await genericAttributeService.GetAttributeAsync<bool>(customer, hideGeneralBlockAttributeName, defaultValue: true);
|
||||
}
|
||||
|
||||
<form asp-controller="CarHaven" asp-action="Configure" method="post">
|
||||
<div class="content-header clearfix">
|
||||
<h1 class="float-left">
|
||||
@T("Admin.NopStation.Theme.CarHaven.Configuration")
|
||||
</h1>
|
||||
<div class="float-right">
|
||||
<button type="submit" name="save" class="btn btn-primary">
|
||||
<i class="far fa-save"></i>
|
||||
@T("Admin.Common.Save")
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
<div class="form-horizontal">
|
||||
@await Component.InvokeAsync(typeof(StoreScopeConfigurationViewComponent))
|
||||
<div asp-validation-summary="All"></div>
|
||||
<nop-cards id="CarHaven-panels">
|
||||
<nop-card asp-name="CarHaven-color" asp-icon="fas fa-palette" asp-title="@T("Admin.NopStation.Theme.CarHaven.Configuration.TabTitle.Color")" asp-hide-block-attribute-name="@hideColorBlockAttributeName" asp-hide="@hideColorBlock" asp-advanced="true">@await Html.PartialAsync("_Configure.Color", Model)</nop-card>
|
||||
<nop-card asp-name="CarHaven-info" asp-icon="fas fa-info" asp-title="@T("Admin.NopStation.Theme.CarHaven.Configuration.TabTitle.General")" asp-hide-block-attribute-name="@hideGeneralBlockAttributeName" asp-hide="@hideGeneralBlock" asp-advanced="true">@await Html.PartialAsync("_Configure.General", Model)</nop-card>
|
||||
</nop-cards>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</form>
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
@model ConfigurationModel
|
||||
|
||||
@{
|
||||
NopHtml.AddCssFileParts("/lib_npm/farbstastic/farbtastic.css", "");
|
||||
NopHtml.AddScriptParts(ResourceLocation.Footer, "/lib_npm/farbstastic/farbtastic.min.js");
|
||||
}
|
||||
|
||||
<div class="card-body">
|
||||
<div class="form-group row">
|
||||
<div class="col-md-3">
|
||||
<nop-override-store-checkbox asp-for="PrimaryThemeColor_OverrideForStore" asp-input="PrimaryThemeColor" asp-store-scope="@Model.ActiveStoreScopeConfiguration" />
|
||||
<nop-label asp-for="PrimaryThemeColor" />
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<nop-editor asp-for="PrimaryThemeColor" readonly />
|
||||
<div id="primary-color-picker"></div>
|
||||
<script asp-location="Footer">
|
||||
$(document).ready(function () {
|
||||
$('#primary-color-picker').farbtastic('#@Html.IdFor(model => model.PrimaryThemeColor)');
|
||||
});
|
||||
</script>
|
||||
<span asp-validation-for="PrimaryThemeColor"></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group row">
|
||||
<div class="col-md-3">
|
||||
<nop-override-store-checkbox asp-for="SecondaryThemeColor_OverrideForStore" asp-input="SecondaryThemeColor" asp-store-scope="@Model.ActiveStoreScopeConfiguration" />
|
||||
<nop-label asp-for="SecondaryThemeColor" />
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<nop-editor asp-for="SecondaryThemeColor" readonly />
|
||||
<div id="secondary-color-picker"></div>
|
||||
<script asp-location="Footer">
|
||||
$(document).ready(function () {
|
||||
$('#secondary-color-picker').farbtastic('#@Html.IdFor(model => model.SecondaryThemeColor)');
|
||||
});
|
||||
</script>
|
||||
<span asp-validation-for="SecondaryThemeColor"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
@model ConfigurationModel
|
||||
|
||||
<div class="card-body">
|
||||
<div class="form-group row">
|
||||
<div class="col-md-3">
|
||||
<nop-override-store-checkbox asp-for="HideDesignedByNopStationAtFooter_OverrideForStore" asp-input="HideDesignedByNopStationAtFooter" asp-store-scope="@Model.ActiveStoreScopeConfiguration" />
|
||||
<nop-label asp-for="HideDesignedByNopStationAtFooter" />
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<nop-editor asp-for="HideDesignedByNopStationAtFooter" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<div class="col-md-3">
|
||||
<nop-override-store-checkbox asp-for="HeaderLogoPictureId_OverrideForStore" asp-input="HeaderLogoPictureId" asp-store-scope="@Model.ActiveStoreScopeConfiguration" />
|
||||
<nop-label asp-for="HeaderLogoPictureId" />
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<nop-editor asp-for="HeaderLogoPictureId" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<div class="col-md-3">
|
||||
<nop-override-store-checkbox asp-for="ShowSupportedCardsAtFooter_OverrideForStore" asp-input="ShowSupportedCardsAtFooter" asp-store-scope="@Model.ActiveStoreScopeConfiguration" />
|
||||
<nop-label asp-for="ShowSupportedCardsAtFooter" />
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<nop-editor asp-for="ShowSupportedCardsAtFooter" />
|
||||
</div>
|
||||
</div>
|
||||
<nop-nested-setting asp-for="ShowSupportedCardsAtFooter">
|
||||
<div class="form-group row">
|
||||
<div class="col-md-3">
|
||||
<nop-override-store-checkbox asp-for="FooterSupportedCardsPictureId_OverrideForStore" asp-input="FooterSupportedCardsPictureId" asp-store-scope="@Model.ActiveStoreScopeConfiguration" />
|
||||
<nop-label asp-for="FooterSupportedCardsPictureId" />
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<nop-editor asp-for="FooterSupportedCardsPictureId" />
|
||||
</div>
|
||||
</div>
|
||||
</nop-nested-setting>
|
||||
<div class="form-group row">
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<div class="col-md-3">
|
||||
<nop-override-store-checkbox asp-for="CustomCss_OverrideForStore" asp-input="CustomCss" asp-store-scope="@Model.ActiveStoreScopeConfiguration" />
|
||||
<nop-label asp-for="CustomCss" />
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<nop-textarea asp-for="CustomCss" rows="10"></nop-textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
@inherits Nop.Web.Framework.Mvc.Razor.NopRazorPage<TModel>
|
||||
@inject Nop.Services.Common.IGenericAttributeService genericAttributeService
|
||||
@inject Nop.Core.IWorkContext workContext
|
||||
@inject INopHtmlHelper NopHtml
|
||||
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
|
||||
@addTagHelper *, Nop.Web.Framework
|
||||
|
||||
@using Microsoft.AspNetCore.Mvc.Rendering
|
||||
@using Microsoft.AspNetCore.Mvc.ViewFeatures
|
||||
@using Microsoft.AspNetCore.Routing
|
||||
@using Nop.Core.Domain.Common
|
||||
@using Nop.Core.Infrastructure
|
||||
@using Nop.Services.Events
|
||||
@using Nop.Web.Areas.Admin.Components
|
||||
@using Nop.Web.Framework.Events
|
||||
@using Nop.Web.Framework.Extensions
|
||||
@using Nop.Web.Framework.Infrastructure
|
||||
@using Nop.Web.Framework.Models.DataTables
|
||||
@using Nop.Web.Framework.UI
|
||||
@using NopStation.Plugin.Theme.CarHaven.Areas.Admin.Models
|
||||
@using System.Text.Encodings.Web
|
||||
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 3.8 KiB |
|
|
@ -0,0 +1,23 @@
|
|||
@inherits Nop.Web.Framework.Mvc.Razor.NopRazorPage<TModel>
|
||||
@inject Nop.Services.Common.IGenericAttributeService genericAttributeService
|
||||
@inject Nop.Core.IWorkContext workContext
|
||||
@inject INopHtmlHelper NopHtml
|
||||
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
|
||||
@addTagHelper *, Nop.Web.Framework
|
||||
@addTagHelper *, NopStation.Plugin.Misc.Actions
|
||||
|
||||
@using Microsoft.AspNetCore.Mvc.Rendering
|
||||
@using Microsoft.AspNetCore.Mvc.ViewFeatures
|
||||
@using Microsoft.AspNetCore.Routing
|
||||
@using Nop.Core.Domain.Common
|
||||
@using Nop.Core.Infrastructure
|
||||
@using Nop.Services.Events
|
||||
@using Nop.Web.Framework.Events
|
||||
@using Nop.Web.Framework.Extensions
|
||||
@using Nop.Web.Framework.Infrastructure
|
||||
@using Nop.Web.Framework.Models.DataTables
|
||||
@using Nop.Web.Framework.UI
|
||||
@using Nop.Web.Models.Customer
|
||||
@using NopStation.Plugin.Theme.CarHaven
|
||||
@using NopStation.Plugin.Theme.CarHaven.Models
|
||||
@using System.Text.Encodings.Web
|
||||
|
After Width: | Height: | Size: 9.8 KiB |
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"Group": "Nop-Station",
|
||||
"FriendlyName": "Nop-Station CarHaven Theme",
|
||||
"SystemName": "NopStation.Plugin.Theme.CarHaven",
|
||||
"Version": "4.80.1.0",
|
||||
"SupportedVersions": [ "4.80" ],
|
||||
"Author": "Nop-Station Team",
|
||||
"DisplayOrder": 1,
|
||||
"FileName": "NopStation.Plugin.Theme.CarHaven.dll",
|
||||
"Description": "This plugin allows to configure NopStation Car Haven theme.",
|
||||
"DependsOnSystemNames": [ "NopStation.Core" ]
|
||||
}
|
||||
|
|
@ -0,0 +1 @@
|
|||
4.80.1.0: Initial release
|
||||
|
|
@ -0,0 +1,126 @@
|
|||
@model ConfigurationModel
|
||||
|
||||
@{
|
||||
Layout = "_AdminLayout";
|
||||
NopHtml.SetActiveMenuItemSystemName("CategoryBanner.Configure");
|
||||
ViewBag.PageTitle = T("Admin.NopStation.CategoryBanners.Configuration").Text;
|
||||
}
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$("#@Html.IdFor(model => model.AutoPlay)").change(toggleAutoPlay);
|
||||
|
||||
toggleAutoPlay();
|
||||
});
|
||||
|
||||
function toggleAutoPlay() {
|
||||
if ($('#@Html.IdFor(model => model.AutoPlay)').is(':checked')) {
|
||||
$('#pnlAutoPlay').show();
|
||||
} else {
|
||||
$('#pnlAutoPlay').hide();
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<form asp-controller="CategoryBanner" asp-action="Configure" method="post">
|
||||
<div class="content-header clearfix">
|
||||
<h1 class="float-left">
|
||||
@T("Admin.NopStation.CategoryBanners.Configuration")
|
||||
</h1>
|
||||
<div class="float-right">
|
||||
<button type="submit" name="save" class="btn btn-primary">
|
||||
<i class="far fa-save"></i>
|
||||
@T("Admin.Common.Save")
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
<div class="form-horizontal">
|
||||
@await Component.InvokeAsync("StoreScopeConfiguration")
|
||||
<div asp-validation-summary="All"></div>
|
||||
<div class="cards-group">
|
||||
<div class="card card-default">
|
||||
<div class="card-body">
|
||||
<div class="form-group row">
|
||||
<div class="col-md-3">
|
||||
<nop-override-store-checkbox asp-for="HideInPublicStore_OverrideForStore" asp-input="HideInPublicStore" asp-store-scope="@Model.ActiveStoreScopeConfiguration" />
|
||||
<nop-label asp-for="HideInPublicStore" />
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<nop-editor asp-for="HideInPublicStore" />
|
||||
<span asp-validation-for="HideInPublicStore"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<div class="col-md-3">
|
||||
<nop-override-store-checkbox asp-for="BannerPictureSize_OverrideForStore" asp-input="BannerPictureSize" asp-store-scope="@Model.ActiveStoreScopeConfiguration" />
|
||||
<nop-label asp-for="BannerPictureSize" />
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<nop-editor asp-for="BannerPictureSize" />
|
||||
<span asp-validation-for="BannerPictureSize"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<div class="col-md-3">
|
||||
<nop-override-store-checkbox asp-for="Loop_OverrideForStore" asp-input="Loop" asp-store-scope="@Model.ActiveStoreScopeConfiguration" />
|
||||
<nop-label asp-for="Loop" />
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<nop-editor asp-for="Loop" />
|
||||
<span asp-validation-for="Loop"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<div class="col-md-3">
|
||||
<nop-override-store-checkbox asp-for="Nav_OverrideForStore" asp-input="Nav" asp-store-scope="@Model.ActiveStoreScopeConfiguration" />
|
||||
<nop-label asp-for="Nav" />
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<nop-editor asp-for="Nav" />
|
||||
<span asp-validation-for="Nav"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<div class="col-md-3">
|
||||
<nop-override-store-checkbox asp-for="AutoPlay_OverrideForStore" asp-input="AutoPlay" asp-store-scope="@Model.ActiveStoreScopeConfiguration" />
|
||||
<nop-label asp-for="AutoPlay" />
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<nop-editor asp-for="AutoPlay" />
|
||||
<span asp-validation-for="AutoPlay"></span>
|
||||
</div>
|
||||
</div>
|
||||
<nop-nested-setting asp-for="AutoPlay">
|
||||
<div id="pnlAutoPlay">
|
||||
<div class="form-group row">
|
||||
<div class="col-md-3">
|
||||
<nop-override-store-checkbox asp-for="AutoPlayTimeout_OverrideForStore" asp-input="AutoPlayTimeout" asp-store-scope="@Model.ActiveStoreScopeConfiguration" />
|
||||
<nop-label asp-for="AutoPlayTimeout" />
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<nop-editor asp-for="AutoPlayTimeout" />
|
||||
<span asp-validation-for="AutoPlayTimeout"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<div class="col-md-3">
|
||||
<nop-override-store-checkbox asp-for="AutoPlayHoverPause_OverrideForStore" asp-input="AutoPlayHoverPause" asp-store-scope="@Model.ActiveStoreScopeConfiguration" />
|
||||
<nop-label asp-for="AutoPlayHoverPause" />
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<nop-editor asp-for="AutoPlayHoverPause" />
|
||||
<span asp-validation-for="AutoPlayHoverPause"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nop-nested-setting>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</form>
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
@model CategoryBannerSearchModel
|
||||
|
||||
@{
|
||||
const string hideCategoryBannerBlockAttributeName = "CategoryBannerPage.HideCategoryBannerBlock";
|
||||
var hideCategoryBannerBlock = await genericAttributeService.GetAttributeAsync<bool>(await workContext.GetCurrentCustomerAsync(), hideCategoryBannerBlockAttributeName);
|
||||
}
|
||||
|
||||
<nop-card asp-name="category-banners" asp-icon="far fa-images" asp-title="@T("Admin.NopStation.CategoryBanners.Tab.Banners")" asp-hide-block-attribute-name="@hideCategoryBannerBlockAttributeName" asp-hide="@hideCategoryBannerBlock" asp-advanced="true">@await Html.PartialAsync("_Banners.cshtml", Model)</nop-card>
|
||||
|
|
@ -0,0 +1,192 @@
|
|||
@model CategoryBannerSearchModel
|
||||
|
||||
<div class="card-body">
|
||||
@if (Model.CategoryId > 0)
|
||||
{
|
||||
<div class="sub-panel">
|
||||
@await Html.PartialAsync("Table", new DataTablesModel
|
||||
{
|
||||
Name = "category-banner-grid",
|
||||
UrlRead = new DataUrl("CategoryBannerList", "CategoryBanner", new RouteValueDictionary { [nameof(Model.CategoryId)] = Model.CategoryId}),
|
||||
UrlDelete = new DataUrl("CategoryBannerDelete", "CategoryBanner", null),
|
||||
UrlUpdate = new DataUrl("CategoryBannerUpdate", "CategoryBanner", null),
|
||||
Length = Model.PageSize,
|
||||
LengthMenu = Model.AvailablePageSizes,
|
||||
ColumnCollection = new List<ColumnProperty>
|
||||
{
|
||||
new ColumnProperty(nameof(CategoryBannerModel.PictureUrl))
|
||||
{
|
||||
Title = T("Admin.NopStation.CategoryBanners.CategoryBanners.Fields.Picture").Text,
|
||||
Render = new RenderCustom("renderPicturesColumnProductPictureUrl")
|
||||
},
|
||||
new ColumnProperty(nameof(CategoryBannerModel.DisplayOrder))
|
||||
{
|
||||
Title = T("Admin.NopStation.CategoryBanners.CategoryBanners.Fields.DisplayOrder").Text,
|
||||
Width = "150",
|
||||
ClassName = NopColumnClassDefaults.CenterAll,
|
||||
Editable = true,
|
||||
EditType = EditType.Number
|
||||
},
|
||||
new ColumnProperty(nameof(CategoryBannerModel.OverrideAltAttribute))
|
||||
{
|
||||
Title = T("Admin.NopStation.CategoryBanners.CategoryBanners.Fields.OverrideAltAttribute").Text,
|
||||
Width = "200",
|
||||
Editable = true,
|
||||
EditType = EditType.String
|
||||
},
|
||||
new ColumnProperty(nameof(CategoryBannerModel.OverrideTitleAttribute))
|
||||
{
|
||||
Title = T("Admin.NopStation.CategoryBanners.CategoryBanners.Fields.OverrideTitleAttribute").Text,
|
||||
Width = "200",
|
||||
Editable = true,
|
||||
EditType = EditType.String
|
||||
},
|
||||
new ColumnProperty(nameof(CategoryBannerModel.ForMobile))
|
||||
{
|
||||
Title = T("Admin.NopStation.CategoryBanners.CategoryBanners.Fields.ForMobile").Text,
|
||||
Width = "100",
|
||||
Editable = true,
|
||||
Render = new RenderBoolean(),
|
||||
ClassName = NopColumnClassDefaults.CenterAll,
|
||||
EditType = EditType.Checkbox
|
||||
},
|
||||
new ColumnProperty(nameof(CategoryBannerModel.Id))
|
||||
{
|
||||
Title = T("Admin.Common.Edit").Text,
|
||||
Width = "200",
|
||||
ClassName = NopColumnClassDefaults.Button,
|
||||
Render = new RenderButtonsInlineEdit()
|
||||
},
|
||||
new ColumnProperty(nameof(CategoryBannerModel.Id))
|
||||
{
|
||||
Title = T("Admin.Common.Delete").Text,
|
||||
Width = "100",
|
||||
Render = new RenderButtonRemove(T("Admin.Common.Delete").Text),
|
||||
ClassName = NopColumnClassDefaults.Button
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
<script>
|
||||
function renderPicturesColumnProductPictureUrl(data, type, row, meta) {
|
||||
return '<a href="' + row.PictureUrl + '" target="_blank"><img alt="' + row.PictureId + '" src="' + row.PictureUrl + '" width="150" /></a>';
|
||||
}
|
||||
</script>
|
||||
</div>
|
||||
|
||||
<div class="card card-default">
|
||||
<div class="card-header">
|
||||
@T("Admin.NopStation.CategoryBanners.AddNew")
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$('#saveBanner').click(function() {
|
||||
var pictureId = $("#@Html.IdFor(model => model.CategoryBanner.PictureId)").val();
|
||||
var displayOrder = $("#@Html.IdFor(model => model.CategoryBanner.DisplayOrder)").val();
|
||||
var overrideAltAttribute = $("#@Html.IdFor(model => model.CategoryBanner.OverrideAltAttribute)").val();
|
||||
var overrideTitleAttribute = $("#@Html.IdFor(model => model.CategoryBanner.OverrideTitleAttribute)").val();
|
||||
var forMobile = $("#@Html.IdFor(model => model.CategoryBanner.ForMobile)").is(':checked');
|
||||
|
||||
if (pictureId == 0) {
|
||||
$("#addProductPictureAlert").click();
|
||||
return;
|
||||
}
|
||||
|
||||
$('#saveBanner').attr('disabled', true);
|
||||
|
||||
var postData = {
|
||||
PictureId: pictureId,
|
||||
DisplayOrder: displayOrder,
|
||||
CategoryId: '@Model.CategoryId',
|
||||
ForMobile: forMobile,
|
||||
OverrideAltAttribute: overrideAltAttribute,
|
||||
OverrideTitleAttribute: overrideTitleAttribute
|
||||
};
|
||||
addAntiForgeryToken(postData);
|
||||
|
||||
$.ajax({
|
||||
cache: false,
|
||||
type: "POST",
|
||||
url: "@(Url.Action("CreateBanner", "CategoryBanner"))",
|
||||
data: postData,
|
||||
success: function (data) {
|
||||
if (!data.Result) {
|
||||
return;
|
||||
}
|
||||
updateTable('#category-banner-grid');
|
||||
},
|
||||
error: function (jqXHR, textStatus, errorThrown) {
|
||||
$("#categoryBannerAddAlert").click();
|
||||
},
|
||||
complete: function (jqXHR, textStatus) {
|
||||
$('#saveBanner').attr('disabled', false);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<div class="form-group row">
|
||||
<div class="col-md-3">
|
||||
<nop-label asp-for="CategoryBanner.PictureId" />
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<nop-editor asp-for="CategoryBanner.PictureId" />
|
||||
<span asp-validation-for="CategoryBanner.PictureId"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<div class="col-md-3">
|
||||
<nop-label asp-for="CategoryBanner.OverrideTitleAttribute" />
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<nop-editor asp-for="CategoryBanner.OverrideTitleAttribute" />
|
||||
<span asp-validation-for="CategoryBanner.OverrideTitleAttribute"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<div class="col-md-3">
|
||||
<nop-label asp-for="CategoryBanner.OverrideAltAttribute" />
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<nop-editor asp-for="CategoryBanner.OverrideAltAttribute" />
|
||||
<span asp-validation-for="CategoryBanner.OverrideAltAttribute"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<div class="col-md-3">
|
||||
<nop-label asp-for="CategoryBanner.DisplayOrder" />
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<nop-editor asp-for="CategoryBanner.DisplayOrder" />
|
||||
<span asp-validation-for="CategoryBanner.DisplayOrder"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<div class="col-md-3">
|
||||
<nop-label asp-for="CategoryBanner.ForMobile" />
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<nop-editor asp-for="CategoryBanner.ForMobile" />
|
||||
<span asp-validation-for="CategoryBanner.ForMobile"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<div class="col-md-9 col-md-offset-3">
|
||||
<button type="button" id="saveBanner" class="btn btn-primary">@T("Admin.NopStation.CategoryBanners.AddButton")</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="card card-default">
|
||||
<div class="card-body">
|
||||
@T("Admin.NopStation.CategoryBanners.SaveBeforeEdit")
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
<nop-alert asp-alert-id="addCategoryBannerAlert" asp-alert-message="@T("Admin.NopStation.CategoryBanners.Alert.AddNew")" />
|
||||
<nop-alert asp-alert-id="categoryBannerAddAlert" asp-alert-message="@T("Admin.NopStation.CategoryBanners.Alert.BannerAdd")" />
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
@inherits Nop.Web.Framework.Mvc.Razor.NopRazorPage<TModel>
|
||||
@inject Nop.Services.Common.IGenericAttributeService genericAttributeService
|
||||
@inject Nop.Core.IWorkContext workContext
|
||||
@inject INopHtmlHelper NopHtml
|
||||
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
|
||||
@addTagHelper *, Nop.Web.Framework
|
||||
@addTagHelper *, NopStation.Plugin.Misc.Actions
|
||||
@using Microsoft.AspNetCore.Mvc.ViewFeatures
|
||||
@using Nop.Web.Framework.UI
|
||||
@using Nop.Web.Framework.Extensions
|
||||
@using System.Text.Encodings.Web
|
||||
@using Nop.Services.Events
|
||||
@using Nop.Web.Framework.Events
|
||||
@using NopStation.Plugin.Widgets.CategoryBanners.Areas.Admin.Models
|
||||
@using Nop.Core.Domain.Common
|
||||
@using Nop.Web.Framework.Models.DataTables
|
||||
@using Microsoft.AspNetCore.Routing
|
||||
@using Microsoft.AspNetCore.Mvc.Rendering
|
||||
@using Nop.Core.Infrastructure
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
@{
|
||||
Layout = "_AdminLayout";
|
||||
}
|
||||
|
|
@ -0,0 +1,186 @@
|
|||
/**
|
||||
* Owl Carousel v2.3.4
|
||||
* Copyright 2013-2018 David Deutsch
|
||||
* Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE
|
||||
*/
|
||||
/*
|
||||
* Owl Carousel - Core
|
||||
*/
|
||||
.owl-carousel {
|
||||
display: none;
|
||||
width: 100%;
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
/* position relative and z-index fix webkit rendering fonts issue */
|
||||
position: relative;
|
||||
z-index: 1; }
|
||||
.owl-carousel .owl-stage {
|
||||
position: relative;
|
||||
-ms-touch-action: pan-Y;
|
||||
touch-action: manipulation;
|
||||
-moz-backface-visibility: hidden;
|
||||
/* fix firefox animation glitch */ }
|
||||
.owl-carousel .owl-stage:after {
|
||||
content: ".";
|
||||
display: block;
|
||||
clear: both;
|
||||
visibility: hidden;
|
||||
line-height: 0;
|
||||
height: 0; }
|
||||
.owl-carousel .owl-stage-outer {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
/* fix for flashing background */
|
||||
-webkit-transform: translate3d(0px, 0px, 0px); }
|
||||
.owl-carousel .owl-wrapper,
|
||||
.owl-carousel .owl-item {
|
||||
-webkit-backface-visibility: hidden;
|
||||
-moz-backface-visibility: hidden;
|
||||
-ms-backface-visibility: hidden;
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
-moz-transform: translate3d(0, 0, 0);
|
||||
-ms-transform: translate3d(0, 0, 0); }
|
||||
.owl-carousel .owl-item {
|
||||
position: relative;
|
||||
min-height: 1px;
|
||||
float: left;
|
||||
-webkit-backface-visibility: hidden;
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
-webkit-touch-callout: none; }
|
||||
.owl-carousel .owl-item img {
|
||||
display: block;
|
||||
width: 100%; }
|
||||
.owl-carousel .owl-nav.disabled,
|
||||
.owl-carousel .owl-dots.disabled {
|
||||
display: none; }
|
||||
.owl-carousel .owl-nav .owl-prev,
|
||||
.owl-carousel .owl-nav .owl-next,
|
||||
.owl-carousel .owl-dot {
|
||||
cursor: pointer;
|
||||
-webkit-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none; }
|
||||
.owl-carousel .owl-nav button.owl-prev,
|
||||
.owl-carousel .owl-nav button.owl-next,
|
||||
.owl-carousel button.owl-dot {
|
||||
background: none;
|
||||
color: inherit;
|
||||
border: none;
|
||||
padding: 0 !important;
|
||||
font: inherit; }
|
||||
.owl-carousel.owl-loaded {
|
||||
display: block; }
|
||||
.owl-carousel.owl-loading {
|
||||
opacity: 0;
|
||||
display: block; }
|
||||
.owl-carousel.owl-hidden {
|
||||
opacity: 0; }
|
||||
.owl-carousel.owl-refresh .owl-item {
|
||||
visibility: hidden; }
|
||||
.owl-carousel.owl-drag .owl-item {
|
||||
-ms-touch-action: pan-y;
|
||||
touch-action: pan-y;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none; }
|
||||
.owl-carousel.owl-grab {
|
||||
cursor: move;
|
||||
cursor: grab; }
|
||||
.owl-carousel.owl-rtl {
|
||||
direction: rtl; }
|
||||
.owl-carousel.owl-rtl .owl-item {
|
||||
float: right; }
|
||||
|
||||
/* No Js */
|
||||
.no-js .owl-carousel {
|
||||
display: block; }
|
||||
|
||||
/*
|
||||
* Owl Carousel - Animate Plugin
|
||||
*/
|
||||
.owl-carousel .animated {
|
||||
animation-duration: 1000ms;
|
||||
animation-fill-mode: both; }
|
||||
|
||||
.owl-carousel .owl-animated-in {
|
||||
z-index: 0; }
|
||||
|
||||
.owl-carousel .owl-animated-out {
|
||||
z-index: 1; }
|
||||
|
||||
.owl-carousel .fadeOut {
|
||||
animation-name: fadeOut; }
|
||||
|
||||
@keyframes fadeOut {
|
||||
0% {
|
||||
opacity: 1; }
|
||||
100% {
|
||||
opacity: 0; } }
|
||||
|
||||
/*
|
||||
* Owl Carousel - Auto Height Plugin
|
||||
*/
|
||||
.owl-height {
|
||||
transition: height 500ms ease-in-out; }
|
||||
|
||||
/*
|
||||
* Owl Carousel - Lazy Load Plugin
|
||||
*/
|
||||
.owl-carousel .owl-item {
|
||||
/**
|
||||
This is introduced due to a bug in IE11 where lazy loading combined with autoheight plugin causes a wrong
|
||||
calculation of the height of the owl-item that breaks page layouts
|
||||
*/ }
|
||||
.owl-carousel .owl-item .owl-lazy {
|
||||
opacity: 0;
|
||||
transition: opacity 400ms ease; }
|
||||
.owl-carousel .owl-item .owl-lazy[src^=""], .owl-carousel .owl-item .owl-lazy:not([src]) {
|
||||
max-height: 0; }
|
||||
.owl-carousel .owl-item img.owl-lazy {
|
||||
transform-style: preserve-3d; }
|
||||
|
||||
/*
|
||||
* Owl Carousel - Video Plugin
|
||||
*/
|
||||
.owl-carousel .owl-video-wrapper {
|
||||
position: relative;
|
||||
height: 100%;
|
||||
background: #000; }
|
||||
|
||||
.owl-carousel .owl-video-play-icon {
|
||||
position: absolute;
|
||||
height: 80px;
|
||||
width: 80px;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
margin-left: -40px;
|
||||
margin-top: -40px;
|
||||
background: url("owl.video.play.png") no-repeat;
|
||||
cursor: pointer;
|
||||
z-index: 1;
|
||||
-webkit-backface-visibility: hidden;
|
||||
transition: transform 100ms ease; }
|
||||
|
||||
.owl-carousel .owl-video-play-icon:hover {
|
||||
-ms-transform: scale(1.3, 1.3);
|
||||
transform: scale(1.3, 1.3); }
|
||||
|
||||
.owl-carousel .owl-video-playing .owl-video-tn,
|
||||
.owl-carousel .owl-video-playing .owl-video-play-icon {
|
||||
display: none; }
|
||||
|
||||
.owl-carousel .owl-video-tn {
|
||||
opacity: 0;
|
||||
height: 100%;
|
||||
background-position: center center;
|
||||
background-repeat: no-repeat;
|
||||
background-size: contain;
|
||||
transition: opacity 400ms ease; }
|
||||
|
||||
.owl-carousel .owl-video-frame {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
height: 100%;
|
||||
width: 100%; }
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
/**
|
||||
* Owl Carousel v2.3.4
|
||||
* Copyright 2013-2018 David Deutsch
|
||||
* Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE
|
||||
*/
|
||||
.owl-theme .owl-dots,.owl-theme .owl-nav{text-align:center;-webkit-tap-highlight-color:transparent}.owl-theme .owl-nav{margin-top:10px}.owl-theme .owl-nav [class*=owl-]{color:#FFF;font-size:14px;margin:5px;padding:4px 7px;background:#D6D6D6;display:inline-block;cursor:pointer;border-radius:3px}.owl-theme .owl-nav [class*=owl-]:hover{background:#4DC7A0;color:#FFF;text-decoration:none}.owl-theme .owl-nav .disabled{opacity:.5;cursor:default}.owl-theme .owl-nav.disabled+.owl-dots{margin-top:10px}.owl-theme .owl-dots .owl-dot{display:inline-block;zoom:1}.owl-theme .owl-dots .owl-dot span{width:10px;height:10px;margin:5px 7px;background:#D6D6D6;display:block;-webkit-backface-visibility:visible;transition:opacity .2s ease;border-radius:30px}.owl-theme .owl-dots .owl-dot.active span,.owl-theme .owl-dots .owl-dot:hover span{background:#4DC7A0}
|
||||
|
|
@ -0,0 +1,253 @@
|
|||
/**
|
||||
* Owl Carousel v2.3.4
|
||||
* Copyright 2013-2018 David Deutsch
|
||||
* Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE
|
||||
*/
|
||||
/*
|
||||
* Owl Carousel - Core
|
||||
*/
|
||||
.owl-carousel {
|
||||
display: none;
|
||||
width: 100%;
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
/* position relative and z-index fix webkit rendering fonts issue */
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.owl-carousel .owl-stage {
|
||||
position: relative;
|
||||
-ms-touch-action: pan-Y;
|
||||
touch-action: manipulation;
|
||||
-moz-backface-visibility: hidden;
|
||||
/* fix firefox animation glitch */
|
||||
}
|
||||
|
||||
.owl-carousel .owl-stage:after {
|
||||
content: ".";
|
||||
display: block;
|
||||
clear: both;
|
||||
visibility: hidden;
|
||||
line-height: 0;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
.owl-carousel .owl-stage-outer {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
/* fix for flashing background */
|
||||
-webkit-transform: translate3d(0px, 0px, 0px);
|
||||
}
|
||||
|
||||
.owl-carousel .owl-wrapper,
|
||||
.owl-carousel .owl-item {
|
||||
-webkit-backface-visibility: hidden;
|
||||
-moz-backface-visibility: hidden;
|
||||
-ms-backface-visibility: hidden;
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
-moz-transform: translate3d(0, 0, 0);
|
||||
-ms-transform: translate3d(0, 0, 0);
|
||||
}
|
||||
|
||||
.owl-carousel .owl-item {
|
||||
position: relative;
|
||||
min-height: 1px;
|
||||
float: left;
|
||||
-webkit-backface-visibility: hidden;
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
-webkit-touch-callout: none;
|
||||
}
|
||||
|
||||
.owl-carousel .owl-item img {
|
||||
display: block;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.owl-carousel .owl-nav.disabled,
|
||||
.owl-carousel .owl-dots.disabled {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.owl-carousel .owl-nav .owl-prev,
|
||||
.owl-carousel .owl-nav .owl-next,
|
||||
.owl-carousel .owl-dot {
|
||||
cursor: pointer;
|
||||
-webkit-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.owl-carousel .owl-nav button.owl-prev,
|
||||
.owl-carousel .owl-nav button.owl-next,
|
||||
.owl-carousel button.owl-dot {
|
||||
background: none;
|
||||
color: inherit;
|
||||
border: none;
|
||||
padding: 0 !important;
|
||||
font: inherit;
|
||||
}
|
||||
|
||||
.owl-carousel.owl-loaded {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.owl-carousel.owl-loading {
|
||||
opacity: 0;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.owl-carousel.owl-hidden {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.owl-carousel.owl-refresh .owl-item {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
.owl-carousel.owl-drag .owl-item {
|
||||
-ms-touch-action: pan-y;
|
||||
touch-action: pan-y;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.owl-carousel.owl-grab {
|
||||
cursor: move;
|
||||
cursor: grab;
|
||||
}
|
||||
|
||||
.owl-carousel.owl-rtl {
|
||||
direction: rtl;
|
||||
}
|
||||
|
||||
.owl-carousel.owl-rtl .owl-item {
|
||||
float: right;
|
||||
}
|
||||
|
||||
/* No Js */
|
||||
.no-js .owl-carousel {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/*
|
||||
* Owl Carousel - Animate Plugin
|
||||
*/
|
||||
.owl-carousel .animated {
|
||||
animation-duration: 1000ms;
|
||||
animation-fill-mode: both;
|
||||
}
|
||||
|
||||
.owl-carousel .owl-animated-in {
|
||||
z-index: 0;
|
||||
}
|
||||
|
||||
.owl-carousel .owl-animated-out {
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.owl-carousel .fadeOut {
|
||||
animation-name: fadeOut;
|
||||
}
|
||||
|
||||
@keyframes fadeOut {
|
||||
0% {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
100% {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Owl Carousel - Auto Height Plugin
|
||||
*/
|
||||
.owl-height {
|
||||
transition: height 500ms ease-in-out;
|
||||
}
|
||||
|
||||
/*
|
||||
* Owl Carousel - Lazy Load Plugin
|
||||
*/
|
||||
.owl-carousel .owl-item {
|
||||
/**
|
||||
This is introduced due to a bug in IE11 where lazy loading combined with autoheight plugin causes a wrong
|
||||
calculation of the height of the owl-item that breaks page layouts
|
||||
*/
|
||||
}
|
||||
|
||||
.owl-carousel .owl-item .owl-lazy {
|
||||
opacity: 0;
|
||||
transition: opacity 400ms ease;
|
||||
}
|
||||
|
||||
.owl-carousel .owl-item .owl-lazy[src^=""], .owl-carousel .owl-item .owl-lazy:not([src]) {
|
||||
max-height: 0;
|
||||
}
|
||||
|
||||
.owl-carousel .owl-item img.owl-lazy {
|
||||
transform-style: preserve-3d;
|
||||
}
|
||||
|
||||
/*
|
||||
* Owl Carousel - Video Plugin
|
||||
*/
|
||||
.owl-carousel .owl-video-wrapper {
|
||||
position: relative;
|
||||
height: 100%;
|
||||
background: #000;
|
||||
}
|
||||
|
||||
.owl-carousel .owl-video-play-icon {
|
||||
position: absolute;
|
||||
height: 80px;
|
||||
width: 80px;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
margin-left: -40px;
|
||||
margin-top: -40px;
|
||||
background: url("owl.video.play.png") no-repeat;
|
||||
cursor: pointer;
|
||||
z-index: 1;
|
||||
-webkit-backface-visibility: hidden;
|
||||
transition: transform 100ms ease;
|
||||
}
|
||||
|
||||
.owl-carousel .owl-video-play-icon:hover {
|
||||
-ms-transform: scale(1.3, 1.3);
|
||||
transform: scale(1.3, 1.3);
|
||||
}
|
||||
|
||||
.owl-carousel .owl-video-playing .owl-video-tn,
|
||||
.owl-carousel .owl-video-playing .owl-video-play-icon {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.owl-carousel .owl-video-tn {
|
||||
opacity: 0;
|
||||
height: 100%;
|
||||
background-position: center center;
|
||||
background-repeat: no-repeat;
|
||||
background-size: contain;
|
||||
transition: opacity 400ms ease;
|
||||
}
|
||||
|
||||
.owl-carousel .owl-video-frame {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.owl-carousel,
|
||||
.bx-wrapper {
|
||||
direction: ltr;
|
||||
}
|
||||
|
||||
.owl-carousel .owl-item {
|
||||
direction: rtl;
|
||||
}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
/**
|
||||
* Owl Carousel v2.3.4
|
||||
* Copyright 2013-2018 David Deutsch
|
||||
* Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE
|
||||
*/
|
||||
.owl-theme .owl-dots,.owl-theme .owl-nav{text-align:center;-webkit-tap-highlight-color:transparent}.owl-theme .owl-nav{margin-top:10px}.owl-theme .owl-nav [class*=owl-]{color:#FFF;font-size:14px;margin:5px;padding:4px 7px;background:#D6D6D6;display:inline-block;cursor:pointer;border-radius:3px}.owl-theme .owl-nav [class*=owl-]:hover{background:#4DC7A0;color:#FFF;text-decoration:none}.owl-theme .owl-nav .disabled{opacity:.5;cursor:default}.owl-theme .owl-nav.disabled+.owl-dots{margin-top:10px}.owl-theme .owl-dots .owl-dot{display:inline-block;zoom:1}.owl-theme .owl-dots .owl-dot span{width:10px;height:10px;margin:5px 7px;background:#D6D6D6;display:block;-webkit-backface-visibility:visible;transition:opacity .2s ease;border-radius:30px}.owl-theme .owl-dots .owl-dot.active span,.owl-theme .owl-dots .owl-dot:hover span{background:#4DC7A0}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
.category-banner {
|
||||
width: 100%;
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
|
||||
.category-banner img {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.category-banner .owl-nav button.owl-prev,
|
||||
.category-banner .owl-nav button.owl-next {
|
||||
border: 1px solid #ccc;
|
||||
padding: 0 10px !important;
|
||||
background-color: #eee;
|
||||
font-size: 23px;
|
||||
position: absolute;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.category-banner .owl-nav button.owl-prev {
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.category-banner .owl-nav button.owl-next {
|
||||
right: 0;
|
||||
}
|
||||
|
||||
.category-banner .owl-nav {
|
||||
position: absolute;
|
||||
top: 30%;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.category-banner .owl-dots {
|
||||
display: none;
|
||||
}
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
@model CategoryBannerModel
|
||||
@inject Nop.Core.IWorkContext workContext
|
||||
|
||||
@if (Model.Banners.Any())
|
||||
{
|
||||
NopHtml.AppendCssFileParts( "/Plugins/NopStation.Plugin.Widgets.CategoryBanners/Contents/css/styles.css", string.Empty);
|
||||
var supportRtl = workContext.GetWorkingLanguageAsync().Result.Rtl;
|
||||
if (Model.Banners.Count > 1)
|
||||
{
|
||||
<script asp-exclude-from-bundle="true" asp-location="Footer" src= "~/Plugins/NopStation.Plugin.Widgets.CategoryBanners/Contents/script/owl.carousel.min.js" ></script>
|
||||
|
||||
if (supportRtl)
|
||||
{
|
||||
NopHtml.AppendCssFileParts("/Plugins/NopStation.Plugin.Widgets.CategoryBanners/Contents/css/rtl/owl.theme.green.min.css", string.Empty);
|
||||
NopHtml.AppendCssFileParts("/Plugins/NopStation.Plugin.Widgets.CategoryBanners/Contents/css/rtl/owl.carousel.css", string.Empty);
|
||||
}
|
||||
else
|
||||
{
|
||||
NopHtml.AppendCssFileParts("/Plugins/NopStation.Plugin.Widgets.CategoryBanners/Contents/css/owl.theme.green.min.css", string.Empty);
|
||||
NopHtml.AppendCssFileParts("/Plugins/NopStation.Plugin.Widgets.CategoryBanners/Contents/css/owl.carousel.css", string.Empty);
|
||||
}
|
||||
|
||||
<div class="category-banner owl-carousel owl-theme" id="category-banner-@Model.Id">
|
||||
@foreach (var banner in Model.Banners)
|
||||
{
|
||||
<div class="banner-slider-item">
|
||||
<img alt="@banner.AlternateText" src="@banner.ImageUrl" title="@banner.Title" />
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
|
||||
<script asp-exclude-from-bundle="true" asp-location="Footer">
|
||||
$(document).ready(function () {
|
||||
$('#category-banner-@Model.Id').owlCarousel({
|
||||
nav: @Model.Nav.ToString().ToLower(),
|
||||
loop: @Model.Loop.ToString().ToLower(),
|
||||
dots: true,
|
||||
autoplay: @Model.AutoPlay.ToString().ToLower(),
|
||||
rtl: @supportRtl.ToString().ToLower(),
|
||||
autoplayTimeout: @Model.AutoPlayTimeout,
|
||||
autoplayHoverPause: @Model.AutoPlayHoverPause.ToString().ToLower(),
|
||||
responsive: {
|
||||
0: {
|
||||
items: 1
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="category-banner" id="category-banner-@Model.Id">
|
||||
<img src="@Model.Banners[0].ImageUrl" alt="@Model.Banners[0].AlternateText" title="@Model.Banners[0].Title" />
|
||||
</div>
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
@inherits Nop.Web.Framework.Mvc.Razor.NopRazorPage<TModel>
|
||||
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
|
||||
@addTagHelper *, Nop.Web.Framework
|
||||
@inject INopHtmlHelper NopHtml
|
||||
|
||||
@using Microsoft.AspNetCore.Mvc.ViewFeatures
|
||||
@using Nop.Web.Framework.UI
|
||||
@using Nop.Web.Framework.Extensions
|
||||
@using System.Text.Encodings.Web
|
||||
@using Nop.Services.Events
|
||||
@using Nop.Web.Framework.Events
|
||||
@using NopStation.Plugin.Widgets.CategoryBanners.Models
|
||||
@using Nop.Web.Framework.Infrastructure
|
||||
|
After Width: | Height: | Size: 9.1 KiB |
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"Group": "Nop-Station",
|
||||
"FriendlyName": "Nop-Station Category Banner",
|
||||
"SystemName": "NopStation.Plugin.Widgets.CategoryBanners",
|
||||
"Version": "4.80.1.0",
|
||||
"SupportedVersions": [
|
||||
"4.80"
|
||||
],
|
||||
"Author": "Nop-Station Team",
|
||||
"DisplayOrder": 1,
|
||||
"FileName": "NopStation.Plugin.Widgets.CategoryBanners.dll",
|
||||
"Description": "This plugin allows to display category banner in category details page.",
|
||||
"DependsOnSystemNames": [
|
||||
"NopStation.Core"
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
4.70.1.0: Version upgrade
|
||||
4.60.1.0: Version upgrade
|
||||
4.50.1.0: Initial release
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
@model ConfigurationModel
|
||||
|
||||
@{
|
||||
NopHtml.SetActiveMenuItemSystemName("WidgetPush.Configure");
|
||||
ViewBag.PageTitle = T("Admin.NopStation.WidgetPush.Configuration").Text;
|
||||
}
|
||||
|
||||
<form asp-controller="WidgetPush" asp-action="Configure" method="post">
|
||||
<div class="content-header clearfix">
|
||||
<h1 class="float-left">
|
||||
@T("Admin.NopStation.WidgetPush.Configuration")
|
||||
</h1>
|
||||
<div class="float-right">
|
||||
<button type="submit" name="save" class="btn btn-primary">
|
||||
<i class="far fa-save"></i>
|
||||
@T("Admin.Common.Save")
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
<div class="form-horizontal">
|
||||
@await Component.InvokeAsync(typeof(StoreScopeConfigurationViewComponent))
|
||||
<div asp-validation-summary="All"></div>
|
||||
<div class="cards-group">
|
||||
<div class="card card-default">
|
||||
<div class="card-body">
|
||||
<div class="form-group row">
|
||||
<div class="col-md-4">
|
||||
<nop-override-store-checkbox asp-for="HideInPublicStore_OverrideForStore" asp-input="HideInPublicStore" asp-store-scope="@Model.ActiveStoreScopeConfiguration" />
|
||||
<nop-label asp-for="HideInPublicStore" />
|
||||
</div>
|
||||
<div class="col-md-8">
|
||||
<nop-editor asp-for="HideInPublicStore" />
|
||||
<span asp-validation-for="HideInPublicStore"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</form>
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
@model WidgetPushItemModel
|
||||
|
||||
@{
|
||||
//page title
|
||||
ViewBag.PageTitle = T("Admin.NopStation.WidgetPush.WidgetPushItems.AddNew").Text;
|
||||
//active menu item (system name)
|
||||
NopHtml.SetActiveMenuItemSystemName("WidgetPush.WidgetPushItems");
|
||||
}
|
||||
|
||||
<form asp-controller="WidgetPush" asp-action="Create" method="post">
|
||||
<div class="content-header clearfix">
|
||||
<h1 class="float-left">
|
||||
@T("Admin.NopStation.WidgetPush.WidgetPushItems.AddNew")
|
||||
<small>
|
||||
<i class="fas fa-arrow-circle-left"></i>
|
||||
<a asp-action="List">@T("Admin.NopStation.WidgetPush.WidgetPushItems.BackToList")</a>
|
||||
</small>
|
||||
</h1>
|
||||
<div class="float-right">
|
||||
<button type="submit" name="save" class="btn btn-primary">
|
||||
<i class="far fa-save"></i>
|
||||
@T("Admin.Common.Save")
|
||||
</button>
|
||||
<button type="submit" name="save-continue" class="btn btn-primary">
|
||||
<i class="far fa-save"></i>
|
||||
@T("Admin.Common.SaveContinue")
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
@await Html.PartialAsync("_CreateOrUpdate", Model)
|
||||
</form>
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
@model WidgetPushItemModel
|
||||
|
||||
@{
|
||||
//page title
|
||||
ViewBag.PageTitle = T("Admin.NopStation.WidgetPush.WidgetPushItems.EditWidgetPushItemDetails").Text;
|
||||
//active menu item (system name)
|
||||
NopHtml.SetActiveMenuItemSystemName("WidgetPush.WidgetPushItems");
|
||||
}
|
||||
|
||||
<form asp-controller="WidgetPush" asp-action="Edit" method="post">
|
||||
<div class="content-header clearfix">
|
||||
<h1 class="float-left">
|
||||
@T("Admin.NopStation.WidgetPush.WidgetPushItems.EditWidgetPushItemDetails")
|
||||
<small>
|
||||
<i class="fas fa-arrow-circle-left"></i>
|
||||
<a asp-action="List">@T("Admin.NopStation.WidgetPush.WidgetPushItems.BackToList")</a>
|
||||
</small>
|
||||
</h1>
|
||||
<div class="float-right">
|
||||
<button type="submit" name="save" class="btn btn-primary">
|
||||
<i class="far fa-save"></i>
|
||||
@T("Admin.Common.Save")
|
||||
</button>
|
||||
<button type="submit" name="save-continue" class="btn btn-primary">
|
||||
<i class="far fa-save"></i>
|
||||
@T("Admin.Common.SaveContinue")
|
||||
</button>
|
||||
<span id="store-delete" class="btn btn-danger">
|
||||
<i class="far fa-trash-alt"></i>
|
||||
@T("Admin.Common.Delete")
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
@await Html.PartialAsync("_CreateOrUpdate", Model)
|
||||
</form>
|
||||
<nop-delete-confirmation asp-model-id="@Model.Id" asp-button-id="store-delete" />
|
||||
|
|
@ -0,0 +1,72 @@
|
|||
@model WidgetPushItemSearchModel
|
||||
|
||||
@{
|
||||
//page title
|
||||
ViewBag.PageTitle = T("Admin.NopStation.WidgetPush.WidgetPushItems.List").Text;
|
||||
//active menu item (system name)
|
||||
NopHtml.SetActiveMenuItemSystemName("WidgetPush.WidgetPushItems");
|
||||
}
|
||||
|
||||
<div class="content-header clearfix">
|
||||
<h1 class="float-left">
|
||||
@T("Admin.NopStation.WidgetPush.WidgetPushItems.List")
|
||||
</h1>
|
||||
<div class="float-right">
|
||||
<a asp-action="Create" class="btn btn-primary">
|
||||
<i class="fas fa-plus-square"></i>
|
||||
@T("Admin.Common.AddNew")
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
<div class="form-horizontal">
|
||||
<div class="cards-group">
|
||||
<div class="card card-default">
|
||||
<div class="card-body">
|
||||
@await Html.PartialAsync("Table", new DataTablesModel
|
||||
{
|
||||
Name = "widgetpushitems-grid",
|
||||
UrlRead = new DataUrl("List", "WidgetPush", null),
|
||||
Length = Model.PageSize,
|
||||
LengthMenu = Model.AvailablePageSizes,
|
||||
ColumnCollection = new List<ColumnProperty>
|
||||
{
|
||||
new ColumnProperty(nameof(WidgetPushItemModel.Name))
|
||||
{
|
||||
Title = T("Admin.NopStation.WidgetPush.WidgetPushItems.Fields.Name").Text,
|
||||
Width = "150"
|
||||
},
|
||||
new ColumnProperty(nameof(WidgetPushItemModel.WidgetZone))
|
||||
{
|
||||
Title = T("Admin.NopStation.WidgetPush.WidgetPushItems.Fields.WidgetZone").Text,
|
||||
Width = "150"
|
||||
},
|
||||
new ColumnProperty(nameof(WidgetPushItemModel.DisplayOrder))
|
||||
{
|
||||
Title = T("Admin.NopStation.WidgetPush.WidgetPushItems.Fields.DisplayOrder").Text,
|
||||
Width = "100"
|
||||
},
|
||||
new ColumnProperty(nameof(WidgetPushItemModel.Active))
|
||||
{
|
||||
Title = T("Admin.NopStation.WidgetPush.WidgetPushItems.Fields.Active").Text,
|
||||
Width = "100",
|
||||
Render = new RenderBoolean(),
|
||||
ClassName = NopColumnClassDefaults.CenterAll
|
||||
},
|
||||
new ColumnProperty(nameof(WidgetPushItemModel.Id))
|
||||
{
|
||||
Title = T("Admin.Common.Edit").Text,
|
||||
Width = "100",
|
||||
ClassName = NopColumnClassDefaults.Button,
|
||||
Render = new RenderButtonEdit(new DataUrl("Edit"))
|
||||
}
|
||||
}
|
||||
})
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
|
@ -0,0 +1,134 @@
|
|||
@model WidgetPushItemModel
|
||||
|
||||
<div asp-validation-summary="All"></div>
|
||||
<input asp-for="Id" type="hidden" />
|
||||
|
||||
<script>
|
||||
$(document).ready(function () {
|
||||
@Html.Raw(Model.FormattedExistingWidgetZones);
|
||||
$("#@Html.IdFor(x => x.WidgetZone)").autocomplete({
|
||||
source: existingWidgetZones
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
<div class="form-horizontal">
|
||||
<div class="cards-group">
|
||||
<div class="card card-default">
|
||||
<div class="card-body">
|
||||
<div class="form-group row">
|
||||
<div class="col-md-3">
|
||||
<nop-label asp-for="Name" />
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<nop-editor asp-for="Name" asp-required="true" />
|
||||
<span asp-validation-for="Name"></span>
|
||||
</div>
|
||||
</div>
|
||||
@(await Html.LocalizedEditorAsync<WidgetPushItemModel, WidgetPushItemLocalizedModel>("widgetpushitem-localized",
|
||||
@<div>
|
||||
<div class="form-group row">
|
||||
<div class="col-md-3">
|
||||
<nop-label asp-for="@Model.Locales[item].Content" />
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<nop-textarea asp-for="@Model.Locales[item].Content"></nop-textarea>
|
||||
<span asp-validation-for="@Model.Locales[item].Content"></span>
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" asp-for="@Model.Locales[item].LanguageId" />
|
||||
</div>
|
||||
,
|
||||
@<div>
|
||||
<div class="form-group row">
|
||||
<div class="col-md-3">
|
||||
<nop-label asp-for="Content" />
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<nop-textarea asp-for="Content" asp-required="true"></nop-textarea>
|
||||
<span asp-validation-for="Content"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>))
|
||||
<div class="form-group row">
|
||||
<div class="col-md-3">
|
||||
<nop-label asp-for="WidgetZone" />
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<nop-editor asp-for="WidgetZone" asp-required="true" />
|
||||
<span asp-validation-for="WidgetZone"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<div class="col-md-3">
|
||||
<nop-label asp-for="DisplayOrder" />
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<nop-editor asp-for="DisplayOrder" />
|
||||
<span asp-validation-for="DisplayOrder"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<div class="col-md-3">
|
||||
<nop-label asp-for="Active" />
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<nop-editor asp-for="Active" />
|
||||
<span asp-validation-for="Active"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<div class="col-md-3">
|
||||
<nop-label asp-for="DisplayStartDate" />
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<nop-editor asp-for="DisplayStartDate" />
|
||||
<span asp-validation-for="DisplayStartDate"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<div class="col-md-3">
|
||||
<nop-label asp-for="DisplayEndDate" />
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<nop-editor asp-for="DisplayEndDate" />
|
||||
<span asp-validation-for="DisplayEndDate"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<div class="col-md-3">
|
||||
<nop-label asp-for="SelectedStoreIds" />
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
<nop-select asp-for="SelectedStoreIds" asp-items="Model.AvailableStores" asp-multiple="true" />
|
||||
<script>
|
||||
$(function () {
|
||||
var storesIdsInput = $('#@Html.IdFor(model => model.SelectedStoreIds)').select2({
|
||||
closeOnSelect: false,
|
||||
@if (!Model.AvailableStores.Any())
|
||||
{
|
||||
<text>
|
||||
disabled: true,
|
||||
placeholder: 'No stores available',
|
||||
</text>
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
<div class="col-md-8">
|
||||
@await Component.InvokeAsync(typeof(MultistoreDisabledWarningViewComponent))
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
@inherits Nop.Web.Framework.Mvc.Razor.NopRazorPage<TModel>
|
||||
@inject Nop.Services.Common.IGenericAttributeService genericAttributeService
|
||||
@inject Nop.Core.IWorkContext workContext
|
||||
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
|
||||
@addTagHelper *, Nop.Web.Framework
|
||||
@addTagHelper *, NopStation.Plugin.Misc.Actions
|
||||
@inject INopHtmlHelper NopHtml
|
||||
|
||||
@using Microsoft.AspNetCore.Mvc.ViewFeatures
|
||||
@using Nop.Web.Framework.UI
|
||||
@using Nop.Web.Framework.Extensions
|
||||
@using System.Text.Encodings.Web
|
||||
@using Nop.Services.Events
|
||||
@using Nop.Web.Framework.Events
|
||||
@using NopStation.Plugin.Widgets.WidgetPush.Areas.Admin.Models
|
||||
@using Nop.Core.Domain.Common
|
||||
@using Nop.Web.Framework.Models.DataTables
|
||||
@using Microsoft.AspNetCore.Routing
|
||||
@using Microsoft.AspNetCore.Mvc.Rendering
|
||||
@using Nop.Core.Infrastructure
|
||||
@using Nop.Web.Areas.Admin.Components
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
@{
|
||||
Layout = "_AdminLayout";
|
||||
}
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
@model WidgetPushModel
|
||||
|
||||
@if (Model.WidgetPushItems.Any())
|
||||
{
|
||||
foreach (var item in Model.WidgetPushItems)
|
||||
{
|
||||
@Html.Raw(item.Content)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
@inherits Nop.Web.Framework.Mvc.Razor.NopRazorPage<TModel>
|
||||
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
|
||||
@addTagHelper *, Nop.Web.Framework
|
||||
@inject INopHtmlHelper NopHtml
|
||||
|
||||
@using Microsoft.AspNetCore.Mvc.ViewFeatures
|
||||
@using Nop.Web.Framework.UI
|
||||
@using Nop.Web.Framework.Extensions
|
||||
@using System.Text.Encodings.Web
|
||||
@using Nop.Services.Events
|
||||
@using Nop.Web.Framework.Events
|
||||
@using NopStation.Plugin.Widgets.WidgetPush.Models
|
||||
@using Nop.Web.Framework.Infrastructure
|
||||
|
After Width: | Height: | Size: 9.4 KiB |
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"Group": "Nop-Station",
|
||||
"FriendlyName": "Nop-Station Widget Push",
|
||||
"SystemName": "NopStation.Plugin.Widgets.WidgetPush",
|
||||
"Version": "4.80.1.0",
|
||||
"SupportedVersions": [
|
||||
"4.80"
|
||||
],
|
||||
"Author": "Jaber Kibria",
|
||||
"DisplayOrder": 1,
|
||||
"FileName": "NopStation.Plugin.Widgets.WidgetPush.dll",
|
||||
"Description": "This plugin allows to push HTML content anywhere in admin or public site.",
|
||||
"DependsOnSystemNames": [
|
||||
"NopStation.Core"
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1 @@
|
|||
4.70.1.0: Initial Release
|
||||