monologue-markdown 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/MIT-LICENSE +20 -0
- data/README.md +26 -0
- data/Rakefile +27 -0
- data/app/assets/images/monologue-markdown/epiceditor/edit.png +0 -0
- data/app/assets/images/monologue-markdown/epiceditor/fullscreen.png +0 -0
- data/app/assets/images/monologue-markdown/epiceditor/preview.png +0 -0
- data/app/assets/javascripts/monologue-markdown/application.js +14 -0
- data/app/assets/javascripts/monologue-markdown/epiceditor/epiceditor.min.js.erb +4 -0
- data/app/assets/javascripts/monologue-markdown/epiceditor_load.coffee.erb +58 -0
- data/app/assets/stylesheets/monologue-markdown/application.css +16 -0
- data/app/assets/stylesheets/monologue-markdown/epiceditor/themes/base/epiceditor.css +31 -0
- data/app/assets/stylesheets/monologue-markdown/epiceditor/themes/editor/epic-dark.css +13 -0
- data/app/assets/stylesheets/monologue-markdown/epiceditor/themes/editor/epic-light.css +12 -0
- data/app/assets/stylesheets/monologue-markdown/epiceditor/themes/preview/github.css +368 -0
- data/app/assets/stylesheets/monologue-markdown/epiceditor/themes/preview/preview-dark.css +121 -0
- data/app/models/monologue/posts_revision_decorator.rb +28 -0
- data/app/overrides/insert_epiceditor_in_admin.rb +4 -0
- data/app/overrides/insert_is_markdown_in_post_edit.rb +4 -0
- data/app/views/monologue-markdown/overrides/_epiceditor.html.erb +2 -0
- data/app/views/monologue-markdown/overrides/_is_markdown.html.erb +1 -0
- data/config/routes.rb +2 -0
- data/db/migrate/20120924111013_add_is_markown_to_posts_revision.rb +10 -0
- data/lib/monologue-markdown.rb +4 -0
- data/lib/monologue-markdown/engine.rb +29 -0
- data/lib/monologue-markdown/version.rb +3 -0
- data/lib/tasks/monologue-markdown_tasks.rake +4 -0
- metadata +236 -0
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright 2012 YOURNAME
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# Monologue: markdown edition
|
2
|
+
|
3
|
+
This is a simple extension that will change [Monologue](https://github.com/jipiboily/monologue)'s default editor to EpicEditor which will let you use Markdown instead of a WYSIWYG edit.
|
4
|
+
|
5
|
+
## Install on a brand new Monologue installation
|
6
|
+
|
7
|
+
This is simple, you just have to add this file to your `Gemfile` after Monologue:
|
8
|
+
|
9
|
+
gem "monologue-markdown", :git => "git@github.com:jipiboily/monologue-markdown.git"
|
10
|
+
|
11
|
+
Then run this:
|
12
|
+
|
13
|
+
bundle exec rake monologue_markdown:install:migrations
|
14
|
+
bundle exec rake db:migrate
|
15
|
+
|
16
|
+
|
17
|
+
## Install on an already existing Monologue installation
|
18
|
+
|
19
|
+
You do the same as for a new Monologue installation, but, keep in mind that only new posts will have EpicEditor enabled. All the posts that existed before will still be using the WYSIWYG editor.
|
20
|
+
|
21
|
+
|
22
|
+
## Notes
|
23
|
+
|
24
|
+
There are [Deface](https://github.com/railsdog/deface/) overrides with this project. You might want to (read: "should") turn it off on production. If you do, you can add a Capistrano task to precompile them or precompile them locally.
|
25
|
+
|
26
|
+
[Read more about this here.](https://github.com/railsdog/deface/#production--precompiling)
|
data/Rakefile
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
begin
|
3
|
+
require 'bundler/setup'
|
4
|
+
rescue LoadError
|
5
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
6
|
+
end
|
7
|
+
begin
|
8
|
+
require 'rdoc/task'
|
9
|
+
rescue LoadError
|
10
|
+
require 'rdoc/rdoc'
|
11
|
+
require 'rake/rdoctask'
|
12
|
+
RDoc::Task = Rake::RDocTask
|
13
|
+
end
|
14
|
+
|
15
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
16
|
+
rdoc.rdoc_dir = 'rdoc'
|
17
|
+
rdoc.title = 'MonologueMarkdown'
|
18
|
+
rdoc.options << '--line-numbers'
|
19
|
+
rdoc.rdoc_files.include('README.rdoc')
|
20
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
|
26
|
+
Bundler::GemHelper.install_tasks
|
27
|
+
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,14 @@
|
|
1
|
+
// This is a manifest file that'll be compiled into application.js, which will include all the files
|
2
|
+
// listed below.
|
3
|
+
//
|
4
|
+
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
|
5
|
+
// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
|
6
|
+
//
|
7
|
+
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
8
|
+
// the compiled file.
|
9
|
+
//
|
10
|
+
// WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
|
11
|
+
// GO AFTER THE REQUIRES BELOW.
|
12
|
+
//
|
13
|
+
//= require_tree ./epiceditor
|
14
|
+
//= require_tree .
|
@@ -0,0 +1,4 @@
|
|
1
|
+
/**
|
2
|
+
* EpicEditor - An Embeddable JavaScript Markdown Editor (https://github.com/OscarGodson/EpicEditor)
|
3
|
+
* Copyright (c) 2011-2012, Oscar Godson. (MIT Licensed)
|
4
|
+
*/(function(e,t){function n(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])}function r(e,t){for(var n in t)t.hasOwnProperty(n)&&(e.style[n]=t[n])}function i(t,n){var r=t,i=null;return e.getComputedStyle?i=document.defaultView.getComputedStyle(r,null).getPropertyValue(n):r.currentStyle&&(i=r.currentStyle[n]),i}function s(e,t,n){var s={},o;if(t==="save"){for(o in n)n.hasOwnProperty(o)&&(s[o]=i(e,o));r(e,n)}else t==="apply"&&r(e,n);return s}function o(e){var t=parseInt(i(e,"border-left-width"),10)+parseInt(i(e,"border-right-width"),10),n=parseInt(i(e,"padding-left"),10)+parseInt(i(e,"padding-right"),10),r=e.offsetWidth,s;return isNaN(t)&&(t=0),s=t+n+r,s}function u(e){var t=parseInt(i(e,"border-top-width"),10)+parseInt(i(e,"border-bottom-width"),10),n=parseInt(i(e,"padding-top"),10)+parseInt(i(e,"padding-bottom"),10),r=e.offsetHeight,s;return isNaN(t)&&(t=0),s=t+n+r,s}function a(e,t,r){r=r||"";var i=t.getElementsByTagName("head")[0],s=t.createElement("link");n(s,{type:"text/css",id:r,rel:"stylesheet",href:e,name:e,media:"screen"}),i.appendChild(s)}function f(e,t,n){e.className=e.className.replace(t,n)}function l(e){return e.contentDocument||e.contentWindow.document}function c(e){var t;return document.body.innerText?t=e.innerText:(t=e.innerHTML.replace(/<br>/gi,"\n"),t=t.replace(/<(?:.|\n)*?>/gm,""),t=t.replace(/</gi,"<"),t=t.replace(/>/gi,">")),t}function h(e,t){return document.body.innerText?e.innerText=t:(t=t.replace(/</g,"<"),t=t.replace(/>/g,">"),t=t.replace(/\n/g,"<br>"),e.innerHTML=t),!0}function p(){var e=-1,t=navigator.userAgent,n;return navigator.appName=="Microsoft Internet Explorer"&&(n=/MSIE ([0-9]{1,}[\.0-9]{0,})/,n.exec(t)!=null&&(e=parseFloat(RegExp.$1,10))),e}function d(e){var t={};return e&&t.toString.call(e)==="[object Function]"}function v(){var e=arguments[0]||{},n=1,r=arguments.length,i=!1,s,o,u,a;typeof e=="boolean"&&(i=e,e=arguments[1]||{},n=2),typeof e!="object"&&!d(e)&&(e={}),r===n&&(e=this,--n);for(;n<r;n++)if((s=arguments[n])!=null)for(o in s)if(s.hasOwnProperty(o)){u=e[o],a=s[o];if(e===a)continue;i&&a&&typeof a=="object"&&!a.nodeType?e[o]=v(i,u||(a.length!=null?[]:{}),a):a!==t&&(e[o]=a)}return e}function m(e){var n=this,r=e||{},i,s,o={container:"epiceditor",basePath:"epiceditor",clientSideStorage:!0,localStorageName:"epiceditor",file:{name:null,defaultContent:"",autoSave:100},theme:{base:"/themes/base/epiceditor.css",preview:"/themes/preview/github.css",editor:"/themes/editor/epic-dark.css"},focusOnLoad:!1,shortcut:{modifier:18,fullscreen:70,preview:80,edit:79},parser:typeof marked=="function"?marked:null},u;n.settings=v(!0,o,r);if(typeof n.settings.parser!="function"||typeof n.settings.parser("TEST")!="string")n.settings.parser=function(e){return e};return typeof n.settings.container=="string"?n.element=document.getElementById(n.settings.container):typeof n.settings.container=="object"&&(n.element=n.settings.container),n.settings.file.name||(typeof n.settings.container=="string"?n.settings.file.name=n.settings.container:typeof n.settings.container=="object"&&(n.element.id?n.settings.file.name=n.element.id:(m._data.unnamedEditors||(m._data.unnamedEditors=[]),m._data.unnamedEditors.push(n),n.settings.file.name="__epiceditor-untitled-"+m._data.unnamedEditors.length))),n._instanceId="epiceditor-"+Math.round(Math.random()*1e5),n._storage={},n._canSave=!0,n._defaultFileSchema=function(){return{content:n.settings.file.defaultContent,created:new Date,modified:new Date}},localStorage&&n.settings.clientSideStorage&&(this._storage=localStorage,this._storage[n.settings.localStorageName]&&n.getFiles(n.settings.file.name)===t&&(s=n.getFiles(n.settings.file.name),s=n._defaultFileSchema(),s.content=n.settings.file.defaultContent)),this._storage[n.settings.localStorageName]||(u={},u[n.settings.file.name]=n._defaultFileSchema(),u=JSON.stringify(u),this._storage[n.settings.localStorageName]=u),n.events||(n.events={}),this}m.prototype.load=function(t){function _(e){for(var t=0;t<e.length;t++)e[t].style.width=n.element.offsetWidth-d+"px",e[t].style.height=n.element.offsetHeight-v+"px"}function D(e){d=o(n.element)-n.element.offsetWidth;for(var t=0;t<e.length;t++)e[t].style.width=n.element.offsetWidth-d+"px"}function P(t){if(Math.abs(w.y-t.pageY)>=5||Math.abs(w.x-t.pageX)>=5)g.style.display="block",y&&clearTimeout(y),y=e.setTimeout(function(){g.style.display="none"},1e3);w={y:t.pageY,x:t.pageX}}function H(e){e.keyCode==n.settings.shortcut.modifier&&(L=!0),e.keyCode==17&&(A=!0),L===!0&&e.keyCode==n.settings.shortcut.preview&&!n.eeState.fullscreen&&(e.preventDefault(),n.preview()),L===!0&&e.keyCode==n.settings.shortcut.edit&&(e.preventDefault(),n.eeState.fullscreen||n.edit()),L===!0&&e.keyCode==n.settings.shortcut.fullscreen&&(e.preventDefault(),T(k)),L===!0&&e.keyCode!==n.settings.shortcut.modifier&&(L=!1),e.keyCode==27&&n.eeState.fullscreen&&(document.body.webkitRequestFullScreen||N(k)),A===!0&&e.keyCode==83&&(n.save(),e.preventDefault(),A=!1),e.metaKey&&e.keyCode==83&&(n.save(),e.preventDefault())}function B(e){e.keyCode==n.settings.shortcut.modifier&&(L=!1),e.keyCode==17&&(A=!1)}var n=this,f,c,h,d,v,m,g,y,b,w={y:-1,x:-1},E,S,x=document.body.webkitRequestFullScreen?!0:!1,T,N,C,k,L=!1,A=!1,O,M;t=t||function(){},n.eeState={fullscreen:!1,preview:!1,edit:!0,loaded:!1,unloaded:!1},f={chrome:'<div id="epiceditor-wrapper" class="epiceditor-edit-mode"><iframe frameborder="0" id="epiceditor-editor-frame"></iframe><iframe frameborder="0" id="epiceditor-previewer-frame"></iframe><div id="epiceditor-utilbar"><img width="30" src="'+this.settings.basePath+'<%= asset_path('monologue-markdown/epiceditor/preview.png')%>" title="Toggle Preview Mode" class="epiceditor-toggle-btn epiceditor-toggle-preview-btn"> '+'<img width="30" src="'+this.settings.basePath+'<%= asset_path('monologue-markdown/epiceditor/edit.png')%>" title="Toggle Edit Mode" class="epiceditor-toggle-btn epiceditor-toggle-edit-btn"> '+'<img width="30" src="'+this.settings.basePath+'<%= asset_path('monologue-markdown/epiceditor/fullscreen.png')%>" title="Enter Fullscreen" class="epiceditor-fullscreen-btn">'+"</div>"+"</div>",previewer:'<div id="epiceditor-preview"></div>'},n.element.innerHTML='<iframe scrolling="no" frameborder="0" id= "'+n._instanceId+'"></iframe>',c=document.getElementById(n._instanceId),n.iframeElement=c,n.iframe=l(c),n.iframe.open(),n.iframe.write(f.chrome),n.editorIframe=n.iframe.getElementById("epiceditor-editor-frame"),n.previewerIframe=n.iframe.getElementById("epiceditor-previewer-frame"),n.editorIframeDocument=l(n.editorIframe),n.editorIframeDocument.open(),n.editorIframeDocument.write(""),n.editorIframeDocument.close(),n.previewerIframeDocument=l(n.previewerIframe),n.previewerIframeDocument.open(),n.previewerIframeDocument.write(f.previewer),h=n.previewerIframeDocument.createElement("base"),h.target="_blank",n.previewerIframeDocument.getElementsByTagName("head")[0].appendChild(h),n.previewerIframeDocument.close(),d=o(n.element)-n.element.offsetWidth,v=u(n.element)-n.element.offsetHeight,C=[n.iframeElement,n.editorIframe,n.previewerIframe],_(C),a(n.settings.basePath+n.settings.theme.base,n.iframe,"theme"),a(n.settings.basePath+n.settings.theme.editor,n.editorIframeDocument,"theme"),a(n.settings.basePath+n.settings.theme.preview,n.previewerIframeDocument,"theme"),n.iframe.getElementById("epiceditor-wrapper").style.position="relative",n.editor=n.editorIframeDocument.body,n.previewer=n.previewerIframeDocument.getElementById("epiceditor-preview"),n.editor.contentEditable=!0,n.iframe.body.style.height=this.element.offsetHeight+"px",this.previewerIframe.style.display="none",p()>-1&&(this.previewer.style.height=parseInt(i(this.previewer,"height"),10)+2),this.open(n.settings.file.name),n.settings.focusOnLoad&&n.iframe.addEventListener("readystatechange",function(){n.iframe.readyState=="complete"&&n.editorIframeDocument.body.focus()}),m=n.iframe.getElementById("epiceditor-utilbar"),E={},T=function(t){if(n.eeState.fullscreen){N(t);return}x&&t.webkitRequestFullScreen(),S=n.eeState.edit,n.eeState.fullscreen=!0,n.eeState.edit=!0,n.eeState.preview=!0;var r=e.innerWidth,o=e.innerHeight,u=e.outerWidth,a=e.outerHeight;x||(a=e.innerHeight),E.editorIframe=s(n.editorIframe,"save",{width:u/2+"px",height:a+"px","float":"left",cssFloat:"left",styleFloat:"left",display:"block"}),E.previewerIframe=s(n.previewerIframe,"save",{width:u/2+"px",height:a+"px","float":"right",cssFloat:"right",styleFloat:"right",display:"block"}),E.element=s(n.element,"save",{position:"fixed",top:"0",left:"0",width:"100%","z-index":"9999",zIndex:"9999",border:"none",margin:"0",background:i(n.editor,"background-color"),height:o+"px"}),E.iframeElement=s(n.iframeElement,"save",{width:u+"px",height:o+"px"}),m.style.visibility="hidden",x||(document.body.style.overflow="hidden"),n.preview(),n.editorIframeDocument.body.focus()},N=function(e){s(n.element,"apply",E.element),s(n.iframeElement,"apply",E.iframeElement),s(n.editorIframe,"apply",E.editorIframe),s(n.previewerIframe,"apply",E.previewerIframe),n.element.style.width="",n.element.style.height="",m.style.visibility="visible",x?document.webkitCancelFullScreen():document.body.style.overflow="auto",n.eeState.fullscreen=!1,S?n.edit():n.preview(),D(C)},n.editor.addEventListener("keyup",function(){b&&e.clearTimeout(b),b=e.setTimeout(function(){n.eeState.fullscreen&&n.preview()},250)}),k=n.iframeElement,m.addEventListener("click",function(e){var t=e.target.className;t.indexOf("epiceditor-toggle-preview-btn")>-1?n.preview():t.indexOf("epiceditor-toggle-edit-btn")>-1?n.edit():t.indexOf("epiceditor-fullscreen-btn")>-1&&T(k)}),document.body.webkitRequestFullScreen&&k.addEventListener("webkitfullscreenchange",function(){document.webkitIsFullScreen||N(k)},!1),g=n.iframe.getElementById("epiceditor-utilbar"),g.style.display="none",g.addEventListener("mouseover",function(){y&&clearTimeout(y)}),O=[n.previewerIframeDocument,n.editorIframeDocument];for(M=0;M<O.length;M++)O[M].addEventListener("mousemove",function(e){P(e)}),O[M].addEventListener("scroll",function(e){P(e)}),O[M].addEventListener("keyup",function(e){B(e)}),O[M].addEventListener("keydown",function(e){H(e)});return n.settings.file.autoSave&&(n.saveInterval=e.setInterval(function(){if(!n._canSave)return;n.save()},n.settings.file.autoSave)),e.addEventListener("resize",function(){!n.iframe.webkitRequestFullScreen&&n.eeState.fullscreen?(r(n.iframeElement,{width:e.outerWidth+"px",height:e.innerHeight+"px"}),r(n.element,{height:e.innerHeight+"px"}),r(n.previewerIframe,{width:e.outerWidth/2+"px",height:e.innerHeight+"px"}),r(n.editorIframe,{width:e.outerWidth/2+"px",height:e.innerHeight+"px"})):n.eeState.fullscreen||D(C)}),n.iframe.close(),n.eeState.loaded=!0,n.eeState.unloaded=!1,t.call(this),this.emit("load"),this},m.prototype.unload=function(t){if(this.eeState.unloaded)throw new Error("Editor isn't loaded");var n=this,r=e.parent.document.getElementById(n._instanceId);return r.parentNode.removeChild(r),n.eeState.loaded=!1,n.eeState.unloaded=!0,t=t||function(){},n.saveInterval&&e.clearInterval(n.saveInterval),t.call(this),n.emit("unload"),n},m.prototype.preview=function(e){var t=this;return e=e||t.settings.basePath+t.settings.theme.preview,f(t.getElement("wrapper"),"epiceditor-edit-mode","epiceditor-preview-mode"),t.previewerIframeDocument.getElementById("theme")?t.previewerIframeDocument.getElementById("theme").name!==e&&(t.previewerIframeDocument.getElementById("theme").href=e):a(e,t.previewerIframeDocument,"theme"),t.previewer.innerHTML=t.exportFile(null,"html"),t.eeState.fullscreen||(t.editorIframe.style.display="none",t.previewerIframe.style.display="block",t.eeState.preview=!0,t.eeState.edit=!1,t.previewerIframe.focus()),t.emit("preview"),t},m.prototype.edit=function(){var e=this;return f(e.getElement("wrapper"),"epiceditor-preview-mode","epiceditor-edit-mode"),e.eeState.preview=!1,e.eeState.edit=!0,e.editorIframe.style.display="block",e.previewerIframe.style.display="none",e.editorIframe.focus(),e.emit("edit"),this},m.prototype.getElement=function(e){var t={container:this.element,wrapper:this.iframe.getElementById("epiceditor-wrapper"),wrapperIframe:this.iframeElement,editor:this.editorIframeDocument,editorIframe:this.editorIframe,previewer:this.previewerIframeDocument,previewerIframe:this.previewerIframe};return!t[e]||this.eeState.unloaded?null:t[e]},m.prototype.open=function(e){var n=this,r=n.settings.file.defaultContent,i;return e=e||n.settings.file.name,n.settings.file.name=e,this._storage[n.settings.localStorageName]&&(i=n.getFiles(),i[e]!==t?(h(n.editor,i[e].content),n.emit("read")):(h(n.editor,r),n.save(),n.emit("create")),n.previewer.innerHTML=n.exportFile(null,"html"),n.emit("open")),this},m.prototype.save=function(){var e=this,n,r=!1,i=e.settings.file.name,s=c(this.editor);return this._canSave=!0,n=JSON.parse(this._storage[e.settings.localStorageName]),n[i]===t?n[i]=e._defaultFileSchema():s!==n[i].content&&(n[i].modified=new Date,r=!0),n[i].content=s,this._storage[e.settings.localStorageName]=JSON.stringify(n),r&&e.emit("update"),this.emit("save"),this},m.prototype.remove=function(e){var t=this,n;return e=e||t.settings.file.name,e==t.settings.file.name&&(t._canSave=!1),n=JSON.parse(this._storage[t.settings.localStorageName]),delete n[e],this._storage[t.settings.localStorageName]=JSON.stringify(n),this.emit("remove"),this},m.prototype.rename=function(e,t){var n=this,r=JSON.parse(this._storage[n.settings.localStorageName]);return r[t]=r[e],delete r[e],this._storage[n.settings.localStorageName]=JSON.stringify(r),n.open(t),this},m.prototype.importFile=function(e,n,r,i){var s=this,o=!1;return e=e||s.settings.file.name,n=n||"",r=r||"md",i=i||{},JSON.parse(this._storage[s.settings.localStorageName])[e]===t&&(o=!0),s.settings.file.name=e,h(s.editor,n),o&&s.emit("create"),s.save(),s.eeState.fullscreen&&s.preview(),this},m.prototype.exportFile=function(e,n){var r=this,i,s;e=e||r.settings.file.name,n=n||"text",i=r.getFiles(e);if(i===t)return;s=i.content;switch(n){case"html":return s=s.replace(/\u00a0/g," ").replace(/ /g," "),r.settings.parser(s);case"text":return s=s.replace(/ /g," "),s;default:return s}},m.prototype.getFiles=function(e){var t=JSON.parse(this._storage[this.settings.localStorageName]);return e?t[e]:t},m.prototype.on=function(e,t){var n=this;return this.events[e]||(this.events[e]=[]),this.events[e].push(t),n},m.prototype.emit=function(e,t){function i(e){e.call(n,t)}var n=this,r;t=t||n.getFiles(n.settings.file.name);if(!this.events[e])return;for(r=0;r<n.events[e].length;r++)i(n.events[e][r]);return n},m.prototype.removeListener=function(e,t){var n=this;return t?this.events[e]?(this.events[e].splice(this.events[e].indexOf(t),1),n):n:(this.events[e]=[],n)},m.version="0.1.1.1",m._data={},e.EpicEditor=m})(window),function(){function n(e,n){return e[0][0]!=="!"?'<a href="'+f(n.href)+'"'+(n.title?' title="'+f(n.title)+'"':"")+">"+t.lexer(e[1])+"</a>":'<img src="'+f(n.href)+'" alt="'+f(e[1])+'"'+(n.title?' title="'+f(n.title)+'"':"")+">"}function s(){return i=r.pop()}function o(){switch(i.type){case"space":return"";case"hr":return"<hr>\n";case"heading":return"<h"+i.depth+">"+t.lexer(i.text)+"</h"+i.depth+">\n";case"code":return v.highlight&&(i.code=v.highlight(i.text,i.lang),i.code!=null&&i.code!==i.text&&(i.escaped=!0,i.text=i.code)),i.escaped||(i.text=f(i.text,!0)),"<pre><code"+(i.lang?' class="lang-'+i.lang+'"':"")+">"+i.text+"</code></pre>\n";case"blockquote_start":var e="";while(s().type!=="blockquote_end")e+=o();return"<blockquote>\n"+e+"</blockquote>\n";case"list_start":var n=i.ordered?"ol":"ul",e="";while(s().type!=="list_end")e+=o();return"<"+n+">\n"+e+"</"+n+">\n";case"list_item_start":var e="";while(s().type!=="list_item_end")e+=i.type==="text"?u():o();return"<li>"+e+"</li>\n";case"loose_item_start":var e="";while(s().type!=="list_item_end")e+=o();return"<li>"+e+"</li>\n";case"html":return v.sanitize?t.lexer(i.text):!i.pre&&!v.pedantic?t.lexer(i.text):i.text;case"paragraph":return"<p>"+t.lexer(i.text)+"</p>\n";case"text":return"<p>"+u()+"</p>\n"}}function u(){var e=i.text,n;while((n=r[r.length-1])&&n.type==="text")e+="\n"+s().text;return t.lexer(e)}function a(e){r=e.reverse();var t="";while(s())t+=o();return r=null,i=null,t}function f(e,t){return e.replace(t?/&/g:/&(?!#?\w+;)/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function l(e){var t="",n=e.length,r=0,i;for(;r<n;r++)i=e.charCodeAt(r),Math.random()>.5&&(i="x"+i.toString(16)),t+="&#"+i+";";return t}function c(){var e="(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+";return e}function h(e,t){return e=e.source,t=t||"",function n(r,i){return r?(e=e.replace(r,i.source||i),n):new RegExp(e,t)}}function p(){}function d(t,n){return g(n),a(e.lexer(t))}function g(n){n||(n=m);if(v===n)return;v=n,v.gfm?(e.fences=e.gfm.fences,e.paragraph=e.gfm.paragraph,t.text=t.gfm.text,t.url=t.gfm.url):(e.fences=e.normal.fences,e.paragraph=e.normal.paragraph,t.text=t.normal.text,t.url=t.normal.url),v.pedantic?(t.em=t.pedantic.em,t.strong=t.pedantic.strong):(t.em=t.normal.em,t.strong=t.normal.strong)}var e={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:p,hr:/^( *[-*_]){3,} *(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/,lheading:/^([^\n]+)\n *(=|-){3,} *\n*/,blockquote:/^( *>[^\n]+(\n[^\n]+)*\n*)+/,list:/^( *)(bull) [^\0]+?(?:hr|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:/^ *(?:comment|closed|closing) *(?:\n{2,}|\s*$)/,def:/^ *\[([^\]]+)\]: *([^\s]+)(?: +["(]([^\n]+)[")])? *(?:\n+|$)/,paragraph:/^([^\n]+\n?(?!body))+\n*/,text:/^[^\n]+/};e.bullet=/(?:[*+-]|\d+\.)/,e.item=/^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/,e.item=h(e.item,"gm")(/bull/g,e.bullet)(),e.list=h(e.list)(/bull/g,e.bullet)("hr",/\n+(?=(?: *[-*_]){3,} *(?:\n+|$))/)(),e.html=h(e.html)("comment",/<!--[^\0]*?-->/)("closed",/<(tag)[^\0]+?<\/\1>/)("closing",/<tag(?!:\/|@)\b(?:"[^"]*"|'[^']*'|[^'">])*?>/)(/tag/g,c())(),e.paragraph=function(){var t=e.paragraph.source,n=[];return function r(t){return t=e[t]?e[t].source:t,n.push(t.replace(/(^|[^\[])\^/g,"$1")),r}("hr")("heading")("lheading")("blockquote")("<"+c())("def"),new RegExp(t.replace("body",n.join("|")))}(),e.normal={fences:e.fences,paragraph:e.paragraph},e.gfm={fences:/^ *``` *(\w+)? *\n([^\0]+?)\s*``` *(?:\n+|$)/,paragraph:/^/},e.gfm.paragraph=h(e.paragraph)("(?!","(?!"+e.gfm.fences.source.replace(/(^|[^\[])\^/g,"$1")+"|")(),e.lexer=function(t){var n=[];return n.links={},t=t.replace(/\r\n|\r/g,"\n").replace(/\t/g," "),e.token(t,n,!0)},e.token=function(t,n,r){var t=t.replace(/^ +$/gm,""),i,s,o,u,a,f,l;while(t){if(o=e.newline.exec(t))t=t.substring(o[0].length),o[0].length>1&&n.push({type:"space"});if(o=e.code.exec(t)){t=t.substring(o[0].length),o=o[0].replace(/^ {4}/gm,""),n.push({type:"code",text:v.pedantic?o:o.replace(/\n+$/,"")});continue}if(o=e.fences.exec(t)){t=t.substring(o[0].length),n.push({type:"code",lang:o[1],text:o[2]});continue}if(o=e.heading.exec(t)){t=t.substring(o[0].length),n.push({type:"heading",depth:o[1].length,text:o[2]});continue}if(o=e.lheading.exec(t)){t=t.substring(o[0].length),n.push({type:"heading",depth:o[2]==="="?1:2,text:o[1]});continue}if(o=e.hr.exec(t)){t=t.substring(o[0].length),n.push({type:"hr"});continue}if(o=e.blockquote.exec(t)){t=t.substring(o[0].length),n.push({type:"blockquote_start"}),o=o[0].replace(/^ *> ?/gm,""),e.token(o,n,r),n.push({type:"blockquote_end"});continue}if(o=e.list.exec(t)){t=t.substring(o[0].length),n.push({type:"list_start",ordered:isFinite(o[2])}),o=o[0].match(e.item),i=!1,l=o.length,f=0;for(;f<l;f++)u=o[f],a=u.length,u=u.replace(/^ *([*+-]|\d+\.) +/,""),~u.indexOf("\n ")&&(a-=u.length,u=v.pedantic?u.replace(/^ {1,4}/gm,""):u.replace(new RegExp("^ {1,"+a+"}","gm"),"")),s=i||/\n\n(?!\s*$)/.test(u),f!==l-1&&(i=u[u.length-1]==="\n",s||(s=i)),n.push({type:s?"loose_item_start":"list_item_start"}),e.token(u,n),n.push({type:"list_item_end"});n.push({type:"list_end"});continue}if(o=e.html.exec(t)){t=t.substring(o[0].length),n.push({type:"html",pre:o[1]==="pre",text:o[0]});continue}if(r&&(o=e.def.exec(t))){t=t.substring(o[0].length),n.links[o[1].toLowerCase()]={href:o[2],title:o[3]};continue}if(r&&(o=e.paragraph.exec(t))){t=t.substring(o[0].length),n.push({type:"paragraph",text:o[0]});continue}if(o=e.text.exec(t)){t=t.substring(o[0].length),n.push({type:"text",text:o[0]});continue}}return n};var t={escape:/^\\([\\`*{}\[\]()#+\-.!_>])/,autolink:/^<([^ >]+(@|:\/)[^ >]+)>/,url:p,tag:/^<!--[^\0]*?-->|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/,link:/^!?\[(inside)\]\(href\)/,reflink:/^!?\[(inside)\]\s*\[([^\]]*)\]/,nolink:/^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/,strong:/^__([^\0]+?)__(?!_)|^\*\*([^\0]+?)\*\*(?!\*)/,em:/^\b_((?:__|[^\0])+?)_\b|^\*((?:\*\*|[^\0])+?)\*(?!\*)/,code:/^(`+)([^\0]*?[^`])\1(?!`)/,br:/^ {2,}\n(?!\s*$)/,text:/^[^\0]+?(?=[\\<!\[_*`]| {2,}\n|$)/};t._linkInside=/(?:\[[^\]]*\]|[^\]]|\](?=[^\[]*\]))*/,t._linkHref=/\s*<?([^\s]*?)>?(?:\s+['"]([^\0]*?)['"])?\s*/,t.link=h(t.link)("inside",t._linkInside)("href",t._linkHref)(),t.reflink=h(t.reflink)("inside",t._linkInside)(),t.normal={url:t.url,strong:t.strong,em:t.em,text:t.text},t.pedantic={strong:/^__(?=\S)([^\0]*?\S)__(?!_)|^\*\*(?=\S)([^\0]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([^\0]*?\S)_(?!_)|^\*(?=\S)([^\0]*?\S)\*(?!\*)/},t.gfm={url:/^(https?:\/\/[^\s]+[^.,:;"')\]\s])/,text:/^[^\0]+?(?=[\\<!\[_*`]|https?:\/\/| {2,}\n|$)/},t.lexer=function(e){var i="",s=r.links,o,u,a,c;while(e){if(c=t.escape.exec(e)){e=e.substring(c[0].length),i+=c[1];continue}if(c=t.autolink.exec(e)){e=e.substring(c[0].length),c[2]==="@"?(u=c[1][6]===":"?l(c[1].substring(7)):l(c[1]),a=l("mailto:")+u):(u=f(c[1]),a=u),i+='<a href="'+a+'">'+u+"</a>";continue}if(c=t.url.exec(e)){e=e.substring(c[0].length),u=f(c[1]),a=u,i+='<a href="'+a+'">'+u+"</a>";continue}if(c=t.tag.exec(e)){e=e.substring(c[0].length),i+=v.sanitize?f(c[0]):c[0];continue}if(c=t.link.exec(e)){e=e.substring(c[0].length),i+=n(c,{href:c[2],title:c[3]});continue}if((c=t.reflink.exec(e))||(c=t.nolink.exec(e))){e=e.substring(c[0].length),o=(c[2]||c[1]).replace(/\s+/g," "),o=s[o.toLowerCase()];if(!o||!o.href){i+=c[0][0],e=c[0].substring(1)+e;continue}i+=n(c,o);continue}if(c=t.strong.exec(e)){e=e.substring(c[0].length),i+="<strong>"+t.lexer(c[2]||c[1])+"</strong>";continue}if(c=t.em.exec(e)){e=e.substring(c[0].length),i+="<em>"+t.lexer(c[2]||c[1])+"</em>";continue}if(c=t.code.exec(e)){e=e.substring(c[0].length),i+="<code>"+f(c[2],!0)+"</code>";continue}if(c=t.br.exec(e)){e=e.substring(c[0].length),i+="<br>";continue}if(c=t.text.exec(e)){e=e.substring(c[0].length),i+=f(c[0]);continue}}return i};var r,i;p.exec=p;var v,m;d.options=d.setOptions=function(e){return m=e,g(e),d},d.setOptions({gfm:!0,pedantic:!1,sanitize:!1,highlight:null}),d.parser=function(e,t){return g(t),a(e)},d.lexer=function(t,n){return g(n),e.lexer(t)},d.parse=d,typeof module!="undefined"?module.exports=d:this.marked=d}.call(function(){return this||(typeof window!="undefined"?window:global)}());
|
@@ -0,0 +1,58 @@
|
|
1
|
+
class MonologueMarkdown
|
2
|
+
constructor: ->
|
3
|
+
@textarea = $("#post_posts_revision_content")
|
4
|
+
@opts =
|
5
|
+
container: "epiceditor"
|
6
|
+
basePath: ""
|
7
|
+
clientSideStorage: true
|
8
|
+
localStorageName: "epiceditor"
|
9
|
+
parser: marked
|
10
|
+
file:
|
11
|
+
name: "epiceditor"
|
12
|
+
defaultContent: ""
|
13
|
+
autoSave: 100
|
14
|
+
|
15
|
+
theme:
|
16
|
+
base: "<%= asset_path("monologue-markdown/epiceditor/themes/base/epiceditor.css")%>"
|
17
|
+
preview: "<%= asset_path("monologue-markdown/epiceditor/themes/preview/github.css")%>"
|
18
|
+
editor: "<%= asset_path("monologue-markdown/epiceditor/themes/editor/epic-dark.css")%>"
|
19
|
+
|
20
|
+
focusOnLoad: false
|
21
|
+
shortcut:
|
22
|
+
modifier: 18
|
23
|
+
fullscreen: 70
|
24
|
+
preview: 80
|
25
|
+
edit: 79
|
26
|
+
$(@textarea).after("<div id='epiceditor'></div>")
|
27
|
+
$(@textarea).hide()
|
28
|
+
that = @
|
29
|
+
|
30
|
+
editor = new EpicEditor(@opts)
|
31
|
+
|
32
|
+
editor.on "load", (data) ->
|
33
|
+
editor.importFile('epiceditor',$(that.textarea).val())
|
34
|
+
|
35
|
+
editor.on "update", (data) ->
|
36
|
+
that.update_content(data)
|
37
|
+
|
38
|
+
editor.load()
|
39
|
+
|
40
|
+
$("form").submit (e) ->
|
41
|
+
editor.emit("update")
|
42
|
+
update_content: (data) =>
|
43
|
+
# forcing unload of tinymce to make sure it doesn't add stuff in our neat content
|
44
|
+
@force_unload_tiny_mce()
|
45
|
+
# update content with our awesome markdown
|
46
|
+
@textarea.val data.content
|
47
|
+
|
48
|
+
force_unload_tiny_mce: =>
|
49
|
+
try
|
50
|
+
tinymce.get(0).remove()
|
51
|
+
$(".mceEditor").remove()
|
52
|
+
catch e
|
53
|
+
# well, it looks like TinyMCE wasn't load for some reason anyway
|
54
|
+
|
55
|
+
|
56
|
+
$(document).ready ->
|
57
|
+
return if $("#is_markdown").html() == "false"
|
58
|
+
new MonologueMarkdown()
|
@@ -0,0 +1,16 @@
|
|
1
|
+
/*
|
2
|
+
* This is a manifest file that'll be compiled into application.css, which will include all the files
|
3
|
+
* listed below.
|
4
|
+
*
|
5
|
+
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
|
6
|
+
* or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
|
7
|
+
*
|
8
|
+
* You're free to add application-wide styles to this file and they'll appear at the top of the
|
9
|
+
* compiled file, but it's generally better to create a new file per style scope.
|
10
|
+
*
|
11
|
+
*= require_self
|
12
|
+
*/
|
13
|
+
|
14
|
+
#epiceditor iframe {
|
15
|
+
height: 450px;
|
16
|
+
}
|
@@ -0,0 +1,31 @@
|
|
1
|
+
html, body, iframe, div { margin:0; padding:0; }
|
2
|
+
|
3
|
+
#epiceditor-utilbar {
|
4
|
+
position:fixed;
|
5
|
+
bottom:10px;
|
6
|
+
right:10px;
|
7
|
+
padding:5px;
|
8
|
+
}
|
9
|
+
|
10
|
+
#epiceditor-utilbar img {
|
11
|
+
display:block;
|
12
|
+
float:left;
|
13
|
+
width: 30px;
|
14
|
+
height: 30px;
|
15
|
+
}
|
16
|
+
|
17
|
+
#epiceditor-utilbar img:last-child {
|
18
|
+
margin-left: 15px;
|
19
|
+
}
|
20
|
+
|
21
|
+
#epiceditor-utilbar img:hover {
|
22
|
+
cursor:pointer;
|
23
|
+
}
|
24
|
+
|
25
|
+
.epiceditor-edit-mode #epiceditor-utilbar img.epiceditor-toggle-edit-btn {
|
26
|
+
display: none;
|
27
|
+
}
|
28
|
+
|
29
|
+
.epiceditor-preview-mode #epiceditor-utilbar img.epiceditor-toggle-preview-btn {
|
30
|
+
display: none;
|
31
|
+
}
|
@@ -0,0 +1,368 @@
|
|
1
|
+
html { padding:0 10px; }
|
2
|
+
|
3
|
+
body {
|
4
|
+
margin:0;
|
5
|
+
padding:0;
|
6
|
+
background:#fff;
|
7
|
+
}
|
8
|
+
|
9
|
+
#epiceditor-wrapper{
|
10
|
+
background:white;
|
11
|
+
}
|
12
|
+
|
13
|
+
#epiceditor-preview{
|
14
|
+
padding-top:10px;
|
15
|
+
padding-bottom:10px;
|
16
|
+
font-family: Helvetica,arial,freesans,clean,sans-serif;
|
17
|
+
font-size:13px;
|
18
|
+
line-height:1.6;
|
19
|
+
}
|
20
|
+
|
21
|
+
#epiceditor-preview>*:first-child{
|
22
|
+
margin-top:0!important;
|
23
|
+
}
|
24
|
+
|
25
|
+
#epiceditor-preview>*:last-child{
|
26
|
+
margin-bottom:0!important;
|
27
|
+
}
|
28
|
+
|
29
|
+
#epiceditor-preview a{
|
30
|
+
color:#4183C4;
|
31
|
+
text-decoration:none;
|
32
|
+
}
|
33
|
+
|
34
|
+
#epiceditor-preview a:hover{
|
35
|
+
text-decoration:underline;
|
36
|
+
}
|
37
|
+
|
38
|
+
#epiceditor-preview h1,
|
39
|
+
#epiceditor-preview h2,
|
40
|
+
#epiceditor-preview h3,
|
41
|
+
#epiceditor-preview h4,
|
42
|
+
#epiceditor-preview h5,
|
43
|
+
#epiceditor-preview h6{
|
44
|
+
margin:20px 0 10px;
|
45
|
+
padding:0;
|
46
|
+
font-weight:bold;
|
47
|
+
-webkit-font-smoothing:antialiased;
|
48
|
+
}
|
49
|
+
|
50
|
+
#epiceditor-preview h1 tt,
|
51
|
+
#epiceditor-preview h1 code,
|
52
|
+
#epiceditor-preview h2 tt,
|
53
|
+
#epiceditor-preview h2 code,
|
54
|
+
#epiceditor-preview h3 tt,
|
55
|
+
#epiceditor-preview h3 code,
|
56
|
+
#epiceditor-preview h4 tt,
|
57
|
+
#epiceditor-preview h4 code,
|
58
|
+
#epiceditor-preview h5 tt,
|
59
|
+
#epiceditor-preview h5 code,
|
60
|
+
#epiceditor-preview h6 tt,
|
61
|
+
#epiceditor-preview h6 code{
|
62
|
+
font-size:inherit;
|
63
|
+
}
|
64
|
+
|
65
|
+
#epiceditor-preview h1{
|
66
|
+
font-size:28px;
|
67
|
+
color:#000;
|
68
|
+
}
|
69
|
+
|
70
|
+
#epiceditor-preview h2{
|
71
|
+
font-size:24px;
|
72
|
+
border-bottom:1px solid #ccc;
|
73
|
+
color:#000;
|
74
|
+
}
|
75
|
+
|
76
|
+
#epiceditor-preview h3{
|
77
|
+
font-size:18px;
|
78
|
+
}
|
79
|
+
|
80
|
+
#epiceditor-preview h4{
|
81
|
+
font-size:16px;
|
82
|
+
}
|
83
|
+
|
84
|
+
#epiceditor-preview h5{
|
85
|
+
font-size:14px;
|
86
|
+
}
|
87
|
+
|
88
|
+
#epiceditor-preview h6{
|
89
|
+
color:#777;
|
90
|
+
font-size:14px;
|
91
|
+
}
|
92
|
+
|
93
|
+
#epiceditor-preview p,
|
94
|
+
#epiceditor-preview blockquote,
|
95
|
+
#epiceditor-preview ul,
|
96
|
+
#epiceditor-preview ol,
|
97
|
+
#epiceditor-preview dl,
|
98
|
+
#epiceditor-preview li,
|
99
|
+
#epiceditor-preview table,
|
100
|
+
#epiceditor-preview pre{
|
101
|
+
margin:15px 0;
|
102
|
+
}
|
103
|
+
|
104
|
+
#epiceditor-preview hr{
|
105
|
+
background:transparent url('../../images/modules/pulls/dirty-shade.png') repeat-x 0 0;
|
106
|
+
border:0 none;
|
107
|
+
color:#ccc;
|
108
|
+
height:4px;
|
109
|
+
padding:0;
|
110
|
+
}
|
111
|
+
|
112
|
+
#epiceditor-preview>h2:first-child,
|
113
|
+
#epiceditor-preview>h1:first-child,
|
114
|
+
#epiceditor-preview>h1:first-child+h2,
|
115
|
+
#epiceditor-preview>h3:first-child,
|
116
|
+
#epiceditor-preview>h4:first-child,
|
117
|
+
#epiceditor-preview>h5:first-child,
|
118
|
+
#epiceditor-preview>h6:first-child{
|
119
|
+
margin-top:0;
|
120
|
+
padding-top:0;
|
121
|
+
}
|
122
|
+
|
123
|
+
#epiceditor-preview h1+p,
|
124
|
+
#epiceditor-preview h2+p,
|
125
|
+
#epiceditor-preview h3+p,
|
126
|
+
#epiceditor-preview h4+p,
|
127
|
+
#epiceditor-preview h5+p,
|
128
|
+
#epiceditor-preview h6+p{
|
129
|
+
margin-top:0;
|
130
|
+
}
|
131
|
+
|
132
|
+
#epiceditor-preview li p.first{
|
133
|
+
display:inline-block;
|
134
|
+
}
|
135
|
+
|
136
|
+
#epiceditor-preview ul,
|
137
|
+
#epiceditor-preview ol{
|
138
|
+
padding-left:30px;
|
139
|
+
}
|
140
|
+
|
141
|
+
#epiceditor-preview ul li>:first-child,
|
142
|
+
#epiceditor-preview ol li>:first-child{
|
143
|
+
margin-top:0;
|
144
|
+
}
|
145
|
+
|
146
|
+
#epiceditor-preview ul li>:last-child,
|
147
|
+
#epiceditor-preview ol li>:last-child{
|
148
|
+
margin-bottom:0;
|
149
|
+
}
|
150
|
+
|
151
|
+
#epiceditor-preview dl{
|
152
|
+
padding:0;
|
153
|
+
}
|
154
|
+
|
155
|
+
#epiceditor-preview dl dt{
|
156
|
+
font-size:14px;
|
157
|
+
font-weight:bold;
|
158
|
+
font-style:italic;
|
159
|
+
padding:0;
|
160
|
+
margin:15px 0 5px;
|
161
|
+
}
|
162
|
+
|
163
|
+
#epiceditor-preview dl dt:first-child{
|
164
|
+
padding:0;
|
165
|
+
}
|
166
|
+
|
167
|
+
#epiceditor-preview dl dt>:first-child{
|
168
|
+
margin-top:0;
|
169
|
+
}
|
170
|
+
|
171
|
+
#epiceditor-preview dl dt>:last-child{
|
172
|
+
margin-bottom:0;
|
173
|
+
}
|
174
|
+
|
175
|
+
#epiceditor-preview dl dd{
|
176
|
+
margin:0 0 15px;
|
177
|
+
padding:0 15px;
|
178
|
+
}
|
179
|
+
|
180
|
+
#epiceditor-preview dl dd>:first-child{
|
181
|
+
margin-top:0;
|
182
|
+
}
|
183
|
+
|
184
|
+
#epiceditor-preview dl dd>:last-child{
|
185
|
+
margin-bottom:0;
|
186
|
+
}
|
187
|
+
|
188
|
+
#epiceditor-preview blockquote{
|
189
|
+
border-left:4px solid #DDD;
|
190
|
+
padding:0 15px;
|
191
|
+
color:#777;
|
192
|
+
}
|
193
|
+
|
194
|
+
#epiceditor-preview blockquote>:first-child{
|
195
|
+
margin-top:0;
|
196
|
+
}
|
197
|
+
|
198
|
+
#epiceditor-preview blockquote>:last-child{
|
199
|
+
margin-bottom:0;
|
200
|
+
}
|
201
|
+
|
202
|
+
#epiceditor-preview table{
|
203
|
+
padding:0;
|
204
|
+
border-collapse: collapse;
|
205
|
+
border-spacing: 0;
|
206
|
+
font-size: 100%;
|
207
|
+
font: inherit;
|
208
|
+
}
|
209
|
+
|
210
|
+
#epiceditor-preview table tr{
|
211
|
+
border-top:1px solid #ccc;
|
212
|
+
background-color:#fff;
|
213
|
+
margin:0;
|
214
|
+
padding:0;
|
215
|
+
}
|
216
|
+
|
217
|
+
#epiceditor-preview table tr:nth-child(2n){
|
218
|
+
background-color:#f8f8f8;
|
219
|
+
}
|
220
|
+
|
221
|
+
#epiceditor-preview table tr th{
|
222
|
+
font-weight:bold;
|
223
|
+
}
|
224
|
+
|
225
|
+
#epiceditor-preview table tr th,
|
226
|
+
#epiceditor-preview table tr td{
|
227
|
+
border:1px solid #ccc;
|
228
|
+
text-align:left;
|
229
|
+
margin:0;
|
230
|
+
padding:6px 13px;
|
231
|
+
}
|
232
|
+
|
233
|
+
#epiceditor-preview table tr th>:first-child,
|
234
|
+
#epiceditor-preview table tr td>:first-child{
|
235
|
+
margin-top:0;
|
236
|
+
}
|
237
|
+
|
238
|
+
#epiceditor-preview table tr th>:last-child,
|
239
|
+
#epiceditor-preview table tr td>:last-child{
|
240
|
+
margin-bottom:0;
|
241
|
+
}
|
242
|
+
|
243
|
+
#epiceditor-preview img{
|
244
|
+
max-width:100%;
|
245
|
+
}
|
246
|
+
|
247
|
+
#epiceditor-preview span.frame{
|
248
|
+
display:block;
|
249
|
+
overflow:hidden;
|
250
|
+
}
|
251
|
+
|
252
|
+
#epiceditor-preview span.frame>span{
|
253
|
+
border:1px solid #ddd;
|
254
|
+
display:block;
|
255
|
+
float:left;
|
256
|
+
overflow:hidden;
|
257
|
+
margin:13px 0 0;
|
258
|
+
padding:7px;
|
259
|
+
width:auto;
|
260
|
+
}
|
261
|
+
|
262
|
+
#epiceditor-preview span.frame span img{
|
263
|
+
display:block;
|
264
|
+
float:left;
|
265
|
+
}
|
266
|
+
|
267
|
+
#epiceditor-preview span.frame span span{
|
268
|
+
clear:both;
|
269
|
+
color:#333;
|
270
|
+
display:block;
|
271
|
+
padding:5px 0 0;
|
272
|
+
}
|
273
|
+
|
274
|
+
#epiceditor-preview span.align-center{
|
275
|
+
display:block;
|
276
|
+
overflow:hidden;
|
277
|
+
clear:both;
|
278
|
+
}
|
279
|
+
|
280
|
+
#epiceditor-preview span.align-center>span{
|
281
|
+
display:block;
|
282
|
+
overflow:hidden;
|
283
|
+
margin:13px auto 0;
|
284
|
+
text-align:center;
|
285
|
+
}
|
286
|
+
|
287
|
+
#epiceditor-preview span.align-center span img{
|
288
|
+
margin:0 auto;
|
289
|
+
text-align:center;
|
290
|
+
}
|
291
|
+
|
292
|
+
#epiceditor-preview span.align-right{
|
293
|
+
display:block;
|
294
|
+
overflow:hidden;
|
295
|
+
clear:both;
|
296
|
+
}
|
297
|
+
|
298
|
+
#epiceditor-preview span.align-right>span{
|
299
|
+
display:block;
|
300
|
+
overflow:hidden;
|
301
|
+
margin:13px 0 0;
|
302
|
+
text-align:right;
|
303
|
+
}
|
304
|
+
|
305
|
+
#epiceditor-preview span.align-right span img{
|
306
|
+
margin:0;
|
307
|
+
text-align:right;
|
308
|
+
}
|
309
|
+
|
310
|
+
#epiceditor-preview span.float-left{
|
311
|
+
display:block;
|
312
|
+
margin-right:13px;
|
313
|
+
overflow:hidden;
|
314
|
+
float:left;
|
315
|
+
}
|
316
|
+
|
317
|
+
#epiceditor-preview span.float-left span{
|
318
|
+
margin:13px 0 0;
|
319
|
+
}
|
320
|
+
|
321
|
+
#epiceditor-preview span.float-right{
|
322
|
+
display:block;
|
323
|
+
margin-left:13px;
|
324
|
+
overflow:hidden;
|
325
|
+
float:right;
|
326
|
+
}
|
327
|
+
|
328
|
+
#epiceditor-preview span.float-right>span{
|
329
|
+
display:block;
|
330
|
+
overflow:hidden;
|
331
|
+
margin:13px auto 0;
|
332
|
+
text-align:right;
|
333
|
+
}
|
334
|
+
|
335
|
+
#epiceditor-preview code,
|
336
|
+
#epiceditor-preview tt{
|
337
|
+
margin:0 2px;
|
338
|
+
padding:0 5px;
|
339
|
+
white-space:nowrap;
|
340
|
+
border:1px solid #eaeaea;
|
341
|
+
background-color:#f8f8f8;
|
342
|
+
border-radius:3px;
|
343
|
+
}
|
344
|
+
|
345
|
+
#epiceditor-preview pre>code{
|
346
|
+
margin:0;
|
347
|
+
padding:0;
|
348
|
+
white-space:pre;
|
349
|
+
border:none;
|
350
|
+
background:transparent;
|
351
|
+
}
|
352
|
+
|
353
|
+
#epiceditor-preview .highlight pre,
|
354
|
+
#epiceditor-preview pre{
|
355
|
+
background-color:#f8f8f8;
|
356
|
+
border:1px solid #ccc;
|
357
|
+
font-size:13px;
|
358
|
+
line-height:19px;
|
359
|
+
overflow:auto;
|
360
|
+
padding:6px 10px;
|
361
|
+
border-radius:3px;
|
362
|
+
}
|
363
|
+
|
364
|
+
#epiceditor-preview pre code,
|
365
|
+
#epiceditor-preview pre tt{
|
366
|
+
background-color:transparent;
|
367
|
+
border:none;
|
368
|
+
}
|
@@ -0,0 +1,121 @@
|
|
1
|
+
html { padding:0 10px; }
|
2
|
+
|
3
|
+
body {
|
4
|
+
margin:0;
|
5
|
+
padding:10px 0;
|
6
|
+
background:#000;
|
7
|
+
}
|
8
|
+
|
9
|
+
#epiceditor-preview h1,
|
10
|
+
#epiceditor-preview h2,
|
11
|
+
#epiceditor-preview h3,
|
12
|
+
#epiceditor-preview h4,
|
13
|
+
#epiceditor-preview h5,
|
14
|
+
#epiceditor-preview h6,
|
15
|
+
#epiceditor-preview p,
|
16
|
+
#epiceditor-preview blockquote {
|
17
|
+
margin: 0;
|
18
|
+
padding: 0;
|
19
|
+
}
|
20
|
+
#epiceditor-preview {
|
21
|
+
background:#000;
|
22
|
+
font-family: "Helvetica Neue", Helvetica, "Hiragino Sans GB", Arial, sans-serif;
|
23
|
+
font-size: 13px;
|
24
|
+
line-height: 18px;
|
25
|
+
color: #ccc;
|
26
|
+
}
|
27
|
+
#epiceditor-preview a {
|
28
|
+
color: #fff;
|
29
|
+
}
|
30
|
+
#epiceditor-preview a:hover {
|
31
|
+
color: #00ff00;
|
32
|
+
text-decoration: none;
|
33
|
+
}
|
34
|
+
#epiceditor-preview a img {
|
35
|
+
border: none;
|
36
|
+
}
|
37
|
+
#epiceditor-preview p {
|
38
|
+
margin-bottom: 9px;
|
39
|
+
}
|
40
|
+
#epiceditor-preview h1,
|
41
|
+
#epiceditor-preview h2,
|
42
|
+
#epiceditor-preview h3,
|
43
|
+
#epiceditor-preview h4,
|
44
|
+
#epiceditor-preview h5,
|
45
|
+
#epiceditor-preview h6 {
|
46
|
+
color: #cdcdcd;
|
47
|
+
line-height: 36px;
|
48
|
+
}
|
49
|
+
#epiceditor-preview h1 {
|
50
|
+
margin-bottom: 18px;
|
51
|
+
font-size: 30px;
|
52
|
+
}
|
53
|
+
#epiceditor-preview h2 {
|
54
|
+
font-size: 24px;
|
55
|
+
}
|
56
|
+
#epiceditor-preview h3 {
|
57
|
+
font-size: 18px;
|
58
|
+
}
|
59
|
+
#epiceditor-preview h4 {
|
60
|
+
font-size: 16px;
|
61
|
+
}
|
62
|
+
#epiceditor-preview h5 {
|
63
|
+
font-size: 14px;
|
64
|
+
}
|
65
|
+
#epiceditor-preview h6 {
|
66
|
+
font-size: 13px;
|
67
|
+
}
|
68
|
+
#epiceditor-preview hr {
|
69
|
+
margin: 0 0 19px;
|
70
|
+
border: 0;
|
71
|
+
border-bottom: 1px solid #ccc;
|
72
|
+
}
|
73
|
+
#epiceditor-preview blockquote {
|
74
|
+
padding: 13px 13px 21px 15px;
|
75
|
+
margin-bottom: 18px;
|
76
|
+
font-family:georgia,serif;
|
77
|
+
font-style: italic;
|
78
|
+
}
|
79
|
+
#epiceditor-preview blockquote:before {
|
80
|
+
content:"\201C";
|
81
|
+
font-size:40px;
|
82
|
+
margin-left:-10px;
|
83
|
+
font-family:georgia,serif;
|
84
|
+
color:#eee;
|
85
|
+
}
|
86
|
+
#epiceditor-preview blockquote p {
|
87
|
+
font-size: 14px;
|
88
|
+
font-weight: 300;
|
89
|
+
line-height: 18px;
|
90
|
+
margin-bottom: 0;
|
91
|
+
font-style: italic;
|
92
|
+
}
|
93
|
+
#epiceditor-preview code, #epiceditor-preview pre {
|
94
|
+
font-family: Monaco, Andale Mono, Courier New, monospace;
|
95
|
+
}
|
96
|
+
#epiceditor-preview code {
|
97
|
+
background-color: #000;
|
98
|
+
color: #f92672;
|
99
|
+
padding: 1px 3px;
|
100
|
+
font-size: 12px;
|
101
|
+
-webkit-border-radius: 3px;
|
102
|
+
-moz-border-radius: 3px;
|
103
|
+
border-radius: 3px;
|
104
|
+
}
|
105
|
+
#epiceditor-preview pre {
|
106
|
+
display: block;
|
107
|
+
padding: 14px;
|
108
|
+
color:#66d9ef;
|
109
|
+
margin: 0 0 18px;
|
110
|
+
line-height: 16px;
|
111
|
+
font-size: 11px;
|
112
|
+
border: 1px solid #d9d9d9;
|
113
|
+
white-space: pre-wrap;
|
114
|
+
word-wrap: break-word;
|
115
|
+
}
|
116
|
+
#epiceditor-preview pre code {
|
117
|
+
background-color: #000;
|
118
|
+
color:#ccc;
|
119
|
+
font-size: 11px;
|
120
|
+
padding: 0;
|
121
|
+
}
|
@@ -0,0 +1,28 @@
|
|
1
|
+
Monologue::PostsRevision.class_eval do
|
2
|
+
before_validation do
|
3
|
+
if self.post.nil? || self.post.posts_revision_id.nil?
|
4
|
+
self.is_markdown = true
|
5
|
+
else
|
6
|
+
self.is_markdown = self.post.active_revision.is_markdown
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def is_markdown?
|
11
|
+
self.is_markdown != false
|
12
|
+
end
|
13
|
+
|
14
|
+
def content
|
15
|
+
if self.is_markdown? && !in_admin?(caller)
|
16
|
+
markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, :autolink => true, :space_after_headers => true)
|
17
|
+
return markdown.render(read_attribute(:content))
|
18
|
+
end
|
19
|
+
read_attribute(:content)
|
20
|
+
end
|
21
|
+
|
22
|
+
def in_admin? caller
|
23
|
+
caller.each do |c|
|
24
|
+
return true if c.include? "app/controllers/monologue/admin/posts_controller.rb"
|
25
|
+
end
|
26
|
+
return false
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
<div id="is_markdown" style="display:none"><%= @post.active_revision.is_markdown?%></div>
|
data/config/routes.rb
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
class AddIsMarkownToPostsRevision < ActiveRecord::Migration
|
2
|
+
def up
|
3
|
+
add_column :monologue_posts_revisions, :is_markdown, :boolean
|
4
|
+
::Monologue::PostsRevision.update_all(:is_markdown => false)
|
5
|
+
end
|
6
|
+
|
7
|
+
def down
|
8
|
+
remove_column :monologue_posts_revisions, :is_markdown
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require "deface"
|
2
|
+
require "redcarpet"
|
3
|
+
|
4
|
+
module MonologueMarkdown
|
5
|
+
class Engine < ::Rails::Engine
|
6
|
+
isolate_namespace MonologueMarkdown
|
7
|
+
|
8
|
+
config.generators.test_framework :rspec, :view_specs => false, :fixture => false
|
9
|
+
config.generators.stylesheets false
|
10
|
+
config.generators.fixture_replacement :factory_girl
|
11
|
+
config.generators.integration_tool :rspec
|
12
|
+
|
13
|
+
initializer :assets do |config|
|
14
|
+
Rails.application.config.assets.precompile += %w( monologue-markdown/epiceditor/themes/base/epiceditor.css monologue-markdown/epiceditor/themes/editor/epic-dark.css monologue-markdown/epiceditor/themes/preview/github.css )
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.activate
|
18
|
+
Dir.glob(File.join(File.dirname(__FILE__), "../../app/overrides/*.rb")) do |c|
|
19
|
+
Rails.env.production? ? require(c) : load(c)
|
20
|
+
end
|
21
|
+
|
22
|
+
Dir.glob(File.join(File.dirname(__FILE__), "../../app/**/*_decorator.rb")) do |c|
|
23
|
+
Rails.env.production? ? require(c) : load(c)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
config.to_prepare &method(:activate).to_proc
|
28
|
+
end
|
29
|
+
end
|
metadata
ADDED
@@ -0,0 +1,236 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: monologue-markdown
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 2
|
8
|
+
- 0
|
9
|
+
version: 0.2.0
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Jean-Philippe Boily
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2012-10-18 00:00:00 -04:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: rails
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ~>
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 3
|
29
|
+
- 2
|
30
|
+
- 8
|
31
|
+
version: 3.2.8
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: monologue
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
segments:
|
42
|
+
- 0
|
43
|
+
version: "0"
|
44
|
+
type: :runtime
|
45
|
+
version_requirements: *id002
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: deface
|
48
|
+
prerelease: false
|
49
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
segments:
|
54
|
+
- 0
|
55
|
+
version: "0"
|
56
|
+
type: :runtime
|
57
|
+
version_requirements: *id003
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: redcarpet
|
60
|
+
prerelease: false
|
61
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
62
|
+
requirements:
|
63
|
+
- - ">="
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
segments:
|
66
|
+
- 0
|
67
|
+
version: "0"
|
68
|
+
type: :runtime
|
69
|
+
version_requirements: *id004
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: jquery-rails
|
72
|
+
prerelease: false
|
73
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
segments:
|
78
|
+
- 0
|
79
|
+
version: "0"
|
80
|
+
type: :runtime
|
81
|
+
version_requirements: *id005
|
82
|
+
- !ruby/object:Gem::Dependency
|
83
|
+
name: rspec-rails
|
84
|
+
prerelease: false
|
85
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ~>
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
segments:
|
90
|
+
- 2
|
91
|
+
- 11
|
92
|
+
version: "2.11"
|
93
|
+
type: :development
|
94
|
+
version_requirements: *id006
|
95
|
+
- !ruby/object:Gem::Dependency
|
96
|
+
name: factory_girl_rails
|
97
|
+
prerelease: false
|
98
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - ~>
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
segments:
|
103
|
+
- 4
|
104
|
+
- 1
|
105
|
+
- 0
|
106
|
+
version: 4.1.0
|
107
|
+
type: :development
|
108
|
+
version_requirements: *id007
|
109
|
+
- !ruby/object:Gem::Dependency
|
110
|
+
name: capybara
|
111
|
+
prerelease: false
|
112
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - ">="
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
segments:
|
117
|
+
- 0
|
118
|
+
version: "0"
|
119
|
+
type: :development
|
120
|
+
version_requirements: *id008
|
121
|
+
- !ruby/object:Gem::Dependency
|
122
|
+
name: shoulda
|
123
|
+
prerelease: false
|
124
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
125
|
+
requirements:
|
126
|
+
- - ">="
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
segments:
|
129
|
+
- 0
|
130
|
+
version: "0"
|
131
|
+
type: :development
|
132
|
+
version_requirements: *id009
|
133
|
+
- !ruby/object:Gem::Dependency
|
134
|
+
name: guard-rspec
|
135
|
+
prerelease: false
|
136
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
137
|
+
requirements:
|
138
|
+
- - ">="
|
139
|
+
- !ruby/object:Gem::Version
|
140
|
+
segments:
|
141
|
+
- 0
|
142
|
+
version: "0"
|
143
|
+
type: :development
|
144
|
+
version_requirements: *id010
|
145
|
+
- !ruby/object:Gem::Dependency
|
146
|
+
name: database_cleaner
|
147
|
+
prerelease: false
|
148
|
+
requirement: &id011 !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
segments:
|
153
|
+
- 0
|
154
|
+
version: "0"
|
155
|
+
type: :development
|
156
|
+
version_requirements: *id011
|
157
|
+
- !ruby/object:Gem::Dependency
|
158
|
+
name: mysql2
|
159
|
+
prerelease: false
|
160
|
+
requirement: &id012 !ruby/object:Gem::Requirement
|
161
|
+
requirements:
|
162
|
+
- - ">="
|
163
|
+
- !ruby/object:Gem::Version
|
164
|
+
segments:
|
165
|
+
- 0
|
166
|
+
version: "0"
|
167
|
+
type: :development
|
168
|
+
version_requirements: *id012
|
169
|
+
description: A small and simple efficient extension to Monologue that replace the default WYSIWYG editor with a Markdown editor.
|
170
|
+
email:
|
171
|
+
- j@jipi.ca
|
172
|
+
executables: []
|
173
|
+
|
174
|
+
extensions: []
|
175
|
+
|
176
|
+
extra_rdoc_files: []
|
177
|
+
|
178
|
+
files:
|
179
|
+
- app/assets/images/monologue-markdown/epiceditor/edit.png
|
180
|
+
- app/assets/images/monologue-markdown/epiceditor/fullscreen.png
|
181
|
+
- app/assets/images/monologue-markdown/epiceditor/preview.png
|
182
|
+
- app/assets/javascripts/monologue-markdown/application.js
|
183
|
+
- app/assets/javascripts/monologue-markdown/epiceditor/epiceditor.min.js.erb
|
184
|
+
- app/assets/javascripts/monologue-markdown/epiceditor_load.coffee.erb
|
185
|
+
- app/assets/stylesheets/monologue-markdown/application.css
|
186
|
+
- app/assets/stylesheets/monologue-markdown/epiceditor/themes/base/epiceditor.css
|
187
|
+
- app/assets/stylesheets/monologue-markdown/epiceditor/themes/editor/epic-dark.css
|
188
|
+
- app/assets/stylesheets/monologue-markdown/epiceditor/themes/editor/epic-light.css
|
189
|
+
- app/assets/stylesheets/monologue-markdown/epiceditor/themes/preview/github.css
|
190
|
+
- app/assets/stylesheets/monologue-markdown/epiceditor/themes/preview/preview-dark.css
|
191
|
+
- app/models/monologue/posts_revision_decorator.rb
|
192
|
+
- app/overrides/insert_epiceditor_in_admin.rb
|
193
|
+
- app/overrides/insert_is_markdown_in_post_edit.rb
|
194
|
+
- app/views/monologue-markdown/overrides/_epiceditor.html.erb
|
195
|
+
- app/views/monologue-markdown/overrides/_is_markdown.html.erb
|
196
|
+
- config/routes.rb
|
197
|
+
- db/migrate/20120924111013_add_is_markown_to_posts_revision.rb
|
198
|
+
- lib/monologue-markdown/engine.rb
|
199
|
+
- lib/monologue-markdown/version.rb
|
200
|
+
- lib/monologue-markdown.rb
|
201
|
+
- lib/tasks/monologue-markdown_tasks.rake
|
202
|
+
- MIT-LICENSE
|
203
|
+
- Rakefile
|
204
|
+
- README.md
|
205
|
+
has_rdoc: true
|
206
|
+
homepage: https://github.com/jipiboily/monologue-markdown
|
207
|
+
licenses: []
|
208
|
+
|
209
|
+
post_install_message:
|
210
|
+
rdoc_options: []
|
211
|
+
|
212
|
+
require_paths:
|
213
|
+
- lib
|
214
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
215
|
+
requirements:
|
216
|
+
- - ">="
|
217
|
+
- !ruby/object:Gem::Version
|
218
|
+
segments:
|
219
|
+
- 0
|
220
|
+
version: "0"
|
221
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
222
|
+
requirements:
|
223
|
+
- - ">="
|
224
|
+
- !ruby/object:Gem::Version
|
225
|
+
segments:
|
226
|
+
- 0
|
227
|
+
version: "0"
|
228
|
+
requirements: []
|
229
|
+
|
230
|
+
rubyforge_project:
|
231
|
+
rubygems_version: 1.3.6
|
232
|
+
signing_key:
|
233
|
+
specification_version: 3
|
234
|
+
summary: A small and simple efficient extension to Monologue that replace the default WYSIWYG editor with a Markdown editor.
|
235
|
+
test_files: []
|
236
|
+
|