From 843879ec5da6dcb1f4a387631c81426fa02916cf Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E6=9D=BE=E5=B3=B6=20=E6=B5=A9=E9=81=93?= Date: Fri, 12 Jun 2009 15:14:06 +0900 Subject: [PATCH] import source-tree based svn r84. --- Makefile.in | 49 + app/Makefile.in | 370 ++++++++ app/application.ini | 58 ++ app/bluegriffon.exe.manifest | 30 + app/bluegriffon.ico | Bin 0 -> 4286 bytes app/default16.png | Bin 0 -> 155 bytes app/icons/bluegriffon.ico | Bin 0 -> 4286 bytes app/icons/bluegriffon.png | Bin 0 -> 1555 bytes app/icons/bluegriffon128.png | Bin 0 -> 10572 bytes app/icons/bluegriffon16.png | Bin 0 -> 579 bytes app/icons/bluegriffon16.xpm | 111 +++ app/icons/bluegriffon32.png | Bin 0 -> 1358 bytes app/icons/bluegriffon48.png | Bin 0 -> 2486 bytes app/icons/bluegriffon50.png | Bin 0 -> 2615 bytes app/icons/bluegriffon50.xpm | 221 +++++ app/icons/default16.png | Bin 0 -> 672 bytes app/icons/default50.png | Bin 0 -> 2615 bytes app/macbuild/Contents/Info.plist.in | 30 + .../Resources/English.lproj/InfoPlist.strings.in | 2 + app/macbuild/Contents/Resources/bluegriffon.icns | Bin 0 -> 36909 bytes app/mozilla.in | 142 +++ app/nsEditorApp.cpp | 106 +++ app/profile/bluegriffon-prefs.js | 73 ++ app/splash.rc | 89 ++ base/Makefile.in | 55 ++ base/content/bluegriffon/DI.png | Bin 0 -> 2447 bytes base/content/bluegriffon/EditorContent.css | 114 +++ base/content/bluegriffon/EditorOverride.css | 366 ++++++++ base/content/bluegriffon/Thumbs.db | Bin 0 -> 12288 bytes base/content/bluegriffon/about-logo.png | Bin 0 -> 19788 bytes base/content/bluegriffon/aboutDialog.css | 61 ++ base/content/bluegriffon/bindings/cssToggler.xml | 370 ++++++++ base/content/bluegriffon/bindings/ecolorpicker.xml | 103 +++ .../bluegriffon/bindings/filepickerbutton.css | 19 + .../bluegriffon/bindings/filepickerbutton.xml | 144 +++ base/content/bluegriffon/bindings/multistate.css | 40 + base/content/bluegriffon/bindings/multistate.xml | 157 ++++ base/content/bluegriffon/bindings/rulers.xml | 420 +++++++++ base/content/bluegriffon/bindings/sidebar.css | 55 ++ base/content/bluegriffon/bindings/sidebar.xml | 815 +++++++++++++++++ base/content/bluegriffon/bindings/structurebar.css | 78 ++ base/content/bluegriffon/bindings/structurebar.xml | 172 ++++ base/content/bluegriffon/bindings/tabeditor.xml | 502 +++++++++++ base/content/bluegriffon/blanks/strict.html | 12 + base/content/bluegriffon/blanks/strict.xhtml | 10 + base/content/bluegriffon/blanks/transitional.html | 12 + base/content/bluegriffon/blanks/transitional.xhtml | 11 + base/content/bluegriffon/brightness.png | Bin 0 -> 475 bytes base/content/bluegriffon/colourPickerArrow.gif | Bin 0 -> 831 bytes base/content/bluegriffon/colourPickerCrosshair.gif | Bin 0 -> 839 bytes base/content/bluegriffon/credits.xhtml | 355 ++++++++ base/content/bluegriffon/dialogs/insertTable.js | 283 ++++++ base/content/bluegriffon/dialogs/insertTable.xul | 310 +++++++ base/content/bluegriffon/dialogs/languages.js | 131 +++ base/content/bluegriffon/dialogs/languages.xul | 76 ++ base/content/bluegriffon/dialogs/markupCleaner.js | 62 ++ base/content/bluegriffon/dialogs/markupCleaner.xul | 90 ++ base/content/bluegriffon/dialogs/newPageWizard.js | 568 ++++++++++++ base/content/bluegriffon/dialogs/newPageWizard.xul | 406 +++++++++ base/content/bluegriffon/dialogs/openLocation.js | 96 ++ base/content/bluegriffon/dialogs/openLocation.xul | 89 ++ base/content/bluegriffon/dialogs/pageProperties.js | 265 ++++++ .../content/bluegriffon/dialogs/pageProperties.xul | 197 ++++ .../bluegriffon/dialogs/standaloneSidebar.js | 106 +++ .../bluegriffon/dialogs/standaloneSidebar.xul | 70 ++ base/content/bluegriffon/hsPanel.png | Bin 0 -> 9080 bytes base/content/bluegriffon/js/aboutDialog.js | 94 ++ base/content/bluegriffon/js/activeSourceView.js | 947 +++++++++++++++++++ base/content/bluegriffon/js/bluegriffon.js | 376 ++++++++ base/content/bluegriffon/js/col.js | 326 +++++++ base/content/bluegriffon/js/colourPicker.js | 779 ++++++++++++++++ base/content/bluegriffon/js/colourPickerHelper.js | 82 ++ base/content/bluegriffon/js/commands.js | 333 +++++++ base/content/bluegriffon/js/customize.js | 142 +++ .../bluegriffon/js/customizeToolbarSheet.js | 44 + base/content/bluegriffon/js/dummyCommands.inc | 42 + base/content/bluegriffon/js/fileCommands.inc | 80 ++ base/content/bluegriffon/js/formatCommands.inc | 62 ++ base/content/bluegriffon/js/insertionCommands.inc | 23 + base/content/bluegriffon/js/languages.js | 178 ++++ base/content/bluegriffon/js/markupCleaner.js | 163 ++++ base/content/bluegriffon/js/navigationCommands.inc | 69 ++ base/content/bluegriffon/js/observers.inc | 138 +++ base/content/bluegriffon/js/propertiesDeck.js | 0 base/content/bluegriffon/js/recentPages.js | 166 ++++ base/content/bluegriffon/js/shutdown.inc | 8 + base/content/bluegriffon/js/startup.inc | 30 + base/content/bluegriffon/js/toolbars.js | 83 ++ base/content/bluegriffon/js/viewCommands.inc | 16 + base/content/bluegriffon/js/zoomManager.js | 209 +++++ base/content/bluegriffon/sourceViewTemplate.html | 93 ++ base/content/bluegriffon/utils/colors.js | 94 ++ base/content/bluegriffon/utils/css.js | 312 +++++++ base/content/bluegriffon/utils/dgid.js | 49 + base/content/bluegriffon/utils/editorUtils.js | 502 +++++++++++ base/content/bluegriffon/utils/fileUtils.js | 568 ++++++++++++ base/content/bluegriffon/utils/global.js | 373 ++++++++ base/content/bluegriffon/utils/l10n.js | 111 +++ base/content/bluegriffon/utils/login.js | 147 +++ base/content/bluegriffon/utils/notifiers.js | 147 +++ base/content/bluegriffon/utils/prompter.js | 111 +++ base/content/bluegriffon/utils/urls.js | 537 +++++++++++ base/content/bluegriffon/xul/aboutDialog.xul | 93 ++ base/content/bluegriffon/xul/bluegriffon.xul | 194 ++++ base/content/bluegriffon/xul/colourPicker.xul | 186 ++++ .../bluegriffon/xul/customizeToolbarSheet.xul | 121 +++ base/content/bluegriffon/xul/formatbarpalette.inc | 141 +++ .../content/bluegriffon/xul/maintoolbarpalette.inc | 42 + base/content/bluegriffon/xul/menubar.inc | 75 ++ base/content/bluegriffon/xul/overlays.inc | 1 + base/content/bluegriffon/xul/propertiesDeck.xul | 53 ++ base/content/bluegriffon/xul/scripts.inc | 31 + base/content/bluegriffon/xul/sets.inc | 108 +++ base/jar.mn | 114 +++ base/locale/en-US/bluegriffon/aboutDialog.dtd | 6 + base/locale/en-US/bluegriffon/bluegriffon.dtd | 180 ++++ .../en-US/bluegriffon/bluegriffon.properties | 18 + base/locale/en-US/bluegriffon/colourPicker.dtd | 66 ++ base/locale/en-US/bluegriffon/credits.dtd | 35 + base/locale/en-US/bluegriffon/cssToggler.dtd | 52 ++ base/locale/en-US/bluegriffon/filePicking.dtd | 1 + base/locale/en-US/bluegriffon/filepickerbutton.dtd | 1 + base/locale/en-US/bluegriffon/insertTable.dtd | 64 ++ base/locale/en-US/bluegriffon/language.properties | 7 + base/locale/en-US/bluegriffon/languages.dtd | 10 + base/locale/en-US/bluegriffon/markupCleaner.dtd | 48 + .../bluegriffon/masterPasswordQuery.properties | 5 + base/locale/en-US/bluegriffon/newPageWizard.dtd | 133 +++ .../en-US/bluegriffon/newPageWizard.properties | 4 + base/locale/en-US/bluegriffon/openLocation.dtd | 50 ++ .../en-US/bluegriffon/openLocation.properties | 2 + base/locale/en-US/bluegriffon/pageProperties.dtd | 33 + .../en-US/bluegriffon/pagePropertiesPreview.html | 14 + base/locale/en-US/bluegriffon/propertiesDeck.dtd | 1 + base/locale/en-US/bluegriffon/sidebar.dtd | 50 ++ .../locale/en-US/bluegriffon/standaloneSidebar.dtd | 40 + base/locale/en-US/bluegriffon/structurebar.dtd | 1 + base/locale/en-US/bluegriffon/tabeditor.dtd | 38 + base/locale/en-US/bluegriffon/tabeditor.properties | 1 + base/locale/en-US/branding/brand.dtd | 42 + base/locale/en-US/branding/brand.properties | 4 + build.mk | 66 ++ config/mozconfig.linux | 31 + config/mozconfig.macosx | 34 + config/mozconfig.win | 36 + config/netwerkProtocolFtp.patch | 534 +++++++++++ config/version.txt | 1 + confvars.sh | 51 ++ doc/BUILD.txt | 39 + doc/bg.png | Bin 0 -> 70803 bytes doc/colorPicker.html | 382 ++++++++ doc/colorPicker.png | Bin 0 -> 19765 bytes doc/doc.css | 47 + doc/index.html | 50 ++ doc/notifiers.html | 202 +++++ doc/sidebarcontent.html | 100 +++ extensions/Makefile.in | 48 + extensions/diavolo/Makefile.in | 46 + extensions/diavolo/content/EditorOverride.css | 96 ++ extensions/diavolo/content/codecompletion.js | 408 +++++++++ extensions/diavolo/content/completionPopup.xml | 115 +++ extensions/diavolo/content/css.css | 97 ++ extensions/diavolo/content/css.xml | 999 +++++++++++++++++++++ extensions/diavolo/content/cssCompletion.xml | 408 +++++++++ extensions/diavolo/content/editor.js | 736 +++++++++++++++ extensions/diavolo/content/grammar.js | 443 +++++++++ extensions/diavolo/content/highlighter.js | 615 +++++++++++++ extensions/diavolo/content/linenumbering.css | 65 ++ extensions/diavolo/content/linenumbering.xml | 105 +++ extensions/diavolo/content/selector.js | 125 +++ extensions/diavolo/content/sourceeditor.xml | 179 ++++ extensions/diavolo/content/tokeniser.js | 158 ++++ extensions/diavolo/jar.mn | 16 + extensions/jQuery/MIT-LICENSE.txt | 20 + extensions/jQuery/Makefile.in | 52 ++ extensions/jQuery/content/jquery.min.js | 32 + extensions/jQuery/install.rdf | 31 + extensions/jQuery/jar.mn | 3 + installer/Makefile.in | 66 ++ makefiles.sh | 48 + modules/Makefile.in | 48 + modules/colourPickerHelper.jsm | 85 ++ readme.html | 31 + sidebars/Makefile.in | 48 + sidebars/projectManager/Makefile.in | 46 + .../projectManager/content/bluegriffonOverlay.js | 116 +++ .../projectManager/content/bluegriffonOverlay.xul | 58 ++ sidebars/projectManager/content/ftpDirParser.js | 358 ++++++++ .../projectManager/content/ftpProgressListener.js | 126 +++ sidebars/projectManager/content/localDirParser.js | 122 +++ sidebars/projectManager/content/projectManager.js | 841 +++++++++++++++++ sidebars/projectManager/content/projectManager.xul | 151 ++++ .../projectManager/content/projectProperties.js | 195 ++++ .../projectManager/content/projectProperties.xul | 183 ++++ sidebars/projectManager/content/url-loader.js | 248 +++++ sidebars/projectManager/jar.mn | 29 + .../locale/en-US/bluegriffonOverlay.dtd | 1 + .../projectManager/locale/en-US/projectManager.dtd | 18 + .../locale/en-US/projectManager.properties | 38 + .../locale/en-US/projectProperties.dtd | 39 + sidebars/projectManager/skin/config-disabled.png | Bin 0 -> 444 bytes sidebars/projectManager/skin/config.png | Bin 0 -> 833 bytes sidebars/projectManager/skin/minus-disabled.png | Bin 0 -> 253 bytes sidebars/projectManager/skin/minus.png | Bin 0 -> 391 bytes sidebars/projectManager/skin/plus.png | Bin 0 -> 395 bytes sidebars/projectManager/skin/projectManager.css | 82 ++ sidebars/projectManager/skin/projectProperties.css | 3 + src/Makefile.in | 25 + src/diIAttrChangedTxn.idl | 21 + src/diIAttrNameChangedTxn.idl | 19 + src/diITextNodeChangedTxn.idl | 20 + themes/Makefile.in | 57 ++ themes/mac/Makefile.in | 51 ++ themes/mac/classic/backgroundImage.png | Bin 0 -> 897 bytes themes/mac/classic/backgroundPosition.png | Bin 0 -> 648 bytes themes/mac/classic/bluegriffon.css | 144 +++ themes/mac/classic/bluegriffon.ico | Bin 0 -> 4286 bytes themes/mac/classic/bluegriffonDialogs.css | 4 + themes/mac/classic/colourPicker.css | 65 ++ themes/mac/classic/config-disabled.png | Bin 0 -> 527 bytes themes/mac/classic/config.png | Bin 0 -> 554 bytes themes/mac/classic/cssToggler.css | 52 ++ themes/mac/classic/ecolorpicker.css | 86 ++ themes/mac/classic/formatToolbar.css | 224 +++++ themes/mac/classic/formatToolbar/Thumbs.db | Bin 0 -> 14848 bytes .../formatToolbar/align-center-disabled.png | Bin 0 -> 192 bytes themes/mac/classic/formatToolbar/align-center.png | Bin 0 -> 189 bytes .../formatToolbar/align-justify-disabled.png | Bin 0 -> 160 bytes themes/mac/classic/formatToolbar/align-justify.png | Bin 0 -> 158 bytes .../classic/formatToolbar/align-left-disabled.png | Bin 0 -> 183 bytes themes/mac/classic/formatToolbar/align-left.png | Bin 0 -> 182 bytes .../classic/formatToolbar/align-right-disabled.png | Bin 0 -> 183 bytes themes/mac/classic/formatToolbar/align-right.png | Bin 0 -> 182 bytes themes/mac/classic/formatToolbar/bold-disabled.png | Bin 0 -> 319 bytes themes/mac/classic/formatToolbar/bold.png | Bin 0 -> 319 bytes themes/mac/classic/formatToolbar/code-disabled.png | Bin 0 -> 277 bytes themes/mac/classic/formatToolbar/code.png | Bin 0 -> 311 bytes themes/mac/classic/formatToolbar/dd-disabled.gif | Bin 0 -> 860 bytes themes/mac/classic/formatToolbar/dd-disabled.png | Bin 0 -> 204 bytes themes/mac/classic/formatToolbar/dd.gif | Bin 0 -> 860 bytes themes/mac/classic/formatToolbar/dd.png | Bin 0 -> 191 bytes themes/mac/classic/formatToolbar/dt-disabled.gif | Bin 0 -> 858 bytes themes/mac/classic/formatToolbar/dt-disabled.png | Bin 0 -> 203 bytes themes/mac/classic/formatToolbar/dt.gif | Bin 0 -> 858 bytes themes/mac/classic/formatToolbar/dt.png | Bin 0 -> 190 bytes themes/mac/classic/formatToolbar/em-disabled.png | Bin 0 -> 250 bytes themes/mac/classic/formatToolbar/em.png | Bin 0 -> 244 bytes .../mac/classic/formatToolbar/indent-disabled.png | Bin 0 -> 245 bytes themes/mac/classic/formatToolbar/indent.png | Bin 0 -> 282 bytes .../mac/classic/formatToolbar/italic-disabled.png | Bin 0 -> 216 bytes themes/mac/classic/formatToolbar/italic.png | Bin 0 -> 204 bytes themes/mac/classic/formatToolbar/ol-disabled.png | Bin 0 -> 270 bytes themes/mac/classic/formatToolbar/ol.png | Bin 0 -> 243 bytes .../mac/classic/formatToolbar/outdent-disabled.png | Bin 0 -> 257 bytes themes/mac/classic/formatToolbar/outdent.png | Bin 0 -> 301 bytes .../mac/classic/formatToolbar/strong-disabled.png | Bin 0 -> 314 bytes themes/mac/classic/formatToolbar/strong.png | Bin 0 -> 288 bytes themes/mac/classic/formatToolbar/ul-disabled.png | Bin 0 -> 216 bytes themes/mac/classic/formatToolbar/ul.png | Bin 0 -> 218 bytes .../classic/formatToolbar/underline-disabled.png | Bin 0 -> 280 bytes themes/mac/classic/formatToolbar/underline.png | Bin 0 -> 264 bytes themes/mac/classic/icons/Thumbs.db | Bin 0 -> 28672 bytes themes/mac/classic/icons/bold-disabled.png | Bin 0 -> 320 bytes themes/mac/classic/icons/bold-hover.png | Bin 0 -> 344 bytes themes/mac/classic/icons/bold.png | Bin 0 -> 311 bytes themes/mac/classic/icons/btn3.png | Bin 0 -> 2793 bytes themes/mac/classic/icons/close-button.png | Bin 0 -> 1522 bytes themes/mac/classic/icons/filePicking-hover.png | Bin 0 -> 702 bytes themes/mac/classic/icons/filePicking.png | Bin 0 -> 1141 bytes themes/mac/classic/icons/information-disabled.png | Bin 0 -> 220 bytes themes/mac/classic/icons/information-hover.png | Bin 0 -> 274 bytes themes/mac/classic/icons/information.png | Bin 0 -> 268 bytes themes/mac/classic/icons/loading.gif | Bin 0 -> 288 bytes themes/mac/classic/icons/modified.gif | Bin 0 -> 837 bytes themes/mac/classic/icons/new.png | Bin 0 -> 5962 bytes themes/mac/classic/icons/newstop.png | Bin 0 -> 192 bytes themes/mac/classic/icons/open.png | Bin 0 -> 6197 bytes themes/mac/classic/icons/stop.png | Bin 0 -> 6402 bytes themes/mac/classic/icons/twistyClosed.png | Bin 0 -> 334 bytes themes/mac/classic/icons/twistyOpen.png | Bin 0 -> 309 bytes themes/mac/classic/insertTable.css | 35 + themes/mac/classic/languages.css | 3 + themes/mac/classic/layouts/full1.png | Bin 0 -> 217 bytes themes/mac/classic/layouts/full10.png | Bin 0 -> 219 bytes themes/mac/classic/layouts/full11.png | Bin 0 -> 220 bytes themes/mac/classic/layouts/full12.png | Bin 0 -> 218 bytes themes/mac/classic/layouts/full13.png | Bin 0 -> 218 bytes themes/mac/classic/layouts/full14.png | Bin 0 -> 218 bytes themes/mac/classic/layouts/full15.png | Bin 0 -> 219 bytes themes/mac/classic/layouts/full16.png | Bin 0 -> 221 bytes themes/mac/classic/layouts/full17.png | Bin 0 -> 223 bytes themes/mac/classic/layouts/full18.png | Bin 0 -> 221 bytes themes/mac/classic/layouts/full19.png | Bin 0 -> 219 bytes themes/mac/classic/layouts/full2.png | Bin 0 -> 217 bytes themes/mac/classic/layouts/full20.png | Bin 0 -> 223 bytes themes/mac/classic/layouts/full21.png | Bin 0 -> 217 bytes themes/mac/classic/layouts/full22.png | Bin 0 -> 286 bytes themes/mac/classic/layouts/full23.png | Bin 0 -> 286 bytes themes/mac/classic/layouts/full24.png | Bin 0 -> 287 bytes themes/mac/classic/layouts/full25.png | Bin 0 -> 283 bytes themes/mac/classic/layouts/full26.png | Bin 0 -> 283 bytes themes/mac/classic/layouts/full27.png | Bin 0 -> 287 bytes themes/mac/classic/layouts/full28.png | Bin 0 -> 280 bytes themes/mac/classic/layouts/full29.png | Bin 0 -> 284 bytes themes/mac/classic/layouts/full3.png | Bin 0 -> 217 bytes themes/mac/classic/layouts/full30.png | Bin 0 -> 283 bytes themes/mac/classic/layouts/full31.png | Bin 0 -> 283 bytes themes/mac/classic/layouts/full32.png | Bin 0 -> 283 bytes themes/mac/classic/layouts/full33.png | Bin 0 -> 282 bytes themes/mac/classic/layouts/full34.png | Bin 0 -> 283 bytes themes/mac/classic/layouts/full35.png | Bin 0 -> 275 bytes themes/mac/classic/layouts/full36.png | Bin 0 -> 286 bytes themes/mac/classic/layouts/full37.png | Bin 0 -> 284 bytes themes/mac/classic/layouts/full38.png | Bin 0 -> 286 bytes themes/mac/classic/layouts/full39.png | Bin 0 -> 286 bytes themes/mac/classic/layouts/full4.png | Bin 0 -> 217 bytes themes/mac/classic/layouts/full40.png | Bin 0 -> 286 bytes themes/mac/classic/layouts/full41.png | Bin 0 -> 286 bytes themes/mac/classic/layouts/full42.png | Bin 0 -> 280 bytes themes/mac/classic/layouts/full5.png | Bin 0 -> 217 bytes themes/mac/classic/layouts/full6.png | Bin 0 -> 218 bytes themes/mac/classic/layouts/full7.png | Bin 0 -> 208 bytes themes/mac/classic/layouts/full8.png | Bin 0 -> 219 bytes themes/mac/classic/layouts/full9.png | Bin 0 -> 218 bytes themes/mac/classic/layouts/layouts.mn | 42 + themes/mac/classic/listboxBg.css | 104 +++ themes/mac/classic/listboxBg.png | Bin 0 -> 217 bytes themes/mac/classic/listboxBgActive.png | Bin 0 -> 213 bytes themes/mac/classic/mainToolbar.css | 116 +++ themes/mac/classic/mainToolbar/anchor.png | Bin 0 -> 6310 bytes themes/mac/classic/mainToolbar/browser.png | Bin 0 -> 4076 bytes themes/mac/classic/mainToolbar/copy.png | Bin 0 -> 4280 bytes themes/mac/classic/mainToolbar/cut.png | Bin 0 -> 6389 bytes themes/mac/classic/mainToolbar/find.png | Bin 0 -> 6694 bytes themes/mac/classic/mainToolbar/form.png | Bin 0 -> 1801 bytes themes/mac/classic/mainToolbar/hline.png | Bin 0 -> 3179 bytes themes/mac/classic/mainToolbar/image.png | Bin 0 -> 6688 bytes themes/mac/classic/mainToolbar/link.png | Bin 0 -> 4812 bytes themes/mac/classic/mainToolbar/logo-hover.png | Bin 0 -> 2421 bytes themes/mac/classic/mainToolbar/logo.png | Bin 0 -> 2421 bytes themes/mac/classic/mainToolbar/new.png | Bin 0 -> 5962 bytes themes/mac/classic/mainToolbar/open.png | Bin 0 -> 6197 bytes themes/mac/classic/mainToolbar/paste.png | Bin 0 -> 4587 bytes themes/mac/classic/mainToolbar/preview.png | Bin 0 -> 6773 bytes themes/mac/classic/mainToolbar/print.png | Bin 0 -> 2459 bytes themes/mac/classic/mainToolbar/publish.png | Bin 0 -> 6856 bytes themes/mac/classic/mainToolbar/save.png | Bin 0 -> 5971 bytes themes/mac/classic/mainToolbar/small/anchor.png | Bin 0 -> 3029 bytes themes/mac/classic/mainToolbar/small/browser.png | Bin 0 -> 3085 bytes themes/mac/classic/mainToolbar/small/copy.png | Bin 0 -> 1850 bytes themes/mac/classic/mainToolbar/small/cut.png | Bin 0 -> 2737 bytes themes/mac/classic/mainToolbar/small/find.png | Bin 0 -> 2924 bytes themes/mac/classic/mainToolbar/small/form.png | Bin 0 -> 1609 bytes themes/mac/classic/mainToolbar/small/hline.png | Bin 0 -> 450 bytes themes/mac/classic/mainToolbar/small/image.png | Bin 0 -> 3063 bytes themes/mac/classic/mainToolbar/small/link.png | Bin 0 -> 2179 bytes .../mac/classic/mainToolbar/small/logo-hover.png | Bin 0 -> 1834 bytes themes/mac/classic/mainToolbar/small/logo.png | Bin 0 -> 1834 bytes themes/mac/classic/mainToolbar/small/new.png | Bin 0 -> 2504 bytes themes/mac/classic/mainToolbar/small/open.png | Bin 0 -> 2704 bytes themes/mac/classic/mainToolbar/small/paste.png | Bin 0 -> 1821 bytes themes/mac/classic/mainToolbar/small/preview.png | Bin 0 -> 3042 bytes themes/mac/classic/mainToolbar/small/print.png | Bin 0 -> 2004 bytes themes/mac/classic/mainToolbar/small/publish.png | Bin 0 -> 4651 bytes themes/mac/classic/mainToolbar/small/save.png | Bin 0 -> 2523 bytes themes/mac/classic/mainToolbar/small/spell.png | Bin 0 -> 3237 bytes themes/mac/classic/mainToolbar/small/stop.png | Bin 0 -> 4336 bytes themes/mac/classic/mainToolbar/small/table.png | Bin 0 -> 2069 bytes themes/mac/classic/mainToolbar/spell.png | Bin 0 -> 4616 bytes themes/mac/classic/mainToolbar/stop.png | Bin 0 -> 6402 bytes themes/mac/classic/mainToolbar/table.png | Bin 0 -> 4616 bytes themes/mac/classic/minus-disabled.png | Bin 0 -> 210 bytes themes/mac/classic/minus.png | Bin 0 -> 210 bytes themes/mac/classic/newPageWizard.css | 79 ++ themes/mac/classic/pageProperties.css | 36 + themes/mac/classic/plus-disabled.png | Bin 0 -> 260 bytes themes/mac/classic/plus.png | Bin 0 -> 265 bytes themes/mac/classic/refresh.png | Bin 0 -> 348 bytes themes/mac/classic/rulers.css | 43 + themes/mac/classic/sidebar.css | 79 ++ themes/mac/classic/sidebarcontent.css | 69 ++ themes/mac/classic/standaloneSidebar.css | 47 + themes/mac/classic/structurebar.css | 40 + themes/mac/classic/tab-bkgnd.png | Bin 0 -> 149 bytes themes/mac/classic/tabeditor-tabs-bkgnd.png | Bin 0 -> 155 bytes themes/mac/classic/tabeditor.css | 163 ++++ themes/mac/jar.mn | 129 +++ themes/win/Makefile.in | 51 ++ themes/win/classic/backgroundImage.png | Bin 0 -> 897 bytes themes/win/classic/backgroundPosition.png | Bin 0 -> 648 bytes themes/win/classic/bluegriffon.css | 144 +++ themes/win/classic/bluegriffon.ico | Bin 0 -> 4286 bytes themes/win/classic/bluegriffonDialogs.css | 4 + themes/win/classic/colourPicker.css | 65 ++ themes/win/classic/config-disabled.png | Bin 0 -> 527 bytes themes/win/classic/config.png | Bin 0 -> 554 bytes themes/win/classic/cssToggler.css | 52 ++ themes/win/classic/ecolorpicker.css | 99 ++ themes/win/classic/formatToolbar.css | 224 +++++ themes/win/classic/formatToolbar/Thumbs.db | Bin 0 -> 14848 bytes .../formatToolbar/align-center-disabled.png | Bin 0 -> 192 bytes themes/win/classic/formatToolbar/align-center.png | Bin 0 -> 189 bytes .../formatToolbar/align-justify-disabled.png | Bin 0 -> 160 bytes themes/win/classic/formatToolbar/align-justify.png | Bin 0 -> 158 bytes .../classic/formatToolbar/align-left-disabled.png | Bin 0 -> 183 bytes themes/win/classic/formatToolbar/align-left.png | Bin 0 -> 182 bytes .../classic/formatToolbar/align-right-disabled.png | Bin 0 -> 183 bytes themes/win/classic/formatToolbar/align-right.png | Bin 0 -> 182 bytes themes/win/classic/formatToolbar/bold-disabled.png | Bin 0 -> 319 bytes themes/win/classic/formatToolbar/bold.png | Bin 0 -> 319 bytes themes/win/classic/formatToolbar/code-disabled.png | Bin 0 -> 277 bytes themes/win/classic/formatToolbar/code.png | Bin 0 -> 311 bytes themes/win/classic/formatToolbar/dd-disabled.gif | Bin 0 -> 860 bytes themes/win/classic/formatToolbar/dd-disabled.png | Bin 0 -> 204 bytes themes/win/classic/formatToolbar/dd.gif | Bin 0 -> 860 bytes themes/win/classic/formatToolbar/dd.png | Bin 0 -> 191 bytes themes/win/classic/formatToolbar/dt-disabled.gif | Bin 0 -> 858 bytes themes/win/classic/formatToolbar/dt-disabled.png | Bin 0 -> 203 bytes themes/win/classic/formatToolbar/dt.gif | Bin 0 -> 858 bytes themes/win/classic/formatToolbar/dt.png | Bin 0 -> 190 bytes themes/win/classic/formatToolbar/em-disabled.png | Bin 0 -> 250 bytes themes/win/classic/formatToolbar/em.png | Bin 0 -> 244 bytes .../win/classic/formatToolbar/indent-disabled.png | Bin 0 -> 245 bytes themes/win/classic/formatToolbar/indent.png | Bin 0 -> 282 bytes .../win/classic/formatToolbar/italic-disabled.png | Bin 0 -> 216 bytes themes/win/classic/formatToolbar/italic.png | Bin 0 -> 204 bytes themes/win/classic/formatToolbar/ol-disabled.png | Bin 0 -> 270 bytes themes/win/classic/formatToolbar/ol.png | Bin 0 -> 243 bytes .../win/classic/formatToolbar/outdent-disabled.png | Bin 0 -> 257 bytes themes/win/classic/formatToolbar/outdent.png | Bin 0 -> 301 bytes .../win/classic/formatToolbar/strong-disabled.png | Bin 0 -> 314 bytes themes/win/classic/formatToolbar/strong.png | Bin 0 -> 288 bytes themes/win/classic/formatToolbar/ul-disabled.png | Bin 0 -> 216 bytes themes/win/classic/formatToolbar/ul.png | Bin 0 -> 218 bytes .../classic/formatToolbar/underline-disabled.png | Bin 0 -> 280 bytes themes/win/classic/formatToolbar/underline.png | Bin 0 -> 264 bytes themes/win/classic/icons/Thumbs.db | Bin 0 -> 28672 bytes themes/win/classic/icons/bold-disabled.png | Bin 0 -> 320 bytes themes/win/classic/icons/bold-hover.png | Bin 0 -> 344 bytes themes/win/classic/icons/bold.png | Bin 0 -> 311 bytes themes/win/classic/icons/btn3.png | Bin 0 -> 2793 bytes themes/win/classic/icons/close-button.png | Bin 0 -> 1522 bytes themes/win/classic/icons/filePicking-hover.png | Bin 0 -> 702 bytes themes/win/classic/icons/filePicking.png | Bin 0 -> 1141 bytes themes/win/classic/icons/information-disabled.png | Bin 0 -> 220 bytes themes/win/classic/icons/information-hover.png | Bin 0 -> 274 bytes themes/win/classic/icons/information.png | Bin 0 -> 268 bytes themes/win/classic/icons/loading.gif | Bin 0 -> 288 bytes themes/win/classic/icons/modified.gif | Bin 0 -> 837 bytes themes/win/classic/icons/new.png | Bin 0 -> 5962 bytes themes/win/classic/icons/newstop.png | Bin 0 -> 192 bytes themes/win/classic/icons/open.png | Bin 0 -> 6197 bytes themes/win/classic/icons/stop.png | Bin 0 -> 6402 bytes themes/win/classic/icons/twistyClosed.png | Bin 0 -> 334 bytes themes/win/classic/icons/twistyOpen.png | Bin 0 -> 309 bytes themes/win/classic/insertTable.css | 35 + themes/win/classic/languages.css | 3 + themes/win/classic/layouts/full1.png | Bin 0 -> 217 bytes themes/win/classic/layouts/full10.png | Bin 0 -> 219 bytes themes/win/classic/layouts/full11.png | Bin 0 -> 220 bytes themes/win/classic/layouts/full12.png | Bin 0 -> 218 bytes themes/win/classic/layouts/full13.png | Bin 0 -> 218 bytes themes/win/classic/layouts/full14.png | Bin 0 -> 218 bytes themes/win/classic/layouts/full15.png | Bin 0 -> 219 bytes themes/win/classic/layouts/full16.png | Bin 0 -> 221 bytes themes/win/classic/layouts/full17.png | Bin 0 -> 223 bytes themes/win/classic/layouts/full18.png | Bin 0 -> 221 bytes themes/win/classic/layouts/full19.png | Bin 0 -> 219 bytes themes/win/classic/layouts/full2.png | Bin 0 -> 217 bytes themes/win/classic/layouts/full20.png | Bin 0 -> 223 bytes themes/win/classic/layouts/full21.png | Bin 0 -> 217 bytes themes/win/classic/layouts/full22.png | Bin 0 -> 286 bytes themes/win/classic/layouts/full23.png | Bin 0 -> 286 bytes themes/win/classic/layouts/full24.png | Bin 0 -> 287 bytes themes/win/classic/layouts/full25.png | Bin 0 -> 283 bytes themes/win/classic/layouts/full26.png | Bin 0 -> 283 bytes themes/win/classic/layouts/full27.png | Bin 0 -> 287 bytes themes/win/classic/layouts/full28.png | Bin 0 -> 280 bytes themes/win/classic/layouts/full29.png | Bin 0 -> 284 bytes themes/win/classic/layouts/full3.png | Bin 0 -> 217 bytes themes/win/classic/layouts/full30.png | Bin 0 -> 283 bytes themes/win/classic/layouts/full31.png | Bin 0 -> 283 bytes themes/win/classic/layouts/full32.png | Bin 0 -> 283 bytes themes/win/classic/layouts/full33.png | Bin 0 -> 282 bytes themes/win/classic/layouts/full34.png | Bin 0 -> 283 bytes themes/win/classic/layouts/full35.png | Bin 0 -> 275 bytes themes/win/classic/layouts/full36.png | Bin 0 -> 286 bytes themes/win/classic/layouts/full37.png | Bin 0 -> 284 bytes themes/win/classic/layouts/full38.png | Bin 0 -> 286 bytes themes/win/classic/layouts/full39.png | Bin 0 -> 286 bytes themes/win/classic/layouts/full4.png | Bin 0 -> 217 bytes themes/win/classic/layouts/full40.png | Bin 0 -> 286 bytes themes/win/classic/layouts/full41.png | Bin 0 -> 286 bytes themes/win/classic/layouts/full42.png | Bin 0 -> 280 bytes themes/win/classic/layouts/full5.png | Bin 0 -> 217 bytes themes/win/classic/layouts/full6.png | Bin 0 -> 218 bytes themes/win/classic/layouts/full7.png | Bin 0 -> 208 bytes themes/win/classic/layouts/full8.png | Bin 0 -> 219 bytes themes/win/classic/layouts/full9.png | Bin 0 -> 218 bytes themes/win/classic/layouts/layouts.mn | 42 + themes/win/classic/listboxBg.css | 97 ++ themes/win/classic/listboxBg.png | Bin 0 -> 217 bytes themes/win/classic/listboxBgActive.png | Bin 0 -> 213 bytes themes/win/classic/mainToolbar.css | 116 +++ themes/win/classic/mainToolbar/anchor.png | Bin 0 -> 6310 bytes themes/win/classic/mainToolbar/browser.png | Bin 0 -> 4076 bytes themes/win/classic/mainToolbar/copy.png | Bin 0 -> 4280 bytes themes/win/classic/mainToolbar/cut.png | Bin 0 -> 6389 bytes themes/win/classic/mainToolbar/find.png | Bin 0 -> 6694 bytes themes/win/classic/mainToolbar/form.png | Bin 0 -> 1801 bytes themes/win/classic/mainToolbar/hline.png | Bin 0 -> 3179 bytes themes/win/classic/mainToolbar/image.png | Bin 0 -> 6688 bytes themes/win/classic/mainToolbar/link.png | Bin 0 -> 4812 bytes themes/win/classic/mainToolbar/logo-hover.png | Bin 0 -> 2421 bytes themes/win/classic/mainToolbar/logo.png | Bin 0 -> 2421 bytes themes/win/classic/mainToolbar/new.png | Bin 0 -> 5962 bytes themes/win/classic/mainToolbar/open.png | Bin 0 -> 6197 bytes themes/win/classic/mainToolbar/paste.png | Bin 0 -> 4587 bytes themes/win/classic/mainToolbar/preview.png | Bin 0 -> 6773 bytes themes/win/classic/mainToolbar/print.png | Bin 0 -> 2459 bytes themes/win/classic/mainToolbar/publish.png | Bin 0 -> 6856 bytes themes/win/classic/mainToolbar/save.png | Bin 0 -> 5971 bytes themes/win/classic/mainToolbar/small/anchor.png | Bin 0 -> 3029 bytes themes/win/classic/mainToolbar/small/browser.png | Bin 0 -> 3085 bytes themes/win/classic/mainToolbar/small/copy.png | Bin 0 -> 1850 bytes themes/win/classic/mainToolbar/small/cut.png | Bin 0 -> 2737 bytes themes/win/classic/mainToolbar/small/find.png | Bin 0 -> 2924 bytes themes/win/classic/mainToolbar/small/form.png | Bin 0 -> 1609 bytes themes/win/classic/mainToolbar/small/hline.png | Bin 0 -> 450 bytes themes/win/classic/mainToolbar/small/image.png | Bin 0 -> 3063 bytes themes/win/classic/mainToolbar/small/link.png | Bin 0 -> 2179 bytes .../win/classic/mainToolbar/small/logo-hover.png | Bin 0 -> 1834 bytes themes/win/classic/mainToolbar/small/logo.png | Bin 0 -> 1834 bytes themes/win/classic/mainToolbar/small/new.png | Bin 0 -> 2504 bytes themes/win/classic/mainToolbar/small/open.png | Bin 0 -> 2704 bytes themes/win/classic/mainToolbar/small/paste.png | Bin 0 -> 1821 bytes themes/win/classic/mainToolbar/small/preview.png | Bin 0 -> 3042 bytes themes/win/classic/mainToolbar/small/print.png | Bin 0 -> 2004 bytes themes/win/classic/mainToolbar/small/publish.png | Bin 0 -> 4651 bytes themes/win/classic/mainToolbar/small/save.png | Bin 0 -> 2523 bytes themes/win/classic/mainToolbar/small/spell.png | Bin 0 -> 3237 bytes themes/win/classic/mainToolbar/small/stop.png | Bin 0 -> 4336 bytes themes/win/classic/mainToolbar/small/table.png | Bin 0 -> 2069 bytes themes/win/classic/mainToolbar/spell.png | Bin 0 -> 4616 bytes themes/win/classic/mainToolbar/stop.png | Bin 0 -> 6402 bytes themes/win/classic/mainToolbar/table.png | Bin 0 -> 4616 bytes themes/win/classic/minus-disabled.png | Bin 0 -> 210 bytes themes/win/classic/minus.png | Bin 0 -> 210 bytes themes/win/classic/newPageWizard.css | 79 ++ themes/win/classic/pageProperties.css | 36 + themes/win/classic/plus-disabled.png | Bin 0 -> 260 bytes themes/win/classic/plus.png | Bin 0 -> 265 bytes themes/win/classic/rulers.css | 43 + themes/win/classic/sidebar.css | 79 ++ themes/win/classic/sidebarcontent.css | 69 ++ themes/win/classic/standaloneSidebar.css | 47 + themes/win/classic/structurebar.css | 40 + themes/win/classic/tab-active-bkgnd.png | Bin 0 -> 188 bytes themes/win/classic/tab-bkgnd.png | Bin 0 -> 189 bytes themes/win/classic/tab-hover-bkgnd.png | Bin 0 -> 892 bytes themes/win/classic/tabeditor-tabs-bkgnd.png | Bin 0 -> 176 bytes themes/win/classic/tabeditor.css | 125 +++ themes/win/classic/tabstrip-bottom.png | Bin 0 -> 126 bytes themes/win/jar.mn | 132 +++ 564 files changed, 30085 insertions(+) create mode 100644 Makefile.in create mode 100644 app/Makefile.in create mode 100644 app/application.ini create mode 100644 app/bluegriffon.exe.manifest create mode 100644 app/bluegriffon.ico create mode 100644 app/default16.png create mode 100644 app/icons/bluegriffon.ico create mode 100644 app/icons/bluegriffon.png create mode 100644 app/icons/bluegriffon128.png create mode 100644 app/icons/bluegriffon16.png create mode 100644 app/icons/bluegriffon16.xpm create mode 100644 app/icons/bluegriffon32.png create mode 100644 app/icons/bluegriffon48.png create mode 100644 app/icons/bluegriffon50.png create mode 100644 app/icons/bluegriffon50.xpm create mode 100644 app/icons/default16.png create mode 100644 app/icons/default50.png create mode 100644 app/macbuild/Contents/Info.plist.in create mode 100644 app/macbuild/Contents/Resources/English.lproj/InfoPlist.strings.in create mode 100755 app/macbuild/Contents/Resources/bluegriffon.icns create mode 100644 app/mozilla.in create mode 100644 app/nsEditorApp.cpp create mode 100644 app/profile/bluegriffon-prefs.js create mode 100644 app/splash.rc create mode 100644 base/Makefile.in create mode 100644 base/content/bluegriffon/DI.png create mode 100644 base/content/bluegriffon/EditorContent.css create mode 100644 base/content/bluegriffon/EditorOverride.css create mode 100644 base/content/bluegriffon/Thumbs.db create mode 100644 base/content/bluegriffon/about-logo.png create mode 100644 base/content/bluegriffon/aboutDialog.css create mode 100644 base/content/bluegriffon/bindings/cssToggler.xml create mode 100644 base/content/bluegriffon/bindings/ecolorpicker.xml create mode 100644 base/content/bluegriffon/bindings/filepickerbutton.css create mode 100644 base/content/bluegriffon/bindings/filepickerbutton.xml create mode 100644 base/content/bluegriffon/bindings/multistate.css create mode 100644 base/content/bluegriffon/bindings/multistate.xml create mode 100644 base/content/bluegriffon/bindings/rulers.xml create mode 100644 base/content/bluegriffon/bindings/sidebar.css create mode 100644 base/content/bluegriffon/bindings/sidebar.xml create mode 100644 base/content/bluegriffon/bindings/structurebar.css create mode 100644 base/content/bluegriffon/bindings/structurebar.xml create mode 100644 base/content/bluegriffon/bindings/tabeditor.xml create mode 100644 base/content/bluegriffon/blanks/strict.html create mode 100644 base/content/bluegriffon/blanks/strict.xhtml create mode 100644 base/content/bluegriffon/blanks/transitional.html create mode 100644 base/content/bluegriffon/blanks/transitional.xhtml create mode 100644 base/content/bluegriffon/brightness.png create mode 100644 base/content/bluegriffon/colourPickerArrow.gif create mode 100644 base/content/bluegriffon/colourPickerCrosshair.gif create mode 100644 base/content/bluegriffon/credits.xhtml create mode 100644 base/content/bluegriffon/dialogs/insertTable.js create mode 100644 base/content/bluegriffon/dialogs/insertTable.xul create mode 100644 base/content/bluegriffon/dialogs/languages.js create mode 100644 base/content/bluegriffon/dialogs/languages.xul create mode 100644 base/content/bluegriffon/dialogs/markupCleaner.js create mode 100644 base/content/bluegriffon/dialogs/markupCleaner.xul create mode 100644 base/content/bluegriffon/dialogs/newPageWizard.js create mode 100644 base/content/bluegriffon/dialogs/newPageWizard.xul create mode 100644 base/content/bluegriffon/dialogs/openLocation.js create mode 100644 base/content/bluegriffon/dialogs/openLocation.xul create mode 100644 base/content/bluegriffon/dialogs/pageProperties.js create mode 100644 base/content/bluegriffon/dialogs/pageProperties.xul create mode 100644 base/content/bluegriffon/dialogs/standaloneSidebar.js create mode 100644 base/content/bluegriffon/dialogs/standaloneSidebar.xul create mode 100644 base/content/bluegriffon/hsPanel.png create mode 100644 base/content/bluegriffon/js/aboutDialog.js create mode 100644 base/content/bluegriffon/js/activeSourceView.js create mode 100644 base/content/bluegriffon/js/bluegriffon.js create mode 100644 base/content/bluegriffon/js/col.js create mode 100644 base/content/bluegriffon/js/colourPicker.js create mode 100644 base/content/bluegriffon/js/colourPickerHelper.js create mode 100644 base/content/bluegriffon/js/commands.js create mode 100644 base/content/bluegriffon/js/customize.js create mode 100644 base/content/bluegriffon/js/customizeToolbarSheet.js create mode 100644 base/content/bluegriffon/js/dummyCommands.inc create mode 100644 base/content/bluegriffon/js/fileCommands.inc create mode 100644 base/content/bluegriffon/js/formatCommands.inc create mode 100644 base/content/bluegriffon/js/insertionCommands.inc create mode 100644 base/content/bluegriffon/js/languages.js create mode 100644 base/content/bluegriffon/js/markupCleaner.js create mode 100644 base/content/bluegriffon/js/navigationCommands.inc create mode 100644 base/content/bluegriffon/js/observers.inc create mode 100644 base/content/bluegriffon/js/propertiesDeck.js create mode 100644 base/content/bluegriffon/js/recentPages.js create mode 100644 base/content/bluegriffon/js/shutdown.inc create mode 100644 base/content/bluegriffon/js/startup.inc create mode 100644 base/content/bluegriffon/js/toolbars.js create mode 100644 base/content/bluegriffon/js/viewCommands.inc create mode 100644 base/content/bluegriffon/js/zoomManager.js create mode 100644 base/content/bluegriffon/sourceViewTemplate.html create mode 100644 base/content/bluegriffon/utils/colors.js create mode 100644 base/content/bluegriffon/utils/css.js create mode 100644 base/content/bluegriffon/utils/dgid.js create mode 100644 base/content/bluegriffon/utils/editorUtils.js create mode 100644 base/content/bluegriffon/utils/fileUtils.js create mode 100644 base/content/bluegriffon/utils/global.js create mode 100644 base/content/bluegriffon/utils/l10n.js create mode 100644 base/content/bluegriffon/utils/login.js create mode 100644 base/content/bluegriffon/utils/notifiers.js create mode 100644 base/content/bluegriffon/utils/prompter.js create mode 100644 base/content/bluegriffon/utils/urls.js create mode 100644 base/content/bluegriffon/xul/aboutDialog.xul create mode 100644 base/content/bluegriffon/xul/bluegriffon.xul create mode 100644 base/content/bluegriffon/xul/colourPicker.xul create mode 100644 base/content/bluegriffon/xul/customizeToolbarSheet.xul create mode 100644 base/content/bluegriffon/xul/formatbarpalette.inc create mode 100644 base/content/bluegriffon/xul/maintoolbarpalette.inc create mode 100644 base/content/bluegriffon/xul/menubar.inc create mode 100644 base/content/bluegriffon/xul/overlays.inc create mode 100644 base/content/bluegriffon/xul/propertiesDeck.xul create mode 100644 base/content/bluegriffon/xul/scripts.inc create mode 100644 base/content/bluegriffon/xul/sets.inc create mode 100644 base/jar.mn create mode 100644 base/locale/en-US/bluegriffon/aboutDialog.dtd create mode 100644 base/locale/en-US/bluegriffon/bluegriffon.dtd create mode 100644 base/locale/en-US/bluegriffon/bluegriffon.properties create mode 100644 base/locale/en-US/bluegriffon/colourPicker.dtd create mode 100644 base/locale/en-US/bluegriffon/credits.dtd create mode 100644 base/locale/en-US/bluegriffon/cssToggler.dtd create mode 100644 base/locale/en-US/bluegriffon/filePicking.dtd create mode 100644 base/locale/en-US/bluegriffon/filepickerbutton.dtd create mode 100644 base/locale/en-US/bluegriffon/insertTable.dtd create mode 100644 base/locale/en-US/bluegriffon/language.properties create mode 100644 base/locale/en-US/bluegriffon/languages.dtd create mode 100644 base/locale/en-US/bluegriffon/markupCleaner.dtd create mode 100644 base/locale/en-US/bluegriffon/masterPasswordQuery.properties create mode 100644 base/locale/en-US/bluegriffon/newPageWizard.dtd create mode 100644 base/locale/en-US/bluegriffon/newPageWizard.properties create mode 100644 base/locale/en-US/bluegriffon/openLocation.dtd create mode 100644 base/locale/en-US/bluegriffon/openLocation.properties create mode 100644 base/locale/en-US/bluegriffon/pageProperties.dtd create mode 100644 base/locale/en-US/bluegriffon/pagePropertiesPreview.html create mode 100644 base/locale/en-US/bluegriffon/propertiesDeck.dtd create mode 100644 base/locale/en-US/bluegriffon/sidebar.dtd create mode 100644 base/locale/en-US/bluegriffon/standaloneSidebar.dtd create mode 100644 base/locale/en-US/bluegriffon/structurebar.dtd create mode 100644 base/locale/en-US/bluegriffon/tabeditor.dtd create mode 100644 base/locale/en-US/bluegriffon/tabeditor.properties create mode 100644 base/locale/en-US/branding/brand.dtd create mode 100644 base/locale/en-US/branding/brand.properties create mode 100644 build.mk create mode 100644 config/mozconfig.linux create mode 100644 config/mozconfig.macosx create mode 100644 config/mozconfig.win create mode 100644 config/netwerkProtocolFtp.patch create mode 100644 config/version.txt create mode 100644 confvars.sh create mode 100644 doc/BUILD.txt create mode 100644 doc/bg.png create mode 100644 doc/colorPicker.html create mode 100644 doc/colorPicker.png create mode 100644 doc/doc.css create mode 100644 doc/index.html create mode 100644 doc/notifiers.html create mode 100644 doc/sidebarcontent.html create mode 100644 extensions/Makefile.in create mode 100644 extensions/diavolo/Makefile.in create mode 100644 extensions/diavolo/content/EditorOverride.css create mode 100644 extensions/diavolo/content/codecompletion.js create mode 100644 extensions/diavolo/content/completionPopup.xml create mode 100644 extensions/diavolo/content/css.css create mode 100644 extensions/diavolo/content/css.xml create mode 100644 extensions/diavolo/content/cssCompletion.xml create mode 100644 extensions/diavolo/content/editor.js create mode 100644 extensions/diavolo/content/grammar.js create mode 100644 extensions/diavolo/content/highlighter.js create mode 100644 extensions/diavolo/content/linenumbering.css create mode 100644 extensions/diavolo/content/linenumbering.xml create mode 100644 extensions/diavolo/content/selector.js create mode 100644 extensions/diavolo/content/sourceeditor.xml create mode 100644 extensions/diavolo/content/tokeniser.js create mode 100644 extensions/diavolo/jar.mn create mode 100644 extensions/jQuery/MIT-LICENSE.txt create mode 100644 extensions/jQuery/Makefile.in create mode 100644 extensions/jQuery/content/jquery.min.js create mode 100644 extensions/jQuery/install.rdf create mode 100644 extensions/jQuery/jar.mn create mode 100644 installer/Makefile.in create mode 100644 makefiles.sh create mode 100644 modules/Makefile.in create mode 100644 modules/colourPickerHelper.jsm create mode 100644 readme.html create mode 100644 sidebars/Makefile.in create mode 100644 sidebars/projectManager/Makefile.in create mode 100644 sidebars/projectManager/content/bluegriffonOverlay.js create mode 100644 sidebars/projectManager/content/bluegriffonOverlay.xul create mode 100644 sidebars/projectManager/content/ftpDirParser.js create mode 100644 sidebars/projectManager/content/ftpProgressListener.js create mode 100755 sidebars/projectManager/content/localDirParser.js create mode 100644 sidebars/projectManager/content/projectManager.js create mode 100644 sidebars/projectManager/content/projectManager.xul create mode 100644 sidebars/projectManager/content/projectProperties.js create mode 100644 sidebars/projectManager/content/projectProperties.xul create mode 100755 sidebars/projectManager/content/url-loader.js create mode 100644 sidebars/projectManager/jar.mn create mode 100644 sidebars/projectManager/locale/en-US/bluegriffonOverlay.dtd create mode 100644 sidebars/projectManager/locale/en-US/projectManager.dtd create mode 100644 sidebars/projectManager/locale/en-US/projectManager.properties create mode 100644 sidebars/projectManager/locale/en-US/projectProperties.dtd create mode 100644 sidebars/projectManager/skin/config-disabled.png create mode 100644 sidebars/projectManager/skin/config.png create mode 100644 sidebars/projectManager/skin/minus-disabled.png create mode 100644 sidebars/projectManager/skin/minus.png create mode 100644 sidebars/projectManager/skin/plus.png create mode 100644 sidebars/projectManager/skin/projectManager.css create mode 100644 sidebars/projectManager/skin/projectProperties.css create mode 100644 src/Makefile.in create mode 100644 src/diIAttrChangedTxn.idl create mode 100644 src/diIAttrNameChangedTxn.idl create mode 100644 src/diITextNodeChangedTxn.idl create mode 100644 themes/Makefile.in create mode 100644 themes/mac/Makefile.in create mode 100755 themes/mac/classic/backgroundImage.png create mode 100755 themes/mac/classic/backgroundPosition.png create mode 100644 themes/mac/classic/bluegriffon.css create mode 100644 themes/mac/classic/bluegriffon.ico create mode 100644 themes/mac/classic/bluegriffonDialogs.css create mode 100644 themes/mac/classic/colourPicker.css create mode 100644 themes/mac/classic/config-disabled.png create mode 100644 themes/mac/classic/config.png create mode 100644 themes/mac/classic/cssToggler.css create mode 100644 themes/mac/classic/ecolorpicker.css create mode 100644 themes/mac/classic/formatToolbar.css create mode 100644 themes/mac/classic/formatToolbar/Thumbs.db create mode 100644 themes/mac/classic/formatToolbar/align-center-disabled.png create mode 100644 themes/mac/classic/formatToolbar/align-center.png create mode 100644 themes/mac/classic/formatToolbar/align-justify-disabled.png create mode 100644 themes/mac/classic/formatToolbar/align-justify.png create mode 100644 themes/mac/classic/formatToolbar/align-left-disabled.png create mode 100644 themes/mac/classic/formatToolbar/align-left.png create mode 100644 themes/mac/classic/formatToolbar/align-right-disabled.png create mode 100644 themes/mac/classic/formatToolbar/align-right.png create mode 100644 themes/mac/classic/formatToolbar/bold-disabled.png create mode 100644 themes/mac/classic/formatToolbar/bold.png create mode 100644 themes/mac/classic/formatToolbar/code-disabled.png create mode 100644 themes/mac/classic/formatToolbar/code.png create mode 100644 themes/mac/classic/formatToolbar/dd-disabled.gif create mode 100644 themes/mac/classic/formatToolbar/dd-disabled.png create mode 100644 themes/mac/classic/formatToolbar/dd.gif create mode 100644 themes/mac/classic/formatToolbar/dd.png create mode 100644 themes/mac/classic/formatToolbar/dt-disabled.gif create mode 100644 themes/mac/classic/formatToolbar/dt-disabled.png create mode 100644 themes/mac/classic/formatToolbar/dt.gif create mode 100644 themes/mac/classic/formatToolbar/dt.png create mode 100644 themes/mac/classic/formatToolbar/em-disabled.png create mode 100644 themes/mac/classic/formatToolbar/em.png create mode 100644 themes/mac/classic/formatToolbar/indent-disabled.png create mode 100644 themes/mac/classic/formatToolbar/indent.png create mode 100644 themes/mac/classic/formatToolbar/italic-disabled.png create mode 100644 themes/mac/classic/formatToolbar/italic.png create mode 100644 themes/mac/classic/formatToolbar/ol-disabled.png create mode 100644 themes/mac/classic/formatToolbar/ol.png create mode 100644 themes/mac/classic/formatToolbar/outdent-disabled.png create mode 100644 themes/mac/classic/formatToolbar/outdent.png create mode 100644 themes/mac/classic/formatToolbar/strong-disabled.png create mode 100644 themes/mac/classic/formatToolbar/strong.png create mode 100644 themes/mac/classic/formatToolbar/ul-disabled.png create mode 100644 themes/mac/classic/formatToolbar/ul.png create mode 100644 themes/mac/classic/formatToolbar/underline-disabled.png create mode 100644 themes/mac/classic/formatToolbar/underline.png create mode 100644 themes/mac/classic/icons/Thumbs.db create mode 100644 themes/mac/classic/icons/bold-disabled.png create mode 100644 themes/mac/classic/icons/bold-hover.png create mode 100644 themes/mac/classic/icons/bold.png create mode 100644 themes/mac/classic/icons/btn3.png create mode 100644 themes/mac/classic/icons/close-button.png create mode 100644 themes/mac/classic/icons/filePicking-hover.png create mode 100644 themes/mac/classic/icons/filePicking.png create mode 100644 themes/mac/classic/icons/information-disabled.png create mode 100644 themes/mac/classic/icons/information-hover.png create mode 100644 themes/mac/classic/icons/information.png create mode 100644 themes/mac/classic/icons/loading.gif create mode 100644 themes/mac/classic/icons/modified.gif create mode 100644 themes/mac/classic/icons/new.png create mode 100644 themes/mac/classic/icons/newstop.png create mode 100644 themes/mac/classic/icons/open.png create mode 100644 themes/mac/classic/icons/stop.png create mode 100644 themes/mac/classic/icons/twistyClosed.png create mode 100644 themes/mac/classic/icons/twistyOpen.png create mode 100644 themes/mac/classic/insertTable.css create mode 100644 themes/mac/classic/languages.css create mode 100755 themes/mac/classic/layouts/full1.png create mode 100755 themes/mac/classic/layouts/full10.png create mode 100755 themes/mac/classic/layouts/full11.png create mode 100755 themes/mac/classic/layouts/full12.png create mode 100755 themes/mac/classic/layouts/full13.png create mode 100755 themes/mac/classic/layouts/full14.png create mode 100755 themes/mac/classic/layouts/full15.png create mode 100755 themes/mac/classic/layouts/full16.png create mode 100755 themes/mac/classic/layouts/full17.png create mode 100755 themes/mac/classic/layouts/full18.png create mode 100755 themes/mac/classic/layouts/full19.png create mode 100755 themes/mac/classic/layouts/full2.png create mode 100755 themes/mac/classic/layouts/full20.png create mode 100755 themes/mac/classic/layouts/full21.png create mode 100644 themes/mac/classic/layouts/full22.png create mode 100644 themes/mac/classic/layouts/full23.png create mode 100644 themes/mac/classic/layouts/full24.png create mode 100644 themes/mac/classic/layouts/full25.png create mode 100644 themes/mac/classic/layouts/full26.png create mode 100644 themes/mac/classic/layouts/full27.png create mode 100644 themes/mac/classic/layouts/full28.png create mode 100644 themes/mac/classic/layouts/full29.png create mode 100755 themes/mac/classic/layouts/full3.png create mode 100644 themes/mac/classic/layouts/full30.png create mode 100644 themes/mac/classic/layouts/full31.png create mode 100644 themes/mac/classic/layouts/full32.png create mode 100644 themes/mac/classic/layouts/full33.png create mode 100644 themes/mac/classic/layouts/full34.png create mode 100644 themes/mac/classic/layouts/full35.png create mode 100644 themes/mac/classic/layouts/full36.png create mode 100644 themes/mac/classic/layouts/full37.png create mode 100644 themes/mac/classic/layouts/full38.png create mode 100644 themes/mac/classic/layouts/full39.png create mode 100755 themes/mac/classic/layouts/full4.png create mode 100644 themes/mac/classic/layouts/full40.png create mode 100644 themes/mac/classic/layouts/full41.png create mode 100644 themes/mac/classic/layouts/full42.png create mode 100755 themes/mac/classic/layouts/full5.png create mode 100755 themes/mac/classic/layouts/full6.png create mode 100755 themes/mac/classic/layouts/full7.png create mode 100755 themes/mac/classic/layouts/full8.png create mode 100755 themes/mac/classic/layouts/full9.png create mode 100644 themes/mac/classic/layouts/layouts.mn create mode 100644 themes/mac/classic/listboxBg.css create mode 100644 themes/mac/classic/listboxBg.png create mode 100644 themes/mac/classic/listboxBgActive.png create mode 100644 themes/mac/classic/mainToolbar.css create mode 100644 themes/mac/classic/mainToolbar/anchor.png create mode 100644 themes/mac/classic/mainToolbar/browser.png create mode 100644 themes/mac/classic/mainToolbar/copy.png create mode 100644 themes/mac/classic/mainToolbar/cut.png create mode 100644 themes/mac/classic/mainToolbar/find.png create mode 100644 themes/mac/classic/mainToolbar/form.png create mode 100644 themes/mac/classic/mainToolbar/hline.png create mode 100644 themes/mac/classic/mainToolbar/image.png create mode 100644 themes/mac/classic/mainToolbar/link.png create mode 100644 themes/mac/classic/mainToolbar/logo-hover.png create mode 100644 themes/mac/classic/mainToolbar/logo.png create mode 100644 themes/mac/classic/mainToolbar/new.png create mode 100644 themes/mac/classic/mainToolbar/open.png create mode 100644 themes/mac/classic/mainToolbar/paste.png create mode 100644 themes/mac/classic/mainToolbar/preview.png create mode 100644 themes/mac/classic/mainToolbar/print.png create mode 100644 themes/mac/classic/mainToolbar/publish.png create mode 100644 themes/mac/classic/mainToolbar/save.png create mode 100644 themes/mac/classic/mainToolbar/small/anchor.png create mode 100644 themes/mac/classic/mainToolbar/small/browser.png create mode 100644 themes/mac/classic/mainToolbar/small/copy.png create mode 100644 themes/mac/classic/mainToolbar/small/cut.png create mode 100644 themes/mac/classic/mainToolbar/small/find.png create mode 100644 themes/mac/classic/mainToolbar/small/form.png create mode 100644 themes/mac/classic/mainToolbar/small/hline.png create mode 100644 themes/mac/classic/mainToolbar/small/image.png create mode 100644 themes/mac/classic/mainToolbar/small/link.png create mode 100644 themes/mac/classic/mainToolbar/small/logo-hover.png create mode 100644 themes/mac/classic/mainToolbar/small/logo.png create mode 100644 themes/mac/classic/mainToolbar/small/new.png create mode 100644 themes/mac/classic/mainToolbar/small/open.png create mode 100644 themes/mac/classic/mainToolbar/small/paste.png create mode 100644 themes/mac/classic/mainToolbar/small/preview.png create mode 100644 themes/mac/classic/mainToolbar/small/print.png create mode 100644 themes/mac/classic/mainToolbar/small/publish.png create mode 100644 themes/mac/classic/mainToolbar/small/save.png create mode 100644 themes/mac/classic/mainToolbar/small/spell.png create mode 100644 themes/mac/classic/mainToolbar/small/stop.png create mode 100644 themes/mac/classic/mainToolbar/small/table.png create mode 100644 themes/mac/classic/mainToolbar/spell.png create mode 100644 themes/mac/classic/mainToolbar/stop.png create mode 100644 themes/mac/classic/mainToolbar/table.png create mode 100644 themes/mac/classic/minus-disabled.png create mode 100644 themes/mac/classic/minus.png create mode 100644 themes/mac/classic/newPageWizard.css create mode 100644 themes/mac/classic/pageProperties.css create mode 100644 themes/mac/classic/plus-disabled.png create mode 100644 themes/mac/classic/plus.png create mode 100644 themes/mac/classic/refresh.png create mode 100644 themes/mac/classic/rulers.css create mode 100644 themes/mac/classic/sidebar.css create mode 100644 themes/mac/classic/sidebarcontent.css create mode 100644 themes/mac/classic/standaloneSidebar.css create mode 100644 themes/mac/classic/structurebar.css create mode 100644 themes/mac/classic/tab-bkgnd.png create mode 100644 themes/mac/classic/tabeditor-tabs-bkgnd.png create mode 100644 themes/mac/classic/tabeditor.css create mode 100644 themes/mac/jar.mn create mode 100644 themes/win/Makefile.in create mode 100755 themes/win/classic/backgroundImage.png create mode 100755 themes/win/classic/backgroundPosition.png create mode 100644 themes/win/classic/bluegriffon.css create mode 100644 themes/win/classic/bluegriffon.ico create mode 100644 themes/win/classic/bluegriffonDialogs.css create mode 100644 themes/win/classic/colourPicker.css create mode 100644 themes/win/classic/config-disabled.png create mode 100644 themes/win/classic/config.png create mode 100644 themes/win/classic/cssToggler.css create mode 100644 themes/win/classic/ecolorpicker.css create mode 100644 themes/win/classic/formatToolbar.css create mode 100644 themes/win/classic/formatToolbar/Thumbs.db create mode 100644 themes/win/classic/formatToolbar/align-center-disabled.png create mode 100644 themes/win/classic/formatToolbar/align-center.png create mode 100644 themes/win/classic/formatToolbar/align-justify-disabled.png create mode 100644 themes/win/classic/formatToolbar/align-justify.png create mode 100644 themes/win/classic/formatToolbar/align-left-disabled.png create mode 100644 themes/win/classic/formatToolbar/align-left.png create mode 100644 themes/win/classic/formatToolbar/align-right-disabled.png create mode 100644 themes/win/classic/formatToolbar/align-right.png create mode 100644 themes/win/classic/formatToolbar/bold-disabled.png create mode 100644 themes/win/classic/formatToolbar/bold.png create mode 100644 themes/win/classic/formatToolbar/code-disabled.png create mode 100644 themes/win/classic/formatToolbar/code.png create mode 100644 themes/win/classic/formatToolbar/dd-disabled.gif create mode 100644 themes/win/classic/formatToolbar/dd-disabled.png create mode 100644 themes/win/classic/formatToolbar/dd.gif create mode 100644 themes/win/classic/formatToolbar/dd.png create mode 100644 themes/win/classic/formatToolbar/dt-disabled.gif create mode 100644 themes/win/classic/formatToolbar/dt-disabled.png create mode 100644 themes/win/classic/formatToolbar/dt.gif create mode 100644 themes/win/classic/formatToolbar/dt.png create mode 100644 themes/win/classic/formatToolbar/em-disabled.png create mode 100644 themes/win/classic/formatToolbar/em.png create mode 100644 themes/win/classic/formatToolbar/indent-disabled.png create mode 100644 themes/win/classic/formatToolbar/indent.png create mode 100644 themes/win/classic/formatToolbar/italic-disabled.png create mode 100644 themes/win/classic/formatToolbar/italic.png create mode 100644 themes/win/classic/formatToolbar/ol-disabled.png create mode 100644 themes/win/classic/formatToolbar/ol.png create mode 100644 themes/win/classic/formatToolbar/outdent-disabled.png create mode 100644 themes/win/classic/formatToolbar/outdent.png create mode 100644 themes/win/classic/formatToolbar/strong-disabled.png create mode 100644 themes/win/classic/formatToolbar/strong.png create mode 100644 themes/win/classic/formatToolbar/ul-disabled.png create mode 100644 themes/win/classic/formatToolbar/ul.png create mode 100644 themes/win/classic/formatToolbar/underline-disabled.png create mode 100644 themes/win/classic/formatToolbar/underline.png create mode 100644 themes/win/classic/icons/Thumbs.db create mode 100644 themes/win/classic/icons/bold-disabled.png create mode 100644 themes/win/classic/icons/bold-hover.png create mode 100644 themes/win/classic/icons/bold.png create mode 100644 themes/win/classic/icons/btn3.png create mode 100644 themes/win/classic/icons/close-button.png create mode 100644 themes/win/classic/icons/filePicking-hover.png create mode 100644 themes/win/classic/icons/filePicking.png create mode 100644 themes/win/classic/icons/information-disabled.png create mode 100644 themes/win/classic/icons/information-hover.png create mode 100644 themes/win/classic/icons/information.png create mode 100644 themes/win/classic/icons/loading.gif create mode 100644 themes/win/classic/icons/modified.gif create mode 100644 themes/win/classic/icons/new.png create mode 100644 themes/win/classic/icons/newstop.png create mode 100644 themes/win/classic/icons/open.png create mode 100644 themes/win/classic/icons/stop.png create mode 100644 themes/win/classic/icons/twistyClosed.png create mode 100644 themes/win/classic/icons/twistyOpen.png create mode 100644 themes/win/classic/insertTable.css create mode 100644 themes/win/classic/languages.css create mode 100755 themes/win/classic/layouts/full1.png create mode 100755 themes/win/classic/layouts/full10.png create mode 100755 themes/win/classic/layouts/full11.png create mode 100755 themes/win/classic/layouts/full12.png create mode 100755 themes/win/classic/layouts/full13.png create mode 100755 themes/win/classic/layouts/full14.png create mode 100755 themes/win/classic/layouts/full15.png create mode 100755 themes/win/classic/layouts/full16.png create mode 100755 themes/win/classic/layouts/full17.png create mode 100755 themes/win/classic/layouts/full18.png create mode 100755 themes/win/classic/layouts/full19.png create mode 100755 themes/win/classic/layouts/full2.png create mode 100755 themes/win/classic/layouts/full20.png create mode 100755 themes/win/classic/layouts/full21.png create mode 100644 themes/win/classic/layouts/full22.png create mode 100644 themes/win/classic/layouts/full23.png create mode 100644 themes/win/classic/layouts/full24.png create mode 100644 themes/win/classic/layouts/full25.png create mode 100644 themes/win/classic/layouts/full26.png create mode 100644 themes/win/classic/layouts/full27.png create mode 100644 themes/win/classic/layouts/full28.png create mode 100644 themes/win/classic/layouts/full29.png create mode 100755 themes/win/classic/layouts/full3.png create mode 100644 themes/win/classic/layouts/full30.png create mode 100644 themes/win/classic/layouts/full31.png create mode 100644 themes/win/classic/layouts/full32.png create mode 100644 themes/win/classic/layouts/full33.png create mode 100644 themes/win/classic/layouts/full34.png create mode 100644 themes/win/classic/layouts/full35.png create mode 100644 themes/win/classic/layouts/full36.png create mode 100644 themes/win/classic/layouts/full37.png create mode 100644 themes/win/classic/layouts/full38.png create mode 100644 themes/win/classic/layouts/full39.png create mode 100755 themes/win/classic/layouts/full4.png create mode 100644 themes/win/classic/layouts/full40.png create mode 100644 themes/win/classic/layouts/full41.png create mode 100644 themes/win/classic/layouts/full42.png create mode 100755 themes/win/classic/layouts/full5.png create mode 100755 themes/win/classic/layouts/full6.png create mode 100755 themes/win/classic/layouts/full7.png create mode 100755 themes/win/classic/layouts/full8.png create mode 100755 themes/win/classic/layouts/full9.png create mode 100644 themes/win/classic/layouts/layouts.mn create mode 100644 themes/win/classic/listboxBg.css create mode 100644 themes/win/classic/listboxBg.png create mode 100644 themes/win/classic/listboxBgActive.png create mode 100644 themes/win/classic/mainToolbar.css create mode 100644 themes/win/classic/mainToolbar/anchor.png create mode 100644 themes/win/classic/mainToolbar/browser.png create mode 100644 themes/win/classic/mainToolbar/copy.png create mode 100644 themes/win/classic/mainToolbar/cut.png create mode 100644 themes/win/classic/mainToolbar/find.png create mode 100644 themes/win/classic/mainToolbar/form.png create mode 100644 themes/win/classic/mainToolbar/hline.png create mode 100644 themes/win/classic/mainToolbar/image.png create mode 100644 themes/win/classic/mainToolbar/link.png create mode 100644 themes/win/classic/mainToolbar/logo-hover.png create mode 100644 themes/win/classic/mainToolbar/logo.png create mode 100644 themes/win/classic/mainToolbar/new.png create mode 100644 themes/win/classic/mainToolbar/open.png create mode 100644 themes/win/classic/mainToolbar/paste.png create mode 100644 themes/win/classic/mainToolbar/preview.png create mode 100644 themes/win/classic/mainToolbar/print.png create mode 100644 themes/win/classic/mainToolbar/publish.png create mode 100644 themes/win/classic/mainToolbar/save.png create mode 100644 themes/win/classic/mainToolbar/small/anchor.png create mode 100644 themes/win/classic/mainToolbar/small/browser.png create mode 100644 themes/win/classic/mainToolbar/small/copy.png create mode 100644 themes/win/classic/mainToolbar/small/cut.png create mode 100644 themes/win/classic/mainToolbar/small/find.png create mode 100644 themes/win/classic/mainToolbar/small/form.png create mode 100644 themes/win/classic/mainToolbar/small/hline.png create mode 100644 themes/win/classic/mainToolbar/small/image.png create mode 100644 themes/win/classic/mainToolbar/small/link.png create mode 100644 themes/win/classic/mainToolbar/small/logo-hover.png create mode 100644 themes/win/classic/mainToolbar/small/logo.png create mode 100644 themes/win/classic/mainToolbar/small/new.png create mode 100644 themes/win/classic/mainToolbar/small/open.png create mode 100644 themes/win/classic/mainToolbar/small/paste.png create mode 100644 themes/win/classic/mainToolbar/small/preview.png create mode 100644 themes/win/classic/mainToolbar/small/print.png create mode 100644 themes/win/classic/mainToolbar/small/publish.png create mode 100644 themes/win/classic/mainToolbar/small/save.png create mode 100644 themes/win/classic/mainToolbar/small/spell.png create mode 100644 themes/win/classic/mainToolbar/small/stop.png create mode 100644 themes/win/classic/mainToolbar/small/table.png create mode 100644 themes/win/classic/mainToolbar/spell.png create mode 100644 themes/win/classic/mainToolbar/stop.png create mode 100644 themes/win/classic/mainToolbar/table.png create mode 100644 themes/win/classic/minus-disabled.png create mode 100644 themes/win/classic/minus.png create mode 100644 themes/win/classic/newPageWizard.css create mode 100644 themes/win/classic/pageProperties.css create mode 100644 themes/win/classic/plus-disabled.png create mode 100644 themes/win/classic/plus.png create mode 100644 themes/win/classic/rulers.css create mode 100644 themes/win/classic/sidebar.css create mode 100644 themes/win/classic/sidebarcontent.css create mode 100644 themes/win/classic/standaloneSidebar.css create mode 100644 themes/win/classic/structurebar.css create mode 100644 themes/win/classic/tab-active-bkgnd.png create mode 100644 themes/win/classic/tab-bkgnd.png create mode 100644 themes/win/classic/tab-hover-bkgnd.png create mode 100644 themes/win/classic/tabeditor-tabs-bkgnd.png create mode 100644 themes/win/classic/tabeditor.css create mode 100644 themes/win/classic/tabstrip-bottom.png create mode 100644 themes/win/jar.mn diff --git a/Makefile.in b/Makefile.in new file mode 100644 index 0000000..dceea6d --- /dev/null +++ b/Makefile.in @@ -0,0 +1,49 @@ +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is BlueGriffon. +# +# The Initial Developer of the Original Code is +# Disruptive Innovations SARL. +# Portions created by the Initial Developer are Copyright (C) 2006 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Daniel Glazman , Original author +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** */ + + +DEPTH = .. +topsrcdir = @top_srcdir@ +srcdir = @srcdir@ +VPATH = @srcdir@ + +include $(DEPTH)/config/autoconf.mk + +DIRS = src base themes sidebars extensions app + + +include $(topsrcdir)/config/rules.mk diff --git a/app/Makefile.in b/app/Makefile.in new file mode 100644 index 0000000..a9362d2 --- /dev/null +++ b/app/Makefile.in @@ -0,0 +1,370 @@ +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Brian Ryner +# Jonathan Wilson +# Dan Mosedale +# Benjamin Smedberg +# Laurent Jouanneau +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + +DEPTH = ../.. +topsrcdir = @top_srcdir@ +srcdir = @srcdir@ +VPATH = @srcdir@ + +include $(DEPTH)/config/autoconf.mk + +PREF_JS_EXPORTS = $(srcdir)/profile/bluegriffon-prefs.js \ + $(NULL) + +# hardcoded en-US for the moment +AB_CD = en-US +#AB_CD = $(MOZ_UI_LOCALE) + +APP_UA_NAME = $(shell echo $(MOZ_APP_DISPLAYNAME) | sed -e's/[^A-Za-z]//g') +APP_BINARY = $(MOZ_APP_NAME)$(BIN_SUFFIX) +APP_VERSION = $(shell cat $(srcdir)/../config/version.txt) + +DIST_FILES = application.ini + +GRE_MILESTONE = $(shell $(PYTHON) $(topsrcdir)/config/printconfigsetting.py $(LIBXUL_DIST)/bin/platform.ini Build Milestone) +GRE_BUILDID = $(shell $(PYTHON) $(topsrcdir)/config/printconfigsetting.py $(LIBXUL_DIST)/bin/platform.ini Build BuildID) + + +DEFINES += \ + -DAPP_NAME=$(MOZ_APP_DISPLAYNAME) \ + -DAPP_VERSION=$(APP_VERSION) \ + -DAPP_UA_NAME="$(APP_UA_NAME)" \ + -DGRE_BUILDID=$(GRE_BUILDID) \ + -DGRE_MILESTONE=$(GRE_MILESTONE) \ + -DMOZ_APP_NAME=$(MOZ_APP_NAME) \ + -DAB_CD=$(AB_CD) \ + $(NULL) + +LIBS += $(JEMALLOC_LIBS) + +ifdef LIBXUL_SDK +include $(topsrcdir)/config/rules.mk +else + +# Build a binary bootstrapping with XRE_main + +ifeq ($(USE_SHORT_LIBNAME), 1) +PROGRAM = $(MOZ_APP_NAME)$(BIN_SUFFIX) +else +PROGRAM = $(MOZ_APP_NAME)-bin$(BIN_SUFFIX) +endif + +REQUIRES = \ + xpcom \ + string \ + xulapp \ + $(NULL) + +CPPSRCS = nsEditorApp.cpp + +LOCAL_INCLUDES += -I$(topsrcdir)/toolkit/xre + +ifdef BUILD_STATIC_LIBS +ifdef _MSC_VER +STATIC_COMPONENTS_LINKER_PATH = -LIBPATH:$(DEPTH)/staticlib +else +STATIC_COMPONENTS_LINKER_PATH = -L$(DEPTH)/staticlib +endif +LIBS += $(MOZDEPTH)/toolkit/xre/$(LIB_PREFIX)xulapp_s.$(LIB_SUFFIX) +else +ifneq (,$(filter mac cocoa,$(MOZ_WIDGET_TOOLKIT))) +LIBS += $(DIST)/bin/XUL +else +EXTRA_DSO_LIBS += xul +endif +endif + +ifneq (,$(filter mac cocoa,$(MOZ_WIDGET_TOOLKIT))) +TK_LIBS := -framework Cocoa $(TK_LIBS) +endif + +ifdef MOZ_ENABLE_LIBXUL +APP_XPCOM_LIBS = $(XPCOM_GLUE_LDOPTS) +else +MOZILLA_INTERNAL_API = 1 +APP_XPCOM_LIBS = $(XPCOM_LIBS) +endif + +LIBS += \ + $(STATIC_COMPONENTS_LINKER_PATH) \ + $(MOZ_JS_LIBS) \ + $(EXTRA_DSO_LIBS) \ + $(APP_XPCOM_LIBS) \ + $(NSPR_LIBS) \ + $(TK_LIBS) \ + $(NULL) + +# Add explicit X11 dependency when building against X11 toolkits +ifneq (,$(filter gtk gtk2 xlib,$(MOZ_WIDGET_TOOLKIT))) +LIBS += $(XLDFLAGS) $(XLIBS) $(ZLIB_LIBS) +endif + +ifdef MOZ_JPROF +LIBS += -ljprof +endif + +ifndef MOZ_WINCONSOLE +ifdef MOZ_DEBUG +MOZ_WINCONSOLE = 1 +else +MOZ_WINCONSOLE = 0 +endif +endif + +NSDISTMODE = copy + +include $(topsrcdir)/config/config.mk + +ifdef _MSC_VER +# Always enter a Windows program through wmain, whether or not we're +# a console application. +WIN32_EXE_LDFLAGS += -ENTRY:wmainCRTStartup +endif + +ifndef BUILD_STATIC_LIBS + +ifdef NS_TRACE_MALLOC +EXTRA_DSO_LIBS += tracemalloc +endif + +else +include $(topsrcdir)/config/static-config.mk + +EXTRA_DEPS += \ + $(STATIC_EXTRA_DEPS) \ + $(NULL) +DEFINES += $(STATIC_DEFINES) +CPPSRCS += $(STATIC_CPPSRCS) +EXTRA_DSO_LIBS += $(STATIC_EXTRA_DSO_LIBS) +REQUIRES += $(STATIC_REQUIRES) +EXTRA_LIBS += $(STATIC_EXTRA_LIBS) +endif + + +ifeq ($(OS_ARCH),WINNT) +OS_LIBS += $(call EXPAND_LIBNAME,comctl32 comdlg32 uuid shell32 ole32 oleaut32 version winspool) +OS_LIBS += $(call EXPAND_LIBNAME,usp10 msimg32) +RCINCLUDE = splash.rc +ifndef GNU_CC +RCFLAGS += -I$(srcdir) +else +RCFLAGS += --include-dir $(srcdir) +endif +ifdef BUILD_STATIC_LIBS +RCFLAGS += -DMOZ_STATIC_BUILD +endif +ifdef DEBUG +RCFLAGS += -DDEBUG +endif +endif + +ifeq ($(OS_ARCH),BeOS) +#BEOS_PROGRAM_RESOURCE = $(srcdir)/apprunner-beos.rsrc +ifdef BUILD_STATIC_LIBS +OS_LIBS += -ltracker -lgame +endif +endif + +#ifeq ($(OS_ARCH),OS2) +#RESFILE=splashos2.res +#ifdef BUILD_STATIC_LIBS +#EXE_DEF_FILE = bluegriffon.def +#RCFLAGS += -DMOZ_STATIC_BUILD -i $(DIST)/include/widget +#endif +#ifdef DEBUG +#RCFLAGS += -DDEBUG +#endif +#RCFLAGS += -DCOMPOSER_ICO=\"$(srcdir)/icons/bluegriffon.ico\" -DDOCUMENT_ICO=\"$(srcdir)/icons/bluegriffon.ico\" +#endif + +include $(topsrcdir)/config/rules.mk + + +DEFINES += -DCOMPOSER_ICO=\"$(srcdir)/icons/bluegriffon.ico\" -DDOCUMENT_ICO=\"$(srcdir)/icons/bluegriffon.ico\" + +ifdef BUILD_STATIC_LIBS +include $(topsrcdir)/config/static-rules.mk + +DEFINES += -DIMPL_XREAPI +endif + +ifeq ($(MOZ_WIDGET_TOOLKIT),photon) +LIBS += -lphexlib +endif + +ifeq ($(OS_ARCH),WINNT) +# +# Control the default heap size. +# This is the heap returned by GetProcessHeap(). +# As we use the CRT heap, the default size is too large and wastes VM. +# +# The default heap size is 1MB on Win32. +# The heap will grow if need be. +# +# Set it to 256k. See bug 127069. +# +ifndef GNU_CC +LDFLAGS += /HEAP:0x40000 +endif +endif + +$(PROGRAM): $(DEPTH)/toolkit/xre/$(LIB_PREFIX)xulapp_s.$(LIB_SUFFIX) + +ifneq (,$(filter-out OS2 WINNT,$(OS_ARCH))) + +$(MOZ_APP_NAME):: mozilla.in Makefile.in Makefile $(DEPTH)/config/autoconf.mk + cat $< | sed -e "s|%MOZAPPDIR%|$(installdir)|" \ + -e "s|%MREDIR%|$(mredir)|" \ + -e "s|%MOZILLA-BIN%|$(PROGRAM)|g" \ + -e "s|%MOZ_APP_DISPLAYNAME%|$(MOZ_APP_DISPLAYNAME)|" > $@ + chmod +x $@ + +libs:: $(MOZ_APP_NAME) + $(INSTALL) $< $(DIST)/bin + +install:: $(MOZ_APP_NAME) + $(SYSINSTALL) $< $(DESTDIR)$(bindir) + +GARBAGE += $(MOZ_APP_NAME) +GARBAGE += $(addprefix $(DIST)/bin/defaults/pref/, bluegriffon-prefs.js) + +endif + +ifneq (,$(filter mac cocoa,$(MOZ_WIDGET_TOOLKIT))) +ifdef BUILD_STATIC_LIBS +LIBS += -lcups -framework AddressBook +endif +endif + +endif # LIBXUL_SDK + + + +ifneq (,$(filter gtk gtk2,$(MOZ_WIDGET_TOOLKIT))) +ICON_FILES = \ + $(srcdir)/icons/bluegriffon50.xpm \ + $(srcdir)/icons/bluegriffon50.png \ + $(srcdir)/icons/bluegriffon16.xpm \ + $(srcdir)/icons/bluegriffon16.png \ + $(NULL) +libs:: + $(INSTALL) $(ICON_FILES) $(DIST)/bin/icons/ + +install:: + $(SYSINSTALL) $(IFLAGS1) $(ICON_FILES) $(DESTDIR)$(mozappdir)/icons +endif + +ifneq (,$(filter windows os2,$(MOZ_WIDGET_TOOLKIT))) +#libs:: $(DESKTOP_ICONS) +# $(INSTALL) $^ $(DIST)/bin/chrome/icons/default +endif + +libs:: + touch $(DIST)/bin/.autoreg + + +ifneq (,$(filter mac cocoa,$(MOZ_WIDGET_TOOLKIT))) + +APP_NAME = $(MOZ_APP_DISPLAYNAME) + +ifdef MOZ_DEBUG +APP_NAME := $(APP_NAME)Debug +endif + +AB := $(firstword $(subst -, ,$(AB_CD))) + +clean clobber repackage:: + rm -rf $(DIST)/$(APP_NAME).app + +ifdef LIBXUL_SDK +APPFILES = Resources +else +APPFILES = MacOS +endif + +libs repackage:: $(PROGRAM) application.ini + mkdir -p $(DIST)/$(APP_NAME).app/Contents/MacOS + rsync -a --exclude CVS --exclude "*.in" $(srcdir)/macbuild/Contents $(DIST)/$(APP_NAME).app --exclude English.lproj + mkdir -p $(DIST)/$(APP_NAME).app/Contents/Resources/$(AB).lproj + rsync -a --exclude CVS --exclude "*.in" $(srcdir)/macbuild/Contents/Resources/English.lproj/ $(DIST)/$(APP_NAME).app/Contents/Resources/$(AB).lproj + sed -e "s/%APP_VERSION%/$(APP_VERSION)/" -e "s/%APP_NAME%/$(APP_NAME)/" $(srcdir)/macbuild/Contents/Info.plist.in > $(DIST)/$(APP_NAME).app/Contents/Info.plist + sed -e "s/%APP_VERSION%/$(APP_VERSION)/" -e "s/%APP_NAME%/$(APP_NAME)/" $(srcdir)/macbuild/Contents/Resources/English.lproj/InfoPlist.strings.in | iconv -f UTF-8 -t UTF-16 > $(DIST)/$(APP_NAME).app/Contents/Resources/$(AB).lproj/InfoPlist.strings + rsync -a $(DIST)/bin/ $(DIST)/$(APP_NAME).app/Contents/$(APPFILES) + $(RM) $(DIST)/$(APP_NAME).app/Contents/$(APPFILES)/mangle $(DIST)/$(APP_NAME).app/Contents/$(APPFILES)/shlibsign +ifdef LIBXUL_SDK + cp $(LIBXUL_DIST)/bin/$(XR_STUB_NAME) $(DIST)/$(APP_NAME).app/Contents/MacOS/firefox-bin +else + rm -f $(DIST)/$(APP_NAME).app/Contents/MacOS/$(PROGRAM) + rsync -aL $(PROGRAM) $(DIST)/$(APP_NAME).app/Contents/MacOS +endif + mkdir -p $(DIST)/$(APP_NAME).app/Contents/Plug-Ins + rsync -a --copy-unsafe-links $(LIBXUL_DIST)/package/PrintPDE.plugin $(DIST)/$(APP_NAME).app/Contents/Plug-Ins +# -cp -L $(DIST)/bin/mangle $(DIST)/bin/shlibsign $(DIST)/$(APP_NAME).app/Contents/$(APPFILES) + cp -RL $(srcdir)/macbuild/Contents/Resources/bluegriffon.icns $(DIST)/$(APP_NAME).app/Contents/Resources/bluegriffon.icns + echo -n APPLMOZB > $(DIST)/$(APP_NAME).app/Contents/PkgInfo +# remove CVS dirs from packaged app + find $(DIST)/$(APP_NAME).app -type d -name "CVS" -prune -exec rm -rf {} \; + find $(DIST)/$(APP_NAME).app -type d -name ".svn" -prune -exec rm -rf {} \; +else +ifdef LIBXUL_SDK +libs:: + cp $(LIBXUL_DIST)/bin/xulrunner-stub$(BIN_SUFFIX) $(DIST)/bin/firefox$(BIN_SUFFIX) +endif +endif + +libs:: +ifeq ($(OS_ARCH),WINNT) + $(PERL) -pe 's/(? $(DIST)/bin/LICENSE +else + $(INSTALL) $(topsrcdir)/LICENSE $(DIST)/bin +endif + +ifdef LIBXUL_SDK +ifndef SKIP_COPY_XULRUNNER +libs:: +ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT)) + rsync -a --copy-unsafe-links $(LIBXUL_DIST)/XUL.framework $(DIST)/$(APP_NAME).app/Contents/Frameworks +else + $(NSINSTALL) -D $(DIST)/bin/xulrunner + (cd $(LIBXUL_SDK)/bin && tar $(TAR_CREATE_FLAGS) - .) | (cd $(DIST)/bin/xulrunner && tar -xf -) +endif # cocoa +endif # SKIP_COPY_XULRUNNER +endif # LIBXUL_SDK \ No newline at end of file diff --git a/app/application.ini b/app/application.ini new file mode 100644 index 0000000..be25ac9 --- /dev/null +++ b/app/application.ini @@ -0,0 +1,58 @@ +; ***** BEGIN LICENSE BLOCK ***** +; Version: MPL 1.1/GPL 2.0/LGPL 2.1 +; +; The contents of this file are subject to the Mozilla Public License Version +; 1.1 (the "License"); you may not use this file except in compliance with +; the License. You may obtain a copy of the License at +; http://www.mozilla.org/MPL/ +; +; Software distributed under the License is distributed on an "AS IS" basis, +; WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +; for the specific language governing rights and limitations under the +; License. +; +; The Original Code is BlueGriffon. +; +; The Initial Developer of the Original Code is +; Disruptive Innovations. +; +; Portions created by the Initial Developer are Copyright (C) 2008 +; Disruptive Innovations SARL. All Rights Reserved. +; +; Contributor(s): +; Daniel Glazman +; Laurent Jouanneau +; +; Contributor(s): +; +; Alternatively, the contents of this file may be used under the terms of +; either the GNU General Public License Version 2 or later (the "GPL"), or +; the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +; in which case the provisions of the GPL or the LGPL are applicable instead +; of those above. If you wish to allow use of your version of this file only +; under the terms of either the GPL or the LGPL, and not to allow others to +; use your version of this file under the terms of the MPL, indicate your +; decision by deleting the provisions above and replace them with the notice +; and other provisions required by the GPL or the LGPL. If you do not delete +; the provisions above, a recipient may use your version of this file under +; the terms of any one of the MPL, the GPL or the LGPL. +; +; ***** END LICENSE BLOCK ***** +#filter substitution +[App] +Name=@APP_NAME@ +Version=@APP_VERSION@ +ID={8fa6f1b4-7ed3-4895-bac6-01f1cc206ab3} +BuildID=@GRE_BUILDID@ +Copyright=Copyright (c) 2006-2008 Disruptive Innovations SARL +Vendor=Disruptive Innovations SARL + +[Gecko] +MinVersion=@GRE_MILESTONE@ +MaxVersion=@GRE_MILESTONE@ + +[Shell] +Icon=chrome/skin/classic/bluegriffon/bluegriffon + +[XRE] +EnableExtensionManager=1 diff --git a/app/bluegriffon.exe.manifest b/app/bluegriffon.exe.manifest new file mode 100644 index 0000000..3faeece --- /dev/null +++ b/app/bluegriffon.exe.manifest @@ -0,0 +1,30 @@ + + + +BlueGriffon + + + + + + + + + + + + + + diff --git a/app/bluegriffon.ico b/app/bluegriffon.ico new file mode 100644 index 0000000000000000000000000000000000000000..93a460b9a12c606c31b06b2560fdf84355107308 GIT binary patch literal 4286 zcmb`KTWl0%7>3{7+1;5vc6TeK&|(+bN}*5{nO$^=u!N`Rd z#zdm17-M2IC^0cXz0f9lQH7|97!yoMJOHJXo@go5mO@$IZ~pn)+0xL~Fyz}Q-I;mk z`3~>@7x3_3Dh2t(r*R+$Kna7t!eWN}ezZpf#=Tkabtho-CSml9fv+cr{~r&3cOC-W z6A<{f0D-O)0@o(NyjBGB>V2>}OJH4@ieSfdggWj=u>C>C3Am7GzNPl{Z0b|HC)d^wbmvo>`l8)65rM0P)Gns>WNJ^L_B2~R*#3ah zzC4rKv#33n+Vc@Vzk_nKXDPj=C^*{ScahnRaeyW~FHHWd33L@wPa|MDHRpOU(dbLuYo_h#08)a;8? z?k_DxbXa}X*~*3gjMI0lyJ`2Gi(UFo*sqj2b$9xXb=T}+sk_~GQg`V)VPB5eu=hKcj-G}e?;k5QooMzE@LAj$$$mJio&-q2BS^Z zfNc1h=>tdTLn(QWDKJBvx#vp}`hBq9Xm;s4x7RMA_HqocuSNW#VoEQj=0A)yqlZz; z*vpumg@OX=e=KW&_%OYoVLW{E)qP++On(_dbLsWFICBTd{tET?Q2QCi?gfak?&w&9%y0T7hJFuu7YVLWw~oe8UMu>J51&pUXcoYiOu^j1o~)o3`1Ct5C;Pen zy)gr!rR=*u2mD6OoYY;|*CXNZ>pSiD2vBo5<88(n#w|uVh}S=N>5CT~;XF3VJUZ)d z4f`^$3|9VBgqox#%u6NNf1=kpexq_PbzevQ4M;S&m52U09ix7E95ap&(s!)`$_wek zbyHw{=&b)IX2LR=_v6ZIqm63j2G}-u8x{`sS$MNA8->@Eeg?m5|7+GP!Z<@ell|@^`zh_U>&Q)Zse1$U z>$ke}<(?pe+jsV!{~p%g=BNMa`d?T5ulC@s`is8oMeKbT*Ww`$i}C zWUsG6;+(oN^D_V=o9xx>|Gn(L!|eYr*#AFs{_Dx#HAMgQ?+4ibAL*x&{aI(`F6zE> zvDa@y;un4GNYC{D_q0CuhL`Don&0{RBlve2BJ@yT6=KI$4|uIJb8)G=u%F+CIhs&fgD`f3C^g3kJC-374)xc7*JIDX&e~UMqehJuh`9`}xO^{7gT0 zq~|y%O=4w;=u%^DgY?b|ATL^y-;+ z&~vR6tauR&T8KK>gC6RCM}2#Zb!P5s_Ff6u&ocL97yaxieb3!IuR&HW{ieU?$$o-! zH-0PPyM=wbVn1Dt+%b1kS3isT3&~!`nLESWA7a1dq`9Z7Lh?nj*Rt+4%>4?vKK(zA WcHYw?_kAxP1IH=;C?VgE^!N`)ZP*f|BRg6>WjM&R)z6r<52MWZZ2(4phY8>FVdQ&MBb@073O9Z2$lO literal 0 HcmV?d00001 diff --git a/app/icons/bluegriffon.ico b/app/icons/bluegriffon.ico new file mode 100644 index 0000000000000000000000000000000000000000..93a460b9a12c606c31b06b2560fdf84355107308 GIT binary patch literal 4286 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 FV1im*&|Lrk literal 0 HcmV?d00001 diff --git a/app/icons/bluegriffon128.png b/app/icons/bluegriffon128.png new file mode 100644 index 0000000000000000000000000000000000000000..15f9b90bd5368f0b0bde25607cb2780cf0713d5f GIT binary patch literal 10572 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 c #070024", +", c #090028", +"' c #0F0049", +") c #110051", +"! c #110056", +"~ c #050019", +"{ c #070025", +"] c #11004F", +"^ c #110054", +"/ c #03000B", +"( c #2A000D", +"_ c #2F0011", +": c #050018", +"< c #0F0048", +"[ c #110052", +"} c #110055", +"| c #000004", +"1 c #020008", +"2 c #04000C", +"3 c #31000D", +"4 c #40000F", +"5 c #070021", +"6 c #0E0046", +"7 c #10004B", +"8 c #000003", +"9 c #030010", +"0 c #030014", +"a c #0D0044", +"b c #10004D", +"c c #0D0014", +"d c #09002A", +"e c #0C0042", +"f c #FF0000", +"g c #2C0011", +"h c #040018", +"i c #0A002E", +"j c #0C0040", +"k c #040010", +"l c #040014", +"m c #0A002C", +"n c #090031", +"o c #0A0035", +"p c #0C0039", +"q c #0D003D", +"r c #0E0047", +"s c #080026", +"t c #09002B", +"u c #09002F", +"v c #090033", +"w c #0C0037", +"x c #0D003C", +"y c #080025", +"z c #090029", +"A c #09002D", +"B c #090032", +"C c #0B0035", +"D c #0C003A", +"E c #0D003E", +"F c #0D0042", +"G c #06001C", +"H c #06001F", +"I c #070023", +"J c #080027", +"K c #090030", +"L c #0A0033", +"M c #0C0038", +"N c #0D0045", +"O c #040017", +"P c #09002E", +"Q c #0B0036", +"R c #0D0043", +"S c #060020", +"T c #09002C", +"U c #0A0034", +"V c #0C0041", +"W c #030012", +"X c #040016", +"Y c #06001B", +"Z c #06001E", +"` c #0D003F", +" . + @ ", +" # $ % & * ", +" = - ; > , ' . ) ! @ ", +" ~ - ; { # ] ^ & ", +" / ( _ : - ; { < . [ } ", +" | 1 2 3 4 : - 5 6 7 ] ^ ", +" 8 / 9 0 : - ; a < b [ ", +" c : - ; { d e 6 7 + ", +" f f f g h 5 i j a ' b ", +" f k l m n o p q e r . ", +" s t u v w x j a # ", +" ; y z A B C D E F r ", +" G H I J t K L M x j N ", +" O = - ; y z P B Q D E R ", +" l h G S I J T K U M x V ", +" W X Y Z 5 y d P B Q D ` "}; diff --git a/app/icons/bluegriffon32.png b/app/icons/bluegriffon32.png new file mode 100644 index 0000000000000000000000000000000000000000..0c57ddcfc371205f55fc945f11519b63a3a55ec6 GIT binary patch literal 1358 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 AZ~y=R literal 0 HcmV?d00001 diff --git a/app/icons/bluegriffon50.png b/app/icons/bluegriffon50.png new file mode 100644 index 0000000000000000000000000000000000000000..f5a50f1aae51df25329d3d114610c34416e2b525 GIT binary patch literal 2615 zcmV-73dr?|P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m?d01m?e$8V@)00007bV*G`2iOV_ z3?mKU5{YC0013BAL_t(&-tF3buw7+!2Jqi{&%L?%4k2G8Ac1_?5+uYR($Y$`S}2TI zpk?SdwN6oFs!p}7ok7Q1rKPoiwrVTGKut$F9jt$lRt1OpfefH+4ULWh!JFEW5Mn|| zLUQwc-qk<$zBwo10zssWGkIsu>~qe3_daXAYdz0;*1HeK#Jj%I-KiA}lix@gWTZNa z`o@$UY6-3=%H*RSBb(e($dQhd`6&Q9$@j?rYNApj)p^t(wN7b)L6pM11g^_&&*?WwMB4L?2QxRhFeKi=Y`jfid3UnXCN zQ(tn7bk*^p`~&eyay{-QR+1-CFH3nJbx8=6SCL806f;A%5ebxC)Jdr%xjWQ3)EOy~ zI1R%;QAfhWD9SiGgLI~nr;sme&(6S=jj^8AFjJR&$0!y;NFl^@x)T$jRI;Ou4&61B zbDH-Bb^K2}wSu=|Rl7oK$bZGmgPGQ&*HzdY>VKxXBYRjFeVv-}cL;EXvf5Swh(WpT!ebGtkOlnPeH}$NBy=tU-5A{m&Lh?nY)+-u+Y`~+~wn1@+ zadrJOZ@m_)LpNc>J;)tBHcHJ(kJgV&^5k~)S2a{!C$7k-h0d)LEIE6sWwK$Q(fTkNk?2de`Q*No_fpSqWs6krOLxq<9f`}Vh~wr`hMagiy<->>t|G3HOhLgJ47x>pX!Ic@$MWuk1PNDzfG zNcW4B3#fxcQr3}ksV7h})pgbWF(WdBHwDWUals<~bTJd31toi`T9dPq>+!9L@}W=K zbxu!>_zb>-jkuP$44Xo{hdQUX%A?LS5otf~z~iYdZP~3-*OANnnCss12uGV)bQ*n+cv93ztgFW-WG<-AV^1_y4 zN``WI>fRVk>-+HxQBq_yIW8Kx?l8P;Z1mJYse(Gm!E549VrA*C?2DUU`Ea9$yrad* z;HV>unX`!BKBYn56BufVzE4|?Z139nVDQ4d#MnGYyZr@GkAfFa zhkAvw9(+;nrTzu^x|Bns5gGqOPCtb+Fdpy1H(UEgg1yNtSUNz?=k8&?@N6_T#~fSL zWw9S{N%a{i6wi!CFTL8GllV&!I^&QV8FllLaFXBVHs&3zbI9bEMTHa}mPA7^H#%J-6`l^EHd zGKU!)twDW-aMaP-w~hxFVP-=XP2UpAo#a=?l=0tfF1Z)?^nHErkvP#rqq~fHPOrO5 z4iSYJqb=*9sZ;xkVU7N4+Bq>=IH|j-pRKwd-0bGP&)ScyZDh&c_sNsxi+j;|9yMIw zqR~Hn{YAehJOm%%uwLX)(RdIuk!rWC=$|FuTy?MAV#SW<-FygE4s@Y!|Q zl%|eMo=m+s`>@b|?1{m{sd!AF?vfoX7Ja^+wh4tIu{on z$5ZV+UXkix^rgz!$J$S)EiU38Lmo#i(<`DosT)(Q3UL>4|2B8-d7)3NVq6pdSGIX@ zYBD&?cDz^HbK{c1-a;JLICThH^>=*FIA#w^%c#?{XXsDW4)N)yef`lRq5iQP*@=CR@zAMFg`bc8eOnUN%@!1Igiei(0PK+eW6@LXQ(;f>4wf4%I%@7*zJ4Ue%xJ<=iEhE)5yz_ zBfVM5KPUgWuZo|L^13GN@&xJzTuRtP(}{eSdaZz c #16006C", +", c #180077", +"' c #19007A", +") c #1A007E", +"! c #16006E", +"~ c #180076", +"{ c #180074", +"] c #190077", +"^ c #19007B", +"/ c #150065", +"( c #170073", +"_ c #190079", +": c #10004B", +"< c #10004E", +"[ c #120058", +"} c #12005B", +"| c #170070", +"1 c #0F004A", +"2 c #10004D", +"3 c #110050", +"4 c #120057", +"5 c #12005A", +"6 c #150064", +"7 c #17006F", +"8 c #170072", +"9 c #19007E", +"0 c #1A0080", +"a c #05001B", +"b c #06001E", +"c c #070021", +"d c #0F0049", +"e c #10004C", +"f c #10004F", +"g c #110052", +"h c #110055", +"i c #120059", +"j c #140063", +"k c #1A007F", +"l c #050019", +"m c #06001D", +"n c #070025", +"o c #080027", +"p c #0E0048", +"q c #110051", +"r c #110054", +"s c #13005F", +"t c #140061", +"u c #19007D", +"v c #050018", +"w c #070024", +"x c #13005C", +"y c #150063", +"z c #180075", +"A c #03000C", +"B c #03000F", +"C c #030012", +"D c #040015", +"E c #070027", +"F c #0E0047", +"G c #13005E", +"H c #190076", +"I c #010003", +"J c #020006", +"K c #02000A", +"L c #39000C", +"M c #900008", +"N c #320011", +"O c #0E0046", +"P c #110053", +"Q c #110056", +"R c #12005C", +"S c #020009", +"T c #1D000D", +"U c #54000C", +"V c #200013", +"W c #0F004B", +"X c #000001", +"Y c #100050", +"Z c #13005D", +"` c #130060", +" . c #0E0044", +".. c #170074", +"+. c #3F000E", +"@. c #09002B", +"#. c #0D0041", +"$. c #0E0043", +"%. c #120056", +"&. c #240000", +"*. c #FF0000", +"=. c #D10004", +"-. c #0A002E", +";. c #0D003F", +">. c #0D0042", +",. c #0E0045", +"'. c #140062", +"). c #160069", +"!. c #210010", +"~. c #0D003D", +"{. c #0D0040", +"]. c #130061", +"^. c #08002A", +"/. c #09002D", +"(. c #0A002F", +"_. c #0B0033", +":. c #0B0036", +"<. c #0C0039", +"[. c #0C003C", +"}. c #080028", +"|. c #09002C", +"1. c #0A0031", +"2. c #0B0034", +"3. c #0B0037", +"4. c #0C003B", +"5. c #0C003D", +"6. c #070022", +"7. c #0A0030", +"8. c #060020", +"9. c #070023", +"0. c #070026", +"a. c #080029", +"b. c #0B0035", +"c. c #0D003E", +"d. c #05001C", +"e. c #06001F", +"f. c #0A002D", +"g. c #080026", +"h. c #0A0032", +"i. c #0B0038", +"j. c #050017", +"k. c #05001A", +"l. c #06001C", +"m. c #0C003A", +"n. c #0D0043", +"o. c #12005D", +"p. c #040013", +"q. c #040016", +"r. c #060021", +"s. c #040011", +"t. c #040014", +"u. c #03000D", +"v. c #030010", +"w. c #0B0032", +"x. c #02000C", +"y. c #040012", +"z. c #02000B", +"A. c #03000E", +"B. c #020008", +"C. c #010006", +"D. c #030011", +"E. c #040017", +"F. c #020007", +"G. c #070020", +"H. c #060022", +"I. c #08002B", +"J. c #010005", +"K. c #010007", +" ", +" ", +" ", +" ", +" . + ", +" @ # $ ", +" % . + & * = ", +" - ; > $ , ' ) ", +" % . ! & ~ * = ", +" - ; > $ { ] ^ ", +" / % # ! ( ~ _ = ", +" : < [ } - ; > | { ] ' ", +" 1 2 3 4 5 6 @ # 7 8 ~ 9 0 ", +" a b c d e f g h i j - ; + | { = k ", +" l a m c n o p 1 2 q r 4 5 s t 6 # $ ( ~ ' u ", +" v a b c w o d e f g h [ x s y . + | z * = ", +" A B C D v a b c w E F 1 < q r 4 } G t - @ # | ( H ' ", +" I J K A L M N v a b c w O d e f P Q i R s j % . ! & z * ", +" I J S A T U V v a b c p W < q r [ } G t / > $ ( ~ ' ", +" X I J S A B C D v a b c O d 2 Y P Q 5 Z ` y @ . ! & _ = ", +" I C D v a b c w o .p W < q h [ } s - ; > $ .., ' ", +" +.D v a b c w o @. #.$.F d 2 Y P %.5 x t 6 % # ! 8 ~ ", +" &. *.*.*.=.D v a b c @.-.;.>.,.p : < g h [ s '.- ).+ | { ", +" &.&. *.*.*.*. !.D v ~.{.$.F 1 2 3 P Q 5 Z ].6 @ # ! 8 ", +" &.&.&. *. B C D ^./.(._.:.<.[.;.>.,.p W f g h i R s j - . + ", +" &.&. n }.|.-.1.2.3.4.5.#. .F 1 2 q r 4 5 G t / @ # ", +" &.&. &.&. 6.n o ^./.7._.:.<.[.;.>.O d e f g h i R s j - ", +" &.&.&. &.&. &.&.&.&. m 8.9.0.a.|.(.1.b.3.4.c.#. .F 1 2 q r 4 } G t @ # ", +" &.&.&.&.&.&.&.&.&. l d.e.6.n o ^.f.7._.:.<.[.;.>.O d e f P Q i ` j % . ", +" &.&.&.&.&.&. v a m 8.w g.a.|.(.h.b.i.4.c.#. .p W < q r 4 } G './ ", +" &.&.&.&. D j.k.l.e.6.n }.@.-.7.2.:.m.5.{.n.O d e 3 P %.5 o.` 6 ", +" &.&.&. p.q.v a b r.w o a./.(.h.b.i.4.c.#.,.p : < g h [ } G ", +" &.&.&. B s.t.j.k.l.e.9.n }.@.-.7.2.3.m.5.{.n.O d 2 Y P 4 ", +" &.&.&. u.v.p.q.l a b c w o a./.(.w.b.i.[.;.>.,.p h [ ", +" &.&.&.&.&. x.B y.D j.k.m 8.9.n }.@.-.1.2.3.m. 1 2 Y P ", +" &.&.&.&.&. z.A.v.p.q.l a b c w o ^./.7._.:.<.[.;.>.,.p e f g ", +" &. &.&.&.&. B.K A B y.D v k.m 8.9.n }.|.-.1.2.3.m.5.#. .F 1 ", +" &.&. &.&.&. C.S z.A.D.t.E.l d.b 6.w o ^./.7._.:.<.[.;.>. ", +" &.&.&. &.&.&. F.K u.B y.D v k.m G.9.0.a.|.-.1.b.3.4.c.#. ", +" &.&. &. C.S x.A.s.t.E.l d.e.H.n }.I.-.7._.:.<.[. ", +" &. J.B.K u.B y.q.v a m 8.9. ", +" J.K.S A A.s.t.j.k.l.e.6.n }. ", +" C.B.K u. p.q.v b c w 0.a. ", +" K x. D j. ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/app/icons/default16.png b/app/icons/default16.png new file mode 100644 index 0000000000000000000000000000000000000000..67740d36505e3e0b2a2efe848b13250cfac31e06 GIT binary patch literal 672 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 + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + %APP_BINARY% + CFBundleGetInfoString + %APP_NAME% %APP_VERSION%, © 2007-2008 Disruptive Innovations + CFBundleIconFile + bluegriffon + CFBundleIdentifier + com.disruptive-innovations.bluegriffon + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + %APP_NAME% + CFBundlePackageType + APPL + CFBundleShortVersionString + %APP_VERSION% + CFBundleSignature + MOZB + CFBundleVersion + %APP_VERSION% + NSAppleScriptEnabled + + + diff --git a/app/macbuild/Contents/Resources/English.lproj/InfoPlist.strings.in b/app/macbuild/Contents/Resources/English.lproj/InfoPlist.strings.in new file mode 100644 index 0000000..d877c72 --- /dev/null +++ b/app/macbuild/Contents/Resources/English.lproj/InfoPlist.strings.in @@ -0,0 +1,2 @@ +CFBundleName = "%APP_NAME%"; +NSHumanReadableCopyright = "Copyright © 2008 Disruptive Innovations"; diff --git a/app/macbuild/Contents/Resources/bluegriffon.icns b/app/macbuild/Contents/Resources/bluegriffon.icns new file mode 100755 index 0000000000000000000000000000000000000000..beb99be781b50e3b36bc42196f56961010978953 GIT binary patch literal 36909 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 DkhkSc literal 0 HcmV?d00001 diff --git a/app/mozilla.in b/app/mozilla.in new file mode 100644 index 0000000..ec8814b --- /dev/null +++ b/app/mozilla.in @@ -0,0 +1,142 @@ +#!/bin/sh +# +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is mozilla.org Code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + +## $Id: mozilla.in,v 1.16 2007/10/05 07:29:26 reed%reedloden.com Exp $ +## +## Usage: +## +## $ mozilla [args] +## +## This script is meant to run the mozilla-bin binary from either +## mozilla/xpfe/bootstrap or mozilla/dist/bin. +## +## The script will setup all the environment voodoo needed to make +## the mozilla-bin binary to work. +## + +#uncomment for debugging +#set -x + +moz_libdir=%MOZAPPDIR% + +# Use run-mozilla.sh in the current dir if it exists +# If not, then start resolving symlinks until we find run-mozilla.sh +found=0 +progname="$0" +curdir=`dirname "$progname"` +progbase=`basename "$progname"` +run_moz="$curdir/run-mozilla.sh" +if test -x "$run_moz"; then + dist_bin="$curdir" + found=1 +else + here=`/bin/pwd` + while [ -h "$progname" ]; do + bn=`basename "$progname"` + cd `dirname "$progname"` + progname=`/bin/ls -l "$bn" | sed -e 's/^.* -> //' ` + progbase=`basename "$progname"` + if [ ! -x "$progname" ]; then + break + fi + curdir=`dirname "$progname"` + run_moz="$curdir/run-mozilla.sh" + if [ -x "$run_moz" ]; then + cd "$curdir" + dist_bin=`pwd` + run_moz="$dist_bin/run-mozilla.sh" + found=1 + break + fi + done + cd "$here" +fi +if [ $found = 0 ]; then + # Check default compile-time libdir + if [ -x "$moz_libdir/run-mozilla.sh" ]; then + dist_bin="$moz_libdir" + else + echo "Cannot find mozilla runtime directory. Exiting." + exit 1 + fi +fi + +script_args="" +debugging=0 +MOZILLA_BIN="${progbase}-bin" + +if [ "$OSTYPE" = "beos" ]; then + mimeset -F "$MOZILLA_BIN" +fi + +pass_arg_count=0 +while [ $# -gt $pass_arg_count ] +do + case "$1" in + -p | --pure | -pure) + MOZILLA_BIN="${MOZILLA_BIN}.pure" + shift + ;; + -g | --debug) + script_args="$script_args -g" + debugging=1 + shift + ;; + -d | --debugger) + script_args="$script_args -d $2" + shift 2 + ;; + *) + # Move the unrecognized argument to the end of the list. + arg="$1" + shift + set -- "$@" "$arg" + pass_arg_count=`expr $pass_arg_count + 1` + ;; + esac +done + +if [ $debugging = 1 ] +then + echo $dist_bin/run-mozilla.sh $script_args $dist_bin/$MOZILLA_BIN "$@" +fi +"$dist_bin/run-mozilla.sh" $script_args "$dist_bin/$MOZILLA_BIN" "$@" +exitcode=$? + +exit $exitcode +# EOF. diff --git a/app/nsEditorApp.cpp b/app/nsEditorApp.cpp new file mode 100644 index 0000000..2aaa153 --- /dev/null +++ b/app/nsEditorApp.cpp @@ -0,0 +1,106 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is + * Netscape Communications Corporation. + * Portions created by the Initial Developer are Copyright (C) 2002 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Brian Ryner + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include "nsXULAppAPI.h" +#ifdef XP_WIN +#include +#include +#endif + +#include +#include + +#include "nsCOMPtr.h" +#include "nsILocalFile.h" +#include "nsStringGlue.h" + +#ifdef XP_WIN +// we want a wmain entry point +#include "nsWindowsWMain.cpp" +#endif + +static void Output(const char *fmt, ... ) +{ + va_list ap; + va_start(ap, fmt); + +#if defined(XP_WIN) && !MOZ_WINCONSOLE + PRUnichar msg[2048]; + _vsnwprintf(msg, sizeof(msg)/sizeof(msg[0]), NS_ConvertUTF8toUTF16(fmt).get(), ap); + MessageBoxW(NULL, msg, L"XULRunner", MB_OK | MB_ICONERROR); +#else + vfprintf(stderr, fmt, ap); +#endif + + va_end(ap); +} + + +/** + * A helper class which calls NS_LogInit/NS_LogTerm in its scope. + */ +class ScopedLogging +{ +public: + ScopedLogging() { NS_LogInit(); } + ~ScopedLogging() { NS_LogTerm(); } +}; + +int main(int argc, char* argv[]) +{ + ScopedLogging log; + + nsCOMPtr appini; + nsresult rv = XRE_GetBinaryPath(argv[0], getter_AddRefs(appini)); + if (NS_FAILED(rv)) { + Output("Couldn't calculate the application directory."); + return 255; + } + appini->SetNativeLeafName(NS_LITERAL_CSTRING("application.ini")); + + nsXREAppData *appData; + rv = XRE_CreateAppData(appini, &appData); + if (NS_FAILED(rv)) { + Output("Couldn't read application.ini"); + return 255; + } + + int result = XRE_main(argc, argv, appData); + XRE_FreeAppData(appData); + return result; +} diff --git a/app/profile/bluegriffon-prefs.js b/app/profile/bluegriffon-prefs.js new file mode 100644 index 0000000..41392a7 --- /dev/null +++ b/app/profile/bluegriffon-prefs.js @@ -0,0 +1,73 @@ +#filter substitution + +pref("toolkit.defaultChromeURI", "chrome://bluegriffon/content/xul/bluegriffon.xul"); + +/* debugging prefs */ +pref("browser.dom.window.dump.enabled", true); +pref("javascript.options.showInConsole", true); +pref("javascript.options.strict", true); +pref("nglayout.debug.disable_xul_cache", true); +pref("nglayout.debug.disable_xul_fastload", true); + +pref("general.useragent.extra.mybrowser", "@APP_UA_NAME@/@APP_VERSION@"); + +pref("extensions.update.enabled", true); +pref("extensions.update.url", "chrome://mozapps/locale/extensions/extensions.properties"); +pref("extensions.update.interval", 86400); // Check for updates to Extensions and + // Themes every week +// Non-symmetric (not shared by extensions) extension-specific [update] preferences +pref("extensions.getMoreExtensionsURL", "chrome://mozapps/locale/extensions/extensions.properties"); +pref("extensions.getMoreThemesURL", "chrome://mozapps/locale/extensions/extensions.properties"); +pref("extensions.dss.enabled", false); // Dynamic Skin Switching +pref("extensions.dss.switchPending", false); // Non-dynamic switch pending after next + // restart. +// browser preferences +pref("bluegriffon.display.use_system_colors", true); +pref("bluegriffon.display.foreground_color", "#000000"); +pref("bluegriffon.display.background_color", "#ffffff"); +pref("bluegriffon.display.active_color", "#ee0000"); +pref("bluegriffon.display.anchor_color", "#0000ee"); +pref("bluegriffon.display.visited_color", "#551a8b"); +pref("bluegriffon.display.underline_links", true); + +// document preferences +pref("bluegriffon.author", ""); + +// table preferences +pref("bluegriffon.defaults.table.halign", ""); +pref("bluegriffon.defaults.table.valign", ""); +pref("bluegriffon.defaults.table.border", "1"); +pref("bluegriffon.defaults.table.rows", "2"); +pref("bluegriffon.defaults.table.cols", "2"); +pref("bluegriffon.defaults.table.width", "100"); +pref("bluegriffon.defaults.table.width_unit", "percentage"); +pref("bluegriffon.defaults.table.text_wrap", ""); +pref("bluegriffon.defaults.table.cell_spacing", "2"); +pref("bluegriffon.defaults.table.cell_padding", "2"); + +// CSS policy +pref("bluegriffon.css.policy", 0); // 0: HTML Attr; 1: Inline styles; 2: embedded CSS Rules; 3: existing rule + +pref("bluegriffon.prettyprint", true); +pref("bluegriffon.encode_entity", "html"); + +pref("bluegriffon.zoom.default", "1"); + +pref("bluegriffon.history.url_maximum", 10); + +pref("signon.rememberSignons", true); +pref("signon.expireMasterPassword", false); +pref("signon.SignonFileName", "signons.txt"); + +// suppress external-load warning for standard browser schemes +pref("network.protocol-handler.warn-external.http", false); +pref("network.protocol-handler.warn-external.https", false); +pref("network.protocol-handler.warn-external.ftp", false); + +// XPI +pref("xpinstall.dialog.confirm", "chrome://mozapps/content/xpinstall/xpinstallConfirm.xul"); +pref("xpinstall.dialog.progress.skin", "chrome://mozapps/content/extensions/extensions.xul"); +pref("xpinstall.dialog.progress.chrome", "chrome://mozapps/content/extensions/extensions.xul"); +pref("xpinstall.dialog.progress.type.skin", "Extension:Manager"); +pref("xpinstall.dialog.progress.type.chrome", "Extension:Manager"); + diff --git a/app/splash.rc b/app/splash.rc new file mode 100644 index 0000000..67ef69e --- /dev/null +++ b/app/splash.rc @@ -0,0 +1,89 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Mozilla Communicator client code. + * + * The Initial Developer of the Original Code is + * Netscape Communications Corporation. + * Portions created by the Initial Developer are Copyright (C) 1998 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Bill Law law@netscape.com + * Jonathan Wilson + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ +#include +#include "nsNativeAppSupportWin.h" + +1 24 "bluegriffon.exe.manifest" + +IDI_APPICON ICON COMPOSER_ICO +IDI_DOCUMENT ICON DOCUMENT_ICO +IDI_APPLICATION ICON COMPOSER_ICO + +STRINGTABLE DISCARDABLE +BEGIN +#ifdef DEBUG + IDS_STARTMENU_APPNAME, "BlueGriffon Debug" +#else + IDS_STARTMENU_APPNAME, "BlueGriffon" +#endif +END + +#ifdef MOZ_STATIC_BUILD + +// XXX This code is copied from resource.h and widget.rc. It's a work-around +// for the limitation that only one resource file can be used in an .exe. We +// should develop a method, for static builds only, to combine multiple .rc +// files into a single .rc file, and then use that to build the single .res +// file for the .exe. + +#define IDC_GRAB 4101 +#define IDC_GRABBING 4102 +#define IDC_CELL 4103 +#define IDC_COPY 4104 +#define IDC_ALIAS 4105 +#define IDC_ZOOMIN 4106 +#define IDC_ZOOMOUT 4107 +#define IDC_COLRESIZE 4108 +#define IDC_ROWRESIZE 4109 +#define IDC_VERTICALTEXT 4110 +#define IDC_NONE 4112 + +IDC_GRAB CURSOR DISCARDABLE "..\\..\\widget\\src\\build\\res\\grab.cur" +IDC_GRABBING CURSOR DISCARDABLE "..\\..\\widget\\src\\build\\res\\grabbing.cur" +IDC_CELL CURSOR DISCARDABLE "..\\..\\widget\\src\\build\\res\\cell.cur" +IDC_COPY CURSOR DISCARDABLE "..\\..\\widget\\src\\build\\res\\copy.cur" +IDC_ALIAS CURSOR DISCARDABLE "..\\..\\widget\\src\\build\\res\\aliasb.cur" +IDC_ZOOMIN CURSOR DISCARDABLE "..\\..\\widget\\src\\build\\res\\zoom_in.cur" +IDC_ZOOMOUT CURSOR DISCARDABLE "..\\..\\widget\\src\\build\\res\\zoom_out.cur" +IDC_COLRESIZE CURSOR DISCARDABLE "..\\..\\widget\\src\\build\\res\\col_resize.cur" +IDC_ROWRESIZE CURSOR DISCARDABLE "..\\..\\widget\\src\\build\\res\\row_resize.cur" +IDC_VERTICALTEXT CURSOR DISCARDABLE "..\\..\\widget\\src\\build\\res\\vertical_text.cur" +IDC_NONE CURSOR DISCARDABLE "..\\..\\widget\\src\\build\\res\\none.cur" + +#endif diff --git a/base/Makefile.in b/base/Makefile.in new file mode 100644 index 0000000..1898a94 --- /dev/null +++ b/base/Makefile.in @@ -0,0 +1,55 @@ +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is Mozilla.org +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2003 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Daniel Glazman (daniel@glazman.org), on behalf of Lindows.com +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + +DEPTH = ../.. +topsrcdir = @top_srcdir@ +srcdir = @srcdir@ +VPATH = @srcdir@ + +include $(DEPTH)/config/autoconf.mk + +DEFINES += \ + -DAPP_NAME=$(MOZ_APP_DISPLAYNAME) \ + -DAPP_VERSION=$(MOZ_APP_VERSION) \ + $(NULL) + +ifneq (,$(filter mac cocoa, $(MOZ_WIDGET_TOOLKIT))) +DEFINES += -DTOOLBAR_CUSTOMIZATION_SHEET +endif + +include $(topsrcdir)/config/rules.mk + diff --git a/base/content/bluegriffon/DI.png b/base/content/bluegriffon/DI.png new file mode 100644 index 0000000000000000000000000000000000000000..c2b852368f632794d9f9ba7c514ebe9cfa5f35f3 GIT binary patch literal 2447 zcmV;A32^p_P)WdH}%0UHk+HQw8%LjV8(2XskIMF-RY8xI`;d^8pS00009a7bBm000XT z000XT0n*)m`~Uz64M{{nRCwC$o9#~&R}{vtg+N8c#Xy$05nrKhvk7F0q*85c_(0+} z{!#sAYNC-;jYfmP6oZi}Weo-b0R)9g+@`;ohdsT{%))A67tNlK$(=iQ?wothbKdS< z4qW@~nyUqk43AvDdA%l|u2Y=8t2G04+80#EL7f7sQ-CA%Ysk6gZR`BmYS&pIo)^3#>( zrsmF$&hg3dwRdYYR^P3zZ>-mPbz5{YbF%$dJ1o&|J>1&R&`=Z6iw*zN@t#`I&Nw)K z_I&nSw)jsG^`mV5xJA)l`N4%apmS<^D$|+4D@<=rU(8=b=(q3RuJ!6Zp{J8i z7nc^PS38b%AbQx&p3QRoSo}EsdU|eQu0Pk`)YQbffO}uIkA7?O6iZ;$r%#-2Y-j}H z6E7xMK32gMV9~?;@c}NhBKjq$M8*)8y~0Na^Mgo_*^uf$?*RQ{6JvWVoE`FmKv?Ip zumuSG{tIoH!jieMy`~*-fW>fqGV#PjX^-F)G^mYv!TsIGcL@sI$`o)UfTId) zsF2VT=mfHGi+17d*^6fw`lF|hT#zZ8)w$QSoj*8p zB5>>k{z$*n?84}1Nh@xd|l$@>k?*loPpck zA1F#m3O)hhmDLq&g=K)~&CN{#0xxRu55vNdur_lNHKce{h9#m{{)ABr4(I4Yk< zXkaabbK1mgn5S)K>ca4$SIFaVD$H!Fix1#MzLM+7kt#Az^HOsp*z-DL+FILW`XmbK zSGIw%RZVndaR6shq3@Rt9Xu3pxw>pUa(9U{th`+T2Y{onQ6*59Ba{*E#8~5bIGr{a zqvX$jil!q58ksphfC&{k-KWu{9AgL*fdeMmN-e8H$vD8Lfnpchjo+VG`JibvRF7G| z;v#OtRnfnF?S$vR4I^h_L^b_rG7gl)TKJEXUpQ<}EG8aV>Qs(MtLGNya0#lsszznw z0u{3>zx9FXZw*^oG=C7GtswGtxjGr|w?WA2!%_{zRkmJGZl%4#$RkW#sj{*jt9&Aq zI+}7NJk@ER({}X&p@FP5-JXs_cN~EHgi1<3Z8Tzlimt>Rv~n~uJmTMyFx&Pm$lJx= zF9B}Wwf^@y>}lhil_u%v(r*RvXOY%CwlOyR%W%3QO}j7K zCx4(le3qmF9nTb;ffb9C@}S4JPJ2bZM6cMsvi5-KrxQM9SUM28apwj-gZV)Q-2D9} zq95oTV1cUW?mfO2Nq4mIpaUlZE1jbcN5zBn)6m%)OF*i^2ZE)r9O@m?Q$)v9Xqu-q zRJTi*JWXVqd;)M_uEr!2Y92{OENS6GKMx@U?OXU8tUH`9=wu3jZngJ5SIAUK^R_MGam zPMwPS!^F3?;gBP&=?7 zs&A23CY_Np)0~YBjeIWEnnDzb$&jf;#Zjd0mmKVjMi9}hz#Z%s%m)zEu@;Z`L+1Ut z{;R)U#jN30m`-FH##|{M*OINu(8iwdfoA&du1XGpFm0_C1mCj9w zL;?R{3~t!iI*v;GsfZQK;#_86Qc`~;rO;89@uL~QAJU`0@5err1lnBagW*;i-o(cU zwtTkrNZww{4-VGD4IaN(lY;mtZUcDbdUCeWSrHCgXoYHEPq@cKZ;ywN)Aq-I0S*X$ zRyEiUp9}{q!16&ngulI^#0S~&dW1u6K^11LZG20bFgP77*+~5kz?FOq!x#_dqzROS zV#;y;A3lz?Th(p)lUs%pDj+Iql{lzmEc7@ znKB9E$AxIdtLe2khUTr0Qf#5#P>V2EDWY{ursSq!s{MnB?stB5z zn*2%PxxIZfl4IKu4F1xe+_<$yoK?SG@R#rJB-$9i5GcoXq+ZaiU+?H!TAlyheTRd+ z`%pDY{I8V0{okzvg6jOV>#L^S`Q7?{rn)DnguZ=$P^U_$j)OV{^e^72HMC4<^mzaP N002ovPDHLkV1iWYs!ad@ literal 0 HcmV?d00001 diff --git a/base/content/bluegriffon/EditorContent.css b/base/content/bluegriffon/EditorContent.css new file mode 100644 index 0000000..52f53db --- /dev/null +++ b/base/content/bluegriffon/EditorContent.css @@ -0,0 +1,114 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Mozilla Communicator client code, released + * March 31, 1998. + * + * The Initial Developer of the Original Code is + * Netscape Communications Corporation. + * Portions created by the Initial Developer are Copyright (C) 1998-1999 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Daniel Glazman + * Daniel Glazman , on behalf of Linspire Inc. + * + * Alternatively, the contents of this file may be used under the terms of + * either of the GNU General Public License Version 2 or later (the "GPL"), + * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + + /* Styles to alter look of things in the Editor content window + * for the "Normal Edit Mode" These settings will be removed + * when we display in completely WYSIWYG "Edit Preview" mode + * Anything that should never change, like cursors, should be + * place in EditorOverride.css, instead of here. +*/ + +@namespace nvu url("http://disruptive-innovations.com/zoo/nvu"); + + +a[name] { + min-height: 17px; margin-left: 2px; margin-top: 2px; + padding-left: 20px; + background-image: url(chrome://bluegriffon/content/images/tag-anchor.gif); + background-repeat: no-repeat; + background-position: top left; +} + +/* Force border display for empty cells + and tables with 0 border +*/ +table { + empty-cells: show; +} + +/* give a red dotted border to tables and cells with no border + otherwise they are invisible +*/ +table[empty-cells], + table[border="0"], + /* next two selectors on line below for the case where tbody is omitted */ + table[border="0"] > tr > td, table[border="0"] > tr > th, + table[border="0"] > thead > tr > td, table[border="0"] > tbody > tr > td, table[border="0"] > tfoot > tr > td, + table[border="0"] > thead > tr > th, table[border="0"] > tbody > tr > th, table[border="0"] > tfoot > tr > th, + /* next two selectors on line below for the case where tbody is omitted */ + table:not([border]) > tr > td, table:not([border]) > tr > th, + table:not([border]) > thead > tr > td, table:not([border]) > tbody > tr > td, table:not([border]) > tfoot > tr > td, + table:not([border]) > thead > tr > th, table:not([border]) > tbody > tr > th, table:not([border]) > tfoot > tr > th +{ + outline: 1px dotted; +} + +/* give a green dashed border to forms otherwise they are invisible +*/ +form +{ + outline: 1px dashed #66cccc; +} + +/* give a green dotted border to labels otherwise they are invisible +*/ +label +{ + outline: 1px dotted green; +} + + + + +img { + -moz-force-broken-image-icon: 1; +} + +nvu|comment, nvu|pi, nvu|php { + -moz-user-select: all ! important; + display: inline; +} + +table > nvu|*, +tbody > nvu|*, +thead > nvu|*, +tfoot > nvu|*, +tr > nvu|* { + display: none ! important} + diff --git a/base/content/bluegriffon/EditorOverride.css b/base/content/bluegriffon/EditorOverride.css new file mode 100644 index 0000000..5187801 --- /dev/null +++ b/base/content/bluegriffon/EditorOverride.css @@ -0,0 +1,366 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Mozilla Communicator client code, released + * March 31, 1998. + * + * The Initial Developer of the Original Code is + * Netscape Communications Corporation. + * Portions created by the Initial Developer are Copyright (C) 1998-1999 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Daniel Glazman , on behalf of Linspire Inc. + * + * Alternatively, the contents of this file may be used under the terms of + * either of the GNU General Public License Version 2 or later (the "GPL"), + * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +/* Styles to alter look of things in the Editor content window + * that should NOT be removed when we display in completely WYSIWYG + * "Browser Preview" mode. + * Anything that should change, like appearance of table borders + * and Named Anchors, should be placed in EditorContent.css instead of here. +*/ + +@namespace nvu url("http://disruptive-innovations.com/zoo/nvu"); + +/* Primary cursor is text I-beam */ + +::-moz-canvas, a:link { + cursor: text; +} + +/* Use default arrow over objects with size that + are selected when clicked on. + Override the browser's pointer cursor over links +*/ + +img, img[usemap], area, +object, object[usemap], +applet, hr, button, input, isindex, textarea, select, +a:link img, a:visited img, a:active img, +a[name]:empty { + cursor: default; +} + +a:visited, a:active { + cursor: text; + color : inherit; +} + +/* Prevent clicking on links from going to link */ +a:link img, a:visited img { + -moz-user-input: none; +} + +/* We suppress user/author's prefs for link underline, + so we must set explicitly. This isn't good! +*/ +a:link { + text-decoration: underline -moz-anchor-decoration; + color: -moz-hyperlinktext; +} + +/* Allow double-clicks on these widgets to open properties dialogs + XXX except when the widget has disabled attribute */ +input, button, textarea { + -moz-user-select: all !important; + -moz-user-input: auto !important; + -moz-user-focus: none !important; +} + +/* XXX Still need a better way of blocking other events to these widgets */ +select, input[disabled], input[type="checkbox"], input[type="radio"], input[type="file"] { + -moz-user-select: all !important; + -moz-user-input: none !important; + -moz-user-focus: none !important; +} + +isindex[prompt] +{ + -moz-user-select: none !important; + -moz-user-input: none !important; + -moz-user-focus: none !important; +} + +input[type="hidden"] { + border: 1px solid black !important; + visibility: visible !important; +} + +label { + -moz-user-select: all !important; +} + +::-moz-display-comboboxcontrol-frame { + -moz-user-select: text !important; +} + +option { + -moz-user-select: text !important; +} + +#mozToc.readonly { + -moz-user-select: all !important; + -moz-user-input: none !important; +} + +/* the following rules are for Image Resizing */ + +span[\_moz_anonclass="mozResizer"] { + width: 5px; + height: 5px; + position: absolute; + border: 1px black solid; + background-color: white; + -moz-user-select: none; + z-index: 2147483646; /* max value -1 for this property */ +} + +/* we can't use :active below */ +span[\_moz_anonclass="mozResizer"][\_moz_activated], +span[\_moz_anonclass="mozResizer"]:hover { + background-color: black; +} + +span[\_moz_anonclass="mozResizer"].hidden, +span[\_moz_anonclass="mozResizingShadow"].hidden, +img[\_moz_anonclass="mozResizingShadow"].hidden, +span[\_moz_anonclass="mozGrabber"].hidden, +span[\_moz_anonclass="mozResizingInfo"].hidden, +a[\_moz_anonclass="mozTableRemoveRow"].hidden, +a[\_moz_anonclass="mozTableRemoveColumn"].hidden { + display: none !important; +} + +span[\_moz_anonclass="mozResizer"][anonlocation="nw"] { + cursor: nw-resize; +} +span[\_moz_anonclass="mozResizer"][anonlocation="n"] { + cursor: n-resize; +} +span[\_moz_anonclass="mozResizer"][anonlocation="ne"] { + cursor: ne-resize; +} +span[\_moz_anonclass="mozResizer"][anonlocation="w"] { + cursor: w-resize; +} +span[\_moz_anonclass="mozResizer"][anonlocation="e"] { + cursor: e-resize; +} +span[\_moz_anonclass="mozResizer"][anonlocation="sw"] { + cursor: sw-resize; +} +span[\_moz_anonclass="mozResizer"][anonlocation="s"] { + cursor: s-resize; +} +span[\_moz_anonclass="mozResizer"][anonlocation="se"] { + cursor: se-resize; +} + +span[\_moz_anonclass="mozResizingShadow"], +img[\_moz_anonclass="mozResizingShadow"] { + -moz-outline: thin dashed black; + -moz-user-select: none; + -moz-opacity: 0.5; + position: absolute; + z-index: 2147483647; /* max value for this property */ +} + +span[\_moz_anonclass="mozResizingInfo"] { + font-family: sans-serif; + font-size: x-small; + color: black; + background-color: #d0d0d0; + border: ridge 2px #d0d0d0; + padding: 2px; + position: absolute; + z-index: 2147483647; /* max value for this property */ +} + +img[\_moz_resizing] { + -moz-outline: thin solid black; +} + +*[\_moz_abspos] { + -moz-outline: silver ridge 2px; + z-index: 2147483645 !important; /* max value -2 for this property */ +} +*[\_moz_abspos="white"] { + background-color: white !important; +} +*[\_moz_abspos="black"] { + background-color: black !important; +} + +span[\_moz_anonclass="mozGrabber"] { + -moz-outline: ridge 2px silver; + padding: 2px; + position: absolute; + width: 12px; + height: 12px; + background-image: url("resource:/res/grabber.gif"); + background-repeat: no-repeat; + background-position: center center; + -moz-user-select: none; + cursor: move; +} + +/* INLINE TABLE EDITING */ + +a[\_moz_anonclass="mozTableAddColumnBefore"] { + position: absolute; + z-index: 2147483647; /* max value for this property */ + text-decoration: none !important; + border: none 0px !important; + width: 4px; + height: 8px; + background-image: url("resource:/res/table-add-column-before.gif"); + background-repeat: no-repeat; + background-position: center center; + -moz-user-select: none !important; + -moz-user-focus: none !important; +} + +a[\_moz_anonclass="mozTableAddColumnBefore"]:hover { + background-image: url("resource:/res/table-add-column-before-hover.gif"); +} + +a[\_moz_anonclass="mozTableAddColumnBefore"]:active { + background-image: url("resource:/res/table-add-column-before-active.gif"); +} + +a[\_moz_anonclass="mozTableAddColumnAfter"] { + position: absolute; + z-index: 2147483647; /* max value for this property */ + text-decoration: none !important; + border: none 0px !important; + width: 4px; + height: 8px; + background-image: url("resource:/res/table-add-column-after.gif"); + background-repeat: no-repeat; + background-position: center center; + -moz-user-select: none !important; + -moz-user-focus: none !important; +} + +a[\_moz_anonclass="mozTableAddColumnAfter"]:hover { + background-image: url("resource:/res/table-add-column-after-hover.gif"); +} + +a[\_moz_anonclass="mozTableAddColumnAfter"]:active { + background-image: url("resource:/res/table-add-column-after-active.gif"); +} + +a[\_moz_anonclass="mozTableRemoveColumn"] { + position: absolute; + z-index: 2147483647; /* max value for this property */ + text-decoration: none !important; + border: none 0px !important; + width: 8px; + height: 8px; + background-image: url("resource:/res/table-remove-column.gif"); + background-repeat: no-repeat; + background-position: center center; + -moz-user-select: none !important; + -moz-user-focus: none !important; +} + +a[\_moz_anonclass="mozTableRemoveColumn"]:hover { + background-image: url("resource:/res/table-remove-column-hover.gif"); +} + +a[\_moz_anonclass="mozTableRemoveColumn"]:active { + background-image: url("resource:/res/table-remove-column-active.gif"); +} + +a[\_moz_anonclass="mozTableAddRowBefore"] { + position: absolute; + z-index: 2147483647; /* max value for this property */ + text-decoration: none !important; + border: none 0px !important; + width: 8px; + height: 4px; + background-image: url("resource:/res/table-add-row-before.gif"); + background-repeat: no-repeat; + background-position: center center; + -moz-user-select: none !important; + -moz-user-focus: none !important; +} + +a[\_moz_anonclass="mozTableAddRowBefore"]:hover { + background-image: url("resource:/res/table-add-row-before-hover.gif"); +} + +a[\_moz_anonclass="mozTableAddRowBefore"]:active { + background-image: url("resource:/res/table-add-row-before-active.gif"); +} + +a[\_moz_anonclass="mozTableAddRowAfter"] { + position: absolute; + z-index: 2147483647; /* max value for this property */ + text-decoration: none !important; + border: none 0px !important; + width: 8px; + height: 4px; + background-image: url("resource:/res/table-add-row-after.gif"); + background-repeat: no-repeat; + background-position: center center; + -moz-user-select: none !important; + -moz-user-focus: none !important; +} + +a[\_moz_anonclass="mozTableAddRowAfter"]:hover { + background-image: url("resource:/res/table-add-row-after-hover.gif"); +} + +a[\_moz_anonclass="mozTableAddRowAfter"]:active { + background-image: url("resource:/res/table-add-row-after-active.gif"); +} + +a[\_moz_anonclass="mozTableRemoveRow"] { + position: absolute; + z-index: 2147483647; /* max value for this property */ + text-decoration: none !important; + border: none 0px !important; + width: 8px; + height: 8px; + background-image: url("resource:/res/table-remove-row.gif"); + background-repeat: no-repeat; + background-position: center center; + -moz-user-select: none !important; + -moz-user-focus: none !important; +} + +a[\_moz_anonclass="mozTableRemoveRow"]:hover { + background-image: url("resource:/res/table-remove-row-hover.gif"); +} + +a[\_moz_anonclass="mozTableRemoveRow"]:active { + background-image: url("resource:/res/table-remove-row-active.gif"); +} + +nvu|php, nvu|comment { + display: none ! important; +} diff --git a/base/content/bluegriffon/Thumbs.db b/base/content/bluegriffon/Thumbs.db new file mode 100644 index 0000000000000000000000000000000000000000..7378b0fb2e44079e7fb87c7a99fcea6043964315 GIT binary patch literal 12288 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 literal 0 HcmV?d00001 diff --git a/base/content/bluegriffon/about-logo.png b/base/content/bluegriffon/about-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..79984d4eee27c168313c72b935a5a2adb066eb9d GIT binary patch literal 19788 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 literal 0 HcmV?d00001 diff --git a/base/content/bluegriffon/aboutDialog.css b/base/content/bluegriffon/aboutDialog.css new file mode 100644 index 0000000..d721fea --- /dev/null +++ b/base/content/bluegriffon/aboutDialog.css @@ -0,0 +1,61 @@ + #aboutDialog { + padding: 0px 0px 10px 0px; + width: 299px; + } + + #clientBox { + background-color: #FFFFFF; + padding: 0px; + margin: 0px; + color: #000000; + } + + #brandName { + font-weight: bold; font-size: larger; + } + + #detailsBox { + padding: 8px 10px 0px 8px; + } + + #userAgent { + margin: 3px 10px 10px 5px; + background-color: #FFFFFF; + color: #000000; + padding: 1px 0px 0px 3px; + -moz-appearance: none; + height: 4em; + border: 0px; + } + + #groove { + margin-top: 0px; + } + + #creditsIframe { + cursor: default; + -moz-user-select: none; + border: 0px; + } + + #version { + font-weight: bold; + color: #909090; + margin: 1em 0px 10px 17px; + } + + #copyright { + margin: 0px 0px 3px 16px; + } + + button[dlgtype="extra2"] { + margin-left: 13px; + } + + button[dlgtype="accept"] { + margin-right: 13px; + } + +* { + overflow: hidden; +} \ No newline at end of file diff --git a/base/content/bluegriffon/bindings/cssToggler.xml b/base/content/bluegriffon/bindings/cssToggler.xml new file mode 100644 index 0000000..83c4caf --- /dev/null +++ b/base/content/bluegriffon/bindings/cssToggler.xml @@ -0,0 +1,370 @@ + + + + + + %cssTogglerDTD; +]> + + + + + + + + + + + + + + + + + + + + + + + &mandatoryId.description; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/base/content/bluegriffon/bindings/ecolorpicker.xml b/base/content/bluegriffon/bindings/ecolorpicker.xml new file mode 100644 index 0000000..13759dd --- /dev/null +++ b/base/content/bluegriffon/bindings/ecolorpicker.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + try { + Components.utils.import("resource://gre/modules/colourPickerHelper.jsm"); + } catch (e) {} + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/base/content/bluegriffon/bindings/filepickerbutton.css b/base/content/bluegriffon/bindings/filepickerbutton.css new file mode 100644 index 0000000..8fcd1fb --- /dev/null +++ b/base/content/bluegriffon/bindings/filepickerbutton.css @@ -0,0 +1,19 @@ +@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); + +filepickerbutton { + margin: 0px; + padding: 0px; + list-style-image: url('chrome://bluegriffon/skin/icons/filePicking.png'); +} + +filepickerbutton:hover { + margin: 0px; + padding: 0px; + list-style-image: url('chrome://bluegriffon/skin/icons/filePicking-hover.png'); +} + +.toolbarbutton-icon { + min-width: 0px; + padding: 0px; + margin: 2px ! important; +} diff --git a/base/content/bluegriffon/bindings/filepickerbutton.xml b/base/content/bluegriffon/bindings/filepickerbutton.xml new file mode 100644 index 0000000..d0fc2c4 --- /dev/null +++ b/base/content/bluegriffon/bindings/filepickerbutton.xml @@ -0,0 +1,144 @@ + + + + + + %filepickerbuttonDTD; +]> + + + + + + + + + + + + + + + + + + + + + + + null + Components.interfaces.nsIFilePicker + + + + + + + + + + + + + + + + + + + + + + + + + 0) + { + var spec = this.fp.fileURL.spec; + if (this.hasAttribute("processor")) + spec = eval(this.getAttribute("processor") + "(spec)"); + this.setAttribute("value", spec); + if (this.hasAttribute("control")) + { + var c = document.getElementById(this.getAttribute("control")); + c.value = spec; + } + } + } + catch(e) {} + ]]> + + + + + + diff --git a/base/content/bluegriffon/bindings/multistate.css b/base/content/bluegriffon/bindings/multistate.css new file mode 100644 index 0000000..641099c --- /dev/null +++ b/base/content/bluegriffon/bindings/multistate.css @@ -0,0 +1,40 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is BlueGriffon. + * + * The Initial Developer of the Original Code is + * Disruptive Innovations SARL. + * Portions created by the Initial Developer are Copyright (C) 2007 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Daniel Glazman (daniel.glazman@disruptive-innovations.com), Original Author + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the LGPL or the GPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +state { + display: none; +} diff --git a/base/content/bluegriffon/bindings/multistate.xml b/base/content/bluegriffon/bindings/multistate.xml new file mode 100644 index 0000000..d7b9ac6 --- /dev/null +++ b/base/content/bluegriffon/bindings/multistate.xml @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/base/content/bluegriffon/bindings/rulers.xml b/base/content/bluegriffon/bindings/rulers.xml new file mode 100644 index 0000000..2f1c1d5 --- /dev/null +++ b/base/content/bluegriffon/bindings/rulers.xml @@ -0,0 +1,420 @@ + + + + + + + + + + + + + + + + "http://www.w3.org/2000/svg" + + 0 + 0 + null + null + false + null + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 0 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + foo + + + + + + + + + + + + diff --git a/base/content/bluegriffon/bindings/sidebar.css b/base/content/bluegriffon/bindings/sidebar.css new file mode 100644 index 0000000..1dd7f23 --- /dev/null +++ b/base/content/bluegriffon/bindings/sidebar.css @@ -0,0 +1,55 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is BlueGriffon. + * + * The Initial Developer of the Original Code is + * Disruptive Innovations SARL. + * Portions created by the Initial Developer are Copyright (C) 2006 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Daniel Glazman , Original author + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); + +sidebar { + width: 200px; + -moz-box-orient: vertical; + -moz-binding: url('chrome://bluegriffon/content/bindings/sidebar.xml#sidebar'); +} + +sidebarcontent { + -moz-box-orient: vertical; + -moz-binding: url('chrome://bluegriffon/content/bindings/sidebar.xml#sidebarcontent'); + -moz-box-flex: 1; +} + +sidebaritems { + -moz-binding: url('chrome://bluegriffon/content/bindings/sidebar.xml#sidebaritems'); + display: none ! important; +} diff --git a/base/content/bluegriffon/bindings/sidebar.xml b/base/content/bluegriffon/bindings/sidebar.xml new file mode 100644 index 0000000..bfb0d62 --- /dev/null +++ b/base/content/bluegriffon/bindings/sidebar.xml @@ -0,0 +1,815 @@ + + + + + + %sidebarDTD; +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" + + null + null + null + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/base/content/bluegriffon/bindings/structurebar.css b/base/content/bluegriffon/bindings/structurebar.css new file mode 100644 index 0000000..65ad7f0 --- /dev/null +++ b/base/content/bluegriffon/bindings/structurebar.css @@ -0,0 +1,78 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is BlueGriffon. + * + * The Initial Developer of the Original Code is + * Disruptive Innovations SARL. + * Portions created by the Initial Developer are Copyright (C) 2006 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Daniel Glazman , Original author + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); + +structurebar { + -moz-binding: url("chrome://bluegriffon/content/bindings/structurebar.xml#structurebar"); + overflow: -moz-hidden-unscrollable; + min-width: 1px; + -moz-box-pack: end; +} + +toolbarbutton { + padding: 0px; +} + +autorepeatbutton { + -moz-border-radius: 3px; + width: 1.5em; +} + +.autorepeatbutton-up { + margin-right: 1em; +} + +.autorepeatbutton-down { + margin-left: 1em; +} + +autorepeatbutton:not([disabled]) { + background-color: #e0e0e0; +} + +autorepeatbutton[disabled]:hover, +autorepeatbutton[disabled]:hover:active { + -moz-box-align: center; + -moz-box-pack: center; + margin-top: 1px; + margin-bottom: 2px; + -moz-margin-start: 1px; + -moz-margin-end: 2px; + border: 1px solid transparent; + padding: 1px; +} diff --git a/base/content/bluegriffon/bindings/structurebar.xml b/base/content/bluegriffon/bindings/structurebar.xml new file mode 100644 index 0000000..aba1789 --- /dev/null +++ b/base/content/bluegriffon/bindings/structurebar.xml @@ -0,0 +1,172 @@ + + + + + + %structurebarDTD; +]> + + + + + + + + + + + + null + + + + + + + " + + newLabel.setAttribute("label", text); + if (aOneElementSelected && aNode == node) + newLabel.setAttribute("checked", "true"); + + newLabel.setUserData("node", node, null); + newLabel.setAttribute("context", "structureBarContextMenu"); + + this.insertBefore(newLabel, this.firstChild); + + node = node.parentNode; + } + + // make sure the deepest element is visible; + // we always have a lastChild here + var lastButton = this.lastChild.previousSibling; + if (lastButton) + this.ensureElementIsVisible(lastButton); + ]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/base/content/bluegriffon/bindings/tabeditor.xml b/base/content/bluegriffon/bindings/tabeditor.xml new file mode 100644 index 0000000..299ae74 --- /dev/null +++ b/base/content/bluegriffon/bindings/tabeditor.xml @@ -0,0 +1,502 @@ + + + + + + %tabEditorDTD; +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1) + { + var value = (100 * this._requestsFinished) / this._requestsStarted; + if (progress) + progress.setAttribute("mode", "determined"); + if (progress) + progress.setAttribute("value", value + "%"); + } + } + + if (aStateFlags & nsIWebProgressListener.STATE_IS_NETWORK) + { + if (aStateFlags & nsIWebProgressListener.STATE_START) + { + if (statusbarDeck) + statusbarDeck.selectedPanel = document.getElementById("progressBar"); + if (progress) + progress.setAttribute("style", ""); + this.mTab.setAttribute("busy", "true"); + } + else if (aStateFlags & nsIWebProgressListener.STATE_STOP) + { + if (progress) + progress.setAttribute("style", "display: none"); + this.onStatusChange(aWebProgress, aRequest, 0, "Done"); + this._requestsStarted = this._requestsFinished = 0; + + this.mTab.removeAttribute("busy"); + + if (statusbarDeck) + statusbarDeck.selectedPanel = document.getElementById("editorBar"); + + var editor = this.mEditor.getEditor(this.mEditor.contentWindow); + if (editor && !this.mEditorSheets) + { + this.mEditorSheets = true; + editor instanceof Components.interfaces.nsIPlaintextEditor; + editor instanceof Components.interfaces.nsIHTMLEditor; + editor instanceof Components.interfaces.nsIEditorStyleSheets; + + editor.addOverrideStyleSheet("chrome://bluegriffon/content/EditorContent.css"); + editor.addOverrideStyleSheet("chrome://bluegriffon/content/EditorOverride.css"); + + editor.selection.QueryInterface(Components.interfaces.nsISelectionPrivate). + addSelectionListener(ComposerCommands.selectionListener); + } + if (editor) + { + var source = new ActiveSourceTree(this.mEditor); + var sourceElt = source.mSourceTreeXULElement; + } + } + window.updateCommands("navigation"); + window.updateCommands("create"); + + NotifierUtils.notify("tabCreated"); + RecentPagesHandler.saveRecentFilesPrefs(); + } + }, + + + onProgressChange : function(aWebProgress, aRequest, + aCurSelfProgress, aMaxSelfProgress, + aCurTotalProgress, aMaxTotalProgress) + { + }, + + onLocationChange : function(aWebProgress, aRequest, aLocation) + { + }, + + onStatusChange : function(aWebProgress, aRequest, aStatus, aMessage) + { + var status = document.getElementById("status"); + if (status) status.setAttribute("label", aMessage); + }, + + onSecurityChange : function(aWebProgress, aRequest, aState) + { + }, + + _requestsStarted: 0, + _requestsFinished: 0, + + mTabeditor: null, + mEditor: null, + mEditorSheets: false, + mURL: null, + mTab: null + }; + + this.mHruler.removeAttribute("disabled"); + this.mHruler.addObject("foo", 50, 200); + this.mVruler.removeAttribute("disabled"); + + var newEditorElement = this._newEditor(); + + var newTab = this.mTabs.appendItem(aTitle, + UrlUtils.stripUsernamePassword(aURL, null, null)); + newTab.setAttribute("label", aTitle); + newTab.setAttribute("class", "tabeditor-tab"); + newTab.setAttribute("maxwidth", 200); + newTab.setAttribute("width", 0); + newTab.setAttribute("minwidth", 30); + newTab.setAttribute("flex", 100); + newTab.setAttribute("crop", "end"); + + this.mTabpanels.appendChild(newEditorElement); + + newEditorElement.makeEditable("html", true); + + var docShell = newEditorElement.boxObject.QueryInterface(Components.interfaces.nsIEditorBoxObject).docShell; + var progress = docShell.QueryInterface(Components.interfaces.nsIInterfaceRequestor).getInterface(Components.interfaces.nsIWebProgress); + var progressListener = new EditorContentListener(this, newEditorElement, aURL, newTab); + progress.addProgressListener(progressListener, Components.interfaces.nsIWebProgress.NOTIFY_ALL); + + newEditorElement.addEventListener("pageshow", function(evt) { if (evt.originalTarget == content.document){} }, true); + newEditorElement.addEventListener("DOMTitleChanged", this.changeTabTitle, false); + + // select that new tab + this.selectedTab = newTab; + this.selectedIndex = this.mTabpanels.childNodes.length - 1; + window.EditorLoadUrl(newEditorElement, aURL); + + this.setAttribute("visibility", "visible"); + ComposerCommands.setupFormatCommands(); + + return {tab: newTab, panel: newEditorElement}; + ]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/base/content/bluegriffon/blanks/strict.html b/base/content/bluegriffon/blanks/strict.html new file mode 100644 index 0000000..6ca2cbf --- /dev/null +++ b/base/content/bluegriffon/blanks/strict.html @@ -0,0 +1,12 @@ + + + + + + + +


+ + diff --git a/base/content/bluegriffon/blanks/strict.xhtml b/base/content/bluegriffon/blanks/strict.xhtml new file mode 100644 index 0000000..0320ea3 --- /dev/null +++ b/base/content/bluegriffon/blanks/strict.xhtml @@ -0,0 +1,10 @@ + + + + + + + +


+ + diff --git a/base/content/bluegriffon/blanks/transitional.html b/base/content/bluegriffon/blanks/transitional.html new file mode 100644 index 0000000..96df1b1 --- /dev/null +++ b/base/content/bluegriffon/blanks/transitional.html @@ -0,0 +1,12 @@ + + + + + + + +
+ + diff --git a/base/content/bluegriffon/blanks/transitional.xhtml b/base/content/bluegriffon/blanks/transitional.xhtml new file mode 100644 index 0000000..5c221b3 --- /dev/null +++ b/base/content/bluegriffon/blanks/transitional.xhtml @@ -0,0 +1,11 @@ + + + + + + + +
+ + diff --git a/base/content/bluegriffon/brightness.png b/base/content/bluegriffon/brightness.png new file mode 100644 index 0000000000000000000000000000000000000000..7ab48e6e17e979ab5d816b6b38b75177a000a806 GIT binary patch literal 475 zcmV<10VMv3P)X1^@s6bUI-a00004XF*Lt006O% z3;baP00006VoOIv0RI600RN!9r;`8x010qNS#tmY3lIPR3lIUVBfWJ1000McNliru z(+mU&DlsF7N$LOq0a!^yK~#90?VC%Eg&+_B>4v@czpOnQFsR_j8$U3wDj^8nAPY;> zL~+iU+hbX6mG*D_wK6xv=F+i<2ZO7VFbq*mcIi>tmQag|3W3oKU zW8VAKJe$~ROe`*s$Mc!0x>zrH(=_c|(1IKQO_-JLvHj0|1_Xhx<&1m?0+;aio&GKm z1iI%<`49wNVU!&QL2gDw-d+Oy0R(|VM*Tu{)!YaIZ~%e;9DpEjIla7qU$G7Zfm8ga zi@pT}fhO*_K%abBZ~dx>AONl|DS|*3^zsO|1wmj)o)QW{01iM9xRqWXoz8+FFf32V zham7Zd?FNrz|h>iiy#Pm#HjBUt?NdRff?yvlTn325a^O#{uMzGc#IKukst6u67wU) RMj-$I002ovPDHLkV1kF4zsmps literal 0 HcmV?d00001 diff --git a/base/content/bluegriffon/colourPickerArrow.gif b/base/content/bluegriffon/colourPickerArrow.gif new file mode 100644 index 0000000000000000000000000000000000000000..f3432cbf99ad918927992d0b0f8413f763c0d288 GIT binary patch literal 831 zcmc(eEl#dc41|Y-@M{oALW0NDaD%!C2)h8&AXx%IumqAO2zJ0-0EXlWL_HcdK~Tff zmql>g`PxpOne%>U=ch-1F1NL&PyL*bQYxt>a|uN#Llx?fsih*7sY-Rqw3ecjr7CsF zOtzwxt!j14MoVF(RaSd$NTZDy)3keTb26eLI>Kz_l93se(HRDUT18e=MOPRmT063% zI=aI^qvc3PIoh)pXtbaP6E2EuMjCCznD!KB6Q?pe)7WDxm&&T_O5+v?YMs^DohA+_ z8FrSlJ^qLTN`}dU0HDAk&}cyoCcS{L8ELc;^Yo4-e&BSK$q{>O<hrPu&N=v6U6I~& oIP2#>p^ZH~ZSG!OJpR31+uDD=|M&iKx3hlo@Ou66|3*6g1`r)numAu6 literal 0 HcmV?d00001 diff --git a/base/content/bluegriffon/colourPickerCrosshair.gif b/base/content/bluegriffon/colourPickerCrosshair.gif new file mode 100644 index 0000000000000000000000000000000000000000..aca98c49c1fedef0bd38d29be473e5951f3a2111 GIT binary patch literal 839 zcmc(eF-o0L5QR@bA>j!&LLl7(D>2nHicP8*A%#m&l))vWwGdk^r?a$k4IwF~6kJM3 zb^PXc5#H{;nK|>FbN_dI^8MiOe5IBC>FtD+Qb{eDODIAas!)eaEfuLuRjN~_wG^c+ zRjEs6vK6gtRjXSzS_&(zvf6V)8g0awrrmR!lMxls5oRlwjLfKv&M*+vDzc&~y23Eg z+L0aA(H#aFEk`=a(Vn$HqXjjXa8YD4(r6>bw5K?mIF;F%#vWU_R90nI8n-}D>#WZ1 zG;u)5u(O=)@kbm`GE5!>00kC-Mhj{%=>>$%NTZFIr*|yz1E;G@j@V->m#*$ILE|4R zx?SxFlA!Sq7TqL`U9uz&C>bUXpm2;upwWVwQMdqMGty{#MkhP!{J=3!NU|7)gR++w zo6lhkFE32Y^P)`nap7Pdis<55KQBx4-;+ygU1I`?B@p^5A~`_vZ80z2{%27vH3#SHsFx AVE_OC literal 0 HcmV?d00001 diff --git a/base/content/bluegriffon/credits.xhtml b/base/content/bluegriffon/credits.xhtml new file mode 100644 index 0000000..36114ff --- /dev/null +++ b/base/content/bluegriffon/credits.xhtml @@ -0,0 +1,355 @@ + + + + %brandDTD; + + %creditsDTD; + + %licenseDTD; + ] +> + + + + + &brandFullName; Credits + + + + + + + +
+

&brandFullName; +
&brandMotto;
+

+ +
+ +
+ +
+

&credit.leads;

+
    +
  • Daniel Glazman
  • +
+ +

&credit.contributors;

+
    +
  • Laurent Jouanneau
  • +
+ + &credit.translation; +
+ +

&credit.poweredByGecko;

+ +

+ &brandFullName;™ &tm.part0; Disruptive Innovations SARL. +

+

+ &brandFullName;™ &license.part0; copyright ©1998-2009 &license.part1; + &license.contrib;, + &license.part2; + Mozilla Public License + &license.and; + Netscape Public License&license.part3;

+ +

+ Portions of this software are Copyright ©1994 The Regents of the + University of California. All Rights Reserved.

+ +

The Yahoo! UI Library is copyright (c) 2008, Yahoo! Inc.

+
+

Copyright + (c) 2008, Yahoo! Inc. All rights reserved.

+

Redistribution and use of this software in source and binary forms, + with or without modification, are permitted provided that the following + conditions are met:

+
    +
  • Redistributions of source + code must retain the above copyright notice, this list of conditions + and the following disclaimer.
  • +
  • Redistributions in binary + form must reproduce the above copyright notice, this list of conditions + and the following disclaimer in the documentation and/or other + materials provided with the distribution.
  • +
  • Neither the name of Yahoo! + Inc. nor the names of its contributors may be used to endorse or + promote products derived from this software without specific prior + written permission of Yahoo! Inc.
  • +
+

THIS SOFTWARE IS PROVIDED BY + THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+
+ +

jQuery is copyright (c) 2008 John Resig.

+
+

Copyright (c) 2008 John Resig, http://jquery.com/

+

Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions:

+

The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software.

+

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+
+ +

+ This software may contain portions that are Copyright ©1998-2005 + SupportSoft, Inc. All Rights Reserved.

+ + + +

+ U.S. GOVERNMENT END USERS. The Software is a “commercial item,” + as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of + “commercial computer software” and “commercial computer software + documentation,” as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). + Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through + 227.7202-4 (June 1995), all U.S. Government End Users acquire the + Software with only those rights set forth herein.

+ +
+ + + + diff --git a/base/content/bluegriffon/dialogs/insertTable.js b/base/content/bluegriffon/dialogs/insertTable.js new file mode 100644 index 0000000..b0e0afd --- /dev/null +++ b/base/content/bluegriffon/dialogs/insertTable.js @@ -0,0 +1,283 @@ + +var gCellID = 12; +var gActiveEditor = null; +var gPrefs = null; + +function Startup() +{ + gActiveEditor = EditorUtils.getCurrentTableEditor(); + if (!gActiveEditor) + { + dump("Failed to get active editor!\n"); + window.close(); + return; + } + + GetUIElements(); + SetWidthTextBoxMax(null); + gDialog.cssToggler.init(); +} + +function SetWidthTextBoxMax(aElt) +{ + var defaultWidth_unit; + if (aElt) + { + defaultWidth_unit = aElt.getAttribute("value"); + } + else + { + gPrefs = GetPrefs(); + if (!gPrefs) + return; + + defaultWidth_unit = gPrefs.getCharPref("bluegriffon.defaults.table.width_unit"); + } + + if (defaultWidth_unit == "percentage") + gDialog.widthInput.setAttribute("max", "100"); + else + gDialog.widthInput.removeAttribute("max"); + var foo = gDialog.widthInput.value; + gDialog.widthInput.value = foo; +} + +function SelectArea(cell) +{ + if (gDialog.sizeSelector.hasAttribute("disabled")) + return; + var cellID = cell.id; + var numCellID = Number(cellID.substr(1)); + + // early way out if we can... + if (gCellID == numCellID) + return; + + gCellID = numCellID; + + var i, anyCell; + for (i = 1; i < 60; i += 10) + { + anyCell = gDialog["c"+i]; + while (anyCell) + { + anyCell.removeAttribute("class"); + anyCell = anyCell.nextSibling; + } + } + + for (i = numCellID; i > 0; i -= 10) + { + anyCell = gDialog["c"+i]; + while (anyCell) + { + anyCell.setAttribute("class", "selected"); + anyCell = anyCell.previousSibling; + } + } + ShowSize(); +} + +function ShowSize() +{ + var columns = (gCellID % 10); + var rows = Math.ceil(gCellID / 10); + gDialog.sizeLabel.value = rows + " x " + columns; +} + +function CreateRowsAndCells(aTbody, aAttributes) +{ + // Create necessary rows and cells for the table + for (var i = 0; i < gDialog.rowsInput.value; i++) + { + var newRow = gActiveEditor.document.createElement("tr"); + if (newRow) + { + aTbody.appendChild(newRow); + for (var j = 0; j < gDialog.columnsInput.value; j++) + { + var newCell = gActiveEditor.document.createElement("td"); + if (aAttributes) + for (var k = 0; k < aAttributes.length; k++) + { + var attr = aAttributes[k]; + newCell.setAttribute(attr.name, attr.value); + } + if (newCell) + { + newRow.appendChild(newCell); + } + } + } + } +} + +function onAccept() +{ + var wrapping = gDialog.textWrapping.selectedItem.value; + var align = gDialog.horizAlignment.value; + var valign = gDialog.vertAlignment.value; + var cellSpacing = gDialog.cellSpacing.value; + var cellPadding = gDialog.cellPadding.value; + + var useCSS = CssUtils.getUseCSSPref(); + + gActiveEditor.beginTransaction(); + + var tableElement = gActiveEditor.document.createElement("table"); + var tableBody = gActiveEditor.document.createElement("tbody"); + + if (tableBody) + { + + tableElement.appendChild(tableBody); + + switch(useCSS) + { + case 0: + tableElement.setAttribute("border", gDialog.borderInput.value); + tableElement.setAttribute("width", Number(gDialog.widthInput.value) + + (gDialog.widthPixelOrPercentMenulist.value == "pixels" ? "" : "%")); + tableElement.setAttribute("cellpadding", gDialog.cellSpacing.value); + tableElement.setAttribute("cellspacing", gDialog.cellPadding.value); + { + var attributes = []; + if (gDialog.horizAlignment.value) + attributes.push( { name: "align", + value: gDialog.horizAlignment.value }); + if (gDialog.vertAlignment.value) + attributes.push( { name: "valign", + value: gDialog.vertAlignment.value }); + if (gDialog.textWrapping.value) + attributes.push( { name: "nowrap", + value: "nowrap" }); + } + CreateRowsAndCells(tableBody, attributes); + break; + + case 1: + { + var styleAttr = "width: " + Number(gDialog.widthInput.value) + + (gDialog.widthPixelOrPercentMenulist.value == "pixels" ? "px" : "%") + + ";"; + styleAttr += "border-spacing: " + gDialog.cellPadding.value + "px;"; + styleAttr += "border: outset " + gDialog.borderInput.value + "px;"; + styleAttr += "border-collapse: " + (gDialog.collapseBorders.checked ? "collapse;" : "separat;e"); + styleAttr += "empty-cells: " + (gDialog.hideEmptyCells.checked ? "hide;" : "show;"); + styleAttr += "table-layout: " + (gDialog.fixedLayout.checked ? "fixed;" : "auto;"); + if (gDialog.horizAlignment.value) + styleAttr += "text-align:" + gDialog.horizAlignment.value + ";"; + tableElement.setAttribute("style", styleAttr); + + styleAttr = ""; + if (gDialog.vertAlignment.value) + styleAttr += "vertical-align: " + gDialog.vertAlignment.value + ";"; + if (gDialog.textWrapping.value) + styleAttr += "white-space: nowrap;"; + if (gDialog.cellPadding.value) + styleAttr += "padding: " + gDialog.cellPadding.value + "px;"; + if (gDialog.borderInput.value != "0") + styleAttr += "border: inset 1px;"; + if (styleAttr) + CreateRowsAndCells(tableBody, [ { name: "style", + value: styleAttr} ] ); + else + CreateRowsAndCells(tableBody, null); + + } + break; + + case 2: + { + CreateRowsAndCells(tableBody, null); + // first, build the selector we're going to use + var cssToggler = gDialog.cssToggler; + var selectorText = (cssToggler.newID ? '#' + cssToggler.newID : "") + + (cssToggler.newClass? '.' + cssToggler.newClass : ""); + var tableProperties = [ + { priority: false, property: "border", + value: "outset " + gDialog.borderInput.value + "px" }, + { priority: false, property: "border-spacing", + value: gDialog.cellPadding.value + "px" }, + { priority: false, property: "width", + value: Number(gDialog.widthInput.value) + + (gDialog.widthPixelOrPercentMenulist.value == "pixels" ? "px" : "%") }, + { priority: false, property: "text-align", + value: gDialog.horizAlignment.value }, + { priority: false, property: "border-collapse", + value: (gDialog.collapseBorders.checked ? "collapse" : "separate") }, + { priority: false, property: "empty-cells", + value: (gDialog.hideEmptyCells.checked ? "hide" : "show") }, + { priority: false, property: "table-layout", + value: (gDialog.fixedLayout.checked ? "fixed" : "auto") } + ]; + CssUtils.addRuleForSelector(gActiveEditor.document, + selectorText, + tableProperties); + if (cssToggler.newID) + tableElement.setAttribute("id", cssToggler.newID); + if (cssToggler.newClass) + tableElement.setAttribute("class", cssToggler.newClass); + + var cellProperties = []; + if (gDialog.vertAlignment.value) + cellProperties.push( { priority: false, + property: "vertical-align", + value: gDialog.vertAlignment.value } ); + + if (gDialog.textWrapping.value) + cellProperties.push( { priority: false, + property: "white-space", + value: "nowrap" } ); + + if (gDialog.cellPadding.value) + cellProperties.push( { priority: false, + property: "padding", + value: gDialog.cellPadding.value + "px" } ); + + if (gDialog.borderInput.value != "0") + cellProperties.push( { priority: false, + property: "border", + value: "inset 1px" } ); + cellSelectorText = selectorText + " > * > tr > *"; + CssUtils.addRuleForSelector(gActiveEditor.document, + cellSelectorText + "", + cellProperties); + } + break; + + case 3: + CreateRowsAndCells(tableBody, null); + if (gDialog.cssToggler.reusedID) + tableElement.setAttribute("id", gDialog.cssToggler.reusedID); + if (gDialog.cssToggler.reusedClass) + tableElement.setAttribute("class", gDialog.cssToggler.reusedClass); + break; + + default: // we should never hit this one + break + } + + // true means delete selection when inserting + gActiveEditor.insertElementAtSelection(tableElement, true); + + + } + gActiveEditor.endTransaction(); +} + +function SelectSize(cell) +{ + if (document.documentElement.getButton("accept").hasAttribute("disabled")) + return; + + var columns = (gCellID % 10); + var rows = Math.ceil(gCellID / 10); + + gDialog.rowsInput.value = rows; + gDialog.columnsInput.value = columns; + + onAccept(); + window.close(); +} + diff --git a/base/content/bluegriffon/dialogs/insertTable.xul b/base/content/bluegriffon/dialogs/insertTable.xul new file mode 100644 index 0000000..5e5246e --- /dev/null +++ b/base/content/bluegriffon/dialogs/insertTable.xul @@ -0,0 +1,310 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/base/content/bluegriffon/utils/colors.js b/base/content/bluegriffon/utils/colors.js new file mode 100644 index 0000000..e50c917 --- /dev/null +++ b/base/content/bluegriffon/utils/colors.js @@ -0,0 +1,94 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Mozilla Communicator client code. + * + * The Initial Developer of the Original Code is + * Netscape Communications Corporation. + * Portions created by the Initial Developer are Copyright (C) 1998 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Pete Collins + * Brian King + * Daniel Glazman (glazman@disruptive-innovations.com), on behalf of Linspire Inc. + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the NPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the NPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +var ColorUtils = { + getDefaultBrowserColors: function() + { + var prefs = GetPrefs(); + var colors = { UseSysColors: true, + TextColor:0, + BackgroundColor:0, + LinkColor:0, + ActiveLinkColor:0 , + VisitedLinkColor:0 }; + try { colors.UseSysColors = prefs.getBoolPref("browser.display.use_system_colors"); } catch (e) {} + + if (!colors.UseSysColors) + { + try { colors.TextColor = prefs.getCharPref("browser.display.foreground_color"); } catch (e) {} + + try { colors.BackgroundColor = prefs.getCharPref("browser.display.background_color"); } catch (e) {} + } + // Use OS colors for text and background if explicitly asked or pref is not set + if (!colors.TextColor) + colors.TextColor = "windowtext"; + + if (!colors.BackgroundColor) + colors.BackgroundColor = "window"; + + colors.LinkColor = prefs.getCharPref("browser.anchor_color"); + colors.ActiveLinkColor = prefs.getCharPref("browser.active_color"); + colors.VisitedLinkColor = prefs.getCharPref("browser.visited_color"); + + return colors; + }, + + getDocumentColors: function(aDocument) + { + var colors = { UseSysColors: true, + TextColor:0, + BackgroundColor:0, + LinkColor:0, + ActiveLinkColor:0 , + VisitedLinkColor:0 }; + var editor = EditorUtils.getCurrentEditor(); + var bodyElt = editor.rootElement; + var doc = editor.document; + + var dummyAnchor1 = doc.createElement("a"); + dummyAnchor1.setAttribute("href", "foo"); + var dummyAnchor1 = doc.createElement("a"); + dummyAnchor1.setAttribute("href", "foo"); + }, + + getComputedColor: function(aElt) + { + + } +}; diff --git a/base/content/bluegriffon/utils/css.js b/base/content/bluegriffon/utils/css.js new file mode 100644 index 0000000..3f3e697 --- /dev/null +++ b/base/content/bluegriffon/utils/css.js @@ -0,0 +1,312 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is BlueGriffon. + * + * The Initial Developer of the Original Code is + * Disruptive Innovations SARL. + * Portions created by the Initial Developer are Copyright (C) 2006 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Daniel Glazman , Original author + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +var CssUtils = { + getStyleSheets: function CssUtils_getStyleSheets(aDoc) + { + return aDoc.styleSheets; + }, + + _enumerateStyleSheet: function CssUtils__enumerateStyleSheet(aSheet, aCallback) + { + if (aCallback(aSheet)) + return; + var rules = aSheet.cssRules; + for (var j = 0; j < rules.length; j++) + { + var rule = rules.item(j); + switch (rule.type) + { + case CSSRule.IMPORT_RULE: + this._enumerateStyleSheet(rule.styleSheet, aCallback); + break; + case CSSRule.MEDIA_RULE: + this._enumerateStyleSheet(rule, aCallback); + break; + default: + break; + } + + } + }, + + enumerateStyleSheets: function CssUtils_enumerateStyleSheets(aDocument, aCallback) + { + var stylesheetsList = aDocument.styleSheets; + for (var i = 0; i < stylesheetsList.length; i++) + { + var sheet = stylesheetsList.item(i); + this._enumerateStyleSheet(sheet, aCallback); + } + }, + + getComputedStyle: function CssUtils_getComputedStyle(aElt) + { + return aElt.ownerDocument.defaultView.getComputedStyle(aElt, ""); + }, + + findClassesInSelector: function CssUtils_findClassesInSelector(aSelector) + { + return aSelector.match( /\.-?([_a-z]|[\200-\377]|((\\[0-9a-f]{1,6}(\r\n|[ \t\r\n\f])?)|\\[^\r\n\f0-9a-f]))([_a-z0-9-]|[\200-\377]|((\\[0-9a-f]{1,6}(\r\n|[ \t\r\n\f])?)|\\[^\r\n\f0-9a-f]))*/gi ); + }, + + findIdsInSelector: function CssUtils_findClassesInSelector(aSelector) + { + return aSelector.match( /#-?([_a-z]|[\200-\377]|((\\[0-9a-f]{1,6}(\r\n|[ \t\r\n\f])?)|\\[^\r\n\f0-9a-f]))([_a-z0-9-]|[\200-\377]|((\\[0-9a-f]{1,6}(\r\n|[ \t\r\n\f])?)|\\[^\r\n\f0-9a-f]))*/gi ); + }, + + getCssHintsFromDocument: function CssUtils_getAllClassesFromDocument(aDocument, aDetector) + { + var classList = []; + + function enumerateClass(aSheet) + { + var cssRules = aSheet.cssRules; + for (var i = 0; i < cssRules.length; i++) + { + var rule = cssRules.item(i); + if (rule.type == CSSRule.STYLE_RULE) + { + var selectorText = rule.selectorText; + var matches = aDetector(selectorText); + if (matches) + for (var j = 0; j < matches.length; j++) + classList.push(matches[j].substr(1)); + } + } + return false; + } + + CssUtils.enumerateStyleSheets(aDocument, enumerateClass); + + return classList; + }, + + getAllClassesForDocument: function CssUtils_getAllClassesForDocument(aDocument) + { + return this.getCssHintsFromDocument(aDocument, this.findClassesInSelector); + }, + + getAllIdsForDocument: function CssUtils_getAllClassesForDocument(aDocument) + { + return this.getCssHintsFromDocument(aDocument, this.findIdsInSelector); + }, + + getAllLocalRulesForSelector: function CssUtils_getAllLocalRulesForSelector(aDocument, aSelector) + { + var ruleList = []; + + function enumerateRules(aSheet) + { + if (aSheet.ownerNode instanceof HTMLStyleElement) + { + var cssRules = aSheet.cssRules; + for (var i = 0; i < cssRules.length; i++) + { + var rule = cssRules.item(i); + if (rule.type == CSSRule.STYLE_RULE) + { + var selectorText = rule.selectorText; + if (selectorText == aSelector) + ruleList.push({rule:rule, index:i}); + } + } + return false; + } + return true; + } + + CssUtils.enumerateStyleSheets(aDocument, enumerateRules); + + return ruleList; + }, + + deleteAllLocalRulesForSelector: function CssUtils_deleteAllLocalRulesForSelector(aDocument, aSelector, aDeclarations) + { + var ruleList = this.getAllLocalRulesForSelector(aDocument, aSelector); + var l = ruleList.length; + for (var i = 0; i < l; i++) + { + var rule = ruleList[i].rule; + var parentRule = rule.parentRule; + var parentStyleSheet = rule.parentStyleSheet; + if (rule.type == CSSRule.STYLE_RULE && !parentRule) + { + if (aDeclarations) + { + for (var j = 0; j < aDeclarations.length; j++) + rule.style.removeProperty(aDeclarations[j].property); + if (!rule.style.length) + parentStyleSheet.deleteRule(ruleList[i].index); + } + else + parentStyleSheet.deleteRule(ruleList[i].index); + } + this.reserializeEmbeddedStylesheet(parentStyleSheet); + } + }, + + getStyleSheetForScreen: function CssUtils_getStyleSheetForScreen(aDocument) + { + var styleElements = aDocument.getElementsByTagName("style"); + var stylesheet = null; + if (styleElements.length) + { + // try to find a stylesheet for the correct media + for (var i = 0; !stylesheet && i < styleElements.length; i++) + { + var styleElement = styleElements[i]; + if (styleElement.hasAttribute("media")) + { + var mediaAttr = styleElement.getAttribute("media"); + if (mediaAttr.indexOf("screen") != -1|| + mediaAttr.indexOf("all") != -1) + stylesheet = styleElement.sheet; + } + else + stylesheet = styleElement.sheet; + } + } + if (!stylesheet) + { + var styleElement = aDocument.createElement("style"); + styleElement.setAttribute("type", "text/css"); + var textNode = aDocument.createTextNode("/* created by BlueGriffon */"); + styleElement.appendChild(textNode); + aDocument.getElementsByTagName("head")[0].appendChild(styleElement); + stylesheet = styleElement.sheet; + } + return stylesheet; + }, + + addRuleForSelector: function CssUtils_addRuleForSelector(aDocument, aSelector, aDeclarations) + { + this.deleteAllLocalRulesForSelector(aDocument, aSelector, aDeclarations); + var ruleList = this.getAllLocalRulesForSelector(aDocument, aSelector); + + if (!ruleList || !ruleList.length) + { + var stylesheet = this.getStyleSheetForScreen(aDocument); + var str = stylesheet.ownerNode.textContent; + str += "\n" + aSelector + " {"; + for (var j = 0; j < aDeclarations.length; j++) + { + var property = aDeclarations[j].property; + var value = aDeclarations[j].value; + var priority = aDeclarations[j].priority; + str += "\n " + property + ": " + + value + + (priority ? " !important;" : ";"); + } + str += "\n}\n"; + stylesheet.ownerNode.firstChild.data = str; + return; + } + + var rule = ruleList[ruleList.length -1].rule; + for (var j = 0; j < aDeclarations.length; j++) + { + var property = aDeclarations[j].property; + var value = aDeclarations[j].value; + var priority = aDeclarations[j].priority ? " !important" : ""; + + rule.style.setProperty(property, + value, + priority); + } + + this.reserializeEmbeddedStylesheet(rule.parentStyleSheet); + }, + + reserializeEmbeddedStylesheet: function CssUtils_reserializeEmbeddedStylesheet(aSheet) + { + var cssRules = aSheet.cssRules; + var str = ""; + for (var i = 0; i < cssRules.length; i++) + { + var rule = cssRules[i]; + switch (rule.type) + { + case CSSRule.CHARSET_RULE: + case CSSRule.IMPORT_RULE: + str += (i ? "\n" : "") + rule.cssText; + break; + case CSSRule.STYLE_RULE: + { + str += (i ? "\n" : "") + rule.selectorText + " {\n " + + rule.style.cssText.replace( /;/g , ";\n"); + /*var declarations = rule.style; + for (var j = 0; j < declarations.length; j++) + { + var property = declarations.item(j); + var value = declarations.getPropertyValue(property); + var priority = declarations.getPropertyPriority(property); + str += "\n " + property + ": " + + value + + (priority ? ";" : " !important;"); + }*/ + } + break; + default: + break; + } + str += "}\n"; + } + var styleElt = aSheet.ownerNode; + var child = styleElt.firstChild; + while (child) + { + var tmp = child.nextSibling; + styleElt.removeChild(child); + child = tmp; + } + var textNode = styleElt.ownerDocument.createTextNode(str); + styleElt.appendChild(textNode); + }, + + getUseCSSPref: function() + { + try { + var useCSS = GetPrefs().getIntPref("bluegriffon.css.policy"); + return useCSS; + } + catch(e) { dump("Cannot get preference bluegriffon.css.policy; defaulting to HTML attributes") } + + return 0; + } +}; + diff --git a/base/content/bluegriffon/utils/dgid.js b/base/content/bluegriffon/utils/dgid.js new file mode 100644 index 0000000..885ec70 --- /dev/null +++ b/base/content/bluegriffon/utils/dgid.js @@ -0,0 +1,49 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is BlueGriffon. + * + * The Initial Developer of the Original Code is + * Disruptive Innovations SARL. + * Portions created by the Initial Developer are Copyright (C) 2006 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Daniel Glazman , Original author + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +// we store all globals in a gDialog object for convenience +var gDialog = {}; + +function GetUIElements() +{ + var elts = document.getElementsByAttribute("id", "*"); + for (var i = 0; i < elts.length; i++) + { + var elt = elts.item(i); + gDialog[ elt.getAttribute("id") ] = elt; + } +} diff --git a/base/content/bluegriffon/utils/editorUtils.js b/base/content/bluegriffon/utils/editorUtils.js new file mode 100644 index 0000000..1a39429 --- /dev/null +++ b/base/content/bluegriffon/utils/editorUtils.js @@ -0,0 +1,502 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is BlueGriffon. + * + * The Initial Developer of the Original Code is + * Disruptive Innovations SARL. + * Portions created by the Initial Developer are Copyright (C) 2006 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Daniel Glazman , Original author + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +var EditorUtils = { + + /********** PUBLIC **********/ + + getCurrentTabEditor: function getCurrentTabEditor() + { + var tmpWindow = window; + +#ifdef XP_MACOSX + // do we have an app-modal window on MAC OS X ? + if (window.location.href != "chrome://bluegriffon/content/xul/bluegriffon.xul" && + !tmpWindow.opener) + { + var windowManager = Components.classes[kWINDOWMEDIATOR_CID].getService(); + var windowManagerInterface = windowManager.QueryInterface(nsIWindowMediator); + tmpWindow = windowManagerInterface.getMostRecentWindow("bluegriffon"); + } +#endif + + do { + var tabeditor = tmpWindow.document.getElementById("tabeditor"); + + if (tabeditor) + return tabeditor ; + + tmpWindow = tmpWindow.opener; + } + while (tmpWindow); + + return null; + }, + + getCurrentEditorElement: function getCurrentEditorElement() + { + var tabeditor = this.getCurrentTabEditor(); + if (tabeditor) + return tabeditor.getCurrentEditorElement() ; + return null; + }, + + getCurrentEditor: function getCurrentEditor() + { + // Get the active editor from the tag + var editor = null; + try { + var editorElement = this.getCurrentEditorElement(); + if (editorElement) + { + editor = editorElement.getEditor(editorElement.contentWindow); + + // Do QIs now so editor users won't have to figure out which interface to use + // Using "instanceof" does the QI for us. + editor instanceof Components.interfaces.nsIEditor; + editor instanceof Components.interfaces.nsIPlaintextEditor; + editor instanceof Components.interfaces.nsIHTMLEditor; + } + } catch (e) { dump("Error in GetCurrentEditor: " + e + "\n"); } + + return editor; + }, + + getCurrentDocument: function getCurrentDocument() + { + // Get the active editor from the tag + var editor = this.getCurrentEditor(); + if (editor) + return editor.document; + return null; + }, + + getCurrentCommandManager: function getCurrentCommandManager() + { + try { + return this.getCurrentEditorElement().commandManager; + } catch (e) { dump (e)+"\n"; } + + return null; + }, + + newCommandParams: function newCommandParams() + { + try { + const contractId = "@mozilla.org/embedcomp/command-params;1"; + const nsICommandParams = Components.interfaces.nsICommandParams; + + return Components.classes[contractId].createInstance(nsICommandParams); + } + catch(e) { dump("error thrown in newCommandParams: "+e+"\n"); } + return null; + }, + + getCurrentEditingSession: function getCurrentEditingSession() + { + try { + return this.getCurrentEditorElement().editingSession; + } catch (e) { dump (e)+"\n"; } + + return null; + }, + + getCurrentEditorType: function getCurrentEditorType() + { + try { + return this.getCurrentEditorElement().editortype; + } catch (e) { dump (e)+"\n"; } + + return ""; + }, + + isAlreadyEdited: function isAlreadyEdited(aURL) + { + // blank documents are never "already edited"... + if (UrlUtils.isUrlAboutBlank(aURL)) + return null; + + var url = UrlUtils.newURI(aURL).spec; + + var windowManager = Components.classes[kWINDOWMEDIATOR_CID].getService(); + var windowManagerInterface = windowManager.QueryInterface(nsIWindowMediator); + var enumerator = windowManagerInterface.getEnumerator( "bluegriffon" ); + while ( enumerator.hasMoreElements() ) + { + var win = enumerator.getNext().QueryInterface(nsIDOMWindowInternal); + try { + var mixed = win.gDialog.tabeditor.isAlreadyEdited(url); + if (mixed) + return {window: win, editor: mixed.editor, index: mixed.index}; + } + catch(e) {} + } + return null; + }, + + isDocumentEditable: function isDocumentEditable() + { + try { + return this.getCurrentEditor().isDocumentEditable; + } catch (e) { dump (e)+"\n"; } + return false; + }, + + isDocumentModified: function isDocumentModified() + { + try { + return this.getCurrentEditor().documentModified; + } catch (e) { dump (e)+"\n"; } + return false; + }, + + isDocumentEmpty: function isDocumentEmpty() + { + try { + return this.getCurrentEditor().documentIsEmpty; + } catch (e) { dump (e)+"\n"; } + return false; + }, + + getDocumentTitle: function getDocumentTitle() + { + try { + return this.getCurrentDocument().title; + } catch (e) { dump (e)+"\n"; } + + return ""; + }, + + isHTMLEditor: function isHTMLEditor() + { + // We don't have an editorElement, just return false + if (!this.getCurrentEditorElement()) + return false; + + var editortype = this.getCurrentEditorType(); + switch (editortype) + { + case "html": + case "htmlmail": + return true; + + case "text": + case "textmail": + return false + + default: + dump("INVALID EDITOR TYPE: " + editortype + "\n"); + break; + } + return false; + }, + + isEditingRenderedHTML: function isEditingRenderedHTML() + { + return this.isHTMLEditor(); // && !this.isInHTMLSourceMode(); + }, + + setDocumentTitle: function setDocumentTitle(title) + { + try { + this.getCurrentEditor().setDocumentTitle(title); + + // Update window title (doesn't work if called from a dialog) + if ("UpdateWindowTitle" in window) + window.UpdateWindowTitle(); + else if ("UpdateWindowTitle" in window.opener) + window.opener.UpdateWindowTitle(); + } catch (e) { dump (e)+"\n"; } + }, + + getSelectionContainer: function getSelectionContainer() + { + var editor = this.getCurrentEditor(); + if (!editor) return null; + + try { + var selection = editor.selection; + if (!selection) return null; + } + catch (e) { return null; } + + var result = { oneElementSelected:false }; + + if (selection.isCollapsed) { + result.node = selection.focusNode; + } + else { + var rangeCount = selection.rangeCount; + if (rangeCount == 1) { + result.node = editor.getSelectedElement(""); + var range = selection.getRangeAt(0); + + // check for a weird case : when we select a piece of text inside + // a text node and apply an inline style to it, the selection starts + // at the end of the text node preceding the style and ends after the + // last char of the style. Assume the style element is selected for + // user's pleasure + if (!result.node && + range.startContainer.nodeType == Node.TEXT_NODE && + range.startOffset == range.startContainer.length && + range.endContainer.nodeType == Node.TEXT_NODE && + range.endOffset == range.endContainer.length && + range.endContainer.nextSibling == null && + range.startContainer.nextSibling == range.endContainer.parentNode) + result.node = range.endContainer.parentNode; + + if (!result.node) { + // let's rely on the common ancestor of the selection + result.node = range.commonAncestorContainer; + } + else { + result.oneElementSelected = true; + } + } + else { + // assume table cells ! + var i, container = null; + for (i = 0; i < rangeCount; i++) { + range = selection.getRangeAt(i); + if (!container) { + container = range.startContainer; + } + else if (container != range.startContainer) { + // all table cells don't belong to same row so let's + // select the parent of all rows + result.node = container.parentNode; + break; + } + result.node = container; + } + } + } + + // make sure we have an element here + while (result.node.nodeType != Node.ELEMENT_NODE) + result.node = result.node.parentNode; + + // and make sure the element is not a special editor node like + // the
we insert in blank lines + // and don't select anonymous content !!! (fix for bug 190279) + editor instanceof Components.interfaces.nsIHTMLEditor; + while (result.node.hasAttribute("_moz_editor_bogus_node") || + editor.isAnonymousElement(result.node)) + result.node = result.node.parentNode; + + return result; + }, + + getMetaElement: function getMetaElement(aName) + { + if (aName) + { + var name = aName.toLowerCase(); + try { + var metanodes = this.getCurrentDocument() + .getElementsByTagName("meta"); + for (var i = 0; i < metanodes.length; i++) + { + var metanode = metanodes.item(i); + if (metanode && metanode.getAttribute("name") == name) + return metanode; + } + } + catch(e) {} + } + return null; + }, + + createMetaElement: function createMetaElement(aName) + { + var editor = this.getCurrentEditor(); + try { + var metanode = editor.createElementWithDefaults("meta"); + metanode.setAttribute("name", aName); + return metanode; + } + catch(e) {} + return null; + }, + + insertMetaElement: function insertMetaElement(aElt, aContent, aInsertNew, aPrepend) + { + if (aElt) + { + var editor = this.getCurrentEditor(); + try { + if (!aContent) + { + if (!insertNew) + editor.deleteNode(aElt); + } + else + { + if (aInsertNew) + { + aElt.setAttribute("content", aContent); + if (aPrepend) + this.prependHeadElement(aElt); + else + this.appendHeadElement(aElt); + } + else + { + editor.setAttribute(aElt, "content", aContent); + } + } + } + catch(e) {} + } + }, + + getHeadElement: function getHeadElement() + { + try { + var doc = EditorUtils.getCurrentDocument(); + var heads = doc.getElementsByTagName("head"); + return heads.item(0); + } + catch(e) {} + + return null; + }, + + prependHeadElement: function prependHeadElement(aElt) + { + var head = this.getHeadElement(); + if (head) + try { + var editor = EditorUtils.getCurrentEditor(); + editor.insertNode(aElt, head, 0, true); + } + catch(e) {} + }, + + appendHeadElement: function appendHeadElement(aElt) + { + var head = this.getHeadElement(); + if (head) + { + var pos = 0; + if (head.hasChildNodes()) + pos = head.childNodes.length; + try { + var editor = EditorUtils.getCurrentEditor(); + editor.insertNode(aElt, head, pos, true); + } + catch(e) {} + } + }, + + getTextProperty: function(property, attribute, value, firstHas, anyHas, allHas) + { + try { + if (!gAtomService) GetAtomService(); + var propAtom = gAtomService.getAtom(property); + + this.getCurrentEditor().getInlineProperty(propAtom, attribute, value, + firstHas, anyHas, allHas); + } + catch(e) {} + }, + + getClasses: function(aElt) + { + var e = aElt; + var display = CssUtils.getComputedStyle(e).getPropertyValue("display"); + while (e && display == "inline" && e.className == "") + { + e = e.parentNode; + display = CssUtils.getComputedStyle(e).getPropertyValue("display"); + } + return {classes: e.className, node: e}; + }, + + getCurrentTableEditor: function() + { + var editor = this.getCurrentEditor(); + return (editor && + (editor instanceof Components.interfaces.nsITableEditor)) ? editor : null; + }, + + isStrictDTD: function() + { + var doctype = this.getCurrentEditor().document.doctype; + return (doctype.publicId.lastIndexOf("Strict") != -1); + }, + + isCSSDisabledAndStrictDTD: function() + { + var prefs = GetPrefs(); + var IsCSSPrefChecked = prefs.getBoolPref("editor.use_css"); + return !IsCSSPrefChecked && this.isStrictDTD(); + }, + + getDocumentUrl: function() + { + try { + var aDOMHTMLDoc = this.getCurrentEditor().document.QueryInterface(Components.interfaces.nsIDOMHTMLDocument); + return aDOMHTMLDoc.URL; + } + catch (e) {} + return ""; + }, + + isXHTMLDocument: function() + { + var doctype = this.getCurrentEditor().document.doctype; + return (doctype.publicId == "-//W3C//DTD XHTML 1.0 Transitional//EN" || + doctype.publicId == "-//W3C//DTD XHTML 1.0 Strict//EN"); + }, + + getWrapColumn: function() + { + try { + return this.getCurrentEditor().wrapWidth; + } catch (e) {} + return 0; + }, + + setDocumentURI: function(uri) + { + try { + // XXX WE'LL NEED TO GET "CURRENT" CONTENT FRAME ONCE MULTIPLE EDITORS ARE ALLOWED + this.getCurrentEditorElement().docShell.setCurrentURI(uri); + } catch (e) { dump("SetDocumentURI:\n"+e +"\n"); } + } +}; diff --git a/base/content/bluegriffon/utils/fileUtils.js b/base/content/bluegriffon/utils/fileUtils.js new file mode 100644 index 0000000..fac8f4e --- /dev/null +++ b/base/content/bluegriffon/utils/fileUtils.js @@ -0,0 +1,568 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is BlueGriffon. + * + * The Initial Developer of the Original Code is + * Disruptive Innovations SARL. + * Portions created by the Initial Developer are Copyright (C) 2008 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Daniel Glazman , Original author + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +var FileUtils = { + + kLAST_FILE_LOCATION_PREFIX: "bluegriffon.lastFileLocation.", + + kErrorBindingAborted: 2152398850, + kErrorBindingRedirected: 2152398851, + kFileNotFound: 2152857618, + + nsIFilePicker:Components.interfaces.nsIFilePicker, + nsIWebBrowserPersist: Components.interfaces.nsIWebBrowserPersist, + nsIWebProgressListener: Components.interfaces.nsIWebProgressListener, + + mFilePickerDirectory: null, + mShowDebugOutputStateChange: false, + mPublishData: null, + mProgressDialog: null, + + // throws an error or returns true if user attempted save; false if user canceled save + saveDocument: function(aSaveAs, aSaveCopy, aMimeType) + { + var editor = EditorUtils.getCurrentEditor(); + if (!aMimeType || aMimeType == "" || !editor) + throw NS_ERROR_NOT_INITIALIZED; + + var editorDoc = editor.document; + if (!editorDoc) + throw NS_ERROR_NOT_INITIALIZED; + + // if we don't have the right editor type bail (we handle text and html) + var editorType = EditorUtils.getCurrentEditorType(); + if (editorType != "html") + throw NS_ERROR_NOT_IMPLEMENTED; + + var urlstring = EditorUtils.getDocumentUrl(); + var mustShowFileDialog = (aSaveAs || + UrlUtils.isUrlAboutBlank(urlstring) || + (urlstring == "")); + + // If editing a remote URL, force SaveAs dialog + if (!mustShowFileDialog && UrlUtils.getScheme(urlstring) != "file") + mustShowFileDialog = true; + + var replacing = !aSaveAs; + var titleChanged = false; + var doUpdateURI = false; + var tempLocalFile = null; + + if (mustShowFileDialog) + { + try { + // Prompt for title + var userContinuing = this.promptAndSetTitleIfNone(); // not cancel + if (!userContinuing) + return false; + + var dialogResult = this.promptForSaveLocation(false, editorType, aMimeType, urlstring); + if (dialogResult.filepickerClick == this.nsIFilePicker.returnCancel) + return false; + + replacing = (dialogResult.filepickerClick == this.nsIFilePicker.returnReplace); + urlstring = dialogResult.resultingURIString; + tempLocalFile = dialogResult.resultingLocalFile; + + // update the new URL for the webshell unless we are saving a copy + if (!aSaveCopy) + doUpdateURI = true; + } catch (e) { return false; } + } // mustShowFileDialog + + var success = true; + var ioService; + try { + // if somehow we didn't get a local file but we did get a uri, + // attempt to create the localfile if it's a "file" url + var docURI; + if (!tempLocalFile) + { + ioService = UrlUtils.getIOService(); + docURI = ioService.newURI(urlstring, editor.documentCharacterSet, null); + + if (docURI.schemeIs("file")) + { + var fileHandler = UrlUtils.getFileProtocolHandler(); + tempLocalFile = fileHandler.getFileFromURLSpec(urlstring).QueryInterface(Components.interfaces.nsILocalFile); + } + } + + // this is the location where the related files will go + var relatedFilesDir = null; + + // First check pref for saving associated files + var saveAssociatedFiles = false; + try { + var prefs = GetPrefs(); + saveAssociatedFiles = prefs.getBoolPref("editor.save_associated_files"); + } catch (e) {} + + // Only change links or move files if pref is set + // and we are saving to a new location + if (saveAssociatedFiles && aSaveAs) + { + try { + if (tempLocalFile) + { + // if we are saving to the same parent directory, don't set relatedFilesDir + // grab old location, chop off file + // grab new location, chop off file, compare + var oldLocation = EditorUtils.getDocumentUrl(); + var oldLocationLastSlash = oldLocation.lastIndexOf("\/"); + if (oldLocationLastSlash != -1) + oldLocation = oldLocation.slice(0, oldLocationLastSlash); + + var relatedFilesDirStr = urlstring; + var newLocationLastSlash = relatedFilesDirStr.lastIndexOf("\/"); + if (newLocationLastSlash != -1) + relatedFilesDirStr = relatedFilesDirStr.slice(0, newLocationLastSlash); + if (oldLocation == relatedFilesDirStr || UrlUtils.isUrlAboutBlank(oldLocation)) + relatedFilesDir = null; + else + relatedFilesDir = tempLocalFile.parent; + } + else + { + var lastSlash = urlstring.lastIndexOf("\/"); + if (lastSlash != -1) + { + var relatedFilesDirString = urlstring.slice(0, lastSlash + 1); // include last slash + ioService = UrlUtils.getIOService(); + relatedFilesDir = ioService.newURI(relatedFilesDirString, editor.documentCharacterSet, null); + } + } + } catch(e) { relatedFilesDir = null; } + } + + var destinationLocation; + if (tempLocalFile) + destinationLocation = tempLocalFile; + else + destinationLocation = docURI; + + success = this.outputFileWithPersistAPI(editorDoc, destinationLocation, relatedFilesDir, aMimeType); + } + catch (e) + { + success = false; + } + + if (success) + { + try { + if (doUpdateURI) + { + // If a local file, we must create a new uri from nsILocalFile + if (tempLocalFile) + docURI = UrlUtils.getFileProtocolHandler().newFileURI(tempLocalFile); + + // We need to set new document uri before notifying listeners + EditorUtils.setDocumentURI(docURI); + } + + // Update window title to show possibly different filename + // This also covers problem that after undoing a title change, + // window title loses the extra [filename] part that this adds + UpdateWindowTitle(); + + if (!aSaveCopy) + editor.resetModificationCount(); + // this should cause notification to listeners that document has changed + + // Set UI based on whether we're editing a remote or local url + this.setSaveAndPublishUI(urlstring); + } catch (e) {} + } + else + { + var saveDocStr = L10NUtils.getString("SaveDocument"); + var failedStr = L10NUtils.getString("SaveFileFailed"); + PromptUtils.alertWithTitle(saveDocStr, failedStr); + } + return success; + }, + + promptAndSetTitleIfNone: function() + { + if (EditorUtils.getDocumentTitle()) // we have a title; no need to prompt! + return true; + + var result = {value:null}; + var captionStr = L10NUtils.getString("DocumentTitle"); + var msgStr = L10NUtils.getString("NeedDocTitle") + '\n' + L10NUtils.getString("DocTitleHelp"); + var confirmed = PromptUtils.prompt(window, captionStr, msgStr, result, null, {value:0}); + if (confirmed) + EditorUtils.setDocumentTitle(TrimString(result.value)); + + return confirmed; + }, + + promptForSaveLocation: function(aDoSaveAsText, aEditorType, aMIMEType, aDocumentURLString) + { + var dialogResult = {}; + dialogResult.filepickerClick = this.nsIFilePicker.returnCancel; + dialogResult.resultingURI = ""; + dialogResult.resultingLocalFile = null; + + var fp = null; + try { + fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(this.nsIFilePicker); + } catch (e) {} + if (!fp) return dialogResult; + + // determine prompt string based on type of saving we'll do + var promptString; + if (aDoSaveAsText || aEditorType == "text") + promptString = L10NUtils.getString("ExportToText"); + else + promptString = L10NUtils.getString("SaveDocumentAs") + + fp.init(window, promptString, this.nsIFilePicker.modeSave); + + // Set filters according to the type of output + if (aDoSaveAsText) + fp.appendFilters(this.nsIFilePicker.filterText); + /* else if (CurrentDocumentIsTemplate()) + fp.appendFilter(GetString("HTMLtemplates"), "*.mzt"); */ + else if (EditorUtils.isXHTMLDocument()) + fp.appendFilter(L10NUtils.getString("XHTMLfiles"), "*.xhtml"); + else + fp.appendFilters(this.nsIFilePicker.filterHTML); + fp.appendFilters(this.nsIFilePicker.filterAll); + + // now let's actually set the filepicker's suggested filename + var suggestedFileName = this.getSuggestedFileName(aDocumentURLString, aMIMEType); + if (suggestedFileName) + fp.defaultString = suggestedFileName; + + // set the file picker's current directory + // assuming we have information needed (like prior saved location) + try { + var ioService = UrlUtils.getIOService(); + var fileHandler = UrlUtils.getFileProtocolHandler(); + + var isLocalFile = true; + try { + var docURI = ioService.newURI(aDocumentURLString, + EditorUtils.getCurrentEditor().documentCharacterSet, + null); + isLocalFile = docURI.schemeIs("file"); + } + catch (e) {} + + var parentLocation = null; + if (isLocalFile) + { + var fileLocation = fileHandler.getFileFromURLSpec(aDocumentURLString); // this asserts if url is not local + parentLocation = fileLocation.parent; + } + if (parentLocation) + { + // Save current filepicker's default location + this.mFilePickerDirectory = fp.displayDirectory; + + fp.displayDirectory = parentLocation; + } + else + { + // Initialize to the last-used directory for the particular type (saved in prefs) + this.setFilePickerDirectory(fp, aEditorType); + } + } + catch(e) {} + + dialogResult.filepickerClick = fp.show(); + if (dialogResult.filepickerClick != this.nsIFilePicker.returnCancel) + { + // reset urlstring to new save location + dialogResult.resultingURIString = fileHandler.getURLSpecFromFile(fp.file); + dialogResult.resultingLocalFile = fp.file; + this.saveFilePickerDirectory(fp, aEditorType); + } + else if (this.mFilePickerDirectory) + fp.displayDirectory = this.mFilePickerDirectory; + + return dialogResult; + }, + + getSuggestedFileName: function(aDocumentURLString, aMIMEType) + { + var extension = this.getExtensionBasedOnMimeType(aMIMEType); + if (extension) + extension = "." + extension; + + // check for existing file name we can use + if (aDocumentURLString.length > 0 && !UrlUtils.isUrlAboutBlank(aDocumentURLString)) + { + var docURI = null; + try { + + var ioService = UrlUtils.getIOService(); + docURI = ioService.newURI(aDocumentURLString, + EditorUtils.getCurrentEditor().documentCharacterSet, + null); + docURI = docURI.QueryInterface(Components.interfaces.nsIURL); + + // grab the file name + var url = docURI.fileBaseName; + if (url) + return url+extension; + } catch(e) {} + } + + // check if there is a title we can use + var title = EditorUtils.getDocumentTitle(); + // generate a valid filename, if we can't just go with "untitled" + return this.generateValidFilename(title, extension) || + L10NUtils.getString("untitled") + extension; + }, + +setFilePickerDirectory: function(filePicker, fileType) +{ + if (filePicker) + { + try { + var prefBranch = GetPrefs(); + if (prefBranch) + { + // Save current directory so we can reset it in SaveFilePickerDirectory + this.mFilePickerDirectory = filePicker.displayDirectory; + + var location = prefBranch.getComplexValue(this.kLAST_FILE_LOCATION_PREFIX + fileType, + Components.interfaces.nsILocalFile); + if (location) + filePicker.displayDirectory = location; + } + } + catch(e) {} + } +}, + + saveFilePickerDirectory: function(filePicker, fileType) + { + if (filePicker && filePicker.file) + { + try { + var prefBranch = GetPrefs(); + + var fileDir; + if (filePicker.file.parent) + fileDir = filePicker.file.parent.QueryInterface(Components.interfaces.nsILocalFile); + + if (prefBranch) + prefBranch.setComplexValue(this.kLAST_FILE_LOCATION_PREFIX + fileType, + Components.interfaces.nsILocalFile, + fileDir); + + var prefsService = GetPrefsService(); + prefsService.savePrefFile(null); + } catch (e) {} + } + + // Restore the directory used before SetFilePickerDirectory was called; + // This reduces interference with Browser and other module directory defaults + if (this.mFilePickerDirectory) + filePicker.displayDirectory = this.mFilePickerDirectory; + + this.mFilePickerDirectory = null; + }, + + getExtensionBasedOnMimeType: function(aMIMEType) + { + /*if (CurrentDocumentIsTemplate()) + return "mzt";*/ + + try { + var mimeService = null; + mimeService = Components.classes["@mozilla.org/mime;1"].getService(); + mimeService = mimeService.QueryInterface(Components.interfaces.nsIMIMEService); + + var fileExtension = mimeService.getPrimaryExtension(aMIMEType, null); + + // the MIME service likes to give back ".htm" for text/html files, + // so do a special-case fix here. + if (fileExtension == "htm") + fileExtension = "html"; + + return fileExtension; + } + catch (e) {} + return ""; + }, + + generateValidFilename: function(filename, extension) + { + if (filename) // we have a title; let's see if it's usable + { + // clean up the filename to make it usable and + // then trim whitespace from beginning and end + filename = this.validateFileName(filename).replace(/^\s+|\s+$/g, ""); + if (filename.length > 0) + return filename + extension; + } + return null; + }, + + validateFileName: function(aFileName) + { + var re = /[\/]+/g; + if (navigator.appVersion.indexOf("Windows") != -1) { + re = /[\\\/\|]+/g; + aFileName = aFileName.replace(/[\"]+/g, "'"); + aFileName = aFileName.replace(/[\*\:\?]+/g, " "); + aFileName = aFileName.replace(/[\<]+/g, "("); + aFileName = aFileName.replace(/[\>]+/g, ")"); + } + else if (navigator.appVersion.indexOf("Macintosh") != -1) + re = /[\:\/]+/g; + + return aFileName.replace(re, "_"); + }, + + outputFileWithPersistAPI: function(editorDoc, aDestinationLocation, aRelatedFilesParentDir, aMimeType) + { + gPersistObj = null; + var editor = EditorUtils.getCurrentEditor(); + try { + var imeEditor = editor.QueryInterface(Components.interfaces.nsIEditorIMESupport); + imeEditor.ForceCompositionEnd(); + } catch (e) {} + + var isLocalFile = false; + try { + var tmp1 = aDestinationLocation.QueryInterface(Components.interfaces.nsIFile); + isLocalFile = true; + } + catch (e) { + try { + var tmp = aDestinationLocation.QueryInterface(Components.interfaces.nsIURI); + isLocalFile = tmp.schemeIs("file"); + } + catch (e) {} + } + + try { + // we should supply a parent directory if/when we turn on functionality to save related documents + var persistObj = Components.classes["@mozilla.org/embedding/browser/nsWebBrowserPersist;1"] + .createInstance(this.nsIWebBrowserPersist); + //persistObj.progressListener = gEditorOutputProgressListener; + + var wrapColumn = EditorUtils.getWrapColumn(); + var outputFlags = this.getOutputFlags(aMimeType, wrapColumn); + + // for 4.x parity as well as improving readability of file locally on server + // this will always send crlf for upload (http/ftp) + if (!isLocalFile) // if we aren't saving locally then send both cr and lf + { + outputFlags |= this.nsIWebBrowserPersist.ENCODE_FLAGS_CR_LINEBREAKS | + this.nsIWebBrowserPersist.ENCODE_FLAGS_LF_LINEBREAKS; + + // we want to serialize the output for all remote publishing + // some servers can handle only one connection at a time + // some day perhaps we can make this user-configurable per site? + persistObj.persistFlags = persistObj.persistFlags | + this.nsIWebBrowserPersist.PERSIST_FLAGS_SERIALIZE_OUTPUT; + } + + // note: we always want to set the replace existing files flag since we have + // already given user the chance to not replace an existing file (file picker) + // or the user picked an option where the file is implicitly being replaced (save) + persistObj.persistFlags = persistObj.persistFlags + | this.nsIWebBrowserPersist.PERSIST_FLAGS_NO_BASE_TAG_MODIFICATIONS + | this.nsIWebBrowserPersist.PERSIST_FLAGS_REPLACE_EXISTING_FILES + | this.nsIWebBrowserPersist.PERSIST_FLAGS_DONT_FIXUP_LINKS + | this.nsIWebBrowserPersist.PERSIST_FLAGS_DONT_CHANGE_FILENAMES + | this.nsIWebBrowserPersist.PERSIST_FLAGS_FIXUP_ORIGINAL_DOM; + + // HACK: in Nvu, always save as text/html... + persistObj.saveDocument(editorDoc, aDestinationLocation, aRelatedFilesParentDir, + "text/html", outputFlags, wrapColumn); + gPersistObj = persistObj; + } + catch(e) { dump("caught an error, bail\n"); return false; } + + return true; + }, + + getOutputFlags: function(aMimeType, aWrapColumn) + { + var outputFlags = 0; + var editor = EditorUtils.getCurrentEditor(); + var outputEntity = (editor && editor.documentCharacterSet == "ISO-8859-1") + ? this.nsIWebBrowserPersist.ENCODE_FLAGS_ENCODE_LATIN1_ENTITIES + : this.nsIWebBrowserPersist.ENCODE_FLAGS_ENCODE_BASIC_ENTITIES; + if (aMimeType == "text/plain") + { + // When saving in "text/plain" format, always do formatting + outputFlags |= this.nsIWebBrowserPersist.ENCODE_FLAGS_FORMATTED; + } + else + { + try { + // Should we prettyprint? Check the pref + var prefs = GetPrefs(); + if (prefs.getBoolPref("bluegriffon.prettyprint")) + outputFlags |= this.nsIWebBrowserPersist.ENCODE_FLAGS_FORMATTED; + + // How much entity names should we output? Check the pref + var encodeEntity = prefs.getCharPref("bluegriffon.encode_entity"); + switch (encodeEntity) { + case "basic" : outputEntity = this.nsIWebBrowserPersist.ENCODE_FLAGS_ENCODE_BASIC_ENTITIES; break; + case "latin1" : outputEntity = this.nsIWebBrowserPersist.ENCODE_FLAGS_ENCODE_LATIN1_ENTITIES; break; + case "html" : outputEntity = this.nsIWebBrowserPersist.ENCODE_FLAGS_ENCODE_HTML_ENTITIES; break; + case "none" : outputEntity = 0; break; + } + } + catch (e) {} + } + outputFlags |= outputEntity; + + if (aWrapColumn > 0) + outputFlags |= this.nsIWebBrowserPersist.ENCODE_FLAGS_WRAP; + + return outputFlags; + }, + + setSaveAndPublishUI: function(urlstring) + { + // Be sure enabled state of toolbar buttons are correct + goUpdateCommand("cmd_save"); + goUpdateCommand("cmd_publish"); + } +}; + diff --git a/base/content/bluegriffon/utils/global.js b/base/content/bluegriffon/utils/global.js new file mode 100644 index 0000000..85f12ce --- /dev/null +++ b/base/content/bluegriffon/utils/global.js @@ -0,0 +1,373 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is BlueGriffon. + * + * The Initial Developer of the Original Code is + * Disruptive Innovations SARL. + * Portions created by the Initial Developer are Copyright (C) 2006 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Daniel Glazman , Original author + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +const kWINDOWMEDIATOR_CID = "@mozilla.org/appshell/window-mediator;1"; + +const interfaces = Components.interfaces; +const nsIWindowMediator = interfaces.nsIWindowMediator; +const nsIDOMWindowInternal = interfaces.nsIDOMWindowInternal; +const nsIPlaintextEditor = interfaces.nsIPlaintextEditor; +const nsIHTMLEditor = interfaces.nsIHTMLEditor; +const nsIEditingSession = interfaces.nsIEditingSession; + +var BlueGriffonVars = { + kXUL_NS: "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", +}; + +var gPrefs = null; + +function TrimStringLeft(string) +{ + if(!string) return ""; + return string.replace(/^\s+/, ""); +} + +function TrimStringRight(string) +{ + if (!string) return ""; + return string.replace(/\s+$/, ''); +} + +// Remove whitespace from both ends of a string +function TrimString(string) +{ + if (!string) return ""; + return string.replace(/(^\s+)|(\s+$)/g, '') +} + +function baseConverter (number,ob,nb) { + // Created 1997 by Brian Risk. http://members.aol.com/brianrisk + number = String(number).toUpperCase(); + var list = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + var dec = 0; + for (var i = 0; i <= number.length; i++) { + dec += (list.indexOf(number.charAt(i))) * (Math.pow(ob , (number.length - i - 1))); + } + number = ""; + var magnitude = Math.floor((Math.log(dec))/(Math.log(nb))); + for (var i = magnitude; i >= 0; i--) { + var amount = Math.floor(dec/Math.pow(nb,i)); + number = number + list.charAt(amount); + dec -= amount*(Math.pow(nb,i)); + } + return number; +} + +// used by openLocation. see openLocation.js for additional notes. +function delayedOpenWindow(chrome, flags, param1, param2) +{ + dump("delayOpenWindow: setting timeout\n"); + setTimeout("window.openDialog('"+chrome+"','_blank','"+flags+"','"+param1+"','"+param2+"')", 10); +} + +function GetPrefs() +{ + if (gPrefs) + return gPrefs; + try { + gPrefs = Components.classes["@mozilla.org/preferences-service;1"] + .getService(Components.interfaces.nsIPrefBranch); + } catch (ex) { + // not critical, remain silent + } + return gPrefs; +} + +function GetPrefsService() +{ + if (gPrefsService) + return gPrefsService; + + try { + gPrefsService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); + } + catch(ex) { + dump("failed to get prefs service!\n"); + } + + return gPrefsService; +} + +function GetUnicharPref(aPrefName, aDefVal) +{ + var prefs = GetPrefs(); + if (prefs) + { + try { + return prefs.getComplexValue(aPrefName, Components.interfaces.nsISupportsString).data; + } + catch(e) {} + } + return ""; +} + +function SetUnicharPref(aPrefName, aPrefValue) +{ + var prefs = GetPrefs(); + if (prefs) + { + try { + var str = Components.classes["@mozilla.org/supports-string;1"] + .createInstance(Components.interfaces.nsISupportsString); + str.data = aPrefValue; + prefs.setComplexValue(aPrefName, Components.interfaces.nsISupportsString, str); + } + catch(e) {} + } +} + +function toOpenWindowByType(inType, uri) +{ + window.open(uri, "_blank", "chrome,extrachrome,menubar,resizable,scrollbars,status,toolbar"); +} + +function SetTextboxFocusById(aId) +{ + SetTextboxFocus(document.getElementById(aId)); +} + +function SetTextboxFocus(aElt) +{ + if (aElt) + { + setTimeout( function(textbox) { textbox.focus(); textbox.select(); }, 0, aElt); + } +} + +function SetEnabledElementAndControl(aElt, aEnabled) +{ + if (aElt) + { + SetEnabledElement(aElt, aEnabled); + if (aElt.hasAttribute("control")) + { + SetEnabledElement(document.getElementById(aElt.getAttribute("control")), + aEnabled); + } + } +} + +function SetEnabledElement(aElt, aEnabled) +{ + if (!aElt) + return; + if (aEnabled) + aElt.removeAttribute("disabled"); + else + aElt.setAttribute("disabled", "true"); +} + +function deleteAllChildren(aElt) +{ + var child = aElt.lastChild; + while (child) + { + var tmp = child.previousSibling; + aElt.removeChild(child); + child = tmp; + } +} + +function initClassMenu(menuPopup, aUseSelection) +{ + deleteAllChildren(menuPopup); + + var mixedObj = new Object(); + var classesArray, classesArrayLength = 0; + + if (aUseSelection) + { + var classes = EditorUtils.getClasses(EditorUtils.getSelectionContainer().node).classes; + if (classes) + { + classesArray = classes.split(" "); + classesArray.sort(); + classesArrayLength = classesArray.length; + + for (var index = 0; index < classesArrayLength; index++) + { + var menuEntry = document.createElementNS(BlueGriffonVars.kXUL_NS, "menuitem"); + menuEntry.setAttribute("type", "checkbox"); + menuEntry.setAttribute("checked", "true"); + menuEntry.setAttribute("class", "menuitem-iconic"); + menuEntry.setAttribute("label", classesArray[index]); + menuEntry.setAttribute("value", classesArray[index]); + + menuPopup.appendChild(menuEntry); + } + } + } + else + { + var menuEntry = document.createElementNS(BlueGriffonVars.kXUL_NS, "menuitem"); + menuEntry.setAttribute("type", "checkbox"); + menuEntry.setAttribute("class", "menuitem-iconic"); + menuEntry.setAttribute("label", L10NUtils.getString("NoClassAvailable")); + menuEntry.setAttribute("value", ""); + menuPopup.appendChild(menuEntry); + + var menuSep = document.createElementNS(BlueGriffonVars.kXUL_NS, "menuseparator"); + menuPopup.appendChild(menuSep); + + menuPopup.parentNode.selectedIndex = 0; + } + + var classList = CssUtils.getAllClassesForDocument(EditorUtils.getCurrentEditor().document); + + if (classList && classList.length) + { + if (classesArrayLength) + { + var menuSep = document.createElementNS(BlueGriffonVars.kXUL_NS, "menuseparator"); + menuPopup.appendChild(menuSep); + } + + + var classListLength = classList.length; + + classList.sort(); + + var previousClass = ""; + for (var index = 0; index < classListLength; index++) + { + var classEntry = classList[index]; + if (classEntry != previousClass) + { + previousClass = classEntry; + + var found = false; + if (classesArrayLength) + { + var existingClassesIndex; + for (existingClassesIndex = 0; existingClassesIndex < classesArrayLength; existingClassesIndex++) + if (classesArray[existingClassesIndex] == classEntry) + { + found = true; + break; + } + } + if (!found) + { + menuEntry = document.createElementNS(BlueGriffonVars.kXUL_NS, "menuitem"); + menuEntry.setAttribute("type", "checkbox"); + menuEntry.setAttribute("class", "menuitem-iconic"); + menuEntry.setAttribute("label", classEntry); + menuEntry.setAttribute("value", classEntry); + menuPopup.appendChild(menuEntry); + } + } + } + } + else if (aUseSelection) + { + // no class defined in the document + menuEntry = document.createElementNS(BlueGriffonVars.kXUL_NS, "menuitem"); + menuEntry.setAttribute("type", "checkbox"); + menuEntry.setAttribute("label", L10NUtils.getString("NoClassAvailable")); + menuPopup.appendChild(menuEntry); + } +} + +function initIdMenu(menuPopup) +{ + deleteAllChildren(menuPopup); + + var menuEntry = document.createElementNS(BlueGriffonVars.kXUL_NS, "menuitem"); + menuEntry.setAttribute("type", "checkbox"); + menuEntry.setAttribute("class", "menuitem-iconic"); + menuEntry.setAttribute("label", L10NUtils.getString("NoIdAvailable")); + menuEntry.setAttribute("value", ""); + menuPopup.appendChild(menuEntry); + + var menuSep = document.createElementNS(BlueGriffonVars.kXUL_NS, "menuseparator"); + menuPopup.appendChild(menuSep); + + menuPopup.parentNode.selectedIndex = 0; + + var idList = CssUtils.getAllIdsForDocument(EditorUtils.getCurrentEditor().document); + + if (idList && idList.length) + { + var idListLength = idList.length; + + idList.sort(); + + var previousId = ""; + for (var index = 0; index < idListLength; index++) + { + var idEntry = idList[index]; + if (idEntry != previousId) + { + previousId = idEntry; + + menuEntry = document.createElementNS(BlueGriffonVars.kXUL_NS, "menuitem"); + menuEntry.setAttribute("type", "checkbox"); + menuEntry.setAttribute("class", "menuitem-iconic"); + menuEntry.setAttribute("label", idEntry); + menuEntry.setAttribute("value", idEntry); + menuPopup.appendChild(menuEntry); + } + } + } +} + +function GetIndexOfNode(aNode) +{ + if (aNode) + { + // the following 3 lines are an excellent suggestion from Neil Rashbrook + var range = aNode.ownerDocument.createRange(); + range.selectNode(aNode); + return range.startOffset; + } + return null; +} + +function OpenAppModalWindow(aParentWindow, aChromeURL, aWindowName) +{ + var ww = Components.classes["@mozilla.org/embedcomp/window-watcher;1"] + .getService(Components.interfaces.nsIWindowWatcher); +#ifdef XP_MACOSX + ww.openWindow(null, // make this an app-modal window on Mac +#else + ww.openWindow(aParentWindow, +#endif + aChromeURL, + aWindowName, + "chrome,titlebar,centerscreen,modal", + null); +}; diff --git a/base/content/bluegriffon/utils/l10n.js b/base/content/bluegriffon/utils/l10n.js new file mode 100644 index 0000000..0091a45 --- /dev/null +++ b/base/content/bluegriffon/utils/l10n.js @@ -0,0 +1,111 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is BlueGriffon. + * + * The Initial Developer of the Original Code is + * Disruptive Innovations SARL. + * Portions created by the Initial Developer are Copyright (C) 2006 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Daniel Glazman , Original author + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +var L10NUtils = { + + /********** CONSTANTS **********/ + + kCOMPOSER_PROPERTIES: "chrome://bluegriffon/locale/bluegriffon.properties", + + /********** ATTRIBUTES **********/ + + mStringBundleService: null, + mStringBundle: null, + + /********** PRIVATE **********/ + + _getStringBundleService: function _getStringBundleService() + { + if (!this.mStringBundleService) + { + try { + this.mStringBundleService = + Components.classes["@mozilla.org/intl/stringbundle;1"] + .getService(Components.interfaces.nsIStringBundleService); + } catch (e) { dump (e)+"\n"; } + } + return this.mStringBundleService; + }, + + _getStringFromBundle: function _getStringFromBundle(aBundle, aName) + { + if (aBundle) + { + try { + return aBundle.GetStringFromName(aName); + } catch (e) { dump (e)+"\n"; } + } + return null; + }, + + _getBundleFromURL: function _getBundleFromURL(aProperties) + { + var stringBundle; + if (this._getStringBundleService()) + try { + stringBundle = this.mStringBundleService.createBundle(aProperties); + } catch (e) { dump (e)+"\n"; } + return stringBundle; + }, + + /********** PUBLIC **********/ + + getString: function getString(aName) + { + return this._getStringFromBundle(this.getBundle(), aName); + }, + + getStringFromURL: function getStringFromURL(aName, aProperties) + { + var stringBundle; + try { + stringBundle = this._getBundleFromURL(aProperties); + } catch (e) { dump (e)+"\n"; } + + return this._getStringFromBundle(stringBundle, aName); + }, + + getBundle: function getBundle() + { + if (!this.mStringBundle) + try { + this.mStringBundle = this._getBundleFromURL(this.kCOMPOSER_PROPERTIES); + } catch (e) { dump (e)+"\n"; } + + return this.mStringBundle; + } +}; diff --git a/base/content/bluegriffon/utils/login.js b/base/content/bluegriffon/utils/login.js new file mode 100644 index 0000000..1f4cf58 --- /dev/null +++ b/base/content/bluegriffon/utils/login.js @@ -0,0 +1,147 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is BlueGriffon. + * + * The Initial Developer of the Original Code is + * Disruptive Innovations SARL. + * Portions created by the Initial Developer are Copyright (C) 2008 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Daniel Glazman , Original author + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +var LoginUtils = { + + mLoginManager: null, + + _getLoginManager: function() + { + if (!this.mLoginManager) + try { + this.mLoginManager = Components.classes["@mozilla.org/login-manager;1"] + .getService(Components.interfaces.nsILoginManager); + } + catch(e) { dump(e + "\n");} + + return this.mLoginManager; + }, + + newLoginInfo: function(aURL, aUser, aPassword) + { + var nsLoginInfo = new Components.Constructor("@mozilla.org/login-manager/loginInfo;1", + Components.interfaces.nsILoginInfo, + "init"); + + var loginInfo = new nsLoginInfo(aURL, null, "bluegriffon", aUser, aPassword, + "", ""); + return loginInfo; + }, + + addLogin: function(aURL, aUser, aPassword) + { + var loginInfo = this.newLoginInfo(aURL, aUser, aPassword); + try { + this._getLoginManager().addLogin(loginInfo); + } + catch(e) { dump(e + "\n");} + }, + + checkForMasterPasswordSetting: function() + { + if (!this.isMasterPasswordSet()) + { + const bundleURL = "chrome://bluegriffon/locale/masterPasswordQuery.properties"; + var windowTitle = L10NUtils.getStringFromURL("windowTitle", bundleURL); + var query = L10NUtils.getStringFromURL("query", bundleURL); + var yesButton = L10NUtils.getStringFromURL("yesButton", bundleURL); + var noButton = L10NUtils.getStringFromURL("noButton", bundleURL); + if (PromptUtils.confirmWithTitle(windowTitle, query, yesButton, noButton)) + this.openSetMasterPasswordDialog(); + } + }, + + openSetMasterPasswordDialog: function() + { + window.openDialog("chrome://mozapps/content/preferences/changemp.xul", "", + "modal,centerscreen,resizable=no", null); + }, + + openRemoveMasterPasswordDialog: function() + { + window.openDialog("chrome://mozapps/content/preferences/removemp.xul", "", + "modal,centerscreen,resizable=no", null); + }, + + isMasterPasswordSet: function () + { + const Cc = Components.classes, Ci = Components.interfaces; + var secmodDB = Cc["@mozilla.org/security/pkcs11moduledb;1"]. + getService(Ci.nsIPKCS11ModuleDB); + var slot = secmodDB.findSlotByName(""); + if (slot) + { + var status = slot.status; + var hasMP = status != Ci.nsIPKCS11Slot.SLOT_UNINITIALIZED && + status != Ci.nsIPKCS11Slot.SLOT_READY; + return hasMP; + } + else + { + // XXX I have no bloody idea what this means + return false; + } + }, + + findPassword: function(hostname, formSubmitURL, httprealm, username) + { + var password = null; + + try { + // Get Login Manager + var myLoginManager = this._getLoginManager(); + + // Find users for the given parameters + var logins = myLoginManager.findLogins({}, hostname, formSubmitURL, httprealm); + + // Find user from returned array of nsILoginInfo objects + for (var i = 0; i < logins.length; i++) { + if (logins[i].username == username) { + password = logins[i].password; + break; + } + } + } + catch(ex) { + // This will only happen if there is no nsILoginManager component class + } + + return password; + } + +}; + diff --git a/base/content/bluegriffon/utils/notifiers.js b/base/content/bluegriffon/utils/notifiers.js new file mode 100644 index 0000000..90c01d1 --- /dev/null +++ b/base/content/bluegriffon/utils/notifiers.js @@ -0,0 +1,147 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is BlueGriffon. + * + * The Initial Developer of the Original Code is + * Disruptive Innovations SARL. + * Portions created by the Initial Developer are Copyright (C) 2006 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Daniel Glazman , Original author + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +var NotifierUtils = { + + mKeywords: {}, + mContexts: {}, + + // PRIVATE + + _error: function NotifierUtils__error(aErrorString, aHelperString) + { + var caller = this._error.caller; + var s = ""; + for (i in this) + if (this[i].toString() == caller) + { + s = i + "()"; + break; + } + var errorString = aErrorString + + (aHelperString ? " '" + aHelperString + "'" : ""); + dump("### NotifierUtils: " + s + " " + errorString + "\n"); + }, + + _addNotifier: function NotifierUtils__addNotifier(aKeyword) + { + if (aKeyword && + !(aKeyword in this.mKeywords)) + { + this.mKeywords[aKeyword] = []; + this.mContexts[aKeyword] = []; + } + }, + + + // PUBLIC + + cleanNotifier: function NotifierUtils_cleanNotifier(aKeyword) + { + if (aKeyword in this.mKeywords) + { + this.mKeywords[aKeyword] = []; + this.mContexts[aKeyword] = []; + } + else + this._error("called with unrecognized notifier id", aKeyword); + }, + + addNotifierCallback: function NotifierUtils_addNotifierCallback(aKeyword, aFn, aContext) + { + if (!aKeyword || !aFn || (typeof aFn != "function")) + { + this._error("invalid call\n"); + return; + } + + if (!(aKeyword in this.mKeywords)) + this._addNotifier((aKeyword)); + + if (aKeyword in this.mKeywords) + { + this.mKeywords[aKeyword].push( aFn ); + this.mContexts[aKeyword].push( aContext ); + } + else + this._error("called with unrecognized notifier id", aKeyword); + }, + + removeNotifierCallback: function NotifierUtils_removeNotifierCallback(aKeyword, aFn) + { + if (!aKeyword || !aFn || (typeof aFn != "function")) + { + this._error("invalid call\n"); + return; + } + + if (aKeyword in this.mKeywords) + { + var callbacks = this.mKeywords[aKeyword]; + for (var index = 0; index < callbacks.length; index++) + if (callbacks[index] == aFn) + { + this.mKeywords[aKeyword].splice(index, 1); + this.mContexts[aKeyword].splice(index, 1); + return; + } + this._error("no such callback for notifier id", aKeyword); + } + else + this._error("called with unrecognized notifier id", aKeyword); + }, + + notify: function NotifierUtils_notify(aKeyword) + { + if (aKeyword in this.mKeywords) + { + var processes = this.mKeywords[aKeyword]; + var contexts = this.mContexts[aKeyword]; + + for (var i = 0; i < processes.length; i++) + try { + processes[i].apply(contexts[i], arguments); + } + catch (e) { + this._error("callback raised an exception for notifier id", aKeyword); + } + } + else + this._error("called with unrecognized notifier id", aKeyword); + } + +}; diff --git a/base/content/bluegriffon/utils/prompter.js b/base/content/bluegriffon/utils/prompter.js new file mode 100644 index 0000000..ec6dc69 --- /dev/null +++ b/base/content/bluegriffon/utils/prompter.js @@ -0,0 +1,111 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is BlueGriffon. + * + * The Initial Developer of the Original Code is + * Disruptive Innovations SARL. + * Portions created by the Initial Developer are Copyright (C) 2006 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Daniel Glazman , Original author + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +var PromptUtils = { + + /********** ATTRIBUTES **********/ + + mPromptService: null, + + /********** PRIVATE **********/ + + _getPromptService: function() + { + if (!this.mPromptService) + { + try { + this.mPromptService = + Components.classes["@mozilla.org/embedcomp/prompt-service;1"] + .getService(Components.interfaces.nsIPromptService); + } + catch(e) { dump("### cannot get a PromptService\n"); } + } + return this.mPromptService; + }, + + /********** PUBLIC **********/ + + alertWithTitle: function (aTitle, aMsg, aParentWindow) + { + var parentWindow = aParentWindow ? aParentWindow : window; + + if (this._getPromptService()) + { + if (!aTitle) + aTitle = L10NUtils.getString("Alert"); + + this.mPromptService.alert(parentWindow, aTitle, aMsg); + } + }, + + confirmWithTitle: function (aTitle, aMsg, aOkBtnText, aCancelBtnText) + { + const nsIPromptService = Components.interfaces.nsIPromptService; + + var promptService = this._getPromptService(); + if (promptService) + { + var okFlag = aOkBtnText ? nsIPromptService.BUTTON_TITLE_IS_STRING + : nsIPromptService.BUTTON_TITLE_OK; + var cancelFlag = aCancelBtnText ? nsIPromptService.BUTTON_TITLE_IS_STRING + : nsIPromptService.BUTTON_TITLE_CANCEL; + + return promptService.confirmEx(window, aTitle, aMsg, + (okFlag * nsIPromptService.BUTTON_POS_0) + + (cancelFlag * nsIPromptService.BUTTON_POS_1), + aOkBtnText, aCancelBtnText, null, null, {value:0}) == 0; + } + return false; + }, + + confirm: function(aTitle, aMsg) + { + var promptService = this._getPromptService(); + if (promptService) + { + return promptService.confirm(window, + aTitle, + aMsg) + } + return false; + }, + + prompt: function(window, captionStr, msgStr, result) + { + return this._getPromptService().prompt(window, captionStr, msgStr, result, null, {value:0}); + } +}; diff --git a/base/content/bluegriffon/utils/urls.js b/base/content/bluegriffon/utils/urls.js new file mode 100644 index 0000000..844ebea --- /dev/null +++ b/base/content/bluegriffon/utils/urls.js @@ -0,0 +1,537 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is BlueGriffon. + * + * The Initial Developer of the Original Code is + * Disruptive Innovations SARL. + * Portions created by the Initial Developer are Copyright (C) 2006 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Daniel Glazman , Original author + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +var UrlUtils = { + + /********** CONSTANTS ***********/ + + gWin: "Win", + gUNIX: "UNIX", + gMac: "Mac", + + /********** ATTRIBUTES **********/ + + mIOService: null, + mOS: null, + + /********** PUBLIC **********/ + + normalizeURL: function normalizeURL(url) + { + if (!this.getScheme(url) && !this.isUrlAboutBlank(url)) + { + var k = Components.classes["@mozilla.org/file/local;1"] + .createInstance(Components.interfaces.nsILocalFile); + + var noBackSlashUrl = url.replace(/\\\"/g, "\""); + var c0 = noBackSlashUrl[0]; + var c1 = noBackSlashUrl[1]; + if ((c0 == '/') || ((/^[a-zA-z]/.test(c0)) && (c1 == ":") )) + { + // this is an absolute path + k.initWithPath(url); + } + else + { + // First, get the current dir for the process... + var dirServiceProvider = + Components.classes["@mozilla.org/file/directory_service;1"] + .getService(Components.interfaces.nsIDirectoryServiceProvider); + var p = {}; + var currentProcessDir = dirServiceProvider.getFile("CurWorkD", p).path; + k.initWithPath(currentProcessDir); + + // then try to append the relative path + try { + k.appendRelativePath(url); + } + catch (e) { + dump("### Can't understand the filepath\n"); + return "chrome://bluegriffon/content/blanks/transitional.html"; + } + var ioService = + Components.classes["@mozilla.org/network/io-service;1"] + .getService(Components.interfaces.nsIIOService); + var fileHandler = + ioService.getProtocolHandler("file") + .QueryInterface(Components.interfaces.nsIFileProtocolHandler); + url = fileHandler.getURLSpecFromFile(k); + } + } + return url; + }, + + isUrlAboutBlank: function isUrlAboutBlank(urlString) + { + return (urlString == "chrome://bluegriffon/content/blanks/transitional.html"); + }, + + getIOService: function getIOService() + { + if (this.mIOService) + return this.mIOService; + + this.mIOService = Components.classes["@mozilla.org/network/io-service;1"] + .getService(Components.interfaces.nsIIOService); + + return this.mIOService; + }, + + newURI: function newURI(aURLString) + { + try { + return this.getIOService().newURI(aURLString, null, null); + } catch (e) { dump (e)+"\n"; } + + return null; + }, + + isTextURI: function isTextURI(aText) + { + return aText && /^http:\/\/|^https:\/\/|^file:\/\/|\ + ^ftp:\/\/|^about:|^mailto:|^news:|^snews:|^telnet:|^ldap:|\ + ^ldaps:|^gopher:|^finger:|^javascript:/i.test(aText); + }, + + makeRelativeUrl: function makeRelativeUrl(aURLString) + { + var inputUrl = TrimString(aURLString); + if (!inputUrl) + return inputUrl; + + // Get the filespec relative to current document's location + // NOTE: Can't do this if file isn't saved yet! + var docUrl = this.getDocumentBaseUrl(); + var docScheme = this.getScheme(docUrl); + + // Can't relativize if no doc scheme (page hasn't been saved) + if (!docScheme) + return inputUrl; + + var urlScheme = this.getScheme(inputUrl); + + // Do nothing if not the same scheme or url is already relativized + if (docScheme != urlScheme) + return inputUrl; + + var IOService = this.getIOService(); + if (!IOService) + return inputUrl; + + // Host must be the same + var docHost = this.getHost(docUrl); + var urlHost = this.getHost(inputUrl); + if (docHost != urlHost) + return inputUrl; + + + // Get just the file path part of the urls + var charset = EditorUtils.getCurrentEditor().documentCharacterSet; + var docPath = IOService.newURI(docUrl, charset, null).path; + var urlPath = IOService.newURI(inputUrl, charset, null).path; + + // We only return "urlPath", so we can convert + // the entire docPath for case-insensitive comparisons + var os = this.getOS(); + var doCaseInsensitive = (docScheme == "file" && os == this.gWin); + if (doCaseInsensitive) + docPath = docPath.toLowerCase(); + + // Get document filename before we start chopping up the docPath + var docFilename = this.getFilename(docPath); + + // Both url and doc paths now begin with "/" + // Look for shared dirs starting after that + urlPath = urlPath.slice(1); + docPath = docPath.slice(1); + + var firstDirTest = true; + var nextDocSlash = 0; + var done = false; + + // Remove all matching subdirs common to both doc and input urls + do { + nextDocSlash = docPath.indexOf("\/"); + var nextUrlSlash = urlPath.indexOf("\/"); + + if (nextUrlSlash == -1) + { + // We're done matching and all dirs in url + // what's left is the filename + done = true; + + // Remove filename for named anchors in the same file + if (nextDocSlash == -1 && docFilename) + { + var anchorIndex = urlPath.indexOf("#"); + if (anchorIndex > 0) + { + var urlFilename = doCaseInsensitive ? urlPath.toLowerCase() : urlPath; + + if (urlFilename.indexOf(docFilename) == 0) + urlPath = urlPath.slice(anchorIndex); + } + } + } + else if (nextDocSlash >= 0) + { + // Test for matching subdir + var docDir = docPath.slice(0, nextDocSlash); + var urlDir = urlPath.slice(0, nextUrlSlash); + if (doCaseInsensitive) + urlDir = urlDir.toLowerCase(); + + if (urlDir == docDir) + { + + // Remove matching dir+"/" from each path + // and continue to next dir + docPath = docPath.slice(nextDocSlash+1); + urlPath = urlPath.slice(nextUrlSlash+1); + } + else + { + // No match, we're done + done = true; + + // Be sure we are on the same local drive or volume + // (the first "dir" in the path) because we can't + // relativize to different drives/volumes. + // UNIX doesn't have volumes, so we must not do this else + // the first directory will be misinterpreted as a volume name + if (firstDirTest && docScheme == "file" && os != this.gUNIX) + return inputUrl; + } + } + else // No more doc dirs left, we're done + done = true; + + firstDirTest = false; + } + while (!done); + + // Add "../" for each dir left in docPath + while (nextDocSlash > 0) + { + urlPath = "../" + urlPath; + nextDocSlash = docPath.indexOf("\/", nextDocSlash + 1); + } + return urlPath; + }, + + makeAbsoluteUrl: function makeAbsoluteUrl(url) + { + var resultUrl = TrimString(url); + if (!resultUrl) + return resultUrl; + + // Check if URL is already absolute, i.e., it has a scheme + var urlScheme = this.getScheme(resultUrl); + + if (urlScheme) + return resultUrl; + + var docUrl = this.getDocumentBaseUrl(); + var docScheme = this.getScheme(docUrl); + + // Can't relativize if no doc scheme (page hasn't been saved) + if (!docScheme) + return resultUrl; + + var IOService = this.getIOService(); + if (!IOService) + return resultUrl; + + // Make a URI object to use its "resolve" method + var absoluteUrl = resultUrl; + var docUri = IOService.newURI(docUrl, EditorUtils.getCurrentEditor().documentCharacterSet, null); + + try { + absoluteUrl = docUri.resolve(resultUrl); + // This is deprecated and buggy! + // If used, we must make it a path for the parent directory (remove filename) + //absoluteUrl = IOService.resolveRelativePath(resultUrl, docUrl); + } catch (e) { dump (e)+"\n"; } + + return absoluteUrl; + }, + + getDocumentBaseUrl: function getDocumentBaseUrl() + { + try { + var docUrl; + + // if document supplies a tag, use that URL instead + var baseList = EditorUtils.getCurrentEditor().document.getElementsByTagName("base"); + if (baseList) + { + var base = baseList.item(0); + if (base) + docUrl = base.getAttribute("href"); + } + if (!docUrl) + docUrl = this.getDocumentUrl(); + + if (!this.isUrlAboutBlank(docUrl)) + return docUrl; + } catch (e) { dump (e)+"\n"; } + return ""; + }, + + getDocumentUrl: function getDocumentUrl() + { + try { + var aDOMHTMLDoc = EditorUtils.getCurrentEditor().document.QueryInterface(Components.interfaces.nsIDOMHTMLDocument); + return aDOMHTMLDoc.URL; + } + catch (e) { dump (e)+"\n"; } + return ""; + }, + + getScheme: function getScheme(urlspec) + { + var resultUrl = TrimString(urlspec); + // Unsaved document URL has no acceptable scheme yet + if (!resultUrl || this.isUrlAboutBlank(resultUrl)) + return ""; + + var IOService = this.getIOService(); + if (!IOService) + return ""; + + var scheme = ""; + try { + // This fails if there's no scheme + scheme = IOService.extractScheme(resultUrl); + } catch (e) { dump (e)+"\n"; } + + return scheme ? scheme.toLowerCase() : ""; + }, + + _getURI: function _getURI(aURLSpec) + { + if (!aURLSpec) + return ""; + + var IOService = this.getIOService(); + if (!IOService) + return ""; + + var uri = null; + try { + uri = IOService.newURI(aURLSpec, null, null); + } catch (e) { dump (e)+"\n"; } + + return uri; + }, + + getHost: function getHost(aURLSpec) + { + var host = ""; + var uri = this._getURI(aURLSpec); + if (uri) + host = uri.host; + return host; + }, + + getUsername: function getUsername(aURLSpec) + { + var username = ""; + var uri = this._getURI(aURLSpec); + if (uri) + username = uri.username; + return username; + }, + + getFilename: function getFilename(aURLSpec) + { + var filename = ""; + var uri = this._getURI(aURLSpec); + if (uri) + { + var url = uri.QueryInterface(Components.interfaces.nsIURL); + if (url) + filename = url.fileName; + } + + return filename ? filename : ""; + }, + + stripUsernamePassword: function stripUsernamePassword(aURLSpec, usernameObj, passwordObj) + { + var urlspec = TrimString(aURLSpec); + if (!urlspec || this.isUrlAboutBlank(urlspec)) + return urlspec; + + if (usernameObj) + usernameObj.value = ""; + if (passwordObj) + passwordObj.value = ""; + + // "@" must exist else we will never detect username or password + var atIndex = aURLSpec.indexOf("@"); + if (atIndex > 0) + { + try { + var IOService = this.getIOService(); + if (!IOService) + return urlspec; + + var uri = IOService.newURI(urlspec, null, null); + var username = uri.username; + var password = uri.password; + + if (usernameObj && username) + usernameObj.value = username; + if (passwordObj && password) + passwordObj.value = password; + if (username) + { + var usernameStart = urlspec.indexOf(username); + if (usernameStart != -1) + return urlspec.slice(0, usernameStart) + urlspec.slice(atIndex+1); + } + } catch (e) { dump (e)+"\n"; } + } + return urlspec; + }, + + stripPassword: function stripPassword(aURLSpec, passwordObj) + { + var urlspec = TrimString(aURLSpec); + if (!urlspec || this.isUrlAboutBlank(urlspec)) + return urlspec; + + if (passwordObj) + passwordObj.value = ""; + + // "@" must exist else we will never detect password + var atIndex = urlspec.indexOf("@"); + if (atIndex > 0) + { + try { + var IOService = this.getIOService(); + if (!IOService) + return urlspec; + + var password = IOService.newURI(urlspec, null, null).password; + + if (passwordObj && password) + passwordObj.value = password; + if (password) + { + // Find last ":" before "@" + var colon = urlspec.lastIndexOf(":", atIndex); + if (colon != -1) + { + // Include the "@" + return urlspec.slice(0, colon) + urlspec.slice(atIndex); + } + } + } catch (e) { dump (e)+"\n"; } + } + return urlspec; + }, + + // Version to use when you have an nsIURI object + stripUsernamePasswordFromURI: function stripUsernamePasswordFromURI(aURI) + { + var urlspec = ""; + if (aURI) + { + try { + urlspec = aURI.spec; + var userPass = aURI.userPass; + if (userPass) + { + start = urlspec.indexOf(userPass); + urlspec = urlspec.slice(0, start) + urlspec.slice(start+userPass.length+1); + } + } catch (e) { dump (e)+"\n"; } + } + return urlspec; + }, + + insertUsernameIntoUrl: function insertUsernameIntoUrl(aURLSpec, aUserName) + { + if (!aURLSpec || !aUserName) + return aURLSpec; + + try { + var ioService = this.getIOService(); + var URI = ioService.newURI(aURLSpec, this.getCurrentEditor().documentCharacterSet, null); + URI.username = aUserName; + return URI.spec; + } catch (e) { dump (e)+"\n"; } + + return aURLSpec; + }, + + getOS: function getOS() + { + if (this.mOS) + return this.mOS; + + var platform = navigator.platform.toLowerCase(); + + if (platform.indexOf("win") != -1) + this.mOS = this.gWin; + else if (platform.indexOf("mac") != -1) + this.mOS = this.gMac; + else if (platform.indexOf("unix") != -1 || platform.indexOf("linux") != -1 || platform.indexOf("sun") != -1) + this.mOS = this.gUNIX; + else + this.mOS = ""; + // Add other tests? + + return this.mOS; + }, + + getFileProtocolHandler: function getFileProtocolHandler() + { + try { + var ios = this.getIOService(); + var handler = ios.getProtocolHandler("file"); + return handler.QueryInterface(Components.interfaces.nsIFileProtocolHandler); + } + catch (e) { dump (e)+"\n"; } + return null; + } + +}; + + diff --git a/base/content/bluegriffon/xul/aboutDialog.xul b/base/content/bluegriffon/xul/aboutDialog.xul new file mode 100644 index 0000000..4fa495d --- /dev/null +++ b/base/content/bluegriffon/xul/aboutDialog.xul @@ -0,0 +1,93 @@ + + +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is Mozilla Firebird about dialog. +# +# The Initial Developer of the Original Code is +# Blake Ross (blaker@netscape.com). +# Portions created by the Initial Developer are Copyright (C) 2002 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Daniel Glazman +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the LGPL or the GPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** --> + +#filter substitution + + + + + +%brandDTD; + +%aboutDialogDTD; +]> + + + +