| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- /*
- * CodePress - Real Time Syntax Highlighting Editor written in JavaScript - http://codepress.org/
- *
- * Copyright (C) 2006 Fernando M.A.d.S. <[email protected]>
- *
- * 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
- */
- CodePress = function(obj) {
- var self = document.createElement('iframe');
- self.textarea = obj;
- self.textarea.disabled = true;
- self.textarea.style.overflow = 'hidden';
- self.style.height = self.textarea.clientHeight +'px';
- self.style.width = self.textarea.clientWidth +'px';
- self.textarea.style.overflow = 'auto';
- self.style.border = '1px solid gray';
- self.frameBorder = 0; // remove IE internal iframe border
- self.style.visibility = 'hidden';
- self.style.position = 'absolute';
- self.options = self.textarea.className;
-
- self.initialize = function() {
- self.editor = self.contentWindow.CodePress;
- self.editor.body = self.contentWindow.document.getElementsByTagName('body')[0];
- self.editor.setCode(self.textarea.value);
- self.setOptions();
- self.editor.syntaxHighlight('init');
- self.textarea.style.display = 'none';
- self.style.position = 'static';
- self.style.visibility = 'visible';
- self.style.display = 'inline';
- }
-
- // obj can by a textarea id or a string (code)
- self.edit = function(obj,language) {
- if(obj) self.textarea.value = document.getElementById(obj) ? document.getElementById(obj).value : obj;
- if(!self.textarea.disabled) return;
- self.language = language ? language : self.getLanguage();
- self.src = CodePress.path+'codepress.html?language='+self.language+'&ts='+(new Date).getTime();
- if(self.attachEvent) self.attachEvent('onload',self.initialize);
- else self.addEventListener('load',self.initialize,false);
- }
- self.getLanguage = function() {
- for (language in CodePress.languages)
- if(self.options.match('\\b'+language+'\\b'))
- return CodePress.languages[language] ? language : 'generic';
- }
-
- self.setOptions = function() {
- if(self.options.match('autocomplete-off')) self.toggleAutoComplete();
- if(self.options.match('readonly-on')) self.toggleReadOnly();
- if(self.options.match('linenumbers-off')) self.toggleLineNumbers();
- }
-
- self.getCode = function() {
- return self.textarea.disabled ? self.editor.getCode() : self.textarea.value;
- }
- self.setCode = function(code) {
- self.textarea.disabled ? self.editor.setCode(code) : self.textarea.value = code;
- }
- self.toggleAutoComplete = function() {
- self.editor.autocomplete = (self.editor.autocomplete) ? false : true;
- }
-
- self.toggleReadOnly = function() {
- self.textarea.readOnly = (self.textarea.readOnly) ? false : true;
- if(self.style.display != 'none') // prevent exception on FF + iframe with display:none
- self.editor.readOnly(self.textarea.readOnly ? true : false);
- }
-
- self.toggleLineNumbers = function() {
- var cn = self.editor.body.className;
- self.editor.body.className = (cn==''||cn=='show-line-numbers') ? 'hide-line-numbers' : 'show-line-numbers';
- }
-
- self.toggleEditor = function() {
- if(self.textarea.disabled) {
- self.textarea.value = self.getCode();
- self.textarea.disabled = false;
- self.style.display = 'none';
- self.textarea.style.display = 'inline';
- }
- else {
- self.textarea.disabled = true;
- self.setCode(self.textarea.value);
- self.editor.syntaxHighlight('init');
- self.style.display = 'inline';
- self.textarea.style.display = 'none';
- }
- }
- self.edit();
- return self;
- }
- CodePress.languages = {
- csharp : 'C#',
- css : 'CSS',
- generic : 'Generic',
- html : 'HTML',
- java : 'Java',
- javascript : 'JavaScript',
- perl : 'Perl',
- ruby : 'Ruby',
- php : 'PHP',
- text : 'Text',
- sql : 'SQL',
- vbscript : 'VBScript'
- }
- CodePress.run = function() {
- s = document.getElementsByTagName('script');
- for(var i=0,n=s.length;i<n;i++) {
- if(s[i].src.match('codepress.js')) {
- CodePress.path = s[i].src.replace('codepress.js','');
- }
- }
- t = document.getElementsByTagName('textarea');
- for(var i=0,n=t.length;i<n;i++) {
- if(t[i].className.match('codepress')) {
- id = t[i].id;
- t[i].id = id+'_cp';
- eval(id+' = new CodePress(t[i])');
- t[i].parentNode.insertBefore(eval(id), t[i]);
- }
- }
- }
- if(window.attachEvent) window.attachEvent('onload',CodePress.run);
- else window.addEventListener('DOMContentLoaded',CodePress.run,false);
|