~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to www/media/common/codepress/codepress.js

  • Committer: wagrant
  • Date: 2008-08-09 06:02:40 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:999
browser (help): Document that Ctrl+S saves.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * CodePress - Real Time Syntax Highlighting Editor written in JavaScript - http://codepress.org/
 
3
 * 
 
4
 * Copyright (C) 2006 Fernando M.A.d.S. <fermads@gmail.com>
 
5
 *
 
6
 * This program is free software; you can redistribute it and/or modify it under the terms of the 
 
7
 * GNU Lesser General Public License as published by the Free Software Foundation.
 
8
 * 
 
9
 * Read the full licence: http://www.opensource.org/licenses/lgpl-license.php
 
10
 */
 
11
 
 
12
CodePress = function(obj) {
 
13
        var self = document.createElement('iframe');
 
14
        self.textarea = obj;
 
15
        self.textarea.disabled = true;
 
16
        self.textarea.style.overflow = 'hidden';
 
17
        self.style.height = self.textarea.clientHeight +'px';
 
18
        self.style.width = self.textarea.clientWidth +'px';
 
19
        self.textarea.style.overflow = 'auto';
 
20
        self.style.border = '1px solid gray';
 
21
        self.frameBorder = 0; // remove IE internal iframe border
 
22
        self.style.visibility = 'hidden';
 
23
        self.style.position = 'absolute';
 
24
        self.options = self.textarea.className;
 
25
        
 
26
        self.initialize = function() {
 
27
                self.editor = self.contentWindow.CodePress;
 
28
                self.editor.body = self.contentWindow.document.getElementsByTagName('body')[0];
 
29
                self.editor.setCode(self.textarea.value);
 
30
                self.setOptions();
 
31
                self.editor.syntaxHighlight('init');
 
32
                self.textarea.style.display = 'none';
 
33
                self.style.position = 'static';
 
34
                self.style.visibility = 'visible';
 
35
                self.style.display = 'inline';
 
36
        }
 
37
        
 
38
        // obj can by a textarea id or a string (code)
 
39
        self.edit = function(obj,language) {
 
40
                if(obj) self.textarea.value = document.getElementById(obj) ? document.getElementById(obj).value : obj;
 
41
                if(!self.textarea.disabled) return;
 
42
                self.language = language ? language : self.getLanguage();
 
43
                self.src = CodePress.path+'codepress.html?language='+self.language+'&ts='+(new Date).getTime();
 
44
                if(self.attachEvent) self.attachEvent('onload',self.initialize);
 
45
                else self.addEventListener('load',self.initialize,false);
 
46
        }
 
47
 
 
48
        self.getLanguage = function() {
 
49
                for (language in CodePress.languages) 
 
50
                        if(self.options.match('\\b'+language+'\\b')) 
 
51
                                return CodePress.languages[language] ? language : 'generic';
 
52
        }
 
53
        
 
54
        self.setOptions = function() {
 
55
                if(self.options.match('autocomplete-off')) self.toggleAutoComplete();
 
56
                if(self.options.match('readonly-on')) self.toggleReadOnly();
 
57
                if(self.options.match('linenumbers-off')) self.toggleLineNumbers();
 
58
        }
 
59
        
 
60
        self.getCode = function() {
 
61
                return self.textarea.disabled ? self.editor.getCode() : self.textarea.value;
 
62
        }
 
63
 
 
64
        self.setCode = function(code) {
 
65
                self.textarea.disabled ? self.editor.setCode(code) : self.textarea.value = code;
 
66
        }
 
67
 
 
68
        self.addChangeHandler = function(handler) {
 
69
                return self.editor.addChangeHandler ? self.editor.addChangeHandler(handler) : false;
 
70
        }
 
71
 
 
72
        self.addSaveHandler = function(handler) {
 
73
                return self.editor.addSaveHandler ? self.editor.addSaveHandler(handler) : false;
 
74
        }
 
75
 
 
76
        self.toggleAutoComplete = function() {
 
77
                self.editor.autocomplete = (self.editor.autocomplete) ? false : true;
 
78
        }
 
79
        
 
80
        self.toggleReadOnly = function() {
 
81
                self.textarea.readOnly = (self.textarea.readOnly) ? false : true;
 
82
                if(self.style.display != 'none') // prevent exception on FF + iframe with display:none
 
83
                        self.editor.readOnly(self.textarea.readOnly ? true : false);
 
84
        }
 
85
        
 
86
        self.toggleLineNumbers = function() {
 
87
                var cn = self.editor.body.className;
 
88
                self.editor.body.className = (cn==''||cn=='show-line-numbers') ? 'hide-line-numbers' : 'show-line-numbers';
 
89
        }
 
90
        
 
91
        self.toggleEditor = function() {
 
92
                if(self.textarea.disabled) {
 
93
                        self.textarea.value = self.getCode();
 
94
                        self.textarea.disabled = false;
 
95
                        self.style.display = 'none';
 
96
                        self.textarea.style.display = 'inline';
 
97
                }
 
98
                else {
 
99
                        self.textarea.disabled = true;
 
100
                        self.setCode(self.textarea.value);
 
101
                        self.editor.syntaxHighlight('init');
 
102
                        self.style.display = 'inline';
 
103
                        self.textarea.style.display = 'none';
 
104
                }
 
105
        }
 
106
 
 
107
        self.edit();
 
108
        return self;
 
109
}
 
110
 
 
111
CodePress.languages = { 
 
112
        csharp : 'C#', 
 
113
        css : 'CSS', 
 
114
        generic : 'Generic',
 
115
        html : 'HTML',
 
116
        java : 'Java', 
 
117
        javascript : 'JavaScript', 
 
118
        perl : 'Perl', 
 
119
        ruby : 'Ruby',  
 
120
        php : 'PHP', 
 
121
        python : 'Python', 
 
122
        text : 'Text', 
 
123
        sql : 'SQL',
 
124
        vbscript : 'VBScript'
 
125
}
 
126
 
 
127
 
 
128
CodePress.run = function() {
 
129
        s = document.getElementsByTagName('script');
 
130
        for(var i=0,n=s.length;i<n;i++) {
 
131
                if(s[i].src.match('codepress.js')) {
 
132
                        CodePress.path = s[i].src.replace('codepress.js','');
 
133
                }
 
134
        }
 
135
        t = document.getElementsByTagName('textarea');
 
136
        for(var i=0,n=t.length;i<n;i++) {
 
137
                if(t[i].className.match('codepress')) {
 
138
                        id = t[i].id;
 
139
                        t[i].id = id+'_cp';
 
140
                        eval(id+' = new CodePress(t[i])');
 
141
                        t[i].parentNode.insertBefore(eval(id), t[i]);
 
142
                } 
 
143
        }
 
144
}
 
145
 
 
146
if(window.attachEvent) window.attachEvent('onload',CodePress.run);
 
147
else window.addEventListener('DOMContentLoaded',CodePress.run,false);