📄 iblogeditorcom.js
字号:
this.execute = function( txtId, param )
{
textArea = document.getElementById(txtId);
this.toggle();
imgSrc = prompt('Enter the image source (including the http://):');
if( imgSrc == null ) {
this.toggle();
return '';
}
/* imgAlt = prompt('Enter an image description:');
if( imgAlt == null ) {
this.toggle();
return '';
}
*/
this.toggle();
// if everything went fine, add the link and return
var imgTag = '<img src="' + imgSrc + '" alt="" />';
return imgTag;
}
}
/**
* implements drop-down lists
*/
edButtonList = function( id, options )
{
//
// strange javascript thingies used for object inheritance...
//
this.prototype = new edButton(id, '', '', '', '', -1 );
this.prototype.constructor = edButton;
this.superclass = edButton;
this.options = options;
this.superclass(id, '', '', '', '', -1 );
/**
* renders the button. In our case, creates a drop-down list with the available options
*
* @param txtId
* @returns the markup that is going to be written to the document
*/
this.show = function(txtId, objName)
{
selectBox = '<select class="editorDropDownList" name=\''+this.id+'\' onChange="'+objName+'.execute(\'' + txtId + '\', \'' + this.id + '\', this);">';
for( var key in this.options ) {
selectBox += '<option value=\''+key+'\'>'+this.options[key]+'</option>';
}
selectBox += '</select>';
return( selectBox );
}
/**
* reimplement this method for lists that should behave in a particular way when an option
* is selected
*/
this.execute = function( txtId, param )
{
// param is the drop-down list that generated the event, so we can easily learn
// more about what was selected by
opt = param.selectedIndex;
return( param.options[opt].value );
}
/**
* does nothing
*/
this.surround = function( txtId, param )
{
surroundInfo = Array();
return( surroundInfo );
}
}
/**
* button that shows a list with different font sizes
*/
edFontSizeList = function( id, options )
{
//
// strange javascript thingies used for object inheritance...
//
this.prototype = new edButtonList(id, options );
this.prototype.constructor = edButtonList;
this.superclass = edButtonList;
this.superclass(id, options );
/**
* returns the right <span style=...></span> markup
*/
this.execute = function( txtId, param )
{
// param is the drop-down list that generated the event, so we can easily learn
// more about what was selected in the dropdown list
opt = param.selectedIndex;
fontSizePt = param.options[opt].value;
spanCode = '<span style="font-size:12px;"></span>';
return( spanCode );
}
/**
* surrouns the selected text with the right <span>...</span> tags
*/
this.surround = function( txtId, param )
{
opt = param.selectedIndex;
fontSizePt = param.options[opt].value;
surroundInfo = Array();
surroundInfo['start'] = '<span style="font-size: 12px;">';
surroundInfo['end'] = '</span>';
return( surroundInfo );
}
}
/**
* main class
*
*/
iBlogEditor = function(txtId, objName)
{
// class attributes
this.txtId = txtId;
this.objName = objName;
// array with all the open tags that haven't been closed
this.tagStack = new Array();
this.debug = false;
// --
// our very own toolbar
// --
this.toolBar = Array();
// this.toolBar['1_but_b'] = new edButton( '1_but_b', 'bold', '<b>', '</b>', 'ed_format_bold.gif', -1 );
// this.toolBar['2_but_i'] = new edButton( '2_but_i', 'italics', '<i>', '</i>', 'ed_format_italic.gif', -1 );
// this.toolBar['3_but_u'] = new edButton( '3_but_u', 'underline', '<u>', '</u>', 'ed_format_underline.gif', -1 );
// this.toolBar['4_but_strikethrough'] = new edButton( '4_but_strikethrough', 'strikethrough', '<s>', '</s>', 'ed_format_strike.gif',-1);
// this.toolBar['but_sep2'] = new edButtonSeparator();
// this.toolBar['but_sep2'] = new edButtonSeparator();
this.toolBar['5_but_a'] = new edButtonLink( '5_but_a', 'Insert link', '../../../tinymce/themes/advanced/images/link.gif' );
this.toolBar['6_but_img']= new edButtonImage( '6_but_img', 'Insert image', '../../../tinymce/themes/advanced/images/image.gif' );
/**
* returns whether our browser supports the features that we are going
* to use or not
*
* @return true if supported, false if not
*/
this.isSupportedBrowser = function()
{
return( document.getElementById || document.all );
}
/**
* draws the buttons. Takes no parameters
*
* @return nothing
*/
this.showToolbar = function() {
// first of all, check for unsupported browsers. If the browser
// is not supported, we will silently not do anything... since we won't
// even print the toolbar! (and nothing will happen without a toolbar)
if( !this.isSupportedBrowser())
return;
markup = '';
this.toolBar.sort();
document.write('<div class="textEditorToolbar" id="textEditorToolbar">');
for( var buttonId in this.toolBar ) {
button = this.toolBar[buttonId];
markup += button.show(this.txtId, this.objName);
}
document.write(markup);
document.write('</div>');
if( this.debug ) {
document.write('<textarea>'+markup+'</textarea>');
}
}
// after initializing the buttons, we can generate the toolbar
// we can't call this method after defining it!! :)
this.showToolbar();
/**
* calls the edButton.execute() callback
*
* @param txtId
* @param buttonId
* @return nothing
*/
this.execute = function( txtId, buttonId, param )
{
// get the button from the array
var edButton = this.toolBar[buttonId];
// execute the button
if( !this.selectionExists()) {
result = edButton.execute( txtId, param );
if( result != 'undefined' )
this.insertText( result );
}
else {
surroundInfo = edButton.surround( txtId, param );
this.surroundText( surroundInfo['start'], surroundInfo['end'] );
}
}
/**
* returns the textarea object associated to this editor
*
* @return a textarea object
*/
this.getTextArea = function()
{
textArea = document.getElementById( this.txtId );
return textArea;
}
/**
* calls the onMouseOver handler for this button
*
* @param txtId
* @param buttonId
*/
this.mouseOver = function( txtId, buttonId )
{
var edButton = this.toolBar[buttonId];
edButton.mouseOver();
}
/**
* calls the onMouseOut handler for this button
*
* @param txtId
* @param buttonId
*/
this.mouseOut = function( txtId, buttonId )
{
var edButton = this.toolBar[buttonId];
edButton.mouseOut();
}
/**
* inserts text where the cursor is
*
* @param myField
* @param myValue
* @return nothing
*/
this.insertText = function(myValue)
{
myField = this.getTextArea();
//IE support
if (document.selection) {
myField.focus();
sel = document.selection.createRange();
sel.text = myValue;
myField.focus();
}
//MOZILLA/NETSCAPE support
else if (myField.selectionStart || myField.selectionStart == '0') {
var startPos = myField.selectionStart;
var endPos = myField.selectionEnd;
myField.value = myField.value.substring(0, startPos)
+ myValue
+ myField.value.substring(endPos, myField.value.length);
myField.focus();
myField.selectionStart = startPos + myValue.length;
myField.selectionEnd = startPos + myValue.length;
} else {
myField.value += myValue;
myField.focus();
}
}
/**
* surrounds the current selection with the given opening and closing texts
*
* @param myValueOpen
* @param myValueClose
*/
this.surroundText = function( myValueOpen, myValueClose )
{
myField = this.getTextArea();
if (document.selection) {
myField.focus();
sel = document.selection.createRange();
sel.text = myValueOpen + sel.text + myValueClose;
myField.focus();
}
else if (myField.selectionStart || myField.selectionStart == '0') {
var startPos = myField.selectionStart;
var endPos = myField.selectionEnd;
var cursorPos = endPos;
myField.value = myField.value.substring(0, startPos)
+ myValueOpen
+ myField.value.substring(startPos, endPos)
+ myValueClose
+ myField.value.substring(endPos, myField.value.length);
cursorPos += myValueOpen.length + myValueClose.length;
myField.selectionStart = cursorPos;
myField.selectionEnd = cursorPos;
myField.focus();
}
else {
myField.value += myValueOpen;
myField.focus();
}
}
/**
* returns whether there is a user selection in the given editor
*
* @return True if there is a selection or false otherwise
*/
this.selectionExists = function()
{
var selection = false;
var myField = this.getTextArea();
if (document.selection) {
// for IE
myField.focus();
sel = document.selection.createRange();
selection = (sel.text != '' );
myField.focus();
}
else if (myField.selectionStart || myField.selectionStart == '0') {
// for Mozilla
selection = (myField.selectionEnd > myField.selectionStart)
}
else {
// for everybody else...
selection = false;
}
return selection;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -