diff --git a/src/Umbraco.Web.UI/umbraco/js/UmbracoSpeechBubbleBackEnd.js b/src/Umbraco.Web.UI/umbraco/js/UmbracoSpeechBubbleBackEnd.js index acf48ecd83..1214deabc0 100644 --- a/src/Umbraco.Web.UI/umbraco/js/UmbracoSpeechBubbleBackEnd.js +++ b/src/Umbraco.Web.UI/umbraco/js/UmbracoSpeechBubbleBackEnd.js @@ -34,7 +34,7 @@ UmbracoSpeechBubble.prototype.ShowMessage = function (icon, header, message, don if (!dontAutoHide) { jQuery("#" + this.id).fadeIn("slow").animate({ opacity: 1.0 }, 5000).fadeOut("fast"); } else { - speechBubble.jQuery(".speechClose").show(); + jQuery(".speechClose").show(); jQuery("#" + this.id).fadeIn("slow"); } } else { diff --git a/src/Umbraco.Web.UI/umbraco/settings/stylesheet/editstylesheet.aspx b/src/Umbraco.Web.UI/umbraco/settings/stylesheet/editstylesheet.aspx index 8907b64236..e380ac0c17 100644 --- a/src/Umbraco.Web.UI/umbraco/settings/stylesheet/editstylesheet.aspx +++ b/src/Umbraco.Web.UI/umbraco/settings/stylesheet/editstylesheet.aspx @@ -29,9 +29,8 @@ //bind save shortcut UmbClientMgr.appActions().bindSaveShortCut(); - }); - })(jQuery); - + })(jQuery); + diff --git a/src/Umbraco.Web.UI/umbraco_client/tinymce3/plugins/umbracoembed/js/dialog.js b/src/Umbraco.Web.UI/umbraco_client/tinymce3/plugins/umbracoembed/js/dialog.js index 953ce9d8fb..4cf224eb04 100644 --- a/src/Umbraco.Web.UI/umbraco_client/tinymce3/plugins/umbracoembed/js/dialog.js +++ b/src/Umbraco.Web.UI/umbraco_client/tinymce3/plugins/umbracoembed/js/dialog.js @@ -7,7 +7,6 @@ var UmbracoEmbedDialog = { tinyMCEPopup.close(); }, showPreview: function () { - $('#insert').attr('disabled', 'disabled'); var url = $('#url').val(); @@ -16,44 +15,39 @@ var UmbracoEmbedDialog = { $('#preview').html('loading'); $('#source').val(''); - $.ajax( - { - type: 'POST', - async: true, - url: '../../../../umbraco/webservices/api/mediaservice.asmx/Embed', - data: '{ url: "' + url + '", width: "' + width + '", height: "' + height + '" }', - contentType: 'application/json; charset=utf-8', - dataType: 'json', - success: function (msg) { - var resultAsJson = msg.d; - switch (resultAsJson.Status) { - case 0: - //not supported - $('#preview').html('Not Supported'); - break; - case 1: - //error - $('#preview').html('Error'); - break; - case 2: - $('#preview').html(resultAsJson.Markup); - $('#source').val(resultAsJson.Markup); - if (resultAsJson.SupportsDimensions) { - $('#dimensions').show(); - } else { - $('#dimensions').hide(); - } - $('#insert').removeAttr('disabled'); - break; + + $.ajax({ + type: 'POST', + async: true, + url: '../../../../base/EmbedMediaService/Embed/', + data: { url: url, width: width, height: height }, + dataType: 'json', + success: function (result) { + switch (result.Status) { + case 0: + //not supported + $('#preview').html('Not Supported'); + break; + case 1: + //error + $('#preview').html('Error'); + break; + case 2: + $('#preview').html(result.Markup); + $('#source').val(result.Markup); + if (result.SupportsDimensions) { + $('#dimensions').show(); + } else { + $('#dimensions').hide(); } - - }, - error: function (xhr, ajaxOptions, thrownError) { - $('#preview').html("Error"); - //alert(xhr.status); - //alert(thrownError); - } - }); + $('#insert').removeAttr('disabled'); + break; + } + }, + error: function (xhr, ajaxOptions, thrownError) { + $('#preview').html("Error"); + } + }); }, beforeResize: function () { this.width = parseInt($('#width').val(), 10); @@ -73,11 +67,9 @@ var UmbracoEmbedDialog = { $('#width').val(this.width); } } - if ($('#url').val() != '') { UmbracoEmbedDialog.showPreview(); } - }, changeSource: function (type) { if ($('#source').val() != '') { diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj index 348dae2dfa..8e3e50c8d2 100644 --- a/src/Umbraco.Web/Umbraco.Web.csproj +++ b/src/Umbraco.Web/Umbraco.Web.csproj @@ -1768,6 +1768,7 @@ + diff --git a/src/Umbraco.Web/WebServices/EmbedMediaService.cs b/src/Umbraco.Web/WebServices/EmbedMediaService.cs new file mode 100644 index 0000000000..3f18b3a2c3 --- /dev/null +++ b/src/Umbraco.Web/WebServices/EmbedMediaService.cs @@ -0,0 +1,84 @@ +using System; +using System.IO; +using System.Linq; +using System.Text.RegularExpressions; +using System.Web; +using System.Web.Script.Serialization; +using System.Xml; +using Umbraco.Core.Configuration; +using Umbraco.Core.Media; +using umbraco.BusinessLogic; +using Umbraco.Web.BaseRest; + +namespace Umbraco.Web.WebServices +{ + [RestExtension("EmbedMediaService")] + public class EmbedMediaService + { + [RestExtensionMethod(ReturnXml = false)] + public static string Embed() + { + var currentUser = User.GetCurrent(); + + if (currentUser == null) + throw new UnauthorizedAccessException("You must be logged in to use this service"); + + var url = HttpContext.Current.Request.Form["url"]; + var width = int.Parse(HttpContext.Current.Request.Form["width"]); + var height = int.Parse(HttpContext.Current.Request.Form["height"]); + + var result = new Result(); + + //todo cache embed doc + var xmlConfig = new XmlDocument(); + xmlConfig.Load(GlobalSettings.FullpathToRoot + Path.DirectorySeparatorChar + "config" + Path.DirectorySeparatorChar + "EmbeddedMedia.config"); + + foreach (XmlNode node in xmlConfig.SelectNodes("//provider")) + { + var regexPattern = new Regex(node.SelectSingleNode("./urlShemeRegex").InnerText, RegexOptions.IgnoreCase); + + if (regexPattern.IsMatch(url)) + { + var prov = (IEmbedProvider)Activator.CreateInstance(Type.GetType(node.Attributes["type"].Value)); + + if (node.Attributes["supportsDimensions"] != null) + result.SupportsDimensions = node.Attributes["supportsDimensions"].Value == "True"; + else + result.SupportsDimensions = prov.SupportsDimensions; + + var settings = node.ChildNodes.Cast().ToDictionary(settingNode => settingNode.Name); + + foreach (var prop in prov.GetType().GetProperties().Where(prop => prop.IsDefined(typeof(ProviderSetting), true))) + { + + if (settings.Any(s => s.Key.ToLower() == prop.Name.ToLower())) + { + var setting = settings.FirstOrDefault(s => s.Key.ToLower() == prop.Name.ToLower()).Value; + var settingType = typeof(Media.EmbedProviders.Settings.String); + + if (setting.Attributes["type"] != null) + settingType = Type.GetType(setting.Attributes["type"].Value); + + var settingProv = (IEmbedSettingProvider)Activator.CreateInstance(settingType); + prop.SetValue(prov, settingProv.GetSetting(settings.FirstOrDefault(s => s.Key.ToLower() == prop.Name.ToLower()).Value), null); + } + } + try + { + result.Markup = prov.GetMarkup(url, width, height); + result.Status = Status.Success; + } + catch + { + result.Status = Status.Error; + } + + return new JavaScriptSerializer().Serialize(result); + } + } + + result.Status = Status.NotSupported; + return new JavaScriptSerializer().Serialize(result); + } + } +} diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/legacyAjaxCalls.asmx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/legacyAjaxCalls.asmx.cs index 15c573aff4..6e1381152e 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/legacyAjaxCalls.asmx.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/legacyAjaxCalls.asmx.cs @@ -166,6 +166,8 @@ namespace umbraco.presentation.webservices [ScriptMethod] public string ProgressStatus(string Key) { + AuthorizeRequest(true); + return Application[helper.Request("key")].ToString(); }