Skip to content

Instantly share code, notes, and snippets.

@jonathanread
Last active July 13, 2017 17:46
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jonathanread/8381312e1b78c1a64017 to your computer and use it in GitHub Desktop.
Save jonathanread/8381312e1b78c1a64017 to your computer and use it in GitHub Desktop.
Call To Action Widget. Designers go in ~/MVC/Designers Folder
using System;
using System.ComponentModel;
using System.Linq;
using System.Web.Mvc;
using Telerik.Sitefinity.Mvc;
using SitefinityWebApp.Mvc.Models;
using Telerik.Sitefinity.Multisite;
using Telerik.Sitefinity.Modules.Libraries;
using Telerik.Sitefinity.Libraries.Model;
using Telerik.Sitefinity.Services;
using Tenet.Sitefinity;
using Telerik.Sitefinity.Modules.Pages;
namespace SitefinityWebApp.Mvc.Controllers
{
[ControllerToolboxItem(Name = "CallToAction", Title = "CallToAction", SectionName = "MvcWidgets"), Telerik.Sitefinity.Web.UI.ControlDesign.ControlDesigner(typeof(SitefinityWebApp.Mvc.Designers.CallToActionDesigner))]
public class CallToActionController : Controller
{
public String ExternalUrl { get; set; }
public Guid Link { get; set; }
public bool OpenInNewWindow { get; set; }
public Guid Image { get; set; }
public ActionResult Index()
{
var model = new CallToActionModel();
model.Link = GetPageLink(this.Link);
if (!String.IsNullOrEmpty(this.ExternalUrl))
{
model.Link = this.ExternalUrl;
}
else
{
model.Link = GetPageLink(this.Link);
}
model.Image = GetImageUrl(this.Image);
model.OpenInNewWindow = this.OpenInNewWindow ? "target=_blank" : "";
return View("Default", model);
}
protected override void HandleUnknownAction(string actionName)
{
Index().ExecuteResult(ControllerContext);
}
private String GetImageUrl(Guid imageId)
{
LibrariesManager librariesManager = LibrariesManager.GetManager(Helpers.GetCurrentProvider("Libraries"));
String mediaUrl = String.Empty;
try
{
Image image = librariesManager.GetImages().Where(i => i.Id == imageId).FirstOrDefault();
if (image != null)
{
mediaUrl = image.MediaUrl;
}
}
catch (Exception ex)
{
mediaUrl = string.Empty;
}
return mediaUrl;
}
private String GetPageLink(Guid pageId)
{
String url = string.Empty;
try
{
PageManager pageManager = PageManager.GetManager(Helpers.GetCurrentProvider("Page"));
if (pageId != null && pageId != Guid.Empty)
{
var page = pageManager.GetPageNode(pageId);
if (page != null)
{
url = page.GetUrl().Replace("~", String.Empty);
}
}
}
catch (Exception ex)
{
url = string.Empty;
}
return url;
}
}
}
<%@ Control %>
<%@ Register Assembly="Telerik.Sitefinity" TagPrefix="sf" Namespace="Telerik.Sitefinity.Web.UI" %>
<%@ Register Assembly="Telerik.Sitefinity" TagPrefix="sitefinity" Namespace="Telerik.Sitefinity.Web.UI" %>
<%@ Register Assembly="Telerik.Sitefinity" TagPrefix="sfFields" Namespace="Telerik.Sitefinity.Web.UI.Fields" %>
<sitefinity:ResourceLinks ID="resourcesLinks" runat="server">
<sitefinity:ResourceFile Name="Styles/Ajax.css" />
<sitefinity:ResourceFile Name="Styles/jQuery/jquery.ui.core.css" />
<sitefinity:ResourceFile Name="Styles/jQuery/jquery.ui.dialog.css" />
<sitefinity:ResourceFile Name="Styles/jQuery/jquery.ui.theme.sitefinity.css" />
</sitefinity:ResourceLinks>
<style>
img{max-width:100%;}
</style>
<div id="designerLayoutRoot" class="sfContentViews sfSingleContentView" style="max-height: 600px; overflow: auto; ">
<ol>
<li class="sfFormCtrl">
<asp:Label runat="server" CssClass="sfTxtLbl">Image</asp:Label>
<img id="previewImage" src="" alt="" style="display:none;" />
<span style="display: none;" class="sfSelectedItem" id="selectedImage"></span>
<div>
<asp:LinkButton ID="selectButtonImage" OnClientClick="return false;" runat="server" CssClass="sfLinkBtn sfChange">
<span class="sfLinkBtnIn">
<asp:Literal runat="server" Text="<%$Resources:Labels, SelectDotDotDot %>" />
</span>
</asp:LinkButton>
<asp:LinkButton ID="deselectButtonImage" OnClientClick="return false;" runat="server" CssClass="sfLinkBtn sfChange">
<span class="sfLinkBtnIn">
<asp:Literal runat="server" Text="<%$Resources:Labels, Remove %>" />
</span>
</asp:LinkButton>
</div>
<sf:EditorContentManagerDialog runat="server" ID="selectorImage" DialogMode="Image" HostedInRadWindow="false" BodyCssClass="" />
<div class="sfExample"></div>
</li>
<li class="sfFormCtrl">
<asp:Label runat="server" AssociatedControlID="ExternalUrl" CssClass="sfTxtLbl">ExternalUrl</asp:Label>
<asp:TextBox ID="ExternalUrl" runat="server" CssClass="sfTxt" />
<div class="sfExample">Paste external links here, if this field is populated it will overwrite the internal page selector</div>
</li>
<li class="sfFormCtrl">
<label class="sfTxtLbl" for="selectedLinkLabel">Internal Page</label>
<span style="display: none;" class="sfSelectedItem" id="selectedLinkLabel">
<asp:Literal runat="server" Text="" />
</span>
<span class="sfLinkBtn sfChange">
<a href="javascript: void(0)" class="sfLinkBtnIn" id="pageSelectButtonLink">
<asp:Literal runat="server" Text="<%$Resources:Labels, SelectDotDotDot %>" />
</a>
</span>
<div id="selectorTagLink" runat="server" style="display: none;">
<sf:PagesSelector runat="server" ID="pageSelectorLink"
AllowExternalPagesSelection="false" AllowMultipleSelection="false" />
</div>
<div class="sfExample">Use this to select an internal page for this image to navigate to. If the External link field is populated this will be ignored</div>
</li>
<li class="sfFormCtrl">
<asp:CheckBox runat="server" ID="OpenInNewWindow" Text="OpenInNewWindow" CssClass="sfCheckBox"/>
<div class="sfExample">Check to have link open in new window</div>
</li>
</ol>
</div>
using System;
using System.Linq;
using System.Web.UI;
using Telerik.Sitefinity.Web.UI;
using Telerik.Sitefinity.Web.UI.ControlDesign;
using System.Collections.Generic;
using System.Web.UI.WebControls;
using System.Web;
using Telerik.Sitefinity.Localization;
using Telerik.Sitefinity.Modules.Pages;
using System.Web.UI.HtmlControls;
namespace SitefinityWebApp.Mvc.Designers
{
/// <summary>
/// Represents a designer for the <typeparamref name="SitefinityWebApp.Mvc.Controllers.CallToActionController"/> widget
/// </summary>
public class CallToActionDesigner : ControlDesignerBase
{
#region Properties
/// <summary>
/// Obsolete. Use LayoutTemplatePath instead.
/// </summary>
protected override string LayoutTemplateName
{
get
{
return string.Empty;
}
}
/// <summary>
/// Gets the layout template's relative or virtual path.
/// </summary>
public override string LayoutTemplatePath
{
get
{
if (string.IsNullOrEmpty(base.LayoutTemplatePath))
return CallToActionDesigner.layoutTemplatePath;
return base.LayoutTemplatePath;
}
set
{
base.LayoutTemplatePath = value;
}
}
protected override HtmlTextWriterTag TagKey
{
get
{
return HtmlTextWriterTag.Div;
}
}
#endregion
#region Control references
/// <summary>
/// The LinkButton for selecting Image.
/// </summary>
/// <value>The page selector control.</value>
protected internal virtual LinkButton SelectButtonImage
{
get
{
return this.Container.GetControl<LinkButton>("selectButtonImage", false);
}
}
/// <summary>
/// The LinkButton for deselecting Image.
/// </summary>
/// <value>The page selector control.</value>
protected internal virtual LinkButton DeselectButtonImage
{
get
{
return this.Container.GetControl<LinkButton>("deselectButtonImage", false);
}
}
/// <summary>
/// Gets the RadEditor Manager dialog for inserting image, document or video for the Image property.
/// </summary>
/// <value>The RadEditor Manager dialog for inserting image, document or video.</value>
protected EditorContentManagerDialog SelectorImage
{
get
{
return this.Container.GetControl<EditorContentManagerDialog>("selectorImage", false);
}
}
/// <summary>
/// Gets the control that is bound to the ExternalUrl property
/// </summary>
protected virtual Control ExternalUrl
{
get
{
return this.Container.GetControl<Control>("ExternalUrl", true);
}
}
/// <summary>
/// Gets the page selector control.
/// </summary>
/// <value>The page selector control.</value>
protected internal virtual PagesSelector PageSelectorLink
{
get
{
return this.Container.GetControl<PagesSelector>("pageSelectorLink", true);
}
}
/// <summary>
/// Gets the selector tag.
/// </summary>
/// <value>The selector tag.</value>
public HtmlGenericControl SelectorTagLink
{
get
{
return this.Container.GetControl<HtmlGenericControl>("selectorTagLink", true);
}
}
/// <summary>
/// Gets the control that is bound to the OpenInNewWindow property
/// </summary>
protected virtual Control OpenInNewWindow
{
get
{
return this.Container.GetControl<Control>("OpenInNewWindow", true);
}
}
#endregion
#region Methods
protected override void InitializeControls(Telerik.Sitefinity.Web.UI.GenericContainer container)
{
// Place your initialization logic here
if (this.PropertyEditor != null)
{
var uiCulture = this.PropertyEditor.PropertyValuesCulture;
this.PageSelectorLink.UICulture = uiCulture;
}
}
#endregion
#region IScriptControl implementation
/// <summary>
/// Gets a collection of script descriptors that represent ECMAScript (JavaScript) client components.
/// </summary>
public override System.Collections.Generic.IEnumerable<System.Web.UI.ScriptDescriptor> GetScriptDescriptors()
{
var scriptDescriptors = new List<ScriptDescriptor>(base.GetScriptDescriptors());
var descriptor = (ScriptControlDescriptor)scriptDescriptors.Last();
descriptor.AddElementProperty("selectButtonImage", this.SelectButtonImage.ClientID);
descriptor.AddElementProperty("deselectButtonImage", this.DeselectButtonImage.ClientID);
descriptor.AddComponentProperty("selectorImage", this.SelectorImage.ClientID);
descriptor.AddElementProperty("externalUrl", this.ExternalUrl.ClientID);
descriptor.AddComponentProperty("pageSelectorLink", this.PageSelectorLink.ClientID);
descriptor.AddElementProperty("selectorTagLink", this.SelectorTagLink.ClientID);
descriptor.AddElementProperty("openInNewWindow", this.OpenInNewWindow.ClientID);
descriptor.AddProperty("imageServiceUrl", this.imageServiceUrl);
return scriptDescriptors;
}
/// <summary>
/// Gets a collection of ScriptReference objects that define script resources that the control requires.
/// </summary>
public override System.Collections.Generic.IEnumerable<System.Web.UI.ScriptReference> GetScriptReferences()
{
var scripts = new List<ScriptReference>(base.GetScriptReferences());
scripts.Add(new ScriptReference(CallToActionDesigner.scriptReference));
return scripts;
}
/// <summary>
/// Gets the required by the control, core library scripts predefined in the <see cref="ScriptRef"/> enum.
/// </summary>
protected override ScriptRef GetRequiredCoreScripts()
{
return ScriptRef.JQuery | ScriptRef.JQueryUI;
}
#endregion
#region Private members & constants
public static readonly string layoutTemplatePath = "~/Mvc/Designers/CallToActionDesigner.ascx";
public const string scriptReference = "~/Mvc/Designers/CallToActionDesigner.js";
private string imageServiceUrl = VirtualPathUtility.ToAbsolute("~/Sitefinity/Services/Content/ImageService.svc/");
#endregion
}
}
Type.registerNamespace("SitefinityWebApp.Mvc.Designers");
SitefinityWebApp.Mvc.Designers.CallToActionDesigner = function (element) {
/* Initialize Image fields */
this._selectButtonImage = null;
this._selectButtonImageClickDelegate = null;
this._deselectButtonImage = null;
this._deselectButtonImageClickDelegate = null;
this._selectorImageCloseDelegate = null;
this._selectorImageUploaderViewFileChangedDelegate = null;
this._ImageDialog = null;
this._selectorImage = null;
this._ImageId = null;
/* Initialize ExternalUrl fields */
this._externalUrl = null;
/* Initialize Link fields */
this._pageSelectorLink = null;
this._selectorTagLink = null;
this._LinkDialog = null;
this._showPageSelectorLinkDelegate = null;
this._pageSelectedLinkDelegate = null;
/* Initialize OpenInNewWindow fields */
this._openInNewWindow = null;
/* Initialize the service url for the image thumbnails */
this.imageServiceUrl = null;
/* Calls the base constructor */
SitefinityWebApp.Mvc.Designers.CallToActionDesigner.initializeBase(this, [element]);
}
SitefinityWebApp.Mvc.Designers.CallToActionDesigner.prototype = {
/* --------------------------------- set up and tear down --------------------------------- */
initialize: function () {
/* Here you can attach to events or do other initialization */
SitefinityWebApp.Mvc.Designers.CallToActionDesigner.callBaseMethod(this, 'initialize');
/* Initialize Image */
this._selectButtonImageClickDelegate = Function.createDelegate(this, this._selectButtonImageClicked);
if (this._selectButtonImage) {
$addHandler(this._selectButtonImage, "click", this._selectButtonImageClickDelegate);
}
this._deselectButtonImageClickDelegate = Function.createDelegate(this, this._deselectButtonImageClicked);
if (this._deselectButtonImage) {
$addHandler(this._deselectButtonImage, "click", this._deselectButtonImageClickDelegate);
}
if (this._selectorImage) {
this._ImageDialog = jQuery(this._selectorImage.get_element()).dialog({
autoOpen: false,
modal: false,
width: 655,
height: "auto",
closeOnEscape: true,
resizable: false,
draggable: false,
zIndex: 5000,
close: this._selectorImageCloseDelegate
});
}
jQuery("#previewImage").load(function () {
dialogBase.resizeToContent();
});
this._selectorImageInsertDelegate = Function.createDelegate(this, this._selectorImageInsertHandler);
this._selectorImage.set_customInsertDelegate(this._selectorImageInsertDelegate);
$addHandler(this._selectorImage._cancelLink, "click", this._selectorImageCloseHandler);
this._selectorImageCloseDelegate = Function.createDelegate(this, this._selectorImageCloseHandler);
this._selectorImageUploaderViewFileChangedDelegate = Function.createDelegate(this, this._selectorImageUploaderViewFileChangedHandler);
/* Initialize Link */
this._showPageSelectorLinkDelegate = Function.createDelegate(this, this._showPageSelectorLinkHandler);
$addHandler(this.get_pageSelectButtonLink(), "click", this._showPageSelectorLinkDelegate);
this._pageSelectedLinkDelegate = Function.createDelegate(this, this._pageSelectedLinkHandler);
this.get_pageSelectorLink().add_doneClientSelection(this._pageSelectedLinkDelegate);
if (this._selectorTagLink) {
this._LinkDialog = jQuery(this._selectorTagLink).dialog({
autoOpen: false,
modal: false,
width: 395,
closeOnEscape: true,
resizable: false,
draggable: false,
zIndex: 5000
});
}
},
dispose: function () {
/* this is the place to unbind/dispose the event handlers created in the initialize method */
SitefinityWebApp.Mvc.Designers.CallToActionDesigner.callBaseMethod(this, 'dispose');
/* Dispose Image */
if (this._selectButtonImage) {
$removeHandler(this._selectButtonImage, "click", this._selectButtonImageClickDelegate);
}
if (this._selectButtonImageClickDelegate) {
delete this._selectButtonImageClickDelegate;
}
if (this._deselectButtonImage) {
$removeHandler(this._deselectButtonImage, "click", this._deselectButtonImageClickDelegate);
}
if (this._deselectButtonImageClickDelegate) {
delete this._deselectButtonImageClickDelegate;
}
$removeHandler(this._selectorImage._cancelLink, "click", this._selectorImageCloseHandler);
if (this._selectorImageCloseDelegate) {
delete this._selectorImageCloseDelegate;
}
if (this._selectorImageUploaderViewFileChangedDelegate) {
this._selectorImage._uploaderView.remove_onFileChanged(this._selectorImageUploaderViewFileChangedDelegate);
delete this._selectorImageUploaderViewFileChangedDelegate;
}
/* Dispose Link */
if (this._showPageSelectorLinkDelegate) {
$removeHandler(this.get_pageSelectButtonLink(), "click", this._showPageSelectorLinkDelegate);
delete this._showPageSelectorLinkDelegate;
}
if (this._pageSelectedLinkDelegate) {
this.get_pageSelectorLink().remove_doneClientSelection(this._pageSelectedLinkDelegate);
delete this._pageSelectedLinkDelegate;
}
},
/* --------------------------------- public methods ---------------------------------- */
findElement: function (id) {
var result = jQuery(this.get_element()).find("#" + id).get(0);
return result;
},
/* Called when the designer window gets opened and here is place to "bind" your designer to the control properties */
refreshUI: function () {
var controlData = this._propertyEditor.get_control().Settings; /* JavaScript clone of your control - all the control properties will be properties of the controlData too */
/* RefreshUI Image */
this.get_selectedImage().innerHTML = controlData.Image;
if (controlData.Image && controlData.Image != "00000000-0000-0000-0000-000000000000") {
this.get_selectButtonImage().innerHTML = "<span class=\"sfLinkBtnIn\">Change</span>";
jQuery(this.get_deselectButtonImage()).show()
var url = this.imageServiceUrl + controlData.Image + "/?published=true";
jQuery.ajax({
url: url,
type: "GET",
contentType: "application/json",
dataType: "json",
success: function (data) {
jQuery("#previewImage").show();
jQuery("#previewImage").attr("src", data.Item.ThumbnailUrl);
dialogBase.resizeToContent();
}
});
}
else {
jQuery(this.get_deselectButtonImage()).hide()
}
/* RefreshUI ExternalUrl */
jQuery(this.get_externalUrl()).val(controlData.ExternalUrl);
/* RefreshUI Link */
if (controlData.Link && controlData.Link !== "00000000-0000-0000-0000-000000000000") {
var pagesSelectorLink = this.get_pageSelectorLink().get_pageSelector();
var selectedPageLabelLink = this.get_selectedLinkLabel();
var selectedPageButtonLink = this.get_pageSelectButtonLink();
pagesSelectorLink.add_selectionApplied(function (o, args) {
var selectedPage = pagesSelectorLink.get_selectedItem();
if (selectedPage) {
selectedPageLabelLink.innerHTML = selectedPage.Title.Value;
jQuery(selectedPageLabelLink).show();
selectedPageButtonLink.innerHTML = '<span>Change</span>';
}
});
pagesSelectorLink.set_selectedItems([{ Id: controlData.Link}]);
}
/* RefreshUI OpenInNewWindow */
jQuery(this.get_openInNewWindow()).attr("checked", controlData.OpenInNewWindow);
},
/* Called when the "Save" button is clicked. Here you can transfer the settings from the designer to the control */
applyChanges: function () {
var controlData = this._propertyEditor.get_control().Settings;
/* ApplyChanges Image */
controlData.Image = this.get_selectedImage().innerHTML;
/* ApplyChanges ExternalUrl */
controlData.ExternalUrl = jQuery(this.get_externalUrl()).val();
/* ApplyChanges Link */
/* ApplyChanges OpenInNewWindow */
controlData.OpenInNewWindow = jQuery(this.get_openInNewWindow()).is(":checked");
},
/* --------------------------------- event handlers ---------------------------------- */
/* Image event handlers */
_selectButtonImageClicked: function (sender, args) {
this._selectorImage._uploaderView.add_onFileChanged(this._selectorImageUploaderViewFileChangedDelegate);
this._ImageDialog.dialog("open");
jQuery("#designerLayoutRoot").hide();
this._ImageDialog.dialog().parent().css("min-width", "655px");
dialogBase.resizeToContent();
try {
this._selectorImage.get_uploaderView().get_altTextField().set_value("");
}
catch (ex) { }
jQuery(this._selectorImage.get_uploaderView().get_settingsPanel()).hide();
return false;
},
_deselectButtonImageClicked: function (sender, args) {
jQuery("#previewImage").hide();
jQuery("#previewImage").attr("src", "");
this.get_selectedImage().innerHTML = "00000000-0000-0000-0000-000000000000";
this.get_selectButtonImage().innerHTML = "<span class=\"sfLinkBtnIn\">Select...</span>";
jQuery(this.get_deselectButtonImage()).hide()
dialogBase.resizeToContent();
return false;
},
/* --------------------------------- private methods --------------------------------- */
/* Image private methods */
_selectorImageInsertHandler: function (selectedItem) {
if (selectedItem) {
this._ImageId = selectedItem.Id;
this.get_selectedImage().innerHTML = this._ImageId;
jQuery(this.get_deselectButtonImage()).show()
this.get_selectButtonImage().innerHTML = "<span class=\"sfLinkBtnIn\">Change</span>";
jQuery("#previewImage").show();
jQuery("#previewImage").attr("src", selectedItem.ThumbnailUrl);
}
this._ImageDialog.dialog("close");
jQuery("#designerLayoutRoot").show();
dialogBase.resizeToContent();
},
_selectorImageCloseHandler: function () {
if(this._ImageDialog){
this._ImageDialog.dialog("close");
}
jQuery("#designerLayoutRoot").show();
dialogBase.resizeToContent();
},
_selectorImageUploaderViewFileChangedHandler: function () {
dialogBase.resizeToContent();
},
/* Link private methods */
_showPageSelectorLinkHandler: function (selectedItem) {
var controlData = this._propertyEditor.get_control().Settings;
var pagesSelector = this.get_pageSelectorLink().get_pageSelector();
if (controlData.Link) {
pagesSelector.set_selectedItems([{ Id: controlData.Link }]);
}
this._LinkDialog.dialog("open");
jQuery("#designerLayoutRoot").hide();
this._LinkDialog.dialog().parent().css("min-width", "355px");
dialogBase.resizeToContent();
},
_pageSelectedLinkHandler: function (items) {
var controlData = this._propertyEditor.get_control().Settings;
var pagesSelector = this.get_pageSelectorLink().get_pageSelector();
this._LinkDialog.dialog("close");
jQuery("#designerLayoutRoot").show();
dialogBase.resizeToContent();
if (items == null) {
return;
}
var selectedPage = pagesSelector.get_selectedItem();
if (selectedPage) {
this.get_selectedLinkLabel().innerHTML = selectedPage.Title.Value;
jQuery(this.get_selectedLinkLabel()).show();
this.get_pageSelectButtonLink().innerHTML = '<span>Change</span>';
controlData.Link = selectedPage.Id;
}
else {
jQuery(this.get_selectedLinkLabel()).hide();
this.get_pageSelectButtonLink().innerHTML = '<span>Select...</span>';
controlData.Link = "00000000-0000-0000-0000-000000000000";
}
},
/* --------------------------------- properties -------------------------------------- */
/* Image properties */
get_selectorImage: function () {
return this._selectorImage;
},
set_selectorImage: function (value) {
this._selectorImage = value;
},
get_selectButtonImage: function () {
return this._selectButtonImage;
},
set_selectButtonImage: function (value) {
this._selectButtonImage = value;
},
get_deselectButtonImage: function () {
return this._deselectButtonImage;
},
set_deselectButtonImage: function (value) {
this._deselectButtonImage = value;
},
get_selectedImage: function () {
if (this._selectedImage == null) {
this._selectedImage = this.findElement("selectedImage");
}
return this._selectedImage;
},
/* ExternalUrl properties */
get_externalUrl: function () { return this._externalUrl; },
set_externalUrl: function (value) { this._externalUrl = value; },
/* Link properties */
get_pageSelectButtonLink: function () {
if (this._pageSelectButtonLink == null) {
this._pageSelectButtonLink = this.findElement("pageSelectButtonLink");
}
return this._pageSelectButtonLink;
},
get_selectedLinkLabel: function () {
if (this._selectedLinkLabel == null) {
this._selectedLinkLabel = this.findElement("selectedLinkLabel");
}
return this._selectedLinkLabel;
},
get_pageSelectorLink: function () {
return this._pageSelectorLink;
},
set_pageSelectorLink: function (val) {
this._pageSelectorLink = val;
},
get_selectorTagLink: function () {
return this._selectorTagLink;
},
set_selectorTagLink: function (value) {
this._selectorTagLink = value;
},
/* OpenInNewWindow properties */
get_openInNewWindow: function () { return this._openInNewWindow; },
set_openInNewWindow: function (value) { this._openInNewWindow = value; }
}
SitefinityWebApp.Mvc.Designers.CallToActionDesigner.registerClass('SitefinityWebApp.Mvc.Designers.CallToActionDesigner', Telerik.Sitefinity.Web.UI.ControlDesign.ControlDesignerBase);
using System;
using System.Collections.Generic;
using System.Linq;
using Telerik.Sitefinity.Model.ContentLinks;
namespace SitefinityWebApp.Mvc.Models
{
public class CallToActionModel
{
public String Link { get; set; }
public String OpenInNewWindow { get; set; }
public String Image { get; set; }
}
}
@model SitefinityWebApp.Mvc.Models.CallToActionModel
<a href="@Model.Link" @Model.OpenInNewWindow class="call-to-action">
<img src="@Model.Image" />
</a>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment