////////// LJ User Button ////////////// var LJUserCommand=function(){ }; LJUserCommand.prototype.Execute=function(){ } LJUserCommand.GetState=function() { return FCK_TRISTATE_OFF; //we dont want the button to be toggled } LJUserCommand.Execute=function() { var username; var selection = ''; var UserTagCache = window.parent.UserTagCache; if (FCK.EditorWindow.getSelection) { selection = FCK.EditorWindow.getSelection(); // Create a new div to clone the selection's content into var d = FCK.EditorDocument.createElement('DIV'); for (var i = 0; i < selection.rangeCount; i++) { d.appendChild(selection.getRangeAt(i).cloneContents()); } selection = d.innerHTML; } else if (FCK.EditorDocument.selection) { var range = FCK.EditorDocument.selection.createRange(); var type = FCKSelection.GetType(); if (type == 'Control') { selection = range.item(0).outerHTML; } else if (type == 'None') { selection = ''; } else { selection = range.htmlText; } } function do_insert( username, site ) { var postData = { "username" : username || '', "site" : site || '' }; if (username == null) return; var url = window.parent.Site.siteroot + "/tools/endpoints/ljuser"; var gotError = function(err) { alert(err); } var gotInfo = function (data) { if (data.error) { alert(data.error); return; } if (!data.success) return; if ( site ) data.ljuser = data.ljuser.replace(//,'
'); else data.ljuser = data.ljuser.replace(//,'
'); data.ljuser = data.ljuser.replace(/<\/span>/,'
'); UserTagCache[username + "_" + site] = data.ljuser; FCK.InsertHtml(data.ljuser + " "); if (selection != '') FCKSelection.Collapse(); FCK.Focus(); } if ( UserTagCache[postData.username+"_"+postData.site] ) { FCK.InsertHtml(UserTagCache[postData.username+"_"+postData.site] + " "); if (selection != '') FCKSelection.Collapse(); FCK.Focus(); } else { var opts = { "data": window.parent.HTTPReq.formEncoded(postData), "method": "POST", "url": url, "onError": gotError, "onData": gotInfo }; window.parent.HTTPReq.getJSON(opts); } } if (selection != '') { username = selection; do_insert( username ); } else { var DOM = window.parent.DOM; var _textDiv = window.parent._textDiv; var userPopup = new window.parent.LJ_IPPU( window.parent.FCKLang.UserPrompt ); userPopup.hide = function() { window.parent.LJ_IPPU.superClass.hide.apply(this); DOM.removeEventListener( window.parent.document, "keyup", LJUserCommand.KeyUpHandler ); } var inner = document.createElement( "div" ); DOM.addClassName( inner, "userprompt" ); var label = document.createElement( "label" ); label.appendChild( _textDiv( window.parent.FCKLang.UserPrompt_User ) ); label.setAttribute( "for", "userprompt-username" ); inner.appendChild( label ); var username = document.createElement( "input" ); username.name = "username"; username.id = "userprompt-username"; inner.appendChild( username ); label = document.createElement( "label" ); label.appendChild( _textDiv( window.parent.FCKLang.UserPrompt_Site ) ); label.setAttribute( "for", "userprompt-site" ); inner.appendChild( label ); var siteList = document.createElement( "select" ); siteList.name = "site"; siteList.id = "userprompt-site"; var option = new Option( "--", "" ); option.selected = "selected"; siteList.appendChild( option ); inner.appendChild( siteList ); for ( var i = 0; i < window.parent.FCKLang.UserPrompt_SiteList.length; i++ ) { var site = window.parent.FCKLang.UserPrompt_SiteList[i]; var option = new Option( site.sitename, site.domain ); siteList.appendChild( option ); } var btncont = document.createElement( "div" ); DOM.addClassName( btncont, "submitbtncontainer" ); var btn = document.createElement( "input" ); DOM.addClassName ( btn, "submitbtn" ); btn.type = "button"; btn.value = "Insert"; btncont.appendChild( btn ); inner.appendChild( btncont ); userPopup.setContentElement( inner ); userPopup.setAutoCenter( true, true ); userPopup.setDimensions( "15em", "auto" ); userPopup.show(); username.focus(); DOM.addEventListener( window.parent.document, "keyup", function(userPopup) { return LJUserCommand.KeyUpHandler = function(e) { var code = e.keyCode || e.which; // enter if ( code == 13 ) { userPopup.hide(); do_insert( username.value, siteList.value ); return; } // escape if ( code == 27 ) { userPopup.hide(); return; } } }(userPopup) ); DOM.addEventListener( btn, "click", function (e) { userPopup.hide(); do_insert( username.value, siteList.value ); } ); } return false; } FCKCommands.RegisterCommand('LJUserLink', LJUserCommand ); //otherwise our command will not be found // Create the toolbar button. var oLJUserLink = new FCKToolbarButton('LJUserLink', window.parent.FCKLang.LJUser); oLJUserLink.IconPath = FCKConfig.PluginsPath + 'livejournal/dwuser.png' ; // Register the button to use in the config FCKToolbarItems.RegisterItem('LJUserLink', oLJUserLink) ; ////////// LJ Embed Media Button ////////////// var LJEmbedCommand=function(){}; LJEmbedCommand.prototype.Execute=function(){}; LJEmbedCommand.GetState=function() { return FCK_TRISTATE_OFF; //we dont want the button to be toggled } LJEmbedCommand.Execute=function() { var html; var selection = ''; FCKSelection.Save(); function do_embed (content) { if (content != null && content != '') { // Make the tag like the editor would var html_final = "
" + content + "

"; FCKSelection.Restore(); FCK.InsertHtml(html_final); FCKSelection.Collapse(); FCK.Focus(); } } if (selection != '') { html = selection; do_embed(html); } else { var prompt = window.parent.FCKLang.EmbedContents; top.LJ_IPPU.textPrompt(window.parent.FCKLang.EmbedPrompt, prompt, do_embed); } return; } FCKCommands.RegisterCommand('LJEmbedLink', LJEmbedCommand ); //otherwise our command will not be found // Create embed media button var oLJEmbedLink = new FCKToolbarButton('LJEmbedLink', window.parent.FCKLang.LJVideo); oLJEmbedLink.IconPath = FCKConfig.PluginsPath + 'livejournal/ljvideo.gif' ; // Register the button to use in the config FCKToolbarItems.RegisterItem('LJEmbedLink', oLJEmbedLink) ; ////////// LJ Cut Button ////////////// var LJCutCommand=function(){ }; LJCutCommand.prototype.Execute=function(){ } LJCutCommand.GetState=function() { return FCK_TRISTATE_OFF; //we dont want the button to be toggled } LJCutCommand.Execute=function() { var text = prompt(window.parent.FCKLang.CutPrompt, window.parent.FCKLang.ReadMore); if (text == window.parent.FCKLang.ReadMore) { text = ''; } else { text = text.replace('"', '\"'); text = ' text="' + text + '"'; } var selection = ''; if (FCK.EditorWindow.getSelection) { selection = FCK.EditorWindow.getSelection(); // Create a new div to clone the selection's content into var d = FCK.EditorDocument.createElement('DIV'); for (var i = 0; i < selection.rangeCount; i++) { d.appendChild(selection.getRangeAt(i).cloneContents()); } selection = d.innerHTML; } else if (FCK.EditorDocument.selection) { var range = FCK.EditorDocument.selection.createRange(); var type = FCKSelection.GetType(); if (type == 'Control') { selection = range.item(0).outerHTML; } else if (type == 'None') { selection = ''; } else { selection = range.htmlText; } } if (selection != '') { selection += ''; // Cast it to a string } else { selection += window.parent.FCKLang.CutContents; } var html = "
"; html += selection; html += "
"; FCK.InsertHtml(html); FCK.Focus(); return; } FCKCommands.RegisterCommand('LJCutLink', LJCutCommand ); //otherwise our command will not be found // Create the toolbar button. var oLJCutLink = new FCKToolbarButton('LJCutLink', window.parent.FCKLang.LJCut); oLJCutLink.IconPath = FCKConfig.PluginsPath + 'livejournal/ljcut.gif' ; // Register the button to use in the config FCKToolbarItems.RegisterItem('LJCutLink', oLJCutLink) ; ////////// LJ Poll Button ////////////// var LJPollCommand=function(){ }; LJPollCommand.prototype.Execute=function(){ } LJPollCommand.GetState=function() { return FCK_TRISTATE_OFF; //we dont want the button to be toggled } LJPollCommand.Add=function(pollsource, index) { var poll = pollsource; if (poll != null && poll != '') { // Make the tag like the editor would var html = "
"+poll+"
"; // IE and Safari handle Selections differently and InsertHtml // will not overwrite the enclosing DIVs in those browsers, // so just replace the selected polls innerHTML if (FCK.Selection.Element) { FCK.Selection.Element.innerHTML = poll; } else { FCK.InsertHtml(html); } } return; } LJPollCommand.setKeyPressHandler=function() { var editor = FCK.EditorWindow.document; if (editor) { if (editor.addEventListener) { editor.addEventListener('keypress', LJPollCommand.ippu, false); editor.addEventListener('click', LJPollCommand.ippu, false); } else if (editor.attachEvent) { editor.attachEvent('onkeypress', function() { LJPollCommand.ippu(FCK.EditorWindow.event); } ); editor.attachEvent('onclick', function() { LJPollCommand.ippu(FCK.EditorWindow.event); } ); } else { editor.onkeypress = LJPollCommand.ippu; } } } LJPollCommand.ippu=function(evt) { evt = evt || window.event; var node = FCKSelection.GetAncestorNode( 'DIV' ); if (evt && node && node.id.match(/poll\d+/)) { var ele = top.document.getElementById("draft___Frame"); var href = "href='javascript:Poll.callRichTextEditor()'"; var notice = parent.LJ_IPPU.showNote("Polls must be edited inside the Poll Wizard
Go to poll wizard", ele); notice.centerOnWidget(ele); if (parent.Event.stop) parent.Event.stop(evt); } } // For handling when polls are not available to a user var LJNoPoll=function(){ }; LJNoPoll.prototype.Execute=function(){ } LJNoPoll.GetState=function() { return FCK_TRISTATE_OFF; //we dont want the button to be toggled } LJNoPoll.Execute=function() { var ele = top.document.getElementById("draft___Frame"); var notice = top.LJ_IPPU.showNote("You may only create and post polls if you have a Plus or Paid Account or if you are posting the poll to a Plus or Paid community that you maintain.", ele); notice.centerOnWidget(ele); return; } if (top.canmakepoll == false) { FCKCommands.RegisterCommand('LJPollLink', LJNoPoll); } else { FCKCommands.RegisterCommand('LJPollLink', new FCKDialogCommand( 'LJPollCommand', 'Poll Wizard', '/tools/fck_poll.bml', 420, 370 )); } // Create the toolbar button. var oLJPollLink = new FCKToolbarButton('LJPollLink', 'Poll'); oLJPollLink.IconPath = FCKConfig.PluginsPath + 'livejournal/ljpoll.gif' ; // Register the button to use in the config FCKToolbarItems.RegisterItem('LJPollLink', oLJPollLink) ; // Custom Converter for pasting from Word // Original source taken from fck_paste.html FCK.CustomCleanWord = function( oNode, bIgnoreFont, bRemoveStyles ) { var html = oNode.innerHTML ; html = html.replace(/\s*<\/o:p>/g, '') ; html = html.replace(/[\s\S]*?<\/o:p>/g, ' ') ; // Remove mso-xxx styles. html = html.replace( /\s*mso-[^:]+:[^;"]+;?/gi, '' ) ; // Remove margin styles. html = html.replace( /\s*MARGIN: 0cm 0cm 0pt\s*;/gi, '' ) ; html = html.replace( /\s*MARGIN: 0cm 0cm 0pt\s*"/gi, "\"" ) ; html = html.replace( /\s*TEXT-INDENT: 0cm\s*;/gi, '' ) ; html = html.replace( /\s*TEXT-INDENT: 0cm\s*"/gi, "\"" ) ; html = html.replace( /\s*TEXT-ALIGN: [^\s;]+;?"/gi, "\"" ) ; html = html.replace( /\s*PAGE-BREAK-BEFORE: [^\s;]+;?"/gi, "\"" ) ; html = html.replace( /\s*FONT-VARIANT: [^\s;]+;?"/gi, "\"" ) ; html = html.replace( /\s*tab-stops:[^;"]*;?/gi, '' ) ; html = html.replace( /\s*tab-stops:[^"]*/gi, '' ) ; // Remove FONT face attributes. if ( bIgnoreFont ) { html = html.replace( /\s*face="[^"]*"/gi, '' ) ; html = html.replace( /\s*face=[^ >]*/gi, '' ) ; html = html.replace( /\s*FONT-FAMILY:[^;"]*;?/gi, '' ) ; } // Remove Class attributes html = html.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi, "<$1$3") ; // Remove styles. if ( bRemoveStyles ) html = html.replace( /<(\w[^>]*) style="([^\"]*)"([^>]*)/gi, "<$1$3" ) ; // Remove style, meta and link tags html = html.replace( /]*>[\s\S]*?<\/STYLE[^>]*>/gi, '' ) ; html = html.replace( /<(?:META|LINK)[^>]*>\s*/gi, '' ) ; // Remove empty styles. html = html.replace( /\s*style="\s*"/gi, '' ) ; html = html.replace( /]*>\s* \s*<\/SPAN>/gi, ' ' ) ; html = html.replace( /]*><\/SPAN>/gi, '' ) ; // Remove Lang attributes html = html.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3") ; html = html.replace( /([\s\S]*?)<\/SPAN>/gi, '$1' ) ; html = html.replace( /([\s\S]*?)<\/FONT>/gi, '$1' ) ; // Remove XML elements and declarations html = html.replace(/<\\?\?xml[^>]*>/gi, '' ) ; // Remove w: tags with contents. html = html.replace( /]*>[\s\S]*?<\/w:[^>]*>/gi, '' ) ; // Remove Tags with XML namespace declarations: <\/o:p> html = html.replace(/<\/?\w+:[^>]*>/gi, '' ) ; // Remove comments [SF BUG-1481861]. html = html.replace(/<\!--[\s\S]*?-->/g, '' ) ; html = html.replace( /<(U|I|STRIKE)> <\/\1>/g, ' ' ) ; html = html.replace( /\s*<\/H\d>/gi, '' ) ; // Remove "display:none" tags. html = html.replace( /<(\w+)[^>]*\sstyle="[^"]*DISPLAY\s?:\s?none[\s\S]*?<\/\1>/ig, '' ) ; // Remove language tags html = html.replace( /<(\w[^>]*) language=([^ |>]*)([^>]*)/gi, "<$1$3") ; // Remove onmouseover and onmouseout events (from MS Word comments effect) html = html.replace( /<(\w[^>]*) onmouseover="([^\"]*)"([^>]*)/gi, "<$1$3") ; html = html.replace( /<(\w[^>]*) onmouseout="([^\"]*)"([^>]*)/gi, "<$1$3") ; if ( FCKConfig.CleanWordKeepsStructure ) { // The original tag send from Word is something like this: html = html.replace( /]*)>/gi, '' ) ; // Word likes to insert extra tags, when using MSIE. (Wierd). html = html.replace( /<(H\d)>]*>([\s\S]*?)<\/FONT><\/\1>/gi, '<$1>$2<\/$1>' ); html = html.replace( /<(H\d)>([\s\S]*?)<\/EM><\/\1>/gi, '<$1>$2<\/$1>' ); } else { html = html.replace( /]*)>/gi, '' ) ; html = html.replace( /]*)>/gi, '' ) ; html = html.replace( /]*)>/gi, '' ) ; html = html.replace( /]*)>/gi, '' ) ; html = html.replace( /]*)>/gi, '' ) ; html = html.replace( /]*)>/gi, '' ) ; html = html.replace( /<\/H\d>/gi, '<\/font><\/b><\/div>' ) ; // Transform

to

var re = new RegExp( '(]*>[\\s\\S]*?)(<\/P>)', 'gi' ) ; // Different because of a IE 5.0 error html = html.replace( re, '' ) ; // Remove empty tags (three times, just to be sure). // This also removes any empty anchor html = html.replace( /<([^\s>]+)(\s[^>]*)?>\s*<\/\1>/g, '' ) ; html = html.replace( /<([^\s>]+)(\s[^>]*)?>\s*<\/\1>/g, '' ) ; html = html.replace( /<([^\s>]+)(\s[^>]*)?>\s*<\/\1>/g, '' ) ; } // Convert LJ specific tags html = html.replace(/<lj-cut text=.{1}(.+?).{1}>([\S\s]+?)<\/lj-cut>/gm, '
$2
'); html = html.replace(/<lj-cut>([\S\s]+?)<\/lj-cut>/gm, '
$1
'); return html ; }