/* * CodePress - Real Time Syntax Highlighting Editor written in JavaScript - http://codepress.org/ * * Copyright (C) 2006 Fernando M.A.d.S. * * This program is free software; you can redistribute it and/or modify it under the terms of the * GNU Lesser General Public License as published by the Free Software Foundation. * * Read the full licence: http://www.opensource.org/licenses/lgpl-license.php */ Ext.namespace('Ext.ux'); Ext.ux.CodePress = Ext.extend(Ext.form.Field, { /** * @cfg {String} sourceEl The id of the element to pull code from */ sourceEl : false /** * @cfg {String} code The code to use in the editor */ , code : false /** * @cfg {String} language The language to render the code with */ , language : false , url : false , height : false , width : false , autoResize : false // private , initialized : false // private , initComponent : function(){ Ext.ux.CodePress.superclass.initComponent.call(this); // Hide the sourceEl if provided if(this.sourceEl){ Ext.get(this.sourceEl).hide(); } this.addEvents({ /** * @event initialize * Fires when the editor is fully initialized (including the iframe) * @param {HtmlEditor} this */ initialize: true /** * @event activate * Fires when the editor is first receives the focus. Any insertion must wait * until after this event. * @param {HtmlEditor} this */ , activate: true }); } // private (for BoxComponent) , adjustSize : Ext.BoxComponent.prototype.adjustSize , resize : function(){ //console.log('resizing: ' + this.ownerCt.body.dom.clientWidth + 'x' + this.ownerCt.body.dom.clientHeight); var h = (this.height || this.ownerCt.body.dom.clientHeight) + 'px'; var w = (this.width || this.ownerCt.body.dom.clientWidth) + 'px'; var bodyWidth = ((this.width || this.ownerCt.body.dom.clientWidth)-50) + 'px'; this.editor.body.style.width = bodyWidth; this.iframe.setStyle('height', h); this.iframe.setStyle('width', w); } , onRender : function(ct, position){ Ext.ux.CodePress.superclass.onRender.call(this, ct, position); if(!Ext.ux.CodePress.path){ this.getCodePath(); } //Taken from Ext.form.HtmlEditor this.el.dom.style.border = '0 none'; this.el.dom.setAttribute('tabIndex', -1); this.el.addClass('x-hidden'); if(Ext.isIE){ // fix IE 1px bogus margin this.el.applyStyles('margin-top:-1px;margin-bottom:-1px;') } this.wrap = this.el.wrap({ //cls:'x-html-editor-wrap', cn:{cls:'x-html-editor-tb'} }); // Create the iframe this.iframe = Ext.get(document.createElement('iframe')); this.iframe.src = (Ext.SSL_SECURE_URL || 'javascript:false'); // Create the textarea element if not created if(!this.sourceEl){ this.textarea = Ext.get(document.createElement('textarea')); }else{ this.textarea = Ext.get(this.sourceEl); } this.textarea.dom.disabled = true; this.textarea.dom.style.overflow = 'hidden'; this.textarea.dom.style.overflow = 'auto'; this.iframe.dom.frameBorder = 0; // remove IE internal iframe border this.iframe.setStyle('visibility', 'hidden'); this.iframe.setStyle('position', 'absolute'); this.options = this.textarea.dom.className; this.wrap.dom.appendChild(this.textarea.dom); this.textarea.dom.parentNode.insertBefore(this.iframe.dom, this.textarea.dom); this.edit(); } , afterRender : function(){ Ext.ux.CodePress.superclass.afterRender.call(this); } , focus : function(){ } , getCodePath : function() { s = document.getElementsByTagName('script'); for(var i=0,n=s.length;i