using System;
using System.Collections;
using System.Text.RegularExpressions;
using System.Web.UI;
using CMS.ExtendedControls;
using CMS.GlobalHelper;
using CMS.UIControls;
public partial class CMSModules_Content_Controls_Dialogs_YouTube_YouTubeProperties : ItemProperties
{
#region "Private properties"
///
/// Returns the default width of the YouTube video.
///
private int DefaultWidth
{
get
{
return ValidationHelper.GetInteger(ViewState["DefaultHeight"], 0);
}
set
{
ViewState["DefaultHeight"] = value;
}
}
///
/// Returns the default height of the YouTube video.
///
private int DefaultHeight
{
get
{
return ValidationHelper.GetInteger(ViewState["DefaultWidth"], 0);
}
set
{
ViewState["DefaultWidth"] = value;
}
}
#endregion
#region "Page events"
protected void Page_Load(object sender, EventArgs e)
{
ScriptHelper.RegisterJQuery(Page);
ScriptHelper.RegisterStartupScript(this, typeof(String), "InsertScript", ScriptHelper.GetScript(
string.Format("window.insertItem = function(){{{0}}}",
Page.ClientScript.GetPostBackEventReference(btnHiddenInsert, string.Empty))));
if (!StopProcessing)
{
// Refresh button
imgRefresh.ImageUrl = GetImageUrl("Design/Controls/Dialogs/refresh.png");
imgRefresh.ToolTip = GetString("dialogs.web.refresh");
// YouTube default sizes control
youTubeSizes.OnSelectedItemClick = ControlsHelper.GetPostBackEventReference(btnDefaultSizesHidden, "");
youTubeSizes.LoadSizes(new int[] { 425, 264, 480, 295, 560, 340, 640, 385 });
btnHiddenPreview.Click += btnHiddenPreview_Click;
btnHiddenInsert.Click += btnHiddenInsert_Click;
btnHiddenSizeRefresh.Click += btnHiddenSizeRefresh_Click;
btnDefaultSizesHidden.Click += btnDefaultSizesHidden_Click;
sizeElem.CustomRefreshCode = ControlsHelper.GetPostBackEventReference(btnHiddenSizeRefresh, "") + ";return false;";
CMSDialogHelper.RegisterDialogHelper(Page);
ScriptHelper.RegisterStartupScript(Page, typeof(Page), "YTLoading", string.Format("Loading('{0}','{1}');",
GetString("dialogs.youtube.preview").Replace("\'", "\\\'"),
GetString("dialogs.youtube.previewloading").Replace("\'", "\\\'")), true);
SetupOnChange();
if (!RequestHelper.IsPostBack())
{
sizeElem.Locked = true;
sizeElem.Width = DefaultWidth = 425;
sizeElem.Height = DefaultHeight = 264;
Hashtable dialogParameters = SessionHelper.GetValue("DialogParameters") as Hashtable;
if ((dialogParameters != null) && (dialogParameters.Count > 0))
{
LoadItemProperties(dialogParameters);
SessionHelper.SetValue("DialogParameters", null);
}
}
}
}
protected void btnHiddenSizeRefresh_Click(object sender, EventArgs e)
{
sizeElem.Width = DefaultWidth;
sizeElem.Height = DefaultHeight;
LoadPreview();
}
protected void btnDefaultSizesHidden_Click(object sender, EventArgs e)
{
sizeElem.Width = youTubeSizes.SelectedWidth;
sizeElem.Height = youTubeSizes.SelectedHeight;
DefaultWidth = youTubeSizes.SelectedWidth;
DefaultHeight = youTubeSizes.SelectedHeight;
LoadPreview();
}
protected void btnHiddenPreview_Click(object sender, EventArgs e)
{
LoadPreview();
}
protected void btnHiddenInsert_Click(object sender, EventArgs e)
{
if (Validate())
{
Hashtable ytProperties = GetItemProperties();
ScriptHelper.RegisterStartupScript(Page, typeof(Page), "insertYouTube", ScriptHelper.GetScript(CMSDialogHelper.GetYouTubeItem(ytProperties)));
}
}
protected void imgRefresh_Click(object sender, ImageClickEventArgs e)
{
LoadPreview();
}
#endregion
#region "Private methods"
///
/// Loads the preview with proper data.
///
private void LoadPreview()
{
string url = FixPreviewUrl(txtLinkText.Text);
if (!string.IsNullOrEmpty(url))
{
txtLinkText.Text = url;
previewElem.AutoPlay = false; // Always ignore auto play in preview
previewElem.Fs = chkFullScreen.Checked;
previewElem.Height = sizeElem.Height;
previewElem.Width = sizeElem.Width;
previewElem.Loop = chkLoop.Checked;
previewElem.Rel = chkIncludeRelated.Checked;
previewElem.Url = url;
}
}
private string FixPreviewUrl(string url)
{
url = url.Trim();
if (!String.IsNullOrEmpty(url))
{
string videoID = null;
if (url.Contains("youtu.be/"))
{
// Get video ID from short youtube URL
Regex youTuBeRegex = RegexHelper.GetRegex("youtu.be/([^&]+)&?$?", RegexOptions.IgnoreCase);
Match m = youTuBeRegex.Match(url);
if (m.Success)
{
videoID = m.Groups[1].Value;
}
}
else
{
// Get video ID from youtube URL
Regex youTubeComRegex = RegexHelper.GetRegex("www.youtube.com/watch\\?.*&?v=([^&]+).*", RegexOptions.IgnoreCase);
Match m = youTubeComRegex.Match(url);
if (m.Success)
{
videoID = m.Groups[1].Value;
}
}
if (!String.IsNullOrEmpty(videoID))
{
url = String.Format("http://www.youtube.com/watch?v={0}", videoID);
}
}
return url;
}
private void SetupOnChange()
{
string postBackRef = string.Format("setTimeout({0},100);", ScriptHelper.GetString(ControlsHelper.GetPostBackEventReference(btnHiddenPreview, "")));
txtLinkText.Attributes["onchange"] = postBackRef;
sizeElem.HeightTextBox.Attributes["onchange"] = postBackRef;
sizeElem.WidthTextBox.Attributes["onchange"] = postBackRef;
chkAutoplay.InputAttributes["onclick"] = postBackRef;
chkFullScreen.InputAttributes["onclick"] = postBackRef;
chkIncludeRelated.InputAttributes["onclick"] = postBackRef;
chkLoop.InputAttributes["onclick"] = postBackRef;
}
#endregion
#region "Overridden methods"
///
/// Loads the properties into control.
///
/// Collection of properties
public override void LoadItemProperties(Hashtable properties)
{
if (properties != null)
{
bool autoplay = ValidationHelper.GetBoolean(properties[DialogParameters.YOUTUBE_AUTOPLAY], false);
bool fullScreen = ValidationHelper.GetBoolean(properties[DialogParameters.YOUTUBE_FS], false);
bool loop = ValidationHelper.GetBoolean(properties[DialogParameters.YOUTUBE_LOOP], false);
bool relatedVideos = ValidationHelper.GetBoolean(properties[DialogParameters.YOUTUBE_REL], false);
string url = ValidationHelper.GetString(properties[DialogParameters.YOUTUBE_URL], "");
int width = ValidationHelper.GetInteger(properties[DialogParameters.YOUTUBE_WIDTH], 425);
int height = ValidationHelper.GetInteger(properties[DialogParameters.YOUTUBE_HEIGHT], 264);
DefaultWidth = width;
DefaultHeight = height;
chkAutoplay.Checked = autoplay;
chkFullScreen.Checked = fullScreen;
chkIncludeRelated.Checked = relatedVideos;
chkLoop.Checked = loop;
txtLinkText.Text = url;
sizeElem.Width = width;
sizeElem.Height = height;
LoadPreview();
}
}
///
/// Returns all parameters of the selected item as name – value collection.
///
public override Hashtable GetItemProperties()
{
Hashtable retval = new Hashtable();
retval[DialogParameters.YOUTUBE_AUTOPLAY] = chkAutoplay.Checked;
retval[DialogParameters.YOUTUBE_FS] = chkFullScreen.Checked;
retval[DialogParameters.YOUTUBE_HEIGHT] = sizeElem.Height;
retval[DialogParameters.YOUTUBE_LOOP] = chkLoop.Checked;
retval[DialogParameters.YOUTUBE_REL] = chkIncludeRelated.Checked;
retval[DialogParameters.YOUTUBE_URL] = txtLinkText.Text.Trim();
retval[DialogParameters.YOUTUBE_WIDTH] = sizeElem.Width;
retval[DialogParameters.OBJECT_TYPE] = "youtubevideo";
return retval;
}
///
/// Clears the properties form.
///
public override void ClearProperties(bool hideProperties)
{
sizeElem.Height = 425;
sizeElem.Width = 264;
chkAutoplay.Checked = false;
chkLoop.Checked = false;
chkIncludeRelated.Checked = true;
chkFullScreen.Checked = true;
previewElem.Url = "";
}
///
/// Validates all the user input.
///
public override bool Validate()
{
string errorMessage = "";
if (!sizeElem.Validate())
{
errorMessage += " " + GetString("dialogs.youtube.invalidsize");
}
errorMessage = errorMessage.Trim();
if (errorMessage != "")
{
ScriptHelper.RegisterStartupScript(Page, typeof(Page), "YouTubePropertiesError", ScriptHelper.GetAlertScript(errorMessage));
return false;
}
return true;
}
#endregion
}