Scrapbook X 1.13.0
==================

This is the first release of 1.13 series, which is identical to v1.13.0rc5
except for documentation.


Compatibility notes (with 1.12.*)
---------------------------------

 * Added support for Firefox 50 and dropped support for Firefox 3.

   Firefox 50 totally removed the support of nsDragAndDrop API, which is
   required by the drag and drop function for Firefox 3 since it doesn't
   support the new API.

   Additionally, there have been many advanced features unavailable and
   many unresolvable issues persisted for Firefox 3.  Even if we keep
   support for Firefox 3, it's still problematic and not full-featured.

   As a result, we decided to shift to the new API (as legacy ScrapBook
   by Gomita had done) to support Firefox 50 and drop support for
   Firefox 3 to keep the code clean and simple.

 * Added support for non-folder-type folders.

   A new feature that a non-folder-type item can be converted into a
   folder to contain subitems (and vice versa) is added.

   Older ScrapBook versions can read the same ScrapBook directory saved
   by the new version, but they would have problems on the GUI, or when
   searching, fulltext-indexing, importing, or exporting them.

 * Notes now use plain-text and use pt as the font size unit.

   A note with functional HTML markups which is saved in an old version
   will be load as plain-text and loses all HTML formats.  A note saved
   in this version may be load with HTML special chars encoded in an old
   version.

   The font size for notes now uses pt rather than px as the unit.
   The underlying user preference recoding font size is also changed.
   Previous font size settings in an old version won't apply to the new
   version and vice versa.

 * The name and/or format of several user preferences are modified.
 
   A user preference set in an old version would be unavailable in the
   current version and needs a reset, and vice versa.

 * Language packs are largely modified.

   One thing has to be explicitly noted is that "capture" has been renamed
   to "save", as legacy ScrapBook by Gomita has done.  Additionally,
   previous "Localize Embedded External Media" has been simplified to
   "Internalize".  Some documentation may need to be updated accordingly.


Changes since v1.12.38
----------------------

Bug fixes:

 * Downloaded files now use HTTP header defined filename if it's available.

   This avoids some files be saved as .dat files, and also fixed an issue 
   for embeded media rendering if it depends on the file extension.  For
   example, an svg file is not rendered correctly if it's not saved with
   the file extension "svg".

 * A file whose URL is mixed with percent encoded components and standalone
   "%"s was not saved decoded.  For example, "process%20%2350%.txt" would
   be saved as "process%20%2350%.txt", and now will be "process #50%.txt".

 * A "srcset" attribute embedded image whose URL has an encoded space "%20"
   is not shown correctly after saved.

 * A CSS-linked file with a filename containing "'" is not saved correctly.

 * An error can occur when saving a page with a special protocol, such as
   an "about:" page.

 * A deep save can freeze up in certain cases if "Save Selection" is run
   and there is a link referencing the main page.

 * An unexpected result can occur when multiple page saving processes are
   running at the same time.

 * A <source> element under a <picture> element is not correctly saved.

 * An embeded media might be not downloaded correctly if the source page
   contains a <base> element.

 * A background image declared inside a media rule of an external CSS is
   not saved correctly.

 * A @import CSS rule or a media attribute of a stylesheet link element
   is not correctly handled by the combine wizard.

 * A script error occurs when internalizing a page with an <img> or
   <source> element having a "srcset" attribute.

 * The favicon of a page saved by link or deep save can sometimes be
   different to that saved from a direct browse.

 * A page linked from an XHTML page and has a path containing certain
   special characters (such as "!", "'", or "~") causes some interlinks be
   not built.

 * Certain styles and scripts become broken when an XHTML page is saved
   as HTML via "Save presenting HTML for non-HTML files".

 * Some editor functions, such as DOM Erasor and Freenote, do not work for
   an XHTML page.

 * Modifying a non-first filter in the Save dialog triggers an error.

 * Fixed several unexpected behaviors for drag and drop, such as:

   * Dropping with Alt hold does not create a bookmark as expected in 
     certain cases.

   * A save via dropping into the sidebar gets only the selected content
     of the currrent tab saved in certain cases.

   * Dropping items into a different window causes a wrong behavior.

   * Modifier keys for drag and drop don't work on several Linux platforms.

 * Copy Item may not work correctly on some platforms, such as Mac.

Save functionality:

 * A non-detail save now uses previously used detail save options.

   Note that there are some exceptions and not every option will be
   applied to every case.  For example, the deep save level is only
   available via Save As.  Combine and Internalize always preserve all
   images, media, fonts, frames, styles, and scripts no matter how the
   save detail options are set.  These hard settings are to prevent some
   unexpected or critical issues.

 * Save detail options are now remembered via the user preference.

 * Spaces in a URL now are saved encoded.

 * The filename of a deep saved webpage is now saved minimal encoded like
   an embeded file is.

 * <noscript> tags are now always saved when saving.

 * Every non-saved <link> or <script> tag now writes a non-functional URI
   containing the source rather then be removed when saving.

 * CSS are now saved in their original <link> or <style> tags.

   We made this change since the previous behavior of merging all styles
   into a single .css file fails to preserve the original data structure
   and causes some unresolvable issues, especially when javascript is
   involved.

 * Reworked CSS processing.
 
   The old option "Reorganize Styles" save option is removed and a new
   option "Process CSS" is added, which provides more options to process
   the CSS—like the one to rewrite links only (and thus preserves Firefox
   unsupported styles) and the one to not remove unused styles.

 * Removal of the "integrity" attribute.

   A save now removes the integrity attribute from web page elements
   (mainly <link>s and <script>s) so that they won't be blocked due to a
   modification made by ScrapBook X or a context change from online to
   offline.

   A new user preference "save.default.removeIntegrity" which can be used
   to disable this behavior is added.

 * The <script> element saving the status of a canvas now uses double
   quotes instead of single quotes.

 * A not downloadable file now uses a special URI.

   Files not saved successfully are now shown in a URI like
   "urn:scrapbook-download-error:http://..." rather than the original
   link, which is mostly relative link and will be invalid.

 * A local file is no more saved duplicated if it's identical.
 
   The saver no more duplicates a file when it is about to save a local
   file to a target with exactly same path and content.
 
   A relative link in Firefox will become absolute when it is copied or 
   cut to otherwhere, this feature used to cause a chaos when the user
   edits a note page or moves an embeded image.  With this change we can
   easily rewrite the absolute links back to relative using the
   internalizer.

 * A save via dragging a link now uses the link text as the default title.

   The default document title is selectable from the dropdown list of 
   title in the Save Detail dialog.

 * Modified the layout of Save Detail dialog.

   Page related information are now put in the "General" tab, and save 
   options are put in another "Options" tab.  The last used tab will be
   remembered.

 * Reworked the save dialog.

   * Save dialog now shows real-time status for each entry.

   * Save dialog now automatically detects an entry with circular
     redirection and fails out on it.

   * Moved "Timeout" and "Charset" options to Save dialog.

     These options only work before a page is loaded.  Previously they
     have been placed in the Save As dialog, which shows up after the
     page is loaded, causing them ignored when saving the main page.
 
   * Fixed several issues that "Pause", "Skip", and "Abort" buttons didn't
     work as expected when clicked in some cases.

   * "Skip" button now never resumes a paused task, which allows the user
     to skip multiple items during a pause.

   * "Abort" button now attempts to stop and finalize the current save
     when clicked once, and forces the save task to be terminated when
     clicked for the second time.

   * Added a context menu with "check/uncheck selected items" directives.

   * An invalid RegExp is now forbidden from input to prevent an error on
     filtering URLs.

 * Added save option "Save data URI as file".
 
   When checked, data URIs will be saved as a local file using its SHA1
   checksum as its filename.

   This also allows the internalizer to save data URI images, which are
   mostly created from dragging local files into an editable note page,
   into normal embeded files.

 * Removed save option "Save with UTF-8 encoding".

   This feature seems to be useful only in some very rare cases, and
   therfore we removed it from the dialog to "keep it simple and stupid".

   It is still available via the "save.default.forceUtf8" user
   preference if you really need it.

 * Removed the "Keep linking to the source for not-captured objects"
   save option.

   This option could cause some unresolvable issues and thus we decided
   to remove it.  We'll consider implementing this feature in another way
   in the future.

 * Reworked "Download linked files".
 
   It now uses regular expressions to filter the file extension, which
   is more flexible and portable.

   Additionally, an option that uses the file extension defined in the
   HTTP header of each link is added. This would be useful in certain
   cases, but note that it could also cause a bad performance.

 * New user preference "save.default.serializeFilename".

   With this option on, saved files are named using increamental number
   with the order they appear in the document flow.  This would be useful
   when we want to manage the embeded files with a correct order and can
   be in regular save, internalize, or combind.  However it may also cause
   issues due to the lost of the orinigal filenames, and thus its usage
   should be limited to certain special cases only.

 * New user preference "save.default.linkUrlFilters".

   This is a JSON string containing a simple string, a RegExp string
   (e.g. "/\\.php/i"), or an array with a combination of them.
   
   A URL in an anchor (<a> or <area>) matching it (or one of it if it's
   an array) will be totally ignored so that it's never condidered a
   candidate of download linked files or deep save.

   It can be used to exclude an offending URL that should never be visited,
   for example, a link that logouts the user.

   If the provided string is invalid, it will be ignored and the error
   will be output to the browser console for trouble shooting.

 * New user preferences to determine certain details to be recorded.

   "save.default.recordSkippedUrl", "save.default.recordRemovedAttr", and
   "save.default.recordInDepthLink" user preferences are now available to
   determine whether to record the skipped URLs, the removed attributes,
   and mark deep save page links during a save.  They are disabled by
   default since such information are more for debugging and are less
   likely needed for general users.

General user interface:

 * The focus is now automatically set on the data tree when the
   ScrapBook X sidebar is toggled shown.

 * Added internal contrast to several icons so that they are more visible
   on a platform with a dark background theme.

 * Adjusted Save detail dialog.

   * Save detail dialog now shows a scrollbar when the content overflows. 

   * Save detail dialog now has width and height persisted.

 * Modified the layout of Options dialog.

   * Options in the Advanced tab are moved to the Organize tab.

   * Added a button to set the default save options.

   * Moved the restart notify for hotkey customization to the top of the
     keys option panel.

   * Adjusted the order of several options.

   * Moved import/export/reset preferences from the advanced option to
     the dropdown list of a new indivisual dialog button.

 * Multi-ScrapBook is now always active.

   To reduce the complexity of managing ScrapBook directories, we now
   always activate the multi-ScrapBook mode and removed several unneeded
   options, user preferences, and internal codes.

   This also fixes some issues of the previous user interface.  For
   example, when the user selects the default ScrapBook folder and then
   enters the multi-ScrapBook manager, the previously selected ScrapBook
   directory is no more "active" and undeletable.

   Also, if the user selects the default ScrapBook directory, the sidebar
   shows only "ScrapBook X" and the output HTML page shows only "ScrapBook"
   instead of having "Profile folder".

 * Opening multiple instances of Multi-ScrapBook manager dialog is now
   forbidden.

 * Removed the "manage" button from the main sidebar.

 * Improved drag and drop related user interface, such as:

   * Better presentation of the current drag status, for example, whether
     it will pop a detail dialog, will creates a link, or will be forbidden.

   * A drag now holds more basic data so that it can be dropped onto the
     tab list, the browser window, or a plain text editor and triggers a
     more desirable behavior.

 * Added "L" accesskey for the "locate" directive of the editor toolbar.

Data tree, sidebar, and manager:

 * Incomplete ScrapBook directory paths are now treated as relative.

   This is to prevent a possible error for the multi-ScrapBook system.
   This change would also allow the user to set up a ScrapBook directory
   relative to the Firefox profile directory by modifying the entries
   in the multiple.txt or the value of "data.path" user prefreence.  Be
   aware that such usage is not downward compatible, breaks the GUI,
   could cause other issues and thus not encouraged, though.

 * Added support for non-folder-type folders.
 
   A new command "Convert to Folder" is added to convert a non-folder-type
   item (which is not a separator) into a "folder", so that other items
   can be placed under it.

   This would be useful if the user wants to leave notes in the folder,
   to make a folder searchable, or to create a more natural tree structure
   to publish.  These can now be easily achieved by converting a note
   page into a non-folder-type folder.

 * Adjusted the mouse and keyboard behavior.

   * Added space as a hotkey to open an item in the sidebar.

   * Ctrl/Shift+Enter no more opens a folder-type folder.

   * Single click on a folder no more toggles it in Manage window
     or folder picker dialog.

   * Ctrl- or Shift- click no more toggles a folder in Manage window.

   * Mid-click no more works in the folder picker dialog.

 * Added a general option "Use manage mode in the sidebar".
 
   This makes the sidebar work like Manage window, such as allowing
   multiple selection and acting on double-click instead of
   single-click.

 * Reworked "Sort" function.
 
   * Added "Sort by Create Time" and "Sort by Modify Time" options.

   * Added an "Descending" checkbox and reduced corresponding options
     for sorting with descending order.

   * When "Group by Type" is checked, note pages are now placed before
     (rather then after) notes.

Hotkey:

 * Improved cross-platform hotkey support.

   Now supports the command key and the hotkey presentation style for
   Macs.  Also added the support for customized accel key via the user
   preference "ui.key.accelKey".

 * Improved hotkey customization support.

   * A combination of keys is now allowed for a general hotkey.

   * The hotkeys of HTML editor and DOM eraser are now customizable.

     Hotkeys for HTML editor is available in the options dialog and user
     preference.  Hotkeys for DOM erasor is only available in the user
     preference.

 * Added new hotkeys.

   Customization of the hotkeys for opening Manage window and Save
   Multiple URLs are now allowed.

Combine wizard:

 * The combine wizard now supports HTML5 tags and attributes.

 * Combine Wizard no more produce redundant linefeeds between the wrapping
   div elements of each item combined.

 * Dropping a folder into the combine wizard now adds all its child items.

 * The warning message about deep saved pages now shows only once at the
   previewing time.

Output HTML tree:

 * Improved the user interface for the generated page.

   * Added an arrow to indicate folder status.

   * Customized folder icons are now shown.

   * Added a hover tooltip text for buttons toggling a folder.

   * The animation for an item action is now more clear.

 * No more uses the "opened folder" icon.

   Now use "treefolder.png" instead of "folder.png" as the default folder
   icon name, and no more generates "folder_open.png" accordingly.

The notes:

 * Notes are now plain-text only.

   Previously a note saves raw HTML text as-is, and its content is
   sometimes shown as plain-text and sometimes as HTML, depending on the
   context.  This is highly inconsistent and confusing.  Since a note is
   more likely used for quick noting in the sidebar, and we already have
   a note page as the full HTML-featured note, we decided to make notes
   strictly plain-text-only so that the user can easily paste-in any
   plain-text contents without worrying about breaking anything when
   they're read.

 * Font size settings for notes now uses pt instead of px unit.

   Most softwares use pt for font size, and we made this change to make
   it more familiar to general users.

Core changes:

 * Added several new core APIs and removed several ones.

 * Merged language files into two files—"message.dtd" and
   "message.properties"—for each language.

 * Moved many styling effects from XUL and javascript code to the skin CSS.

 * Switch strftime to a new library.

Documentation changes:

 * Release notes now goes one-file-for-one-version.

Also includes many code clean-up, documentation revises, and localization 
and tooltip improvements.
