mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 19:54:57 +08:00
Adding oEmbed provider
--HG-- branch : 1.x extra : rebase_source : f59bb906662cb178ccaaeffc141227563d73f819
This commit is contained in:
@@ -2,7 +2,6 @@
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Web.Mvc;
|
||||
using Orchard.MediaLibrary.Providers.ClientStorage;
|
||||
using Orchard.MediaLibrary.Services;
|
||||
using Orchard.Themes;
|
||||
using Orchard.UI.Admin;
|
||||
|
@@ -0,0 +1,110 @@
|
||||
using System;
|
||||
using System.Net;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Web.Mvc;
|
||||
using System.Xml.Linq;
|
||||
using Orchard.MediaLibrary.Models;
|
||||
using Orchard.MediaLibrary.Services;
|
||||
using Orchard.MediaLibrary.ViewModels;
|
||||
using Orchard.Taxonomies.Services;
|
||||
using Orchard.Themes;
|
||||
using Orchard.UI.Admin;
|
||||
using Orchard.ContentManagement;
|
||||
|
||||
namespace Orchard.MediaLibrary.Controllers {
|
||||
[Admin, Themed(false)]
|
||||
public class OEmbedController : Controller {
|
||||
private readonly ITaxonomyService _taxonomyService;
|
||||
private readonly IMediaLibraryService _mediaLibraryService;
|
||||
|
||||
public OEmbedController(
|
||||
ITaxonomyService taxonomyService,
|
||||
IMediaLibraryService mediaManagerService,
|
||||
IOrchardServices services) {
|
||||
_taxonomyService = taxonomyService;
|
||||
_mediaLibraryService = mediaManagerService;
|
||||
Services = services;
|
||||
}
|
||||
|
||||
public IOrchardServices Services { get; set; }
|
||||
|
||||
public ActionResult Index(int id) {
|
||||
var viewModel = new OEmbedViewModel();
|
||||
return View(viewModel);
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public ActionResult Index(int id, string url) {
|
||||
var viewModel = new OEmbedViewModel {
|
||||
Url = url,
|
||||
Id = id
|
||||
};
|
||||
|
||||
try {
|
||||
// <link rel="alternate" href="http://vimeo.com/api/oembed.xml?url=http%3A%2F%2Fvimeo.com%2F23608259" type="text/xml+oembed">
|
||||
|
||||
var source = new WebClient().DownloadString(url);
|
||||
|
||||
// seek type="text/xml+oembed"
|
||||
var oembedSignature = source.IndexOf("type=\"text/xml+oembed\"", StringComparison.OrdinalIgnoreCase);
|
||||
if (oembedSignature != -1) {
|
||||
var tagStart = source.Substring(0, oembedSignature).LastIndexOf('<');
|
||||
var tagEnd = source.IndexOf('>', oembedSignature);
|
||||
var tag = source.Substring(tagStart, tagEnd - tagStart);
|
||||
var matches = new Regex("href=\"([^\"]+)\"").Matches(tag);
|
||||
if (matches.Count > 0) {
|
||||
var href = matches[0].Groups[1].Value;
|
||||
try {
|
||||
var content = new WebClient().DownloadString(href);
|
||||
viewModel.Content = XDocument.Parse(content);
|
||||
}
|
||||
catch {
|
||||
// bubble exception
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception e) {
|
||||
return View(viewModel);
|
||||
}
|
||||
|
||||
return View(viewModel);
|
||||
}
|
||||
|
||||
[HttpPost, ValidateInput(false)]
|
||||
public ActionResult MediaPost(int id, string url, string document) {
|
||||
var termPart = _taxonomyService.GetTerm(id);
|
||||
|
||||
if (termPart == null) {
|
||||
return HttpNotFound();
|
||||
}
|
||||
|
||||
var content = XDocument.Parse(document);
|
||||
var oembed = content.Root;
|
||||
|
||||
var part = Services.ContentManager.New<MediaPart>("OEmbed");
|
||||
part.TermPart = _taxonomyService.GetTerm(id);
|
||||
|
||||
part.Resource = url;
|
||||
part.MimeType = "text/html";
|
||||
part.Title = oembed.Element("title").Value;
|
||||
if (oembed.Element("description") != null) {
|
||||
part.Caption = oembed.Element("description").Value;
|
||||
}
|
||||
var oembedPart = part.As<OEmbedPart>();
|
||||
|
||||
foreach (var element in oembed.Elements()) {
|
||||
oembedPart[element.Name.LocalName] = element.Value;
|
||||
}
|
||||
|
||||
|
||||
Services.ContentManager.Create(oembedPart);
|
||||
|
||||
var viewModel = new OEmbedViewModel {
|
||||
Id = id
|
||||
};
|
||||
|
||||
return View("Index", viewModel);
|
||||
}
|
||||
}
|
||||
}
|
@@ -10,7 +10,7 @@ namespace Orchard.MediaLibrary.Drivers {
|
||||
ContentShape("Parts_Image_Summary", () => shapeHelper.Parts_Image_Summary()),
|
||||
ContentShape("Parts_Image", () => shapeHelper.Parts_Image()),
|
||||
ContentShape("Parts_Image_SummaryAdmin", () => shapeHelper.Parts_Image_SummaryAdmin())
|
||||
);
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,15 @@
|
||||
using Orchard.ContentManagement.Drivers;
|
||||
using Orchard.MediaLibrary.Models;
|
||||
|
||||
namespace Orchard.MediaLibrary.Drivers {
|
||||
public class OEmbedPartDriver : ContentPartDriver<OEmbedPart> {
|
||||
protected override DriverResult Display(OEmbedPart part, string displayType, dynamic shapeHelper) {
|
||||
return Combined(
|
||||
ContentShape("Parts_OEmbed_Metadata", () => shapeHelper.Parts_OEmbed_Metadata()),
|
||||
ContentShape("Parts_OEmbed_Summary", () => shapeHelper.Parts_OEmbed_Summary()),
|
||||
ContentShape("Parts_OEmbed_SummaryAdmin", () => shapeHelper.Parts_OEmbed_SummaryAdmin()),
|
||||
ContentShape("Parts_OEmbed", () => shapeHelper.Parts_OEmbed())
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
@@ -67,5 +67,19 @@ namespace Orchard.MediaLibrary {
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
public int UpdateFrom1() {
|
||||
|
||||
ContentDefinitionManager.AlterTypeDefinition("OEmbed", td => td
|
||||
.DisplayedAs("External Media")
|
||||
.WithSetting("Stereotype", "Media")
|
||||
.WithPart("CommonPart")
|
||||
.WithPart("MediaPart")
|
||||
.WithPart("OEmbedPart")
|
||||
.WithPart("TitlePart")
|
||||
);
|
||||
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,13 @@
|
||||
using Orchard.ContentManagement;
|
||||
using Orchard.ContentManagement.FieldStorage.InfosetStorage;
|
||||
|
||||
namespace Orchard.MediaLibrary.Models {
|
||||
public class OEmbedPart : ContentPart {
|
||||
|
||||
public string this[string index] {
|
||||
get { return this.As<InfosetPart>().Get("OEmbedPart", index, null); }
|
||||
set { this.As<InfosetPart>().Set("OEmbedPart", index, null, value); }
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@@ -71,6 +71,8 @@
|
||||
<ItemGroup>
|
||||
<Content Include="Scripts\history.js" />
|
||||
<Content Include="Scripts\knockout-2.2.1.js" />
|
||||
<Content Include="Styles\menu.oembed-mediaproviders.css" />
|
||||
<Content Include="Styles\orchard-oembed-admin.css" />
|
||||
<Content Include="Styles\menu.websearch-mediaproviders.css" />
|
||||
<Content Include="Styles\menu.clientstorage-mediaproviders.css" />
|
||||
<Content Include="Styles\dialog-mode.css" />
|
||||
@@ -112,9 +114,11 @@
|
||||
<Compile Include="AdminMenu.cs" />
|
||||
<Compile Include="Controllers\AdminController.cs" />
|
||||
<Compile Include="Controllers\ClientStorageController.cs" />
|
||||
<Compile Include="Controllers\OEmbedController.cs" />
|
||||
<Compile Include="Controllers\FolderController.cs" />
|
||||
<Compile Include="Controllers\WebSearchController.cs" />
|
||||
<Compile Include="Drivers\AudioPartDriver.cs" />
|
||||
<Compile Include="Drivers\OEmbedPartDriver.cs" />
|
||||
<Compile Include="Drivers\MediaLibraryPickerFieldDriver.cs" />
|
||||
<Compile Include="Drivers\DocumentPartDriver.cs" />
|
||||
<Compile Include="Drivers\VideoPartDriver.cs" />
|
||||
@@ -132,14 +136,16 @@
|
||||
<Compile Include="Drivers\MediaPartDriver.cs" />
|
||||
<Compile Include="Migrations.cs" />
|
||||
<Compile Include="Models\AudioPart.cs" />
|
||||
<Compile Include="Models\ImagePart.cs" />
|
||||
<Compile Include="Models\DocumentPart.cs" />
|
||||
<Compile Include="Models\VideoPart.cs" />
|
||||
<Compile Include="Models\ImagePart.cs" />
|
||||
<Compile Include="Models\OEmbedPart.cs" />
|
||||
<Compile Include="Models\MediaFolder.cs" />
|
||||
<Compile Include="Models\MediaPart.cs" />
|
||||
<Compile Include="Models\MediaPartRecord.cs" />
|
||||
<Compile Include="Permissions.cs" />
|
||||
<Compile Include="Providers\ClientStorage\ClientStorageMenu.cs" />
|
||||
<Compile Include="Providers\ClientStorageMenu.cs" />
|
||||
<Compile Include="Providers\OEmbedMenu.cs" />
|
||||
<Compile Include="Providers\WebSearchMenu.cs" />
|
||||
<Compile Include="ResourceManifest.cs" />
|
||||
<Compile Include="Services\IMediaLibraryService.cs" />
|
||||
@@ -153,6 +159,7 @@
|
||||
<Compile Include="ViewModels\MediaManagerFolderEditViewModel.cs" />
|
||||
<Compile Include="ViewModels\MediaManagerImportViewModel.cs" />
|
||||
<Compile Include="ViewModels\MediaManagerIndexViewModel.cs" />
|
||||
<Compile Include="ViewModels\OEmbedViewModel.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Views\Admin\Index.cshtml" />
|
||||
@@ -276,6 +283,24 @@
|
||||
<ItemGroup>
|
||||
<Content Include="Views\Parts\Video.cshtml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Views\OEmbed\Index.cshtml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Views\Parts\OEmbed.cshtml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Views\Parts\OEmbed.Metadata.cshtml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Views\Parts\OEmbed.Summary.cshtml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Views\Parts\OEmbed.SummaryAdmin.cshtml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Views\Media-OEmbed.Thumbnail.cshtml" />
|
||||
</ItemGroup>
|
||||
<PropertyGroup>
|
||||
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
|
||||
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
|
||||
|
@@ -80,6 +80,20 @@
|
||||
<Place Fields_MediaLibraryPicker_SummaryAdmin="Content:after"/>
|
||||
</Match>
|
||||
|
||||
|
||||
|
||||
<!-- OEmbedPart -->
|
||||
<Match DisplayType="Summary">
|
||||
<Place Parts_OEmbed_Summary="Content:5" />
|
||||
</Match>
|
||||
|
||||
<Match DisplayType="SummaryAdmin">
|
||||
<Place Parts_OEmbed_Metadata="Meta:4"
|
||||
Parts_OEmbed_SummaryAdmin="Header"
|
||||
/>
|
||||
</Match>
|
||||
|
||||
<Match DisplayType="Detail">
|
||||
<Place Parts_OEmbed="Content:5" />
|
||||
</Match>
|
||||
|
||||
</Placement>
|
||||
|
@@ -1,11 +1,11 @@
|
||||
using Orchard.Localization;
|
||||
using Orchard.UI.Navigation;
|
||||
|
||||
namespace Orchard.MediaLibrary.Providers.ClientStorage {
|
||||
public class NavigationProvider : INavigationProvider {
|
||||
namespace Orchard.MediaLibrary.Providers {
|
||||
public class ClientStorageMenu : INavigationProvider {
|
||||
public Localizer T { get; set; }
|
||||
|
||||
public NavigationProvider() {
|
||||
public ClientStorageMenu() {
|
||||
T = NullLocalizer.Instance;
|
||||
}
|
||||
|
@@ -0,0 +1,21 @@
|
||||
using Orchard.Localization;
|
||||
using Orchard.UI.Navigation;
|
||||
|
||||
namespace Orchard.MediaLibrary.Providers {
|
||||
public class OEmbedMenu : INavigationProvider {
|
||||
public Localizer T { get; set; }
|
||||
|
||||
public OEmbedMenu() {
|
||||
T = NullLocalizer.Instance;
|
||||
}
|
||||
|
||||
public string MenuName { get { return "mediaproviders"; } }
|
||||
|
||||
public void GetNavigation(NavigationBuilder builder) {
|
||||
builder.AddImageSet("oembed")
|
||||
.Add(T("Media Url"), "10",
|
||||
menu => menu.Action("Index", "OEmbed", new { area = "Orchard.MediaLibrary" })
|
||||
.Permission(Permissions.ManageMediaContent));
|
||||
}
|
||||
}
|
||||
}
|
@@ -13,7 +13,7 @@ namespace Orchard.MediaLibrary.Providers {
|
||||
|
||||
public void GetNavigation(NavigationBuilder builder) {
|
||||
builder.AddImageSet("websearch")
|
||||
.Add(T("Web Search"), "5",
|
||||
.Add(T("Web Search"), "7",
|
||||
menu => menu.Action("Index", "WebSearch", new { area = "Orchard.MediaLibrary" })
|
||||
.Permission(Permissions.ManageMediaContent));
|
||||
}
|
||||
|
@@ -0,0 +1,3 @@
|
||||
.navicon-media-url {
|
||||
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAPCAYAAAACsSQRAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAQpJREFUOE+dk7EKgzAQQDXSvfRHOvgDbgU3v8NPcHVxdfUH6uziLri6OAl+QycnkWvuyIUkxLZUeJjTu5e7iAEA+AgdIie28q3gX7wPDcxdfZ3QmgMfou97iOMY2raFfd+DLMsgSRLYto1FHyVh0zQkqOua7mVZgiHReXg3C4njOERRFJS8riukaQrLspAAZV8lsuU7Jud5DtM0UREzDAOwXEqeSnDBOi2Y55mSq6oCPgsXPBsecxxHWQbCkmChmXQGdtl1HeXKyzvOlWc/Q41zUwK7E4Q/Ixeo3R6yy5cj4RrdCS0QKREeCY16IiGsQEqiHyV6Y8SSSPAlgj8cg3PT7ApLgFjBf0DwBrFhrWGsTyEzAAAAAElFTkSuQmCC');
|
||||
}
|
@@ -113,7 +113,8 @@
|
||||
#media-library-main-list {
|
||||
width: auto;
|
||||
height: 100%;
|
||||
padding-left: 10px;
|
||||
padding-left: 3px;
|
||||
padding-top: 3px;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
@@ -149,6 +150,7 @@
|
||||
background: #fafafa;
|
||||
color: grey;
|
||||
border-left: 1px solid #e0e0e0;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
#media-library-main-editor em {
|
||||
@@ -163,6 +165,9 @@
|
||||
|
||||
#media-library-main-editor footer, #media-library-main-editor .properties {
|
||||
margin-top: 10px;
|
||||
overflow: hidden;
|
||||
-ms-word-break: break-all;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
#media-library-main-selection {
|
||||
@@ -170,6 +175,10 @@
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
#media-library-main-editor .properties span {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
#media-library-main-selection li {
|
||||
float: left;
|
||||
margin: 0 3px 3px 0;
|
||||
@@ -230,6 +239,17 @@
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
|
||||
.media-thumbnail-o-embed {
|
||||
background-repeat: no-repeat;
|
||||
-moz-background-size: cover;
|
||||
-o-background-size: cover;
|
||||
-webkit-background-size: cover;
|
||||
background-size: cover;
|
||||
background-image: none;
|
||||
box-sizing: inherit;
|
||||
}
|
||||
|
||||
.media-thumbnail-image {
|
||||
background-repeat: no-repeat;
|
||||
-moz-background-size: cover;
|
||||
|
@@ -0,0 +1,28 @@
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
overflow: hidden;
|
||||
height: 100%;
|
||||
max-height: 100%;
|
||||
}
|
||||
|
||||
#oembed-main {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
padding: 5px;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
#query {
|
||||
background-position: right center;
|
||||
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAARCAIAAABbzbuTAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAKdJREFUOE+lkcEJAyEQRe0pRy+evFuHJViBNdiPFXj2agULooiZzbjGuIYgeSALf+aps5K6yR9CKUUp9biQUqaUWm2gCc651viJtRYbOqcQQuCcQ1lrjSlgjIGEUuq9b9GLU8Da2I0sc4JXv+8E4MnTMCTnLIRgjB3H0bKLZWn/BFh7M8Da/kvAt3cA5hnad/XSMUZMRuctLOm79NF/CAA6G8LEplDrE2p/mfIGi8fEAAAAAElFTkSuQmCC');
|
||||
background-repeat: no-repeat;
|
||||
padding-right: 20px;
|
||||
box-sizing: border-box;
|
||||
margin-bottom: 10px;
|
||||
|
||||
}
|
@@ -0,0 +1,10 @@
|
||||
using System.Xml.Linq;
|
||||
|
||||
namespace Orchard.MediaLibrary.ViewModels {
|
||||
public class OEmbedViewModel {
|
||||
public int Id { get; set; }
|
||||
public string Url { get; set; }
|
||||
public XDocument Content { get; set; }
|
||||
public bool Success { get; set; }
|
||||
}
|
||||
}
|
@@ -394,9 +394,10 @@
|
||||
|
||||
},
|
||||
cursor: 'move',
|
||||
distance: 10,
|
||||
distance: 10,
|
||||
create: function() {
|
||||
$(this).draggable("option", "cursorAt", { left: $(this).width() / 2, top: $(this).height() / 2 });
|
||||
// position the handler a little left to the center to let the number of selected items to appear
|
||||
$(this).draggable("option", "cursorAt", { left: $(this).width() / 2 - 20, top: $(this).height() / 2 });
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@@ -9,4 +9,4 @@
|
||||
var document = contentItem.As<DocumentPart>();
|
||||
}
|
||||
|
||||
<div class="media-thumbnail media-thumbnail-@contentItem.ContentType.HtmlClassify() mime-type-@media.MimeType.HtmlClassify()">
|
||||
<div class="media-thumbnail media-thumbnail-@contentItem.ContentType.HtmlClassify() mime-type-@media.MimeType.HtmlClassify()"></div>
|
||||
|
@@ -0,0 +1,16 @@
|
||||
@using Orchard.ContentManagement
|
||||
@using Orchard.MediaLibrary.Models
|
||||
@using Orchard.Utility.Extensions
|
||||
@model dynamic
|
||||
|
||||
@{
|
||||
ContentItem contentItem = Model.ContentItem;
|
||||
var media = contentItem.As<MediaPart>();
|
||||
var oembed = contentItem.As<OEmbedPart>();
|
||||
}
|
||||
|
||||
@if (!String.IsNullOrEmpty(oembed["thumbnail_url"])) {
|
||||
<div class="media-thumbnail media-thumbnail-@contentItem.ContentType.HtmlClassify() mime-type-@media.MimeType.HtmlClassify()">
|
||||
<img src="@Display.ResizeMediaUrl(Width: 200, Height: 200, Mode: "crop", Alignment: "middlecenter", Path: oembed["thumbnail_url"])" >
|
||||
</div>
|
||||
}
|
@@ -1,5 +1,6 @@
|
||||
@using Orchard.ContentManagement
|
||||
@using Orchard.MediaLibrary.Models
|
||||
@using Orchard.Utility.Extensions
|
||||
@model dynamic
|
||||
|
||||
@{
|
||||
@@ -7,4 +8,4 @@
|
||||
var media = contentItem.As<MediaPart>();
|
||||
}
|
||||
|
||||
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADsAAAA3CAIAAAA9haWfAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAkhJREFUaEPtmMGNAjEMRbenPXLhxJ06KIEKqIEK6IAKqIAz16mACwixkRKh2ZnY/9txkFbLO09mHo5jm3w9/xof4/78b+P7/b5er78Flsvl9XotjzYQYHw8HosUzeFwKIvtNBnv9/ui4GK325UXWXAaO+IqYY232VhPVh+mFLcZn8/n8pEOnE6n8hkVg3FgJkgwGcIav0E3A6UpYz4ZFovF5XIpy0YMw7BarcpDCD09sDH5MfLIM3sl/ewMMH48HtvttrxJwNrMmGqz2Wxut1tZ8BtgDEOivFqBCYS0aZoxzIeWUQFGWsoNzVhvwnq2McCIVNu4aAxj4JsKJuhBqe6haAwzmGxROrBuzrO5bgxPhp4S4+X6kzAx5ie7btxy5qprpRRynL+6MdwsyVjaHOl5pjZP0q9uDEd1aa+lzZFiDDczMVlbMWbKuwmlyzATy2R5d2N93mD+d2FjJrcYYMEmR8LJGehirFSSF/xXuhsz3duUeN2N4aBsfT82bjl5MMCOK46+tULJYP6v1wRsnHBEIiMZt0QBd5CEOx7WXshAdemWD8TCTkKxba+FeYevGyd8VyrhWcFO9AlfVZZOXuDbROOEo2LEGlcnE83YsZWBxlKCacYJazYHGntuWBLWohFlPC8RL4BxwpQbIcb6cIKNE3wLDKlurbexGV95dgCHVdY48QZpqJswGCfcExIDeS1mM074eoGOdF6rmI0zgRnCZMIYp3HGPfhn4PVAlSbjjCPe1riOCTB+oae4KVkVIo3fw8e4N8/nD37XlV+UarLaAAAAAElFTkSuQmCC"/>
|
||||
<div class="media-thumbnail media-thumbnail-@contentItem.ContentType.HtmlClassify() mime-type-@media.MimeType.HtmlClassify()"></div>
|
@@ -0,0 +1,76 @@
|
||||
@model Orchard.MediaLibrary.ViewModels.OEmbedViewModel
|
||||
|
||||
@using System.Text
|
||||
@using System.Xml;
|
||||
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
@{
|
||||
Script.Require("jQuery");
|
||||
Script.Require("jQueryUI");
|
||||
|
||||
Style.Include("orchard-medialibrary-admin.css");
|
||||
Style.Include("orchard-mediaproviders-admin.css");
|
||||
Style.Include("orchard-oembed-admin.css");
|
||||
|
||||
}
|
||||
|
||||
@Display.Metas()
|
||||
@Display.HeadScripts()
|
||||
@Display.HeadLinks()
|
||||
@Display.StyleSheetLinks()
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id="oembed-main">
|
||||
<div>
|
||||
@using (Html.BeginFormAntiForgeryPost()) {
|
||||
<input id="query" name="url" type="text" class="large" autofocus placeholder="@T("media url")" value="@Model.Url"/>
|
||||
}
|
||||
</div>
|
||||
|
||||
@if (Model.Content != null) {
|
||||
var oembed = Model.Content.Root;
|
||||
var type = oembed.Element("type").Value;
|
||||
|
||||
switch (oembed.Element("type").Value) {
|
||||
case "photo":
|
||||
<img src="@oembed.Element("url").Value" width="@oembed.Element("width").Value" height="@oembed.Element("height").Value" />
|
||||
break;
|
||||
case "video":
|
||||
@Html.Raw(oembed.Element("html").Value)
|
||||
break;
|
||||
case "link":
|
||||
<a href="@oembed.Element("url").Value">oembed.Element("title").Value</a>
|
||||
break;
|
||||
case "rich":
|
||||
@Html.Raw(oembed.Element("html").Value)
|
||||
break;
|
||||
}
|
||||
|
||||
using (Html.BeginFormAntiForgeryPost(Url.Action("MediaPost"))) {
|
||||
@Html.Hidden("url", Model.Url)
|
||||
@Html.Hidden("id", Model.Id)
|
||||
@Html.Hidden("document", Model.Content.ToString())
|
||||
|
||||
<button type="submit">@("Import")</button>
|
||||
}
|
||||
}
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
@using (Script.Foot()) {
|
||||
<script type="text/javascript">
|
||||
//<![CDATA[
|
||||
$(function () {
|
||||
|
||||
})
|
||||
//]]>
|
||||
</script>
|
||||
}
|
||||
|
||||
@Display.FootScripts()
|
||||
</body>
|
||||
</html>
|
@@ -0,0 +1,11 @@
|
||||
@using Orchard.ContentManagement
|
||||
@using Orchard.MediaLibrary.Models
|
||||
@using Orchard.Utility.Extensions
|
||||
@{
|
||||
OEmbedPart oembedPart = Model.ContentPart;
|
||||
}
|
||||
|
||||
<div class="o-embed-source">
|
||||
<em>@T("Source:")</em>
|
||||
<span><a href="@oembedPart["provider_url"]" target="_blank">@oembedPart["provider_name"]</a></span>
|
||||
</div>
|
@@ -0,0 +1,10 @@
|
||||
@using Orchard.ContentManagement
|
||||
@using Orchard.MediaLibrary.Models
|
||||
@{
|
||||
OEmbedPart oembedPart = Model.ContentPart;
|
||||
var mediaPart = ((ContentItem)Model.ContentItem).As<MediaPart>();
|
||||
}
|
||||
|
||||
<a href="@mediaPart.Resource" target="_blank" class="button">
|
||||
<span>@T("Preview")</span>
|
||||
</a>
|
@@ -0,0 +1,10 @@
|
||||
@using Orchard.ContentManagement
|
||||
@using Orchard.MediaLibrary.Models
|
||||
@{
|
||||
OEmbedPart oEmbedPart = Model.ContentPart;
|
||||
var mediaPart = ((ContentItem)Model.ContentItem).As<MediaPart>();
|
||||
}
|
||||
|
||||
<a href="@mediaPart.Resource" target="_blank" class="button">
|
||||
<span>@T("Preview")</span>
|
||||
</a>
|
@@ -0,0 +1,21 @@
|
||||
@using Orchard.ContentManagement
|
||||
@using Orchard.MediaLibrary.Models
|
||||
@{
|
||||
OEmbedPart oembedPart = Model.ContentPart;
|
||||
var mediaPart = ((ContentItem)Model.ContentItem).As<MediaPart>();
|
||||
}
|
||||
|
||||
@switch (oembedPart["type"]) {
|
||||
case "photo" :
|
||||
<img src="@oembedPart["url"]" width="@oembedPart["width"]" height="@oembedPart["height"]" />
|
||||
break;
|
||||
case "video":
|
||||
@Html.Raw(oembedPart["html"])
|
||||
break;
|
||||
case "link":
|
||||
<a href="@oembedPart["url"]">@Html.ItemDisplayText(mediaPart)</a>
|
||||
break;
|
||||
case "rich":
|
||||
@Html.Raw(oembedPart["html"])
|
||||
break;
|
||||
}
|
@@ -33,7 +33,8 @@
|
||||
<add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
|
||||
<add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
|
||||
<add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
|
||||
<add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
|
||||
<add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
|
||||
<add assembly="System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
</assemblies>
|
||||
</compilation>
|
||||
</system.web>
|
||||
|
@@ -4,7 +4,6 @@ namespace Orchard.MediaProcessing.Descriptors.Filter {
|
||||
public class FilterContext {
|
||||
public dynamic State { get; set; }
|
||||
public Stream Media { get; set; }
|
||||
public string Format { get; set; }
|
||||
public string FilePath { get; set; }
|
||||
|
||||
/// <summary>
|
||||
|
@@ -131,7 +131,7 @@ namespace Orchard.MediaProcessing.Shapes {
|
||||
|
||||
using (var image = GetImage(Path)) {
|
||||
|
||||
var filterContext = new FilterContext { Media = image, Format = new FileInfo(Path).Extension, FilePath = storageProvider.Value.Combine(Profile, CreateDefaultFileName(Path)) };
|
||||
var filterContext = new FilterContext { Media = image, FilePath = storageProvider.Value.Combine(Profile, CreateDefaultFileName(Path)) };
|
||||
|
||||
var tokens = new Dictionary<string, object>();
|
||||
// if a content item is provided, use it while tokenizing
|
||||
|
Reference in New Issue
Block a user