From af582e7cadd73eb7aecb96a6dbc51709dabe4289 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rolf=20Vein=C3=B8=20S=C3=B8rensen?= Date: Mon, 18 Nov 2019 15:00:49 +0100 Subject: [PATCH] Create for v4.20 and tested on current branch for 4.30 --- .../WidgetsNivoSliderViewComponent.cs | 108 +++ .../Content/nivoslider/README | 1 + .../Content/nivoslider/license.txt | 22 + .../Content/nivoslider/nivo-slider.css | 114 +++ .../nivoslider/sample-images/banner1.jpg | Bin 0 -> 62659 bytes .../nivoslider/sample-images/banner2.jpg | Bin 0 -> 65997 bytes .../Content/nivoslider/themes/bar/arrows.png | Bin 0 -> 824 bytes .../Content/nivoslider/themes/bar/bar.css | 132 ++++ .../Content/nivoslider/themes/bar/bullets.png | Bin 0 -> 1281 bytes .../Content/nivoslider/themes/bar/loading.gif | Bin 0 -> 1737 bytes .../nivoslider/themes/custom/arrows.png | Bin 0 -> 1380 bytes .../nivoslider/themes/custom/bullets.png | Bin 0 -> 1281 bytes .../nivoslider/themes/custom/custom.css | 126 ++++ .../nivoslider/themes/custom/loading.gif | Bin 0 -> 1588 bytes .../Content/nivoslider/themes/dark/arrows.png | Bin 0 -> 3088 bytes .../nivoslider/themes/dark/bullets.png | Bin 0 -> 3146 bytes .../Content/nivoslider/themes/dark/dark.css | 102 +++ .../nivoslider/themes/dark/loading.gif | Bin 0 -> 1737 bytes .../nivoslider/themes/default/arrows.png | Bin 0 -> 824 bytes .../nivoslider/themes/default/bullets.png | Bin 0 -> 1281 bytes .../nivoslider/themes/default/default.css | 93 +++ .../nivoslider/themes/default/loading.gif | Bin 0 -> 1737 bytes .../nivoslider/themes/light/arrows.png | Bin 0 -> 3247 bytes .../nivoslider/themes/light/bullets.png | Bin 0 -> 3288 bytes .../Content/nivoslider/themes/light/light.css | 102 +++ .../nivoslider/themes/light/loading.gif | Bin 0 -> 1737 bytes .../WidgetsNivoSliderController.cs | 272 +++++++ .../Cache/ModelCacheEventConsumer.cs | 46 ++ .../Models/ConfigurationModel.cs | 146 ++++ .../Models/PublicInfoModel.cs | 32 + .../NivoSliderPlugin.cs | 136 ++++ .../NivoSliderSettings.cs | 32 + .../Nop.Plugin.Widgets.NivoSlider.csproj | 168 +++++ Nop.Plugin.Widgets.NivoSlider/Notes.txt | 32 + .../Scripts/jquery.nivo.slider.js | 662 ++++++++++++++++++ .../Views/Configure.cshtml | 449 ++++++++++++ .../Views/PublicInfo.cshtml | 78 +++ .../Views/_PublicInfo.SliderLine.cshtml | 23 + .../Views/_ViewImports.cshtml | 8 + Nop.Plugin.Widgets.NivoSlider/logo.jpg | Bin 0 -> 3118 bytes Nop.Plugin.Widgets.NivoSlider/plugin.json | 11 + 41 files changed, 2895 insertions(+) create mode 100644 Nop.Plugin.Widgets.NivoSlider/Components/WidgetsNivoSliderViewComponent.cs create mode 100644 Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/README create mode 100644 Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/license.txt create mode 100644 Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/nivo-slider.css create mode 100644 Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/sample-images/banner1.jpg create mode 100644 Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/sample-images/banner2.jpg create mode 100644 Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/bar/arrows.png create mode 100644 Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/bar/bar.css create mode 100644 Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/bar/bullets.png create mode 100644 Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/bar/loading.gif create mode 100644 Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/custom/arrows.png create mode 100644 Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/custom/bullets.png create mode 100644 Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/custom/custom.css create mode 100644 Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/custom/loading.gif create mode 100644 Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/dark/arrows.png create mode 100644 Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/dark/bullets.png create mode 100644 Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/dark/dark.css create mode 100644 Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/dark/loading.gif create mode 100644 Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/default/arrows.png create mode 100644 Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/default/bullets.png create mode 100644 Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/default/default.css create mode 100644 Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/default/loading.gif create mode 100644 Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/light/arrows.png create mode 100644 Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/light/bullets.png create mode 100644 Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/light/light.css create mode 100644 Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/light/loading.gif create mode 100644 Nop.Plugin.Widgets.NivoSlider/Controllers/WidgetsNivoSliderController.cs create mode 100644 Nop.Plugin.Widgets.NivoSlider/Infrastructure/Cache/ModelCacheEventConsumer.cs create mode 100644 Nop.Plugin.Widgets.NivoSlider/Models/ConfigurationModel.cs create mode 100644 Nop.Plugin.Widgets.NivoSlider/Models/PublicInfoModel.cs create mode 100644 Nop.Plugin.Widgets.NivoSlider/NivoSliderPlugin.cs create mode 100644 Nop.Plugin.Widgets.NivoSlider/NivoSliderSettings.cs create mode 100644 Nop.Plugin.Widgets.NivoSlider/Nop.Plugin.Widgets.NivoSlider.csproj create mode 100644 Nop.Plugin.Widgets.NivoSlider/Notes.txt create mode 100644 Nop.Plugin.Widgets.NivoSlider/Scripts/jquery.nivo.slider.js create mode 100644 Nop.Plugin.Widgets.NivoSlider/Views/Configure.cshtml create mode 100644 Nop.Plugin.Widgets.NivoSlider/Views/PublicInfo.cshtml create mode 100644 Nop.Plugin.Widgets.NivoSlider/Views/_PublicInfo.SliderLine.cshtml create mode 100644 Nop.Plugin.Widgets.NivoSlider/Views/_ViewImports.cshtml create mode 100644 Nop.Plugin.Widgets.NivoSlider/logo.jpg create mode 100644 Nop.Plugin.Widgets.NivoSlider/plugin.json diff --git a/Nop.Plugin.Widgets.NivoSlider/Components/WidgetsNivoSliderViewComponent.cs b/Nop.Plugin.Widgets.NivoSlider/Components/WidgetsNivoSliderViewComponent.cs new file mode 100644 index 0000000..5e6438a --- /dev/null +++ b/Nop.Plugin.Widgets.NivoSlider/Components/WidgetsNivoSliderViewComponent.cs @@ -0,0 +1,108 @@ +using System; +using Microsoft.AspNetCore.Mvc; +using Nop.Core; +using Nop.Core.Caching; +using Nop.Plugin.Widgets.NivoSlider.Infrastructure.Cache; +using Nop.Plugin.Widgets.NivoSlider.Models; +using Nop.Services.Configuration; +using Nop.Services.Localization; +using Nop.Services.Media; +using Nop.Web.Framework.Components; + +namespace Nop.Plugin.Widgets.NivoSlider.Components +{ + [ViewComponent(Name = "WidgetsNivoSlider")] + public class WidgetsNivoSliderViewComponent : NopViewComponent + { + private readonly IStoreContext _storeContext; + private readonly IStaticCacheManager _cacheManager; + private readonly ISettingService _settingService; + private readonly IPictureService _pictureService; + private readonly IWebHelper _webHelper; + private readonly NivoSliderSettings _nivoSliderSettings; + private readonly IWorkContext _workContext; + private readonly ILocalizationService _localizationService; + + public WidgetsNivoSliderViewComponent(IStoreContext storeContext, + IStaticCacheManager cacheManager, + ISettingService settingService, + IPictureService pictureService, + IWebHelper webHelper, + NivoSliderSettings nivoSliderSettings, + IWorkContext workContext, + ILocalizationService localizationService) + { + _storeContext = storeContext; + _cacheManager = cacheManager; + _settingService = settingService; + _pictureService = pictureService; + _webHelper = webHelper; + _nivoSliderSettings = nivoSliderSettings; + _workContext = workContext; + _localizationService = localizationService; + } + + public IViewComponentResult Invoke(string widgetZone, object additionalData) + { + var storeId = _storeContext.CurrentStore.Id; + var languageId = _workContext.WorkingLanguage.Id; + var nivoSliderSettings = _settingService.LoadSetting(storeId); + + var picture1Id = nivoSliderSettings.Picture1Id == "" ? 0 : int.Parse(_localizationService.GetLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Picture1Id, languageId, storeId, true, true)); + var picture2Id = nivoSliderSettings.Picture2Id == "" ? 0 : int.Parse(_localizationService.GetLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Picture2Id, languageId, storeId, true, true)); + var picture3Id = nivoSliderSettings.Picture3Id == "" ? 0 : int.Parse(_localizationService.GetLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Picture3Id, languageId, storeId, true, true)); + var picture4Id = nivoSliderSettings.Picture4Id == "" ? 0 : int.Parse(_localizationService.GetLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Picture4Id, languageId, storeId, true, true)); + var picture5Id = nivoSliderSettings.Picture5Id == "" ? 0 : int.Parse(_localizationService.GetLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Picture5Id, languageId, storeId, true, true)); + + + var model = new PublicInfoModel + { + Picture1Url = GetPictureUrl(picture1Id), + Text1 = _localizationService.GetLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Text1, languageId, storeId, true, true), + Link1 = _localizationService.GetLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Link1, languageId, storeId, true, true), + AltText1 = _localizationService.GetLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.AltText1, languageId, storeId, true, true), + + Picture2Url = GetPictureUrl(picture2Id), + Text2 = _localizationService.GetLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Text2, languageId, storeId, true, true), + Link2 = _localizationService.GetLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Link2, languageId, storeId, true, true), + AltText2 = _localizationService.GetLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.AltText2, languageId, storeId, true, true), + + Picture3Url = GetPictureUrl(picture3Id), + Text3 = _localizationService.GetLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Text3, languageId, storeId, true, true), + Link3 = _localizationService.GetLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Link3, languageId, storeId, true, true), + AltText3 = _localizationService.GetLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.AltText3, languageId, storeId, true, true), + + Picture4Url = GetPictureUrl(picture4Id), + Text4 = _localizationService.GetLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Text4, languageId, storeId, true, true), + Link4 = _localizationService.GetLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Link4, languageId, storeId, true, true), + AltText4 = _localizationService.GetLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.AltText4, languageId, storeId, true, true), + + Picture5Url = GetPictureUrl(picture5Id), + Text5 = _localizationService.GetLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Text5, languageId, storeId, true, true), + Link5 = _localizationService.GetLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Link5, languageId, storeId, true, true), + AltText5 = _localizationService.GetLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.AltText5, languageId, storeId, true, true), + }; + + if (string.IsNullOrEmpty(model.Picture1Url) && string.IsNullOrEmpty(model.Picture2Url) && + string.IsNullOrEmpty(model.Picture3Url) && string.IsNullOrEmpty(model.Picture4Url) && + string.IsNullOrEmpty(model.Picture5Url)) + //no pictures uploaded + return Content(""); + + return View("~/Plugins/Widgets.NivoSlider/Views/PublicInfo.cshtml", model); + } + + protected string GetPictureUrl(int pictureId) + { + var cacheKey = string.Format(ModelCacheEventConsumer.PICTURE_URL_MODEL_KEY, + pictureId, _webHelper.IsCurrentConnectionSecured() ? Uri.UriSchemeHttps : Uri.UriSchemeHttp); + + return _cacheManager.Get(cacheKey, () => + { + //little hack here. nulls aren't cacheable so set it to "" + var url = _pictureService.GetPictureUrl(pictureId, showDefaultPicture: false) ?? ""; + return url; + }); + } + } +} diff --git a/Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/README b/Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/README new file mode 100644 index 0000000..2e5185c --- /dev/null +++ b/Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/README @@ -0,0 +1 @@ +Nivo Slider is "The Most Awesome jQuery Image Slider". See http://nivo.dev7studios.com for more info. \ No newline at end of file diff --git a/Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/license.txt b/Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/license.txt new file mode 100644 index 0000000..664436d --- /dev/null +++ b/Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/license.txt @@ -0,0 +1,22 @@ + Copyright (c) 2010-2012 Dev7studios + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the "Software"), to deal in the Software without + restriction, including without limitation the rights to use, + copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following + conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. diff --git a/Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/nivo-slider.css b/Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/nivo-slider.css new file mode 100644 index 0000000..ca110e9 --- /dev/null +++ b/Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/nivo-slider.css @@ -0,0 +1,114 @@ +/* + * jQuery Nivo Slider v3.2 + * http://nivo.dev7studios.com + * + * Copyright 2012, Dev7studios + * Free to use and abuse under the MIT license. + * http://www.opensource.org/licenses/mit-license.php + */ + +/* The Nivo Slider styles */ +.nivoSlider { + position:relative; + width:100%; + height:auto; + overflow: hidden; +} +.nivoSlider img { + position:absolute; + top:0px; + left:0px; + max-width: none; +} +.nivo-main-image { + display: block !important; + position: relative !important; + width: 100% !important; + height: auto; +} + +/* If an image is wrapped in a link */ +.nivoSlider a.nivo-imageLink { + position:absolute; + top:0px; + left:0px; + width:100%; + height:100%; + border:0; + padding:0; + margin:0; + z-index:6; + display:none; + background:white; + filter:alpha(opacity=0); + opacity:0; +} +/* The slices and boxes in the Slider */ +.nivo-slice { + display:block; + position:absolute; + z-index:5; + height:100%; + top:0; +} +.nivo-box { + display:block; + position:absolute; + z-index:5; + overflow:hidden; +} +.nivo-box img { display:block; } + +/* Caption styles */ +.nivo-caption { + position:absolute; + left:0px; + bottom:0px; + background:#000; + color:#fff; + width:100%; + z-index:8; + padding: 5px 10px; + opacity: 0.8; + overflow: hidden; + display: none; + -moz-opacity: 0.8; + filter:alpha(opacity=8); + -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */ + -moz-box-sizing: border-box; /* Firefox, other Gecko */ + box-sizing: border-box; /* Opera/IE 8+ */ +} +.nivo-caption p { + padding:5px; + margin:0; +} +.nivo-caption a { + display:inline !important; +} +.nivo-html-caption { + display:none; +} +/* Direction nav styles (e.g. Next & Prev) */ +.nivo-directionNav a { + position:absolute; + top:45%; + z-index:8; + cursor:pointer; +} +.nivo-prevNav { + left:0px; +} +.nivo-nextNav { + right:0px; +} +/* Control nav styles (e.g. 1,2,3...) */ +.nivo-controlNav { + text-align:center; + padding: 15px 0; +} +.nivo-controlNav a { + cursor:pointer; +} +.nivo-controlNav a.active { + font-weight:bold; +} \ No newline at end of file diff --git a/Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/sample-images/banner1.jpg b/Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/sample-images/banner1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ff7e6aad080a55fe7ddb570f18acc82e827fd264 GIT binary patch literal 62659 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 K!M=W-5?!H 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 literal 0 HcmV?d00001 diff --git a/Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/bar/loading.gif b/Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/bar/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1560b646cff2cc4fd292d7fdb6f7adc7eb484b4a GIT binary patch literal 1737 zcmaLXeN0p99l-I&!tEQiv~W&~lv_&SmI|fRw)eE0zR=T_(^9a!crF*Q_O?JP*50BW za+x#6J*VfyIVLB@`G?mSW{fe8%LJS?j`_k2*Er)fUT2(h#u;OrF~)0*amLK)uKSPd z_ve%6mwfVklPAzh+MD7sAOkM}c>DG(0N}=r8~gU{i^XCdkH_!#XEK??hY#PmbLYsB zBQ-TOdcEFcGGQ3zcDqxl)R{A9Dk>_n+3b@iPo6$~y0EaYd-v|n&dz8wdiLzuYuB#f zIId7A#>dBxA3q+6M7D3=e*gY`mSv?<>Cn*7!Gi~r$>gb1r$~|%i^V5SoY=pAe_2@> zpU;2v=+TQ8FUH2ka=F~gmoFiN$BrF){rdHrH*e0LKY#i1-Mo2odV2cVvuD?@ zUw`o6!QH!euU@^nxVSh!KY#Duy<4|#J%9fE_U+r-wrx9k^5pF7Y2!hz{_K}ehqtPf73O8@wtkGyFib|)`J9qAU_vSxN)!U+Q3$?~abhem{rh;Yf zPOJW1?#m|PBZ)!HR~tu$H1Sk?EIk|_G;Yi!he6f93Ps{~w+!$1-$w+3U+n~t&M}Ot zdSwI42rFvpj1a?ZjJW9IPwE??&E&#p9=}A*VhFMy6cm+?16Q*P7E0tZ7Ed$$XgM+i z94(M9MQ3b;8w!dQGl;PjLVE4Y?<_P{QXeB^>`CbQFBvD_OT*#R6y9XGLopA~j#=m{7->pd6t>(Yi=3 zP}uo3V`jwsY7W}yU|ZK5z%f|Z?m9z~uy*yuIRu5uFfoVs{~5H(gmaYV0%%rtm$QvL z{~uwK+1e_?@y3>z>U)~d^%(jpL%ul0QBAF>DcN4YPSb$5Y$@O`J^)4H(vAG6fyV-$ zpp9QFT`ozb8GCfYP#22&x;IILw01D;WQQ6$Rd7I-5KT1ikgn+a(|F~;N5`@Dq1(|Cs^MXKy8P08>2 ze(zaIH}OH&tXIpzRp|f=nv{at6&u#2!XbvJ4yIM4%e%g~!%0&*vz<+T(e8jvJ$eoV zB?T~K5as2YK8NWfo<~YPgTv`>IqKsqR5<(dp)cEDK=00n>#89cvunA{%L%$M)}%E- z+Y7LTL0WhsE#TMm`-=Xj>PZ!`)~ z(K&8wwg6)N&3|FkYgh7U3x!zd`r4lqi5ZME;n0{F5#}>?i)rEJH#GeJiA|m+eZ8DO zSU?f>fl#Gzi`dPes#t)+aBX={4?$xdcO&byCid?1(awZqf1}Z}+v{|OO zt|T#wanNsY&NCKu;zG`1RYSh)xbINpDJ|DFE; D?d&fs literal 0 HcmV?d00001 diff --git a/Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/custom/arrows.png b/Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/custom/arrows.png new file mode 100644 index 0000000000000000000000000000000000000000..5a3c7df3ab661d25a2c1f8f473e21984d6a59faa GIT binary patch literal 1380 zcmeAS@N?(olHy`uVBq!ia0vp^0YGfS!3HEhs@wJeDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg49rTIArU1JzCKpT`MG+DAT@dwxdlMoK*Q`S3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvv ztM~P_^2{qPNz6-5^>ndS0-B(gnVDi`Xm0N0X5eVy1JwS z>1J#M)9aF-T$-DjR|3v4~Pj*wm=R%;iu*SQ+p9GSu0IdUckV>c*E1hF{I+w zo0}W64h4v?C5SG}fAr$Xs|ObvVq5%5bsmY_vAUt2(Uy1AbIIblTzXuEFCM&l@?!Fq z;3~a8jop)HRiD}W(7vF6bNc_fS#yqD*{rjAdcSZ*mixb=A9PPb#d+AiV^ zx-7FQ`qGvCChQC?*|>~(k37pSz8Bwg&u4A=zN9~up{?t=$i_&9^D$H6nT~E2e7|A( z3#lV%jC;agrn1gEHtpJ!eG(sMDQ=o@FO229+nuERSHTr3wfeSe1Re-fOWl1WV)tnI zym@n&6d&)s`$;N8c^2n4@ec}>Q|k1Sxt@2}DqLf7F{zMGy~p0x^Md6(YeL_RkZ4kar}5GnbhLL zoU-O8S4G#2uMF!~w=QR$p*(AQ;YRib!%c5Y#hzCuA_r+VC|nsMK?LUsB?ZRj74?j4 Z44=PVU90H(-~p)I^K|udS?83{1OUrF?nwXu literal 0 HcmV?d00001 diff --git a/Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/custom/bullets.png b/Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/custom/bullets.png new file mode 100644 index 0000000000000000000000000000000000000000..a84c9c0bdcca94fc2633b96616173322e2639e9d GIT binary patch literal 1281 zcmV+c1^)VpP)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ=he8jc6r^nnr|1i9*sBsN>|l+s%D)eZFKI zrgPx%-s9f;-E&XA^W76dDaHFR0q@ByRk4IR9woE4Tm7*v?zu)hXB#8t9fksJ^zCJoS`VxShJIPI>l-_VQ$qL|p zBog_2b8}M`MNtND?M|mtJ~%j#r>3Tw0aUa3gvYEDvFP=BJ7;EQpsMPP!D6w9a5#*< zzP?VD3i4Jww%KgXTrOuiRwxu8Nm7+*8r}e`9UmX>_Vo0a4t95UBb`p~GDgt5=2!wy zU0YjQS1Og{{{H?OISz$Fawd}*1Mne$du;xV9228faCDOZ*cKNTAGNf!__EpTr|awM z=;-Kx!{LZ8EG)bn85#Ktz$?aQjjP785$jPq0Ne*qJ3Bkuy1l(UI6Xc68GwfXJ}}U& za>QKJe4$uOO1cC<)gz^p(l=@aH%Vp3Q_F~usZLbX3VpIJGL`1Mm2BQ+@tyV9pd;^O z?~GLLK$ibuQ+k)h#N?ga0rd7YRR*Y>8^LZl<*JN-3S40bhHqlRVanfsJh;W=CKkDh z6S;4J1J+p4sNB0=k(3ZZjKDg8MfbhEz25rz`T;(%s;VlXQ0SZa`T0C6ZT=(#0Oj+? z14;m_#bWX2t*tH0&CRKaL_*DGv)bdwk42x)Ck_t}i@99xrN`rW3gC)uaIGK2kOGMV z{bg%w3mqLDmu7VE`~6}h60sg09zJbuZhp?d^|n9*2Wn-a{a}B8|H;bAN>ms2$;rvR zlamvrSS-F?T3Y(Msi`RnKn@0jFBCR(Q9BEyKx^XiV_;k8!U_QZ5{ZNg07FAV9%C9j9#3_De}4@CtgWrl z-rn9`qu2|^Lh*XNRsc9ZKL-G~TrR6wj_c~`>;RC<DwX=xs2PGu?Q4|M%dW020RV!*;BGpdR`dy1S6AxT z*w{`gmHM}{vr}wnXdvzF?FmC^!^ny%0It!|(T^2Hi3I|IX8>fo-M%<5Ft8d5h5pbP z;dDBGOD2=CY&QENfExD0+l;IbxLdgzKutQG{#H?xSTGoT!S@sZWS`IXY-eXDRxB2y zjA||xl-_;bYOqDV`jW|HS7T#i@bdDKY;0_(XJ==$t*uRTyWJ=h3ctJE?rE-1E^+#C zD;*Le`8`JX2LNiv$Hza(WHR4fTwMGVjYhjz2UNo%b#lG3-X;(;4HgV15Gu%~YLHFM rD4W#KjPQ#|nLjt0feAO7!~X^V+7UM$e>T6y00000NkvXXu0mjfjABY9 literal 0 HcmV?d00001 diff --git a/Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/custom/custom.css b/Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/custom/custom.css new file mode 100644 index 0000000..c490e04 --- /dev/null +++ b/Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/custom/custom.css @@ -0,0 +1,126 @@ + +/* GLOBAL */ + +.theme-custom { + position: relative; + margin: 0 auto 60px; +} +.theme-custom .nivoSlider { + position: relative; + z-index: 0; + background: #fff url('loading.gif') 50% 50% no-repeat; +} +.theme-custom .nivoSlider img { + display: none; + position: absolute; + top: 0px; + left: 0px; +} +.theme-custom .nivoSlider a { + display: block; + border: 0; +} + +/* BULLET NAVIGATION */ + +.theme-custom .nivo-controlNav { + position: absolute; + bottom: 0; + z-index: 1; + width: 100%; + padding: 20px 0; + text-align: center; + font-size: 0; +} +.theme-custom .nivo-controlNav a { + display: inline-block; + width: 14px; + height: 14px; + margin: 0 7px; + box-shadow: 0 0 1px 0 rgba(0,0,0,0.2); + background-color: #fff; + font-size: 0; +} +.theme-custom .nivo-controlNav a.active { + background-color: #4ab2f1; +} + +/* DIRECTIONAL NAVIGATION */ + +.theme-custom .nivo-directionNav a { + display: block; + width: 40px; + height: 60px; + border:0; + background: rgba(255,255,255,0.8) url('arrows.png') no-repeat; + font-size: 0; + opacity: 0; + -webkit-transition: all 200ms ease-in-out; + -moz-transition: all 200ms ease-in-out; + -o-transition: all 200ms ease-in-out; + transition: all 200ms ease-in-out; +} +.theme-custom a.nivo-prevNav { + left: 0; + background-position: left center; +} +.theme-custom a.nivo-nextNav { + right: 0; + background-position: right center; +} +.theme-custom:hover .nivo-directionNav a { + opacity: 0.9; +} +.theme-custom .nivo-directionNav a:hover { + background-color: rgba(255,255,255,1); +} + +/* CAPTION */ + +.theme-custom .nivo-caption { + background-color: 333; +} +.theme-custom .nivo-caption a { + color: #fff; +} +.theme-custom .nivo-caption a:hover { + color: #4ab2f1; +} + +/* THUMBNAILS */ + +.theme-custom .nivo-controlNav.nivo-thumbs-enabled { + width: 100%; +} +.theme-custom .nivo-controlNav.nivo-thumbs-enabled a { + width: auto; + height: auto; + background: none; + margin-bottom: 5px; +} +.theme-custom .nivo-controlNav.nivo-thumbs-enabled img { + display: block; + width: 120px; + height: auto; +} + +/* RESPONSIVE */ + +@media all and (max-width: 1000px) { +.theme-custom { + max-width: 600px; + margin: -20px auto 40px; +} +.theme-custom .nivo-directionNav { + display: none; +} +} + +@media all and (min-width: 1001px) { +.theme-custom { + margin: -30px 0 60px; +} +.theme-custom .nivo-directionNav { + display: none; /* remove to use directional navigation */ +} +} \ No newline at end of file diff --git a/Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/custom/loading.gif b/Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/custom/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..e552f291bb52810f9a64f99159d23c6e7aceb05d GIT binary patch literal 1588 zcmZXUdo+}39LJw|=h8cx)eNI%G&H0_GZJBR+1_#6A(u&mlFK-n8e^1ORN5LtGqTcb zDj6k_T-s1BF=CTTvR#oVxm4079Z_2yo!Yl;&+hEm=bz`F-+4a2@8vu{xVv#2!DztnwqMrsuBnU;D5*D%WQ8~!3Jk8-_^#-8jC>( zOg`f9I_S;%I{funfa@T4xR;uodwFZgN57c(K&D^;7teAxTHsXF-As7>X+)3x_`rb6 zBz+emyXM8C@AU=?RE|XQ$wD8~`jh6^<{_afhnZ(6njqxS+Qai|2Es0@Cu90VLlskQ zj-mVJ@4&8>d*b}GtRzj;+F}j$LQvD%1`zB}DYz7y*qnX6BeA%P zM6Vg;zv5^>4;8l=6}J?&AIESE6muor2)RGsKX1#)lA>BVYfHOF4dj`SLMa0J=T_nm zmOjm*;vi4=fZrD_!kE7er1AD|WWNBnSGS40{y5&tXqu>7g;ccsme6p8@6a=<#rx{4 z5zs|>;V5q#&2F3>qdOpw^$2}=JR;POF-F=MOQ~7(Zi#Tr(D?dQ^(kHJP54raJ{2uv z*p5PmyAj}EVj2{jKC-7VqUL7Hig=Sy_81f}x>zO}n`!sp+112ZVw35ymX=!FStyqd zC@43G+(Asw=R^uqn}-spCxpJv8a#Km_sdS>tliDdCk&)Z`}Lfq*cU&8tJgrKnMX#) z1M<_POPNQJs=8aaO2b!rBWCsuBEIzm^={wfE(KDdA0OQited~&6+sJ#NM=owsFl8e!^*J$JGCx1spjxcMn0TLVl!`2(lVas9Z5(Dn1`t~ruJO+9 z9d9e1NT{kW>|0k!+B#S+OEMtC@YKu%4o`@KXgP@ylz3FpKRx|MG)9TB8Xf>s|jjmc5W_n-h2;7hOxrJOw?m8G~WOz227jVHp$>4eCQ78rD~=>xX!@DPa0%#DqmBpKkgw$joOFIXvplG*NIFpy6 zbAx(R4T)krNF;*qgLi=g+gEkwJyRd!)a#ETPGYQ8H9r^OZhM}!lj!s8@Vi7D(a>n0 z6#*yG4jD#^^{vc-f0db|44>&ykBQv;)5Pfni6tzJY!09$hbaJZ5$^oA0XJ ziFKUu&EubQTo&nz^UU|a5s}qHAcd!(ih*v*zIVA!!V_;UTCb)fS8=dX=_zPwu|Di` z`r!LO`(-WQb$ChOufiwxaqKdO=hGBh!p`M{<{!^ddTh0L7yzS*eyy^=nrtd-{E+VG z^%*#Phe@NGhHdQ-Twt;8#77N%kdT~jO;--hsT~i~t(bEsZaIuAlJ)p@Q1j$iBoGQ~ z2;zez;{Hm%pB$%Ol@*_s&#Y12z-WO0fY1buP|y~%IvM%9^lWSfU5342j^xo!!^QX4 z509rKTqf0OUif6^!W5TX5JS*5D7=C5P~XbfK@={opgpu;lEuppl=p>G=Ii=SpCu#f gu7!9AZ)eplQSQ!veQ(-U8t1ylUG6?>KLxD%6X;S+F#rGn literal 0 HcmV?d00001 diff --git a/Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/dark/arrows.png b/Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/dark/arrows.png new file mode 100644 index 0000000000000000000000000000000000000000..fe7f378c4011120aa117614d00cf70ea9f88ad5d GIT binary patch literal 3088 zcmV+r4Da)aP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0003yNkl<(|-&NJiyAy!*!NNEuQ=@kU+>@>Qf=z>{uk3d4| z#bSvESn&WkgKcp2y-j7%1H7*qruyLje=N%q&MX#-s4PnujYczY$b3G(MZ{NY?elm% z-k<;Kd?ZN{iO5uI{SwFVjY}D3eiM;<5n0D^T)mQ6tyYnUOhu$%=H_rX{BbGcdES%O zdRM7bYL`M31VI!8!BlHqAY!xI?WW+EFbse5JpW+k2O_!yfJT;OpUU@rVrC#BbJ-u) zSZhHkWtbV5nTQA|P1En~cB_<94P(sXX0yq|FmxKza=ENB^V;|Q8UXB$$78+U@9z}= zK)cd=7IZOxky1kd0000KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0004XNkl1|T!0I8A#=l}+lQYk5wzz5I) z>@yf#3Ac8UD+p3;kpyXX-@KU=tC*z7p9ACv(+nTO4D*q@W3^h1nR!!H)dc{QQg*63 zo6qNaTCdmVF~)}&V=W>8fSfbhwr$$Bz2q32y!-jz1;fFZmDrBftRgX7g!Gfj1Ne<=o27O=pj@S9^N>@##EBd?1N6 zRf8~I6rS70a(l^Uz9fVis4x`Za5zG3=1bPzCQb&j0t&-t-3+dV(%Xc~v4b0fDhE!= z!5vvk}-~_g*b) kGht=trMvok^M3z*02NEVY8T7bH~;_u07*qoM6N<$g5a*$rT_o{ literal 0 HcmV?d00001 diff --git a/Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/dark/dark.css b/Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/dark/dark.css new file mode 100644 index 0000000..06d7548 --- /dev/null +++ b/Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/dark/dark.css @@ -0,0 +1,102 @@ +/* +Skin Name: Nivo Slider Dark Theme +Skin URI: http://nivo.dev7studios.com +Description: A dark skin for the Nivo Slider. +Version: 1.0 +Author: Gilbert Pellegrom +Author URI: http://dev7studios.com +Supports Thumbs: true +*/ + +.theme-dark.slider-wrapper { + background: #222; + padding: 10px; +} +.theme-dark .nivoSlider { + position:relative; + background:#fff url(loading.gif) no-repeat 50% 50%; + margin-bottom:10px; + overflow: visible; +} +.theme-dark .nivoSlider img { + position:absolute; + top:0px; + left:0px; + display:none; +} +.theme-dark .nivoSlider a { + border:0; + display:block; +} + +.theme-dark .nivo-controlNav { + text-align: left; + padding: 0; + position: relative; + z-index: 10; +} +.theme-dark .nivo-controlNav a { + display:inline-block; + width:10px; + height:10px; + background:url(bullets.png) no-repeat 0 2px; + text-indent:-9999px; + border:0; + margin: 0 2px; +} +.theme-dark .nivo-controlNav a.active { + background-position:0 100%; +} + +.theme-dark .nivo-directionNav a { + display:block; + width:30px; + height:30px; + background: url(arrows.png) no-repeat; + text-indent:-9999px; + border:0; + top: auto; + bottom: -36px; + z-index: 11; +} +.theme-dark .nivo-directionNav a:hover { + background-color: #333; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; +} +.theme-dark a.nivo-nextNav { + background-position:-16px 50%; + right:0px; +} +.theme-dark a.nivo-prevNav { + background-position:11px 50%; + left: auto; + right: 35px; +} + +.theme-dark .nivo-caption { + font-family: Helvetica, Arial, sans-serif; +} +.theme-dark .nivo-caption a { + color:#fff; + border-bottom:1px dotted #fff; +} +.theme-dark .nivo-caption a:hover { + color:#fff; +} + +.theme-dark .nivo-controlNav.nivo-thumbs-enabled { + width: 80%; +} +.theme-dark .nivo-controlNav.nivo-thumbs-enabled a { + width: auto; + height: auto; + background: none; + margin-bottom: 5px; +} +.theme-dark .nivo-controlNav.nivo-thumbs-enabled img { + display: block; + width: 120px; + height: auto; +} \ No newline at end of file diff --git a/Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/dark/loading.gif b/Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/dark/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1560b646cff2cc4fd292d7fdb6f7adc7eb484b4a GIT binary patch literal 1737 zcmaLXeN0p99l-I&!tEQiv~W&~lv_&SmI|fRw)eE0zR=T_(^9a!crF*Q_O?JP*50BW za+x#6J*VfyIVLB@`G?mSW{fe8%LJS?j`_k2*Er)fUT2(h#u;OrF~)0*amLK)uKSPd z_ve%6mwfVklPAzh+MD7sAOkM}c>DG(0N}=r8~gU{i^XCdkH_!#XEK??hY#PmbLYsB zBQ-TOdcEFcGGQ3zcDqxl)R{A9Dk>_n+3b@iPo6$~y0EaYd-v|n&dz8wdiLzuYuB#f zIId7A#>dBxA3q+6M7D3=e*gY`mSv?<>Cn*7!Gi~r$>gb1r$~|%i^V5SoY=pAe_2@> zpU;2v=+TQ8FUH2ka=F~gmoFiN$BrF){rdHrH*e0LKY#i1-Mo2odV2cVvuD?@ zUw`o6!QH!euU@^nxVSh!KY#Duy<4|#J%9fE_U+r-wrx9k^5pF7Y2!hz{_K}ehqtPf73O8@wtkGyFib|)`J9qAU_vSxN)!U+Q3$?~abhem{rh;Yf zPOJW1?#m|PBZ)!HR~tu$H1Sk?EIk|_G;Yi!he6f93Ps{~w+!$1-$w+3U+n~t&M}Ot zdSwI42rFvpj1a?ZjJW9IPwE??&E&#p9=}A*VhFMy6cm+?16Q*P7E0tZ7Ed$$XgM+i z94(M9MQ3b;8w!dQGl;PjLVE4Y?<_P{QXeB^>`CbQFBvD_OT*#R6y9XGLopA~j#=m{7->pd6t>(Yi=3 zP}uo3V`jwsY7W}yU|ZK5z%f|Z?m9z~uy*yuIRu5uFfoVs{~5H(gmaYV0%%rtm$QvL z{~uwK+1e_?@y3>z>U)~d^%(jpL%ul0QBAF>DcN4YPSb$5Y$@O`J^)4H(vAG6fyV-$ zpp9QFT`ozb8GCfYP#22&x;IILw01D;WQQ6$Rd7I-5KT1ikgn+a(|F~;N5`@Dq1(|Cs^MXKy8P08>2 ze(zaIH}OH&tXIpzRp|f=nv{at6&u#2!XbvJ4yIM4%e%g~!%0&*vz<+T(e8jvJ$eoV zB?T~K5as2YK8NWfo<~YPgTv`>IqKsqR5<(dp)cEDK=00n>#89cvunA{%L%$M)}%E- z+Y7LTL0WhsE#TMm`-=Xj>PZ!`)~ z(K&8wwg6)N&3|FkYgh7U3x!zd`r4lqi5ZME;n0{F5#}>?i)rEJH#GeJiA|m+eZ8DO zSU?f>fl#Gzi`dPes#t)+aBX={4?$xdcO&byCid?1(awZqf1}Z}+v{|OO zt|T#wanNsY&NCKu;zG`1RYSh)xbINpDJ|DFE; D?d&fs literal 0 HcmV?d00001 diff --git a/Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/default/arrows.png b/Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/default/arrows.png new file mode 100644 index 0000000000000000000000000000000000000000..8f562bd81836e8c835dc968751a1a9760a679928 GIT binary patch literal 824 zcmV-81IPS{P)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ;zDYzuRCwCdnXhx=KorM6WSAi?u5ma}hwHhzIB<29=kC9%ySj7W;#vg`RL{i) zhf5U|yv(GzZ1(MDb2Im5GB6?J?RR&--}hrD*XtFf#lRgf@A&NkoPm;YEEV5L$8UxB zt~4*2DxO&a-{jL~7vKmSv;(kA@IA0H0Bzg5_$~S#n)Ix23S@>AwOJ+3Up>J-2-w); zzXgz+cAE+CcL6)pO5nGwyv7pXQ6_t+<-lG8cq7{=lvTisg5N3dJ#U~37lM%ooSTYmfrEKLfES9Zmvd0m?HtD%+1CD{U2R~gy%Y#9n(vf|y>j|v^ zyDDNXm#ek?By!J3kaEWzc3%UI9i48w)X&v%gJZs1dEXW!&16TwLg};uo<;eF3Q5;@ zUlo2T#Rze;9QfX?jIA@LhobPeW>_j5w^!oH>0EhF!`Z}o8U$I6Ycw=zV~))0F;x!PM2YOeOXvft>CgRxl%6U+p4b zzw9bgU%KvbEeFo-&Li|#vn3^GcU`-6VmVuyb8E8A9f2MgcHC08f?RuTg{ZMn`6tT5 zw3OTVQi}O7tpxta6-ozU>Bua4IwXboK54SX&jA4Ddbz!~r#v120000(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ=he8jc6r^nnr|1i9*sBsN>|l+s%D)eZFKI zrgPx%-s9f;-E&XA^W76dDaHFR0q@ByRk4IR9woE4Tm7*v?zu)hXB#8t9fksJ^zCJoS`VxShJIPI>l-_VQ$qL|p zBog_2b8}M`MNtND?M|mtJ~%j#r>3Tw0aUa3gvYEDvFP=BJ7;EQpsMPP!D6w9a5#*< zzP?VD3i4Jww%KgXTrOuiRwxu8Nm7+*8r}e`9UmX>_Vo0a4t95UBb`p~GDgt5=2!wy zU0YjQS1Og{{{H?OISz$Fawd}*1Mne$du;xV9228faCDOZ*cKNTAGNf!__EpTr|awM z=;-Kx!{LZ8EG)bn85#Ktz$?aQjjP785$jPq0Ne*qJ3Bkuy1l(UI6Xc68GwfXJ}}U& za>QKJe4$uOO1cC<)gz^p(l=@aH%Vp3Q_F~usZLbX3VpIJGL`1Mm2BQ+@tyV9pd;^O z?~GLLK$ibuQ+k)h#N?ga0rd7YRR*Y>8^LZl<*JN-3S40bhHqlRVanfsJh;W=CKkDh z6S;4J1J+p4sNB0=k(3ZZjKDg8MfbhEz25rz`T;(%s;VlXQ0SZa`T0C6ZT=(#0Oj+? z14;m_#bWX2t*tH0&CRKaL_*DGv)bdwk42x)Ck_t}i@99xrN`rW3gC)uaIGK2kOGMV z{bg%w3mqLDmu7VE`~6}h60sg09zJbuZhp?d^|n9*2Wn-a{a}B8|H;bAN>ms2$;rvR zlamvrSS-F?T3Y(Msi`RnKn@0jFBCR(Q9BEyKx^XiV_;k8!U_QZ5{ZNg07FAV9%C9j9#3_De}4@CtgWrl z-rn9`qu2|^Lh*XNRsc9ZKL-G~TrR6wj_c~`>;RC<DwX=xs2PGu?Q4|M%dW020RV!*;BGpdR`dy1S6AxT z*w{`gmHM}{vr}wnXdvzF?FmC^!^ny%0It!|(T^2Hi3I|IX8>fo-M%<5Ft8d5h5pbP z;dDBGOD2=CY&QENfExD0+l;IbxLdgzKutQG{#H?xSTGoT!S@sZWS`IXY-eXDRxB2y zjA||xl-_;bYOqDV`jW|HS7T#i@bdDKY;0_(XJ==$t*uRTyWJ=h3ctJE?rE-1E^+#C zD;*Le`8`JX2LNiv$Hza(WHR4fTwMGVjYhjz2UNo%b#lG3-X;(;4HgV15Gu%~YLHFM rD4W#KjPQ#|nLjt0feAO7!~X^V+7UM$e>T6y00000NkvXXu0mjfjABY9 literal 0 HcmV?d00001 diff --git a/Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/default/default.css b/Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/default/default.css new file mode 100644 index 0000000..eea0ef3 --- /dev/null +++ b/Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/default/default.css @@ -0,0 +1,93 @@ +/* +Skin Name: Nivo Slider Default Theme +Skin URI: http://nivo.dev7studios.com +Description: The default skin for the Nivo Slider. +Version: 1.3 +Author: Gilbert Pellegrom +Author URI: http://dev7studios.com +Supports Thumbs: true +*/ + +.theme-default .nivoSlider { + position:relative; + background:#fff url(loading.gif) no-repeat 50% 50%; + margin-bottom:10px; + -webkit-box-shadow: 0px 1px 5px 0px #4a4a4a; + -moz-box-shadow: 0px 1px 5px 0px #4a4a4a; + box-shadow: 0px 1px 5px 0px #4a4a4a; +} +.theme-default .nivoSlider img { + position:absolute; + top:0px; + left:0px; + display:none; +} +.theme-default .nivoSlider a { + border:0; + display:block; +} + +.theme-default .nivo-controlNav { + text-align: center; + padding: 20px 0; +} +.theme-default .nivo-controlNav a { + display:inline-block; + width:22px; + height:22px; + background:url(bullets.png) no-repeat; + text-indent:-9999px; + border:0; + margin: 0 2px; +} +.theme-default .nivo-controlNav a.active { + background-position:0 -22px; +} + +.theme-default .nivo-directionNav a { + display:block; + width:30px; + height:30px; + background:url(arrows.png) no-repeat; + text-indent:-9999px; + border:0; + opacity: 0; + -webkit-transition: all 200ms ease-in-out; + -moz-transition: all 200ms ease-in-out; + -o-transition: all 200ms ease-in-out; + transition: all 200ms ease-in-out; +} +.theme-default:hover .nivo-directionNav a { opacity: 1; } +.theme-default a.nivo-nextNav { + background-position:-30px 0; + right:15px; +} +.theme-default a.nivo-prevNav { + left:15px; +} + +.theme-default .nivo-caption { + font-family: Helvetica, Arial, sans-serif; +} +.theme-default .nivo-caption a { + color:#fff; + border-bottom:1px dotted #fff; +} +.theme-default .nivo-caption a:hover { + color:#fff; +} + +.theme-default .nivo-controlNav.nivo-thumbs-enabled { + width: 100%; +} +.theme-default .nivo-controlNav.nivo-thumbs-enabled a { + width: auto; + height: auto; + background: none; + margin-bottom: 5px; +} +.theme-default .nivo-controlNav.nivo-thumbs-enabled img { + display: block; + width: 120px; + height: auto; +} \ No newline at end of file diff --git a/Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/default/loading.gif b/Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/default/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..1560b646cff2cc4fd292d7fdb6f7adc7eb484b4a GIT binary patch literal 1737 zcmaLXeN0p99l-I&!tEQiv~W&~lv_&SmI|fRw)eE0zR=T_(^9a!crF*Q_O?JP*50BW za+x#6J*VfyIVLB@`G?mSW{fe8%LJS?j`_k2*Er)fUT2(h#u;OrF~)0*amLK)uKSPd z_ve%6mwfVklPAzh+MD7sAOkM}c>DG(0N}=r8~gU{i^XCdkH_!#XEK??hY#PmbLYsB zBQ-TOdcEFcGGQ3zcDqxl)R{A9Dk>_n+3b@iPo6$~y0EaYd-v|n&dz8wdiLzuYuB#f zIId7A#>dBxA3q+6M7D3=e*gY`mSv?<>Cn*7!Gi~r$>gb1r$~|%i^V5SoY=pAe_2@> zpU;2v=+TQ8FUH2ka=F~gmoFiN$BrF){rdHrH*e0LKY#i1-Mo2odV2cVvuD?@ zUw`o6!QH!euU@^nxVSh!KY#Duy<4|#J%9fE_U+r-wrx9k^5pF7Y2!hz{_K}ehqtPf73O8@wtkGyFib|)`J9qAU_vSxN)!U+Q3$?~abhem{rh;Yf zPOJW1?#m|PBZ)!HR~tu$H1Sk?EIk|_G;Yi!he6f93Ps{~w+!$1-$w+3U+n~t&M}Ot zdSwI42rFvpj1a?ZjJW9IPwE??&E&#p9=}A*VhFMy6cm+?16Q*P7E0tZ7Ed$$XgM+i z94(M9MQ3b;8w!dQGl;PjLVE4Y?<_P{QXeB^>`CbQFBvD_OT*#R6y9XGLopA~j#=m{7->pd6t>(Yi=3 zP}uo3V`jwsY7W}yU|ZK5z%f|Z?m9z~uy*yuIRu5uFfoVs{~5H(gmaYV0%%rtm$QvL z{~uwK+1e_?@y3>z>U)~d^%(jpL%ul0QBAF>DcN4YPSb$5Y$@O`J^)4H(vAG6fyV-$ zpp9QFT`ozb8GCfYP#22&x;IILw01D;WQQ6$Rd7I-5KT1ikgn+a(|F~;N5`@Dq1(|Cs^MXKy8P08>2 ze(zaIH}OH&tXIpzRp|f=nv{at6&u#2!XbvJ4yIM4%e%g~!%0&*vz<+T(e8jvJ$eoV zB?T~K5as2YK8NWfo<~YPgTv`>IqKsqR5<(dp)cEDK=00n>#89cvunA{%L%$M)}%E- z+Y7LTL0WhsE#TMm`-=Xj>PZ!`)~ z(K&8wwg6)N&3|FkYgh7U3x!zd`r4lqi5ZME;n0{F5#}>?i)rEJH#GeJiA|m+eZ8DO zSU?f>fl#Gzi`dPes#t)+aBX={4?$xdcO&byCid?1(awZqf1}Z}+v{|OO zt|T#wanNsY&NCKu;zG`1RYSh)xbINpDJ|DFE; D?d&fs literal 0 HcmV?d00001 diff --git a/Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/light/arrows.png b/Nop.Plugin.Widgets.NivoSlider/Content/nivoslider/themes/light/arrows.png new file mode 100644 index 0000000000000000000000000000000000000000..1c5d881fab643bc80cb011162463311c9ae1b08e GIT binary patch literal 3247 zcmV;g3{dllP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0005nNkl&x;aa7{KxGIODL)I5MIg3X%{OyF{@B5yF%pqTpd}B6O_lUOaS( z4ne0S4_zvUE)hW;WdlWs@Vu}GDG!R9!a@=&)v}H_lW!My5&r>wPA|Nd&-3v7kc1E{ zg<7dpo(Ul+m&;Fq8S9OJ<2ZN6vvZE*Ab!V zbow$F4Bi_Khs{Q#5eKAIyy`g4-fTA8)pdQIPN(1Ha=DWYz;BgGr8luy?3bb_*L%HQ zV>yAqdBr`?+tqb_Zdum;&d$zf-~^bj8Gjaw#oD%Qzl}ztV?|Mt%LxPkBNB;RR#g>Q zmc?W;IRXwg1U~`3yRLg6%kn=}Rnasp6pzO*0g@zyhywRpt=5x%zkkd3ea|qAhs9#? z1K_V2FEyLZ_+T(-%Cfv|7{;GWCiB8H&5uAY0GtAC%d%c25{W}0L~t}3Ikj5t_6GF4 z*6nsb`M$rcY1%lO&Av8G^9%435Xxd5{s6vOmWAhek6hRNT__a(F7WGY9X*vw)jFNd zm3%(`J{%731MNk@g|xKiRp1(M1Mq-D;CRjWFmMyN3LF97&fx&k>X8DB#rt#KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z00065Nkl74ZcGp-Wv<`vlVNd;zyv zxGr>GAz<8E@Cme(Y;;qwR4gS8RqRYOb?)SzE=;PMf{X6@!&#m0aNwLzi3ot+*w~op zbUN$KxfuYh^ZJ_MW+5#4AsrrYiIP7nl<@B08)Ye~~IE|<&mOG`_;2FS;8 zT+iq8Q5c5Y1be++)a`cbz;gqXfY~q%3BwR$3;@O$lu~rN-5Fra0Fm$e%J=<0%^_%v zAqWBu6f{7wSUl!0DHe-I02+v^)oN2IWwR_pL=X|OEJG<}tJUfjkQm^!QmMR;qUcVm z)mliBqy#WBGICn0)taSJX&X3EBBFs&U=pYSe9Ly6my48lH7orL z-M@^V-uLF;zL?n6K>kywSI?Y^1dp4QITamte$|1z0ZKo9rn7y|pj;oNuU;z7A(^9d zkzO0_da24h59J9A3`Yd%r-W@FLA72?h^`LON_Hwd0`EYa-`1tP)|2+Wh WlI?!YgHhlB0000DG(0N}=r8~gU{i^XCdkH_!#XEK??hY#PmbLYsB zBQ-TOdcEFcGGQ3zcDqxl)R{A9Dk>_n+3b@iPo6$~y0EaYd-v|n&dz8wdiLzuYuB#f zIId7A#>dBxA3q+6M7D3=e*gY`mSv?<>Cn*7!Gi~r$>gb1r$~|%i^V5SoY=pAe_2@> zpU;2v=+TQ8FUH2ka=F~gmoFiN$BrF){rdHrH*e0LKY#i1-Mo2odV2cVvuD?@ zUw`o6!QH!euU@^nxVSh!KY#Duy<4|#J%9fE_U+r-wrx9k^5pF7Y2!hz{_K}ehqtPf73O8@wtkGyFib|)`J9qAU_vSxN)!U+Q3$?~abhem{rh;Yf zPOJW1?#m|PBZ)!HR~tu$H1Sk?EIk|_G;Yi!he6f93Ps{~w+!$1-$w+3U+n~t&M}Ot zdSwI42rFvpj1a?ZjJW9IPwE??&E&#p9=}A*VhFMy6cm+?16Q*P7E0tZ7Ed$$XgM+i z94(M9MQ3b;8w!dQGl;PjLVE4Y?<_P{QXeB^>`CbQFBvD_OT*#R6y9XGLopA~j#=m{7->pd6t>(Yi=3 zP}uo3V`jwsY7W}yU|ZK5z%f|Z?m9z~uy*yuIRu5uFfoVs{~5H(gmaYV0%%rtm$QvL z{~uwK+1e_?@y3>z>U)~d^%(jpL%ul0QBAF>DcN4YPSb$5Y$@O`J^)4H(vAG6fyV-$ zpp9QFT`ozb8GCfYP#22&x;IILw01D;WQQ6$Rd7I-5KT1ikgn+a(|F~;N5`@Dq1(|Cs^MXKy8P08>2 ze(zaIH}OH&tXIpzRp|f=nv{at6&u#2!XbvJ4yIM4%e%g~!%0&*vz<+T(e8jvJ$eoV zB?T~K5as2YK8NWfo<~YPgTv`>IqKsqR5<(dp)cEDK=00n>#89cvunA{%L%$M)}%E- z+Y7LTL0WhsE#TMm`-=Xj>PZ!`)~ z(K&8wwg6)N&3|FkYgh7U3x!zd`r4lqi5ZME;n0{F5#}>?i)rEJH#GeJiA|m+eZ8DO zSU?f>fl#Gzi`dPes#t)+aBX={4?$xdcO&byCid?1(awZqf1}Z}+v{|OO zt|T#wanNsY&NCKu;zG`1RYSh)xbINpDJ|DFE; D?d&fs literal 0 HcmV?d00001 diff --git a/Nop.Plugin.Widgets.NivoSlider/Controllers/WidgetsNivoSliderController.cs b/Nop.Plugin.Widgets.NivoSlider/Controllers/WidgetsNivoSliderController.cs new file mode 100644 index 0000000..a708e3a --- /dev/null +++ b/Nop.Plugin.Widgets.NivoSlider/Controllers/WidgetsNivoSliderController.cs @@ -0,0 +1,272 @@ +using System.Collections.Generic; +using System.Linq; +using Microsoft.AspNetCore.Mvc; +using Nop.Core; +using Nop.Core.Caching; +using Nop.Plugin.Widgets.NivoSlider.Models; +using Nop.Services.Configuration; +using Nop.Services.Localization; +using Nop.Services.Media; +using Nop.Services.Messages; +using Nop.Services.Security; +using Nop.Web.Framework; +using Nop.Web.Framework.Controllers; + +namespace Nop.Plugin.Widgets.NivoSlider.Controllers +{ + [Area(AreaNames.Admin)] + public class WidgetsNivoSliderController : BasePluginController + { + private readonly ILocalizationService _localizationService; + private readonly ILanguageService _languageService; + private readonly INotificationService _notificationService; + private readonly IPermissionService _permissionService; + private readonly IPictureService _pictureService; + private readonly ISettingService _settingService; + private readonly IStoreContext _storeContext; + + public WidgetsNivoSliderController(ILocalizationService localizationService, + ILanguageService languageService, + INotificationService notificationService, + IPermissionService permissionService, + IPictureService pictureService, + ISettingService settingService, + IStoreContext storeContext) + { + _localizationService = localizationService; + _languageService = languageService; + _notificationService = notificationService; + _permissionService = permissionService; + _pictureService = pictureService; + _settingService = settingService; + _storeContext = storeContext; + } + + public IActionResult Configure() + { + if (!_permissionService.Authorize(StandardPermissionProvider.ManageWidgets)) + return AccessDeniedView(); + + //load settings for a chosen store scope + var storeScope = _storeContext.ActiveStoreScopeConfiguration; + var nivoSliderSettings = _settingService.LoadSetting(storeScope); + + var pic1Id = 0; + var pic2Id = 0; + var pic3Id = 0; + var pic4Id = 0; + var pic5Id = 0; + int.TryParse(nivoSliderSettings.Picture1Id.ToString(), out pic1Id); + int.TryParse(nivoSliderSettings.Picture2Id.ToString(), out pic2Id); + int.TryParse(nivoSliderSettings.Picture3Id.ToString(), out pic3Id); + int.TryParse(nivoSliderSettings.Picture4Id.ToString(), out pic4Id); + int.TryParse(nivoSliderSettings.Picture5Id.ToString(), out pic5Id); + + var model = new ConfigurationModel + { + Picture1Id = pic1Id, + Text1 = nivoSliderSettings.Text1, + Link1 = nivoSliderSettings.Link1, + AltText1 = nivoSliderSettings.AltText1, + Picture2Id = pic2Id, + Text2 = nivoSliderSettings.Text2, + Link2 = nivoSliderSettings.Link2, + AltText2 = nivoSliderSettings.AltText2, + Picture3Id = pic3Id, + Text3 = nivoSliderSettings.Text3, + Link3 = nivoSliderSettings.Link3, + AltText3 = nivoSliderSettings.AltText3, + Picture4Id = pic4Id, + Text4 = nivoSliderSettings.Text4, + Link4 = nivoSliderSettings.Link4, + AltText4 = nivoSliderSettings.AltText4, + Picture5Id = pic5Id, + Text5 = nivoSliderSettings.Text5, + Link5 = nivoSliderSettings.Link5, + AltText5 = nivoSliderSettings.AltText5, + ActiveStoreScopeConfiguration = storeScope + }; + + if (storeScope > 0) + { + model.Picture1Id_OverrideForStore = _settingService.SettingExists(nivoSliderSettings, x => x.Picture1Id, storeScope); + model.Text1_OverrideForStore = _settingService.SettingExists(nivoSliderSettings, x => x.Text1, storeScope); + model.Link1_OverrideForStore = _settingService.SettingExists(nivoSliderSettings, x => x.Link1, storeScope); + model.AltText1_OverrideForStore = _settingService.SettingExists(nivoSliderSettings, x => x.AltText1, storeScope); + model.Picture2Id_OverrideForStore = _settingService.SettingExists(nivoSliderSettings, x => x.Picture2Id, storeScope); + model.Text2_OverrideForStore = _settingService.SettingExists(nivoSliderSettings, x => x.Text2, storeScope); + model.Link2_OverrideForStore = _settingService.SettingExists(nivoSliderSettings, x => x.Link2, storeScope); + model.AltText2_OverrideForStore = _settingService.SettingExists(nivoSliderSettings, x => x.AltText2, storeScope); + model.Picture3Id_OverrideForStore = _settingService.SettingExists(nivoSliderSettings, x => x.Picture3Id, storeScope); + model.Text3_OverrideForStore = _settingService.SettingExists(nivoSliderSettings, x => x.Text3, storeScope); + model.Link3_OverrideForStore = _settingService.SettingExists(nivoSliderSettings, x => x.Link3, storeScope); + model.AltText3_OverrideForStore = _settingService.SettingExists(nivoSliderSettings, x => x.AltText3, storeScope); + model.Picture4Id_OverrideForStore = _settingService.SettingExists(nivoSliderSettings, x => x.Picture4Id, storeScope); + model.Text4_OverrideForStore = _settingService.SettingExists(nivoSliderSettings, x => x.Text4, storeScope); + model.Link4_OverrideForStore = _settingService.SettingExists(nivoSliderSettings, x => x.Link4, storeScope); + model.AltText4_OverrideForStore = _settingService.SettingExists(nivoSliderSettings, x => x.AltText4, storeScope); + model.Picture5Id_OverrideForStore = _settingService.SettingExists(nivoSliderSettings, x => x.Picture5Id, storeScope); + model.Text5_OverrideForStore = _settingService.SettingExists(nivoSliderSettings, x => x.Text5, storeScope); + model.Link5_OverrideForStore = _settingService.SettingExists(nivoSliderSettings, x => x.Link5, storeScope); + model.AltText5_OverrideForStore = _settingService.SettingExists(nivoSliderSettings, x => x.AltText5, storeScope); + } + AddLocales(_languageService, model.Locales, delegate (ConfigurationModel.ConfigurationLocalizedModel locale, int languageId) + { + int.TryParse(_localizationService.GetLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Picture1Id, languageId, storeScope, false, false), out pic1Id); + int.TryParse(_localizationService.GetLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Picture2Id, languageId, storeScope, false, false), out pic2Id); + int.TryParse(_localizationService.GetLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Picture3Id, languageId, storeScope, false, false), out pic3Id); + int.TryParse(_localizationService.GetLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Picture4Id, languageId, storeScope, false, false), out pic4Id); + int.TryParse(_localizationService.GetLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Picture5Id, languageId, storeScope, false, false), out pic5Id); + + locale.Picture1Id = pic1Id; + locale.Text1 = _localizationService.GetLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Text1, languageId, storeScope, false, false); + locale.Link1 = _localizationService.GetLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Link1, languageId, storeScope, false, false); + locale.AltText1 = _localizationService.GetLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.AltText1, languageId, storeScope, false, false); + + locale.Picture2Id = pic2Id; + locale.Text2 = _localizationService.GetLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Text2, languageId, storeScope, false, false); + locale.Link2 = _localizationService.GetLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Link2, languageId, storeScope, false, false); + locale.AltText2 = _localizationService.GetLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.AltText2, languageId, storeScope, false, false); + + locale.Picture3Id = pic3Id; + locale.Text3 = _localizationService.GetLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Text3, languageId, storeScope, false, false); + locale.Link3 = _localizationService.GetLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Link3, languageId, storeScope, false, false); + locale.AltText3 = _localizationService.GetLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.AltText3, languageId, storeScope, false, false); + + locale.Picture4Id = pic4Id; + locale.Text4 = _localizationService.GetLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Text4, languageId, storeScope, false, false); + locale.Link4 = _localizationService.GetLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Link4, languageId, storeScope, false, false); + locale.AltText4 = _localizationService.GetLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.AltText4, languageId, storeScope, false, false); + + locale.Picture5Id = pic5Id; + locale.Text5 = _localizationService.GetLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Text5, languageId, storeScope, false, false); + locale.Link5 = _localizationService.GetLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Link5, languageId, storeScope, false, false); + locale.AltText5 = _localizationService.GetLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.AltText5, languageId, storeScope, false, false); + }); + + return View("~/Plugins/Widgets.NivoSlider/Views/Configure.cshtml", model); + } + + [HttpPost] + public IActionResult Configure(ConfigurationModel model) + { + if (!_permissionService.Authorize(StandardPermissionProvider.ManageWidgets)) + return AccessDeniedView(); + + //load settings for a chosen store scope + var storeScope = _storeContext.ActiveStoreScopeConfiguration; + var nivoSliderSettings = _settingService.LoadSetting(storeScope); + + //get previous picture identifiers + var previousPictureIds = new[] + { + int.Parse(nivoSliderSettings.Picture1Id), + int.Parse(nivoSliderSettings.Picture2Id), + int.Parse(nivoSliderSettings.Picture3Id), + int.Parse(nivoSliderSettings.Picture4Id), + int.Parse(nivoSliderSettings.Picture5Id) + }; + + nivoSliderSettings.Picture1Id = model.Picture1Id.ToString(); + nivoSliderSettings.Text1 = model.Text1; + nivoSliderSettings.Link1 = model.Link1; + nivoSliderSettings.AltText1 = model.AltText1; + nivoSliderSettings.Picture2Id = model.Picture2Id.ToString(); + nivoSliderSettings.Text2 = model.Text2; + nivoSliderSettings.Link2 = model.Link2; + nivoSliderSettings.AltText2 = model.AltText2; + nivoSliderSettings.Picture3Id = model.Picture3Id.ToString(); + nivoSliderSettings.Text3 = model.Text3; + nivoSliderSettings.Link3 = model.Link3; + nivoSliderSettings.AltText3 = model.AltText3; + nivoSliderSettings.Picture4Id = model.Picture4Id.ToString(); + nivoSliderSettings.Text4 = model.Text4; + nivoSliderSettings.Link4 = model.Link4; + nivoSliderSettings.AltText4 = model.AltText4; + nivoSliderSettings.Picture5Id = model.Picture5Id.ToString(); + nivoSliderSettings.Text5 = model.Text5; + nivoSliderSettings.Link5 = model.Link5; + nivoSliderSettings.AltText5 = model.AltText5; + + /* We do not clear cache after each setting update. + * This behavior can increase performance because cached settings will not be cleared + * and loaded from database after each update */ + _settingService.SaveSettingOverridablePerStore(nivoSliderSettings, x => x.Picture1Id, model.Picture1Id_OverrideForStore, storeScope, false); + _settingService.SaveSettingOverridablePerStore(nivoSliderSettings, x => x.Text1, model.Text1_OverrideForStore, storeScope, false); + _settingService.SaveSettingOverridablePerStore(nivoSliderSettings, x => x.Link1, model.Link1_OverrideForStore, storeScope, false); + _settingService.SaveSettingOverridablePerStore(nivoSliderSettings, x => x.AltText1, model.AltText1_OverrideForStore, storeScope, false); + _settingService.SaveSettingOverridablePerStore(nivoSliderSettings, x => x.Picture2Id, model.Picture2Id_OverrideForStore, storeScope, false); + _settingService.SaveSettingOverridablePerStore(nivoSliderSettings, x => x.Text2, model.Text2_OverrideForStore, storeScope, false); + _settingService.SaveSettingOverridablePerStore(nivoSliderSettings, x => x.Link2, model.Link2_OverrideForStore, storeScope, false); + _settingService.SaveSettingOverridablePerStore(nivoSliderSettings, x => x.AltText2, model.AltText2_OverrideForStore, storeScope, false); + _settingService.SaveSettingOverridablePerStore(nivoSliderSettings, x => x.Picture3Id, model.Picture3Id_OverrideForStore, storeScope, false); + _settingService.SaveSettingOverridablePerStore(nivoSliderSettings, x => x.Text3, model.Text3_OverrideForStore, storeScope, false); + _settingService.SaveSettingOverridablePerStore(nivoSliderSettings, x => x.Link3, model.Link3_OverrideForStore, storeScope, false); + _settingService.SaveSettingOverridablePerStore(nivoSliderSettings, x => x.AltText3, model.AltText3_OverrideForStore, storeScope, false); + _settingService.SaveSettingOverridablePerStore(nivoSliderSettings, x => x.Picture4Id, model.Picture4Id_OverrideForStore, storeScope, false); + _settingService.SaveSettingOverridablePerStore(nivoSliderSettings, x => x.Text4, model.Text4_OverrideForStore, storeScope, false); + _settingService.SaveSettingOverridablePerStore(nivoSliderSettings, x => x.Link4, model.Link4_OverrideForStore, storeScope, false); + _settingService.SaveSettingOverridablePerStore(nivoSliderSettings, x => x.AltText4, model.AltText4_OverrideForStore, storeScope, false); + _settingService.SaveSettingOverridablePerStore(nivoSliderSettings, x => x.Picture5Id, model.Picture5Id_OverrideForStore, storeScope, false); + _settingService.SaveSettingOverridablePerStore(nivoSliderSettings, x => x.Text5, model.Text5_OverrideForStore, storeScope, false); + _settingService.SaveSettingOverridablePerStore(nivoSliderSettings, x => x.Link5, model.Link5_OverrideForStore, storeScope, false); + _settingService.SaveSettingOverridablePerStore(nivoSliderSettings, x => x.AltText5, model.AltText5_OverrideForStore, storeScope, false); + + //now clear settings cache + _settingService.ClearCache(); + + using (var enumerator = model.Locales.GetEnumerator()) + { + while (enumerator.MoveNext()) + { + var c = enumerator.Current; + _localizationService.SaveLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Picture1Id, c.LanguageId, c.Picture1Id.ToString()); + _localizationService.SaveLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Text1, c.LanguageId, c.Text1); + _localizationService.SaveLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Link1, c.LanguageId, c.Link1); + _localizationService.SaveLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.AltText1, c.LanguageId, c.AltText1); + + _localizationService.SaveLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Picture2Id, c.LanguageId, c.Picture2Id.ToString()); + _localizationService.SaveLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Text2, c.LanguageId, c.Text2); + _localizationService.SaveLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Link2, c.LanguageId, c.Link2); + _localizationService.SaveLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.AltText2, c.LanguageId, c.AltText2); + + _localizationService.SaveLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Picture3Id, c.LanguageId, c.Picture3Id.ToString()); + _localizationService.SaveLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Text3, c.LanguageId, c.Text3); + _localizationService.SaveLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Link3, c.LanguageId, c.Link3); + _localizationService.SaveLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.AltText3, c.LanguageId, c.AltText3); + + _localizationService.SaveLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Picture4Id, c.LanguageId, c.Picture4Id.ToString()); + _localizationService.SaveLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Text4, c.LanguageId, c.Text4); + _localizationService.SaveLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Link4, c.LanguageId, c.Link4); + _localizationService.SaveLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.AltText4, c.LanguageId, c.AltText4); + + _localizationService.SaveLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Picture5Id, c.LanguageId, c.Picture5Id.ToString()); + _localizationService.SaveLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Text5, c.LanguageId, c.Text5); + _localizationService.SaveLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.Link5, c.LanguageId, c.Link5); + _localizationService.SaveLocalizedSetting(nivoSliderSettings, (NivoSliderSettings x) => x.AltText5, c.LanguageId, c.AltText5); + } + } + + //get current picture identifiers + var currentPictureIds = new[] + { + int.Parse(nivoSliderSettings.Picture1Id), + int.Parse(nivoSliderSettings.Picture2Id), + int.Parse(nivoSliderSettings.Picture3Id), + int.Parse(nivoSliderSettings.Picture4Id), + int.Parse(nivoSliderSettings.Picture5Id) + }; + + //delete an old picture (if deleted or updated) + foreach (var pictureId in previousPictureIds.Except(currentPictureIds)) + { + var previousPicture = _pictureService.GetPictureById(pictureId); + if (previousPicture != null) + _pictureService.DeletePicture(previousPicture); + } + + _notificationService.SuccessNotification(_localizationService.GetResource("Admin.Plugins.Saved")); + return Configure(); + } + } +} \ No newline at end of file diff --git a/Nop.Plugin.Widgets.NivoSlider/Infrastructure/Cache/ModelCacheEventConsumer.cs b/Nop.Plugin.Widgets.NivoSlider/Infrastructure/Cache/ModelCacheEventConsumer.cs new file mode 100644 index 0000000..8fe9bd1 --- /dev/null +++ b/Nop.Plugin.Widgets.NivoSlider/Infrastructure/Cache/ModelCacheEventConsumer.cs @@ -0,0 +1,46 @@ +using Nop.Core.Caching; +using Nop.Core.Domain.Configuration; +using Nop.Core.Events; +using Nop.Services.Events; + +namespace Nop.Plugin.Widgets.NivoSlider.Infrastructure.Cache +{ + /// + /// Model cache event consumer (used for caching of presentation layer models) + /// + public partial class ModelCacheEventConsumer : + IConsumer>, + IConsumer>, + IConsumer> + { + /// + /// Key for caching + /// + /// + /// {0} : picture id + /// {1} : connection type (http/https) + /// + public const string PICTURE_URL_MODEL_KEY = "Nop.plugins.widgets.nivoslider.pictureurl-{0}-{1}"; + public const string PICTURE_URL_PATTERN_KEY = "Nop.plugins.widgets.nivoslider"; + + private readonly IStaticCacheManager _cacheManager; + + public ModelCacheEventConsumer(IStaticCacheManager cacheManager) + { + _cacheManager = cacheManager; + } + + public void HandleEvent(EntityInsertedEvent eventMessage) + { + _cacheManager.RemoveByPrefix(PICTURE_URL_PATTERN_KEY); + } + public void HandleEvent(EntityUpdatedEvent eventMessage) + { + _cacheManager.RemoveByPrefix(PICTURE_URL_PATTERN_KEY); + } + public void HandleEvent(EntityDeletedEvent eventMessage) + { + _cacheManager.RemoveByPrefix(PICTURE_URL_PATTERN_KEY); + } + } +} \ No newline at end of file diff --git a/Nop.Plugin.Widgets.NivoSlider/Models/ConfigurationModel.cs b/Nop.Plugin.Widgets.NivoSlider/Models/ConfigurationModel.cs new file mode 100644 index 0000000..a1c3702 --- /dev/null +++ b/Nop.Plugin.Widgets.NivoSlider/Models/ConfigurationModel.cs @@ -0,0 +1,146 @@ +using System.ComponentModel.DataAnnotations; +using Nop.Web.Framework.Mvc.ModelBinding; +using Nop.Web.Framework.Models; +using System.Collections.Generic; + +namespace Nop.Plugin.Widgets.NivoSlider.Models +{ + public class ConfigurationModel : BaseNopModel, ILocalizedModel, ILocalizedModel + { + public class ConfigurationLocalizedModel : ILocalizedLocaleModel + { + public int LanguageId { get; set; } + + [NopResourceDisplayName("Plugins.Widgets.NivoSlider.Picture")] + [UIHint("Picture")] + public int Picture1Id { get; set; } + [NopResourceDisplayName("Plugins.Widgets.NivoSlider.Text")] + public string Text1 { get; set; } + [NopResourceDisplayName("Plugins.Widgets.NivoSlider.Link")] + public string Link1 { get; set; } + [NopResourceDisplayName("Plugins.Widgets.NivoSlider.AltText")] + public string AltText1 { get; set; } + + [NopResourceDisplayName("Plugins.Widgets.NivoSlider.Picture")] + [UIHint("Picture")] + public int Picture2Id { get; set; } + [NopResourceDisplayName("Plugins.Widgets.NivoSlider.Text")] + public string Text2 { get; set; } + [NopResourceDisplayName("Plugins.Widgets.NivoSlider.Link")] + public string Link2 { get; set; } + [NopResourceDisplayName("Plugins.Widgets.NivoSlider.AltText")] + public string AltText2 { get; set; } + + [NopResourceDisplayName("Plugins.Widgets.NivoSlider.Picture")] + [UIHint("Picture")] + public int Picture3Id { get; set; } + [NopResourceDisplayName("Plugins.Widgets.NivoSlider.Text")] + public string Text3 { get; set; } + [NopResourceDisplayName("Plugins.Widgets.NivoSlider.Link")] + public string Link3 { get; set; } + [NopResourceDisplayName("Plugins.Widgets.NivoSlider.AltText")] + public string AltText3 { get; set; } + + [NopResourceDisplayName("Plugins.Widgets.NivoSlider.Picture")] + [UIHint("Picture")] + public int Picture4Id { get; set; } + [NopResourceDisplayName("Plugins.Widgets.NivoSlider.Text")] + public string Text4 { get; set; } + [NopResourceDisplayName("Plugins.Widgets.NivoSlider.Link")] + public string Link4 { get; set; } + [NopResourceDisplayName("Plugins.Widgets.NivoSlider.AltText")] + public string AltText4 { get; set; } + + [NopResourceDisplayName("Plugins.Widgets.NivoSlider.Picture")] + [UIHint("Picture")] + public int Picture5Id { get; set; } + [NopResourceDisplayName("Plugins.Widgets.NivoSlider.Text")] + public string Text5 { get; set; } + [NopResourceDisplayName("Plugins.Widgets.NivoSlider.Link")] + public string Link5 { get; set; } + [NopResourceDisplayName("Plugins.Widgets.NivoSlider.AltText")] + public string AltText5 { get; set; } + } + public int ActiveStoreScopeConfiguration { get; set; } + + [NopResourceDisplayName("Plugins.Widgets.NivoSlider.Picture")] + [UIHint("Picture")] + public int Picture1Id { get; set; } + public bool Picture1Id_OverrideForStore { get; set; } + [NopResourceDisplayName("Plugins.Widgets.NivoSlider.Text")] + public string Text1 { get; set; } + public bool Text1_OverrideForStore { get; set; } + [NopResourceDisplayName("Plugins.Widgets.NivoSlider.Link")] + public string Link1 { get; set; } + public bool Link1_OverrideForStore { get; set; } + [NopResourceDisplayName("Plugins.Widgets.NivoSlider.AltText")] + public string AltText1 { get; set; } + public bool AltText1_OverrideForStore { get; set; } + + [NopResourceDisplayName("Plugins.Widgets.NivoSlider.Picture")] + [UIHint("Picture")] + public int Picture2Id { get; set; } + public bool Picture2Id_OverrideForStore { get; set; } + [NopResourceDisplayName("Plugins.Widgets.NivoSlider.Text")] + public string Text2 { get; set; } + public bool Text2_OverrideForStore { get; set; } + [NopResourceDisplayName("Plugins.Widgets.NivoSlider.Link")] + public string Link2 { get; set; } + public bool Link2_OverrideForStore { get; set; } + [NopResourceDisplayName("Plugins.Widgets.NivoSlider.AltText")] + public string AltText2 { get; set; } + public bool AltText2_OverrideForStore { get; set; } + + [NopResourceDisplayName("Plugins.Widgets.NivoSlider.Picture")] + [UIHint("Picture")] + public int Picture3Id { get; set; } + public bool Picture3Id_OverrideForStore { get; set; } + [NopResourceDisplayName("Plugins.Widgets.NivoSlider.Text")] + public string Text3 { get; set; } + public bool Text3_OverrideForStore { get; set; } + [NopResourceDisplayName("Plugins.Widgets.NivoSlider.Link")] + public string Link3 { get; set; } + public bool Link3_OverrideForStore { get; set; } + [NopResourceDisplayName("Plugins.Widgets.NivoSlider.AltText")] + public string AltText3 { get; set; } + public bool AltText3_OverrideForStore { get; set; } + + [NopResourceDisplayName("Plugins.Widgets.NivoSlider.Picture")] + [UIHint("Picture")] + public int Picture4Id { get; set; } + public bool Picture4Id_OverrideForStore { get; set; } + [NopResourceDisplayName("Plugins.Widgets.NivoSlider.Text")] + public string Text4 { get; set; } + public bool Text4_OverrideForStore { get; set; } + [NopResourceDisplayName("Plugins.Widgets.NivoSlider.Link")] + public string Link4 { get; set; } + public bool Link4_OverrideForStore { get; set; } + [NopResourceDisplayName("Plugins.Widgets.NivoSlider.AltText")] + public string AltText4 { get; set; } + public bool AltText4_OverrideForStore { get; set; } + + [NopResourceDisplayName("Plugins.Widgets.NivoSlider.Picture")] + [UIHint("Picture")] + public int Picture5Id { get; set; } + public bool Picture5Id_OverrideForStore { get; set; } + [NopResourceDisplayName("Plugins.Widgets.NivoSlider.Text")] + public string Text5 { get; set; } + public bool Text5_OverrideForStore { get; set; } + [NopResourceDisplayName("Plugins.Widgets.NivoSlider.Link")] + public string Link5 { get; set; } + public bool Link5_OverrideForStore { get; set; } + [NopResourceDisplayName("Plugins.Widgets.NivoSlider.AltText")] + public string AltText5 { get; set; } + public bool AltText5_OverrideForStore { get; set; } + public IList Locales + { + get; + set; + } + + public ConfigurationModel() + { + Locales = new List(); + } + } +} \ No newline at end of file diff --git a/Nop.Plugin.Widgets.NivoSlider/Models/PublicInfoModel.cs b/Nop.Plugin.Widgets.NivoSlider/Models/PublicInfoModel.cs new file mode 100644 index 0000000..1c3ed45 --- /dev/null +++ b/Nop.Plugin.Widgets.NivoSlider/Models/PublicInfoModel.cs @@ -0,0 +1,32 @@ +using Nop.Web.Framework.Models; + +namespace Nop.Plugin.Widgets.NivoSlider.Models +{ + public class PublicInfoModel : BaseNopModel + { + public string Picture1Url { get; set; } + public string Text1 { get; set; } + public string Link1 { get; set; } + public string AltText1 { get; set; } + + public string Picture2Url { get; set; } + public string Text2 { get; set; } + public string Link2 { get; set; } + public string AltText2 { get; set; } + + public string Picture3Url { get; set; } + public string Text3 { get; set; } + public string Link3 { get; set; } + public string AltText3 { get; set; } + + public string Picture4Url { get; set; } + public string Text4 { get; set; } + public string Link4 { get; set; } + public string AltText4 { get; set; } + + public string Picture5Url { get; set; } + public string Text5 { get; set; } + public string Link5 { get; set; } + public string AltText5 { get; set; } + } +} \ No newline at end of file diff --git a/Nop.Plugin.Widgets.NivoSlider/NivoSliderPlugin.cs b/Nop.Plugin.Widgets.NivoSlider/NivoSliderPlugin.cs new file mode 100644 index 0000000..3212e70 --- /dev/null +++ b/Nop.Plugin.Widgets.NivoSlider/NivoSliderPlugin.cs @@ -0,0 +1,136 @@ +using System.Collections.Generic; +using Nop.Core; +using Nop.Core.Infrastructure; +using Nop.Services.Cms; +using Nop.Services.Configuration; +using Nop.Services.Localization; +using Nop.Services.Media; +using Nop.Services.Plugins; +using Nop.Web.Framework.Infrastructure; + +namespace Nop.Plugin.Widgets.NivoSlider +{ + /// + /// PLugin + /// + public class NivoSliderPlugin : BasePlugin, IWidgetPlugin + { + private readonly ILocalizationService _localizationService; + private readonly IPictureService _pictureService; + private readonly ISettingService _settingService; + private readonly IWebHelper _webHelper; + private readonly INopFileProvider _fileProvider; + + public NivoSliderPlugin(ILocalizationService localizationService, + IPictureService pictureService, + ISettingService settingService, + IWebHelper webHelper, + INopFileProvider fileProvider) + { + _localizationService = localizationService; + _pictureService = pictureService; + _settingService = settingService; + _webHelper = webHelper; + _fileProvider = fileProvider; + } + + /// + /// Gets widget zones where this widget should be rendered + /// + /// Widget zones + public IList GetWidgetZones() + { + return new List { PublicWidgetZones.HomepageBeforeProducts }; + } + + /// + /// Gets a configuration page URL + /// + public override string GetConfigurationPageUrl() + { + return _webHelper.GetStoreLocation() + "Admin/WidgetsNivoSlider/Configure"; + } + + /// + /// Gets a name of a view component for displaying widget + /// + /// Name of the widget zone + /// View component name + public string GetWidgetViewComponentName(string widgetZone) + { + return "WidgetsNivoSlider"; + } + + /// + /// Install plugin + /// + public override void Install() + { + //pictures + var sampleImagesPath = _fileProvider.MapPath("~/Plugins/Widgets.NivoSlider/Content/nivoslider/sample-images/"); + + //settings + var settings = new NivoSliderSettings + { + Picture1Id = _pictureService.InsertPicture(_fileProvider.ReadAllBytes(_fileProvider.Combine(sampleImagesPath, "banner1.jpg")), MimeTypes.ImagePJpeg, "banner_1").Id.ToString(), + Text1 = "", + Link1 = _webHelper.GetStoreLocation(false), + Picture2Id = _pictureService.InsertPicture(_fileProvider.ReadAllBytes(_fileProvider.Combine(sampleImagesPath, "banner2.jpg")), MimeTypes.ImagePJpeg, "banner_2").Id.ToString(), + Text2 = "", + Link2 = _webHelper.GetStoreLocation(false) + //Picture3Id = _pictureService.InsertPicture(File.ReadAllBytes(_fileProvider.Combine(sampleImagesPath,"banner3.jpg")), MimeTypes.ImagePJpeg, "banner_3").Id, + //Text3 = "", + //Link3 = _webHelper.GetStoreLocation(false), + }; + _settingService.SaveSetting(settings); + + + _localizationService.AddOrUpdatePluginLocaleResource("Plugins.Widgets.NivoSlider.Picture1", "Picture 1"); + _localizationService.AddOrUpdatePluginLocaleResource("Plugins.Widgets.NivoSlider.Picture2", "Picture 2"); + _localizationService.AddOrUpdatePluginLocaleResource("Plugins.Widgets.NivoSlider.Picture3", "Picture 3"); + _localizationService.AddOrUpdatePluginLocaleResource("Plugins.Widgets.NivoSlider.Picture4", "Picture 4"); + _localizationService.AddOrUpdatePluginLocaleResource("Plugins.Widgets.NivoSlider.Picture5", "Picture 5"); + _localizationService.AddOrUpdatePluginLocaleResource("Plugins.Widgets.NivoSlider.Picture", "Picture"); + _localizationService.AddOrUpdatePluginLocaleResource("Plugins.Widgets.NivoSlider.Picture.Hint", "Upload picture."); + _localizationService.AddOrUpdatePluginLocaleResource("Plugins.Widgets.NivoSlider.Text", "Comment"); + _localizationService.AddOrUpdatePluginLocaleResource("Plugins.Widgets.NivoSlider.Text.Hint", "Enter comment for picture. Leave empty if you don't want to display any text."); + _localizationService.AddOrUpdatePluginLocaleResource("Plugins.Widgets.NivoSlider.Link", "URL"); + _localizationService.AddOrUpdatePluginLocaleResource("Plugins.Widgets.NivoSlider.Link.Hint", "Enter URL. Leave empty if you don't want this picture to be clickable."); + _localizationService.AddOrUpdatePluginLocaleResource("Plugins.Widgets.NivoSlider.AltText", "Image alternate text"); + _localizationService.AddOrUpdatePluginLocaleResource("Plugins.Widgets.NivoSlider.AltText.Hint", "Enter alternate text that will be added to image."); + + base.Install(); + } + + /// + /// Uninstall plugin + /// + public override void Uninstall() + { + //settings + _settingService.DeleteSetting(); + + //locales + _localizationService.DeletePluginLocaleResource("Plugins.Widgets.NivoSlider.Picture1"); + _localizationService.DeletePluginLocaleResource("Plugins.Widgets.NivoSlider.Picture2"); + _localizationService.DeletePluginLocaleResource("Plugins.Widgets.NivoSlider.Picture3"); + _localizationService.DeletePluginLocaleResource("Plugins.Widgets.NivoSlider.Picture4"); + _localizationService.DeletePluginLocaleResource("Plugins.Widgets.NivoSlider.Picture5"); + _localizationService.DeletePluginLocaleResource("Plugins.Widgets.NivoSlider.Picture"); + _localizationService.DeletePluginLocaleResource("Plugins.Widgets.NivoSlider.Picture.Hint"); + _localizationService.DeletePluginLocaleResource("Plugins.Widgets.NivoSlider.Text"); + _localizationService.DeletePluginLocaleResource("Plugins.Widgets.NivoSlider.Text.Hint"); + _localizationService.DeletePluginLocaleResource("Plugins.Widgets.NivoSlider.Link"); + _localizationService.DeletePluginLocaleResource("Plugins.Widgets.NivoSlider.Link.Hint"); + _localizationService.DeletePluginLocaleResource("Plugins.Widgets.NivoSlider.AltText"); + _localizationService.DeletePluginLocaleResource("Plugins.Widgets.NivoSlider.AltText.Hint"); + + base.Uninstall(); + } + + /// + /// Gets a value indicating whether to hide this plugin on the widget list page in the admin area + /// + public bool HideInWidgetList => false; + } +} \ No newline at end of file diff --git a/Nop.Plugin.Widgets.NivoSlider/NivoSliderSettings.cs b/Nop.Plugin.Widgets.NivoSlider/NivoSliderSettings.cs new file mode 100644 index 0000000..7ad63b9 --- /dev/null +++ b/Nop.Plugin.Widgets.NivoSlider/NivoSliderSettings.cs @@ -0,0 +1,32 @@ +using Nop.Core.Configuration; + +namespace Nop.Plugin.Widgets.NivoSlider +{ + public class NivoSliderSettings : ISettings + { + public string Picture1Id { get; set; } + public string Text1 { get; set; } + public string Link1 { get; set; } + public string AltText1 { get; set; } + + public string Picture2Id { get; set; } + public string Text2 { get; set; } + public string Link2 { get; set; } + public string AltText2 { get; set; } + + public string Picture3Id { get; set; } + public string Text3 { get; set; } + public string Link3 { get; set; } + public string AltText3 { get; set; } + + public string Picture4Id { get; set; } + public string Text4 { get; set; } + public string Link4 { get; set; } + public string AltText4 { get; set; } + + public string Picture5Id { get; set; } + public string Text5 { get; set; } + public string Link5 { get; set; } + public string AltText5 { get; set; } + } +} \ No newline at end of file diff --git a/Nop.Plugin.Widgets.NivoSlider/Nop.Plugin.Widgets.NivoSlider.csproj b/Nop.Plugin.Widgets.NivoSlider/Nop.Plugin.Widgets.NivoSlider.csproj new file mode 100644 index 0000000..19afb61 --- /dev/null +++ b/Nop.Plugin.Widgets.NivoSlider/Nop.Plugin.Widgets.NivoSlider.csproj @@ -0,0 +1,168 @@ + + + + netcoreapp2.2 + Copyright © Nop Solutions, Ltd + Nop Solutions, Ltd + Nop Solutions, Ltd + + http://www.nopcommerce.com/ + https://github.com/nopSolutions/nopCommerce + Git + ..\..\Presentation\Nop.Web\Plugins\Widgets.NivoSlider + $(OutputPath) + + false + 7.3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + + + + false + + + + + + + + + + + \ No newline at end of file diff --git a/Nop.Plugin.Widgets.NivoSlider/Notes.txt b/Nop.Plugin.Widgets.NivoSlider/Notes.txt new file mode 100644 index 0000000..9d58146 --- /dev/null +++ b/Nop.Plugin.Widgets.NivoSlider/Notes.txt @@ -0,0 +1,32 @@ +Important points when developing plugins + + +- All views (cshtml files) and web.config file should have "Build action" set to "Content" and "Copy to output directory" set to "Copy if newer" + +- When you develop a new plugin from scratch, and when a new class library is added to the solution, open its .csproj file (a main project file) in any text editor and replace its content with the following one + + + + netcoreapp2.2 + ..\..\Presentation\Nop.Web\Plugins\PLUGIN_OUTPUT_DIRECTORY + $(OutputPath) + + false + + + + + + + + + + + + + +Replace “PLUGIN_OUTPUT_DIRECTORY” in the code above with your real plugin output directory name. + +It’s not required. But this way we can use a new ASP.NET approach to add third-party references. It was introduced in .NET Core. Furthermore, references from already referenced libraries will be loaded automatically. It’s very convenient. \ No newline at end of file diff --git a/Nop.Plugin.Widgets.NivoSlider/Scripts/jquery.nivo.slider.js b/Nop.Plugin.Widgets.NivoSlider/Scripts/jquery.nivo.slider.js new file mode 100644 index 0000000..797ad53 --- /dev/null +++ b/Nop.Plugin.Widgets.NivoSlider/Scripts/jquery.nivo.slider.js @@ -0,0 +1,662 @@ +/* + * jQuery Nivo Slider v3.2 + * http://nivo.dev7studios.com + * + * Copyright 2012, Dev7studios + * Free to use and abuse under the MIT license. + * http://www.opensource.org/licenses/mit-license.php + */ + +(function ($) { + var NivoSlider = function (element, options) { + // Defaults are below + var settings = $.extend({}, $.fn.nivoSlider.defaults, options); + + // Useful variables. Play carefully. + var vars = { + currentSlide: 0, + currentImage: '', + totalSlides: 0, + running: false, + paused: false, + stop: false, + controlNavEl: false + }; + + // Get this slider + var slider = $(element); + slider.data('nivo:vars', vars).addClass('nivoSlider'); + + // Find our slider children + var kids = slider.children(); + kids.each(function () { + var child = $(this); + var link = ''; + if (!child.is('img')) { + if (child.is('a')) { + child.addClass('nivo-imageLink'); + link = child; + } + child = child.find('img:first'); + } + // Get img width & height + var childWidth = (childWidth === 0) ? child.attr('width') : child.width(), + childHeight = (childHeight === 0) ? child.attr('height') : child.height(); + + if (link !== '') { + link.css('display', 'none'); + } + child.css('display', 'none'); + vars.totalSlides++; + }); + + // If randomStart + if (settings.randomStart) { + settings.startSlide = Math.floor(Math.random() * vars.totalSlides); + } + + // Set startSlide + if (settings.startSlide > 0) { + if (settings.startSlide >= vars.totalSlides) { settings.startSlide = vars.totalSlides - 1; } + vars.currentSlide = settings.startSlide; + } + + // Get initial image + if ($(kids[vars.currentSlide]).is('img')) { + vars.currentImage = $(kids[vars.currentSlide]); + } else { + vars.currentImage = $(kids[vars.currentSlide]).find('img:first'); + } + + // Show initial link + if ($(kids[vars.currentSlide]).is('a')) { + $(kids[vars.currentSlide]).css('display', 'block'); + } + + // Set first background + var sliderImg = $('').addClass('nivo-main-image'); + sliderImg.attr('src', vars.currentImage.attr('src')).show(); + slider.append(sliderImg); + + // Detect Window Resize + $(window).resize(function () { + slider.children('img').width(slider.width()); + sliderImg.attr('src', vars.currentImage.attr('src')); + sliderImg.stop().height('auto'); + $('.nivo-slice').remove(); + $('.nivo-box').remove(); + }); + + //Create caption + slider.append($('
')); + + // Process caption function + var processCaption = function (settings) { + var nivoCaption = $('.nivo-caption', slider); + if (vars.currentImage.attr('title') != '' && vars.currentImage.attr('title') != undefined) { + var title = vars.currentImage.attr('title'); + if (title.substr(0, 1) == '#') title = $(title).html(); + + if (nivoCaption.css('display') == 'block') { + setTimeout(function () { + nivoCaption.html(title); + }, settings.animSpeed); + } else { + nivoCaption.html(title); + nivoCaption.stop().fadeIn(settings.animSpeed); + } + } else { + nivoCaption.stop().fadeOut(settings.animSpeed); + } + } + + //Process initial caption + processCaption(settings); + + // In the words of Super Mario "let's a go!" + var timer = 0; + if (!settings.manualAdvance && kids.length > 1) { + timer = setInterval(function () { nivoRun(slider, kids, settings, false); }, settings.pauseTime); + } + + // Add Direction nav + if (settings.directionNav) { + slider.append(''); + + $(slider).on('click', 'a.nivo-prevNav', function () { + if (vars.running) { return false; } + clearInterval(timer); + timer = ''; + vars.currentSlide -= 2; + nivoRun(slider, kids, settings, 'prev'); + }); + + $(slider).on('click', 'a.nivo-nextNav', function () { + if (vars.running) { return false; } + clearInterval(timer); + timer = ''; + nivoRun(slider, kids, settings, 'next'); + }); + } + + // Add Control nav + if (settings.controlNav) { + vars.controlNavEl = $('
'); + slider.after(vars.controlNavEl); + for (var i = 0; i < kids.length; i++) { + if (settings.controlNavThumbs) { + vars.controlNavEl.addClass('nivo-thumbs-enabled'); + var child = kids.eq(i); + if (!child.is('img')) { + child = child.find('img:first'); + } + if (child.attr('data-thumb')) vars.controlNavEl.append(''); + } else { + vars.controlNavEl.append('' + (i + 1) + ''); + } + } + + //Set initial active link + $('a:eq(' + vars.currentSlide + ')', vars.controlNavEl).addClass('active'); + + $('a', vars.controlNavEl).bind('click', function () { + if (vars.running) return false; + if ($(this).hasClass('active')) return false; + clearInterval(timer); + timer = ''; + sliderImg.attr('src', vars.currentImage.attr('src')); + vars.currentSlide = $(this).attr('rel') - 1; + nivoRun(slider, kids, settings, 'control'); + }); + } + + //For pauseOnHover setting + if (settings.pauseOnHover) { + slider.hover(function () { + vars.paused = true; + clearInterval(timer); + timer = ''; + }, function () { + vars.paused = false; + // Restart the timer + if (timer === '' && !settings.manualAdvance) { + timer = setInterval(function () { nivoRun(slider, kids, settings, false); }, settings.pauseTime); + } + }); + } + + // Event when Animation finishes + slider.bind('nivo:animFinished', function () { + sliderImg.attr('src', vars.currentImage.attr('src')); + vars.running = false; + // Hide child links + $(kids).each(function () { + if ($(this).is('a')) { + $(this).css('display', 'none'); + } + }); + // Show current link + if ($(kids[vars.currentSlide]).is('a')) { + $(kids[vars.currentSlide]).css('display', 'block'); + } + // Restart the timer + if (timer === '' && !vars.paused && !settings.manualAdvance) { + timer = setInterval(function () { nivoRun(slider, kids, settings, false); }, settings.pauseTime); + } + // Trigger the afterChange callback + settings.afterChange.call(this); + }); + + // Add slices for slice animations + var createSlices = function (slider, settings, vars) { + if ($(vars.currentImage).parent().is('a')) $(vars.currentImage).parent().css('display', 'block'); + $('img[src="' + vars.currentImage.attr('src') + '"]', slider).not('.nivo-main-image,.nivo-control img').width(slider.width()).css('visibility', 'hidden').show(); + var sliceHeight = ($('img[src="' + vars.currentImage.attr('src') + '"]', slider).not('.nivo-main-image,.nivo-control img').parent().is('a')) ? $('img[src="' + vars.currentImage.attr('src') + '"]', slider).not('.nivo-main-image,.nivo-control img').parent().height() : $('img[src="' + vars.currentImage.attr('src') + '"]', slider).not('.nivo-main-image,.nivo-control img').height(); + + for (var i = 0; i < settings.slices; i++) { + var sliceWidth = Math.round(slider.width() / settings.slices); + + if (i === settings.slices - 1) { + slider.append( + $('
').css({ + left: (sliceWidth * i) + 'px', + width: (slider.width() - (sliceWidth * i)) + 'px', + height: sliceHeight + 'px', + opacity: '0', + overflow: 'hidden' + }) + ); + } else { + slider.append( + $('
').css({ + left: (sliceWidth * i) + 'px', + width: sliceWidth + 'px', + height: sliceHeight + 'px', + opacity: '0', + overflow: 'hidden' + }) + ); + } + } + + $('.nivo-slice', slider).height(sliceHeight); + sliderImg.stop().animate({ + height: $(vars.currentImage).height() + }, settings.animSpeed); + }; + + // Add boxes for box animations + var createBoxes = function (slider, settings, vars) { + if ($(vars.currentImage).parent().is('a')) $(vars.currentImage).parent().css('display', 'block'); + $('img[src="' + vars.currentImage.attr('src') + '"]', slider).not('.nivo-main-image,.nivo-control img').width(slider.width()).css('visibility', 'hidden').show(); + var boxWidth = Math.round(slider.width() / settings.boxCols), + boxHeight = Math.round($('img[src="' + vars.currentImage.attr('src') + '"]', slider).not('.nivo-main-image,.nivo-control img').height() / settings.boxRows); + + + for (var rows = 0; rows < settings.boxRows; rows++) { + for (var cols = 0; cols < settings.boxCols; cols++) { + if (cols === settings.boxCols - 1) { + slider.append( + $('
').css({ + opacity: 0, + left: (boxWidth * cols) + 'px', + top: (boxHeight * rows) + 'px', + width: (slider.width() - (boxWidth * cols)) + 'px' + + }) + ); + $('.nivo-box[name="' + cols + '"]', slider).height($('.nivo-box[name="' + cols + '"] img', slider).height() + 'px'); + } else { + slider.append( + $('
').css({ + opacity: 0, + left: (boxWidth * cols) + 'px', + top: (boxHeight * rows) + 'px', + width: boxWidth + 'px' + }) + ); + $('.nivo-box[name="' + cols + '"]', slider).height($('.nivo-box[name="' + cols + '"] img', slider).height() + 'px'); + } + } + } + + sliderImg.stop().animate({ + height: $(vars.currentImage).height() + }, settings.animSpeed); + }; + + // Private run method + var nivoRun = function (slider, kids, settings, nudge) { + // Get our vars + var vars = slider.data('nivo:vars'); + + // Trigger the lastSlide callback + if (vars && (vars.currentSlide === vars.totalSlides - 1)) { + settings.lastSlide.call(this); + } + + // Stop + if ((!vars || vars.stop) && !nudge) { return false; } + + // Trigger the beforeChange callback + settings.beforeChange.call(this); + + // Set current background before change + if (!nudge) { + sliderImg.attr('src', vars.currentImage.attr('src')); + } else { + if (nudge === 'prev') { + sliderImg.attr('src', vars.currentImage.attr('src')); + } + if (nudge === 'next') { + sliderImg.attr('src', vars.currentImage.attr('src')); + } + } + + vars.currentSlide++; + // Trigger the slideshowEnd callback + if (vars.currentSlide === vars.totalSlides) { + vars.currentSlide = 0; + settings.slideshowEnd.call(this); + } + if (vars.currentSlide < 0) { vars.currentSlide = (vars.totalSlides - 1); } + // Set vars.currentImage + if ($(kids[vars.currentSlide]).is('img')) { + vars.currentImage = $(kids[vars.currentSlide]); + } else { + vars.currentImage = $(kids[vars.currentSlide]).find('img:first'); + } + + // Set active links + if (settings.controlNav) { + $('a', vars.controlNavEl).removeClass('active'); + $('a:eq(' + vars.currentSlide + ')', vars.controlNavEl).addClass('active'); + } + + // Process caption + processCaption(settings); + + // Remove any slices from last transition + $('.nivo-slice', slider).remove(); + + // Remove any boxes from last transition + $('.nivo-box', slider).remove(); + + var currentEffect = settings.effect, + anims = ''; + + // Generate random effect + if (settings.effect === 'random') { + anims = new Array('sliceDownRight', 'sliceDownLeft', 'sliceUpRight', 'sliceUpLeft', 'sliceUpDown', 'sliceUpDownLeft', 'fold', 'fade', + 'boxRandom', 'boxRain', 'boxRainReverse', 'boxRainGrow', 'boxRainGrowReverse'); + currentEffect = anims[Math.floor(Math.random() * (anims.length + 1))]; + if (currentEffect === undefined) { currentEffect = 'fade'; } + } + + // Run random effect from specified set (eg: effect:'fold,fade') + if (settings.effect.indexOf(',') !== -1) { + anims = settings.effect.split(','); + currentEffect = anims[Math.floor(Math.random() * (anims.length))]; + if (currentEffect === undefined) { currentEffect = 'fade'; } + } + + // Custom transition as defined by "data-transition" attribute + if (vars.currentImage.attr('data-transition')) { + currentEffect = vars.currentImage.attr('data-transition'); + } + + // Run effects + vars.running = true; + var timeBuff = 0, + i = 0, + slices = '', + firstSlice = '', + totalBoxes = '', + boxes = ''; + + if (currentEffect === 'sliceDown' || currentEffect === 'sliceDownRight' || currentEffect === 'sliceDownLeft') { + createSlices(slider, settings, vars); + timeBuff = 0; + i = 0; + slices = $('.nivo-slice', slider); + if (currentEffect === 'sliceDownLeft') { slices = $('.nivo-slice', slider)._reverse(); } + + slices.each(function () { + var slice = $(this); + slice.css({ 'top': '0px' }); + if (i === settings.slices - 1) { + setTimeout(function () { + slice.animate({ opacity: '1.0' }, settings.animSpeed, '', function () { slider.trigger('nivo:animFinished'); }); + }, (100 + timeBuff)); + } else { + setTimeout(function () { + slice.animate({ opacity: '1.0' }, settings.animSpeed); + }, (100 + timeBuff)); + } + timeBuff += 50; + i++; + }); + } else if (currentEffect === 'sliceUp' || currentEffect === 'sliceUpRight' || currentEffect === 'sliceUpLeft') { + createSlices(slider, settings, vars); + timeBuff = 0; + i = 0; + slices = $('.nivo-slice', slider); + if (currentEffect === 'sliceUpLeft') { slices = $('.nivo-slice', slider)._reverse(); } + + slices.each(function () { + var slice = $(this); + slice.css({ 'bottom': '0px' }); + if (i === settings.slices - 1) { + setTimeout(function () { + slice.animate({ opacity: '1.0' }, settings.animSpeed, '', function () { slider.trigger('nivo:animFinished'); }); + }, (100 + timeBuff)); + } else { + setTimeout(function () { + slice.animate({ opacity: '1.0' }, settings.animSpeed); + }, (100 + timeBuff)); + } + timeBuff += 50; + i++; + }); + } else if (currentEffect === 'sliceUpDown' || currentEffect === 'sliceUpDownRight' || currentEffect === 'sliceUpDownLeft') { + createSlices(slider, settings, vars); + timeBuff = 0; + i = 0; + var v = 0; + slices = $('.nivo-slice', slider); + if (currentEffect === 'sliceUpDownLeft') { slices = $('.nivo-slice', slider)._reverse(); } + + slices.each(function () { + var slice = $(this); + if (i === 0) { + slice.css('top', '0px'); + i++; + } else { + slice.css('bottom', '0px'); + i = 0; + } + + if (v === settings.slices - 1) { + setTimeout(function () { + slice.animate({ opacity: '1.0' }, settings.animSpeed, '', function () { slider.trigger('nivo:animFinished'); }); + }, (100 + timeBuff)); + } else { + setTimeout(function () { + slice.animate({ opacity: '1.0' }, settings.animSpeed); + }, (100 + timeBuff)); + } + timeBuff += 50; + v++; + }); + } else if (currentEffect === 'fold') { + createSlices(slider, settings, vars); + timeBuff = 0; + i = 0; + + $('.nivo-slice', slider).each(function () { + var slice = $(this); + var origWidth = slice.width(); + slice.css({ top: '0px', width: '0px' }); + if (i === settings.slices - 1) { + setTimeout(function () { + slice.animate({ width: origWidth, opacity: '1.0' }, settings.animSpeed, '', function () { slider.trigger('nivo:animFinished'); }); + }, (100 + timeBuff)); + } else { + setTimeout(function () { + slice.animate({ width: origWidth, opacity: '1.0' }, settings.animSpeed); + }, (100 + timeBuff)); + } + timeBuff += 50; + i++; + }); + } else if (currentEffect === 'fade') { + createSlices(slider, settings, vars); + + firstSlice = $('.nivo-slice:first', slider); + firstSlice.css({ + 'width': slider.width() + 'px' + }); + + firstSlice.animate({ opacity: '1.0' }, (settings.animSpeed * 2), '', function () { slider.trigger('nivo:animFinished'); }); + } else if (currentEffect === 'slideInRight') { + createSlices(slider, settings, vars); + + firstSlice = $('.nivo-slice:first', slider); + firstSlice.css({ + 'width': '0px', + 'opacity': '1' + }); + + firstSlice.animate({ width: slider.width() + 'px' }, (settings.animSpeed * 2), '', function () { slider.trigger('nivo:animFinished'); }); + } else if (currentEffect === 'slideInLeft') { + createSlices(slider, settings, vars); + + firstSlice = $('.nivo-slice:first', slider); + firstSlice.css({ + 'width': '0px', + 'opacity': '1', + 'left': '', + 'right': '0px' + }); + + firstSlice.animate({ width: slider.width() + 'px' }, (settings.animSpeed * 2), '', function () { + // Reset positioning + firstSlice.css({ + 'left': '0px', + 'right': '' + }); + slider.trigger('nivo:animFinished'); + }); + } else if (currentEffect === 'boxRandom') { + createBoxes(slider, settings, vars); + + totalBoxes = settings.boxCols * settings.boxRows; + i = 0; + timeBuff = 0; + + boxes = shuffle($('.nivo-box', slider)); + boxes.each(function () { + var box = $(this); + if (i === totalBoxes - 1) { + setTimeout(function () { + box.animate({ opacity: '1' }, settings.animSpeed, '', function () { slider.trigger('nivo:animFinished'); }); + }, (100 + timeBuff)); + } else { + setTimeout(function () { + box.animate({ opacity: '1' }, settings.animSpeed); + }, (100 + timeBuff)); + } + timeBuff += 20; + i++; + }); + } else if (currentEffect === 'boxRain' || currentEffect === 'boxRainReverse' || currentEffect === 'boxRainGrow' || currentEffect === 'boxRainGrowReverse') { + createBoxes(slider, settings, vars); + + totalBoxes = settings.boxCols * settings.boxRows; + i = 0; + timeBuff = 0; + + // Split boxes into 2D array + var rowIndex = 0; + var colIndex = 0; + var box2Darr = []; + box2Darr[rowIndex] = []; + boxes = $('.nivo-box', slider); + if (currentEffect === 'boxRainReverse' || currentEffect === 'boxRainGrowReverse') { + boxes = $('.nivo-box', slider)._reverse(); + } + boxes.each(function () { + box2Darr[rowIndex][colIndex] = $(this); + colIndex++; + if (colIndex === settings.boxCols) { + rowIndex++; + colIndex = 0; + box2Darr[rowIndex] = []; + } + }); + + // Run animation + for (var cols = 0; cols < (settings.boxCols * 2) ; cols++) { + var prevCol = cols; + for (var rows = 0; rows < settings.boxRows; rows++) { + if (prevCol >= 0 && prevCol < settings.boxCols) { + /* Due to some weird JS bug with loop vars + being used in setTimeout, this is wrapped + with an anonymous function call */ + (function (row, col, time, i, totalBoxes) { + var box = $(box2Darr[row][col]); + var w = box.width(); + var h = box.height(); + if (currentEffect === 'boxRainGrow' || currentEffect === 'boxRainGrowReverse') { + box.width(0).height(0); + } + if (i === totalBoxes - 1) { + setTimeout(function () { + box.animate({ opacity: '1', width: w, height: h }, settings.animSpeed / 1.3, '', function () { slider.trigger('nivo:animFinished'); }); + }, (100 + time)); + } else { + setTimeout(function () { + box.animate({ opacity: '1', width: w, height: h }, settings.animSpeed / 1.3); + }, (100 + time)); + } + })(rows, prevCol, timeBuff, i, totalBoxes); + i++; + } + prevCol--; + } + timeBuff += 100; + } + } + }; + + // Shuffle an array + var shuffle = function (arr) { + for (var j, x, i = arr.length; i; j = parseInt(Math.random() * i, 10), x = arr[--i], arr[i] = arr[j], arr[j] = x); + return arr; + }; + + // For debugging + var trace = function (msg) { + if (this.console && typeof console.log !== 'undefined') { console.log(msg); } + }; + + // Start / Stop + this.stop = function () { + if (!$(element).data('nivo:vars').stop) { + $(element).data('nivo:vars').stop = true; + trace('Stop Slider'); + } + }; + + this.start = function () { + if ($(element).data('nivo:vars').stop) { + $(element).data('nivo:vars').stop = false; + trace('Start Slider'); + } + }; + + // Trigger the afterLoad callback + settings.afterLoad.call(this); + + return this; + }; + + $.fn.nivoSlider = function (options) { + return this.each(function (key, value) { + var element = $(this); + // Return early if this element already has a plugin instance + if (element.data('nivoslider')) { return element.data('nivoslider'); } + // Pass options to plugin constructor + var nivoslider = new NivoSlider(this, options); + // Store plugin object in this element's data + element.data('nivoslider', nivoslider); + }); + }; + + //Default settings + $.fn.nivoSlider.defaults = { + effect: 'random', + slices: 15, + boxCols: 8, + boxRows: 4, + animSpeed: 500, + pauseTime: 3000, + startSlide: 0, + directionNav: true, + controlNav: true, + controlNavThumbs: false, + pauseOnHover: true, + manualAdvance: false, + prevText: 'Prev', + nextText: 'Next', + randomStart: false, + beforeChange: function () { }, + afterChange: function () { }, + slideshowEnd: function () { }, + lastSlide: function () { }, + afterLoad: function () { } + }; + + $.fn._reverse = [].reverse; + +})(jQuery); \ No newline at end of file diff --git a/Nop.Plugin.Widgets.NivoSlider/Views/Configure.cshtml b/Nop.Plugin.Widgets.NivoSlider/Views/Configure.cshtml new file mode 100644 index 0000000..415c96e --- /dev/null +++ b/Nop.Plugin.Widgets.NivoSlider/Views/Configure.cshtml @@ -0,0 +1,449 @@ +@model Nop.Plugin.Widgets.NivoSlider.Models.ConfigurationModel +@{ + Layout = "_ConfigurePlugin"; +} +@using Nop.Plugin.Widgets.NivoSlider.Models + +@*@await Component.InvokeAsync("StoreScopeConfiguration")*@ + +
+
+
+
+ @*@T("Plugins.Widgets.NivoSliderML.Hint")*@ +
+
+ @(Html.LocalizedEditor("plugin-settings-localized", + @
+ +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+ +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+ +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+ +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+ +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+ + + +
, + @
+ +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+ +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+ +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+ +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+ +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+ + + +
, + false + )) +
+
+
+ +
+
+
+ +
+ +
\ No newline at end of file diff --git a/Nop.Plugin.Widgets.NivoSlider/Views/PublicInfo.cshtml b/Nop.Plugin.Widgets.NivoSlider/Views/PublicInfo.cshtml new file mode 100644 index 0000000..d6fdc80 --- /dev/null +++ b/Nop.Plugin.Widgets.NivoSlider/Views/PublicInfo.cshtml @@ -0,0 +1,78 @@ +@model Nop.Plugin.Widgets.NivoSlider.Models.PublicInfoModel +@{ + Layout = ""; + + Html.AddScriptParts(ResourceLocation.Footer, "~/Plugins/Widgets.NivoSlider/Scripts/jquery.nivo.slider.js"); + Html.AddCssFileParts("~/Plugins/Widgets.NivoSlider/Content/nivoslider/nivo-slider.css"); + //Html.AddCssFileParts("~/Plugins/Widgets.NivoSlider/Content/nivoslider/themes/custom/custom.css"); +} + +
+
+ @{ + var dataSlide1 = new ViewDataDictionary(ViewData) + { + {"pictureUrl", Model.Picture1Url}, + { "text", Model.Text1}, + { "link", Model.Link1}, + {"alttext", Model.AltText1 } + }; + + @await Html.PartialAsync("~/Plugins/Widgets.NivoSlider/Views/_PublicInfo.SliderLine.cshtml", dataSlide1) + } + + @{ + var dataSlide2 = new ViewDataDictionary(ViewData) + { + {"pictureUrl", Model.Picture2Url}, + { "text", Model.Text2}, + { "link", Model.Link2}, + {"alttext", Model.AltText2 } + }; + + @await Html.PartialAsync("~/Plugins/Widgets.NivoSlider/Views/_PublicInfo.SliderLine.cshtml", dataSlide2) + } + + @{ + var dataSlide3 = new ViewDataDictionary(ViewData) + { + {"pictureUrl", Model.Picture3Url}, + { "text", Model.Text3}, + { "link", Model.Link3}, + {"alttext", Model.AltText3 }, + { "dataTransition", "slideInLeft"} + }; + + @await Html.PartialAsync("~/Plugins/Widgets.NivoSlider/Views/_PublicInfo.SliderLine.cshtml", dataSlide3) + } + + @{ + var dataSlide4 = new ViewDataDictionary(ViewData) + { + {"pictureUrl", Model.Picture4Url}, + { "text", Model.Text4}, + { "link", Model.Link4}, + {"alttext", Model.AltText4 } + }; + + @await Html.PartialAsync("~/Plugins/Widgets.NivoSlider/Views/_PublicInfo.SliderLine.cshtml", dataSlide4) + } + + @{ + var dataSlide5 = new ViewDataDictionary(ViewData) + { + {"pictureUrl", Model.Picture5Url}, + { "text", Model.Text5}, + { "link", Model.Link5}, + {"alttext", Model.AltText5 } + }; + + @await Html.PartialAsync("~/Plugins/Widgets.NivoSlider/Views/_PublicInfo.SliderLine.cshtml", dataSlide5) + } +
+
+ \ No newline at end of file diff --git a/Nop.Plugin.Widgets.NivoSlider/Views/_PublicInfo.SliderLine.cshtml b/Nop.Plugin.Widgets.NivoSlider/Views/_PublicInfo.SliderLine.cshtml new file mode 100644 index 0000000..0e78966 --- /dev/null +++ b/Nop.Plugin.Widgets.NivoSlider/Views/_PublicInfo.SliderLine.cshtml @@ -0,0 +1,23 @@ +@model Nop.Plugin.Widgets.NivoSlider.Models.PublicInfoModel + +@{ + var pictureUrl = ViewData["pictureUrl"]?.ToString() ?? ""; + var link = ViewData["link"]?.ToString() ?? ""; + var dataTransition = ViewData["dataTransition"]?.ToString() ?? ""; + var text = ViewData["text"]?.ToString() ?? ""; + var alttext = ViewData["alttext"]?.ToString() ?? ""; + + if (!string.IsNullOrEmpty(pictureUrl)) + { + if (!string.IsNullOrEmpty(link)) + { + + @alttext + + } + else + { + @alttext + } + } +} \ No newline at end of file diff --git a/Nop.Plugin.Widgets.NivoSlider/Views/_ViewImports.cshtml b/Nop.Plugin.Widgets.NivoSlider/Views/_ViewImports.cshtml new file mode 100644 index 0000000..2d4ad97 --- /dev/null +++ b/Nop.Plugin.Widgets.NivoSlider/Views/_ViewImports.cshtml @@ -0,0 +1,8 @@ +@inherits Nop.Web.Framework.Mvc.Razor.NopRazorPage +@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers +@addTagHelper *, Nop.Web.Framework + +@using Microsoft.AspNetCore.Mvc.ViewFeatures +@using Nop.Web.Framework.UI +@using Nop.Web.Framework.Extensions +@using System.Text.Encodings.Web \ No newline at end of file diff --git a/Nop.Plugin.Widgets.NivoSlider/logo.jpg b/Nop.Plugin.Widgets.NivoSlider/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cae3ce3f17ad9ee8604dab7af6726378985e81ae GIT binary patch literal 3118 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