NOTICE: please use tinymce instead. ( 请使用 tinymce), refer to: http://siwei.me/blog/posts/using-tinymce-in-rails
steps:
1. download the source code from official website
2. in your page:
<script src="/path-to-wysihtml5/parser_rules/advanced.js"> <script src="/path-to-wysihtml5/dist/wysihtml5-0.3.0.min.js">
create the tool bar
<div id="wysihtml5-toolbar" style='display:none;'>
<header>
<ul class="commands">
<li data-wysihtml5-command="bold" title="Make text bold (CTRL + B)" class="command"></li>
<li data-wysihtml5-command="italic" title="Make text italic (CTRL + I)" class="command"></li>
<li data-wysihtml5-command="insertUnorderedList" title="Insert an unordered list" class="command"></li>
<li data-wysihtml5-command="insertOrderedList" title="Insert an ordered list" class="command"></li>
<li data-wysihtml5-command="createLink" title="Insert a link" class="command"></li>
<li data-wysihtml5-command="insertImage" title="Insert an image" class="command"></li>
<li data-wysihtml5-command="formatBlock" data-wysihtml5-command-value="h1" title="Insert headline 1" class="command"></li>
<li data-wysihtml5-command="formatBlock" data-wysihtml5-command-value="h2" title="Insert headline 2" class="command"></li>
<li data-wysihtml5-command-group="foreColor" class="fore-color" title="Color the selected text" class="command">
<ul>
<li data-wysihtml5-command="foreColor" data-wysihtml5-command-value="silver"></li>
<li data-wysihtml5-command="foreColor" data-wysihtml5-command-value="gray"></li>
<li data-wysihtml5-command="foreColor" data-wysihtml5-command-value="maroon"></li>
<li data-wysihtml5-command="foreColor" data-wysihtml5-command-value="red"></li>
<li data-wysihtml5-command="foreColor" data-wysihtml5-command-value="purple"></li>
<li data-wysihtml5-command="foreColor" data-wysihtml5-command-value="green"></li>
<li data-wysihtml5-command="foreColor" data-wysihtml5-command-value="olive"></li>
<li data-wysihtml5-command="foreColor" data-wysihtml5-command-value="navy"></li>
<li data-wysihtml5-command="foreColor" data-wysihtml5-command-value="blue"></li>
</ul>
</li>
<li data-wysihtml5-command="insertSpeech" title="Insert speech" class="command"></li>
<li data-wysihtml5-action="change_view" title="Show HTML" class="action"></li>
</ul>
</header>
<div data-wysihtml5-dialog="createLink" style="display: none;">
<label>
Link:
<input data-wysihtml5-dialog-field="href" value="http://">
</label>
<a data-wysihtml5-dialog-action="save">OK</a> <a data-wysihtml5-dialog-action="cancel">Cancel</a>
</div>
<div data-wysihtml5-dialog="insertImage" style="display: none;">
<label>
Image:
<input data-wysihtml5-dialog-field="src" value="http://">
</label>
<a data-wysihtml5-dialog-action="save">OK</a> <a data-wysihtml5-dialog-action="cancel">Cancel</a>
</div>
</div>
use this css file: (save as: wysihtml5.css )
#wysihtml5-editor-toolbar {
position: relative;
}
header {
display: block;
border-radius: 4px;
width: 810px;
background: #f6f6f6;
position: relative;
z-index: 1;
text-align: center;
border: 1px solid #ddd\9; /* IE 8 and below */
background-image: linear-gradient(bottom, rgb(238,238,238) 0%, rgb(255,255,255) 100%);
background-image: -o-linear-gradient(bottom, rgb(238,238,238) 0%, rgb(255,255,255) 100%);
background-image: -moz-linear-gradient(bottom, rgb(238,238,238) 0%, rgb(255,255,255) 100%);
background-image: -webkit-linear-gradient(bottom, rgb(238,238,238) 0%, rgb(255,255,255) 100%);
background-image: -ms-linear-gradient(bottom, rgb(238,238,238) 0%, rgb(255,255,255) 100%);
box-shadow: 0 0 4px 1px rgba(0, 0, 0, 0.3);
font-size: 0;
text-align: center;
}
.commands {
border-left: 1px solid #ddd;
display: inline-block;
}
[data-wysihtml5-command],
[data-wysihtml5-action],
.fore-color {
position: relative;
border-right: 1px solid #ddd;
border-left: 1px solid #fff;
list-style: none;
font-size: 12px;
display: inline-block;
cursor: pointer;
height: 40px;
width: 68px;
}
[data-wysihtml5-command]:after,
[data-wysihtml5-action]:after,
.fore-color:after {
content: "";
background-image: url(../img/spr_toolbar_icons_r1.png);
background-repeat: no-repeat;
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
}
[data-wysihtml5-command]:hover,
[data-wysihtml5-action]:hover,
.fore-color:hover {
background-image: linear-gradient(bottom, rgb(229,240,226) 0%, rgb(255,255,255) 100%);
background-image: -o-linear-gradient(bottom, rgb(229,240,226) 0%, rgb(255,255,255) 100%);
background-image: -moz-linear-gradient(bottom, rgb(229,240,226) 0%, rgb(255,255,255) 100%);
background-image: -webkit-linear-gradient(bottom, rgb(229,240,226) 0%, rgb(255,255,255) 100%);
background-image: -ms-linear-gradient(bottom, rgb(229,240,226) 0%, rgb(255,255,255) 100%);
}
[data-wysihtml5-command="bold"]:after {
background-position: 24px center;
}
[data-wysihtml5-command="italic"]:after {
background-position: -48px center;
}
[data-wysihtml5-command="insertUnorderedList"]:after {
background-position: -115px center;
}
[data-wysihtml5-command="insertOrderedList"]:after {
background-position: -197px center;
}
[data-wysihtml5-command="formatBlock"][data-wysihtml5-command-value="h1"]:after {
background-position: -344px center;
}
[data-wysihtml5-command="formatBlock"][data-wysihtml5-command-value="h2"]:after {
background-position: -428px center;
}
[data-wysihtml5-command="createLink"]:after {
background-position: -271px center;
}
[data-wysihtml5-command="insertImage"]:after {
background-position: -513px center;
}
.fore-color:after {
background-position: -741px center;
}
[data-wysihtml5-command="insertSpeech"]:after {
background-position: -596px center;
}
[data-wysihtml5-action="change_view"]:after {
background-position: -670px center;
}
.fore-color ul {
display: none;
position: absolute;
z-index: 2;
top: 40px;
right: -1px;
left: -2px;
border: 1px solid #ccc;
border-top: 0;
background: #fff;
overflow: hidden;
}
.fore-color li {
display: block;
margin: 3px;
width: auto;
border: 0;
height: 15px;
}
.fore-color li:after {
display: none;
}
.fore-color:hover ul {
display: block;
}
.fore-color [data-wysihtml5-command-value="silver"] {
background: silver !important;
}
.fore-color [data-wysihtml5-command-value="gray"] {
background: gray !important;
}
.fore-color [data-wysihtml5-command-value="maroon"] {
background: maroon !important;
}
.fore-color [data-wysihtml5-command-value="red"] {
background: red !important;
}
.fore-color [data-wysihtml5-command-value="purple"] {
background: purple !important;
}
.fore-color [data-wysihtml5-command-value="green"] {
background: green !important;
}
.fore-color [data-wysihtml5-command-value="olive"] {
background: olive !important;
}
.fore-color [data-wysihtml5-command-value="navy"] {
background: navy !important;
}
.fore-color [data-wysihtml5-command-value="blue"] {
background: blue !important;
}
.fore-color .wysihtml5-command-active {
outline: 1px solid #666;
outline-offset: 1px;
}
.wysihtml5-commands-disabled .fore-color ul {
display: none;
}
.wysihtml5-action-active,
.wysihtml5-command-active {
box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.2);
background: #eee !important;
}
.wysihtml5-commands-disabled [data-wysihtml5-command],
.wysihtml5-commands-disabled .fore-color {
opacity: 0.4;
cursor: default;
background-image: none !important;
}
[data-wysihtml5-dialog] {
color: #333;
font-size: 14px;
text-align: left;
border-radius: 4px;
-ms-box-sizing: border-box;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
border: 1px solid #ccc;
padding: 5px 10px;
background: #FFFBE0;
position: absolute;
width: 810px;
text-align: center;
top: 45px;
}
[data-wysihtml5-dialog] input {
color: #333;
border: 1px solid #ccc;
padding: 3px;
width: 300px;
}
[data-wysihtml5-dialog] input:focus {
outline: 0;
border: 1px solid #666;
}
[data-wysihtml5-dialog-action] {
padding: 4px;
color: #fff;
cursor: pointer;
}
[data-wysihtml5-dialog-action="save"] {
background: #007200;
}
[data-wysihtml5-dialog-action="cancel"] {
background: #999;
}
3. init the js script
<script>
var editor = new wysihtml5.Editor("wysihtml5-textarea", { // id of textarea element
toolbar: "wysihtml5-toolbar", // id of toolbar element
parserRules: wysihtml5ParserRules // defined in parser rules set
});
</script>
4. $ wget http://xing.github.io/wysihtml5/img/spr_toolbar_icons_r1.png, copy it to /app/assets/images
$ mv spr_toolbar_icons_r1.png/app/assets/images/wysihtml5_toolbar_icons.png
5. edit wysihtml5.css:
change: url(../img/spr_toolbar_icons_r1.png); to: url('/assets/wysihtml5_toolbar_icons.png');6. another css
html {
background: transparent;
}
body {
margin-bottom: 25px;
}
h1, h2 {
line-height: 1;
font-family: Rockwell, "Courier New", Courier, Georgia;
border-bottom: 1px solid #999;
font-weight: bold;
margin: 0 5px 25px 0;
padding: 0 0 8px;
}
h1 {
font-size: 27px;
}
h2 {
font-size: 18px;
}
p, li {
line-height: 1.5;
}
p, ul, ol {
padding-bottom: 25px;
}
a {
color: inherit;
}
strong, b {
font-weight: bold;
}
i, em {
font-style: italic;
}
li {
margin-left: 30px;
}
ul li {
list-style: disc outside;
}
ol li {
list-style: decimal outside;
}
li img {
vertical-align: middle;
margin: 2px 5px 5px 0;
}
.wysiwyg-color-black {
color: black;
}
.wysiwyg-color-silver {
color: silver;
}
.wysiwyg-color-gray {
color: gray;
}
.wysiwyg-color-white {
color: white;
}
.wysiwyg-color-maroon {
color: maroon;
}
.wysiwyg-color-red {
color: red;
}
.wysiwyg-color-purple {
color: purple;
}
.wysiwyg-color-fuchsia {
color: fuchsia;
}
.wysiwyg-color-green {
color: green;
}
.wysiwyg-color-lime {
color: lime;
}
.wysiwyg-color-olive {
color: olive;
}
.wysiwyg-color-yellow {
color: yellow;
}
.wysiwyg-color-navy {
color: navy;
}
.wysiwyg-color-blue {
color: blue;
}
.wysiwyg-color-teal {
color: teal;
}
.wysiwyg-color-aqua {
color: aqua;
}
7. change the init js code
<%= render :partial => 'layouts/wysihtml5_toolbar' %>
<%= f.text_area :content, {:style=>'width:810px; height: 1000px', :id => 'wysihtml5-textarea'} %>
<%= coffee_script_tag do %>
$ ->
editor = new wysihtml5.Editor "wysihtml5-textarea",
toolbar: "wysihtml5-toolbar",
parserRules: wysihtml5ParserRules
stylesheets: ['/assets/wysihtml5', '/assets/wysihtml5-reset-min', '/assets/wysihtml5_editor' ]
<% end %>