git-svn-id: svn://euphorik.ch/pompage@45 02bbb61a-6d21-0410-aba0-cb053bdfd66a
[pompage.git] / doc / webdeveloper / dashboard / edit_html.js
1 var webdeveloper_editHTMLIntervalId = null;
2 var webdeveloper_editHTMLOldHTML = null;
3 var webdeveloper_editHTMLSelectedTab = 0;
4 var webdeveloper_editHTMLUpdateFrequency = 500;
5
6 // Applies the HTML
7 function webdeveloper_applyHTML()
8 {
9 var contentBody = webdeveloper_getDocumentBodyElement(webdeveloper_getContentDocument());
10 var newHTML = document.getElementById("webdeveloper-edit-html-text-box").value;
11
12 // If the content body is set and the new HTML is not the same as the old HTML
13 if(contentBody && newHTML != webdeveloper_editHTMLOldHTML)
14 {
15 contentBody.innerHTML = newHTML;
16 webdeveloper_editHTMLOldHTML = newHTML;
17 }
18 }
19
20 // Clear the HTML
21 function webdeveloper_clearHTML()
22 {
23 document.getElementById("webdeveloper-edit-html-text-box").value = "";
24 }
25
26 // Reinitializes the dashboard when the page changes
27 function webdeveloper_editHTMLContentPageLoad(event)
28 {
29 var eventTarget = event.target;
30
31 // Try to get the original target
32 try
33 {
34 var originalTarget = event.originalTarget;
35
36 // If the page is the target and the URI matches
37 if(originalTarget && eventTarget && eventTarget.contentDocument && eventTarget.hasAttribute && eventTarget.hasAttribute("id") && eventTarget.getAttribute("id").toLowerCase() == "content" && originalTarget.documentURI == eventTarget.contentDocument.documentURI)
38 {
39 // If the page is generated
40 if(originalTarget.documentURI == "about:blank")
41 {
42 window.clearInterval(webdeveloper_editHTMLIntervalId);
43 window.setTimeout(webdeveloper_retrieveHTML, 1000);
44 window.setTimeout(webdeveloper_updateHTML, 1000);
45 }
46 else
47 {
48 webdeveloper_retrieveHTML();
49 }
50 }
51 }
52 catch(exception)
53 {
54 // Do nothing
55 }
56 }
57
58 // Handles a browser tab being selected
59 function webdeveloper_editHTMLMainTabSelect(event)
60 {
61 var browser = window.top.getBrowser();
62 var selectedTab = browser.mTabBox.selectedIndex;
63
64 // If the selected tab is different
65 if(selectedTab != webdeveloper_editHTMLSelectedTab)
66 {
67 browser.browsers[webdeveloper_editHTMLSelectedTab].contentDocument.location.reload(false);
68
69 webdeveloper_editHTMLSelectedTab = selectedTab;
70
71 webdeveloper_retrieveHTML();
72 }
73 }
74
75 // Initializes the edit HTML dashboard
76 function webdeveloper_initializeEditHTML()
77 {
78 var mainTabBox = window.top.getBrowser().mTabBox;
79 var textBox = document.getElementById("webdeveloper-edit-html-text-box");
80 var textBoxStyle = "";
81
82 webdeveloper_editHTMLSelectedTab = mainTabBox.selectedIndex;
83 webdeveloper_editHTMLUpdateFrequency = webdeveloper_getIntegerPreference("webdeveloper.edit.update.frequency", true);
84
85 document.getElementById("webdeveloper-search-dashboard-text").addEventListener("keypress", webdeveloper_searchTextKeyPress, false);
86 mainTabBox.addEventListener("select", webdeveloper_editHTMLMainTabSelect, false);
87 window.top.addEventListener("load", webdeveloper_editHTMLContentPageLoad, true);
88
89 // If the edit CSS background color preference is set
90 if(webdeveloper_isPreferenceSet("webdeveloper.edit.color.background"))
91 {
92 textBoxStyle += "background-color: " + webdeveloper_getStringPreference("webdeveloper.edit.color.background", true) + " !important; ";
93 }
94
95 // If the edit CSS text color preference is set
96 if(webdeveloper_isPreferenceSet("webdeveloper.edit.color.text"))
97 {
98 textBoxStyle += "color: " + webdeveloper_getStringPreference("webdeveloper.edit.color.text", true) + " !important; ";
99 }
100
101 // If the edit CSS font preference is set
102 if(webdeveloper_isPreferenceSet("webdeveloper.edit.font.size"))
103 {
104 textBoxStyle += "font-size: " + webdeveloper_getIntegerPreference("webdeveloper.edit.font.size", true) + "px !important; ";
105 }
106
107 textBox.setAttribute("style", textBoxStyle.trim());
108
109 webdeveloper_retrieveHTML();
110 webdeveloper_updateHTML();
111 }
112
113 // Resets the edited HTML
114 function webdeveloper_resetHTML()
115 {
116 window.top.BrowserReload();
117 }
118
119 // Retrieves the HTML
120 function webdeveloper_retrieveHTML()
121 {
122 var contentBody = webdeveloper_getDocumentBodyElement(webdeveloper_getContentDocument());
123 var textBox = document.getElementById("webdeveloper-edit-html-text-box");
124
125 // If the content body is set
126 if(contentBody)
127 {
128 textBox.value = contentBody.innerHTML;
129 }
130
131 webdeveloper_applyHTML();
132 }
133
134 // Saves the HTML
135 function webdeveloper_saveHTML()
136 {
137 var contentDocument = webdeveloper_getContentDocument();
138 var filePicker = Components.classes["@mozilla.org/filepicker;1"].createInstance(Components.interfaces.nsIFilePicker);
139 var result = null;
140 var stringBundle = document.getElementById("webdeveloper-string-bundle");
141 var url = Components.classes["@mozilla.org/network/standard-url;1"].createInstance(Components.interfaces.nsIURL);
142
143 url.spec = contentDocument.documentURI;
144 filePicker.defaultExtension = url.fileExtension;
145 filePicker.defaultString = url.fileName;
146
147 filePicker.init(window, stringBundle.getString("webdeveloper_saveHTML"), filePicker.modeSave);
148
149 result = filePicker.show();
150
151 // If the user selected a file
152 if(result == filePicker.returnOK || result == filePicker.returnReplace)
153 {
154 var file = filePicker.file;
155 var webBrowserPersistInterface = Components.interfaces.nsIWebBrowserPersist;
156 var webBrowserPersist = Components.classes["@mozilla.org/embedding/browser/nsWebBrowserPersist;1"].createInstance(webBrowserPersistInterface);
157
158 webBrowserPersist.persistFlags = webBrowserPersistInterface.PERSIST_FLAGS_AUTODETECT_APPLY_CONVERSION | webBrowserPersistInterface.PERSIST_FLAGS_FROM_CACHE | webBrowserPersistInterface.PERSIST_FLAGS_REPLACE_EXISTING_FILES;
159
160 // If the file does not exist
161 if(!file.exists())
162 {
163 file.create(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 00644);
164 }
165
166 webBrowserPersist.saveDocument(contentDocument, file, null, contentDocument.contentType, webBrowserPersistInterface.ENCODE_FLAGS_ENCODE_BASIC_ENTITIES, 0);
167 }
168 }
169
170 // Searches the HTML
171 function webdeveloper_searchHTML()
172 {
173 var searchText = document.getElementById("webdeveloper-search-dashboard-text").value;
174
175 // If the search text is set
176 if(searchText)
177 {
178 document.getElementById("webdeveloper-edit-html-text-box").focus();
179
180 // If the search failed to find a match
181 if(!window.find(searchText, false, false, true, false, false, false))
182 {
183 document.getElementById("webdeveloper-edit-html-text-box").setSelectionRange(0, 0);
184 window.find(searchText, false, false, true, false, false, false);
185 }
186 }
187 }
188
189 // Searches the HTML when the enter key is pressed
190 function webdeveloper_searchTextKeyPress(event)
191 {
192 var keyCode = event.keyCode;
193
194 // If the key code is set and is 13
195 if(keyCode && keyCode == 13)
196 {
197 webdeveloper_searchHTML();
198 }
199 }
200
201 // Unloads edit HTML
202 function webdeveloper_unloadEditHTML()
203 {
204 var browser = window.top.getBrowser();
205 var mainTabBox = browser.mTabBox;
206
207 webdeveloper_editHTMLOldHTML = null;
208
209 window.clearInterval(webdeveloper_editHTMLIntervalId);
210
211 // Try to remove the event listener
212 try
213 {
214 document.getElementById("webdeveloper-search-dashboard-text").removeEventListener("keypress", webdeveloper_searchTextKeyPress, false);
215 }
216 catch(exception)
217 {
218 // Do nothing
219 }
220
221 // Try to remove the event listener
222 try
223 {
224 mainTabBox.removeEventListener("select", webdeveloper_editHTMLMainTabSelect, false);
225 }
226 catch(exception)
227 {
228 // Do nothing
229 }
230
231 // Try to remove the event listener
232 try
233 {
234 window.top.removeEventListener("load", webdeveloper_editHTMLContentPageLoad, true);
235 }
236 catch(exception)
237 {
238 // Do nothing
239 }
240
241 window.top.BrowserReload();
242 }
243
244 // Updates the HTML
245 function webdeveloper_updateHTML()
246 {
247 // If the update frequency is greater than 0
248 if(webdeveloper_editHTMLUpdateFrequency > 0)
249 {
250 webdeveloper_editHTMLIntervalId = window.setInterval(webdeveloper_applyHTML, webdeveloper_editHTMLUpdateFrequency);
251 }
252 }