Inline Javascript.
Hello,
Im trying to insert javascript in a template that gets the latest news of the company from another site. I am able to do this easily through the css widget, but I have to include the javascript in the middle of a content block because of css issues. (unless there is a way to set a wrapper class for the javascript widget??) When I try to insert the script on the html, it gets erased once I press ok or switch between source/design. Is there a way to do this?? I saw some other threads that mentioned to set to "true" allowscripts and contentfilters to "none" but I cant find these properties or the files (ControlTemplates) anywhere.. which brings me to another question... when I click on "Edit on visual studio" VS pulls up the solution, but all the default.ascx files are completely empty although I have three published pages and a template throught the sitefinity UI. So whenever I see some solutions on the threads that require editing the project on VS, Im not really sure what to edit. (Im probably looking at the wrong place or something :/ ).
Thanks for your time!
Hello John,
You can map the ContentBlockDesigner
2. Add the following
in the ascx
<%@ Control Language="C#" %>
<%@ Register Assembly="Telerik.Sitefinity" Namespace="Telerik.Sitefinity.Web.UI" TagPrefix="sf" %>
<%@ Register Assembly="Telerik.Sitefinity" Namespace="Telerik.Sitefinity.Web.UI.Fields" TagPrefix="sf" %>
<
sf:ResourceLinks
id
=
"resourcesLinks"
runat
=
"server"
>
<
sf:ResourceFile
Name
=
"Styles/Window.css"
/>
</
sf:ResourceLinks
>
<
sf:FormManager
ID
=
"formManager"
runat
=
"server"
/>
<
div
style
=
"width: 660px; overflow: hidden;"
>
<
sf:HtmlField
ID
=
"htmlEditor"
runat
=
"server"
Width
=
"99%"
Height
=
"370px"
EditorContentFilters
=
"DefaultFilters"
EditorStripFormattingOptions
=
"MSWord,Css,Font,Span,ConvertWordLists"
DisplayMode
=
"Write"
FixCursorIssue
=
"True"
>
</
sf:HtmlField
>
</
div
>
<
script
type
=
"text/javascript"
>
$("body").addClass("sfContentBlockDesigner");
</
script
>
Change EditorContentFilters. Then you can set the ContentFilters you want to have.
All the best,Hi Ivan,
I want to use the ContentBlock in my custom control designer to set a string property in a custom widget (created as a usercontrol). I have successfully hooked up everithing and it is showing content block editor when i go to the edit view of the control. Now the chellenge I have is to get the entered content and and set it to the property in the widget. The following two functions in the designer.js fails when loading or saved.
Previously I used RadEditor instead and these functions worked without any trouble. Can you tell me what i need to do inorder to read/set the content input from the custom control designer?
//refreshes the UI overrides the base interface
refreshUI: function ()
this._refreshMode = true;
var data = this.get_controlData();
this.get_contentBlockControlTop().set_html(data.ContentTop)
,
// forces the designer to apply the changes on UI to the cotnrol Data buth
applyChanges: function ()
var data = this.get_controlData();
data.ContentTop = this.get_contentBlockControlTop().get_html();
Hello,
I solved the above problem by changing the set_html() and get_html() to as follows...
//refreshes the UI overrides the base interface
refreshUI: function ()
this._refreshMode = true;
var data = this.get_controlData();
this.get_contentBlockControlTop()._setEditorHtml(data.ContentTop);
,
// forces the designer to apply the changes on UI to the cotnrol Data buth
applyChanges: function ()
var data = this.get_controlData();
data.ContentTop = this.get_contentBlockControlTop().get_value();
Hey I'm having the same problems and the one thing im missing from this is:
this.get_contentBlockControlTop()
Can you share the markup for that function?
Hi Jerami,
Here is the complete client-side code I'm having.
Type.registerNamespace("Samples.ControlDesigners.CertifiedAgents");
Samples.ControlDesigners.CertifiedAgents.CertifiedAgentsDesigner = function (element)
// Elements
this._contentBlockControlTop = null;
this._contentBlockControlBottom = null;
Samples.ControlDesigners.CertifiedAgents.CertifiedAgentsDesigner.initializeBase(this, [element]);
Samples.ControlDesigners.CertifiedAgents.CertifiedAgentsDesigner.prototype =
initialize: function ()
Samples.ControlDesigners.CertifiedAgents.CertifiedAgentsDesigner.callBaseMethod(this, 'initialize');
,
dispose: function ()
Samples.ControlDesigners.CertifiedAgents.CertifiedAgentsDesigner.callBaseMethod(this, 'dispose');
,
// Top Content
get_contentBlockControlTop: function ()
return this._contentBlockControlTop;
,
set_contentBlockControlTop: function (value)
this._contentBlockControlTop = value;
,
// Bottom Content
get_contentBlockControlBottom: function ()
return this._contentBlockControlBottom;
,
set_contentBlockControlBottom: function (value)
this._contentBlockControlBottom = value;
,
/* ----------------------------- Public Mthods ----------------------------- */
// Refreshes the UI overrides the base interface
refreshUI: function ()
this._refreshMode = true;
var data = this.get_controlData();
// set values....
if (data.DetailsPageURL != null)
$("#DetailsPageURL").val(data.DetailsPageURL);
this.get_contentBlockControlTop()._setEditorHtml(data.ContentTop);
this.get_contentBlockControlBottom()._setEditorHtml(data.ContentBottom);
,
// Forces the designer to apply the changes on UI to the cotnrol Data buth
applyChanges: function ()
var data = this.get_controlData();
// Get values....
data.DetailsPageURL = $("#DetailsPageURL").val();
data.ContentTop = this.get_contentBlockControlTop().get_value();
data.ContentBottom = this.get_contentBlockControlBottom().get_value();
Samples.ControlDesigners.CertifiedAgents.CertifiedAgentsDesigner.registerClass('Samples.ControlDesigners.CertifiedAgents.CertifiedAgentsDesigner', Telerik.Sitefinity.Web.UI.ControlDesign.ControlDesignerBase);
if (typeof (Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();
/// <
summary
>
/// Gets script descriptors.
/// </
summary
>
/// <
returns
>ScriptDescriptor.</
returns
>
public override IEnumerable<
ScriptDescriptor
> GetScriptDescriptors()
var scriptDescriptors = new List<
ScriptDescriptor
>(base.GetScriptDescriptors());
var desc = (ScriptControlDescriptor)scriptDescriptors.Last();
var contentBlockControlTop = this.ContentBlockTop;
var contentBlockControlBottom = this.ContentBlockBottom;
desc.AddComponentProperty("contentBlockControlTop", contentBlockControlTop.ClientID);
desc.AddComponentProperty("contentBlockControlBottom", contentBlockControlBottom.ClientID);
return scriptDescriptors.ToArray();
/// <
summary
>
/// Gets the top content block control instance.
/// </
summary
>
protected virtual HtmlField ContentBlockTop
get
return this.Container.GetControl<
HtmlField
>("htmlEditorTop", true);
/// <
summary
>
/// Gets the bottom content block control instance.
/// </
summary
>
protected virtual HtmlField ContentBlockBottom
get
return this.Container.GetControl<
HtmlField
>("htmlEditorBottom", true);
Thanks I got it working now...i was missing the GetScriptDescriptors() method.
public override IEnumerable<
ScriptDescriptor
> GetScriptDescriptors()
Hi Duneel,
Your code has been very helpful. Could you answer two questions for me?
1. What do ContentTop and ContentBottom correspond to? I tried switching this for the ID of the HtmlField in my designer template, the control name, and anything else I can think of, and nothing worked.
2. The line below threw an error... is it correct?
var desc = (ScriptControlDescriptor)scriptDescriptors.Last();
Hi Michael,
ContentBlockTop and ContentBlockBottom corresponds to two HTMLField controls available in my designer template (.ascx). In designer.cs file I need to register the ClientIDs of the two controls so they are available to the javascript file.
This is what I have in my designer.cs file for the two fields.
/// <
summary
>
/// Gets the top content block control instance.
/// </
summary
>
protected virtual HtmlField ContentBlockTop
get
return this.Container.GetControl<
HtmlField
>("htmlEditorTop", true);
/// <
summary
>
/// Gets the bottom content block control instance.
/// </
summary
>
protected virtual HtmlField ContentBlockBottom
get
return this.Container.GetControl<
HtmlField
>("htmlEditorBottom", true);
/// <
summary
>
/// Gets script descriptors.
/// </
summary
>
/// <
returns
>ScriptDescriptor.</
returns
>
public override IEnumerable<
ScriptDescriptor
> GetScriptDescriptors()
var scriptDescriptors = new List<
ScriptDescriptor
>(base.GetScriptDescriptors());
var desc = (ScriptControlDescriptor)scriptDescriptors.Last();
var contentBlockControlTop = this.ContentBlockTop;
var contentBlockControlBottom = this.ContentBlockBottom;
desc.AddComponentProperty("contentBlockControlTop", contentBlockControlTop.ClientID);
desc.AddComponentProperty("contentBlockControlBottom", contentBlockControlBottom.ClientID);
return scriptDescriptors.ToArray();
How to create dynamic tab in the sitefinity custom widget and put the content for there respective tab. Please suggest