svncommit
2006-11-07 f0ea59bc8873461e060032f69d46032a97b68331
commit | author | age
a0109c 1 /*
S 2  +-----------------------------------------------------------------------+
3  | RoundCube editor js library                                           |
4  |                                                                       |
5  | This file is part of the RoundCube web development suite              |
6  | Copyright (C) 2006, RoundCube Dev, - Switzerland                      |
7  | Licensed under the GNU GPL                                            |
8  |                                                                       |
9  +-----------------------------------------------------------------------+
10  | Author: Eric Stadtherr <estadtherr@gmail.com>                         |
11  +-----------------------------------------------------------------------+
12  
13  $Id: editor.js 000 2006-05-18 19:12:28Z roundcube $
14 */
15
16 // Initialize the message editor
17
18 function rcmail_editor_init(skin_path)
19 {
20    tinyMCE.init({ mode : 'specific_textareas',
21                   accessibility_focus : false,
22                   apply_source_formatting : true,
23                   theme : 'advanced',
f0ea59 24                   plugins : 'emotions,media,nonbreaking,table,searchreplace,spellchecker,visualchars',
a0109c 25                   theme_advanced_buttons1 : 'bold,italic,underline,separator,strikethrough,justifyleft,justifycenter,justifyright,justifyfull,separator,bullist,numlist,outdent,indent,separator,forecolor,backcolor,formatselect,fontselect,fontsizeselect',
f0ea59 26                   theme_advanced_buttons2 : 'undo,redo,image,media,hr,link,unlink,emotions,charmap,code,nonbreaking,visualchars,separator,search,replace,spellchecker,separator,tablecontrols',
a0109c 27                   theme_advanced_buttons3 : '',
S 28                   theme_advanced_toolbar_location : 'top',
29                   theme_advanced_toolbar_align : 'left',
30                   extended_valid_elements : 'font[face|size|color|style],span[id|class|align|style]',
31                   content_css : skin_path + '/editor_content.css',
f0ea59 32                   popups_css : skin_path + '/editor_popup.css',
a0109c 33                   editor_css : skin_path + '/editor_ui.css'
S 34                 });
35 }
36
37 // Set the state of the HTML/Plain toggles based on the _is_html field value
38 function rcmail_set_editor_toggle_states()
39 {
40    // set the editor toggle based on the state of the editor
41
42     var htmlFlag = document.getElementsByName('_is_html')[0];
43     var toggles = document.getElementsByName('_editorSelect');
44     for(var t=0; t<toggles.length; t++)
45     {
46        if (toggles[t].value == 'html')
47        {
48           toggles[t].checked = (htmlFlag.value == "1");
49        }
50        else
51        {
52           toggles[t].checked = (htmlFlag.value == "0");
53        }
54     }
55 }
56
57 // Toggle between the HTML and Plain Text editors
58
59 function rcmail_toggle_editor(toggler)
60 {
61    var selectedEditor = toggler.value;
62
63    // determine the currently displayed editor
64
65    var htmlFlag = document.getElementsByName('_is_html')[0];
66    var currentEditor = htmlFlag.value;
67
68    if (selectedEditor == currentEditor)
69    {
70       return;
71    }
72
73    // do the appropriate conversion
74
75    var composeElement = document.getElementById('compose-body');
76
77    if (selectedEditor == 'html')
78    {
79       var existingPlainText = composeElement.value;
80       var htmlText = "<pre>" + existingPlainText + "</pre>";
81       composeElement.value = htmlText;
82       tinyMCE.execCommand('mceAddControl', true, '_message');
83       htmlFlag.value = "1";
84    }
85    else
86    {
87       rcmail.set_busy(true, 'converting');
88       var thisMCE = tinyMCE.getInstanceById('_message');
89       var existingHtml = tinyMCE.getContent();
90       rcmail_html2plain(existingHtml);
91       tinyMCE.execCommand('mceRemoveControl', true, '_message');
92       htmlFlag.value = "0";
93    }
94 }
95
96 function rcmail_html2plain(htmlText)
97 {
98    var http_request = new rcube_http_request();
99
100    http_request.onerror = function(o) { rcmail_handle_toggle_error(o); };
101    http_request.oncomplete = function(o) { rcmail_set_text_value(o); };
102    var url=rcmail.env.comm_path+'&_action=html2text';
103    console('HTTP request: ' + url);
104    http_request.POST(url, htmlText, 'application/octet-stream');
105 }
106
107 /*
108 function old_html2Plain(htmlText)
109 {
110    var http_request = false;
111    if (window.XMLHttpRequest)
112    {
113       http_request = new XMLHttpRequest();
114       //http_request.overrideMimeType('text/plain');
115    }
116
117    if (http_request)
118    {
119       rcmail.set_busy(true);
120
121       http_request.onreadystatechange = function()
122          { setTextValue(http_request); };
123       //var url = window.location.protocol + '://' +
124       //window.location.host + window.location.pathname + 
125       //'conv_html.php';
126
127       var url = 'conv_html.php';
128       //alert('calling ' + url);
129       var reqbody = 'htmlText=' + htmlText;
130       http_request.open('POST', url, true);
131       http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
132       http_request.send(reqbody);
133    }
134 }
135
136 */
137
138 function rcmail_set_text_value(httpRequest)
139 {
140    rcmail.set_busy(false);
141    var composeElement = document.getElementById('compose-body');
142    composeElement.value = httpRequest.get_text();
143 }
144
145 function rcmail_handle_toggle_error(httpRequest)
146 {
147    alert('html2text request returned with error ' + httpRequest.xmlhttp.status);
148 }