PageRenderTime 144ms CodeModel.GetById 30ms RepoModel.GetById 1ms app.codeStats 2ms

/extensions/cck/browser/resources/content/cckwizard/cckwizard.js

https://bitbucket.org/mkato/mozilla-1.9.0-win64
JavaScript | 2995 lines | 2532 code | 368 blank | 95 comment | 568 complexity | 6853b72d529723f7a24f722e0cda2c01 MD5 | raw file
Possible License(s): LGPL-3.0, MIT, BSD-3-Clause, MPL-2.0-no-copyleft-exception, GPL-2.0, LGPL-2.1
  1. /*
  2. # ***** BEGIN LICENSE BLOCK *****
  3. # Version: MPL 1.1/GPL 2.0/LGPL 2.1
  4. #
  5. # The contents of this file are subject to the Mozilla Public License Version
  6. # 1.1 (the "License"); you may not use this file except in compliance with
  7. # the License. You may obtain a copy of the License at
  8. # http://www.mozilla.org/MPL/
  9. #
  10. # Software distributed under the License is distributed on an "AS IS" basis,
  11. # WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  12. # for the specific language governing rights and limitations under the
  13. # License.
  14. #
  15. # The Original Code is the Client Customization Kit (CCK).
  16. #
  17. # The Initial Developer of the Original Code is IBM Corp.
  18. # Portions created by the Initial Developer are Copyright (C) 2005
  19. # the Initial Developer. All Rights Reserved.
  20. #
  21. # Contributor(s):
  22. # Ben Goodger <beng@google.com> (Original author)
  23. # Gavin Sharp <gavin@gavinsharp.com>
  24. # Joe Hughes <joe@retrovirus.com>
  25. # Pamela Greene <pamg.bugs@gmail.com>
  26. #
  27. # Alternatively, the contents of this file may be used under the terms of
  28. # either the GNU General Public License Version 2 or later (the "GPL"), or
  29. # the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  30. # in which case the provisions of the GPL or the LGPL are applicable instead
  31. # of those above. If you wish to allow use of your version of this file only
  32. # under the terms of either the GPL or the LGPL, and not to allow others to
  33. # use your version of this file under the terms of the MPL, indicate your
  34. # decision by deleting the provisions above and replace them with the notice
  35. # and other provisions required by the GPL or the LGPL. If you do not delete
  36. # the provisions above, a recipient may use your version of this file under
  37. # the terms of any one of the MPL, the GPL or the LGPL.
  38. #
  39. # ***** END LICENSE BLOCK *****
  40. */
  41. var currentconfigname;
  42. var currentconfigpath;
  43. var configarray = new Array();
  44. const nsIPrefBranch = Components.interfaces.nsIPrefBranch;
  45. var gPrefBranch = Components.classes["@mozilla.org/preferences-service;1"]
  46. .getService(nsIPrefBranch);
  47. var gPromptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
  48. .getService(Components.interfaces.nsIPromptService);
  49. function choosefile(labelname)
  50. {
  51. try {
  52. var nsIFilePicker = Components.interfaces.nsIFilePicker;
  53. var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
  54. var bundle = document.getElementById("bundle_cckwizard");
  55. fp.init(window, bundle.getString("chooseFile"), nsIFilePicker.modeOpen);
  56. fp.appendFilters(nsIFilePicker.filterAll);
  57. if (fp.show() == nsIFilePicker.returnOK && fp.fileURL.spec && fp.fileURL.spec.length > 0) {
  58. var label = document.getElementById(labelname);
  59. label.value = fp.file.path;
  60. }
  61. }
  62. catch(ex) {
  63. }
  64. }
  65. function choosedir(labelname)
  66. {
  67. try {
  68. var keepgoing = true;
  69. while (keepgoing) {
  70. var nsIFilePicker = Components.interfaces.nsIFilePicker;
  71. var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
  72. var bundle = document.getElementById("bundle_cckwizard");
  73. fp.init(window, bundle.getString("chooseDirectory"), nsIFilePicker.modeGetFolder);
  74. fp.appendFilters(nsIFilePicker.filterHTML | nsIFilePicker.filterText |
  75. nsIFilePicker.filterAll | nsIFilePicker.filterImages | nsIFilePicker.filterXML);
  76. if (fp.show() == nsIFilePicker.returnOK && fp.fileURL.spec && fp.fileURL.spec.length > 0) {
  77. var label = document.getElementById(labelname);
  78. label.value = fp.file.path;
  79. }
  80. keepgoing = false;
  81. }
  82. }
  83. catch(ex) {
  84. }
  85. }
  86. function chooseimage(labelname, imagename)
  87. {
  88. try {
  89. var nsIFilePicker = Components.interfaces.nsIFilePicker;
  90. var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
  91. var bundle = document.getElementById("bundle_cckwizard");
  92. fp.init(window, bundle.getString("chooseImage"), nsIFilePicker.modeOpen);
  93. fp.appendFilters(nsIFilePicker.filterImages);
  94. if (fp.show() == nsIFilePicker.returnOK && fp.fileURL.spec && fp.fileURL.spec.length > 0) {
  95. var label = document.getElementById(labelname);
  96. label.value = fp.file.path;
  97. document.getElementById(imagename).src = fp.fileURL.spec;
  98. }
  99. }
  100. catch(ex) {
  101. }
  102. }
  103. function initimage(labelname, imagename)
  104. {
  105. var sourcefile = Components.classes["@mozilla.org/file/local;1"]
  106. .createInstance(Components.interfaces.nsILocalFile);
  107. try {
  108. sourcefile.initWithPath(document.getElementById(labelname).value);
  109. var ioServ = Components.classes["@mozilla.org/network/io-service;1"]
  110. .getService(Components.interfaces.nsIIOService);
  111. var foo = ioServ.newFileURI(sourcefile);
  112. document.getElementById(imagename).src = foo.spec;
  113. } catch (e) {
  114. document.getElementById(imagename).src = '';
  115. }
  116. }
  117. function CreateConfig()
  118. {
  119. window.openDialog("chrome://cckwizard/content/config.xul","createconfig","chrome,centerscreen,modal");
  120. updateconfiglist();
  121. }
  122. function CopyConfig()
  123. {
  124. window.openDialog("chrome://cckwizard/content/config.xul","copyconfig","chrome,centerscreen,modal");
  125. updateconfiglist();
  126. }
  127. function DeleteConfig()
  128. {
  129. var bundle = document.getElementById("bundle_cckwizard");
  130. var button = gPromptService.confirmEx(window, bundle.getString("windowTitle"), bundle.getString("deleteConfirm"),
  131. gPromptService.BUTTON_TITLE_YES * gPromptService.BUTTON_POS_0 +
  132. gPromptService.BUTTON_TITLE_NO * gPromptService.BUTTON_POS_1,
  133. null, null, null, null, {});
  134. if (button == 0) {
  135. gPrefBranch.deleteBranch("cck.config."+currentconfigname);
  136. currentconfigname = "";
  137. currentconfigpath = "";
  138. updateconfiglist();
  139. }
  140. }
  141. function SetSaveOnExitPref()
  142. {
  143. gPrefBranch.setBoolPref("cck.save_on_exit", document.getElementById("saveOnExit").checked);
  144. }
  145. function OpenCCKWizard()
  146. {
  147. try {
  148. document.getElementById("saveOnExit").checked = gPrefBranch.getBoolPref("cck.save_on_exit");
  149. } catch (ex) {
  150. }
  151. if (Components.interfaces.nsIZipWriter) {
  152. document.getElementById("zipLocation").hidden = true;
  153. document.getElementById("zipLocationLabel").hidden = true;
  154. document.getElementById("zipLocationButton").hidden = true;
  155. } else {
  156. try {
  157. document.getElementById("zipLocation").value = gPrefBranch.getCharPref("cck.path_to_zip");
  158. } catch (ex) {
  159. }
  160. }
  161. }
  162. function ShowMain()
  163. {
  164. document.getElementById('example-window').canRewind = false;
  165. updateconfiglist();
  166. }
  167. function updateconfiglist()
  168. {
  169. var menulist = document.getElementById('byb-configs')
  170. menulist.selectedIndex = -1;
  171. menulist.removeAllItems();
  172. var configname;
  173. var selecteditem = false;
  174. var list = gPrefBranch.getChildList("cck.config.", {});
  175. for (var i = 0; i < list.length; ++i) {
  176. configname = list[i].replace(/cck.config./g, "");
  177. var menulistitem = menulist.appendItem(configname,configname);
  178. menulistitem.minWidth=menulist.width;
  179. if (configname == currentconfigname) {
  180. menulist.selectedItem = menulistitem;
  181. selecteditem = true;
  182. document.getElementById('example-window').canAdvance = true;
  183. document.getElementById('byb-configs').disabled = false;
  184. document.getElementById('deleteconfig').disabled = false;
  185. document.getElementById('showconfig').disabled = false;
  186. document.getElementById('copyconfig').disabled = false;
  187. }
  188. }
  189. if ((!selecteditem) && (list.length > 0)) {
  190. menulist.selectedIndex = 0;
  191. setcurrentconfig(list[0].replace(/cck.config./g, ""));
  192. }
  193. if (list.length == 0) {
  194. document.getElementById('example-window').canAdvance = false;
  195. document.getElementById('byb-configs').disabled = true;
  196. document.getElementById('deleteconfig').disabled = true;
  197. document.getElementById('showconfig').disabled = true;
  198. document.getElementById('copyconfig').disabled = true;
  199. currentconfigname = "";
  200. currentconfigpath = "";
  201. }
  202. }
  203. function setcurrentconfig(newconfig)
  204. {
  205. var destdir = Components.classes["@mozilla.org/file/local;1"]
  206. .createInstance(Components.interfaces.nsILocalFile);
  207. if (currentconfigpath) {
  208. destdir.initWithPath(currentconfigpath);
  209. CCKWriteConfigFile(destdir);
  210. }
  211. currentconfigname = newconfig;
  212. currentconfigpath = gPrefBranch.getCharPref("cck.config." + currentconfigname);
  213. destdir.initWithPath(currentconfigpath);
  214. ClearAll();
  215. CCKReadConfigFile(destdir);
  216. }
  217. function saveconfig()
  218. {
  219. if (currentconfigpath) {
  220. var destdir = Components.classes["@mozilla.org/file/local;1"]
  221. .createInstance(Components.interfaces.nsILocalFile);
  222. destdir.initWithPath(currentconfigpath);
  223. CCKWriteConfigFile(destdir);
  224. }
  225. }
  226. function CloseCCKWizard()
  227. {
  228. if (document.getElementById('example-window').pageIndex == 0)
  229. return;
  230. var saveOnExit;
  231. try {
  232. saveOnExit = gPrefBranch.getBoolPref("cck.save_on_exit");
  233. } catch (ex) {
  234. saveOnExit = false;
  235. }
  236. var button;
  237. if (!saveOnExit) {
  238. var bundle = document.getElementById("bundle_cckwizard");
  239. var button = gPromptService.confirmEx(window, bundle.getString("windowTitle"), bundle.getString("cancelConfirm"),
  240. (gPromptService.BUTTON_TITLE_YES * gPromptService.BUTTON_POS_0) +
  241. (gPromptService.BUTTON_TITLE_NO * gPromptService.BUTTON_POS_1),
  242. null, null, null, null, {});
  243. } else {
  244. button = 0;
  245. }
  246. if (button == 0) {
  247. saveconfig();
  248. }
  249. gPrefBranch.setCharPref("cck.path_to_zip", document.getElementById("zipLocation").value);
  250. }
  251. function OnConfigLoad()
  252. {
  253. configCheckOKButton();
  254. }
  255. function ClearAll()
  256. {
  257. /* clear out all data */
  258. var elements = document.getElementsByAttribute("id", "*");
  259. for (var i=0; i < elements.length; i++) {
  260. if ((elements[i].nodeName == "textbox") ||
  261. (elements[i].nodeName == "radiogroup") ||
  262. (elements[i].id == "RootKey1") ||
  263. (elements[i].id == "Type1")) {
  264. if ((elements[i].id != "saveOnExit") && (elements[i].id != "zipLocation")) {
  265. elements[i].value = "";
  266. }
  267. } else if (elements[i].nodeName == "checkbox") {
  268. if (elements[i].id != "saveOnExit")
  269. elements[i].checked = false;
  270. } else if (elements[i].className == "ccklist") {
  271. document.getElementById(elements[i].id).clear();
  272. } else if (elements[i].id == "defaultSearchEngine") {
  273. document.getElementById(elements[i].id).removeAllItems();
  274. document.getElementById(elements[i].id).value = "";
  275. }
  276. }
  277. }
  278. function OnConfigOK()
  279. {
  280. if (!(ValidateDir('cnc-location'))) {
  281. return false;
  282. }
  283. var configname = document.getElementById('cnc-name').value;
  284. var configlocation = document.getElementById('cnc-location').value;
  285. if (window.name == 'copyconfig') {
  286. var destdir = Components.classes["@mozilla.org/file/local;1"]
  287. .createInstance(Components.interfaces.nsILocalFile);
  288. destdir.initWithPath(configlocation);
  289. this.opener.CCKWriteConfigFile(destdir);
  290. }
  291. gPrefBranch.setCharPref("cck.config." + configname, configlocation);
  292. this.opener.setcurrentconfig(configname);
  293. }
  294. function configCheckOKButton()
  295. {
  296. if ((document.getElementById("cnc-name").value) && (document.getElementById("cnc-location").value)) {
  297. document.documentElement.getButton("accept").setAttribute( "disabled", "false" );
  298. } else {
  299. document.documentElement.getButton("accept").setAttribute( "disabled", "true" );
  300. }
  301. }
  302. function onNewPreference()
  303. {
  304. window.openDialog("chrome://cckwizard/content/pref.xul","newpref","chrome,centerscreen,modal");
  305. }
  306. function onEditPreference()
  307. {
  308. window.openDialog("chrome://cckwizard/content/pref.xul","editpref","chrome,centerscreen,modal");
  309. }
  310. Array.prototype.exists = function (x) {
  311. for (var i = 0; i < this.length; i++) {
  312. if (this[i] == x) return true;
  313. }
  314. return false;
  315. }
  316. var prefsLockOnly = ["browser.startup.homepage", "browser.throbber.url",
  317. "startup.homepage_override_url", "startup.homepage_welcome_url",
  318. "browser.search.defaultenginename", "browser.search.order.1",
  319. "network.proxy.type", "network.proxy.http", "network.proxy.http_port",
  320. "network.proxy.share_proxy_settings", "network.proxy.ssl",
  321. "network.proxy.ssl_port", "network.proxy.ftp", "network.proxy.ftp_port",
  322. "network.proxy.gopher", "network.proxy.gopher_port", "network.proxy.socks",
  323. "network.proxy.socks_port", "network.proxy.socks_version",
  324. "network.proxy.no_proxies_on", "network.proxy.autoconfig_url"];
  325. function OnPrefLoad()
  326. {
  327. var listbox = this.opener.document.getElementById('prefList');
  328. if (window.name == 'editpref') {
  329. window.title = listbox.selectedItem.cck['type'];
  330. if (listbox.selectedItem.cck['type'] == "integer") {
  331. document.getElementById('prefvalue').preftype = nsIPrefBranch.PREF_INT;
  332. }
  333. document.getElementById('prefname').value = listbox.selectedItem.label;
  334. if (prefsLockOnly.exists(listbox.selectedItem.label)) {
  335. document.getElementById('prefvalue').disabled = true;
  336. document.getElementById('prefvalue').value = this.opener.document.getElementById("bundle_cckwizard").getString("lockError");
  337. } else {
  338. document.getElementById('prefvalue').value = listbox.selectedItem.value;
  339. }
  340. document.getElementById('prefname').disabled = true;
  341. if (listbox.selectedItem.cck['lock'] == "true")
  342. document.getElementById('lockPref').checked = true;
  343. if (listbox.selectedItem.cck['type'] == "boolean") {
  344. document.getElementById('prefvalue').hidden = true;
  345. document.getElementById('prefvalueboolean').hidden = false;
  346. document.getElementById('prefvalueboolean').value = listbox.selectedItem.value;
  347. }
  348. }
  349. prefCheckOKButton();
  350. }
  351. function prefCheckOKButton()
  352. {
  353. if (document.getElementById("prefname").value) {
  354. document.documentElement.getButton("accept").setAttribute( "disabled", "false" );
  355. } else {
  356. document.documentElement.getButton("accept").setAttribute( "disabled", "true" );
  357. }
  358. }
  359. function prefSetPrefValue()
  360. {
  361. var prefname = document.getElementById('prefname').value;
  362. try {
  363. var preftype = gPrefBranch.getPrefType(prefname);
  364. switch (preftype) {
  365. case nsIPrefBranch.PREF_STRING:
  366. document.getElementById('prefvalue').value = gPrefBranch.getCharPref(prefname);
  367. document.getElementById('prefvalue').hidden = false;
  368. document.getElementById('prefvalueboolean').hidden = true;
  369. document.getElementById('prefvalue').preftype = nsIPrefBranch.PREF_STRING;
  370. break;
  371. case nsIPrefBranch.PREF_INT:
  372. document.getElementById('prefvalue').value = gPrefBranch.getIntPref(prefname);
  373. document.getElementById('prefvalue').hidden = false;
  374. document.getElementById('prefvalueboolean').hidden = true;
  375. document.getElementById('prefvalue').preftype = nsIPrefBranch.PREF_INT;
  376. break;
  377. case nsIPrefBranch.PREF_BOOL:
  378. document.getElementById('prefvalue').value = gPrefBranch.getBoolPref(prefname);
  379. document.getElementById('prefvalue').hidden = true;
  380. document.getElementById('prefvalueboolean').hidden = false;
  381. document.getElementById('prefvalueboolean').value = gPrefBranch.getBoolPref(prefname);
  382. document.getElementById('prefvalue').preftype = nsIPrefBranch.PREF_BOOL;
  383. break;
  384. default:
  385. document.getElementById('prefvalue').hidden = false;
  386. document.getElementById('prefvalueboolean').hidden = true;
  387. break;
  388. }
  389. } catch (ex) {
  390. document.getElementById('prefvalue').hidden = false;
  391. document.getElementById('prefvalueboolean').hidden = true;
  392. }
  393. if (prefsLockOnly.exists(prefname)) {
  394. document.getElementById('prefvalue').disabled = true;
  395. document.getElementById('prefvalue').value = this.opener.document.getElementById("bundle_cckwizard").getString("lockError");
  396. } else {
  397. document.getElementById('prefvalue').disabled = false;
  398. }
  399. }
  400. function OnPrefOK()
  401. {
  402. var bundle = this.opener.document.getElementById("bundle_cckwizard");
  403. var listbox = this.opener.document.getElementById("prefList");
  404. for (var i=0; i < listbox.getRowCount(); i++) {
  405. if ((document.getElementById('prefname').value == listbox.getItemAtIndex(i).label) && (window.name == 'newpref')) {
  406. gPromptService.alert(window, bundle.getString("windowTitle"),
  407. bundle.getString("prefExistsError"));
  408. return false;
  409. }
  410. }
  411. if (prefsLockOnly.exists(document.getElementById('prefname').value)) {
  412. document.getElementById('prefvalue').value = "";
  413. }
  414. var value = document.getElementById('prefvalue').value;
  415. if ((document.getElementById('prefvalue').preftype == nsIPrefBranch.PREF_INT) && (!(prefsLockOnly.exists(document.getElementById('prefname').value)))) {
  416. if (parseInt(value) != value) {
  417. gPromptService.alert(window, bundle.getString("windowTitle"),
  418. bundle.getString("intError"));
  419. return false;
  420. }
  421. }
  422. listbox = this.opener.document.getElementById('prefList');
  423. var listitem;
  424. if (window.name == 'newpref') {
  425. var preftype;
  426. if ((value.toLowerCase() == "true") || (value.toLowerCase() == "false")) {
  427. preftype = "boolean";
  428. } else if (parseInt(value) == value) {
  429. preftype = "integer";
  430. } else {
  431. preftype = "string";
  432. if (value.charAt(0) == '"')
  433. value = value.substring(1,value.length);
  434. if (value.charAt(value.length-1) == '"')
  435. if (value.charAt(value.length-2) != '\\')
  436. value = value.substring(0,value.length-1);
  437. }
  438. listitem = listbox.appendItem(document.getElementById('prefname').value, value);
  439. listitem.cck['type'] = preftype;
  440. } else {
  441. listitem = listbox.selectedItem;
  442. listitem.setAttribute("label", document.getElementById('prefname').value);
  443. value = document.getElementById('prefvalue').value;
  444. if (value.charAt(0) == '"')
  445. value = value.substring(1,value.length);
  446. if (value.charAt(value.length-1) == '"')
  447. if (value.charAt(value.length-2) != '\\')
  448. value = value.substring(0,value.length-1);
  449. listitem.setAttribute("value", value);
  450. }
  451. if (document.getElementById('lockPref').checked) {
  452. listitem.cck['lock'] = "true";
  453. } else {
  454. listitem.cck['lock'] = "";
  455. }
  456. }
  457. function getPageId()
  458. {
  459. var temp = document.getElementById('example-window');
  460. if (!temp)
  461. temp = this.opener.document.getElementById('example-window');
  462. return temp.currentPage.id;
  463. }
  464. function onNewBookmark()
  465. {
  466. window.openDialog("chrome://cckwizard/content/bookmark.xul","newbookmark","chrome,centerscreen,modal");
  467. }
  468. function onEditBookmark()
  469. {
  470. window.openDialog("chrome://cckwizard/content/bookmark.xul","editbookmark","chrome,centerscreen,modal");
  471. }
  472. function OnBookmarkLoad()
  473. {
  474. var listbox = this.opener.document.getElementById(getPageId() +'.bookmarkList');
  475. if (window.name == 'editbookmark') {
  476. document.getElementById('bookmarkname').value = listbox.selectedItem.label;
  477. document.getElementById('bookmarkurl').value = listbox.selectedItem.value;
  478. document.getElementById('bookmarktype').value = listbox.selectedItem.cck['type'];
  479. }
  480. bookmarkCheckOKButton();
  481. }
  482. function bookmarkCheckOKButton()
  483. {
  484. if (document.getElementById('bookmarktype').value == "separator") {
  485. document.getElementById('bookmarkname').disabled = true;
  486. document.getElementById('bookmarkurl').disabled = true;
  487. } else {
  488. document.getElementById('bookmarkname').disabled = false;
  489. document.getElementById('bookmarkurl').disabled = false;
  490. }
  491. if ((document.getElementById('bookmarktype').value == "separator") || ((document.getElementById("bookmarkname").value) && (document.getElementById("bookmarkurl").value))) {
  492. document.documentElement.getButton("accept").disabled = false;
  493. } else {
  494. document.documentElement.getButton("accept").disabled = true;
  495. }
  496. }
  497. function OnBookmarkOK()
  498. {
  499. var listbox = this.opener.document.getElementById(getPageId() +'.bookmarkList');
  500. var listitem;
  501. if (window.name == 'newbookmark') {
  502. if (document.getElementById('bookmarktype').value == "separator") {
  503. listitem = listbox.appendItem("----------", "");
  504. } else {
  505. listitem = listbox.appendItem(document.getElementById('bookmarkname').value, document.getElementById('bookmarkurl').value);
  506. }
  507. listitem.setAttribute("class", "listitem-iconic");
  508. } else {
  509. listitem = listbox.selectedItem;
  510. if (document.getElementById('bookmarktype').value == "separator") {
  511. listitem.setAttribute("label", "----------");
  512. listitem.setAttribute("value", "");
  513. } else {
  514. listitem.setAttribute("label", document.getElementById('bookmarkname').value);
  515. listitem.setAttribute("value", document.getElementById('bookmarkurl').value);
  516. }
  517. }
  518. listitem.cck['type'] = document.getElementById('bookmarktype').value;
  519. if (document.getElementById('bookmarktype').value == "live") {
  520. listitem.setAttribute("image", "chrome://browser/skin/page-livemarks.png");
  521. } else if (document.getElementById('bookmarktype').value == "separator") {
  522. listitem.setAttribute("image", "");
  523. } else {
  524. listitem.setAttribute("image", "chrome://browser/skin/Bookmarks-folder.png");
  525. }
  526. }
  527. function enableBookmarkButtons() {
  528. var listbox = document.getElementById(getPageId() +'.bookmarkList');
  529. if (listbox.selectedItem) {
  530. document.getElementById(getPageId() +'editBookmarkButton').disabled = false;
  531. document.getElementById(getPageId() +'deleteBookmarkButton').disabled = false;
  532. } else {
  533. document.getElementById(getPageId() +'editBookmarkButton').disabled = true;
  534. document.getElementById(getPageId() +'deleteBookmarkButton').disabled = true;
  535. }
  536. }
  537. function onNewBrowserPlugin()
  538. {
  539. window.openDialog("chrome://cckwizard/content/plugin.xul","newplugin","chrome,centerscreen,modal");
  540. }
  541. function onEditBrowserPlugin()
  542. {
  543. window.openDialog("chrome://cckwizard/content/plugin.xul","editplugin","chrome,centerscreen,modal");
  544. }
  545. function OnPluginLoad()
  546. {
  547. var listbox = this.opener.document.getElementById('browserPluginList');
  548. if (window.name == 'editplugin') {
  549. document.getElementById('pluginpath').value = listbox.selectedItem.label;
  550. document.getElementById('plugintype').value = listbox.selectedItem.value;
  551. }
  552. pluginCheckOKButton();
  553. }
  554. function pluginCheckOKButton()
  555. {
  556. if (document.getElementById("pluginpath").value) {
  557. document.documentElement.getButton("accept").setAttribute( "disabled", "false" );
  558. } else {
  559. document.documentElement.getButton("accept").setAttribute( "disabled", "true" );
  560. }
  561. }
  562. function OnBrowserPluginOK()
  563. {
  564. if (!(ValidateFile('pluginpath'))) {
  565. return false;
  566. }
  567. var listbox = this.opener.document.getElementById('browserPluginList');
  568. if (window.name == 'newplugin') {
  569. var listitem = listbox.appendItem(document.getElementById('pluginpath').value, document.getElementById('plugintype').value);
  570. } else {
  571. listbox.selectedItem.label = document.getElementById('pluginpath').value;
  572. listbox.selectedItem.value = document.getElementById('plugintype').selectedItem.value;
  573. }
  574. }
  575. function onNewRegKey()
  576. {
  577. window.openDialog("chrome://cckwizard/content/reg.xul","newreg","chrome,centerscreen,modal");
  578. }
  579. function onEditRegKey()
  580. {
  581. window.openDialog("chrome://cckwizard/content/reg.xul","editreg","chrome,centerscreen,modal");
  582. }
  583. function OnRegLoad()
  584. {
  585. var listbox = this.opener.document.getElementById('regList');
  586. if (window.name == 'editreg') {
  587. document.getElementById('PrettyName').value = listbox.selectedItem.label;
  588. document.getElementById('RootKey').value = listbox.selectedItem.cck['rootkey'];
  589. document.getElementById('Key').value = listbox.selectedItem.cck['key'];
  590. document.getElementById('Name').value = listbox.selectedItem.cck['name'];
  591. document.getElementById('NameValue').value = listbox.selectedItem.cck['namevalue'];
  592. document.getElementById('Type').value = listbox.selectedItem.cck['type'];
  593. }
  594. regCheckOKButton();
  595. }
  596. function regCheckOKButton()
  597. {
  598. if ((document.getElementById("PrettyName").value) &&
  599. (document.getElementById("Key").value) &&
  600. (document.getElementById("Name").value) &&
  601. (document.getElementById("NameValue").value)) {
  602. document.documentElement.getButton("accept").setAttribute( "disabled", "false" );
  603. } else {
  604. document.documentElement.getButton("accept").setAttribute( "disabled", "true" );
  605. }
  606. }
  607. function OnRegOK()
  608. {
  609. var listbox = this.opener.document.getElementById('regList');
  610. var listitem;
  611. if (window.name == 'newreg') {
  612. listitem = listbox.appendItem(document.getElementById('PrettyName').value, "");
  613. } else {
  614. listitem = listbox.selectedItem;
  615. listitem.setAttribute("label", document.getElementById('PrettyName').value);
  616. }
  617. listitem.cck['rootkey'] = document.getElementById('RootKey').value;
  618. listitem.cck['key'] = document.getElementById('Key').value;
  619. listitem.cck['name'] = document.getElementById('Name').value;
  620. listitem.cck['namevalue'] = document.getElementById('NameValue').value;
  621. listitem.cck['type'] = document.getElementById('Type').value;
  622. }
  623. function RefreshDefaultSearchEngines()
  624. {
  625. var menulist;
  626. menulist = document.getElementById('defaultSearchEngine');
  627. if (!menulist)
  628. menulist = this.opener.document.getElementById('defaultSearchEngine');
  629. var listbox;
  630. listbox = document.getElementById('searchEngineList');
  631. if (!listbox)
  632. listbox = this.opener.document.getElementById('searchEngineList');
  633. var curitem = menulist.value;
  634. menulist.selectedIndex = -1;
  635. menulist.removeAllItems();
  636. var setcuritem = false;
  637. var bundle = document.getElementById("bundle_cckwizard");
  638. var menulistitem = menulist.appendItem(bundle.getString("useBrowserDefault"), "");
  639. menulistitem.minWidth=menulist.width;
  640. for (var i=0; i < listbox.getRowCount(); i++) {
  641. var listitem = listbox.getItemAtIndex(i);
  642. name = listitem.getAttribute("label");
  643. menulistitem = menulist.appendItem(name, name);
  644. if (name == curitem)
  645. setcuritem = true;
  646. menulistitem.minWidth=menulist.width;
  647. }
  648. var ss = Components.classes["@mozilla.org/browser/search-service;1"]
  649. .getService(Components.interfaces.nsIBrowserSearchService);
  650. var engines = ss.getVisibleEngines({ });
  651. for (var i=0; i < engines.length; i++) {
  652. name = engines[i].name;
  653. menulistitem = menulist.appendItem(name, name);
  654. if (name == curitem)
  655. setcuritem = true;
  656. menulistitem.minWidth=menulist.width;
  657. }
  658. if (setcuritem)
  659. menulist.value = curitem;
  660. else
  661. menulist.selectedIndex = 0;
  662. }
  663. function onNewSearchEngine()
  664. {
  665. window.openDialog("chrome://cckwizard/content/searchengine.xul","newsearchengine","chrome,centerscreen,modal");
  666. }
  667. function onEditSearchEngine()
  668. {
  669. window.openDialog("chrome://cckwizard/content/searchengine.xul","editsearchengine","chrome,centerscreen,modal");
  670. }
  671. function OnSearchEngineLoad()
  672. {
  673. var listbox = this.opener.document.getElementById('searchEngineList');
  674. if (window.name == 'editsearchengine') {
  675. document.getElementById('searchengine').value = listbox.selectedItem.cck['engineurl'];
  676. document.getElementById('searchengineicon').value = listbox.selectedItem.cck['iconurl'];
  677. if (listbox.selectedItem.cck['iconurl'].length > 0) {
  678. document.getElementById('icon').src = listbox.selectedItem.cck['iconurl'];
  679. } else {
  680. document.getElementById('icon').src = getSearchEngineImage(listbox.selectedItem.cck['engineurl']);
  681. }
  682. }
  683. searchEngineCheckOKButton();
  684. }
  685. function searchEngineCheckOKButton()
  686. {
  687. if (document.getElementById("searchengine").value) {
  688. document.documentElement.getButton("accept").setAttribute( "disabled", "false" );
  689. } else {
  690. document.documentElement.getButton("accept").setAttribute( "disabled", "true" );
  691. }
  692. if (!(document.getElementById("searchengineicon").value)) {
  693. var searchengineimage;
  694. if (searchengineimage = getSearchEngineImage(document.getElementById("searchengine").value)) {
  695. document.getElementById('icon').src = searchengineimage;
  696. document.getElementById("searchengineicon").setAttribute( "disabled", "true" );
  697. } else {
  698. document.getElementById('icon').src = "";
  699. document.getElementById("searchengineicon").removeAttribute( "disabled");
  700. }
  701. } else {
  702. try {
  703. var sourcefile = Components.classes["@mozilla.org/file/local;1"]
  704. .createInstance(Components.interfaces.nsILocalFile);
  705. sourcefile.initWithPath(document.getElementById('searchengineicon').value);
  706. var ioServ = Components.classes["@mozilla.org/network/io-service;1"]
  707. .getService(Components.interfaces.nsIIOService);
  708. var imgfile = ioServ.newFileURI(sourcefile);
  709. document.getElementById('icon').src = imgfile.spec;
  710. } catch (ex) {
  711. document.getElementById('icon').src = "";
  712. }
  713. }
  714. }
  715. function OnSearchEngineOK()
  716. {
  717. if (!(ValidateFile('searchengine', 'searchengineicon'))) {
  718. return false;
  719. }
  720. var listbox = this.opener.document.getElementById('searchEngineList');
  721. var listitem;
  722. var name = getSearchEngineName(document.getElementById('searchengine').value);
  723. if (!name) {
  724. var bundle = document.getElementById("bundle_cckwizard");
  725. gPromptService.alert(window, bundle.getString("windowTitle"),
  726. bundle.getString("searchEngine.error"));
  727. return false;
  728. }
  729. if (window.name == 'newsearchengine') {
  730. listitem = listbox.appendItem(name, "");
  731. listitem.setAttribute("class", "listitem-iconic");
  732. } else {
  733. listitem = listbox.selectedItem;
  734. listbox.selectedItem.label = name;
  735. }
  736. if (document.getElementById('searchengineicon').value) {
  737. var sourcefile = Components.classes["@mozilla.org/file/local;1"]
  738. .createInstance(Components.interfaces.nsILocalFile);
  739. sourcefile.initWithPath(document.getElementById('searchengineicon').value);
  740. var ioServ = Components.classes["@mozilla.org/network/io-service;1"]
  741. .getService(Components.interfaces.nsIIOService);
  742. var imgfile = ioServ.newFileURI(sourcefile);
  743. listitem.setAttribute("image", imgfile.spec);
  744. } else {
  745. listitem.setAttribute("image", getSearchEngineImage(document.getElementById('searchengine').value));
  746. }
  747. listitem.cck['name'] = name;
  748. listitem.cck['engineurl'] = document.getElementById('searchengine').value;
  749. listitem.cck['iconurl'] = document.getElementById('searchengineicon').value;
  750. RefreshDefaultSearchEngines();
  751. }
  752. /* This code was lifted from nsSearchService.js.
  753. It's only purpose is to get the name of the search engine */
  754. const kUselessLine = /^\s*($|#)/i;
  755. function onNewCert()
  756. {
  757. window.openDialog("chrome://cckwizard/content/cert.xul","newcert","chrome,centerscreen,modal");
  758. }
  759. function onEditCert()
  760. {
  761. window.openDialog("chrome://cckwizard/content/cert.xul","editcert","chrome,centerscreen,modal")
  762. }
  763. function OnCertLoad()
  764. {
  765. var listbox = this.opener.document.getElementById('certList');
  766. if (window.name == 'editcert') {
  767. document.getElementById('certpath').value = listbox.selectedItem.label;
  768. var trustString = listbox.selectedItem.value;
  769. if (trustString.charAt(0) == 'C') {
  770. document.getElementById("trustSSL").checked = true;
  771. }
  772. if (trustString.charAt(2) == 'C') {
  773. document.getElementById("trustEmail").checked = true;
  774. }
  775. if (trustString.charAt(4) == 'C') {
  776. document.getElementById("trustObjSign").checked = true;
  777. }
  778. }
  779. certCheckOKButton();
  780. }
  781. function certCheckOKButton()
  782. {
  783. if (document.getElementById("certpath").value) {
  784. document.documentElement.getButton("accept").setAttribute( "disabled", "false" );
  785. } else {
  786. document.documentElement.getButton("accept").setAttribute( "disabled", "true" );
  787. }
  788. }
  789. function OnCertOK()
  790. {
  791. if (!(ValidateFile('certpath'))) {
  792. return false;
  793. }
  794. var trustString = "";
  795. if (document.getElementById("trustSSL").checked) {
  796. trustString += "C,"
  797. } else {
  798. trustString += "c,"
  799. }
  800. if (document.getElementById("trustEmail").checked) {
  801. trustString += "C,"
  802. } else {
  803. trustString += "c,"
  804. }
  805. if (document.getElementById("trustObjSign").checked) {
  806. trustString += "C"
  807. } else {
  808. trustString += "c"
  809. }
  810. var listbox = this.opener.document.getElementById('certList');
  811. var listitem;
  812. if (window.name == 'newcert') {
  813. listitem = listbox.appendItem(document.getElementById('certpath').value, trustString);
  814. } else {
  815. listitem = listbox.selectedItem;
  816. listbox.selectedItem.label = document.getElementById('certpath').value;
  817. listbox.selectedItem.value = trustString;
  818. }
  819. }
  820. function onNewBundle()
  821. {
  822. try {
  823. var nsIFilePicker = Components.interfaces.nsIFilePicker;
  824. var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
  825. var bundle = document.getElementById("bundle_cckwizard");
  826. fp.init(window, bundle.getString("chooseFile"), nsIFilePicker.modeOpen);
  827. fp.appendFilters(nsIFilePicker.filterHTML | nsIFilePicker.filterText |
  828. nsIFilePicker.filterAll | nsIFilePicker.filterImages | nsIFilePicker.filterXML);
  829. if (fp.show() == nsIFilePicker.returnOK && fp.fileURL.spec && fp.fileURL.spec.length > 0) {
  830. var listbox = document.getElementById('bundleList');
  831. var listitem = listbox.appendItem(fp.file.path, "");
  832. }
  833. }
  834. catch(ex) {
  835. }
  836. }
  837. function onEditBundle()
  838. {
  839. var listbox = document.getElementById('bundleList');
  840. var filename = listbox.selectedItem.label;
  841. var sourcefile = Components.classes["@mozilla.org/file/local;1"]
  842. .createInstance(Components.interfaces.nsILocalFile);
  843. try {
  844. sourcefile.initWithPath(filename);
  845. var ioServ = Components.classes["@mozilla.org/network/io-service;1"]
  846. .getService(Components.interfaces.nsIIOService);
  847. } catch (ex) {
  848. }
  849. try {
  850. var nsIFilePicker = Components.interfaces.nsIFilePicker;
  851. var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
  852. var bundle = document.getElementById("bundle_cckwizard");
  853. fp.init(window, bundle.getString("chooseFile"), nsIFilePicker.modeOpen);
  854. fp.displayDirectory = sourcefile.parent;
  855. fp.defaultString = sourcefile.leafName;
  856. fp.appendFilters(nsIFilePicker.filterAll);
  857. if (fp.show() == nsIFilePicker.returnOK && fp.fileURL.spec && fp.fileURL.spec.length > 0) {
  858. listbox.selectedItem.label = fp.file.path;
  859. }
  860. }
  861. catch(ex) {
  862. }
  863. }
  864. function CreateCCK()
  865. {
  866. gPrefBranch.setCharPref("cck.path_to_zip", document.getElementById("zipLocation").value);
  867. /* ---------- */
  868. var destdir = Components.classes["@mozilla.org/file/local;1"]
  869. .createInstance(Components.interfaces.nsILocalFile);
  870. destdir.initWithPath(currentconfigpath);
  871. CCKWriteConfigFile(destdir);
  872. destdir.append("jar");
  873. try {
  874. destdir.remove(true);
  875. } catch(ex) {}
  876. destdir.append("content");
  877. destdir.append("cck");
  878. try {
  879. destdir.create(Components.interfaces.nsIFile.DIRECTORY_TYPE, 0775);
  880. } catch(ex) {}
  881. CCKWriteXULOverlay(destdir);
  882. CCKWriteXULOverlayMac(destdir);
  883. CCKWriteXULOverlayNonMac(destdir);
  884. CCKWriteDTD(destdir);
  885. CCKWriteCSS(destdir);
  886. CCKWriteProperties(destdir);
  887. CCKCopyFile(document.getElementById("iconURL").value, destdir);
  888. CCKCopyFile(document.getElementById("LargeAnimPath").value, destdir);
  889. CCKCopyFile(document.getElementById("LargeStillPath").value, destdir);
  890. CCKCopyChromeToFile("cck.js", destdir)
  891. if (document.getElementById("noaboutconfig").checked)
  892. CCKCopyChromeToFile("cck-config.css", destdir)
  893. var listbox = document.getElementById('certList');
  894. for (var i=0; i < listbox.getRowCount(); i++) {
  895. var listitem = listbox.getItemAtIndex(i);
  896. CCKCopyFile(listitem.getAttribute("label"), destdir);
  897. }
  898. if (document.getElementById("ProxyType").value == "5") {
  899. CCKCopyFile(document.getElementById("autoproxyfile").value, destdir);
  900. }
  901. /* copy/create contents.rdf if 1.0 */
  902. var zipdir = Components.classes["@mozilla.org/file/local;1"]
  903. .createInstance(Components.interfaces.nsILocalFile);
  904. zipdir.initWithPath(currentconfigpath);
  905. zipdir.append("jar");
  906. CCKZip("cck.jar", zipdir, ["content"]);
  907. /* ---------- */
  908. destdir.initWithPath(currentconfigpath);
  909. destdir.append("xpi");
  910. try {
  911. destdir.remove(true);
  912. } catch(ex) {}
  913. try {
  914. destdir.create(Components.interfaces.nsIFile.DIRECTORY_TYPE, 0775);
  915. } catch(ex) {}
  916. CCKWriteConfigFile(destdir);
  917. destdir.append("chrome");
  918. try {
  919. destdir.create(Components.interfaces.nsIFile.DIRECTORY_TYPE, 0775);
  920. } catch(ex) {}
  921. zipdir.append("cck.jar");
  922. CCKCopyFile(zipdir.path, destdir);
  923. /* ---------- */
  924. destdir.initWithPath(currentconfigpath);
  925. destdir.append("xpi");
  926. destdir.append("components");
  927. try {
  928. destdir.create(Components.interfaces.nsIFile.DIRECTORY_TYPE, 0775);
  929. } catch(ex) {}
  930. // CCKCopyChromeToFile("cckService.js", destdir);
  931. CCKWriteCCKServiceJS(destdir);
  932. if (document.getElementById("noaboutconfig").checked)
  933. CCKCopyChromeToFile("disableAboutConfig.js", destdir);
  934. /* ---------- */
  935. destdir.initWithPath(currentconfigpath);
  936. destdir.append("xpi");
  937. destdir.append("defaults");
  938. destdir.append("preferences");
  939. try {
  940. destdir.create(Components.interfaces.nsIFile.DIRECTORY_TYPE, 0775);
  941. } catch(ex) {}
  942. CCKWriteDefaultJS(destdir)
  943. /* ---------- */
  944. destdir.initWithPath(currentconfigpath);
  945. destdir.append("xpi");
  946. destdir.append("platform");
  947. try {
  948. destdir.remove(true);
  949. destdir.create(Components.interfaces.nsIFile.DIRECTORY_TYPE, 0775);
  950. } catch(ex) {}
  951. listbox = document.getElementById('browserPluginList');
  952. for (var i=0; i < listbox.getRowCount(); i++) {
  953. listitem = listbox.getItemAtIndex(i);
  954. var pluginsubdir = destdir.clone();
  955. /* If there is no value, assume windows - this should only happen for migration */
  956. if (listitem.getAttribute("value")) {
  957. pluginsubdir.append(listitem.getAttribute("value"));
  958. } else {
  959. pluginsubdir.append("WINNT_x86-msvc");
  960. }
  961. pluginsubdir.append("plugins");
  962. try {
  963. pluginsubdir.create(Components.interfaces.nsIFile.DIRECTORY_TYPE, 0775);
  964. } catch(ex) {}
  965. CCKCopyFile(listitem.getAttribute("label"), pluginsubdir);
  966. }
  967. listbox = document.getElementById('searchEngineList');
  968. destdir.initWithPath(currentconfigpath);
  969. destdir.append("xpi");
  970. destdir.append("searchplugins");
  971. try {
  972. destdir.remove(true);
  973. if (listbox.getRowCount() > 0)
  974. destdir.create(Components.interfaces.nsIFile.DIRECTORY_TYPE, 0775);
  975. } catch(ex) {}
  976. for (var i=0; i < listbox.getRowCount(); i++) {
  977. listitem = listbox.getItemAtIndex(i);
  978. CCKCopyFile(listitem.cck['engineurl'], destdir);
  979. if (listitem.cck['iconurl'].length > 0)
  980. CCKCopyFile(listitem.cck['iconurl'], destdir);
  981. }
  982. destdir.initWithPath(currentconfigpath);
  983. destdir.append("xpi");
  984. CCKCopyChromeToFile("chrome.manifest", destdir)
  985. CCKWriteInstallRDF(destdir);
  986. var filename = document.getElementById("filename").value;
  987. if (filename.length == 0)
  988. filename = "cck";
  989. filename += ".xpi";
  990. CCKZip("cck.xpi", destdir,
  991. ["chrome", "components", "defaults", "platform", "searchplugins", "chrome.manifest", "install.rdf", "cck.config"]);
  992. var outputdir = Components.classes["@mozilla.org/file/local;1"]
  993. .createInstance(Components.interfaces.nsILocalFile);
  994. outputdir.initWithPath(currentconfigpath);
  995. destdir.append("cck.xpi");
  996. if (document.getElementById('bundleList').getRowCount() == 0) {
  997. outputdir.append(filename);
  998. try {
  999. outputdir.remove(true);
  1000. } catch(ex) {}
  1001. outputdir = outputdir.parent;
  1002. destdir.copyTo(outputdir, filename);
  1003. } else {
  1004. var packagedir = Components.classes["@mozilla.org/file/local;1"]
  1005. .createInstance(Components.interfaces.nsILocalFile);
  1006. packagedir.initWithPath(currentconfigpath);
  1007. packagedir.append("package");
  1008. try {
  1009. packagedir.remove(true);
  1010. packagedir.create(Components.interfaces.nsIFile.DIRECTORY_TYPE, 0775);
  1011. } catch(ex) {}
  1012. CCKCopyFile(destdir.path, packagedir);
  1013. listbox = document.getElementById('bundleList');
  1014. var files_to_zip = ["cck.xpi", "install.rdf"];
  1015. var tempfile = Components.classes["@mozilla.org/file/local;1"]
  1016. .createInstance(Components.interfaces.nsILocalFile);
  1017. for (var i=0; i < listbox.getRowCount(); i++) {
  1018. listitem = listbox.getItemAtIndex(i);
  1019. CCKCopyFile(listitem.getAttribute("label"), packagedir);
  1020. tempfile.initWithPath(listitem.getAttribute("label"));
  1021. files_to_zip.push(tempfile.leafName);
  1022. }
  1023. CCKCopyChromeToFile("install.rdf.mip", packagedir)
  1024. packagedir.append("install.rdf.mip");
  1025. packagedir.moveTo(packagedir.parent, "install.rdf");
  1026. packagedir = packagedir.parent;
  1027. CCKZip("cck.zip", packagedir, files_to_zip);
  1028. packagedir.append("cck.zip");
  1029. outputdir.append(filename);
  1030. try {
  1031. outputdir.remove(true);
  1032. } catch(ex) {}
  1033. outputdir = outputdir.parent;
  1034. packagedir.copyTo(outputdir, filename);
  1035. }
  1036. var bundle = document.getElementById("bundle_cckwizard");
  1037. outputdir.append(filename);
  1038. gPromptService.alert(window, bundle.getString("windowTitle"),
  1039. bundle.getString("outputLocation") + outputdir.path);
  1040. }
  1041. /* This function takes a file in the chromedir and creates a real file */
  1042. function CCKCopyChromeToFile(chromefile, location)
  1043. {
  1044. var file = location.clone();
  1045. file.append(chromefile);
  1046. try {
  1047. file.remove(false);
  1048. } catch (ex) {
  1049. }
  1050. var fos = Components.classes["@mozilla.org/network/file-output-stream;1"]
  1051. .createInstance(Components.interfaces.nsIFileOutputStream);
  1052. fos.init(file, -1, -1, false);
  1053. var ioService=Components.classes["@mozilla.org/network/io-service;1"]
  1054. .getService(Components.interfaces.nsIIOService);
  1055. var scriptableStream=Components
  1056. .classes["@mozilla.org/scriptableinputstream;1"]
  1057. .getService(Components.interfaces.nsIScriptableInputStream);
  1058. var channel=ioService.newChannel("chrome://cckwizard/content/srcfiles/" + chromefile + ".in",null,null);
  1059. var input=channel.open();
  1060. scriptableStream.init(input);
  1061. var str=scriptableStream.read(input.available());
  1062. scriptableStream.close();
  1063. input.close();
  1064. fos.write(str, str.length);
  1065. fos.close();
  1066. }
  1067. function zwRecurse(zipobj, dirobj, location) {
  1068. var entries = dirobj.directoryEntries;
  1069. while (entries.hasMoreElements()) {
  1070. var file = entries.getNext().QueryInterface(Components.interfaces.nsILocalFile);;
  1071. if (file.exists() && file.isDirectory()) {
  1072. zwRecurse(zipobj, file, location);
  1073. } else if (file.exists()) {
  1074. /* Remove beginning of path */
  1075. var path = file.path.replace(location.path, "");
  1076. /* Remove beginning slash */
  1077. path = path.substr(1);
  1078. /* Change backslashes to forward slashes */
  1079. path = path.replace(/\\/g, '/');
  1080. zipobj.addEntryFile(path, Components.interfaces.nsIZipWriter.COMPRESSION_NONE, file, false);
  1081. }
  1082. }
  1083. }
  1084. /* This function creates a given zipfile in a given location */
  1085. /* It takes as parameters the names of all the files/directories to be contained in the ZIP file */
  1086. /* It works by creating a CMD file to generate the ZIP */
  1087. /* or using the nsIZipWriter interface */
  1088. /* files_to_zip is an array */
  1089. function CCKZip(zipfile, location, files_to_zip)
  1090. {
  1091. var file = location.clone();
  1092. file.append(zipfile);
  1093. try {
  1094. file.remove(false);
  1095. } catch (ex) {}
  1096. if (Components.interfaces.nsIZipWriter) {
  1097. var archivefileobj = location.clone();
  1098. archivefileobj.append(zipfile);
  1099. var zipwriter = Components.Constructor("@mozilla.org/zipwriter;1", "nsIZipWriter");
  1100. var zipwriterobj = new zipwriter();
  1101. zipwriterobj.open(archivefileobj, 0x04 | 0x08 | 0x20);
  1102. for (var i=0; i < files_to_zip.length; i++) {
  1103. var sourcepathobj = location.clone();
  1104. sourcepathobj.append(files_to_zip[i]);
  1105. if (sourcepathobj.exists() && sourcepathobj.isDirectory()) {
  1106. zwRecurse(zipwriterobj, sourcepathobj, location);
  1107. } else if (sourcepathobj.exists()) {
  1108. /* Remove beginning of path */
  1109. var path = sourcepathobj.path.replace(location.path, "");
  1110. /* Remove beginning slash */
  1111. path = path.substr(1);
  1112. /* Convert backslashes to forward slashes */
  1113. path = path.replace(/\\/g, '/');
  1114. zipwriterobj.addEntryFile(path, Components.interfaces.nsIZipWriter.COMPRESSION_NONE, sourcepathobj, false);
  1115. }
  1116. }
  1117. zipwriterobj.close();
  1118. return;
  1119. }
  1120. var zipLocation = document.getElementById("zipLocation").value;
  1121. if (zipLocation.length == 0) {
  1122. zipLocation = "zip";
  1123. }
  1124. var scriptfile = location.clone();
  1125. if ((navigator.platform == "Win32") || (navigator.platform == "OS/2"))
  1126. scriptfile.append("ccktemp.cmd");
  1127. else
  1128. scriptfile.append("ccktemp.sh");
  1129. var fos = Components.classes["@mozilla.org/network/file-output-stream;1"]
  1130. .createInstance(Components.interfaces.nsIFileOutputStream);
  1131. fos.init(scriptfile, -1, -1, false);
  1132. var line = "cd ";
  1133. // this param causes a drive switch on win32
  1134. if (navigator.platform == "Win32")
  1135. line += "/d ";
  1136. line += "\"" + location.path + "\"\n";
  1137. fos.write(line, line.length);
  1138. var zipParams = "-r";
  1139. /* check for 7zip */
  1140. if (zipLocation.match("7z")) {
  1141. zipParams = "a -tZIP";
  1142. }
  1143. if ((navigator.platform == "Win32") || (navigator.platform == "OS/2"))
  1144. line = "\"" + zipLocation + "\" " + zipParams + " \"" + location.path + "\\" + zipfile + "\"";
  1145. else
  1146. line = zipLocation + " " + zipParams + " \"" + location.path + "/" + zipfile + "\"";
  1147. for (var i=0; i < files_to_zip.length; i++) {
  1148. line += " " + files_to_zip[i];
  1149. }
  1150. line += "\n";
  1151. fos.write(line, line.length);
  1152. fos.close();
  1153. var sh;
  1154. // create an nsILocalFile for the executable
  1155. if ((navigator.platform != "Win32") && (navigator.platform != "OS/2")) {
  1156. sh = Components.classes["@mozilla.org/file/local;1"]
  1157. .createInstance(Components.interfaces.nsILocalFile);
  1158. sh.initWithPath("/bin/sh");
  1159. }
  1160. // create an nsIProcess
  1161. var process = Components.classes["@mozilla.org/process/util;1"]
  1162. .createInstance(Components.interfaces.nsIProcess);
  1163. if ((navigator.platform == "Win32") || (navigator.platform == "OS/2"))
  1164. process.init(scriptfile);
  1165. else
  1166. process.init(sh);
  1167. var args = [scriptfile.path];
  1168. try {
  1169. process.run(true, args, args.length);
  1170. } catch (ex) {
  1171. }
  1172. var file = location.clone();
  1173. file.append(zipfile);
  1174. if (navigator.platform == "OS/2") {
  1175. var bundle = document.getElementById("bundle_cckwizard");
  1176. gPromptService.alert(window, bundle.getString("windowTitle"),
  1177. "OS/2 problem workaround - Click OK to continue");
  1178. }
  1179. if (!file.exists()) {
  1180. var bundle = document.getElementById("bundle_cckwizard");
  1181. gPromptService.alert(window, bundle.getString("windowTitle"),
  1182. bundle.getString("zipError"));
  1183. }
  1184. scriptfile.remove(false);
  1185. }
  1186. function CCKWriteXULOverlay(destdir)
  1187. {
  1188. var tooltipXUL = ' <button id="navigator-throbber" oncommand="goClickThrobber(\'browser.throbber.url\', event)" onclick="checkForMiddleClick(this, event);" tooltiptext="&throbber.tooltip;" disabled="false"/>\n';
  1189. var titlebarXUL = ' <window id="main-window" titlemodifier="&mainWindow.titlemodifier;"/>\n';
  1190. var file = destdir.clone();
  1191. file.append("cck-browser-overlay.xul");
  1192. try {
  1193. file.remove(false);
  1194. } catch (ex) {}
  1195. var fos = Components.classes["@mozilla.org/network/file-output-stream;1"]
  1196. .createInstance(Components.interfaces.nsIFileOutputStream);
  1197. fos.init(file, -1, -1, false);
  1198. var ioService=Components.classes["@mozilla.org/network/io-service;1"]
  1199. .getService(Components.interfaces.nsIIOService);
  1200. var scriptableStream=Components.classes["@mozilla.org/scriptableinputstream;1"]
  1201. .getService(Components.interfaces.nsIScriptableInputStream);
  1202. var channel=ioService.newChannel("chrome://cckwizard/content/srcfiles/cck-browser-overlay.xul.in",null,null);
  1203. var input=channel.open();
  1204. scriptableStream.init(input);
  1205. var str=scriptableStream.read(input.available());
  1206. scriptableStream.close();
  1207. input.close();
  1208. var throbberurl = document.getElementById("AnimatedLogoURL").value;
  1209. if (throbberurl && (throbberurl.length > 0))
  1210. str = str.replace(/%button%/g, tooltipXUL);
  1211. else
  1212. str = str.replace(/%button%/g, "");
  1213. var titlebar = document.getElementById("CompanyName").value;
  1214. if (titlebar && (titlebar.length > 0))
  1215. str = str.replace(/%window%/g, titlebarXUL);
  1216. else
  1217. str = str.replace(/%window%/g, "");
  1218. fos.write(str, str.length);
  1219. fos.close();
  1220. }
  1221. function CCKWriteXULOverlayNonMac(destdir)
  1222. {
  1223. var helpmenu1 = ' <menupopup id="menu_HelpPopup">\n';
  1224. var helpmenu2 = ' <menuseparator insertafter="aboutSeparator"/>\n';
  1225. var helpmenu3 = ' <menuitem label="&cckHelp.label;" insertafter="aboutSeparator"\n';
  1226. var helpmenu4 = ' accesskey="&cckHelp.accesskey;"\n';
  1227. var helpmenu5 = ' oncommand="openUILink(getCCKLink(\'cckhelp.url\'), event, false, true);"\n';
  1228. var helpmenu6 = ' onclick="checkForMiddleClick(this, event);"/>\n';
  1229. var helpmenu7 = ' </menupopup>\n';
  1230. var file = destdir.clone();
  1231. file.append("cck-browser-overlay-nonmac.xul");
  1232. try {
  1233. file.remove(false);
  1234. } catch (ex) {}
  1235. var fos = Components.classes["@mozilla.org/network/file-output-stream;1"]
  1236. .createInstance(Components.interfaces.nsIFileOutputStream);
  1237. fos.init(file, -1, -1, false);
  1238. var ioService=Components.classes["@mozilla.org/network/io-service;1"]
  1239. .getService(Components.interfaces.nsIIOService);
  1240. var scriptableStream=Components.classes["@mozilla.org/scriptableinputstream;1"]
  1241. .getService(Components.interfaces.nsIScriptableInputStream);
  1242. var channel=ioService.newChannel("chrome://cckwizard/content/srcfiles/cck-browser-overlay-menu.xul.in",null,null);
  1243. var input=channel.open();
  1244. scriptableStream.init(input);
  1245. var str=scriptableStream.read(input.available());
  1246. scriptableStream.close();
  1247. input.close();
  1248. var helpmenu = document.getElementById("HelpMenuCommandName").value;
  1249. if (helpmenu && (helpmenu.length > 0)) {
  1250. var helpmenuXUL = helpmenu1 + helpmenu2 + helpmenu3;
  1251. var helpmenuakey = document.getElementById("HelpMenuCommandAccesskey").value;
  1252. if (helpmenuakey && (helpmenuakey.length > 0)) {
  1253. helpmenuXUL += helpmenu4;
  1254. }
  1255. helpmenuXUL += helpmenu5 + helpmenu6 + helpmenu7;
  1256. str = str.replace(/%menupopup%/g, helpmenuXUL);
  1257. } else {
  1258. str = str.replace(/%menupopup%/g, "");
  1259. }
  1260. fos.write(str, str.length);
  1261. fos.close();
  1262. }
  1263. function CCKWriteXULOverlayMac(destdir)
  1264. {
  1265. var helpmenu1 = ' <menupopup id="menu_HelpPopup">\n';
  1266. var helpmenu2 = ' <menuseparator/>\n';
  1267. var helpmenu3 = ' <menuitem label="&cckHelp.label;"\n';
  1268. var helpmenu4 = ' accesskey="&cckHelp.accesskey;"\n';
  1269. var helpmenu5 = ' oncommand="openUILink(getCCKLink(\'cckhelp.url\'), event, false, true);"\n';
  1270. var helpmenu6 = ' onclick="checkForMiddleClick(this, event);"/>\n';
  1271. var helpmenu7 = ' </menupopup>\n';
  1272. var file = destdir.clone();
  1273. file.append("cck-browser-overlay-mac.xul");
  1274. try {
  1275. file.remove(false);
  1276. } catch (ex) {}
  1277. var fos = Components.classes["@mozilla.org/network/file-output-stream;1"]
  1278. .createInstance(Components.interfaces.nsIFileOutputStream);
  1279. fos.init(file, -1, -1, false);
  1280. var ioService=Components.classes["@mozilla.org/network/io-service;1"]
  1281. .getService(Components.interfaces.nsIIOService);
  1282. var scriptableStream=Components.classes["@mozilla.org/scriptableinputstream;1"]
  1283. .getService(Components.interfaces.nsIScriptableInputStream);
  1284. var channel=ioService.newChannel("chrome://cckwizard/content/srcfiles/cck-browser-overlay-menu.xul.in",null,null);
  1285. var input=channel.open();
  1286. scriptableStream.init(input);
  1287. var str=scriptableStream.read(input.available());
  1288. scriptableStream.close();
  1289. input.close();
  1290. var helpmenu = document.getElementById("HelpMenuCommandName").value;
  1291. if (helpmenu && (helpmenu.length > 0)) {
  1292. var helpmenuXUL = helpmenu1 + helpmenu2 + helpmenu3;
  1293. var helpmenuakey = document.getElementById("HelpMenuCommandAccesskey").value;
  1294. if (helpmenuakey && (helpmenuakey.length > 0)) {
  1295. helpmenuXUL += helpmenu4;
  1296. }
  1297. helpmenuXUL += helpmenu5 + helpmenu6 + helpmenu7;
  1298. str = str.replace(/%menupopup%/g, helpmenuXUL);
  1299. } else {
  1300. str = str.replace(/%menupopup%/g, "");
  1301. }
  1302. fos.write(str, str.length);
  1303. fos.close();
  1304. }
  1305. function CCKWriteCSS(destdir)
  1306. {
  1307. var animated1 = '#navigator-throbber[busy="true"] {\n';
  1308. var animated2 = 'toolbar[iconsize="small"] #navigator-throbber[busy="true"],\n';
  1309. var animated3 = 'toolbar[mode="text"] #navigator-throbber[busy="true"] {\n';
  1310. var atrest1 = '#navigator-throbber {\n';
  1311. var atrest2 = 'toolbar[iconsize="small"] #navigator-throbber,\n';
  1312. var atrest3 = 'toolbar[mode="text"] #navigator-throbber {\n';
  1313. var liststyleimage = ' list-style-image: url("chrome://cck/content/';
  1314. var liststyleimageend = '");\n}\n';
  1315. var file = destdir.clone();
  1316. file.append("cck.css");
  1317. var fos = Components.classes["@mozilla.org/network/file-output-stream;1"]
  1318. .createInstance(Components.interfaces.nsIFileOutputStream);
  1319. fos.init(file, -1, -1, false);
  1320. var animatedlogopath = document.getElementById("LargeAnimPath").value;
  1321. if (animatedlogopath && (animatedlogopath.length > 0)) {
  1322. var file = Components.classes["@mozilla.org/file/local;1"]
  1323. .createInstance(Components.interfaces.nsILocalFile);
  1324. file.initWithPath(animatedlogopath);
  1325. fos.write(animated1, animated1.length);
  1326. fos.write(liststyleimage, liststyleimage.length);
  1327. fos.write(file.leafName, file.leafName.length);
  1328. fos.write(liststyleimageend, liststyleimageend.length);
  1329. fos.write(animated2, animated2.length);
  1330. fos.write(animated3, animated3.length);
  1331. fos.write(liststyleimage, liststyleimage.length);
  1332. fos.write(file.leafName, file.leafName.length);
  1333. fos.write(liststyleimageend, liststyleimageend.length);
  1334. }
  1335. var atrestlogopath = document.getElementById("LargeStillPath").value;
  1336. if (atrestlogopath && (atrestlogopath.length > 0)) {
  1337. var file = Components.classes["@mozilla.org/file/local;1"]
  1338. .createInstance(Components.interfaces.nsILocalFile);
  1339. file.initWithPath(atrestlogopath);
  1340. fos.write(atrest1, atrest1.length);
  1341. fos.write(liststyleimage, liststyleimage.length);
  1342. fos.write(file.leafName, file.leafName.length);
  1343. fos.write(liststyleimageend, liststyleimageend.length);
  1344. fos.write(atrest2, atrest2.length);
  1345. fos.write(atrest3, atrest3.length);
  1346. fos.write(liststyleimage, liststyleimage.length);
  1347. fos.write(file.leafName, file.leafName.length);
  1348. fos.write(liststyleimageend, liststyleimageend.length);
  1349. }
  1350. fos.close();
  1351. }
  1352. function CCKWriteDTD(destdir)
  1353. {
  1354. var file = destdir.clone();
  1355. file.append("cck.dtd");
  1356. try {
  1357. file.remove(false);
  1358. } catch (ex) {}
  1359. var fos = Components.classes["@mozilla.org/network/file-output-stream;1"]
  1360. .createInstance(Components.interfaces.nsIFileOutputStream);
  1361. var cos = Components.classes["@mozilla.org/intl/converter-output-stream;1"]
  1362. .createInstance(Components.interfaces.nsIConverterOutputStream);
  1363. fos.init(file, -1, -1, false);
  1364. cos.init(fos, null, 0, null);
  1365. var ioService=Components.classes["@mozilla.org/network/io-service;1"]
  1366. .getService(Components.interfaces.nsIIOService);
  1367. var scriptableStream=Components.classes["@mozilla.org/scriptableinputstream;1"]
  1368. .getService(Components.interfaces.nsIScriptableInputStream);
  1369. var channel=ioService.newChannel("chrome://cckwizard/content/srcfiles/cck.dtd.in",null,null);
  1370. var input=channel.open();
  1371. scriptableStream.init(input);
  1372. var str=scriptableStream.read(input.available());
  1373. scriptableStream.close();
  1374. input.close();
  1375. str = str.replace(/%throbber.tooltip%/g, htmlEscape(document.getElementById("AnimatedLogoTooltip").value));
  1376. str = str.replace(/%mainWindow.titlemodifier%/g, htmlEscape(document.getElementById("CompanyName").value));
  1377. str = str.replace(/%cckHelp.label%/g, htmlEscape(document.getElementById("HelpMenuCommandName").value));
  1378. str = str.replace(/%cckHelp.accesskey%/g, document.getElementById("HelpMenuCommandAccesskey").value);
  1379. cos.writeString(str);
  1380. cos.close();
  1381. fos.close();
  1382. }
  1383. function CCKWriteProperties(destdir)
  1384. {
  1385. var file = destdir.clone();
  1386. file.append("cck.properties");
  1387. try {
  1388. file.remove(false);
  1389. } catch (ex) {}
  1390. var fos = Components.classes["@mozilla.org/network/file-output-stream;1"]
  1391. .createInstance(Components.interfaces.nsIFileOutputStream);
  1392. var cos = Components.classes["@mozilla.org/intl/converter-output-stream;1"]
  1393. .createInstance(Components.interfaces.nsIConverterOutputStream);
  1394. fos.init(file, -1, -1, false);
  1395. cos.init(fos, null, 0, null);
  1396. var ioService=Components.classes["@mozilla.org/network/io-service;1"]
  1397. .getService(Components.interfaces.nsIIOService);
  1398. var scriptableStream=Components.classes["@mozilla.org/scriptableinputstream;1"]
  1399. .getService(Components.interfaces.nsIScriptableInputStream);
  1400. var channel=ioService.newChannel("chrome://cckwizard/content/srcfiles/cck.properties.in",null,null);
  1401. var input=channel.open();
  1402. scriptableStream.init(input);
  1403. var str=scriptableStream.read(input.available());
  1404. scriptableStream.close();
  1405. input.close();
  1406. str = str.replace(/%id%/g, document.getElementById("id").value);
  1407. str = str.replace(/%version%/g, document.getElementById("version").value);
  1408. str = str.replace(/%OrganizationName%/g, document.getElementById("OrganizationName").value);
  1409. str = str.replace(/%browser.throbber.url%/g, document.getElementById("AnimatedLogoURL").value);
  1410. str = str.replace(/%cckhelp.url%/g, document.getElementById("HelpMenuCommandURL").value);
  1411. str = str.replace(/%browser.startup.homepage%/g, document.getElementById("HomePageURL").value);
  1412. var overrideurl = document.getElementById('HomePageOverrideURL').value;
  1413. if (overrideurl && overrideurl.length) {
  1414. str = str.replace(/%startup.homepage_override_url%/g, overrideurl);
  1415. } else {
  1416. str = str.replace(/%startup.homepage_override_url%/g, document.getElementById("HomePageURL").value);
  1417. }
  1418. var bundle = document.getElementById("bundle_cckwizard");
  1419. if (document.getElementById("defaultSearchEngine").value != bundle.getString("useBrowserDefault")) {
  1420. str = str.replace(/%browser.search.defaultenginename%/g, document.getElementById("defaultSearchEngine").value);
  1421. str = str.replace(/%browser.search.order.1%/g, document.getElementById("defaultSearchEngine").value);
  1422. } else {
  1423. str = str.replace(/%browser.search.defaultenginename%/g, "");
  1424. str = str.replace(/%browser.search.order.1%/g, "");
  1425. }
  1426. str = str.replace(/%PopupAllowedSites%/g, document.getElementById("PopupAllowedSites").value);
  1427. str = str.replace(/%InstallAllowedSites%/g, document.getElementById("InstallAllowedSites").value);
  1428. str = str.replace(/%CookieAllowedSites%/g, document.getElementById("CookieAllowedSites").value);
  1429. str = str.replace(/%PopupDeniedSites%/g, document.getElementById("PopupDeniedSites").value);
  1430. str = str.replace(/%InstallDeniedSites%/g, document.getElementById("InstallDeniedSites").value);
  1431. str = str.replace(/%CookieDeniedSites%/g, document.getElementById("CookieDeniedSites").value);
  1432. cos.writeString(str);
  1433. if (document.getElementById("hidden").checked)
  1434. {
  1435. str = "hidden=true\n";
  1436. cos.writeString(str);
  1437. }
  1438. if (document.getElementById("locked").checked)
  1439. {
  1440. str = "locked=true\n";
  1441. cos.writeString(str);
  1442. }
  1443. var radio = document.getElementById('ToolbarLocation');
  1444. str = "ToolbarLocation=" + radio.value + "\n";
  1445. cos.writeString(str);
  1446. /* Add toolbar/bookmark stuff at end */
  1447. str = document.getElementById('ToolbarFolder1').value;
  1448. if (str && str.length) {
  1449. str = "ToolbarFolder1=" + str + "\n";
  1450. cos.writeString(str);
  1451. var listbox = document.getElementById('tbFolder.bookmarkList');
  1452. for (var j=0; j < listbox.getRowCount(); j++) {
  1453. listitem = listbox.getItemAtIndex(j);
  1454. str = "ToolbarFolder1.BookmarkTitle" + (j+1) + "=" + listitem.getAttribute("label") + "\n";
  1455. cos.writeString(str);
  1456. var str = "ToolbarFolder1.BookmarkURL" + (j+1) + "=" + listitem.getAttribute("value") + "\n";
  1457. cos.writeString(str);
  1458. if (listitem.cck['type'] && listitem.cck['type'].length) {
  1459. var str = "ToolbarFolder1.BookmarkType" + (j+1) + "=" + listitem.cck['type'] + "\n";
  1460. cos.writeString(str);
  1461. }
  1462. }
  1463. }
  1464. listbox = document.getElementById('tb.bookmarkList');
  1465. for (var j=0; j < listbox.getRowCount(); j++) {
  1466. var listitem = listbox.getItemAtIndex(j);
  1467. str = "ToolbarBookmarkTitle" + (j+1) + "=" + listitem.getAttribute("label") + "\n";
  1468. cos.writeString(str);
  1469. var str = "ToolbarBookmarkURL" + (j+1) + "=" + listitem.getAttribute("value") + "\n";
  1470. cos.writeString(str);
  1471. if (listitem.cck['type'] && listitem.cck['type'].length) {
  1472. var str = "ToolbarBookmarkType" + (j+1) + "=" + listitem.cck['type'] + "\n";
  1473. cos.writeString(str);
  1474. }
  1475. }
  1476. radio = document.getElementById('BookmarkLocation');
  1477. str = "BookmarkLocation=" + radio.value + "\n";
  1478. cos.writeString(str);
  1479. str = document.getElementById('BookmarkFolder1').value;
  1480. if (str && str.length) {
  1481. str = "BookmarkFolder1=" + str + "\n";
  1482. cos.writeString(str);
  1483. listbox = document.getElementById('bmFolder.bookmarkList');
  1484. for (var j=0; j < listbox.getRowCount(); j++) {
  1485. listitem = listbox.getItemAtIndex(j);
  1486. str = "BookmarkFolder1.BookmarkTitle" + (j+1) + "=" + listitem.getAttribute("label") + "\n";
  1487. cos.writeString(str);
  1488. var str = "BookmarkFolder1.BookmarkURL" + (j+1) + "=" + listitem.getAttribute("value") + "\n";
  1489. cos.writeString(str);
  1490. if (listitem.cck['type'] && listitem.cck['type'].length) {
  1491. var str = "BookmarkFolder1.BookmarkType" + (j+1) + "=" + listitem.cck['type'] + "\n";
  1492. cos.writeString(str);
  1493. }
  1494. }
  1495. }
  1496. listbox = document.getElementById('bm.bookmarkList');
  1497. for (var j=0; j < listbox.getRowCount(); j++) {
  1498. listitem = listbox.getItemAtIndex(j);
  1499. str = "BookmarkTitle" + (j+1) + "=" + listitem.getAttribute("label") + "\n";
  1500. cos.writeString(str);
  1501. var str = "BookmarkURL" + (j+1) + "=" + listitem.getAttribute("value") + "\n";
  1502. cos.writeString(str);
  1503. if (listitem.cck['type'] && listitem.cck['type'].length) {
  1504. var str = "BookmarkType" + (j+1) + "=" + listitem.cck['type'] + "\n";
  1505. cos.writeString(str);
  1506. }
  1507. }
  1508. // Registry Keys
  1509. listbox = document.getElementById("regList");
  1510. for (var i=0; i < listbox.getRowCount(); i++) {
  1511. listitem = listbox.getItemAtIndex(i);
  1512. str = "RegName" + (i+1) + "=" + listitem.getAttribute("label") + "\n";
  1513. cos.writeString(str);
  1514. str = "RootKey" + (i+1) + "=" + listitem.cck['rootkey'] + "\n";
  1515. cos.writeString(str);
  1516. str = "Key" + (i+1) + "=" + listitem.cck['key'] + "\n";
  1517. str = str.replace(/\\/g, "\\\\");
  1518. cos.writeString(str);
  1519. str = "Name" + (i+1) + "=" + listitem.cck['name'] + "\n";
  1520. cos.writeString(str);
  1521. str = "NameValue" + (i+1) + "=" + listitem.cck['namevalue'] + "\n";
  1522. cos.writeString(str);
  1523. str = "Type" + (i+1) + "=" + listitem.cck['type'] + "\n";
  1524. cos.writeString(str);
  1525. }
  1526. // Pref locks
  1527. listbox = document.getElementById("prefList");
  1528. var j = 1;
  1529. for (var i=0; i < listbox.getRowCount(); i++) {
  1530. listitem = listbox.getItemAtIndex(i);
  1531. if (listitem.cck['lock'] == "true") {
  1532. str = "LockPref" + (j) + "=" + listitem.getAttribute("label") + "\n";
  1533. cos.writeString(str);
  1534. j++;
  1535. }
  1536. }
  1537. listbox = document.getElementById('certList');
  1538. for (var i=0; i < listbox.getRowCount(); i++) {
  1539. listitem = listbox.getItemAtIndex(i);
  1540. var file = Components.classes["@mozilla.org/file/local;1"]
  1541. .createInstance(Components.interfaces.nsILocalFile);
  1542. file.initWithPath(listitem.getAttribute("label"));
  1543. str = "Cert"+ (i+1) + "=" + file.leafName + "\n";
  1544. cos.writeString(str);
  1545. str = "CertTrust" + (i+1) + "=" + listitem.getAttribute("value") + "\n";
  1546. cos.writeString(str);
  1547. }
  1548. cos.close();
  1549. fos.close();
  1550. }
  1551. function prefIsLocked(prefname)
  1552. {
  1553. var listbox = document.getElementById("prefList");
  1554. for (var i=0; i < listbox.getRowCount(); i++) {
  1555. var listitem = listbox.getItemAtIndex(i);
  1556. if (prefname == listitem.getAttribute("label"))
  1557. if (listitem.cck['lock'] == "true")
  1558. return true;
  1559. }
  1560. }
  1561. function CCKWriteDefaultJS(destdir)
  1562. {
  1563. var throbber1 = 'pref("browser.throbber.url", "';
  1564. var homepage1 = 'pref("browser.startup.homepage", "';
  1565. var homepage2 = 'pref("startup.homepage_override_url", "';
  1566. var homepage3 = 'pref("startup.homepage_welcome_url", "';
  1567. var chromeurl = "chrome://cck/content/cck.properties";
  1568. var prefend = '");\n';
  1569. var useragent1begin = 'pref("general.useragent.vendorComment", "CK-';
  1570. var useragent2begin = 'pref("general.useragent.extra.cck", "(CK-';
  1571. var useragent1end = '");\n';
  1572. var useragent2end = ')");\n';
  1573. var searchengine1 = 'pref("browser.search.defaultenginename", "chrome://cck/content/cck.properties");\n';
  1574. var searchengine2 = 'pref("browser.search.order.1", "chrome://cck/content/cck.properties");\n';
  1575. var file = destdir.clone();
  1576. file.append("firefox-cck.js");
  1577. var fos = Components.classes["@mozilla.org/network/file-output-stream;1"]
  1578. .createInstance(Components.interfaces.nsIFileOutputStream);
  1579. fos.init(file, -1, -1, false);
  1580. var logobuttonurl = document.getElementById("AnimatedLogoURL").value;
  1581. if (logobuttonurl && (logobuttonurl.length > 0)) {
  1582. /* If the pref is locked, we set it in our service using */
  1583. /* The value from properties */
  1584. if (!prefIsLocked("browser.throbber.url")) {
  1585. fos.write(throbber1, throbber1.length);
  1586. fos.write(chromeurl, chromeurl.length);
  1587. fos.write(prefend, prefend.length);
  1588. }
  1589. }
  1590. var browserstartuppage = document.getElementById("HomePageURL").value;
  1591. var overrideurl = document.getElementById('HomePageOverrideURL').value;
  1592. var welcomeurl = document.getElementById('HomePageWelcomeURL').value;
  1593. if (browserstartuppage && (browserstartuppage.length > 0)) {
  1594. /* If the pref is locked, we set it in our service using */
  1595. /* The value from properties */
  1596. if (!prefIsLocked("browser.startup.homepage")) {
  1597. fos.write(homepage1, homepage1.length);
  1598. fos.write(chromeurl, chromeurl.length);
  1599. fos.write(prefend, prefend.length);
  1600. }
  1601. }
  1602. if ((overrideurl && overrideurl.length) || (document.getElementById("noOverridePage").checked)) {
  1603. fos.write(homepage2, homepage2.length);
  1604. if (!document.getElementById("noOverridePage").checked) {
  1605. fos.write(overrideurl, overrideurl.length);
  1606. }
  1607. fos.write(prefend, prefend.length);
  1608. }
  1609. if ((welcomeurl && welcomeurl.length) || (document.getElementById("noWelcomePage").checked)) {
  1610. fos.write(homepage3, homepage3.length);
  1611. if (!document.getElementById("noWelcomePage").checked) {
  1612. fos.write(welcomeurl, welcomeurl.length);
  1613. }
  1614. fos.write(prefend, prefend.length);
  1615. }
  1616. var bundle = document.getElementById("bundle_cckwizard");
  1617. if (document.getElementById("defaultSearchEngine").selectedItem.label != bundle.getString("useBrowserDefault")) {
  1618. if (!prefIsLocked("browser.search.defaultenginename")) {
  1619. fos.write(searchengine1, searchengine1.length);
  1620. }
  1621. if (!prefIsLocked("browser.search.order.1")) {
  1622. fos.write(searchengine2, searchengine2.length);
  1623. }
  1624. }
  1625. var useragent = document.getElementById("OrganizationName").value;
  1626. if (useragent && (useragent.length > 0)) {
  1627. fos.write(useragent1begin, useragent1begin.length);
  1628. fos.write(useragent, useragent.length);
  1629. fos.write(useragent1end, useragent1end.length);
  1630. fos.write(useragent2begin, useragent2begin.length);
  1631. fos.write(useragent, useragent.length);
  1632. fos.write(useragent2end, useragent2end.length);
  1633. }
  1634. // Preferences
  1635. var listbox = document.getElementById("prefList");
  1636. for (var i=0; i < listbox.getRowCount(); i++) {
  1637. var listitem = listbox.getItemAtIndex(i);
  1638. /* allow for locking prefs without setting value */
  1639. if ((listitem.getAttribute("value").length) && (!(prefsLockOnly.exists(listitem.getAttribute("label"))))) {
  1640. var line;
  1641. /* If it is a string, put quotes around it */
  1642. if (listitem.cck['type'] == "string") {
  1643. line = 'pref("' + listitem.getAttribute("label") + '", ' + '"' + listitem.getAttribute("value") + '"' + ');\n';
  1644. } else {
  1645. line = 'pref("' + listitem.getAttribute("label") + '", ' + listitem.getAttribute("value") + ');\n';
  1646. }
  1647. fos.write(line, line.length);
  1648. }
  1649. }
  1650. var radiogroup = document.getElementById("ProxyType");
  1651. if (radiogroup.value == "")
  1652. radiogroup.value = "0";
  1653. switch ( radiogroup.value ) {
  1654. case "1":
  1655. var proxystringlist = ["HTTPproxyname","SSLproxyname","FTPproxyname","Gopherproxyname","NoProxyname","autoproxyurl" ];
  1656. for (i = 0; i < proxystringlist.length; i++) {
  1657. var proxyitem = document.getElementById(proxystringlist[i]);
  1658. if (proxyitem.value.length > 0) {
  1659. var line = 'pref("' + proxyitem.getAttribute("preference") + '", "' + proxyitem.value + '");\n';
  1660. fos.write(line, line.length);
  1661. }
  1662. }
  1663. var proxyintegerlist = ["HTTPportno","SSLportno","FTPportno","Gopherportno","socksv","ProxyType"];
  1664. for (i = 0; i < proxyintegerlist.length; i++) {
  1665. var proxyitem = document.getElementById(proxyintegerlist[i]);
  1666. if (proxyitem.value.length > 0) {
  1667. var line = 'pref("' + proxyitem.getAttribute("preference") + '", ' + proxyitem.value + ');\n';
  1668. fos.write(line, line.length);
  1669. }
  1670. }
  1671. var proxyitem = document.getElementById("shareAllProxies");
  1672. var line = 'pref("' + proxyitem.getAttribute("preference") + '", ' + proxyitem.checked + ');\n';
  1673. fos.write(line, line.length);
  1674. break;
  1675. case "2":
  1676. var proxystringlist = ["autoproxyurl"];
  1677. for (i = 0; i < proxystringlist.length; i++) {
  1678. var proxyitem = document.getElementById(proxystringlist[i]);
  1679. if (proxyitem.value.length > 0) {
  1680. var line = 'pref("' + proxyitem.getAttribute("preference") + '", "' + proxyitem.value + '");\n';
  1681. fos.write(line, line.length);
  1682. }
  1683. }
  1684. var proxyintegerlist = ["ProxyType"];
  1685. for (i = 0; i < proxyintegerlist.length; i++) {
  1686. var proxyitem = document.getElementById(proxyintegerlist[i]);
  1687. if (proxyitem.value.length > 0) {
  1688. var line = 'pref("' + proxyitem.getAttribute("preference") + '", ' + proxyitem.value + ');\n';
  1689. fos.write(line, line.length);
  1690. }
  1691. }
  1692. break;
  1693. case "4":
  1694. var proxyintegerlist = ["ProxyType"];
  1695. for (i = 0; i < proxyintegerlist.length; i++) {
  1696. var proxyitem = document.getElementById(proxyintegerlist[i]);
  1697. if (proxyitem.value.length > 0) {
  1698. var line = 'pref("' + proxyitem.getAttribute("preference") + '", ' + proxyitem.value + ');\n';
  1699. fos.write(line, line.length);
  1700. }
  1701. }
  1702. break;
  1703. case "5":
  1704. var file = Components.classes["@mozilla.org/file/local;1"]
  1705. .createInstance(Components.interfaces.nsILocalFile);
  1706. file.initWithPath(document.getElementById("autoproxyfile").value);
  1707. var line = 'pref("network.proxy.autoconfig_url", "chrome://cck/content/' + file.leafName + '");\n';
  1708. fos.write(line, line.length);
  1709. var line = 'pref("network.proxy.type", 2);\n';
  1710. fos.write(line, line.length);
  1711. break;
  1712. }
  1713. fos.close();
  1714. }
  1715. function CCKWriteCCKServiceJS(destdir)
  1716. {
  1717. var idline = "<em:id>%id%</em:id>";
  1718. var file = destdir.clone();
  1719. file.append("cckService.js");
  1720. try {
  1721. file.remove(false);
  1722. } catch (ex) {
  1723. }
  1724. var fos = Components.classes["@mozilla.org/network/file-output-stream;1"]
  1725. .createInstance(Components.interfaces.nsIFileOutputStream);
  1726. var cos = Components.classes["@mozilla.org/intl/converter-output-stream;1"]
  1727. .createInstance(Components.interfaces.nsIConverterOutputStream);
  1728. fos.init(file, -1, -1, false);
  1729. cos.init(fos, null, 0, null);
  1730. var ioService=Components.classes["@mozilla.org/network/io-service;1"]
  1731. .getService(Components.interfaces.nsIIOService);
  1732. var scriptableStream=Components
  1733. .classes["@mozilla.org/scriptableinputstream;1"]
  1734. .getService(Components.interfaces.nsIScriptableInputStream);
  1735. var channel=ioService.newChannel("chrome://cckwizard/content/srcfiles/cckService.js.in",null,null);
  1736. var input=channel.open();
  1737. scriptableStream.init(input);
  1738. var str=scriptableStream.read(input.available());
  1739. scriptableStream.close();
  1740. input.close();
  1741. var uuidString = "{31aec909-8e86-4397-9380-63a59e0c5ff6}";
  1742. try {
  1743. var uuidGenerator =
  1744. Components.classes["@mozilla.org/uuid-generator;1"]
  1745. .getService(Components.interfaces.nsIUUIDGenerator);
  1746. var uuid = uuidGenerator.generateUUID();
  1747. uuidString = uuid.toString();
  1748. } catch (ex) {}
  1749. str = str.replace(/%uuid%/g, uuidString);
  1750. str = str.replace(/%OrganizationName%/g, document.getElementById("OrganizationName").value);
  1751. cos.writeString(str);
  1752. cos.close();
  1753. fos.close();
  1754. }
  1755. function CCKWriteInstallRDF(destdir)
  1756. {
  1757. var idline = "<em:id>%id%</em:id>";
  1758. var nameline = "<em:name>%name%</em:name>";
  1759. var versionline = "<em:version>%version%</em:version>";
  1760. var descriptionline = "<em:description>%description%</em:description>";
  1761. var creatorline = "<em:creator>%creator%</em:creator>";
  1762. var homepageURLline = "<em:homepageURL>%homepageURL%</em:homepageURL>";
  1763. var updateURLline = "<em:updateURL>%updateURL%</em:updateURL>";
  1764. var updateKeyline = "<em:updateKey>%updateKey%</em:updateKey>";
  1765. var iconURLline = "<em:iconURL>chrome://cck/content/%iconURL%</em:iconURL>";
  1766. var hiddenline = "<em:hidden>true</em:hidden>";
  1767. var lockedline = "<em:locked>true</em:locked>";
  1768. var file = destdir.clone();
  1769. file.append("install.rdf");
  1770. try {
  1771. file.remove(false);
  1772. } catch (ex) {
  1773. }
  1774. var fos = Components.classes["@mozilla.org/network/file-output-stream;1"]
  1775. .createInstance(Components.interfaces.nsIFileOutputStream);
  1776. var cos = Components.classes["@mozilla.org/intl/converter-output-stream;1"]
  1777. .createInstance(Components.interfaces.nsIConverterOutputStream);
  1778. fos.init(file, -1, -1, false);
  1779. cos.init(fos, null, 0, null);
  1780. var ioService=Components.classes["@mozilla.org/network/io-service;1"]
  1781. .getService(Components.interfaces.nsIIOService);
  1782. var scriptableStream=Components
  1783. .classes["@mozilla.org/scriptableinputstream;1"]
  1784. .getService(Components.interfaces.nsIScriptableInputStream);
  1785. var channel=ioService.newChannel("chrome://cckwizard/content/srcfiles/install.rdf.in",null,null);
  1786. var input=channel.open();
  1787. scriptableStream.init(input);
  1788. var str=scriptableStream.read(input.available());
  1789. scriptableStream.close();
  1790. input.close();
  1791. var id = document.getElementById("id").value;
  1792. if (id && (id.length > 0)) {
  1793. str = str.replace(/%idline%/g, idline);
  1794. str = str.replace(/%id%/g, document.getElementById("id").value);
  1795. }
  1796. var name = document.getElementById("name").value;
  1797. if (name && (name.length > 0)) {
  1798. str = str.replace(/%nameline%/g, nameline);
  1799. str = str.replace(/%name%/g, htmlEscape(document.getElementById("name").value));
  1800. } else {
  1801. str = str.replace(/%nameline%/g, "");
  1802. }
  1803. var version = document.getElementById("version").value;
  1804. if (version && (version.length > 0)) {
  1805. str = str.replace(/%versionline%/g, versionline);
  1806. str = str.replace(/%version%/g, document.getElementById("version").value);
  1807. } else {
  1808. str = str.replace(/%versionline%/g, "");
  1809. }
  1810. var description = document.getElementById("description").value;
  1811. if (description && (description.length > 0)) {
  1812. str = str.replace(/%descriptionline%/g, descriptionline);
  1813. str = str.replace(/%description%/g, htmlEscape(document.getElementById("description").value));
  1814. } else {
  1815. str = str.replace(/%descriptionline%/g, "");
  1816. }
  1817. var creator = document.getElementById("creator").value;
  1818. if (creator && (creator.length > 0)) {
  1819. str = str.replace(/%creatorline%/g, creatorline);
  1820. str = str.replace(/%creator%/g, htmlEscape(document.getElementById("creator").value));
  1821. } else {
  1822. str = str.replace(/%creatorline%/g, "");
  1823. }
  1824. var homepageURL = document.getElementById("homepageURL").value;
  1825. if (homepageURL && (homepageURL.length > 0)) {
  1826. str = str.replace(/%homepageURLline%/g, homepageURLline);
  1827. str = str.replace(/%homepageURL%/g, document.getElementById("homepageURL").value);
  1828. } else {
  1829. str = str.replace(/%homepageURLline%/g, "");
  1830. }
  1831. var updateURL = document.getElementById("updateURL").value;
  1832. if (updateURL && (updateURL.length > 0)) {
  1833. str = str.replace(/%updateURLline%/g, updateURLline);
  1834. str = str.replace(/%updateURL%/g, document.getElementById("updateURL").value);
  1835. } else {
  1836. str = str.replace(/%updateURLline%/g, "");
  1837. }
  1838. var updateKey = document.getElementById("updateKey").value;
  1839. if (updateKey && (updateKey.length > 0)) {
  1840. str = str.replace(/%updateKeyline%/g, updateKeyline);
  1841. str = str.replace(/%updateKey%/g, document.getElementById("updateKey").value);
  1842. } else {
  1843. str = str.replace(/%updateKeyline%/g, "");
  1844. }
  1845. var iconURL = document.getElementById("iconURL").value;
  1846. if (iconURL && (iconURL.length > 0)) {
  1847. var sourcefile = Components.classes["@mozilla.org/file/local;1"]
  1848. .createInstance(Components.interfaces.nsILocalFile);
  1849. sourcefile.initWithPath(iconURL);
  1850. str = str.replace(/%iconURLline%/g, iconURLline);
  1851. str = str.replace(/%iconURL%/g, sourcefile.leafName);
  1852. } else {
  1853. str = str.replace(/%iconURLline%/g, "");
  1854. }
  1855. if (document.getElementById("hidden").checked) {
  1856. str = str.replace(/%hiddenline%/g, hiddenline);
  1857. } else {
  1858. str = str.replace(/%hiddenline%/g, "");
  1859. }
  1860. if (document.getElementById("locked").checked) {
  1861. str = str.replace(/%lockedline%/g, lockedline);
  1862. } else {
  1863. str = str.replace(/%lockedline%/g, "");
  1864. }
  1865. cos.writeString(str);
  1866. cos.close();
  1867. fos.close();
  1868. }
  1869. /* This function copies a source file to a destination directory, including */
  1870. /* deleting the file at the destination if it exists */
  1871. function CCKCopyFile(source, destination)
  1872. {
  1873. if (source.length == 0)
  1874. return false;
  1875. var sourcefile = Components.classes["@mozilla.org/file/local;1"]
  1876. .createInstance(Components.interfaces.nsILocalFile);
  1877. sourcefile.initWithPath(source);
  1878. var destfile = destination.clone();
  1879. destfile.append(sourcefile.leafName);
  1880. try {
  1881. destfile.remove(false);
  1882. } catch (ex) {}
  1883. try {
  1884. sourcefile.copyTo(destination, "");
  1885. } catch (ex) {
  1886. var bundle = document.getElementById("bundle_cckwizard");
  1887. var consoleService = Components.classes["@mozilla.org/consoleservice;1"]
  1888. .getService(Components.interfaces.nsIConsoleService);
  1889. consoleService.logStringMessage(bundle.getString("windowTitle") + ": " + ex + "\n\nSource: " + source + "\n\nDestination: " + destination.path );
  1890. throw("Stopping Javascript execution");
  1891. }
  1892. return true;
  1893. }
  1894. function ShowConfigInfo()
  1895. {
  1896. window.openDialog("chrome://cckwizard/content/showconfig.xul","showconfig","chrome,centerscreen,modal");
  1897. }
  1898. function InitConfigInfo()
  1899. {
  1900. var file = Components.classes["@mozilla.org/file/local;1"]
  1901. .createInstance(Components.interfaces.nsILocalFile);
  1902. file.initWithPath(this.opener.currentconfigpath);
  1903. file.append("cck.config");
  1904. if (!file.exists())
  1905. return;
  1906. var stream = Components.classes["@mozilla.org/network/file-input-stream;1"]
  1907. .createInstance(Components.interfaces.nsIFileInputStream);
  1908. stream.init(file, 0x01, 0644, 0);
  1909. var lis = stream.QueryInterface(Components.interfaces.nsILineInputStream);
  1910. var line = {value:null};
  1911. var box = document.getElementById("showconfigy");
  1912. do {
  1913. var more = lis.readLine(line);
  1914. var str = line.value;
  1915. box.value += str;
  1916. box.value += "\n";
  1917. } while (more);
  1918. stream.close();
  1919. }
  1920. function CCKWriteConfigFile(destdir)
  1921. {
  1922. var file = destdir.clone();
  1923. if (!file.exists()) {
  1924. var bundle = document.getElementById("bundle_cckwizard");
  1925. var button = gPromptService.confirmEx(window, bundle.getString("windowTitle"), bundle.getString("createDir").replace(/%S/g, file.path),
  1926. gPromptService.BUTTON_TITLE_YES * gPromptService.BUTTON_POS_0 +
  1927. gPromptService.BUTTON_TITLE_NO * gPromptService.BUTTON_POS_1,
  1928. null, null, null, null, {});
  1929. if (button == 0) {
  1930. try {
  1931. file.create(Components.interfaces.nsIFile.DIRECTORY_TYPE, 0775);
  1932. } catch (ex) {
  1933. gPromptService.alert(window, bundle.getString("windowTitle"),
  1934. bundle.getString("createDirError").replace(/%S/g, file.path));
  1935. return;
  1936. }
  1937. } else {
  1938. return;
  1939. }
  1940. }
  1941. file.append("cck.config");
  1942. var fos = Components.classes["@mozilla.org/network/file-output-stream;1"]
  1943. .createInstance(Components.interfaces.nsIFileOutputStream);
  1944. var cos = Components.classes["@mozilla.org/intl/converter-output-stream;1"]
  1945. .createInstance(Components.interfaces.nsIConverterOutputStream);
  1946. fos.init(file, -1, -1, false);
  1947. cos.init(fos, null, 0, null);
  1948. var elements = document.getElementsByAttribute("id", "*")
  1949. for (var i=0; i < elements.length; i++) {
  1950. if ((elements[i].nodeName == "textbox") ||
  1951. (elements[i].id == "RootKey1") ||
  1952. (elements[i].id == "Type1")) {
  1953. if ((elements[i].id != "saveOnExit") && (elements[i].id != "zipLocation")) {
  1954. if (elements[i].value.length > 0) {
  1955. var line = elements[i].getAttribute("id") + "=" + elements[i].value + "\n";
  1956. cos.writeString(line);
  1957. }
  1958. }
  1959. } else if (elements[i].nodeName == "radiogroup") {
  1960. if ((elements[i].value.length > 0) && (elements[i].value != "0")) {
  1961. var line = elements[i].getAttribute("id") + "=" + elements[i].value + "\n";
  1962. cos.writeString(line);
  1963. }
  1964. } else if (elements[i].nodeName == "checkbox") {
  1965. if (elements[i].id != "saveOnExit") {
  1966. if (elements[i].checked) {
  1967. var line = elements[i].getAttribute("id") + "=" + elements[i].checked + "\n";
  1968. cos.writeString(line);
  1969. }
  1970. }
  1971. } else if (elements[i].id == "prefList") {
  1972. var listbox = document.getElementById('prefList');
  1973. for (var j=0; j < listbox.getRowCount(); j++) {
  1974. var listitem = listbox.getItemAtIndex(j);
  1975. var line = "PreferenceName" + (j+1) + "=" + listitem.getAttribute("label") + "\n";
  1976. cos.writeString(line);
  1977. if (listitem.getAttribute("value").length) {
  1978. var line = "PreferenceValue" + (j+1) + "=" + listitem.getAttribute("value") + "\n";
  1979. cos.writeString(line);
  1980. }
  1981. if (listitem.cck['type'].length > 0) {
  1982. var line = "PreferenceType" + (j+1) + "=" + listitem.cck['type'] + "\n";
  1983. cos.writeString(line);
  1984. }
  1985. if (listitem.cck['lock'].length > 0) {
  1986. var line = "PreferenceLock" + (j+1) + "=" + listitem.cck['lock'] + "\n";
  1987. cos.writeString(line);
  1988. }
  1989. }
  1990. } else if (elements[i].id == "browserPluginList") {
  1991. listbox = document.getElementById('browserPluginList');
  1992. for (var j=0; j < listbox.getRowCount(); j++) {
  1993. listitem = listbox.getItemAtIndex(j);
  1994. var line = "BrowserPluginPath" + (j+1) + "=" + listitem.getAttribute("label") + "\n";
  1995. cos.writeString(line);
  1996. if (listitem.getAttribute("value")) {
  1997. var line = "BrowserPluginType" + (j+1) + "=" + listitem.getAttribute("value") + "\n";
  1998. cos.writeString(line);
  1999. }
  2000. }
  2001. } else if (elements[i].id == "tbFolder.bookmarkList") {
  2002. listbox = document.getElementById('tbFolder.bookmarkList');
  2003. for (var j=0; j < listbox.getRowCount(); j++) {
  2004. listitem = listbox.getItemAtIndex(j);
  2005. var line = "ToolbarFolder1.BookmarkTitle" + (j+1) + "=" + listitem.getAttribute("label") + "\n";
  2006. cos.writeString(line);
  2007. if (listitem.getAttribute("value")) {
  2008. var line = "ToolbarFolder1.BookmarkURL" + (j+1) + "=" + listitem.getAttribute("value") + "\n";
  2009. cos.writeString(line);
  2010. }
  2011. if (listitem.cck['type'].length > 0) {
  2012. var line = "ToolbarFolder1.BookmarkType" + (j+1) + "=" + listitem.cck['type'] + "\n";
  2013. cos.writeString(line);
  2014. }
  2015. }
  2016. } else if (elements[i].id == "tb.bookmarkList") {
  2017. listbox = document.getElementById('tb.bookmarkList');
  2018. for (var j=0; j < listbox.getRowCount(); j++) {
  2019. listitem = listbox.getItemAtIndex(j);
  2020. var line = "ToolbarBookmarkTitle" + (j+1) + "=" + listitem.getAttribute("label") + "\n";
  2021. cos.writeString(line);
  2022. if (listitem.getAttribute("value")) {
  2023. var line = "ToolbarBookmarkURL" + (j+1) + "=" + listitem.getAttribute("value") + "\n";
  2024. cos.writeString(line);
  2025. }
  2026. if (listitem.cck['type'].length > 0) {
  2027. var line = "ToolbarBookmarkType" + (j+1) + "=" + listitem.cck['type'] + "\n";
  2028. cos.writeString(line);
  2029. }
  2030. }
  2031. } else if (elements[i].id == "bmFolder.bookmarkList") {
  2032. listbox = document.getElementById('bmFolder.bookmarkList');
  2033. for (var j=0; j < listbox.getRowCount(); j++) {
  2034. listitem = listbox.getItemAtIndex(j);
  2035. var line = "BookmarkFolder1.BookmarkTitle" + (j+1) + "=" + listitem.getAttribute("label") + "\n";
  2036. cos.writeString(line);
  2037. if (listitem.getAttribute("value")) {
  2038. var line = "BookmarkFolder1.BookmarkURL" + (j+1) + "=" + listitem.getAttribute("value") + "\n";
  2039. cos.writeString(line);
  2040. }
  2041. if (listitem.cck['type'].length > 0) {
  2042. var line = "BookmarkFolder1.BookmarkType" + (j+1) + "=" + listitem.cck['type'] + "\n";
  2043. cos.writeString(line);
  2044. }
  2045. }
  2046. } else if (elements[i].id == "bm.bookmarkList") {
  2047. listbox = document.getElementById('bm.bookmarkList');
  2048. for (var j=0; j < listbox.getRowCount(); j++) {
  2049. listitem = listbox.getItemAtIndex(j);
  2050. var line = "BookmarkTitle" + (j+1) + "=" + listitem.getAttribute("label") + "\n";
  2051. cos.writeString(line);
  2052. if (listitem.getAttribute("value")) {
  2053. var line = "BookmarkURL" + (j+1) + "=" + listitem.getAttribute("value") + "\n";
  2054. cos.writeString(line);
  2055. }
  2056. if (listitem.cck['type'].length > 0) {
  2057. var line = "BookmarkType" + (j+1) + "=" + listitem.cck['type'] + "\n";
  2058. cos.writeString(line);
  2059. }
  2060. }
  2061. } else if (elements[i].id == "regList") {
  2062. listbox = document.getElementById('regList');
  2063. for (var j=0; j < listbox.getRowCount(); j++) {
  2064. listitem = listbox.getItemAtIndex(j);
  2065. var line = "RegName" + (j+1) + "=" + listitem.getAttribute("label") + "\n";
  2066. cos.writeString(line);
  2067. var line = "RootKey" + (j+1) + "=" + listitem.cck['rootkey'] + "\n";
  2068. cos.writeString(line);
  2069. var line = "Key" + (j+1) + "=" + listitem.cck['key'] + "\n";
  2070. cos.writeString(line);
  2071. var line = "Name" + (j+1) + "=" + listitem.cck['name'] + "\n";
  2072. cos.writeString(line);
  2073. var line = "NameValue" + (j+1) + "=" + listitem.cck['namevalue'] + "\n";
  2074. cos.writeString(line);
  2075. var line = "Type" + (j+1) + "=" + listitem.cck['type'] + "\n";
  2076. cos.writeString(line);
  2077. }
  2078. } else if (elements[i].id == "searchEngineList") {
  2079. listbox = document.getElementById('searchEngineList');
  2080. for (var j=0; j < listbox.getRowCount(); j++) {
  2081. listitem = listbox.getItemAtIndex(j);
  2082. var line = "SearchEngine" + (j+1) + "=" + listitem.cck['engineurl'] + "\n";
  2083. cos.writeString(line);
  2084. var line = "SearchEngineIcon" + (j+1) + "=" + listitem.cck['iconurl'] + "\n";
  2085. cos.writeString(line);
  2086. }
  2087. } else if (elements[i].id == "bundleList") {
  2088. listbox = document.getElementById('bundleList')
  2089. for (var j=0; j < listbox.getRowCount(); j++) {
  2090. listitem = listbox.getItemAtIndex(j);
  2091. var line = "BundlePath" + (j+1) + "=" + listitem.getAttribute("label") + "\n";
  2092. cos.writeString(line);
  2093. }
  2094. } else if (elements[i].id == "certList") {
  2095. listbox = document.getElementById('certList')
  2096. for (var j=0; j < listbox.getRowCount(); j++) {
  2097. listitem = listbox.getItemAtIndex(j);
  2098. var line = "CertPath" + (j+1) + "=" + listitem.getAttribute("label") + "\n";
  2099. cos.writeString(line);
  2100. var line = "CertTrust" + (j+1) + "=" + listitem.getAttribute("value") + "\n";
  2101. cos.writeString(line);
  2102. }
  2103. } else if (elements[i].id == "defaultSearchEngine") {
  2104. if (elements[i].selectedItem) {
  2105. if (elements[i].selectedItem.value) {
  2106. var line = "DefaultSearchEngine=" + elements[i].selectedItem.value + "\n";
  2107. cos.writeString(line);
  2108. }
  2109. } else {
  2110. var line = "DefaultSearchEngine=" + elements[i].value + "\n";
  2111. cos.writeString(line);
  2112. }
  2113. }
  2114. }
  2115. cos.close();
  2116. fos.close();
  2117. }
  2118. function CCKReadConfigFile(srcdir)
  2119. {
  2120. var file = srcdir.clone();
  2121. file.append("cck.config");
  2122. if (!file.exists()) {
  2123. DoEnabling();
  2124. toggleProxySettings();
  2125. return;
  2126. }
  2127. var stream = Components.classes["@mozilla.org/network/file-input-stream;1"]
  2128. .createInstance(Components.interfaces.nsIFileInputStream);
  2129. var cis = Components.classes["@mozilla.org/intl/converter-input-stream;1"]
  2130. .createInstance(Components.interfaces.nsIConverterInputStream);
  2131. stream.init(file, 0x01, 0644, 0);
  2132. cis.init(stream, null, 1024, Components.interfaces.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER);
  2133. var lis = cis.QueryInterface(Components.interfaces.nsIUnicharLineInputStream);
  2134. var line = {value:null};
  2135. configarray = new Array();
  2136. do {
  2137. var more = lis.readLine(line);
  2138. var str = line.value;
  2139. var equals = str.indexOf('=');
  2140. if (equals != -1) {
  2141. var firstpart = str.substring(0,equals);
  2142. var secondpart = str.substring(equals+1);
  2143. configarray[firstpart] = secondpart;
  2144. try {
  2145. (document.getElementById(firstpart).value = secondpart)
  2146. } catch (ex) {}
  2147. }
  2148. } while (more);
  2149. // handle prefs
  2150. var listbox = document.getElementById('prefList');
  2151. listbox.clear();
  2152. var i = 1;
  2153. var prefname;
  2154. while( prefname = configarray['PreferenceName' + i]) {
  2155. /* Old config file - figure out pref type */
  2156. if (!(configarray['PreferenceType' + i])) {
  2157. /* We're going to use this a lot */
  2158. var value = configarray['PreferenceValue' + i];
  2159. if ((value.toLowerCase() == "true") || (value.toLowerCase() == "false")) {
  2160. configarray['PreferenceType' + i] = "boolean";
  2161. value = value.toLowerCase();
  2162. } else if (parseInt(value) == value) {
  2163. configarray['PreferenceType' + i] = "integer";
  2164. } else {
  2165. /* Remove opening and closing quotes if they exist */
  2166. configarray['PreferenceType' + i] = "string";
  2167. if (value.charAt(0) == '"')
  2168. value = value.substring(1,value.length);
  2169. if (value.charAt(value.length-1) == '"')
  2170. if (value.charAt(value.length-2) != '\\')
  2171. value = value.substring(0,value.length-1);
  2172. }
  2173. configarray['PreferenceValue' + i] = value;
  2174. }
  2175. if (configarray['PreferenceValue' + i]) {
  2176. listitem = listbox.appendItem(prefname, configarray['PreferenceValue' + i]);
  2177. } else {
  2178. listitem = listbox.appendItem(prefname, "");
  2179. }
  2180. if (configarray['PreferenceLock' + i] == "true") {
  2181. listitem.cck['lock'] = "true";
  2182. } else {
  2183. listitem.cck['lock'] = "";
  2184. }
  2185. listitem.cck['type'] = configarray['PreferenceType' + i];
  2186. i++;
  2187. }
  2188. // handle plugins
  2189. listbox = document.getElementById('browserPluginList');
  2190. listbox.clear();
  2191. var i = 1;
  2192. var pluginname;
  2193. while( pluginname = configarray['BrowserPluginPath' + i]) {
  2194. if (configarray['BrowserPluginType' + i]) {
  2195. listbox.appendItem(pluginname, configarray['BrowserPluginType' + i]);
  2196. } else {
  2197. listbox.appendItem(pluginname, null);
  2198. }
  2199. i++;
  2200. }
  2201. // handle toolbar folder with bookmarks
  2202. listbox = document.getElementById('tbFolder.bookmarkList');
  2203. listbox.clear();
  2204. var i = 1;
  2205. while( name = configarray['ToolbarFolder1.BookmarkTitle' + i]) {
  2206. if (configarray['ToolbarFolder1.BookmarkType' + i] == "separator") {
  2207. listitem = listbox.appendItem("----------", "");
  2208. } else {
  2209. listitem = listbox.appendItem(name, configarray['ToolbarFolder1.BookmarkURL' + i]);
  2210. }
  2211. listitem.setAttribute("class", "listitem-iconic");
  2212. if (configarray['ToolbarFolder1.BookmarkType' + i] == "live") {
  2213. listitem.cck['type'] = "live";
  2214. listitem.setAttribute("image", "chrome://browser/skin/page-livemarks.png");
  2215. } else if (configarray['ToolbarFolder1.BookmarkType' + i] == "separator") {
  2216. listitem.cck['type'] = "separator";
  2217. listitem.setAttribute("image", "");
  2218. } else {
  2219. listitem.cck['type'] = "";
  2220. listitem.setAttribute("image", "chrome://browser/skin/Bookmarks-folder.png");
  2221. }
  2222. i++;
  2223. }
  2224. // handle toolbar bookmarks
  2225. listbox = document.getElementById('tb.bookmarkList');
  2226. listbox.clear();
  2227. var i = 1;
  2228. while( name = configarray['ToolbarBookmarkTitle' + i]) {
  2229. if (configarray['ToolbarBookmarkType' + i] == "separator") {
  2230. listitem = listbox.appendItem("----------", "");
  2231. } else {
  2232. listitem = listbox.appendItem(name, configarray['ToolbarBookmarkURL' + i]);
  2233. }
  2234. listitem.setAttribute("class", "listitem-iconic");
  2235. if (configarray['ToolbarBookmarkType' + i] == "live") {
  2236. listitem.cck['type'] = "live";
  2237. listitem.setAttribute("image", "chrome://browser/skin/page-livemarks.png");
  2238. } else if (configarray['ToolbarBookmarkType' + i] == "separator") {
  2239. listitem.cck['type'] = "separator";
  2240. listitem.setAttribute("image", "");
  2241. } else {
  2242. listitem.cck['type'] = "";
  2243. listitem.setAttribute("image", "chrome://browser/skin/Bookmarks-folder.png");
  2244. }
  2245. i++;
  2246. }
  2247. // handle folder with bookmarks
  2248. listbox = document.getElementById('bmFolder.bookmarkList');
  2249. listbox.clear();
  2250. var i = 1;
  2251. while( name = configarray['BookmarkFolder1.BookmarkTitle' + i]) {
  2252. if (configarray['BookmarkFolder1.BookmarkType' + i] == "separator") {
  2253. listitem = listbox.appendItem("----------", "");
  2254. } else {
  2255. listitem = listbox.appendItem(name, configarray['BookmarkFolder1.BookmarkURL' + i]);
  2256. }
  2257. listitem.setAttribute("class", "listitem-iconic");
  2258. if (configarray['BookmarkFolder1.BookmarkType' + i] == "live") {
  2259. listitem.cck['type'] = "live";
  2260. listitem.setAttribute("image", "chrome://browser/skin/page-livemarks.png");
  2261. } else if (configarray['BookmarkFolder1.BookmarkType' + i] == "separator") {
  2262. listitem.cck['type'] = "separator";
  2263. listitem.setAttribute("image", "");
  2264. } else {
  2265. listitem.cck['type'] = "";
  2266. listitem.setAttribute("image", "chrome://browser/skin/Bookmarks-folder.png");
  2267. }
  2268. i++;
  2269. }
  2270. // handle bookmarks
  2271. listbox = document.getElementById('bm.bookmarkList');
  2272. listbox.clear();
  2273. var i = 1;
  2274. while( name = configarray['BookmarkTitle' + i]) {
  2275. if (configarray['BookmarkType' + i] == "separator") {
  2276. listitem = listbox.appendItem("----------", "");
  2277. } else {
  2278. listitem = listbox.appendItem(name, configarray['BookmarkURL' + i]);
  2279. }
  2280. listitem.setAttribute("class", "listitem-iconic");
  2281. if (configarray['BookmarkType' + i] == "live") {
  2282. listitem.cck['type'] = "live";
  2283. listitem.setAttribute("image", "chrome://browser/skin/page-livemarks.png");
  2284. } else if (configarray['BookmarkType' + i] == "separator") {
  2285. listitem.cck['type'] = "separator";
  2286. listitem.setAttribute("image", "");
  2287. } else {
  2288. listitem.cck['type'] = "";
  2289. listitem.setAttribute("image", "chrome://browser/skin/Bookmarks-folder.png");
  2290. }
  2291. i++;
  2292. }
  2293. // handle registry items
  2294. listbox = document.getElementById('regList');
  2295. listbox.clear();
  2296. var i = 1;
  2297. var regname;
  2298. while( regname = configarray['RegName' + i]) {
  2299. var listitem = listbox.appendItem(regname, "");
  2300. listitem.cck['rootkey'] = configarray['RootKey' + i];
  2301. listitem.cck['key'] = configarray['Key' + i];
  2302. listitem.cck['name'] = configarray['Name' + i];
  2303. listitem.cck['namevalue'] = configarray['NameValue' + i];
  2304. listitem.cck['type'] = configarray['Type' + i];
  2305. i++;
  2306. }
  2307. // cert list
  2308. listbox = document.getElementById('certList');
  2309. listbox.clear();
  2310. var i = 1;
  2311. var certpath;
  2312. while( certpath = configarray['CertPath' + i]) {
  2313. var listitem;
  2314. if (configarray['CertTrust' + i]) {
  2315. listitem = listbox.appendItem(certpath, configarray['CertTrust' + i]);
  2316. } else {
  2317. listitem = listbox.appendItem(certpath, "C,C,C");
  2318. }
  2319. i++;
  2320. }
  2321. // bundle list
  2322. listbox = document.getElementById('bundleList');
  2323. listbox.clear();
  2324. var i = 1;
  2325. var bundlepath;
  2326. while( bundlepath = configarray['BundlePath' + i]) {
  2327. var listitem = listbox.appendItem(bundlepath, "");
  2328. i++;
  2329. }
  2330. var sourcefile = Components.classes["@mozilla.org/file/local;1"]
  2331. .createInstance(Components.interfaces.nsILocalFile);
  2332. // handle searchengines
  2333. listbox = document.getElementById('searchEngineList');
  2334. listbox.clear();
  2335. var menulist = document.getElementById('defaultSearchEngine')
  2336. menulist.selectedIndex = -1;
  2337. menulist.removeAllItems();
  2338. /* I changed the name from SearchPlugin to SearchEngine. */
  2339. /* This code is to support old config files */
  2340. var searchname = "SearchEngine";
  2341. if (configarray['SearchPlugin1']) {
  2342. searchname = "SearchPlugin";
  2343. }
  2344. var i = 1;
  2345. var searchengineurl;
  2346. while(searchengineurl = configarray[searchname + i]) {
  2347. name = getSearchEngineName(searchengineurl);
  2348. listitem = listbox.appendItem(name, "");
  2349. listitem.setAttribute("class", "listitem-iconic");
  2350. if (configarray[searchname + 'Icon' + i].length > 0) {
  2351. try {
  2352. sourcefile.initWithPath(configarray[searchname + 'Icon' + i]);
  2353. var ioServ = Components.classes["@mozilla.org/network/io-service;1"]
  2354. .getService(Components.interfaces.nsIIOService);
  2355. var imgfile = ioServ.newFileURI(sourcefile);
  2356. listitem.setAttribute("image", imgfile.spec);
  2357. } catch (e) {
  2358. }
  2359. } else {
  2360. listitem.setAttribute("image", getSearchEngineImage(searchengineurl));
  2361. }
  2362. listitem.cck['name'] = name;
  2363. listitem.cck['engineurl'] = searchengineurl;
  2364. listitem.cck['iconurl'] = configarray[searchname + 'Icon' + i];
  2365. i++;
  2366. }
  2367. RefreshDefaultSearchEngines();
  2368. if (configarray["DefaultSearchEngine"]) {
  2369. menulist.value = configarray["DefaultSearchEngine"];
  2370. }
  2371. var hidden = document.getElementById("hidden");
  2372. hidden.checked = configarray["hidden"];
  2373. var locked = document.getElementById("locked");
  2374. locked.checked = configarray["locked"];
  2375. var aboutconfig = document.getElementById("noaboutconfig");
  2376. aboutconfig.checked = configarray["noaboutconfig"];
  2377. var noWelcomePage = document.getElementById("noWelcomePage");
  2378. noWelcomePage.checked = configarray["noWelcomePage"];
  2379. var noWelcomePage = document.getElementById("noOverridePage");
  2380. noWelcomePage.checked = configarray["noOverridePage"];
  2381. var proxyitem = document.getElementById("shareAllProxies");
  2382. proxyitem.checked = configarray["shareAllProxies"];
  2383. var item = document.getElementById("ToolbarLocation");
  2384. if (configarray["ToolbarLocation"]) {
  2385. item.value = configarray["ToolbarLocation"];
  2386. } else {
  2387. item.value = "Last";
  2388. }
  2389. var item = document.getElementById("BookmarkLocation");
  2390. if (configarray["BookmarkLocation"]) {
  2391. item.value = configarray["BookmarkLocation"];
  2392. } else {
  2393. item.value = "Last";
  2394. }
  2395. DoEnabling();
  2396. toggleProxySettings();
  2397. stream.close();
  2398. }
  2399. function Validate(field, message)
  2400. {
  2401. var gIDTest = /^(\{[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\}|[a-z0-9-\._]*\@[a-z0-9-\._]+)$/i;
  2402. for (var i=0; i < arguments.length; i++) {
  2403. /* special case ID */
  2404. if (document.getElementById(arguments[i]).id == "id") {
  2405. if (!gIDTest.test(document.getElementById(arguments[i]).value)) {
  2406. var bundle = document.getElementById("bundle_cckwizard");
  2407. gPromptService.alert(window, bundle.getString("windowTitle"), bundle.getString(arguments[i] + ".error"));
  2408. return false;
  2409. }
  2410. } else {
  2411. if (document.getElementById(arguments[i]).value == '') {
  2412. var bundle = document.getElementById("bundle_cckwizard");
  2413. gPromptService.alert(window, bundle.getString("windowTitle"), bundle.getString(arguments[i] + ".error"));
  2414. return false;
  2415. }
  2416. }
  2417. }
  2418. return true;
  2419. }
  2420. function ValidateNoSpace(field, message)
  2421. {
  2422. for (var i=0; i < arguments.length; i++) {
  2423. var str = document.getElementById(arguments[i]).value;
  2424. if ((str == '') || (str.match(" "))) {
  2425. var bundle = document.getElementById("bundle_cckwizard");
  2426. gPromptService.alert(window, bundle.getString("windowTitle"), bundle.getString(arguments[i] + ".error"));
  2427. return false;
  2428. }
  2429. }
  2430. return true;
  2431. }
  2432. function ValidateFile()
  2433. {
  2434. for (var i=0; i < arguments.length; i++) {
  2435. var filename = document.getElementById(arguments[i]).value;
  2436. if (filename.length > 0) {
  2437. var file = Components.classes["@mozilla.org/file/local;1"]
  2438. .createInstance(Components.interfaces.nsILocalFile);
  2439. try {
  2440. file.initWithPath(filename);
  2441. } catch (e) {
  2442. gPromptService.alert(window, "", "File " + filename + " not found");
  2443. return false;
  2444. }
  2445. if (!file.exists() || file.isDirectory()) {
  2446. gPromptService.alert(window, "", "File " + filename + " not found");
  2447. return false;
  2448. }
  2449. }
  2450. }
  2451. return true;
  2452. }
  2453. function ValidateDir()
  2454. {
  2455. for (var i=0; i < arguments.length; i++) {
  2456. var filename = document.getElementById(arguments[i]).value;
  2457. if (filename.length > 0) {
  2458. var file = Components.classes["@mozilla.org/file/local;1"]
  2459. .createInstance(Components.interfaces.nsILocalFile);
  2460. try {
  2461. file.initWithPath(filename);
  2462. } catch (e) {
  2463. gPromptService.alert(window, "", "Directory " + filename + " not found");
  2464. return false;
  2465. }
  2466. if (!file.exists()) {
  2467. var bundle = document.getElementById("bundle_cckwizard");
  2468. var button = gPromptService.confirmEx(window, bundle.getString("windowTitle"), bundle.getString("createDir").replace(/%S/g, filename),
  2469. gPromptService.BUTTON_TITLE_YES * gPromptService.BUTTON_POS_0 +
  2470. gPromptService.BUTTON_TITLE_NO * gPromptService.BUTTON_POS_1,
  2471. null, null, null, null, {});
  2472. if (button == 0) {
  2473. try {
  2474. file.create(Components.interfaces.nsIFile.DIRECTORY_TYPE, 0775);
  2475. } catch (ex) {
  2476. gPromptService.alert(window, bundle.getString("windowTitle"),
  2477. bundle.getString("createDirError").replace(/%S/g, filename));
  2478. return false;
  2479. }
  2480. }
  2481. } else if (!file.isDirectory()) {
  2482. gPromptService.alert(window, "", "Directory " + filename + " not found");
  2483. return false;
  2484. }
  2485. }
  2486. }
  2487. return true;
  2488. }
  2489. function toggleProxySettings()
  2490. {
  2491. var http = document.getElementById("HTTPproxyname");
  2492. var httpPort = document.getElementById("HTTPportno");
  2493. var ftp = document.getElementById("FTPproxyname");
  2494. var ftpPort = document.getElementById("FTPportno");
  2495. var gopher = document.getElementById("Gopherproxyname");
  2496. var gopherPort = document.getElementById("Gopherportno");
  2497. var ssl = document.getElementById("SSLproxyname");
  2498. var sslPort = document.getElementById("SSLportno");
  2499. var socks = document.getElementById("SOCKShostname");
  2500. var socksPort = document.getElementById("SOCKSportno");
  2501. var socksVersion = document.getElementById("socksv");
  2502. var socksVersion4 = document.getElementById("SOCKSVersion4");
  2503. var socksVersion5 = document.getElementById("SOCKSVersion5");
  2504. // arrays
  2505. var urls = [ftp,gopher,ssl];
  2506. var ports = [ftpPort,gopherPort,sslPort];
  2507. var allFields = [ftp,gopher,ssl,ftpPort,gopherPort,sslPort,socks,socksPort,socksVersion,socksVersion4,socksVersion5];
  2508. var i;
  2509. if ((document.getElementById("shareAllProxies").checked) || document.getElementById("ProxyType").value != "1") {
  2510. for (i = 0; i < allFields.length; i++)
  2511. allFields[i].setAttribute("disabled", "true");
  2512. } else {
  2513. for (i = 0; i < allFields.length; i++) {
  2514. allFields[i].removeAttribute("disabled");
  2515. }
  2516. }
  2517. }
  2518. function DoEnabling()
  2519. {
  2520. var i;
  2521. var ftp = document.getElementById("FTPproxyname");
  2522. var ftpPort = document.getElementById("FTPportno");
  2523. var gopher = document.getElementById("Gopherproxyname");
  2524. var gopherPort = document.getElementById("Gopherportno");
  2525. var http = document.getElementById("HTTPproxyname");
  2526. var httpPort = document.getElementById("HTTPportno");
  2527. var socks = document.getElementById("SOCKShostname");
  2528. var socksPort = document.getElementById("SOCKSportno");
  2529. var socksVersion = document.getElementById("socksv");
  2530. var socksVersion4 = document.getElementById("SOCKSVersion4");
  2531. var socksVersion5 = document.getElementById("SOCKSVersion5");
  2532. var ssl = document.getElementById("SSLproxyname");
  2533. var sslPort = document.getElementById("SSLportno");
  2534. var noProxy = document.getElementById("NoProxyname");
  2535. var autoURL = document.getElementById("autoproxyurl");
  2536. var autoFile = document.getElementById("autoproxyfile");
  2537. var autoFileButton = document.getElementById("autoproxyfilebutton");
  2538. var shareAllProxies = document.getElementById("shareAllProxies");
  2539. // convenience arrays
  2540. var manual = [ftp, ftpPort, gopher, gopherPort, http, httpPort, socks, socksPort, socksVersion, socksVersion4, socksVersion5, ssl, sslPort, noProxy, shareAllProxies];
  2541. var manual2 = [http, httpPort, noProxy, shareAllProxies];
  2542. var auto = [autoURL];
  2543. var file = [autoFile, autoFileButton];
  2544. // radio buttons
  2545. var radiogroup = document.getElementById("ProxyType");
  2546. if (radiogroup.value == "")
  2547. radiogroup.value = "0";
  2548. switch ( radiogroup.value ) {
  2549. case "0":
  2550. case "4":
  2551. for (i = 0; i < manual.length; i++)
  2552. manual[i].setAttribute( "disabled", "true" );
  2553. for (i = 0; i < auto.length; i++)
  2554. auto[i].setAttribute( "disabled", "true" );
  2555. break;
  2556. for (i = 0; i < file.length; i++)
  2557. file[i].setAttribute( "disabled", "true" );
  2558. break;
  2559. case "1":
  2560. for (i = 0; i < auto.length; i++)
  2561. auto[i].setAttribute( "disabled", "true" );
  2562. for (i = 0; i < file.length; i++)
  2563. file[i].setAttribute( "disabled", "true" );
  2564. if (!radiogroup.disabled && !shareAllProxies.checked) {
  2565. for (i = 0; i < manual.length; i++) {
  2566. manual[i].removeAttribute( "disabled" );
  2567. }
  2568. } else {
  2569. for (i = 0; i < manual.length; i++)
  2570. manual[i].setAttribute("disabled", "true");
  2571. for (i = 0; i < manual2.length; i++) {
  2572. manual2[i].removeAttribute( "disabled" );
  2573. }
  2574. }
  2575. break;
  2576. case "5":
  2577. for (i = 0; i < auto.length; i++)
  2578. auto[i].setAttribute( "disabled", "true" );
  2579. for (i = 0; i < manual.length; i++)
  2580. manual[i].setAttribute("disabled", "true");
  2581. if (!radiogroup.disabled)
  2582. for (i = 0; i < file.length; i++)
  2583. file[i].removeAttribute("disabled");
  2584. break;
  2585. case "2":
  2586. default:
  2587. for (i = 0; i < manual.length; i++)
  2588. manual[i].setAttribute("disabled", "true");
  2589. for (i = 0; i < file.length; i++)
  2590. file[i].setAttribute( "disabled", "true" );
  2591. if (!radiogroup.disabled)
  2592. for (i = 0; i < auto.length; i++)
  2593. auto[i].removeAttribute("disabled");
  2594. break;
  2595. }
  2596. }
  2597. function htmlEscape(s)
  2598. {
  2599. s=s.replace(/&/g,'&amp;');
  2600. s=s.replace(/>/g,'&gt;');
  2601. s=s.replace(/</g,'&lt;');
  2602. s=s.replace(/"/g, '&quot;');
  2603. return s;
  2604. }