diff --git a/src/Orchard.Web/Modules/Markdown/ResourceManifest.cs b/src/Orchard.Web/Modules/Markdown/ResourceManifest.cs index 03f0542f2..a966e1180 100644 --- a/src/Orchard.Web/Modules/Markdown/ResourceManifest.cs +++ b/src/Orchard.Web/Modules/Markdown/ResourceManifest.cs @@ -11,6 +11,9 @@ namespace Markdown { manifest.DefineScript("OrchardMarkdown").SetUrl("orchard-markdown.min.js", "orchard-markdown.js").SetDependencies("Resizer", "Markdown_Editor"); manifest.DefineStyle("OrchardMarkdown").SetUrl("admin-markdown.css"); + + manifest.DefineScript("OrchardMarkdown-MediaPicker").SetUrl("orchard-markdown-media-picker.min.js", "orchard-markdown-media-picker.js"); + manifest.DefineScript("OrchardMarkdown-MediaLibrary").SetUrl("orchard-markdown-media-library.min.js", "orchard-markdown-media-library.js"); } } } diff --git a/src/Orchard.Web/Modules/Markdown/Scripts/orchard-markdown-media-library.js b/src/Orchard.Web/Modules/Markdown/Scripts/orchard-markdown-media-library.js new file mode 100644 index 000000000..a5255e97c --- /dev/null +++ b/src/Orchard.Web/Modules/Markdown/Scripts/orchard-markdown-media-library.js @@ -0,0 +1,75 @@ +(function() { + var converter = Markdown.getSanitizingConverter(); + var editors = $('.wmd-input'); + + editors.each(function() { + + var idPostfix = $(this).attr('id').substr('wmd-input'.length); + + var editor = new Markdown.Editor(converter, idPostfix, { + handler: function() { window.open("http://daringfireball.net/projects/markdown/syntax"); } + }); + + editor.hooks.set("insertImageDialog", function(callback) { + // see if there's an image selected that they intend on editing + var wmd = $('#wmd-input' + idPostfix); + + var editImage, content = wmd.selection ? wmd.selection.createRange().text : null; + var adminIndex = location.href.toLowerCase().indexOf("/admin/"); + if (adminIndex === -1) return; + var url = location.href.substr(0, adminIndex) + "/Admin/Orchard.MediaLibrary?dialog=true"; + $.colorbox({ + href: url, + iframe: true, + reposition: true, + width: "90%", + height: "90%", + onLoad: function () { + // hide the scrollbars from the main window + $('html, body').css('overflow', 'hidden'); + }, + onClosed: function () { + $('html, body').css('overflow', ''); + + var selectedData = $.colorbox.selectedData; + + if (selectedData == null) // Dialog cancelled, do nothing + return; + + var newContent = ''; + for (var i = 0; i < selectedData.length; i++) { + var renderMedia = location.href.substr(0, adminIndex) + "/Admin/Orchard.MediaLibrary/MediaItem/" + selectedData[i].id + "?displayType=Raw"; + $.ajax({ + async: false, + type: 'GET', + url: renderMedia, + success: function (data) { + newContent += data; + } + }); + } + + var result = $.parseHTML(newContent); + var img = $(result).filter('img'); + // if this is an image, use the callback which will format it in markdown + if (img.length > 0 && img.attr('src')) { + callback(img.attr('src')); + } + + // otherwise, insert the raw HTML + else { + if (wmd.selection) { + wmd.selection.replace('.*', newContent); + } else { + wmd.text(newContent); + } + callback(); + } + } + }); + return true; + }); + + editor.run(); + }); +})(); diff --git a/src/Orchard.Web/Modules/Markdown/Scripts/orchard-markdown-media-library.min.js b/src/Orchard.Web/Modules/Markdown/Scripts/orchard-markdown-media-library.min.js new file mode 100644 index 000000000..98b7de205 --- /dev/null +++ b/src/Orchard.Web/Modules/Markdown/Scripts/orchard-markdown-media-library.min.js @@ -0,0 +1,2 @@ +(function(){var n=Markdown.getSanitizingConverter(),t=$(".wmd-input");t.each(function(){var t=$(this).attr("id").substr("wmd-input".length),i=new Markdown.Editor(n,t,{handler:function(){window.open("http://daringfireball.net/projects/markdown/syntax")}});i.hooks.set("insertImageDialog",function(n){var i=$("#wmd-input"+t),f=i.selection?i.selection.createRange().text:null,r=location.href.toLowerCase().indexOf("/admin/"),u;if(r!==-1)return u=location.href.substr(0,r)+"/Admin/Orchard.MediaLibrary?dialog=true",$.colorbox({href:u,iframe:!0,reposition:!0,width:"90%",height:"90%",onLoad:function(){$("html, body").css("overflow","hidden")},onClosed:function(){var u,t,f,o,s,e;if($("html, body").css("overflow",""),u=$.colorbox.selectedData,u!=null){for(t="",f=0;f0&&e.attr("src")?n(e.attr("src")):(i.selection?i.selection.replace(".*",t):i.text(t),n())}}}),!0}),i.run()})})(); +//@ sourceMappingURL=orchard-markdown-media-library.min.js.map \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Markdown/Scripts/orchard-markdown-media-library.min.js.map b/src/Orchard.Web/Modules/Markdown/Scripts/orchard-markdown-media-library.min.js.map new file mode 100644 index 000000000..343b77b5f --- /dev/null +++ b/src/Orchard.Web/Modules/Markdown/Scripts/orchard-markdown-media-library.min.js.map @@ -0,0 +1,8 @@ +{ +"version":3, +"file":"orchard-markdown-media-library.min.js", +"lineCount":1, +"mappings":"CAAC,QAAQ,CAAA,CAAG,CACR,IAAIA,EAAYC,QAAQC,uBAAuB,CAAA,EAC3CC,EAAUC,CAAC,CAAC,YAAD,CADkC,CAGjDD,CAAOE,KAAK,CAAC,QAAQ,CAAA,CAAG,CAEpB,IAAIC,EAAYF,CAAC,CAAC,IAAD,CAAMG,KAAK,CAAC,IAAD,CAAMC,OAAO,CAAC,WAAWC,OAAZ,EAErCC,EAAS,IAAIT,QAAQU,OAAO,CAACX,CAAS,CAAEM,CAAS,CAAE,CACnD,OAAO,CAAEM,QAAQ,CAAA,CAAG,CAAEC,MAAMC,KAAK,CAAC,oDAAD,CAAb,CAD+B,CAAvB,CAF6B,CAM7DJ,CAAMK,MAAMC,IAAI,CAAC,mBAAmB,CAAE,QAAQ,CAACC,CAAD,CAAW,CAErD,IAAIC,EAAMd,CAAC,CAAC,YAAa,CAAEE,CAAhB,EAEIa,EAAUD,CAAGE,UAAW,CAAEF,CAAGE,UAAUC,YAAY,CAAA,CAAEC,KAAM,CAAE,KACxEC,EAAaC,QAAQC,KAAKC,YAAY,CAAA,CAAEC,QAAQ,CAAC,SAAD,EAEhDC,CALiC,C,GAIjCL,CAAW,GAAI,G,OACfK,CAAI,CAAEJ,QAAQC,KAAKjB,OAAO,CAAC,CAAC,CAAEe,CAAJ,CAAgB,CAAE,yC,CAChDnB,CAACyB,SAAS,CAAC,CACP,IAAI,CAAED,CAAG,CACT,MAAM,CAAE,CAAA,CAAI,CACZ,UAAU,CAAE,CAAA,CAAI,CAChB,KAAK,CAAE,KAAK,CACZ,MAAM,CAAE,KAAK,CACb,MAAM,CAAEE,QAAS,CAAA,CAAG,CAEhB1B,CAAC,CAAC,YAAD,CAAc2B,IAAI,CAAC,UAAU,CAAE,QAAb,CAFH,CAGnB,CACD,QAAQ,CAAEC,QAAS,CAAA,CAAG,CAGlB,IAAIC,EAKAC,EACKC,EACDC,EAWJC,EACAC,CAnBsC,CAE1C,GAJAlC,CAAC,CAAC,YAAD,CAAc2B,IAAI,CAAC,UAAU,CAAE,EAAb,CAAgB,CAE/BE,CAAa,CAAE7B,CAACyB,SAASI,a,CAEzBA,CAAa,EAAG,KAChB,CAGJ,IADIC,CAAW,CAAE,E,CACRC,CAAE,CAAE,CAAC,CAAEA,CAAE,CAAEF,CAAYxB,OAAO,CAAE0B,CAAC,EAA1C,CACQC,CAAY,CAAEZ,QAAQC,KAAKjB,OAAO,CAAC,CAAC,CAAEe,CAAJ,CAAgB,CAAE,wCAAyC,CAAEU,CAAa,CAAAE,CAAA,CAAEI,GAAI,CAAE,kB,CACxHnC,CAACoC,KAAK,CAAC,CACH,KAAK,CAAE,CAAA,CAAK,CACZ,IAAI,CAAE,KAAK,CACX,GAAG,CAAEJ,CAAW,CAChB,OAAO,CAAEK,QAAS,CAACC,CAAD,CAAO,CACrBR,CAAW,EAAGQ,CADO,CAJtB,CAAD,CAQV,CAEIL,CAAO,CAAEjC,CAACuC,UAAU,CAACT,CAAD,C,CACpBI,CAAI,CAAElC,CAAC,CAACiC,CAAD,CAAQO,OAAO,CAAC,KAAD,C,CAEtBN,CAAG7B,OAAQ,CAAE,CAAE,EAAG6B,CAAG/B,KAAK,CAAC,KAAD,CAA9B,CACIU,CAAQ,CAACqB,CAAG/B,KAAK,CAAC,KAAD,CAAT,CADZ,EAMQW,CAAGE,UAAP,CACIF,CAAGE,UAAUyB,QAAQ,CAAC,IAAI,CAAEX,CAAP,CADzB,CAGIhB,CAAGI,KAAK,CAACY,CAAD,C,CAEZjB,CAAQ,CAAA,EA7BR,CANc,CAVf,CAAD,CAgDR,CACK,CAAA,CAzD8C,CAAzC,CA0Dd,CAEFP,CAAMoC,IAAI,CAAA,CApEU,CAAZ,CAJJ,EA0EV,CAAA,CAAE", +"sources":["orchard-markdown-media-library.js"], +"names":["converter","Markdown","getSanitizingConverter","editors","$","each","idPostfix","attr","substr","length","editor","Editor","handler","window","open","hooks","set","callback","wmd","content","selection","createRange","text","adminIndex","location","href","toLowerCase","indexOf","url","colorbox","onLoad","css","onClosed","selectedData","newContent","i","renderMedia","result","img","id","ajax","success","data","parseHTML","filter","replace","run"] +} diff --git a/src/Orchard.Web/Modules/Markdown/Scripts/orchard-markdown-media-picker.js b/src/Orchard.Web/Modules/Markdown/Scripts/orchard-markdown-media-picker.js new file mode 100644 index 000000000..84019bf85 --- /dev/null +++ b/src/Orchard.Web/Modules/Markdown/Scripts/orchard-markdown-media-picker.js @@ -0,0 +1,47 @@ +(function() { + var converter = Markdown.getSanitizingConverter(); + var editors = $('.wmd-input'); + + editors.each(function() { + + var idPostfix = $(this).attr('id').substr('wmd-input'.length); + + var editor = new Markdown.Editor(converter, idPostfix, { + handler: function() { window.open("http://daringfireball.net/projects/markdown/syntax"); } + }); + + editor.hooks.set("insertImageDialog", function(callback) { + // see if there's an image selected that they intend on editing + var wmd = $('#wmd-input' + idPostfix); + + var editImage, content = wmd.selection ? wmd.selection.createRange().text : null; + if (content) { + // replace with , so we can easily use jquery to get the 'src' without it + // being resolved by the browser (e.g. prevent '/foo.png' becoming 'http://localhost:12345/orchardlocal/foo.png'). + content = content.replace(/\ with , so we can easily use jquery to get the 'src' without it - // being resolved by the browser (e.g. prevent '/foo.png' becoming 'http://localhost:12345/orchardlocal/foo.png'). - content = content.replace(/\ 120) { diff --git a/src/Orchard.Web/Modules/Markdown/Scripts/orchard-markdown.min.js b/src/Orchard.Web/Modules/Markdown/Scripts/orchard-markdown.min.js index 5b07cf75f..abc0641d6 100644 --- a/src/Orchard.Web/Modules/Markdown/Scripts/orchard-markdown.min.js +++ b/src/Orchard.Web/Modules/Markdown/Scripts/orchard-markdown.min.js @@ -1,2 +1,2 @@ -(function(){var i=Markdown.getSanitizingConverter(),r=$(".wmd-input"),n,t;r.each(function(){var n=$(this).attr("id").substr("wmd-input".length),t=new Markdown.Editor(i,n,{handler:function(){window.open("http://daringfireball.net/projects/markdown/syntax")}});t.hooks.set("insertImageDialog",function(t){var r=$("#wmd-input"+n),f,u=r.selection?r.selection.createRange().text:null,i;return u&&(u=u.replace(/\120&&n.height(t-20)},t($(n),400),$(".has-grip").TextAreaResizer(function(i,r){r.find(n).each(function(){t($(this),i-18)})},{resizeWrapper:!0})})(); +(function(){var n=".wmd-input,.wmd-preview",t=function(n,t){t>120&&n.height(t-20)};t($(n),400),$(".has-grip").TextAreaResizer(function(i,r){r.find(n).each(function(){t($(this),i-18)})},{resizeWrapper:!0})})(); //@ sourceMappingURL=orchard-markdown.min.js.map \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Markdown/Scripts/orchard-markdown.min.js.map b/src/Orchard.Web/Modules/Markdown/Scripts/orchard-markdown.min.js.map index cac89c4b3..0dad72bcd 100644 --- a/src/Orchard.Web/Modules/Markdown/Scripts/orchard-markdown.min.js.map +++ b/src/Orchard.Web/Modules/Markdown/Scripts/orchard-markdown.min.js.map @@ -2,7 +2,7 @@ "version":3, "file":"orchard-markdown.min.js", "lineCount":1, -"mappings":"CAAC,QAAQ,CAAA,CAAG,CACR,IACIA,EAAYC,QAAQC,uBAAuB,CAAA,EAE3CC,EAAUC,CAAC,CAAC,YAAD,EA6CXC,EACAC,CAjD4B,CAKhCH,CAAOI,KAAK,CAAC,QAAQ,CAAA,CAAG,CAEpB,IAAIC,EAAYJ,CAAC,CAAC,IAAD,CAAMK,KAAK,CAAC,IAAD,CAAMC,OAAO,CAAC,WAAWC,OAAZ,EAErCC,EAAS,IAAIX,QAAQY,OAAO,CAACb,CAAS,CAAEQ,CAAS,CAAE,CACnD,OAAO,CAAEM,QAAQ,CAAA,CAAG,CAAEC,MAAMC,KAAK,CAAC,oDAAD,CAAb,CAD+B,CAAvB,CAF6B,CAM7DJ,CAAMK,MAAMC,IAAI,CAAC,mBAAmB,CAAE,QAAQ,CAACC,CAAD,CAAW,CAErD,IAAIC,EAAMhB,CAAC,CAAC,YAAa,CAAEI,CAAhB,EAEPa,EAAWC,EAAUF,CAAGG,UAAW,CAAEH,CAAGG,UAAUC,YAAY,CAAA,CAAEC,KAAM,CAAE,KAKpEC,CAP6B,CA2BrC,OAxBIJ,C,GAGAA,CAAQ,CAAEA,CAAOK,QAAQ,CAAC,SAAS,CAAE,UAAZ,CAAuB,CAC5CD,CAAS,CAAEtB,CAAC,CAACkB,CAAD,CAASM,OAAO,CAAC,SAAD,C,CAC5BF,CAAQf,O,GACRU,CAAU,CAAE,CACR,GAAG,CAAEK,CAAQjB,KAAK,CAAC,KAAD,CAAO,CACzB,OAAO,CAAEiB,CAAQjB,KAAK,CAAC,OAAD,CAAS,CAC/B,KAAK,CAAEiB,CAAQG,IAAI,CAAC,SAAD,CAAW,CAC9B,GAAG,CAAEH,CAAQjB,KAAK,CAAC,KAAD,CAAO,CACzB,KAAK,CAAEiB,CAAQjB,KAAK,CAAC,OAAD,CAAS,CAC7B,MAAM,CAAEiB,CAAQjB,KAAK,CAAC,QAAD,CAAU,CAC/B,KAAK,CAAEiB,CAAQjB,KAAK,CAAC,OAAD,CAPZ,GAQX,CAGTW,CAAGU,QAAQ,CAAC,8BAA8B,CAAE,CACxC,GAAG,CAAET,CAAS,CACd,eAAe,CAAED,CAAGW,KAAK,CAAC,wBAAD,CAA0B,CACnD,QAAQ,CAAEZ,QAAQ,CAACY,CAAD,CAAO,CACrBZ,CAAQ,CAACY,CAAIC,IAAIC,IAAT,CADa,CAHe,CAAjC,CAMT,CACK,CAAA,CA7B8C,CAAzC,CA8Bd,CAEFrB,CAAMsB,IAAI,CAAA,CAxCU,CAAZ,CAyCV,CAEE7B,CAAkB,CAAE,yB,CACpBC,CAAoB,CAAEA,QAAS,CAAC6B,CAAE,CAAEC,CAAL,CAAW,CAClCA,CAAK,CAAE,G,EACPD,CAAEE,OAAO,CAACD,CAAK,CAAE,EAAR,CAFyB,C,CAK9C9B,CAAmB,CAACF,CAAC,CAACC,CAAD,CAAmB,CAAE,GAAvB,CAA2B,CAE9CD,CAAC,CAAC,WAAD,CAAakC,gBAAgB,CAAC,QAAQ,CAACF,CAAI,CAAEG,CAAP,CAAiB,CACpDA,CAAQC,KAAK,CAACnC,CAAD,CAAmBE,KAAK,CAAC,QAAQ,CAAA,CAAG,CAAED,CAAmB,CAACF,CAAC,CAAC,IAAD,CAAM,CAAEgC,CAAK,CAAE,EAAjB,CAArB,CAAZ,CADe,CAEvD,CAAE,CACC,aAAa,CAAE,CAAA,CADhB,CAF2B,CAzDtB,EA8DV,CAAA,CAAE", +"mappings":"CAAC,QAAQ,CAAA,CAAG,CACR,IAAIA,EAAoB,0BACpBC,EAAsBA,QAAS,CAACC,CAAE,CAAEC,CAAL,CAAW,CAClCA,CAAK,CAAE,G,EACPD,CAAEE,OAAO,CAACD,CAAK,CAAE,EAAR,CAFyB,CAIzC,CACLF,CAAmB,CAACI,CAAC,CAACL,CAAD,CAAmB,CAAE,GAAvB,CAA2B,CAE9CK,CAAC,CAAC,WAAD,CAAaC,gBAAgB,CAAC,QAAQ,CAACH,CAAI,CAAEI,CAAP,CAAiB,CACpDA,CAAQC,KAAK,CAACR,CAAD,CAAmBS,KAAK,CAAC,QAAQ,CAAA,CAAG,CAAER,CAAmB,CAACI,CAAC,CAAC,IAAD,CAAM,CAAEF,CAAK,CAAE,EAAjB,CAArB,CAAZ,CADe,CAEvD,CAAE,CACC,aAAa,CAAE,CAAA,CADhB,CAF2B,CATtB,EAcV,CAAA,CAAE", "sources":["orchard-markdown.js"], -"names":["converter","Markdown","getSanitizingConverter","editors","$","resizableSelector","resizeInnerElements","each","idPostfix","attr","substr","length","editor","Editor","handler","window","open","hooks","set","callback","wmd","editImage","content","selection","createRange","text","firstImg","replace","filter","css","trigger","data","img","src","run","el","size","height","TextAreaResizer","resizing","find"] +"names":["resizableSelector","resizeInnerElements","el","size","height","$","TextAreaResizer","resizing","find","each"] } diff --git a/src/Orchard.Web/Modules/Markdown/Styles/admin-markdown.css b/src/Orchard.Web/Modules/Markdown/Styles/admin-markdown.css index 3d0e45481..16d655ed9 100644 --- a/src/Orchard.Web/Modules/Markdown/Styles/admin-markdown.css +++ b/src/Orchard.Web/Modules/Markdown/Styles/admin-markdown.css @@ -45,6 +45,7 @@ display: table; position: relative; height: 400px; + width: 99%; } .wmd-innerbox { height: 100%; diff --git a/src/Orchard.Web/Modules/Markdown/Views/Body-Markdown.Editor.cshtml b/src/Orchard.Web/Modules/Markdown/Views/Body-Markdown.Editor.cshtml index 46ae286d2..41a0d7811 100644 --- a/src/Orchard.Web/Modules/Markdown/Views/Body-Markdown.Editor.cshtml +++ b/src/Orchard.Web/Modules/Markdown/Views/Body-Markdown.Editor.cshtml @@ -1,8 +1,25 @@ -@{ +@using Orchard.Environment.Descriptor.Models + +@{ Script.Require("OrchardMarkdown"); Style.Require("OrchardMarkdown"); - string idPostfix = @Html.FieldIdFor(m => m); + + string idPostfix = Html.FieldIdFor(m => m); + + var shellDescriptor = WorkContext.Resolve(); + var mediaLibraryEnabled = shellDescriptor.Features.Any(x => x.Name == "Orchard.MediaLibrary"); + + if (mediaLibraryEnabled) { + Script.Require("jQueryColorBox"); + Script.Require("OrchardMarkdown-MediaLibrary"); + Style.Require("jQueryColorBox"); + } + else { + Script.Require("OrchardMarkdown-MediaPicker"); + } + } +
diff --git a/src/Orchard.Web/Modules/TinyMce/Scripts/plugins/medialibrary/editor_plugin.js b/src/Orchard.Web/Modules/TinyMce/Scripts/plugins/medialibrary/editor_plugin.js index 6ee567500..a8e5e34f5 100644 --- a/src/Orchard.Web/Modules/TinyMce/Scripts/plugins/medialibrary/editor_plugin.js +++ b/src/Orchard.Web/Modules/TinyMce/Scripts/plugins/medialibrary/editor_plugin.js @@ -1,2 +1,2 @@ -(function(){tinymce.create("tinymce.plugins.Orchard.MediaPicker",{init:function(b,d){b.addCommand("mceMediaPicker",function(){b.focus();var c,a=b.selection.getContent();a&&(a=a.replace(/\