diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index 8a0eee4c6..6d707c912 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -10,6 +10,7 @@ - fixed #11871: Metadata display and criteria builder problems - fixed #10189: pbworkflow000000000007 Hanging - fixed #11897: Continue to the site link loses current page + - fixed #11618: Code Editor: Content loses it's whitespace formatting 7.10.1 - fixed #11851: Story Topic: top story variables should be available all the time diff --git a/lib/WebGUI/Form/Codearea.pm b/lib/WebGUI/Form/Codearea.pm index e262fec87..bfdeab57f 100644 --- a/lib/WebGUI/Form/Codearea.pm +++ b/lib/WebGUI/Form/Codearea.pm @@ -16,7 +16,6 @@ package WebGUI::Form::Codearea; use strict; use base 'WebGUI::Form::Textarea'; -use HTML::Entities qw(encode_entities decode_entities); use WebGUI::International; =head1 NAME @@ -90,18 +89,6 @@ sub definition { #------------------------------------------------------------------- -=head2 getDatabaseFieldType ( ) - -Returns "MEDIUMTEXT". - -=cut - -sub getDatabaseFieldType { - return "MEDIUMTEXT"; -} - -#------------------------------------------------------------------- - =head2 getName ( session ) Returns the human readable name of this control. @@ -113,95 +100,4 @@ sub getName { return WebGUI::International->new($session, 'WebGUI')->get('codearea'); } -#------------------------------------------------------------------- - -=head2 getValue ( [value] ) - -Return the value, HTML decoded - -=cut - -sub getValue { - my ( $self, @args ) = @_; - my $value = $self->SUPER::getValue( @args ); - return decode_entities( $value ); -} - -#------------------------------------------------------------------- - -=head2 headTags ( ) - -Set the head tags for this form plugin - -=cut - -sub headTags { - my $self = shift; - my ($style, $url) = $self->session->quick(qw(style url)); - $style->setLink($url->extras("yui/build/resize/assets/skins/sam/resize.css"), {type=>"text/css", rel=>"stylesheet"}); - $style->setLink($url->extras("yui/build/assets/skins/sam/skin.css"), {type=>"text/css", rel=>"stylesheet"}); - $style->setScript($url->extras("yui/build/utilities/utilities.js"),{type=>"text/javascript"}); - $style->setScript($url->extras("yui/build/container/container_core-min.js"),{type=>"text/javascript"}); - $style->setScript($url->extras("yui/build/menu/menu-min.js"),{type=>"text/javascript"}); - $style->setScript($url->extras("yui/build/button/button-min.js"),{type=>"text/javascript"}); - $style->setScript($url->extras("yui/build/resize/resize-min.js"),{type=>"text/javascript"}); - $style->setScript($url->extras("yui/build/editor/editor-min.js"),{type=>"text/javascript"}); - $style->setScript($url->extras("yui-webgui/build/code-editor/code-editor.js"),{type=>"text/javascript"}); - #$style->setLink($url->extras("yui/build/logger/assets/logger.css"), {type=>"text/css", rel=>"stylesheet"}); - #$style->setLink($url->extras("yui/build/logger/assets/skins/sam/logger.css"), {type=>"text/css", rel=>"stylesheet"}); - #$style->setScript($url->extras("yui/build/logger/logger.js"),{type=>"text/javascript"}); - $self->SUPER::headTags(); -} - -#------------------------------------------------------------------- - -=head2 isDynamicCompatible ( ) - -A class method that returns a boolean indicating whether this control is compatible with the DynamicField control. - -=cut - -sub isDynamicCompatible { - return 1; -} - -#------------------------------------------------------------------- - -=head2 toHtml ( ) - -Renders a code area field. - -=cut - -sub toHtml { - my $self = shift; - - $self->headTags; - my $value = encode_entities( $self->fixMacros($self->fixTags($self->fixSpecialCharacters(scalar $self->getOriginalValue))) ); - my $width = $self->get('width') || 400; - my $height = $self->get('height') || 150; - my $id = $self->get('id'); - my $name = $self->get('name'); - my $extras = $self->get('extras'); - my $syntax = $self->get('syntax'); - my $styleAttr = $self->get('style'); - - my $codeCss = $self->session->url->extras("yui-webgui/build/code-editor/code.css"); - my $out = <<"END_HTML"; - - -END_HTML - return $out; -} - 1; - diff --git a/www/extras/yui-webgui/build/code-editor/code-editor.js b/www/extras/yui-webgui/build/code-editor/code-editor.js deleted file mode 100755 index 7908dff6d..000000000 --- a/www/extras/yui-webgui/build/code-editor/code-editor.js +++ /dev/null @@ -1,747 +0,0 @@ -/* - * HTML Parser By John Resig (ejohn.org) - * Original code by Erik Arvidsson, Mozilla Public License - * http://erik.eae.net/simplehtmlparser/simplehtmlparser.js - * - * // Use like so: - * HTMLParser(htmlString, { - * start: function(tag, attrs, unary) {}, - * end: function(tag) {}, - * chars: function(text) {}, - * comment: function(text) {} - * }); - * - * // or to get an XML string: - * HTMLtoXML(htmlString); - * - * // or to get an XML DOM Document - * HTMLtoDOM(htmlString); - * - * // or to inject into an existing document/DOM node - * HTMLtoDOM(htmlString, document); - * HTMLtoDOM(htmlString, document.body); - * - */ - -(function(){ - - // Regular Expressions for parsing tags and attributes - var startTag = /^<(\w+)((?:\s+\w+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/, - endTag = /^<\/(\w+)[^>]*>/, - attr = /(\w+)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g; - - // Empty Elements - HTML 4.01 - var empty = makeMap("area,base,basefont,br,col,frame,hr,img,input,isindex,link,meta,param,embed"); - - // Block Elements - HTML 4.01 - var block = makeMap("address,applet,blockquote,button,center,dd,del,dir,div,dl,dt,fieldset,form,frameset,hr,iframe,ins,isindex,li,map,menu,noframes,noscript,object,ol,p,pre,script,table,tbody,td,tfoot,th,thead,tr,ul"); - - // Inline Elements - HTML 4.01 - var inline = makeMap("a,abbr,acronym,applet,b,basefont,bdo,big,br,button,cite,code,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,textarea,tt,u,var"); - - // Elements that you can, intentionally, leave open - // (and which close themselves) - var closeSelf = makeMap("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr"); - - // Attributes that have their values filled in disabled="disabled" - var fillAttrs = makeMap("checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected"); - - // Special Elements (can contain anything) - var special = makeMap("script,style"); - - var HTMLParser = this.HTMLParser = function( html, handler ) { - var index, chars, match, stack = [], last = html; - stack.last = function(){ - return this[ this.length - 1 ]; - }; - - while ( html ) { - chars = true; - - // Make sure we're not in a script or style element - if ( !stack.last() || !special[ stack.last() ] ) { - - // Comment - if ( html.indexOf(""); - - if ( index >= 0 ) { - if ( handler.comment ) - handler.comment( html.substring( 4, index ) ); - html = html.substring( index + 3 ); - chars = false; - } - - // end tag - } else if ( html.indexOf("]*>"), function(all, text){ - text = text.replace(//g, "$1") - .replace(//g, "$1"); - - if ( handler.chars ) - handler.chars( text ); - - return ""; - }); - - parseEndTag( "", stack.last() ); - } - - if ( html == last ) - throw "Parse Error: " + html; - last = html; - } - - // Clean up any remaining tags - parseEndTag(); - - function parseStartTag( tag, tagName, rest, unary ) { - if ( block[ tagName ] ) { - while ( stack.last() && inline[ stack.last() ] ) { - parseEndTag( "", stack.last() ); - } - } - - if ( closeSelf[ tagName ] && stack.last() == tagName ) { - parseEndTag( "", tagName ); - } - - unary = empty[ tagName ] || !!unary; - - if ( !unary ) - stack.push( tagName ); - - if ( handler.start ) { - var attrs = []; - - rest.replace(attr, function(match, name) { - var value = arguments[2] ? arguments[2] : - arguments[3] ? arguments[3] : - arguments[4] ? arguments[4] : - fillAttrs[name] ? name : ""; - - attrs.push({ - name: name, - value: value, - escaped: value.replace(/(^|[^\\])"/g, '$1\\\"') //" - }); - }); - - if ( handler.start ) - handler.start( tagName, attrs, unary ); - } - } - - function parseEndTag( tag, tagName ) { - // If no tag name is provided, clean shop - if ( !tagName ) - var pos = 0; - - // Find the closest opened tag of the same type - else - for ( var pos = stack.length - 1; pos >= 0; pos-- ) - if ( stack[ pos ] == tagName ) - break; - - if ( pos >= 0 ) { - // Close all the open elements, up the stack - for ( var i = stack.length - 1; i >= pos; i-- ) - if ( handler.end ) - handler.end( stack[ i ] ); - - // Remove the open elements from the stack - stack.length = pos; - } - } - }; - - this.HTMLtoXML = function( html ) { - var results = ""; - - HTMLParser(html, { - start: function( tag, attrs, unary ) { - results += "<" + tag; - - for ( var i = 0; i < attrs.length; i++ ) - results += " " + attrs[i].name + '="' + attrs[i].escaped + '"'; - - results += (unary ? "/" : "") + ">"; - }, - end: function( tag ) { - results += ""; - }, - chars: function( text ) { - results += text; - }, - comment: function( text ) { - results += ""; - } - }); - - return results; - }; - - this.HTMLtoDOM = function( html, doc ) { - // There can be only one of these elements - var one = makeMap("html,head,body,title"); - - // Enforce a structure for the document - var structure = { - link: "head", - base: "head" - }; - - if ( !doc ) { - if ( typeof DOMDocument != "undefined" ) - doc = new DOMDocument(); - else if ( typeof document != "undefined" && document.implementation && document.implementation.createDocument ) - doc = document.implementation.createDocument("", "", null); - else if ( typeof ActiveX != "undefined" ) - doc = new ActiveXObject("Msxml.DOMDocument"); - - } else - doc = doc.ownerDocument || - doc.getOwnerDocument && doc.getOwnerDocument() || - doc; - - var elems = [], - documentElement = doc.documentElement || - doc.getDocumentElement && doc.getDocumentElement(); - - // If we're dealing with an empty document then we - // need to pre-populate it with the HTML document structure - if ( !documentElement && doc.createElement ) (function(){ - var html = doc.createElement("html"); - var head = doc.createElement("head"); - head.appendChild( doc.createElement("title") ); - html.appendChild( head ); - html.appendChild( doc.createElement("body") ); - doc.appendChild( html ); - })(); - - // Find all the unique elements - if ( doc.getElementsByTagName ) - for ( var i in one ) - one[ i ] = doc.getElementsByTagName( i )[0]; - - // If we're working with a document, inject contents into - // the body element - var curParentNode = one.body; - - HTMLParser( html, { - start: function( tagName, attrs, unary ) { - // If it's a pre-built element, then we can ignore - // its construction - if ( one[ tagName ] ) { - curParentNode = one[ tagName ]; - return; - } - - var elem = doc.createElement( tagName ); - - for ( var attr in attrs ) - elem.setAttribute( attrs[ attr ].name, attrs[ attr ].value ); - - if ( structure[ tagName ] && typeof one[ structure[ tagName ] ] != "boolean" ) - one[ structure[ tagName ] ].appendChild( elem ); - - else if ( curParentNode && curParentNode.appendChild ) - curParentNode.appendChild( elem ); - - if ( !unary ) { - elems.push( elem ); - curParentNode = elem; - } - }, - end: function( tag ) { - elems.length -= 1; - - // Init the new parentNode - curParentNode = elems[ elems.length - 1 ]; - }, - chars: function( text ) { - curParentNode.appendChild( doc.createTextNode( text ) ); - }, - comment: function( text ) { - // create comment node - } - }); - - return doc; - }; - - function makeMap(str){ - var obj = {}, items = str.split(","); - for ( var i = 0; i < items.length; i++ ) - obj[ items[i] ] = true; - return obj; - } -})(); - - -(function() { - var Dom = YAHOO.util.Dom, - Event = YAHOO.util.Event, - Lang = YAHOO.lang - ; - - YAHOO.widget.CodeEditor = function (id, cfg) { - // TODO: Make a cfg for off by default - this.editorState = "on"; - - // Disable Editor configs that don't apply - cfg["animate"] = false; - cfg["dompath"] = false; - cfg["focusAtStart"] = false; - - // Default toolbar is different - cfg["toolbar"] = cfg["toolbar"] || { - titlebar : "Code Editor", - buttons : [] - }; - - YAHOO.widget.CodeEditor.superclass.constructor.call(this, id, cfg); - - // Allow us to have no buttons - // This will be fixed in a future version of YUI Editor - YAHOO.widget.Toolbar.prototype.disableAllButtons - = function () { - if (!this._buttonList) { - this._buttonList = []; - } - if (this.get('disabled')) { - return false; - } - var len = this._buttonList.length; - for (var i = 0; i < len; i++) { - this.disableButton(this._buttonList[i]); - } - }; - // End allow us to have no buttons - - this.on('editorContentLoaded', function() { - // Add the code stylesheet - var link = this._getDoc().createElement('link'); - link.rel = "stylesheet"; - link.type = "text/css"; - link.href = this.get('css_url'); - this._getDoc().getElementsByTagName('head')[0].appendChild(link); - // Highlight the initial value - if ( this.getEditorText() != this.old_text ) { - Lang.later(10, this, function () { this.highlight(true) } ); - if ( this.status ) { - Lang.later(100, this, this._writeStatus); - } - this.old_text = this.getEditorText(); - } - // Setup resize - if ( this.status ) { - this._setupResize(); - } - }, this, true); - - this.on('editorKeyUp', function(ev) { - // Highlight only if content has changed - if ( this.getEditorText() != this.old_text ) { - Lang.later(10, this, this.highlight); - if ( this.status ) { - Lang.later(100, this, this._writeStatus); - } - this.old_text = this.getEditorText(); - } - }, this, true); - - - //Borrowed this from CodePress: http://codepress.sourceforge.net - this.cc = '\u2009'; // carret char - // TODO: Make this configurable based on a syntax definition - this.keywords = [ - { code: /(<DOCTYPE.*?-->.)/g, tag: '$1' }, // comments - { code: /(<[^!]*?>)/g, tag: '$1' }, // all tags - { code: /(<!--.*?-->.)/g, tag: '$1' }, // comments - { code: /\b(YAHOO|widget|util|Dom|Event|lang)\b/g, tag: '$1' }, // reserved words - { code: /\b(break|continue|do|for|new|this|void|case|default|else|function|return|typeof|while|if|label|switch|var|with|catch|boolean|int|try|false|throws|null|true|goto)\b/g, tag: '$1' }, // reserved words - { code: /\"(.*?)(\"|
|<\/P>)/gi, tag: '"$1$2' }, // strings double quote - { code: /\'(.*?)(\'|
|<\/P>)/gi, tag: '\'$1$2' }, // strings single quote - { code: /\b(alert|isNaN|parent|Array|parseFloat|parseInt|blur|clearTimeout|prompt|prototype|close|confirm|length|Date|location|Math|document|element|name|self|elements|setTimeout|navigator|status|String|escape|Number|submit|eval|Object|event|onblur|focus|onerror|onfocus|onclick|top|onload|toString|onunload|unescape|open|valueOf|window|onmouseover|innerHTML)\b/g, tag: '$1' }, // special words - { code: /([^:]|^)\/\/(.*?)(//$2$3' }, // comments // - { code: /\/\*(.*?)\*\//g, tag: '/*$1*/' } // comments / * */ - ]; - //End Borrowed Content - - - if ( cfg["toggleButton"] ) { - var editor = this; - - // Add toggle button - var button = document.createElement("input"); - - button.type = "button"; - button.value = "Toggle Editor"; - - Event.addListener( button, "click", function () { - if ( editor.editorState == "off" ) { - editor.editorState = "on"; - var fc = editor.get('element').previousSibling, - el = editor.get('element'); - - Dom.setStyle(fc, 'position', 'static'); - Dom.setStyle(fc, 'top', '0'); - Dom.setStyle(fc, 'left', '0'); - Dom.setStyle(el, 'visibility', 'hidden'); - Dom.setStyle(el, 'top', '-9999px'); - Dom.setStyle(el, 'left', '-9999px'); - Dom.setStyle(el, 'position', 'absolute'); - editor.get('element_cont').addClass('yui-editor-container'); - YAHOO.log('Reset designMode on the Editor', 'info', 'example'); - editor._setDesignMode('on'); - YAHOO.log('Inject the HTML from the textarea into the editor', 'info', 'example'); - - // Escape HTML - var div = document.createElement("div"); - var text = editor.get('textarea').value; - // IE truncates whitespace internally, so go line by line - var lines = text.split(/\n/); - for ( var i = 0; i < lines.length; i++ ) { - var line = lines[i]; - YAHOO.log( i + ": " + line, "info", "CodeEditor" ); - div.appendChild( document.createTextNode( line ) ); - div.appendChild( document.createElement( "br" ) ); - } - var html = div.innerHTML; - // We have
, not \n - html = html.replace(/\n/g,""); - - YAHOO.log( html, "info", "CodeEditor" ); - editor.setEditorHTML(html); - editor.highlight(); - } - else { - editor.editorState = "off"; - editor.saveHTML(); - var fc = editor.get('element').previousSibling, - el = editor.get('element'); - - Dom.setStyle(fc, 'position', 'absolute'); - Dom.setStyle(fc, 'top', '-9999px'); - Dom.setStyle(fc, 'left', '-9999px'); - editor.get('element_cont').removeClass('yui-editor-container'); - Dom.setStyle(el, 'visibility', 'visible'); - Dom.setStyle(el, 'top', ''); - Dom.setStyle(el, 'left', ''); - Dom.setStyle(el, 'position', 'static'); - - // Unescape HTML - var div = document.createElement("div"); - var text = editor.getEditorText(); - // IE truncates all whitespace internally, so add HTML for it - if ( editor.browser.ie && editor.browser.ie <= 8 ) { - text = text.replace(/\n/g, " 
"); - text = text.replace(/\t/g, "    "); - } - div.innerHTML = text; - editor.get('element').value = ""; - for ( var i = 0; i < div.childNodes.length; i++ ) { - if ( div.childNodes[i].nodeName == "#text" ) { - editor.get('element').value = editor.get('element').value - + div.childNodes[i].nodeValue - + "\n" - ; - } - } - YAHOO.log( editor.getEditorText(), "info", "CodeEditor" ); - YAHOO.log( div.childNodes[0].nodeValue, "info", "CodeEditor" ); - YAHOO.log( editor.get('element').value, "info", "CodeEditor" ); - } - } ); - - // Put it right after the text area - var ta = document.getElementById( id ); - if ( ta.nextSibling ) { - ta.parentNode.insertBefore( button, ta.nextSibling ); - } - else { - ta.parentNode.appendChild( button ); - } - } - }; - Lang.extend( YAHOO.widget.CodeEditor, YAHOO.widget.SimpleEditor, { - /** - * @property _defaultCSS - * @description The default CSS used in the config for 'css'. This way you can add to the config like this: { css: YAHOO.widget.SimpleEditor.prototype._defaultCSS + 'ADD MYY CSS HERE' } - * @type String - */ - _defaultCSS: 'html { height: 95%; } body { background-color: #fff; font:13px/1.22 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small; } a, a:visited, a:hover { color: blue !important; text-decoration: underline !important; cursor: text !important; } .warning-localfile { border-bottom: 1px dashed red !important; } .yui-busy { cursor: wait !important; } img.selected { border: 2px dotted #808080; } img { cursor: pointer !important; border: none; } body.ptags.webkit div { margin: 11px 0; }' - }); - - /** - * @private - * @method _cleanIncomingHTML - * @description Clean up the HTML that the textarea starts with - */ - YAHOO.widget.CodeEditor.prototype._cleanIncomingHTML = function(str) { - // Workaround for bug in Lang.substitute - str = str.replace(/{/gi, 'RIGHT_BRACKET'); - str = str.replace(/}/gi, 'LEFT_BRACKET'); - - //   before
for IE8- so lines show up correctly - if ( this.browser.ie && this.browser.ie <= 8 ) { - str = str.replace(/\r?\n/g, " 
"); - } - - // Fix tabs into softtabs - str = str.replace(/\t/g, '    '); // TODO: Make softtabs configurable - - return str; - }; - - /* Override to fix problem with the rest of what the normal _handleFormSubmit does - * ( it doesn't properly click the correct submit button ) - */ - YAHOO.widget.CodeEditor.prototype._handleFormSubmit = function () { - if ( this.editorState == "on" ) { - this.saveHTML(); - } - return; - }; - /* End override to fix problem */ - - /** - * @private - * @method _writeStatus - * @description Write the number of Characters and Lines to the status line - */ - YAHOO.widget.CodeEditor.prototype._writeStatus = function () { - if ( this.status ) { - var text = this.getEditorText(); - this.status.innerHTML - = 'C: ' + text.length - + ' L: ' + text.split(/\r?\n/).length - ; - } - }; - - /** - * @private - * @method _setupResize - * @description Creates the Resize instance and binds its events. - */ - YAHOO.widget.CodeEditor.prototype._setupResize - = function() { - if (!YAHOO.util.DD || !YAHOO.util.Resize) { return false; } - if (this.get('resize')) { - var config = {}; - Lang.augmentObject(config, this._resizeConfig); //Break the config reference - this.resize = new YAHOO.util.Resize(this.get('element_cont').get('element'), config); - this.resize.on('resize', function(args) { - var anim = this.get('animate'); - this.set('animate', false); - this.set('width', args.width + 'px'); - var h = args.height, - th = (this.toolbar.get('element').clientHeight + 2), - dh = 0; - if (this.status) { - dh = (this.status.clientHeight + 1); //It has a 1px top border.. - } - var newH = (h - th - dh); - this.set('height', newH + 'px'); - this.get('element_cont').setStyle('height', ''); - this.set('animate', anim); - }, this, true); - } - }; - - /* - * @method cleanHTML - * @description Reduce the HTML in the editor to plain text to be put back in the - * textarea. Called by saveHTML() - */ - YAHOO.widget.CodeEditor.prototype.cleanHTML = function (html) { - if (!html) { - html = this.getEditorHTML(); - } - - // Handle special-case HTML - html = html.replace(/( ){4}/g,"\t"); // TODO: make softtabs configurable - html = html.replace(/ /g," "); - // Remove spaces at end of lines - html = html.replace(/ ?
/gi,'\n'); - - // Parse the text out of the remaining HTML - text = ""; - HTMLParser( html, { - chars : function (t) { text += t } - } ); - - // If, after all this, we are left with only a \n, user didn't add anything - // (editor adds a
if it starts blank) - if ( text == "\n" ) { - text = ""; - } - - return text; - }; - - /* - * @method focusCaret - * @description I don't actually know what this does, it was like this when I got here - */ - YAHOO.widget.CodeEditor.prototype.focusCaret = function() { - if (this.browser.gecko) { - if (this._getWindow().find(this.cc)) { - this._getSelection().getRangeAt(0).deleteContents(); - } - } else if (this.browser.webkit || this.browser.ie || this.browser.opera) { - var cur = this._getDoc().getElementById('cur'); - if ( cur ) { - cur.id = ''; - cur.innerHTML = ''; - this._selectNode(cur); - } - } - }; - - /** - * @method getEditorText - * @description Get the text inside the editor, removing any HTML used for highlighting - */ - YAHOO.widget.CodeEditor.prototype.getEditorText - = function () { - var html = this.getEditorHTML(); - var text = this.cleanHTML( html ); - return text; - }; - - /** - * @method highlight - * @description Apply the syntax highlighting to the content of the editor - * @param {Boolean} focus If true, editor currently has focus - */ - YAHOO.widget.CodeEditor.prototype.highlight = function(focus) { - - // Opera support is not working yet - if ( this.browser.opera ) { - return; - } - // Firefox < 3 support is not working yet - if ( this.browser.gecko && this.browser.gecko <= 1.8 ) { - return; - } - - // Keep track of where the cursor is right now - if (!focus) { - if (this.browser.gecko) { - this._getSelection().getRangeAt(0).insertNode(this._getDoc().createTextNode(this.cc)); - } else if (this.browser.webkit || this.browser.ie || this.browser.opera) { - try { - this.execCommand('inserthtml', this.cc); - } - catch (e) {} - } - } - - // Remove existing highlighting - var html = this.getEditorText(); - - // Fix line breaks - html = html.replace( /\t/g, "    " ); - if ( this.browser.ie ) { - html = html.replace( /\n/g, " 
" ); - } - else { - html = html.replace( /\n/g, "
"); - } - - // Apply new highlighting - for (var i = 0; i < this.keywords.length; i++) { - html = html.replace(this.keywords[i].code, this.keywords[i].tag); - } - - // Replace cursor - if ( !this.browser.gecko ) { - html = html.replace(this.cc, '|'); - } - - this._getDoc().body.innerHTML = html; - if (!focus) { - this.focusCaret(); - } - }; - - /** - * @method initAttributes - * @description Initializes all of the configuration attributes used to create - * the editor. - * @param {Object} attr Object literal specifying a set of - * configuration attributes used to create the editor. - */ - YAHOO.widget.CodeEditor.prototype.initAttributes - = function(attr) { - YAHOO.widget.CodeEditor.superclass.initAttributes.call(this, attr); - var self = this; - /** - * @attribute status - * @description Toggle the display of a status line below the editor - * @default false - * @type Boolean - */ - this.setAttributeConfig('status', { - value: attr.status || false, - method: function(status) { - if (status && !this.status) { - this.status = document.createElement('DIV'); - this.status.id = this.get('id') + '_status'; - Dom.addClass(this.status, 'dompath'); // Piggy-back on Editor's dompath - this.get('element_cont').get('firstChild').appendChild(this.status); - if (this.get('iframe')) { - this._writeStatus(); - } - } else if (!status && this.status) { - this.status.parentNode.removeChild(this.status); - this.status = null; - } - } - }); - /** - * @attribute css_url - * @description The URL to the CSS file for the inside of the code editor - * @default 'code.css' - * @type String - */ - this.setAttributeConfig('css_url', { - value: attr.css_url || 'code.css' - } ); - }; - -})(); - diff --git a/www/extras/yui-webgui/build/code-editor/code.css b/www/extras/yui-webgui/build/code-editor/code.css deleted file mode 100755 index 783326044..000000000 --- a/www/extras/yui-webgui/build/code-editor/code.css +++ /dev/null @@ -1,9 +0,0 @@ -body { background:white url(line-numbers.png) repeat-y scroll 0pt -4px; font-family:monospace; font-size:13px; height:100%; line-height:16px; margin-left:32px; margin-top:8px; white-space:pre; } -b, i, s, u, a, em, tt, ins, big, cite, strong, var, dfn {text-decoration:none;font-weight:normal;font-style:normal;font-size:13px;} -b, cite {color:#7F0055;font-weight:bold;} /* reserved words */ -u {color:darkblue;font-weight:bold;} /* special words */ -i, i b, i s, i u {color:green;font-weight:normal;} /* comments */ -s, s b, s u {color:#2A00FF;font-weight:normal;} /* strings */ -ins, ins b, ins s, ins em {color:green;} /* comments */ -a {color:blue; text-decoration: underline; } /* links */ -body.ie { padding-left: 32px; margin-left: 0px; background-position: 0 -10px; margin-top: 0px;} diff --git a/www/extras/yui-webgui/build/code-editor/line-numbers.png b/www/extras/yui-webgui/build/code-editor/line-numbers.png deleted file mode 100755 index ffea4e6aa..000000000 Binary files a/www/extras/yui-webgui/build/code-editor/line-numbers.png and /dev/null differ