<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml'/>
<!--}}}-->
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}

h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

.tabSelected{color:[[ColorPalette::PrimaryDark]];
	background:[[ColorPalette::TertiaryPale]];
	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
	border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}

#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
.sparktick {background:[[ColorPalette::PrimaryDark]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

.imageLink, #displayArea .imageLink {background:transparent;}

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}

.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity:60)';}
/*}}}*/
/*{{{*/
* html .tiddler {height:1%;}

body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0em 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0em 1em 1em; left:0px; top:0px;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0em 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 .3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.wizard {padding:0.1em 1em 0em 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0em 0em 0em 0em; margin:0.4em 0em 0.2em 0em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0em 0em 0em 0em; margin:0.4em 0em 0.2em 0em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0em 0em 0em; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0em;}
.wizardFooter .status {padding:0em 0.4em 0em 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em 0.1em 0.2em;}

#messageArea {position:fixed; top:2em; right:0em; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em 0.2em 0.2em 0.2em;}
#messageArea a {text-decoration:underline;}

.tiddlerPopupButton {padding:0.2em 0.2em 0.2em 0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em 1em 1em 1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0em;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0em 0em 0.5em;}
.tab {margin:0em 0em 0em 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0em 14em;}

.toolbar {text-align:right; font-size:.9em;}

.tiddler {padding:1em 1em 0em 1em;}

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0em 0.25em; padding:0em 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0em; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}

.fieldsetFix {border:0; padding:0; margin:1px 0px 1px 0px;}

.sparkline {line-height:1em;}
.sparktick {outline:0;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em 0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em 0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0em; right:0em;}
#backstageButton a {padding:0.1em 0.4em 0.1em 0.4em; margin:0.1em 0.1em 0.1em 0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; margin:0em 3em 0em 3em; padding:1em 1em 1em 1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em 0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
***/
/*{{{*/
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none ! important;}
#displayArea {margin: 1em 1em 0em 1em;}
/* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
noscript {display:none;}
}
/*}}}*/
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span></div>
<!--}}}-->
To get started with this blank TiddlyWiki, you'll need to modify the following tiddlers:
* SiteTitle & SiteSubtitle: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* MainMenu: The menu (usually on the left)
* DefaultTiddlers: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
These InterfaceOptions for customising TiddlyWiki are saved in your browser

Your username for signing your edits. Write it as a WikiWord (eg JoeBloggs)

<<option txtUserName>>
<<option chkSaveBackups>> SaveBackups
<<option chkAutoSave>> AutoSave
<<option chkRegExpSearch>> RegExpSearch
<<option chkCaseSensitiveSearch>> CaseSensitiveSearch
<<option chkAnimate>> EnableAnimations

----
Also see AdvancedOptions
<<importTiddlers>>
> 把書籤測邊欄分成二欄
* ''套件作者'':[[SHIMODA Hiroshi|http://piro.sakura.ne.jp/xul/]]
* ''套件網頁'':[[官方網頁|http://piro.sakura.ne.jp/xul/_bookmarks2pane.html.en]]、[[Add-ons#1928|https://addons.mozilla.org/zh-TW/firefox/addon/1928]]
* ''套件語系'':英文其他
* ''撰寫版號'':0.4.2008052701
* ''套件功能'':
** 把書籤側邊欄分成上下兩欄,在上欄點子目錄會顯示在下欄中
** 點選某一資料夾時自動縮起其他的資料夾(可自訂使用與否)。
** 可設定側邊欄書籤開啟在新分頁中,不取代目前分頁。
* ''相關鏈結'':
* ''相關類似'':[[Autoclose Bookmark&History Folders]]
* ''心得介紹'':<br>這個套件適合書籤太多的人,把書籤側邊欄分成上下兩欄,在檢視時更清爽容易看清楚目標。<br><br>目前的 0.4.2008052701 對應 Firefox 3 的版本,泉有些不太滿意。上欄只顯示資料夾,下欄只顯示書籤,不像以往可以從下欄點資料夾進入。且若增加資料夾,會一小段時間疑似當掉般動彈不能。建議目前的版本不要直接從側邊欄增加資料夾較穩定……。希望後繼版本能修正這部分的問題。
<<forEachTiddler
 where 'tiddler.tags.contains("擴充套件") &&
		 tiddler.tags.contains("3官方版本支援") &&
		 ! tiddler.tags.contains("_tempEX")'
 sortBy 'tiddler.title'
 script
 'function getFirstLine(s) { var m = s.match(/\s*(.*)/);
  return m != null && m.length >= 1 ? m[1] : "";  }  
	function writeExpenseRow(index, tiddler, context) { var result = ""; if (index == 0) {context.sum = 0; result = "|!推薦|!啟用|!名稱|!介紹|\n";} result += "| [_(" + tiddler.title + ":推薦)] | [_(" + tiddler.title + ":啟用)] |![[" + tiddler.title + "]] |" + getFirstLine(tiddler.text) + "|\n"; return result;}'
 write
	'writeExpenseRow(index, tiddler, context)'
>>
<<forEachTiddler
 where 'tiddler.tags.contains("擴充套件") &&
		 tiddler.tags.contains("3已具備該功能") &&
		 ! tiddler.tags.contains("_tempEX")'
 sortBy 'tiddler.title'
 script
 'function getFirstLine(s) { var m = s.match(/\s*(.*)/);
  return m != null && m.length >= 1 ? m[1] : "";  }  
	function writeExpenseRow(index, tiddler, context) { var result = ""; if (index == 0) {context.sum = 0; result = "|!推薦|!啟用|!名稱|!介紹|\n";} result += "| [_(" + tiddler.title + ":推薦)] | [_(" + tiddler.title + ":啟用)] |![[" + tiddler.title + "]] |" + getFirstLine(tiddler.text) + "|\n"; return result;}'
 write
	'writeExpenseRow(index, tiddler, context)'
>>
<<forEachTiddler
 where 'tiddler.tags.contains("擴充套件") &&
		 tiddler.tags.contains("3改相容性支援") &&
		 ! tiddler.tags.contains("_tempEX")'
 sortBy 'tiddler.title'
 script
 'function getFirstLine(s) { var m = s.match(/\s*(.*)/);
  return m != null && m.length >= 1 ? m[1] : "";  }  
	function writeExpenseRow(index, tiddler, context) { var result = ""; if (index == 0) {context.sum = 0; result = "|!推薦|!啟用|!名稱|!介紹|\n";} result += "| [_(" + tiddler.title + ":推薦)] | [_(" + tiddler.title + ":啟用)] |![[" + tiddler.title + "]] |" + getFirstLine(tiddler.text) + "|\n"; return result;}'
 write
	'writeExpenseRow(index, tiddler, context)'
>>
<<forEachTiddler
 where 'tiddler.tags.contains("擴充套件") &&
		 tiddler.tags.contains("3目前無法支援") &&
		 ! tiddler.tags.contains("_tempEX")'
 sortBy 'tiddler.title'
 script
 'function getFirstLine(s) { var m = s.match(/\s*(.*)/);
  return m != null && m.length >= 1 ? m[1] : "";  }  
	function writeExpenseRow(index, tiddler, context) { var result = ""; if (index == 0) {context.sum = 0; result = "|!推薦|!啟用|!名稱|!介紹|\n";} result += "| [_(" + tiddler.title + ":推薦)] | [_(" + tiddler.title + ":啟用)] |![[" + tiddler.title + "]] |" + getFirstLine(tiddler.text) + "|\n"; return result;}'
 write
	'writeExpenseRow(index, tiddler, context)'
>>
<<forEachTiddler
 where 'tiddler.tags.contains("擴充套件") &&
		 tiddler.tags.contains("3開發版本支援") &&
		 ! tiddler.tags.contains("_tempEX")'
 sortBy 'tiddler.title'
 script
 'function getFirstLine(s) { var m = s.match(/\s*(.*)/);
  return m != null && m.length >= 1 ? m[1] : "";  }  
	function writeExpenseRow(index, tiddler, context) { var result = ""; if (index == 0) {context.sum = 0; result = "|!推薦|!啟用|!名稱|!介紹|\n";} result += "| [_(" + tiddler.title + ":推薦)] | [_(" + tiddler.title + ":啟用)] |![[" + tiddler.title + "]] |" + getFirstLine(tiddler.text) + "|\n"; return result;}'
 write
	'writeExpenseRow(index, tiddler, context)'
>>
> 編輯網頁上的物件
* ''套件作者'':[[Rob Brown|http://karmatics.com]]
* ''套件網頁'':[[官方網頁|http://karmatics.com/aardvark/]]、[[Add-ons#4111|https://addons.mozilla.org/zh-TW/firefox/addon/4111]]
* ''套件語系'':英文其他
* ''套件功能'':
** 點選快速工具列上的按鍵啟用/關閉 Aardvark 功能。
** 游標移到的地方會以紅色框線表示選取區塊。
** 直接按快速鍵可以對區塊操作,熱鍵如下:
*** h:熱鍵說明。
*** q:關閉 Aardvark 功能。
*** u:復原。
*** w:向外延伸選取區塊。
*** n:向內縮小選取區塊。
*** r:移除選取區塊。
*** i:將選取區塊獨立出來(移除除選區區外的部分)。
*** v:檢視原始碼。
* ''相關鏈結'':[[中文介紹|http://playpcesor.blogspot.com/2007/09/aardvark20.html]]
* ''相關類似'':
* ''心得介紹'':<br>其實這個除了讓網頁擷取工具在擷取時不會擷取到不必要的圖片及物件外,大概只有印列時稍微有用吧?因為重整網頁後,編輯過的頁面就會回覆原狀了。但是像 [[ScrapBook]] 其實可以編輯過後再行擷取,可以不必靠這個套件。
> 把書籤加入到指定位置
* ''套件作者'':[[Daniel Lindkvist|http://mfe.gorgias.de/]]
* ''套件網頁'':[[官方網頁|http://mfe.gorgias.de/#abhere]]、[[Add-ons#11|https://addons.mozilla.org/zh-TW/firefox/addon/11]]
* ''套件語系'':英文其他
* ''套件功能'':
** 可在指定位置直接加入書籤。
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?t=11959]]
* ''相關類似'':[[Add Bookmark Here ²]]
* ''心得介紹'':<br>其實泉是和 [[Add Bookmark Here ²]] 同時認識這個套件的,所以後直接用了具整合興的 [[Add Bookmark Here ²]] ,而沒有使用這個套件。
> 在此加入書籤/展開書籤列表
* ''套件作者'':yuoo2k
* ''套件網頁'':[[Add-ons#3880|https://addons.mozilla.org/zh-TW/firefox/addon/3880]]
* ''套件語系'':內建繁中
* ''撰寫版號'':1.0.20070528
* ''套件功能'':
**  加入書籤時除了預設的書籤名稱及網址外,亦可設定說明、關鍵字
**  可記錄上一次加入書籤的目錄,並自動把書籤目錄展開。
**  在加入書籤時可選擇加入書籤的指定位置。
**  可選擇幾個書籤相關選項的顯示與否及顯示位置。
**  可在書籤列上任意移動資料夾,可從選項中調整選擇是否啟用這個功能。
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?t=16450]]
* ''相關類似'':[[OpenBook]]、[[Add Bookmark Here]]
* ''心得介紹'':<br>整合 [[Add Bookmark Here]] 和 [[OpenBook]] 兩個套件的功能。<br><br>Firefox 內建的新增書籤功能實在太精簡了,沒套件支援實在很辛苦!平常不能拖來拖去的書籤資料夾,也在這個套件的加持下得以拖動,真是太棒了!不過有時要小心不要拖到不該拖的書籤資料夾就是了(笑)
> 簡單快速自製你需要的搜尋引擎
* ''套件作者'':[[Dr. Evil|http://maltekraus.de/Firefox/]]
* ''套件網頁'':[[官方網頁|http://]]、[[mozdev|https://]]、[[Add-ons#3682|https://addons.mozilla.org/zh-TW/firefox/addon/3682]]
* ''套件語系'':英文其他
* ''撰寫版號'':1.7
* ''套件功能'':
** 從右鍵選項簡單將網頁上搜尋欄位製成 Firefox 搜尋引擎用的 xml 檔。
** 可以備妥的圖片取代網頁預設的小圖示。
* ''相關鏈結'':[[中文介紹|http://]]、[[中文介紹|http://playpcesor.blogspot.com/2008/01/firefox.html]]
* ''相關類似'':[[OpenSearchFox]]
* ''心得介紹'':<br>因為 OpenSearchFox 停止更新而改用的套件,似乎不具備 OpenSearchFox 的多重搜尋選項詢問的功能……?但能自製搜尋引擎還是極為便利!
> 用滑鼠手勢進行各種動作操作
* ''套件作者'':Marc Boullet
* ''套件網頁'':[[官方網頁|http://pagesperso-orange.fr/marc.boullet/ext/extensions-en.html]]、[[Add-ons#12|https://addons.mozilla.org/zh-TW/firefox/addon/12]]
* ''套件語系'':內建繁中
* ''撰寫版號'':0.18.0
* ''套件功能'':
** 自訂拖動滑鼠做出滑鼠手勢的作用。
** 可自訂滑鼠軌跡顏色、粗細。
** 可自訂搖擺手勢、滾輪手勢、按鍵手勢。
** 可自動生成動作表,供使用者查閱所設定的手勢動作。
** 可匯出匯入手勢設定。
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?t=6278]]
* ''相關類似'':[[FireGestures]]
* ''心得介紹'':<br>雖然個人完全不碰這個套件,不過基本上這可以說是國民套件吧?泉裝上這個套件,看到一堆選項頭就先開始昏,再來滑鼠手勢也老是記不起來……。泉還是回去玩泉可愛的圓盤手勢 [[easyGestures]] 吧!
> 把各種資訊視窗放到側邊欄
* ''套件作者'':Ingo Wennemaring
* ''套件網頁'':[[官方網頁|http://firefox.exxile.net/aios/]]、[[Add-ons#1027|https://addons.mozilla.org/zh-TW/firefox/addon/1027]]
* ''套件語系'':內建繁中
* ''撰寫版號'':0.7.3
* ''套件功能'':
** 在側邊增加一行快速工具列。
** 可自訂出現在左邊或右邊。
** 讓另開視窗的擴充套件、下載、網頁資訊等皆可以直接在側邊欄開啟。
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?t=9430]]、[[中文介紹|http://firefox2007.blogspot.com/2007/07/aios.html]]
* ''相關類似'':[[Sidebar on Right]]
* ''心得介紹'':<br>以前玩過一陣子,最近嫌工具列太小,又拿回來放的套件。因為覺得側邊欄在左邊一開就會影響整個網頁,所以被泉挪去右邊開啟,較不容易影響。結果是大大滿意(笑
/***
!Metadata:
|''Name:''|ArchivedTimeline|
|''Description:''|Timeline archived monthly.|
|''Version:''|0.7.0|
|''Date:''|Aug 25, 2007|
|''Source:''|http://sourceforge.net/project/showfiles.php?group_id=150646|
|''Author:''|BramChen (bram.chen (at) gmail (dot) com)|
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''~CoreVersion:''|2.0.11|
|''Browser:''|Firefox 1.5+; InternetExplorer 6.0|

!Syntax:
{{{<<timeline [modified|created [maxentries [dateFormate]]]>>}}}
!Examples:
{{{<<timeline>>}}}
{{{<<timeline created 10>>}}}
{{{<<timeline modified 10 "MMM DD, YYYY">>}}}

!Revision History:
|''Version''|''Date''|''Note''|
|0.7.0|Jul 25, 2006|Accept a date format parameter|
|0.6.3|Jan 14, 2007|Cleaned codes, Removed config.macros.timeline.slider and config.macros.timeline.onClickSlider|
|0.6.2|Dec 10, 2006|Add monthFormat to display month format for Chinese|
|0.6.1|Aug 12, 2006|A great effect on config.macros.timeline.slider for Firefox, thanks Bob McElrath|
|0.6.0|Jul 25, 2006|Runs compatibly with TW 2.1.0 (rev #403+)|
|0.5.2|Jun 21, 2006|Fixed bugs for dateFormat of TW 2.1|
|~|~|Change default dateFormat to "0DD MMM, YYYY"|
|0.5.1|Jun 04, 2006|Added config.macros.archivedTimeline.orderBy for localization|
|0.5.0|Apr 19, 2006|Fixed bug for twice records of the same date ()|
|~|~|Added Date.prototype.convertToLocalYYYYMMDDHHMM<<br>>in order to backward compatible with 2.0.6-|
|0.4.0|Apr 03, 2006|Added new parameter, {{{<<timeline [sortfield] [maxentries]>>}}}|
|~|~|Added config.options.txtTimelineMaxentries|
|0.3.1|Feb 04, 2006|JSLint checked|
|0.3.0|Feb 04, 2006|Fixed several missing variable declarations|
|0.2.0|Dec 26, 2005|changed for the new feature of Macro timeline of TW 2.0.0 beta 6|
|0.1.0|Nov 3, 2005|Initial release|

!Code section:
***/
//{{{
version.extensions.archivedTimeline = {major: 0, minor: 7, revision: 0,
	date: new Date("Aug 26, 2007"),
	name: "ArchivedTimeline",
	type: "Macro",
	author: "BramChen",
	source: "http://sourceforge.net/project/showfiles.php?group_id=150646"
};
config.options.txtTimelineMaxentries=0;
config.macros.archivedTimeline = {
	tooltips: "Archives sorted by  ",
	orderBy:{modified: "modified", created: "created"},
	monthFormat: "0DD MMM YYYY",
	dateFormat: "0DD MMM YYYY"
};
config.macros.timeline = config.macros.archivedTimeline;

config.macros.timeline.handler = function(place,macroName,params) {
	var field = params[0] ? params[0] : "modified";

	place.appendChild(document.createTextNode(this.tooltips + this.orderBy[field]));
	var tiddlers = store.reverseLookup("tags","excludeLists",false,field);
	var lastMonth = ""; var lastDay = ""; var theText = "----\n"; var i = 0;
	var last = (params[1])?params[1]:config.options.txtTimelineMaxentries;
		last = (isNaN(last)||last<1) ? 0:tiddlers.length-Math.min(tiddlers.length,parseInt(last));
	var dateFormat = params[2] ? params[2] : this.dateFormat;
	var cookie; var archives;
	for (var t=tiddlers.length-1; t>=last; t--) {
		var tiddler = tiddlers[t];
		var theMonth = tiddler[field].convertToLocalYYYYMMDDHHMM().substr(0,6);
		var theDay = tiddler[field].convertToLocalYYYYMMDDHHMM().substr(0,8);
		if(theMonth != lastMonth) {
			if (lastMonth === "") {
				lastMonth = theMonth;
				}
			else {
				place.appendChild(document.createElement('hr'));
				cookie = 'chktimeline'+(i++);
				archives = this.formatString(this.monthFormat, lastMonth);
				var panel = config.macros.slider.createSlider(place,cookie,archives,this.tooltips + archives);
				wikify(theText,panel);
				lastMonth = theMonth; theText = '----\n';
			}
		}
		if(theDay != lastDay){
			theText +=  tiddler[field].formatString(dateFormat) + '\n';
			lastDay = theDay; 
		}
		theText += '* [[' + tiddler.title + ']]\n';
	}
	place.appendChild(document.createElement('hr'));
	cookie = 'chktimeline'+(i++);
	archives = this.formatString(this.monthFormat, lastMonth);
	var panel = config.macros.slider.createSlider(place,cookie,archives,this.tooltips + archives);
	wikify(theText,panel);
	place.appendChild(document.createElement('hr'));
};

config.macros.timeline.formatString = function(template, yyyymm)
{
	var dateString = new Date(yyyymm.substr(0,4)+'/'+yyyymm.substr(4,2)+'/01');
	template = template.replace(/DDD|0DD|DD/g,'');
	return dateString.formatString(template);
};
if (!Date.prototype.convertToLocalYYYYMMDDHHMM){
	Date.prototype.convertToLocalYYYYMMDDHHMM = function(){
		return(String.zeroPad(this.getFullYear(),4) + String.zeroPad(this.getMonth()+1,2) + String.zeroPad(this.getDate(),2) + String.zeroPad(this.getHours(),2) + String.zeroPad(this.getMinutes(),2));
	}
}
//}}}
> 自動複製反白的網頁文字
* ''套件作者'':Michael Lidman
* ''套件網頁'':[[mozdev|http://autocopy.mozdev.org/]]、[[Add-ons#383|https://addons.mozilla.org/zh-TW/firefox/addon/383]]
* ''套件語系'':內建繁中
* ''撰寫版號'':0.8
* ''套件功能'':
** 反白放掉時自動進行文字的複製。
** 可設定複製時右下角圖示閃動與否。
** 可設成在反白放掉時顯示選單,自行選擇要複製到網址列/搜尋列等區域。
** 具備剪貼簿暫存功能,可存最新十個。
** 點選右下角小圖示直接開啟/關閉 Auto Copy 的功能。
* ''相關鏈結'':[[中文修正|http://forum.moztw.org/viewtopic.php?t=18082#125246]]
* ''相關類似'':
* ''心得介紹'':<br>因為習慣把 [[PCMan|http://pcman.openfoundry.org/]] 的 BBS 設定成反白就會自動複製,最近在 Firefox 玩 [[Gaaan|http://gaaan.com/]] 總會不自覺的以為反白就會自動複製,剛好看到這個套件。個人覺得使用起來感覺還不錯。<br><br>--另外這個套件內建的中文語系檔似乎有問題,會造成右下角小圖示消失。--最新的官方下載版本有些問題,建議有需要的人可以去上面的中文修改中下載 Velociraptor 在 [[MozTW|http://forum.moztw.org/]] 發佈的修正。另外安裝前最好也先移除原本安裝的版本。
> 自動縮起書籤和歷史資料夾
* ''套件作者'':[[Ronny Perinke|http://www.sephiroth-j.de/]]
* ''套件網頁'':[[官方網頁|http://www.sephiroth-j.de/1/mozilla/#ac-btf]]
* ''套件語系'':內建簡中
* ''撰寫版號'':
* ''套件功能'':
** 點選側邊欄書籤及歷史的某一資料夾時,自動縮起其他已開啟的資料夾。
* ''相關鏈結'':
* ''相關類似'':[[2 Pane Bookmarks]]
* ''心得介紹'':<br>有時候在側邊欄書籤列把資料夾都打開,要一個個去關上實在很惱人。這個可以讓你省去一個個去關閉的動作。<br><br>後來發現 [[2 Pane Bookmarks]] 本身就具備該功能而停用。
> 快速插入BBCode、HTML、特殊符號及自訂標籤
* ''套件作者'':[[Jed Brown|http://jedbrown.net/]], [[Mel Reyes (aka: mrtech)|http://www.mrtech.com/extensions/]]
* ''套件網頁'':[[Add-ons#128|https://addons.mozilla.org/zh-TW/firefox/addon/128]]
* ''套件語系'':內建繁中
* ''撰寫版號'':0.5.2.2
* ''套件功能'':
** 從右鍵選單快速插入BBCode、HTML、XHTML、特殊附號、自訂標籤(不能用中文)
** 支援粗體、斜體、底線、文字顏色、鏈結、圖片等標籤
** 剪貼簿功能:利用複製進剪貼簿的網址或文字,加強快速插入。
** 自訂標籤功能:
*** _value_:使用反白文字的標籤。例如設定成「a_value_b」,反白編輯區中的文字「測試」二字,使用後的結果會變成「a測試b」。
*** _clipboard_:使用剪貼簿中文字的標籤。使用方法同上。
*** _date_:顯示當天日期的標籤。
*** _time_:顯示當時時間的標籤。
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?t=2694]]
* ''相關類似'':[[BBCodeXtra]]
* ''心得介紹'':<br>BBCode比[[BBCodeXtra]]使用上更為直覺,在功能前都加上一目瞭然的小圖示,加上強大的自訂標籤功能,讓人愛不釋手。<br><br>--只可惜作者已經沒有在維護這個套件,只能靠其他熱心人士的修正。支援2.0.*的版本可以在版本修正中下載到,Add-ons上面的無法在2.0.*上使用。--目前因應 Firefox 3.0 的動作再度開始更新。
> 快速插入 BBCode、HTML、XHTML 標籤
* ''套件作者'':[[eXtenZilla|http://www.extenzilla.org/]]
* ''套件網頁'':[[Add-ons#491|https://addons.mozilla.org/zh-TW/firefox/addon/491/]]
* ''套件語系'':內建簡中
* ''撰寫版號'':
* ''套件功能'':
** 從右鍵選單快速插入 BBCode 、 HTML 、 XHTML 標籤
** 支援粗體、斜體、底線、文字顏色、鏈結、圖片等標籤
** 剪貼簿功能:利用複製進剪貼簿的網址或文字,加強快速插入。例如先複製起網址,再選取要鏈結網址的文字,點選【剪貼簿】→【以所選內容為名的鏈結】,就可以製成鏈結!其他也有基礎型功能等。
* ''相關鏈結'':
* ''相關類似'':[[BBCode]]
* ''心得介紹'':<br>這個套件的功能就是讓你快速插入各種 BBCode 和 HTML 及 XHTML 的標籤。貼上標籤便利,剪貼簿功能更令人大為讚賞喔!<br><br>其實同性質的套件個人更想推的是 [[BBCode]] 這個套件--,可惜 [[BBCode]] 作者沒在維護了,只能靠社群私修版--,因應 Firefox 3 已有更新。
> 無所不在的所見即所得編輯器
* ''套件作者'':[[Nicolas FROIDURE|http://www.elitwork.com]]
* ''套件網頁'':[[官方網頁|http://bbcomposer.elitwork.com/home.html]]、[[Add-ons#3795|https://addons.mozilla.org/zh-TW/firefox/addon/3795]]
* ''套件語系'':英文其他
* ''撰寫版號'':1.0
* ''套件功能'':
** 在網頁上的文字輸入區可用右鍵叫出所見即所得編輯工具列。
** 可以設定成在原來頁面編輯還是另開分頁編輯。
** 支援HTML、BBCode、MediaWiki的語法。
** 可儲存個別網頁預設的網輯器模式m
* ''相關鏈結'':[[中文介紹|http://gaaan.com/EZsoft?p=13087]]
* ''相關類似'':[[Xinha Here!]]
* ''心得介紹'':<br>在顏色語法部分,支援的是偏向CSS變色,而非較單純的HTML及BBCode簡易變色語法。另外內建有一些小圖示可以插入(在工具列右邊數來第二個圖示點下去的選項裡面)。<br><br>雖然這個套件支援的語法不少,個人還是覺得它很難用,大概我跟這種所見即所得的東西不合吧?切換使用語法工作列時不太順手、加入標籤時我老會覺得加入點很奇怪。可惜[[Xinha Here!]]只支援HTML,不然我覺得那遠比這個好用多了。
> 檢查是否為重覆書籤
* ''套件作者'':Stephane BERTIN
* ''套件網頁'':[[mozdev|http://bookmarkdd.mozdev.org/]]、[[Add-ons#1553|https://addons.mozilla.org/zh-TW/firefox/addon/1553]]
* ''套件語系'':內建繁中
* ''撰寫版號'':0.6.3
* ''套件功能'':
** 新增已存在的網址時會跳出警告訊息。可選擇移動原本書籤,或是加入一個重複的書籤。
** 可以自動檢查書籤中是否有重複書籤並加以刪除。
** 提供匯出匯入書籤介面。
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?t=6293]]
* ''相關類似'':
* ''心得介紹'':<br>泉主要是是看重新增時檢查重覆的功能,搜尋重覆書籤並刪除的功能倒是沒有用過。<br><br>在 Firefox 3 中,若新增的書籤是已有的,新增書籤的訊息上上會有【移除書籤】的按鍵可選。在連線到有加入書籤的網站時,網址列的星星也會由空白轉為黃色星星。
> 確認書籤內的網頁是否還存活
* ''套件作者'':[[Randy Weinstein|http://homepages.nyu.edu/~rw263/]]
* ''套件網頁'':[[Add-ons#1647|https://addons.mozilla.org/zh-TW/firefox/addon/1647]]
* ''套件語系'':英文其他
* ''撰寫版號'':0.6.8.4
* ''套件功能'':
** 可檢查書籤更新及存活狀況。
** 在書籤管理員內以圖示顯示檢查結果。
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?t=6055]]
* ''相關類似'':[[Update Scanner]]
* ''心得介紹'':<br>同時可檢查更新及網站是否還能連線等功能的套件。個人比較著重檢查書籤存活與否的功能,因為它的檢查更新並沒有像 [[Update Scanner]] 一樣有明顯的提醒功能——雖然可以設定直接把檢查完有更新的書籤開新分頁。
> 增加【書籤】下拉式按鍵
* ''套件作者'':[[Ronny Perinke|http://www.sephiroth-j.de/]]
* ''套件網頁'':[[官方網頁|http://www.sephiroth-j.de/1/mozilla/#bmb-ext]]
* ''套件語系'':英文其他
* ''撰寫版號'':0.5b1
* ''套件功能'':
** 在工具列上新增一個【書籤】的下拉式按鍵。
* ''相關鏈結'':
* ''相關類似'':[[Compact Menu]]、[[Compact Menu 2]]、[[Personal Menu]]
* ''心得介紹'':<br>Firefox 提供的書籤圖示按鍵是用來開書籤側邊欄的,其實個人相當不喜愛這一點。不過因為泉自己用過的更改介面套件 [[Compact Menu]] 、 [[Compact Menu 2]] 及 [[Personal Menu]] 皆有提供該功能,所以泉自己反而不太會單一這個功能的套件。<br><br>適合只需要新增一個【書籤】下拉式按鍵而不需要其他合併功能的人。
> 讓書籤選單也有捲軸
* ''套件作者'':[[Todd Long|http://www.longfocus.com/firefox]]
* ''套件網頁'':[[官方網頁|http://www.longfocus.com/firefox/updatenotifier/]]、[[Add-ons#2600|https://addons.mozilla.org/zh-TW/firefox/addon/2600]]
* ''套件語系'':英文其他
* ''撰寫版號'':1.0.5
* ''套件功能'':
** 讓過長的書籤選單或右鍵選單顯示捲軸。
* ''相關鏈結'':
* ''相關類似'':
* ''心得介紹'':<br>有時候一個資料夾書籤放下多,就得去點選最底下或最上面的方向鍵慢慢捲,相當不方便。這個套件的功用就是讓這些選單像超出頁面的網頁一樣長出捲軸,讓你可以直接用拖較為快速便利。
> 計算瀏覽器開啟時間
* ''套件作者'':[[Cosmic Cat Creations|http://www.cosmicat.com]]
* ''套件網頁'':[[官方網頁|http://www.cosmicat.com/extensions/uptime/]]、[[Add-ons#15|https://addons.mozilla.org/zh-TW/firefox/addon/15]]
* ''套件語系'':英文其他
* ''撰寫版號'':1.8.0
* ''套件功能'':
** 【工具】→【Browser Uptime】,幫你計算瀏覽器開啟經過的時間。
* ''相關鏈結'':[[中文介紹|http://blog.joaoko.net/archives/403]]
* ''相關類似'':[[Usage Counter]]
* ''心得介紹'':<br>唔……其實算是謎功能……幫你算你在網路上晃多久了嗎?(汗)
> 檢視管理硬碟和記憶體快取佔用容量
* ''套件作者'':[[Jason Purdy|http://www.purdy.info/]]
* ''套件網頁'':[[Add-ons#1881|https://addons.mozilla.org/zh-TW/firefox/addon/1881]]
* ''套件語系'':英文其他
* ''套件功能'':
** 即時檢視並管理硬碟和記憶體快取佔用容量。
** 設定硬碟及記憶體快取在達到一定使用量後清除
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?t=15657]]
* ''相關類似'':[[StatusbarEx]]
* ''心得介紹'':<br>使用感覺還不錯,不過個人習慣用其他軟體進行這方面的管理,所以試玩後就移除了。
> 以圖形介面檢視管理你的快取記憶
* ''套件作者'':[[benki|http://park2.wakwak.com/~benki/]]
* ''套件網頁'':[[官方網頁|http://park2.wakwak.com/~benki/]]、[[Add-ons#2489|https://addons.mozilla.org/zh-TW/firefox/addon/2489]]
* ''套件語系'':內建繁中
* ''套件功能'':0.4.7.1
** 以圖形介面檢視快取記憶體內容。
** 具備搜尋、排序、另外、重整、刪除等功能。
** 點選預覽圖示可放大。
* ''相關鏈結'':[[社群中文|http://forum.moztw.org/viewtopic.php?t=18892]]、[[社群討論|http://forum.moztw.org/viewtopic.php?t=18614]]
* ''相關類似'':
* ''心得介紹'':<br>社群中文版目前是shyangs大翻的。其實泉也是看到shyangs大發文才知道這個套件,對想檢視快取記憶體的人有相當的便利性,--可惜預覽圖示區不能拖曳放大一點……--已更改成可拖曳。
> 記住網頁的編碼設定
* ''套件作者'':yuoo2k
* ''套件網頁'':[[官方網頁|http://forum.moztw.org/viewtopic.php?t=17598]]
* ''套件語系'':內建繁中
* ''撰寫版號'':0.1.20070210
* ''套件功能'':
** 在狀態列多一個語系選擇的圖示。
** 以左鍵點選圖示可直接更改語系。
** 以右鍵點選圖示可編輯要記憶網頁編碼的網站及其編碼。
* ''相關鏈結'':[[中文介紹|http://ck69user.blogspot.com/2008/02/firefox-extension-69-charset-switcher.html]]
* ''相關類似'':[[Right Encoding]]
* ''心得介紹'':<br>不知道是否是有套件衝突,個人在用 Firefox 2.0.0.12 測試時,就算存下網頁編碼,下次連到同個網站也沒有發生作用……殘念。<br><br>好處是右鍵選單不會多一個編碼選擇的選項常駐,會顥示在狀態列。適合不喜歡右鍵選單太長又不想裝 [[Menu Editor]] 的人。
/***
|Name|CheckboxPlugin|
|Source|http://www.TiddlyTools.com/#CheckboxPlugin|
|Documentation|http://www.TiddlyTools.com/#CheckboxPluginInfo|
|Version|2.4.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|Add checkboxes to your tiddler content|
This plugin extends the TiddlyWiki syntax to allow definition of checkboxes that can be embedded directly in tiddler content.  Checkbox states are preserved by:
* by setting/removing tags on specified tiddlers,
* or, by setting custom field values on specified tiddlers,
* or, by saving to a locally-stored cookie ID,
* or, automatically modifying the tiddler content (deprecated)
When an ID is assigned to the checkbox, it enables direct programmatic access to the checkbox DOM element, as well as creating an entry in TiddlyWiki's config.options[ID] internal data.  In addition to tracking the checkbox state, you can also specify custom javascript for programmatic initialization and onClick event handling for any checkbox, so you can provide specialized side-effects in response to state changes.
!!!!!Documentation
>see [[CheckboxPluginInfo]]
!!!!!Revisions
<<<
2008.01.08 [*.*.*] plugin size reduction: documentation moved to [[CheckboxPluginInfo]]
2008.01.05 [2.4.0] set global "window.place" to current checkbox element when processing checkbox clicks.  This allows init/beforeClick/afterClick handlers to reference RELATIVE elements, including using "story.findContainingTiddler(place)".  Also, wrap handlers in "function()" so "return" can be used within handler code.
|please see [[CheckboxPluginInfo]] for additional revision details|
2005.12.07 [0.9.0] initial BETA release
<<<
!!!!!Code
***/
//{{{
version.extensions.CheckboxPlugin = {major: 2, minor: 4, revision:0 , date: new Date(2008,1,5)};
//}}}
//{{{
config.checkbox = { refresh: { tagged:true, tagging:true, container:true } };
config.formatters.push( {
	name: "checkbox",
	match: "\\[[xX_ ][\\]\\=\\(\\{]",
	lookahead: "\\[([xX_ ])(=[^\\s\\(\\]{]+)?(\\([^\\)]*\\))?({[^}]*})?({[^}]*})?({[^}]*})?\\]",
	handler: function(w) {
		var lookaheadRegExp = new RegExp(this.lookahead,"mg");
		lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = lookaheadRegExp.exec(w.source)
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
			// get params
			var checked=(lookaheadMatch[1].toUpperCase()=="X");
			var id=lookaheadMatch[2];
			var target=lookaheadMatch[3];
			if (target) target=target.substr(1,target.length-2).trim(); // trim off parentheses
			var fn_init=lookaheadMatch[4];
			var fn_clickBefore=lookaheadMatch[5];
			var fn_clickAfter=lookaheadMatch[6];
			var tid=story.findContainingTiddler(w.output);  if (tid) tid=tid.getAttribute("tiddler");
			var srctid=w.tiddler?w.tiddler.title:null;
			config.macros.checkbox.create(w.output,tid,srctid,w.matchStart+1,checked,id,target,config.checkbox.refresh,fn_init,fn_clickBefore,fn_clickAfter);
			w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
		}
	}
} );
config.macros.checkbox = {
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		if(!(tiddler instanceof Tiddler)) { // if no tiddler passed in try to find one
			var here=story.findContainingTiddler(place);
			if (here) tiddler=store.getTiddler(here.getAttribute("tiddler"))
		}
		var srcpos=0; // "inline X" not applicable to macro syntax
		var target=params.shift(); if (!target) target="";
		var defaultState=params[0]=="checked"; if (defaultState) params.shift();
		var id=params.shift(); if (id && !id.length) id=null;
		var fn_init=params.shift(); if (fn_init && !fn_init.length) fn_init=null;
		var fn_clickBefore=params.shift();
		if (fn_clickBefore && !fn_clickBefore.length) fn_clickBefore=null;
		var fn_clickAfter=params.shift();
		if (fn_clickAfter && !fn_clickAfter.length) fn_clickAfter=null;
		var refresh={ tagged:true, tagging:true, container:false };
		this.create(place,tiddler.title,tiddler.title,0,defaultState,id,target,refresh,fn_init,fn_clickBefore,fn_clickAfter);
	},
	create: function(place,tid,srctid,srcpos,defaultState,id,target,refresh,fn_init,fn_clickBefore,fn_clickAfter) {
		// create checkbox element
		var c = document.createElement("input");
		c.setAttribute("type","checkbox");
		c.onclick=this.onClickCheckbox;
		c.srctid=srctid; // remember source tiddler
		c.srcpos=srcpos; // remember location of "X"
		c.container=tid; // containing tiddler (may be null if not in a tiddler)
		c.tiddler=tid; // default target tiddler 
		c.refresh = {};
		c.refresh.container = refresh.container;
		c.refresh.tagged = refresh.tagged;
		c.refresh.tagging = refresh.tagging;
		place.appendChild(c);
		// set default state
		c.checked=defaultState;
		// track state in config.options.ID
		if (id) {
			c.id=id.substr(1); // trim off leading "="
			if (config.options[c.id]!=undefined)
				c.checked=config.options[c.id];
			else
				config.options[c.id]=c.checked;
		}
		// track state in (tiddlername|tagname) or (fieldname@tiddlername)
		if (target) {
			var pos=target.indexOf("@");
			if (pos!=-1) {
				c.field=pos?target.substr(0,pos):"checked"; // get fieldname (or use default "checked")
				c.tiddler=target.substr(pos+1); // get specified tiddler name (if any)
				if (!c.tiddler || !c.tiddler.length) c.tiddler=tid; // if tiddler not specified, default == container
				if (store.getValue(c.tiddler,c.field)!=undefined)
					c.checked=(store.getValue(c.tiddler,c.field)=="true"); // set checkbox from saved state
			} else {
				var pos=target.indexOf("|"); if (pos==-1) var pos=target.indexOf(":");
				c.tag=target;
				if (pos==0) c.tag=target.substr(1); // trim leading "|" or ":"
				if (pos>0) { c.tiddler=target.substr(0,pos); c.tag=target.substr(pos+1); }
				if (!c.tag.length) c.tag="checked";
				var t=store.getTiddler(c.tiddler);
				if (t && t.tags)
					c.checked=t.isTagged(c.tag); // set checkbox from saved state
			}
		}
		// trim off surrounding { and } delimiters from init/click handlers
		if (fn_init) c.fn_init="(function(){"+fn_init.trim().substr(1,fn_init.length-2)+"})()";
		if (fn_clickBefore) c.fn_clickBefore="(function(){"+fn_clickBefore.trim().substr(1,fn_clickBefore.length-2)+"})()";
		if (fn_clickAfter) c.fn_clickAfter="(function(){"+fn_clickAfter.trim().substr(1,fn_clickAfter.length-2)+"})()";
		c.init=true; c.onclick(); c.init=false; // compute initial state and save in tiddler/config/cookie
	},
	onClickCheckbox: function(event) {
		window.place=this;
		if (this.init && this.fn_init) // custom function hook to set initial state (run only once)
			{ try { eval(this.fn_init); } catch(e) { displayMessage("Checkbox init error: "+e.toString()); } }
		if (!this.init && this.fn_clickBefore) // custom function hook to override changes in checkbox state
			{ try { eval(this.fn_clickBefore) } catch(e) { displayMessage("Checkbox onClickBefore error: "+e.toString()); } }
		if (this.id)
			// save state in config AND cookie (only when ID starts with 'chk')
			{ config.options[this.id]=this.checked; if (this.id.substr(0,3)=="chk") saveOptionCookie(this.id); }
		if (this.srctid && this.srcpos>0 && (!this.id || this.id.substr(0,3)!="chk") && !this.tag && !this.field) {
			// save state in tiddler content only if not using cookie, tag or field tracking
			var t=store.getTiddler(this.srctid); // put X in original source tiddler (if any)
			if (t && this.checked!=(t.text.substr(this.srcpos,1).toUpperCase()=="X")) { // if changed
				t.set(null,t.text.substr(0,this.srcpos)+(this.checked?"X":"_")+t.text.substr(this.srcpos+1),null,null,t.tags);
				if (!story.isDirty(t.title)) story.refreshTiddler(t.title,null,true);
				store.setDirty(true);
			}
		}
		if (this.field) {
			if (this.checked && !store.tiddlerExists(this.tiddler))
				store.saveTiddler(this.tiddler,this.tiddler,"",config.options.txtUserName,new Date());
			// set the field value in the target tiddler
			store.setValue(this.tiddler,this.field,this.checked?"true":"false");
			// DEBUG: displayMessage(this.field+"@"+this.tiddler+" is "+this.checked);
		}
		if (this.tag) {
			if (this.checked && !store.tiddlerExists(this.tiddler))
				store.saveTiddler(this.tiddler,this.tiddler,"",config.options.txtUserName,new Date());
			var t=store.getTiddler(this.tiddler);
			if (t) {
				var tagged=(t.tags && t.tags.indexOf(this.tag)!=-1);
				if (this.checked && !tagged) { t.tags.push(this.tag); store.setDirty(true); }
				if (!this.checked && tagged) { t.tags.splice(t.tags.indexOf(this.tag),1); store.setDirty(true); }
			}
			// if tag state has been changed, update display of corresponding tiddlers (unless they are in edit mode...)
			if (this.checked!=tagged) {
				if (this.refresh.tagged) {
					if (!story.isDirty(this.tiddler)) // the TAGGED tiddler in view mode
						story.refreshTiddler(this.tiddler,null,true); 
					else // the TAGGED tiddler in edit mode (with tags field)
						config.macros.checkbox.refreshEditorTagField(this.tiddler,this.tag,this.checked);
				}
				if (this.refresh.tagging)
					if (!story.isDirty(this.tag)) story.refreshTiddler(this.tag,null,true); // the TAGGING tiddler
			}
		}
		if (!this.init && this.fn_clickAfter) // custom function hook to react to changes in checkbox state
			{ try { eval(this.fn_clickAfter) } catch(e) { displayMessage("Checkbox onClickAfter error: "+e.toString()); } }
		// refresh containing tiddler (but not during initial rendering, or we get an infinite loop!) (and not when editing container)
		if (!this.init && this.refresh.container && this.container!=this.tiddler)
			if (!story.isDirty(this.container)) story.refreshTiddler(this.container,null,true); // the tiddler CONTAINING the checkbox
		return true;
	},
	refreshEditorTagField: function(title,tag,set) {
		var tagfield=story.getTiddlerField(title,"tags");
		if (!tagfield||tagfield.getAttribute("edit")!="tags") return; // if no tags field in editor (i.e., custom template)
		var tags=tagfield.value.readBracketedList();
		if (tags.contains(tag)==set) return; // if no change needed
		if (set) tags.push(tag); // add tag
		else tags.splice(tags.indexOf(tag),1); // remove tag
		for (var t=0;t<tags.length;t++) tags[t]=String.encodeTiddlyLink(tags[t]);
		tagfield.value=tags.join(" "); // reassemble tag string (with brackets as needed)
		return;
	}
}
//}}}
> 清除網頁上的隱藏文字
* ''套件作者'':[[Peter Pan|http://waxb.blog.com.cn]]
* ''套件網頁'':[[官方網頁|http://waxb.blog.com.cn/archives/2006/1786426.shtml/]]、[[Add-ons#3648|https://addons.mozilla.org/zh-TW/firefox/addon/3648]]
* ''套件語系'':內建繁中
* ''撰寫版號'':1.0.6
* ''套件功能'':
** 【自訂工具列】新增【消除隱藏文字】的按鍵。
** 將按鍵放在工具列上,在有隱藏文字的網頁點選即可消除隱藏文字。
* ''相關鏈結'':[[中文介紹|http://blog.joaoko.net/archives/435]]
* ''相關類似'':
* ''心得介紹'':<br>現在有些論壇為了避免全文被複製盜轉,會在內文空白的地方放上一些亂碼或廣告文字,再使它的顏色和網頁背景色相同以至於不會影響閱讀。<br><br>這個套件就是為了消除這種隱藏文字用的。有時想要存下某些會有隱藏文字的站的文章時,讓你不用看一堆亂碼或廣告的好幫手。
> 簡單新增並插入常用文字且可分類管理
* ''套件作者'':Alex Eng
* ''套件網頁'':[[mozdev|http://clippings.mozdev.org/]]、[[Add-ons#1347|https://addons.mozilla.org/zh-TW/firefox/addon/1347]]
* ''套件語系'':內建繁中
* ''撰寫版號'':2.6
* ''套件功能'':
** 用右鍵選取設定好的文字快速加入。
** 可直接將畫面中的文字選取按右鍵快速加入快選文字。
** 可以選取的文字拖曳到狀態列上的圖示上快速加入快選文字。
** 支援快選文字列表的匯入及匯出。
* ''相關鏈結'':[[中文介紹|http://blog.joaoko.net/archives/274]]
* ''相關類似'':[[InFormEnter]]、[[Signature]]
* ''心得介紹'':<br>這個和 [[Signature]] 差異性主要在可以用拖曳加入選取文字的部分,另外文字列表的匯入匯出中文不會亂碼也比 [[Signature]] 棒。不過個人比較不喜 [[Clippings]] 的快速選單是在右鍵選單的最下面顯示,不過這可以靠 [[Menu Editor]] 修改。<br><br>另外不知道是否為設定有問題,雖內建有繁中語系,卻老會顯示成簡中……?
> 快速把鏈結複製成特定格式
* ''套件作者'':[[Jonah Bishop|http://www.borngeek.com/]]
* ''套件網頁'':[[官方網頁|http://www.borngeek.com/firefox/colt/]]、[[mozdev|https://]]、[[Add-ons#1812|https://addons.mozilla.org/zh-TW/firefox/addon/1812]]
* ''套件語系'':內建繁中
* ''撰寫版號'':2.3.0
* ''套件功能'':
** 複製鏈結名稱。
** 複製鏈結名稱及網址。
** 內建可選擇將鏈結以HTML、BBCode、Wikipedia這三種格式複製。
** 提供參數,可自訂要將鏈結以何種型式複製。
*** %T:鏈結文字。
*** %U:鏈結網址。
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?t=18241]]
* ''相關類似'':[[Copy as HTML Link]]、[[Copy Link Name]]、[[Make Link]]
* ''心得介紹'':<br>常在網路上寫文的人很便利的幫手。光基本供提的複製型式就很夠用了,有特定需求的人也可以將鏈結設定成自己想要的格式!可用來取代 [[Copy as HTML Link]]、 [[Copy Link Name]] 這兩個套件的功能。<br><br>至於 [[Make Link]] 這個套件,功能上來說和 [[CoLT]] 差不多,只是個人選擇的是 [[CoLT]] 而已。
|!名稱|!色碼|!顏色|
|Background|#fff| @@background(#fff):﹎﹎﹎﹎﹎@@ |
|Foreground|#000| @@background(#000):﹎﹎﹎﹎﹎@@ |
|PrimaryPale|#8cf| @@background(#8cf):﹎﹎﹎﹎﹎@@ |
|PrimaryLight|#18f| @@background(#18f):﹎﹎﹎﹎﹎@@ |
|PrimaryMid|#04b| @@background(#04b):﹎﹎﹎﹎﹎@@ |
|PrimaryDark|#014| @@background(#014):﹎﹎﹎﹎﹎@@ |
|SecondaryPale|#ffc| @@background(#ffc):﹎﹎﹎﹎﹎@@ |
|SecondaryLight|#fe8| @@background(#fe8):﹎﹎﹎﹎﹎@@ |
|SecondaryMid|#db4| @@background(#db4):﹎﹎﹎﹎﹎@@ |
|SecondaryDark|#841| @@background(#841):﹎﹎﹎﹎﹎@@ |
|TertiaryPale|#eee| @@background(#eee):﹎﹎﹎﹎﹎@@ |
|TertiaryLight|#ccc| @@background(#ccc):﹎﹎﹎﹎﹎@@ |
|TertiaryMid|#999| @@background(#999):﹎﹎﹎﹎﹎@@ |
|TertiaryDark|#666| @@background(#666):﹎﹎﹎﹎﹎@@ |
|Error|#f88| @@background(#f88):﹎﹎﹎﹎﹎@@ |

|BGColorDark|@@background-color:#99CCFF;﹎﹎﹎﹎﹎@@|#99CCFF|
|BGColorMid|@@background-color:#D8E9FF;﹎﹎﹎﹎﹎@@|#D8E9FF|
|BGColorTitle|@@background-color:#1177FF;﹎﹎﹎﹎﹎@@|#1177FF|
|FontNormal|@@background-color:#003399;﹎﹎﹎﹎﹎@@|#003399|
|FontLink|@@background-color:#5599FF;﹎﹎﹎﹎﹎@@|#5599FF|
|FontALink|@@background-color:#EAF2FF;﹎﹎﹎﹎﹎@@|#EAF2FF|
|FontTag|@@background-color:#0044BB;﹎﹎﹎﹎﹎@@|#0044BB|
|FontTitle|@@background-color:#1155DD;﹎﹎﹎﹎﹎@@|#1155DD|
|FontSystem|@@background-color:#3377FF;﹎﹎﹎﹎﹎@@|#3377FF|
|Error|@@background-color:#f88;﹎﹎﹎﹎﹎@@|#f88|

BGColorDark: #99CCFF
BGColorMid: #D8E9FF
BGColorTitle: #1177FF
FontNormal: #003399
FontLink: #5599FF
FontALink: #EAF2FF
FontTag: #0044BB
FontTitle: #1155DD
FontSystem: #3377FF
Error: #f88

|BGColorDark|@@background-color:#FFE478;﹎﹎﹎﹎﹎@@|#FFE478|
|BGColorMid|@@background-color:#FFFFCC;﹎﹎﹎﹎﹎@@|#FFFFCC|
|BGColorTitle|@@background-color:#FFCB50;﹎﹎﹎﹎﹎@@|#FFCB50|
|FontNormal|@@background-color:#003399;﹎﹎﹎﹎﹎@@|#003399|
|FontLink|@@background-color:#5599FF;﹎﹎﹎﹎﹎@@|#5599FF|
|FontALink|@@background-color:#0000CC;﹎﹎﹎﹎﹎@@|#0000CC|
|FontTag|@@background-color:#0044BB;﹎﹎﹎﹎﹎@@|#0044BB|
|FontTitle|@@background-color:#1155DD;﹎﹎﹎﹎﹎@@|#1155DD|
|FontSystem|@@background-color:#3377FF;﹎﹎﹎﹎﹎@@|#3377FF|
|Error|@@background-color:#f88;﹎﹎﹎﹎﹎@@|#f88|

BGColorDark: #FFE478
BGColorMid: #FFFFCC
BGColorTitle: #FFCB50
FontNormal: #003399
FontLink: #5599FF
FontALink: #0000CC
FontTag: #0044BB
FontTitle: #1155DD
FontSystem: #3377FF
Error: #f88
> 告訴你網頁上的顏色色碼
* ''套件作者'':[[Alex Sirota|http://www.iosart.com/firefox/]]
* ''套件網頁'':[[官方網頁|http://www.iosart.com/firefox/colorzilla/]]、[[Add-ons#271|https://addons.mozilla.org/zh-TW/firefox/addon/271]]
* ''套件語系'':內建繁中
* ''撰寫版號'':1.0
* ''套件功能'':
** 以色碼顯示網頁上點選的顏色。
* ''相關鏈結'':[[應用介紹|http://sidekick.myblog.hk/archives/2006/03/06/744/]]
* ''相關類似'':
* ''心得介紹'':<br>有時候想知道頁面某個區塊的顏色是什麼色碼時很方便的套件。不過因為個人這種功能並不常用,而且也有免安裝的小軟體可以支援這種功能,所以目前沒有使用了。
> 將選單工具列隱藏並縮成選單
* ''套件作者'':Chris Neale
* ''套件網頁'':[[mozdev|http://cdn.mozdev.org/compact/]]、[[Add-ons#19|https://addons.mozilla.org/zh-TW/firefox/addon/19]]
* ''套件語系'':英文其他
* ''套件功能'':
** 把選單工具列縮成單一圖示或文字【 Menu 】選項。
** 自訂工具列中多一個【書籤】可選擇,可以下拉方式開啟書籤。同樣可選用工具列圖示。
** 可自訂工具列選單各大項顯示與否。
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?t=10695]]、[[中文修改|http://forum.moztw.org/viewtopic.php?t=13993]]
* ''相關類似'':[[Bookmarks Menu Button]]、[[Compact Menu 2]]、[[Hide Menubar]]、[[Personal Menu]]
* ''心得介紹'':<br>已停止更新,目前使用同功能的 [[Compact Menu 2]] 取代。
> 將選單工具列隱藏並縮成選單
* ''套件作者'':[[Milly C|http://d.hatena.ne.jp/MillyC/]]
* ''套件網頁'':[[Add-ons#4550|https://addons.mozilla.org/zh-TW/firefox/addon/4550]]
* ''套件語系'':英文其他
* ''撰寫版號'':2.0.3
* ''套件功能'':
** 把選單工具列縮成單一圖示或文字【 Menu 】選項。
** 自訂工具列中多一個【書籤】可選擇,可以下拉方式開啟書籤。同樣可選用工具列圖示。
** 可自訂工具列選單各大項顯示與否。
* ''相關鏈結'':[[中文介紹|http://]]、[[應用介紹|http://]]
* ''相關類似'':[[Bookmarks Menu Button]]、[[Compact Menu]]、[[Hide Menubar]]、[[Personal Menu]]、[[Tiny Menu]]
* ''心得介紹'':<br>雖然很陽春,不具備像 [[Personal Menu]] 的編輯功能,好處是不像 [[Personal Menu]] 或 [[Menu Editor]] 這類複雜套件容易引起衝突。<br><br>另外個人期望有快速鍵可使用的的功能,泉則是利用 [[Custom Buttons]] 另外設成按鍵來便利使用。
> 自訂你的滑鼠右鍵搜尋
* ''套件作者'':Vasa Maximov
* ''套件網頁'':[[官方網頁|http://conquery.net/]]、[[mozdev|http://conquery.mozdev.org/]]、[[Add-ons#231|https://addons.mozilla.org/zh-TW/firefox/addon/231]]
* ''套件語系'':英文其他
* ''撰寫版號'':
* ''套件功能'':
** 可以用右鍵選擇搜尋引擎進行搜尋。
** 可編輯右鍵搜尋引擎內容及順序。
** 按著 Ctrl 可修改要查詢的字串。
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?p=37737]]、[[中文介紹|http://forum.moztw.org/viewtopic.php?t=7914#37778]]
* ''相關類似'':[[Context Search]]
* ''心得介紹'':<br>唔、其實個人比較習慣用 [[Context Search]] 這個一次把搜尋引擎全放進右鍵的套件,所以沒在用這個。不過若對右鍵搜尋有進階需求的話,的確可以考慮這個套件。<br><br>另外一提,[[Drag de Go]] 對ConQuery有功能支援。惟因自己用不慣而沒有進行測試。
/***
!Metadata:
|''Name:''|ArchivedTimeline_zh-Hant|
|''Date:''|Nov 18, 2006|
|''Source:''|http://tiddlywiki-zh.googlecode.com/svn/trunk/contributors/BramChen/plugins/|
|''Author:''|BramChen (bram.chen (at) gmail (dot) com)|
|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License]]|
|''~CoreVersion:''|2.0.11|
|''Required:''|ArchivedTimeline|
|''Browser:''|Firefox 1.5+; InternetExplorer 6.0|

!Revision History:
|''Version''|''Date''|''Note''|
|0.1.0|Nov 18, 2006|Initial release|

!Code section:
***/
//{{{
if (typeof config.macros.archivedTimeline != "undefined"){
	merge(config.macros.archivedTimeline, {
		tooltips: "歸檔順序: ",
		orderBy: {modified: "修改日期", created: "建立日期"},
		monthFormat: "YYYY年0MM月",
		dateFormat: "YYYY年0MM月0DD日"
	});
}
//}}}
> 用滑鼠右鍵選擇搜尋引擎
* ''套件作者'':[[Ben Basson|http://http://www.cusser.net/]]
* ''套件網頁'':[[官方網頁|http://www.cusser.net/extensions/contextsearch/]]、[[Add-ons#240|https://addons.mozilla.org/zh-TW/firefox/addon/240]]
* ''套件語系'':英文其他
* ''撰寫版號'':0.4.2
* ''套件功能'':
** 反白頁面上的文字,按滑鼠右鍵可以選擇Firefox有裝的搜尋引擎進行搜尋。
* ''相關鏈結'':
* ''相關類似'':[[ConQuery]]
* ''心得介紹'':<br>雖然Firefox有預設【網路搜尋】,內定一個搜尋引擎做為頁面上反白搜尋用,個人卻比較喜歡需要時自己選擇要用的搜尋引擎去搜尋。終究會放搜尋引擎進 Firefox 就代表有用到,能用右鍵搜尋當然比較方便。<br><br>因為用字是系統內建,所以會直接被翻譯。很便利好用的套件。<br><br>另外一提,若有用 [[Organize Search Engines]] 管理分類你的搜尋引擎,在右鍵選單中也會以你整理的樣子列出,相當便利。
> 預覽鏈結內容
* ''套件作者''The Cooliris Team
* ''套件網頁'':[[官方網頁|http://www.cooliris.com/]]、[[Add-ons#2207|https://addons.mozilla.org/zh-TW/firefox/addon/2207]]
* ''套件語系'':英文其他
* ''撰寫版號'':
* ''套件功能'':
** 在原頁面可以用浮動視窗檢視鏈結內容,也可將浮動視窗鎖定位置或調整大小。
** 在浮動視窗上,可選擇關閉或將浮動視窗另開新頁。
** 可指定預覽浮動視窗顯示的方式及顯示延遲時間。
** 狀態列有小圖示可快速啟動關閉。
** 可把頁面收到右方書架(中譯成相簿)上(有預覽圖示),需要時點選叫出。
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?t=19756]]、[[中文介紹|http://swalk.blogspot.com/2006/11/cooliris-previews.html]]
* ''相關類似'':
* ''心得介紹'':<br>有的時候你看到一個鏈結,只是想要瞄一下後面有什麼東西,卻不一定想花時間看那個頁面,這時候這個套件就很好用了!泉自己通常是拿來看被縮小的圖的原圖鏈結,偶爾也會用來預覽鏈結頁。
> 快速複製鏈結名稱
* ''套件作者'':[[Captain Caveman|http://www.captaincaveman.nl/]]
* ''套件網頁'':[[官方網頁|http://www.captaincaveman.nl/?id=firefox_extensions&subid=copy_link_name]]、[[Add-ons#553|https://addons.mozilla.org/zh-TW/firefox/addon/553]]
* ''套件語系'':內建繁中
* ''撰寫版號'':
* ''套件功能'':
** 在右鍵選單上新增一個【複製鏈結名稱】的選項。
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?t=13114]]
* ''相關類似'':[[CoLT]]、[[Make Link]]
* ''心得介紹'':<br>就如名稱上所寫的功用,想要複製鏈結名稱而非複製鏈結網址時很好用。有了這個就不用把游標拖來拉去的努力想反白整個鏈結,老怕沒選全鏈結名稱。<br><br>目前個人改用功能更強大的[[CoLT]]取代。不過其實用[[Make Link]]也同樣足以取代本套件的功能。
> 快速複製網頁的標題及網址
* ''套件作者'':Philip Mateescu
* ''套件網頁'':[[官方網頁|http://copyurlplus.mozdev.org/]]、[[Add-ons#129|https://addons.mozilla.org/zh-TW/firefox/addon/129]]
* ''套件語系'':英文其他
* ''撰寫版號'':
* ''套件功能'':
** 在右鍵及工具選單中新增一個【 Copy URL + 】的選單,可以同時複製所在頁面的
### 網址和標題(URL + Title)
### 網址和選取區(URL + Selection)
### 網址、標題和選取區(URL + Title + Selection)
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?t=10163]]
* ''相關類似'':[[QuoteURLText]]
* ''心得介紹'':<br>原作者沒有在維護的套件,可以去上面的中文介紹中下載社群更新版,才有支援 2.0.X 。<br><br>個人很喜歡的一個套件,有時看到網頁要丟給朋友,拿這個來同時複製網址和網站標題或其他選定文字,會比較快速。其實寫誌時也可以用,不過寫誌關係到語法,所以用 [[CoLT]] 或同質套件的機率比較高。
> 以HTML格式複製鏈結
* ''套件作者'':[[Justin Watt|http://justinsomnia.org/]]
* ''套件網頁'':[[官方網頁|http://justinsomnia.org/2006/05/copy-as-html-link-for-firefox/]]、[[Add-ons#2617|https://addons.mozilla.org/zh-TW/firefox/addon/2617]]
* ''套件語系'':英文其他
* ''撰寫版號'':
* ''套件功能'':
** 在右鍵選單上新增一個【Copy as HTML Link】的選項。
** 把網頁上的鏈結以HTML格式複製。
* ''相關鏈結'':[[中文介紹|http://blog.joaoko.net/archives/217]]
* ''相關類似'':[[CoLT]]、[[Make Link]]
* ''心得介紹'':<br>寫文時的利器,可以直接把網頁上的鏈結以HTML格式複製下來,不用自己複製再設定成鏈結。<br><br>目前個人改用功能更強大的[[CoLT]]取代。不過其實用[[Make Link]]也同樣足以取代本套件的功能。
> 自訂工作列上的按鈕
* ''套件作者'':Yan
* ''套件網頁'':[[官方網頁|http://xsms.nm.ru/custombuttons/en/]]、[[Add-ons#2707|https://addons.mozilla.org/zh-TW/firefox/addon/2707]]
* ''套件語系'':內建繁中
* ''撰寫版號'':0.0.2.6
* ''套件功能'':
** 在工具列上新增自訂的按鈕。
** 要用語法寫,可從官方網站及討論區尋找他人提供的按鍵直接新增。
** 對放在工具列上的自訂按鍵按右鍵,可直接進行自訂按鍵原始碼的複製
**新增方法有二種:
### 點選【檢視】→【新增按鈕】,把他人提供的語法貼在圖片後的空格,或自行撰寫語法內容,完成按確定即可。
### 直接點選他人製成連結的新增按鈕,便會詢問你是否新增該按鈕。
** 新增完要從【檢視】→【工具列】→【自訂】,把按鈕拖出來放到工具列上。
** 可對工具列上新增完成的按鈕按滑鼠右鍵,進行編輯、刪除、複製等動作。
** <<tiddler "Custom Buttons / Custom Buttons² 按鈕語法蒐集">>
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?t=15392]]、[[應用介紹|http://forums.mozillazine.org/viewtopic.php?t=428688]]、[[英文討論區|http://forums.mozillazine.org/viewtopic.php?t=428688&postdays=0&postorder=asc&postsperpage=15&start=0]]
* ''相關類似'':[[Custom Buttons²]]、[[Toolbar Buttons]]
* ''心得介紹'':<br>有時候總會希望某些功能可以有個按鈕放在工具列上,讓你更快速的呼叫使用。這個套件滿足了你的這種需求。
按鈕語法收集<html><ol>
  <li><a href="custombutton://Bookmarket%20Toolbar%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACq0lEQVR4Xm2PzWtcVRiHn/fce2Ymk8ykk9YkpTWkCyvYVBvpImQhhdCYbgRdSYMLd5K0qaj0L2jpF+3GpVChGNSNllYMCn5uulEKJiGEiCQm1TSTTmYmmXvnfp1j6wwdAn3ggXPg/b0fYj4CLJg6+B67UIarQQyJ4TxNRMGff4HnQxiDookIOIoWll72qHHyatwYerGNmmoV4qTxBlC0QDlgAWshqTOWGj28v230xf31bcb8EMpV2CiCNbQyPAMTk5G8e1od3xQ9tCOS06dDn4zvt7bd3cA2TRrGNQb1sa4TstdDPVciPbjvhFdiMPAA09zAthoMI7wFTErGvSTZzLTu677lDKFRHiif7GuubjvUfUt3ZKadJzXC5P8Zy7CYc8zyUvcAx/KQqWG1Qnq6obAKdhMApAe7cZD6yhqRbwjWAta/8Vi7H8+JeZ/DJtsxLW+0H5fBIoQGIsCwGxdIAbFQ+tJh7tPkt1rJjov5AKIKL4SWjzOn1OvOEQNx60YUoJv/LQhmSO7d5vtanXOOZkkhoFIsmZC3K7fNnegXoNh0E5aXFBe/znHtqxzX7xY4+4NjKxETnZqlNKCSCJIErKJc3+Gi/wdb/ANsAI9gftFSLEzR/+YFgndG+LFfux8mRJMKphS4D1Z4ShKzN6/JswWYhoWyJf/KOrVDs2wvz5GKIlag6goAuMbQAo464FBqTL8ZtvNTlOKIttSDgKCeIEpICV+48BnwuTIJPDGJcVzFq+kqhIvw9wKe/t3/ZCnQiwNHewniAFccDgy3keTo9Aw/+wKyMEYTutJwP2vpe+jxaxhzpWb59t2Yg3teTs+MnDkwsLrq8+/l9WjfQ9trNCUAmT8JAAJ91nIvjLhhDTdJ2CpbeM+B7YDnpUu+66/Y/MQK5R6XUyGsAvwHk/0n+0qkvkwAAAAASUVORK5CYII%3D%5D%5Bvar%20a%20%3D%20document.getElementById%28%22PersonalToolbar%22%29%3B%0Aa.collapsed%20%3D%20%21a.collapsed%3B%5D%5B" title="Bookmarket Toolbar"><img alt="Bookmarket Toolbar" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACq0lEQVR4Xm2PzWtcVRiHn/fce2Ymk8ykk9YkpTWkCyvYVBvpImQhhdCYbgRdSYMLd5K0qaj0L2jpF+3GpVChGNSNllYMCn5uulEKJiGEiCQm1TSTTmYmmXvnfp1j6wwdAn3ggXPg/b0fYj4CLJg6+B67UIarQQyJ4TxNRMGff4HnQxiDookIOIoWll72qHHyatwYerGNmmoV4qTxBlC0QDlgAWshqTOWGj28v230xf31bcb8EMpV2CiCNbQyPAMTk5G8e1od3xQ9tCOS06dDn4zvt7bd3cA2TRrGNQb1sa4TstdDPVciPbjvhFdiMPAA09zAthoMI7wFTErGvSTZzLTu677lDKFRHiif7GuubjvUfUt3ZKadJzXC5P8Zy7CYc8zyUvcAx/KQqWG1Qnq6obAKdhMApAe7cZD6yhqRbwjWAta/8Vi7H8+JeZ/DJtsxLW+0H5fBIoQGIsCwGxdIAbFQ+tJh7tPkt1rJjov5AKIKL4SWjzOn1OvOEQNx60YUoJv/LQhmSO7d5vtanXOOZkkhoFIsmZC3K7fNnegXoNh0E5aXFBe/znHtqxzX7xY4+4NjKxETnZqlNKCSCJIErKJc3+Gi/wdb/ANsAI9gftFSLEzR/+YFgndG+LFfux8mRJMKphS4D1Z4ShKzN6/JswWYhoWyJf/KOrVDs2wvz5GKIlag6goAuMbQAo464FBqTL8ZtvNTlOKIttSDgKCeIEpICV+48BnwuTIJPDGJcVzFq+kqhIvw9wKe/t3/ZCnQiwNHewniAFccDgy3keTo9Aw/+wKyMEYTutJwP2vpe+jxaxhzpWb59t2Yg3teTs+MnDkwsLrq8+/l9WjfQ9trNCUAmT8JAAJ91nIvjLhhDTdJ2CpbeM+B7YDnpUu+66/Y/MQK5R6XUyGsAvwHk/0n+0qkvkwAAAAASUVORK5CYII=" border="0" style="margin: 0 6px;" />Bookmarket Toolbar</a> 書籤工具列 隱藏/顯示</li>
  <li><a href="custombutton://Clock%5D%5B%5D%5B%5D%5Bthis.xbmLib%3D%7B%0A%09//%u0434%u043E%u0431%u0430%u0432%u043B%u044F%u0435%u043C%20%u043D%u0443%u043B%u0438%0A%09fixmod%3Afunction%28s%2Cn%29%7B%0A%09%20while%20%28s.length%25n%21%3D0%29%20s%3D%270%27+s%3B%0A%09%20return%20s%3B%0A%09%7D%2C%0A%09//16-%u044B%u0439%20%u043A%u043E%u0434%20%u0432%202%u044B%u0439%0A%09h2b%3Afunction%28s%29%7B%0A%09%20var%20res%3D%27%27%3B%0A%09%20for%20%28var%20i%3D0%3Bi%3Cs.length%3Bi++%29%7B%0A%09%20%20res+%3Dthis.fixmod%28parseInt%28s.substring%28i%2Ci+1%29%2C16%29.toString%282%29%2C4%29%3B%0A%09%20%7D%0A%09%20return%20res%3B%0A%09%7D%2C%0A%09//2-%u044B%u0439%20%u043A%u043E%u0434%20%u0432%2016-%u044B%u0439%0A%09b2h%3Afunction%28s%29%7B%0A%09%20var%20res%3D%27%27%3B%0A%09%20for%20%28var%20i%3D0%3Bi%3Cs.length/4%3Bi++%29%7B%0A%09%20%20res+%3DparseInt%28s.substring%28i*4%2Ci*4+4%29%2C2%29.toString%2816%29%3B%0A%09%20%7D%0A%09%20return%20res%3B%0A%09%7D%2C%0A%09//2%u044B%u0439%20%u043A%u043E%u0434%20%u0432%20%u043C%u0430%u0442%u0440%u0438%u0446%u0443%20%u043F%u043E%20%u0441%u0442%u0440%u043E%u043A%u0430%u043C%0A%09b2matrix%3Afunction%28s%2Crows%29%7B%0A%09%20var%20cols%3Ds.length/rows%3B%0A%09%20var%20ar%3D%5B%5D%3B%0A%09%20for%20%28var%20i%3D0%3Bi%3Crows%3Bi++%29%7B%0A%09%20%20ar%5Bi%5D%3Ds.substring%28i*cols%2C%28i+1%29*cols%29%3B%0A%09%20%7D%0A%09%20return%20ar%3B%0A%09%7D%2C%0A%09%0A%09//2-%u044B%u0439%20%u043A%u043E%u0434%20%u0432%20xbm%0A%09b2xbm%3Afunction%28s%2Crows%29%7B%0A%09%20var%20cols%3Ds.length/rows%3B%0A%09%20var%20res%3D%27%23define%20xbmtext_width%20%27+cols+%27%5Cn%27%3B%0A%09%20res+%3D%27%23define%20xbmtext_height%20%27+rows+%27%5Cn%27%3B%0A%09%20res+%3D%27static%20unsigned%20char%20xbmtext_bits%5B%5D%20%3D%20%7B%27%3B%0A%09%20var%20z%3Ds.length/8%3B%0A%09%20for%20%28var%20i%3D0%3Bi%3Cz%3Bi++%29%7B%0A%09%20%20res+%3D%220x%22%3B%0A%09%20%20for%20%28j%3D1%3Bj%3E-1%3Bj--%29%0A%09%20%20%20res+%3Dthis.b2h%28s.substring%28i*8+j*4%2Ci*8+j*4+4%29.split%28%27%27%29.reverse%28%29.join%28%27%27%29%29%3B%0A%09%20%20if%20%28i%3Cz-1%29%20res+%3D%27%2C%20%27%3B%0A%09%20%7D%0A%09%20res+%3D%27%7D%27%3B%0A%09%20return%20res%3B%0A%09%7D%2C%0A%09//%u0438%u0441%u0445.%20%u0441%u0442%u0440%u043E%u043A%u0443%20%u0432%20xbm%0A%09str2xbm%3Afunction%28str%2Cletters%2Crows%29%7B%0A%09%20var%20m%3D%5B%5D%3B%0A%09%20for%20%28var%20i%3D0%3Bi%3Cstr.length%3Bi++%29%7B%0A%09%20%20var%20tm%3Dthis.b2matrix%28this.h2b%28letters%5Bstr.substring%28i%2Ci+1%29%5D%29%2Crows%29%3B%0A%09%20%20for%20%28var%20j%3D0%3Bj%3Ctm.length%3Bj++%29%7B%0A%09%20%20%20if%20%28i%3D%3D0%29%20m%5Bj%5D%3D%27%27%3B%0A%09%20%20%20m%5Bj%5D+%3Dtm%5Bj%5D%3B%0A%09%20%20%7D%0A%09%20%7D%0A%09%20for%20%28var%20i%3D0%3Bi%3Cm.length%3Bi++%29%0A%09%20%20m%5Bi%5D%3Dthis.fixmod%28m%5Bi%5D%2C8%29%3B%0A%09%20return%20this.b2xbm%28m.join%28%27%27%29%2Crows%29%3B%0A%09%7D%0A%7D%0Athis.letters%3D%7B%0A%20%27%5B%27%3A%27724924924923%27%2C%0A%20%271%27%3A%27fc000021820820821c00003f%27%2C%0A%20%272%27%3A%27fc000072208421083e00003f%27%2C%0A%20%273%27%3A%27fc000072208c08289c00003f%27%2C%0A%20%274%27%3A%27fc000010c524f8410400003f%27%2C%0A%20%275%27%3A%27fc0000fa083c08289c00003f%27%2C%0A%20%276%27%3A%27fc000031083c8a289c00003f%27%2C%0A%20%277%27%3A%27fc0000f8210420841000003f%27%2C%0A%20%278%27%3A%27fc000072289c8a289c00003f%27%2C%0A%20%279%27%3A%27fc00007228a278211800003f%27%2C%0A%20%270%27%3A%27fc00007228a28a289c00003f%27%2C%0A%20%27%3A%27%3A%27f00000440044000f%27%2C%0A%20%27%5D%27%3A%2795555556%27%2C%0A%20%27%20%27%3A%27f00000000000000f%27%0A%7D%0Athis.setTime%3Dfunction%28%29%7B%0A%20var%20time%3Dnew%20Date%3B%0A%20var%20h%3Dthis.xbmLib.fixmod%28time.getHours%28%29.toString%28%29%2C2%29%3B%0A%20var%20m%3Dthis.xbmLib.fixmod%28time.getMinutes%28%29.toString%28%29%2C2%29%3B%0A%20var%20xbm%3Dthis.xbmLib.str2xbm%28%27%5B%27+h+%27%3A%27+m+%27%5D%27%2Cthis.letters%2C16%29%3B%0A%20this.image%3D%27data%3Aimage/x-xbitmap%2C%27+escape%28xbm%29%3B%0A%20var%20dd%3D%2860-time.getSeconds%28%29%29*1000%3B%0A%20this.tooltipText%3Dtime.toLocaleDateString%28%29%3B%0A%20dump%28dd+%27%5Cn%27%29%3B%0A%20setTimeout%28this.setTime.bind%28this%29%2Cdd%29%3B%0A%7D%0A%0A%20this.disabled%3Dtrue%3B%0A%20this.setTime%28%29%3B%0A" title="Clock"><img alt="Clock" src="data:image/x-xbitmap;base64,I2RlZmluZSB4Ym10ZXh0X3dpZHRoIDQwCiNkZWZpbmUgeGJtdGV4dF9oZWlnaHQgMTYKc3RhdGljIHVuc2lnbmVkIGNoYXIgeGJtdGV4dF9iaXRzW10gPSB7MHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MCwgMHgxMCwgMHgwZSwgMHgzMCwgMHg4ZSwgMHg4MCwgMHgxOCwgMHgxMSwgMHgwOCwgMHg5MSwgMHg4MCwgMHgxMCwgMHg5MCwgMHgwNCwgMHg5MSwgMHg4MCwgMHgxMCwgMHg4YywgMHgzYywgMHg5MSwgMHg4MCwgMHgxMCwgMHgxMCwgMHg0NCwgMHg5ZSwgMHg4MCwgMHgxMCwgMHgxMCwgMHg0NCwgMHg5MCwgMHg4MCwgMHgxMCwgMHg5MSwgMHg0NCwgMHg4OCwgMHg4MCwgMHgzOCwgMHg4ZSwgMHgzOCwgMHg4NiwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3Zn0=" border="0" style="margin: 0 6px;" />Clock</a> 時鍾</li>
  <li><a href="custombutton://Duplicate%20Tab%5D%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANbRz//W0c//1dHP/9XRz//V0c//1dHP/9bQz//W0M//1tDP/9bQz//V0c//1dHP/9XRz/8AAAAAAAAAAHBVOf9wVTn/cFU5/3BVOf9wVTn/cFU5/3BVOf9wVTn/cFU5/3BVOf9wVTn/cFU5/3BVOf9wVTn/AAAAAAAAAABwVTn/8Pn5/+r5+v/o9/n/5PP1/9/w8v/Z7O//1Ojr/87k6P/K3+T/xd3h/8Pb3//o8/b/cFU5/wAAAAAAAAAAzcO4/4BjR//w+fn/6Pb5/+Pz9f/f8PP/2ezv/9To6//O5Oj/yt/l/8Xe4f/o8/b/gGNH/7+0qv8AAAAA1tHP/+vm5P+KcVb/8Pn5/9G/vP/XxsD/3vHy/8HHwf+uq57/q6md/6monP+zvbf/6PP2/4pxVv/W0c//cFU5/3BVOf+6q5z/inFW//D5+f/fzr7/29DD/9/w8v/Z7O//1Ojq/87k6P/K4OT/xd7h/+jz9v+KcVb/qZ2Q/3BVOf/w+fn/6O3t/4pxVv/R0Mj/8Pn5//D5+f/w+fn/8Pn5//D5+f/w+fn/8Pn5//D5+f/R0Mj/inFW/9bd3v/Nw7j/gGNH/+jt7f/FysP/inFW/4pxVv+KcVb/inFW/4pxVv+KcVb/inFW/4pxVv+KcVb/inFW/73Dvv/b4+T/6+bk/4pxVv/w+fn/0b+8/9fGwP/e8fL/wcfB/66rnv+rqZ3/qaic/7O9t//o8/b/inFW/9bRz/8AAAAAAAAAALqrnP+KcVb/8Pn5/9/Ovv/b0MP/3/Dy/9ns7//U6Or/zuTo/8rg5P/F3uH/6PP2/4pxVv+pnZD/AAAAAAAAAADo7e3/inFW/9HQyP/w+fn/8Pn5//D5+f/w+fn/8Pn5//D5+f/w+fn/8Pn5/9HQyP+KcVb/1t3e/wAAAAAAAAAA6O3t/8XKw/+KcVb/inFW/4pxVv+KcVb/inFW/4pxVv+KcVb/inFW/4pxVv+KcVb/vcO+/9vj5P8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+cQf//nEHgAJxBwACcQcAAnEHAAJxBgACcQQAAnEEAAJxBAACcQQADnEEAA5xBAAOcQQADnEH//5xB//+cQQ%3D%3D%5D%5B/*CODE*/%0A%0A%0A%0Avar%20sURL%20%3D%20gURLBar.value%3B%0AhandleURLBarRevert%28%29%3B%20//reset%20the%20URL%20bar%0Avar%20url%20%3D%20sURL%3B%0Avar%20newTab%20%3D%20gBrowser.addTab%28url%29%3B%0AgBrowser.selectedTab%20%3D%20newTab%3B%0AopenUILink%28url%2C%20aEvent%2C%20false%2C%20true%29%3B%0A%5D%5B/*Initialization%20Code*/%0A%0A%0Athis.style.opacity%20%3D%20%27.99%27%3B%0Athis.setAttribute%28%22onmouseover%22%2C%20%22this.style.opacity%20%3D%20%27.65%27%3B%22%20%29%3B%0Athis.setAttribute%28%22onmouseout%22%2C%20%22this.style.opacity%20%3D%20%27.99%27%3B%22%20%29%3B%0A%0Athis.setAttribute%28%22author%22%2C%20%22SCClockDr%22%20%29%3B%0Athis.setAttribute%28%22status%22%2C%22Complete%22%29%3B%0Athis.setAttribute%28%22public%22%2Ctrue%29%3B%0Athis.setAttribute%28%22dependency%22%2C%22FF%202.*%2CCB%200.0.02a%2CCB2%202.0.02%22%29%3B%0Athis.setAttribute%28%22version%22%2C%2220070603.002%22%29%3B%0Athis.setAttribute%28%22homepage%22%2C%22http%3A//custombuttons.phpbbnow.com/viewtopic.php%3Fp%3D3400%233400%22%29%3B%0Athis.setAttribute%28%22update%22%2C%22%22%29%3B%0Athis.setAttribute%28%22help%22%2C%220%2CLeft%20click%20duplicates%20the%20%5Cncurrent%20page%20in%20a%20New%20Focused%20Tab.%22%29%3B%0A" title="Duplicate Tab"><img alt="Duplicate Tab" src="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANbRz//W0c//1dHP/9XRz//V0c//1dHP/9bQz//W0M//1tDP/9bQz//V0c//1dHP/9XRz/8AAAAAAAAAAHBVOf9wVTn/cFU5/3BVOf9wVTn/cFU5/3BVOf9wVTn/cFU5/3BVOf9wVTn/cFU5/3BVOf9wVTn/AAAAAAAAAABwVTn/8Pn5/+r5+v/o9/n/5PP1/9/w8v/Z7O//1Ojr/87k6P/K3+T/xd3h/8Pb3//o8/b/cFU5/wAAAAAAAAAAzcO4/4BjR//w+fn/6Pb5/+Pz9f/f8PP/2ezv/9To6//O5Oj/yt/l/8Xe4f/o8/b/gGNH/7+0qv8AAAAA1tHP/+vm5P+KcVb/8Pn5/9G/vP/XxsD/3vHy/8HHwf+uq57/q6md/6monP+zvbf/6PP2/4pxVv/W0c//cFU5/3BVOf+6q5z/inFW//D5+f/fzr7/29DD/9/w8v/Z7O//1Ojq/87k6P/K4OT/xd7h/+jz9v+KcVb/qZ2Q/3BVOf/w+fn/6O3t/4pxVv/R0Mj/8Pn5//D5+f/w+fn/8Pn5//D5+f/w+fn/8Pn5//D5+f/R0Mj/inFW/9bd3v/Nw7j/gGNH/+jt7f/FysP/inFW/4pxVv+KcVb/inFW/4pxVv+KcVb/inFW/4pxVv+KcVb/inFW/73Dvv/b4+T/6+bk/4pxVv/w+fn/0b+8/9fGwP/e8fL/wcfB/66rnv+rqZ3/qaic/7O9t//o8/b/inFW/9bRz/8AAAAAAAAAALqrnP+KcVb/8Pn5/9/Ovv/b0MP/3/Dy/9ns7//U6Or/zuTo/8rg5P/F3uH/6PP2/4pxVv+pnZD/AAAAAAAAAADo7e3/inFW/9HQyP/w+fn/8Pn5//D5+f/w+fn/8Pn5//D5+f/w+fn/8Pn5/9HQyP+KcVb/1t3e/wAAAAAAAAAA6O3t/8XKw/+KcVb/inFW/4pxVv+KcVb/inFW/4pxVv+KcVb/inFW/4pxVv+KcVb/vcO+/9vj5P8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+cQf//nEHgAJxBwACcQcAAnEHAAJxBgACcQQAAnEEAAJxBAACcQQADnEEAA5xBAAOcQQADnEH//5xB//+cQQ==" border="0" style="margin: 0 6px;" />Duplicate Tab</a> 複製分頁</li>
  <li><a href="custombutton://Extensions%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACV0lEQVR4Xi3OT2ibZQDH8c/7msT1pZqOtlQ32ulaGJVuB0UvMiyRCbZCT14MHUIzcaCCFcZAGOiKIB3UkyCeBBU86EGYiPZanTIZwnTWScdqbdM/U/vHN1mS5jGHHD637w9+TOM1vKrTtPe8419z7njflrmWt2yb9ocpE0p4CaW2KTjVdtKgkqsnloZCMYyHQjgeHguD4YndoeBDwagZpzCKsfbmNIzjZZxF0aiS+Qd/TUJvRRjYzQcf2DPhotP6TOBJTOE5FIlVPG/NZEvRpq6Wpcp/dR1RXlcmz5pUasWOUalJDQ+3AOC83aGb/SF7TfCdMHCzJ5zYHwjKghXhwC1NXwvmBbOCgheVMI4iGSOas0MXXfWTdWU/WnBjc5kKUqpZkUGibkIFC1IdetSdwZXInB3HJS7bUNR3aCQbr67VaeAuKthGNxbxhVcccNiw8275LbZgw+dm/OUFn/h5falODjVUUUeEHfQKjrhg0OueEunUH3nGfY7akwjWvWnSjEdxG3U0UEOKCAnu4l58605Gzq4EOWRsqLWDFI22/bY6AlJ0ATHOCR6XlcgogCruRx6dgDo6BGvYQQY1cazfu3p9atUlxxT0YxnXcQ2/o4I8yvjSx+ZdsYI9ucjbNj2rx3UMY9O+ryy67bKGX3R42hEnjXnIIr4xJvE3LuH7WCqSw1HUsOAfq96QdU63j+SdUTbrBhLUHJTzg7Ki4ELsHhlNVJHBiIMOOatTnwSRYYeVHEMT2n3WMqoZizZ8pmm/BWKxLQXbHlCxjkfUDGs98yeqUluoAf8DkrzrAnZsWyMAAAAASUVORK5CYII%3D%5D%5B/*%20-------------------------------------------------------------%0A%20%20%20Extensions%20Menu%0A%20%20%20Based%20on%20snippet%20by%20onemen%0A%20%20%20http%3A//forums.mozillazine.org/viewtopic.php%3Fp%3D1774082%231774082%0A%20%20%20Modified%20by%20LouCypher%20%28aka%20Zoolcar9%29%0A%20%20%20-------------------------------------------------------------%20*/%0A%0Aif%28typeof%20BrowserOpenAddonsMgr%20%3D%3D%20%22function%22%29%0A%20%20BrowserOpenAddonsMgr%28%29%3B%0Aelse%0A%20%20BrowserOpenExtensions%28%22extensions%22%29%3B%0A%0A%5D%5Bconst%20EXTENSION%20%3D%20Components.interfaces.nsIUpdateItem.TYPE_EXTENSION%3B%0A%0Afunction%20prop%28aElement%2C%20aString%29%20%7B%0A%20%20var%20emRDF%20%3D%20%22http%3A//www.mozilla.org/2004/em-rdf%23%22%3B%0A%20%20var%20arc%20%3D%20RDFService.GetResource%28emRDF+%20aString%29%3B%0A%20%20var%20target%20%3D%20extensionDS.GetTarget%28aElement%2C%20arc%2C%20true%29%3B%0A%20%20if%28target%20instanceof%20Components.interfaces.nsIRDFLiteral%29%20return%20target.Value%3B%0A%20%20if%28target%20instanceof%20Components.interfaces.nsIRDFInt%29%20return%20target.Value%3B%0A%20%20return%20null%3B%0A%7D%0A%0Avar%20mPopup%20%3D%20this.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0AmPopup.setAttribute%28%22oncommand%22%2C%20%22event.stopPropagation%28%29%22%29%3B%0A%0Avar%20RDFService%20%3D%20Components.classes%5B%22@mozilla.org/rdf/rdf-service%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIRDFService%29%3B%0Avar%20Container%20%3D%20Components.classes%5B%22@mozilla.org/rdf/container%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIRDFContainer%29%3B%0Avar%20extensionDS%20%3D%20Components.classes%5B%22@mozilla.org/extensions/manager%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIExtensionManager%29.datasource%3B%0A%0Avar%20root%3B%0Atry%20%7B%0A%20%20root%20%3D%20RDFService.GetResource%28%22urn%3Amozilla%3Aitem%3Aroot%22%29%3B%0A%7D%20catch%28err%29%20%7B%0A%20%20root%20%3D%20RDFService.GetResource%28%22urn%3Amozilla%3Aextension%3Aroot%22%29%3B%0A%7D%0A%0AContainer.Init%28extensionDS%2Croot%29%3B%0A%0Avar%20elements%20%3D%20Container.GetElements%28%29%3B%0Avar%20extensionArray%20%3D%20%5B%5D%3B%0Avar%20i%20%3D%20-1%3B%0Awhile%28elements.hasMoreElements%28%29%29%20%7B%0A%20%20i++%3B%0A%20%20var%20element%3Delements.getNext%28%29%3B%0A%20%20element.QueryInterface%28Components.interfaces.nsIRDFResource%29%3B%0A%20%20var%20prop_OptionsURL%20%3D%20prop%28element%2C%20%22optionsURL%22%29%3B%0A%20%20if%28prop%28element%2C%20%22type%22%29%20%3D%3D%20EXTENSION%20%26%26%20%20prop_OptionsURL%29%20%7B%0A%20%20%20%20var%20prop_name%20%3D%20prop%28element%2C%20%22name%22%29%3B%0A%20%20%20%20extensionArray%5Bi%5D%20%3D%20%5B%5D%3B%0A%20%20%20%20extensionArray%5Bi%5D%20%5B0%5D%20%3D%20prop_name.charAt%280%29.toUpperCase%28%29%20+%20prop_name.substr%281%29%3B%0A%20%20%20%20extensionArray%5Bi%5D%20%5B1%5D%20%3D%20prop_OptionsURL%3B%0A%20%20%20%20extensionArray%5Bi%5D%20%5B2%5D%20%3D%20prop%28element%2C%20%22userDisabled%22%29%3B%0A%20%20%20%20extensionArray%5Bi%5D%20%5B3%5D%20%3D%20prop%28element%2C%20%22version%22%29%3B%0A%20%20%20%20extensionArray%5Bi%5D%20%5B4%5D%20%3D%20prop%28element%2C%20%22iconURL%22%29%3B%0A%20%20%20%20if%28%21extensionArray%5Bi%5D%20%5B4%5D%29%0A%20%20%20%20%20%20extensionArray%5Bi%5D%20%5B4%5D%20%3D%20%22chrome%3A//mozapps/skin/xpinstall/xpinstallItemGeneric.png%22%3B%0A%20%20%7D%0A%7D%0A%0AextensionArray.sort%28%29%3B%0A%0Avar%20features%20%3D%20%22chrome%2C%20dialog%20%3D%200%2C%20resizable%2C%20titlebar%2C%20toolbar%2C%20centerscreen%22%3B%0A%0Avar%20extCommand%20%3D%20%22window.openDialog%28%27ZZZ%27%2C%20%27%27%2C%20%27%22%20+%20features%20+%20%22%27%29%3B%22%3B%0A%0Afor%28var%20i%20%3D%200%3B%20i%20%3C%20extensionArray.length%3B%20i++%29%20%7B%0A%20%20var%20extArray%20%3D%20extensionArray%5Bi%5D%3B%0A%20%20try%20%7B%0A%20%20%20%20var%20mItem%20%3D%20document.createElement%28%22menuitem%22%29%3B%0A%20%20%20%20mItem.setAttribute%28%22label%22%2C%20extArray%5B0%5D%20+%20%22%20%22%20+%20extArray%5B3%5D%29%3B%0A%20%20%20%20if%28extArray%5B4%5D%29%20%7B%0A%20%20%20%20%20%20mItem.setAttribute%28%22class%22%2C%20%22menuitem-iconic%20bookmark-item%22%29%3B%0A%20%20%20%20%20%20mItem.setAttribute%28%22image%22%2C%20extArray%5B4%5D%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20if%28extArray%5B1%5D%29%0A%20%20%20%20%20%20mItem.setAttribute%28%22oncommand%22%2C%20extCommand.replace%28%22ZZZ%22%2C%20extArray%5B1%5D%29%29%3B%0A%20%20%20%20if%28extArray%5B2%5D%29%20mItem.setAttribute%28%22disabled%22%2C%20true%29%3B%0A%20%20%20%20mPopup.appendChild%28mItem%29%3B%0A%20%20%7D%20catch%28e%29%20%7B%0A%20%20%7D%0A%7D%0A%0Athis.type%20%3D%20%22menu-button%22%3B%0A%0Aif%28typeof%20Local_Install%20%21%3D%20%22object%22%29%20return%3B%0A%0Avar%20test%20%3D%20document.getElementById%28%22cbContext-extensions%22%29%3B%0Aif%28test%29%20test.parentNode.removeChild%28test%29%3B%0A%0Avar%20cbPopup%20%3D%20document.getElementById%28%22custombuttons-contextpopup%22%29.cloneNode%28true%29%3B%0Avar%20cbItems%20%3D%20cbPopup.childNodes.length%20-%202%3B%0A%0Avar%20subPopup%20%3D%20document.createElement%28%22menupopup%22%29%3B%0AsubPopup.setAttribute%28%22onpopupshowing%22%2C%20%22event.stopPropagation%28%29%3B%22%29%3B%0Afor%28var%20i%20%3D%200%3B%20i%20%3C%20cbItems%3B%20i++%29%20%7B%0A%20%20subPopup.appendChild%28cbPopup.firstChild%29%3B%0A%7D%0A%0Avar%20subMenu%20%3D%20document.createElement%28%22menu%22%29%3B%0AsubMenu.setAttribute%28%22label%22%2C%20%22Custom%20Button%22%29%3B%0AsubMenu.appendChild%28subPopup%29%3B%0A%0Avar%20extensionsPopup%20%3D%20document.getElementById%28%22emb-context%22%29%3B%0Avar%20popup%20%3D%20extensionsPopup.cloneNode%28true%29%3B%0Apopup.id%20%3D%20%22cbContext-extensions%22%3B%0Apopup.appendChild%28document.createElement%28%22menuseparator%22%29%29%3B%0Apopup.appendChild%28subMenu%29%3B%0A%0AextensionsPopup.parentNode.appendChild%28popup%29%3B%0A%0Athis.setAttribute%28%22context%22%2C%20popup.id%29%3B%0Athis.onclick%20%3D%20function%28aEvent%29%20%7B%0A%20%20if%28aEvent.button%20%3D%3D%201%29%0A%20%20%20%20gBrowser.selectedTab%20%3D%20gBrowser.addTab%28%27chrome%3A//mozapps/content/extensions/extensions.xul%3Ftype%3Dextensions%27%29%3B%0A%7D%0A%0A" title="Extensions"><img alt="Extensions" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACV0lEQVR4Xi3OT2ibZQDH8c/7msT1pZqOtlQ32ulaGJVuB0UvMiyRCbZCT14MHUIzcaCCFcZAGOiKIB3UkyCeBBU86EGYiPZanTIZwnTWScdqbdM/U/vHN1mS5jGHHD637w9+TOM1vKrTtPe8419z7njflrmWt2yb9ocpE0p4CaW2KTjVdtKgkqsnloZCMYyHQjgeHguD4YndoeBDwagZpzCKsfbmNIzjZZxF0aiS+Qd/TUJvRRjYzQcf2DPhotP6TOBJTOE5FIlVPG/NZEvRpq6Wpcp/dR1RXlcmz5pUasWOUalJDQ+3AOC83aGb/SF7TfCdMHCzJ5zYHwjKghXhwC1NXwvmBbOCgheVMI4iGSOas0MXXfWTdWU/WnBjc5kKUqpZkUGibkIFC1IdetSdwZXInB3HJS7bUNR3aCQbr67VaeAuKthGNxbxhVcccNiw8275LbZgw+dm/OUFn/h5falODjVUUUeEHfQKjrhg0OueEunUH3nGfY7akwjWvWnSjEdxG3U0UEOKCAnu4l58605Gzq4EOWRsqLWDFI22/bY6AlJ0ATHOCR6XlcgogCruRx6dgDo6BGvYQQY1cazfu3p9atUlxxT0YxnXcQ2/o4I8yvjSx+ZdsYI9ucjbNj2rx3UMY9O+ryy67bKGX3R42hEnjXnIIr4xJvE3LuH7WCqSw1HUsOAfq96QdU63j+SdUTbrBhLUHJTzg7Ki4ELsHhlNVJHBiIMOOatTnwSRYYeVHEMT2n3WMqoZizZ8pmm/BWKxLQXbHlCxjkfUDGs98yeqUluoAf8DkrzrAnZsWyMAAAAASUVORK5CYII=" border="0" style="margin: 0 6px;" />Extensions</a> 擴充套件(下拉式選單)</li>
  <li><a href="custombutton://Image%20show-hide%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAA3NCSVQICAjb4U/gAAAAD1BMVEUfact50/fF+v/M//////8mt18DAAAABXRSTlP/////APu2DlMAAAAJcEhZcwAACvAAAArwAUKsNJgAAAAgdEVYdFNvZnR3YXJlAE1hY3JvbWVkaWEgRmlyZXdvcmtzIE1Yu5EqJAAAADhJREFUeJxjcHFgAAIXFwYXB2NjYwYWEMNQUJCZAcYwYIEwGBigDEFhDIYQ+QygpUZKIAbIGQwsANX+EGaBLn8yAAAAAElFTkSuQmCC%5D%5Bswitch%28this.PS.getIntPref%28this.pref%29%29%7B%0A%09case%201%3A%20this.PS.setIntPref%28this.pref%2C2%29%3Bbreak%3B%0A%09case%202%3A%20this.PS.setIntPref%28this.pref%2C3%29%3Bbreak%3B%0A%09case%203%3A%20this.PS.setIntPref%28this.pref%2C1%29%3Bbreak%3B%0A%7D%0A%0ABrowserReload%28%29%5D%5Bthis.pref%3D%27permissions.default.image%27%3B%0Athis.setState%3Dfunction%28%29%7B%0A%09switch%28this.PS.getIntPref%28this.pref%29%29%0A%09%7B%0A%09case%201%3A%0A%09%09this.image%3D%20%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACp0lEQVR42mL4//8/g3zm6f8AAcQAYvz4uuc/QACBeSAOQAAx/P75/X/ukY//AQIILHXhz///lZe//wfJAgQQWOBui9D/P78t/6ftffcfIIAYYKbA9AIEEIjDWnPtx3+YIEAAMXz7/P7/75+v/mcADQQJAAQQ0HTt/y9nqv73W/caLAAQQDAzWC8CbWq89et//fWf/5HNBAgguIJzIKdc+v6/7Py3/8Wnv/wvPPkZrAgggMAKfv+c8P/f+8r//x+mAZ03/X/g5nf/sw68BysACCCIH78p///zSeb/n4ci/39d4P+/4+f//0d//QcrAAggFH8gY5A4CAMEEFxB0+1f/xtu/vxfc+X7f5CDYYoAAgiuoP7Gz//VV378r7j4HdkkVoAAgisA6Sy/8O1/ydmvYB+c+g02hRUggBgaw6T+g4Iegq//B/Fzj376fwLiSFaAAAIr+HI17f//l4X//9+JAyvIPPjh/3GoAoAAAit4MEns/71Gof+f1hmCFaQCownqTVaAAAIr+PNb4f+fFxL//9wUACsAScIUAAQQA8y/IA7IsSAvgvAFKD4PxdjCCIQBAgjDgAvQSK0DRmrtNWDQXAUFzTewxjNAn5/8/R/FIIAAwjAAZFsdMEFVAcMUFPkgzaAEUAoKvlOfkYMQ7AWAAAJrBvmLEC4Aasw/DsTHPiG7ghUggOAG/PkFTCG/p/3//6P///+PLf//vwamrsc5///+WQc2IHLX+//Zhz/+zz4EjwKwAQABBDfg90/d/w+mSvx/DEztPy+G//9/K/r//6vBwBhoBhvgv/HN//T97/9n7Hv//xiSAQABhDDgl8b/B33C/++3C/6/38T//34d7//7Vdz//0Kjzm/dq/9pe979T939Fp6UQQYABBDRYSAZdghrkgcIMAD5xMj+kGsEXgAAAABJRU5ErkJggg%3D%3D%27%3B%0A%09%09this.tooltipText%3D%20%27load%20all%20images%27%3B%0A%09%20%09break%3B%0A%09case%202%3A%0A%09%09this.image%3D%0A%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAA3NCSVQICAjb4U/gAAAAD1BMVEUfact50/fF+v/M//////8mt18DAAAABXRSTlP/////APu2DlMAAAAJcEhZcwAACvAAAArwAUKsNJgAAAAgdEVYdFNvZnR3YXJlAE1hY3JvbWVkaWEgRmlyZXdvcmtzIE1Yu5EqJAAAADhJREFUeJxjcHFgAAIXFwYXB2NjYwYWEMNQUJCZAcYwYIEwGBigDEFhDIYQ+QygpUZKIAbIGQwsANX+EGaBLn8yAAAAAElFTkSuQmCC%27%3B%0A%09%09this.tooltipText%3D%20%27don%5C%27t%20load%20any%20images%27%3B%0A%09%09break%3B%0A%09case%203%3A%20%0A%09%09this.image%3D%0A%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACdklEQVR42mL4//8/g3zm6f8AAcQAYvz69es/QACBeSAOQAAx/Pnz5//Z20/+AwQQWOrHv///n7x89R8kCxBAYIEuXdb/f//+/X/w8oP/AAHEADMFphcggEAc1pdv3vyHCQIEEMPPnz//gwy8dPcpWAAggMCmnzp16v+Rqw/BAgABBDOD9RfQpncf3v1/9RahHSQHEEBwBd+BCh4DnXLv6Yv/Nx89/3/l/jOwIoAAAisAGXv9+vX/MOedvvn4//Frj8AKAAII7keQBAj//v37//M///8/+/0frAAggFD8gYxB4iAMEEBwBR8+vvv/5v1bYJC8/v/733+4IoAAgit4/e7t/+evX/9/9OIVskmsAAEEV/D01ev/D56//H/78Yv/1x48+//uD9gUVoAAYlizZg04pGAYxD8PjIbXUAUAAQRWMMmA9f+VK1f+dwK9CeKfuP7o/0uoAoAAAivo02f9f+7cuf9tOhAFh4DR9BziTVaAAAIrgIUBCIP4IEloOLACBBADzL8gDsixIC+C4uUnFP+AYmxhBMIAAYRhwE9wpL79/wYYLKCIfQEMmofPIUHz6e///2///EcxCCCAMAwA2fYCmKCeATWC0uFDYNDdf/by/50nL/5fBQbf5ftP/7//CzeEFSCAwJpB/iKErwJTz6V7T/9fBCZMJFewAgQQ3ABQAE0BBjcoyCcAQxUUsj16rP///fsHNuAcMG7OAFPZqRuP/79CMgAggOAGgCIRpBEUX6BkCYqWDh1WeMiD4u4oMBeAcsILJAMAAgjFgF6gjSDNII2gOG3RRhhw+MrD/wcvPfi//+J9eFIGGQAQQESHAa4kDxBgAMjdAQviliYiAAAAAElFTkSuQmCC%27%3B%0A%09%09this.tooltipText%3D%20%27load%20images%20only%20from%20this%20domain%27%3B%0A%09%09break%3B%0A%09%7D%0A%7D%0A%0Athis.PS%3D%0A%20Components.classes%5B%27@mozilla.org/preferences-service%3B1%27%5D%0A%20.getService%28Components.interfaces.nsIPrefBranch%29%3B%0Athis.ob%3D%7B%7D%3B%0Athis.ob.observe%3Dthis.setState.bind%28this%29%3B%0Athis.PS.addObserver%28this.pref%2Cthis.ob%2Cfalse%29%3B%0Athis.setState%28%29%3B" title="Image show-hide"><img alt="Image show-hide" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAA3NCSVQICAjb4U/gAAAAD1BMVEUfact50/fF+v/M//////8mt18DAAAABXRSTlP/////APu2DlMAAAAJcEhZcwAACvAAAArwAUKsNJgAAAAgdEVYdFNvZnR3YXJlAE1hY3JvbWVkaWEgRmlyZXdvcmtzIE1Yu5EqJAAAADhJREFUeJxjcHFgAAIXFwYXB2NjYwYWEMNQUJCZAcYwYIEwGBigDEFhDIYQ+QygpUZKIAbIGQwsANX+EGaBLn8yAAAAAElFTkSuQmCC" border="0" style="margin: 0 6px;" />Image show-hide</a> 圖片 隱藏/顯示</li>
  <li><a href="custombutton://Offline%5D%5B%5D%5BBrowserOffline.toggleOfflineStatus%28%29%3B%5D%5Bthis.pref%3D%27browser.offline%27%3B%0Athis.setState%3Dfunction%28%29%7B%0A%20var%20state%3Dthis.PS.getBoolPref%28this.pref%29%3B%0A%20if%20%28state%3D%3Dtrue%29%7B%0A%20%20this.image%3D%0A%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABoAAAAMCAYAAAELwp3eAAAAKnRFWHRDcmVhdGlvbiBUaW1lAIyOIDIyIDExIDIwMDQgMDM6MjE6MTQgKzA5MDBZZECTAAAAB3RJTUUH1AsWBgwQ8lbuEQAAAAlwSFlzAAAK8AAACvABQqw0mAAAAARnQU1BAACxjwv8YQUAAAMmSURBVHjahVR9SBNhGH/vvNtum80KRJFJWtFCSUSJJCgyEUTtw4+EDdGaFkphIQn9k2AS/REIBZYQUX/kR1iwIepKlNSRhDg/AisDUVmaqbT8uG137+563rXJtYReeI/f87vn+3nuEIJjLS7eRS7BNHkcNxrXY6Ki1k4nJCQg5aGupqcfOhoXdylKrT5M9ZjNW7Is09lFRVxzS0vpybS0Z+tu95aEsYCCjqmQKWBdABAr4fVr+WVBQStxKVmtcr/FsszktrUZnHr9CkNR+4niyugoujswcAwpXKj6KyvX5fFx+UVh4Y0Q76ipwV/u35c6CgurQxzztb7eA8kFBIPBwG2MjCAR4+18VLIsxev1EarU1AczyclNgfKUtTZnZ6doWDZryOXqfz41NUW4F/n513mMf12x23tA/IHCT7CVOoVMhVq74+k2m1tJPX0WixdElnBvysuthOsymXhlVgxpHQF7o6NpeX6eQPlxTs7lBoejS5YkRLhTeXmaPo77TlN/7JiDBw4EhsppNKx3eRkhjFG13f4cKB6BEeFkvx/tMxj025EONTbGEdB14cJ4htG4D0aKWs+da2l0OG4TZY/LhSbn5nx3BgeP0DSNA0ZwfxLgl+XELqezCtrPVPT2PiWRBIwbbGNjg6NLS0PvFhZI7uI/LVd0bY8mMrIWYDGiqAioTRQFwXKmvf2DUu+txVIFmd0CGAHXI0lSs+D1Pjn/6hUf7pOMISWMS2ZVqke5dXW70doakqHEgc5Or4/nuZCCKIoacOa1l5VZY+Ljc1MzM1kESzXjdPpmJiY+fXO7r8XqdBtKp8yJrKzJ8OhqjkPi9HQAYwhEerjC87UXbbZnQAnbisD7PR4kkkHBSTQY1PGxsalky8N9MqPDwzYfxnSIgH7vYmg6Iy0piYvUahEmKwHBorXapm6TqUlREVFGfp5H3sXFgO3S6ir6PDvrAx8uEKW/WrfTjGAzSmHHHmpZNgIU/OuCoIOKblZ0d7eRIoNONntKSjrg/VmdSuXB8LPYEoTN9y6X+d7IyEd47/5vIGXFwS8kpOcjDQvTYYMXBRMQd9BBvwEukXvaOhaKMwAAAABJRU5ErkJggg%3D%3D%27%3B%0A%20%20this.checked%3Dtrue%3B%0A%20%7Delse%7B%0A%20%20this.image%3D%0A%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABoAAAAMCAYAAAELwp3eAAAAKnRFWHRDcmVhdGlvbiBUaW1lAIyOIDIyIDExIDIwMDQgMDM6MjE6MTQgKzA5MDBZZECTAAAAB3RJTUUH1AsWBgs2bxr9KwAAAAlwSFlzAAAK8AAACvABQqw0mAAAAARnQU1BAACxjwv8YQUAAAKBSURBVHjanVPNaxNBFJ/ZTTa7WRNNyJZArJVAJWBJDwrdIAkNHtqCBwVBEUsES1Hwogf/gB489CBF/DiIQqNevEQvpmAhFFpICEo1kkJaiNLE0GAlSfOx6+5mnAlNTdN2Cw68efPezO+993szA0DXgGTyhX3fOZ5zph6mPC2v+ELkiaaw2Bgz80s4J5yEgdeBGvE6HU6qXCmDMf8YG12KFncFxFALkbZtaKNCF0Nmoq1WaxFC2MpsI46J7MRvSEEQuRrpx1rtLhEEXgXexKtxNPJ2RCLaP+uvt0vf4TH5abIB0D8Hx3FGoUegY7GYFAwGWU3RQP5nXtpDvqt4KJflWziQAZvG0pfSQjac/YrXii4IqyPbe1r8ZrzWfYbqAjD2o/byzJWZSm9Pb8nv9W+Jz8Tbe+6m3ToyEELU+IVxFuHaFj8vouGhYRj5GCkpmvKnE2TweDy7shXVIiDk61odFBoF0Ofu4xVFYbsbYWsb7pBbGLgxkBZOCHQ+k0eufhdML6Tfrb1cu6vbPe8Dr5dm6fNYTqlVNbF8f/kDKUAXtE83bRaz5R5eXsaPhG6ipoI5H8d2BUsD208aUuM57nJdLw7Egbw6+6cZhnk6fWn62DpYx5ergHA0LLkEl2n07CgkTU6sJORkOrlSKVTusAK7dWCiqR9TSCcR4EwcYExMa62qKpiLzUkOu8MknhF3ukH8hw3D/NL8+6bcpPbbbIKmBdJQHBwaZHkLDzRVAypSQU2rgVwj1zqzkd8Aq99WZUwu14IcxOiwSnyzvuv4pz5ieIbGT1uTSzIPGWgw8aYyUhElV+XqZnLzWuZxJoWPl/47USd7LMYODLHVbRbkb2p64L886/rMrAsLAgAAAABJRU5ErkJggg%3D%3D%27%3B%0A%20%20this.checked%3Dfalse%3B%0A%20%7D%0A%7D%0A%0Athis.PS%3D%0A%20Components.classes%5B%27@mozilla.org/preferences-service%3B1%27%5D%0A%20.getService%28Components.interfaces.nsIPrefBranch%29%3B%0Athis.ob%3D%7B%7D%3B%0Athis.ob.observe%3Dthis.setState.bind%28this%29%3B%0Athis.PS.addObserver%28this.pref%2Cthis.ob%2Cfalse%29%3B%0Athis.setState%28%29%3B" title="Offline"><img alt="Offline" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAMCAYAAAELwp3eAAAAKnRFWHRDcmVhdGlvbiBUaW1lAIyOIDIyIDExIDIwMDQgMDM6MjE6MTQgKzA5MDBZZECTAAAAB3RJTUUH1AsWBgwQ8lbuEQAAAAlwSFlzAAAK8AAACvABQqw0mAAAAARnQU1BAACxjwv8YQUAAAMmSURBVHjahVR9SBNhGH/vvNtum80KRJFJWtFCSUSJJCgyEUTtw4+EDdGaFkphIQn9k2AS/REIBZYQUX/kR1iwIepKlNSRhDg/AisDUVmaqbT8uG137+563rXJtYReeI/f87vn+3nuEIJjLS7eRS7BNHkcNxrXY6Ki1k4nJCQg5aGupqcfOhoXdylKrT5M9ZjNW7Is09lFRVxzS0vpybS0Z+tu95aEsYCCjqmQKWBdABAr4fVr+WVBQStxKVmtcr/FsszktrUZnHr9CkNR+4niyugoujswcAwpXKj6KyvX5fFx+UVh4Y0Q76ipwV/u35c6CgurQxzztb7eA8kFBIPBwG2MjCAR4+18VLIsxev1EarU1AczyclNgfKUtTZnZ6doWDZryOXqfz41NUW4F/n513mMf12x23tA/IHCT7CVOoVMhVq74+k2m1tJPX0WixdElnBvysuthOsymXhlVgxpHQF7o6NpeX6eQPlxTs7lBoejS5YkRLhTeXmaPo77TlN/7JiDBw4EhsppNKx3eRkhjFG13f4cKB6BEeFkvx/tMxj025EONTbGEdB14cJ4htG4D0aKWs+da2l0OG4TZY/LhSbn5nx3BgeP0DSNA0ZwfxLgl+XELqezCtrPVPT2PiWRBIwbbGNjg6NLS0PvFhZI7uI/LVd0bY8mMrIWYDGiqAioTRQFwXKmvf2DUu+txVIFmd0CGAHXI0lSs+D1Pjn/6hUf7pOMISWMS2ZVqke5dXW70doakqHEgc5Or4/nuZCCKIoacOa1l5VZY+Ljc1MzM1kESzXjdPpmJiY+fXO7r8XqdBtKp8yJrKzJ8OhqjkPi9HQAYwhEerjC87UXbbZnQAnbisD7PR4kkkHBSTQY1PGxsalky8N9MqPDwzYfxnSIgH7vYmg6Iy0piYvUahEmKwHBorXapm6TqUlREVFGfp5H3sXFgO3S6ir6PDvrAx8uEKW/WrfTjGAzSmHHHmpZNgIU/OuCoIOKblZ0d7eRIoNONntKSjrg/VmdSuXB8LPYEoTN9y6X+d7IyEd47/5vIGXFwS8kpOcjDQvTYYMXBRMQd9BBvwEukXvaOhaKMwAAAABJRU5ErkJggg==" border="0" style="margin: 0 6px;" />Offline on/off </a> 離線模式 開/關</li>
  <li><a href="custombutton://Option%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADHUlEQVR4Xl3DS2hcVRzA4d+55869M5NMppOEyctoxlgnsRgxRrSKpaQ+arG4kkJEBQmu1YUaoXQluNEuRUQ3xShiKdpiKSFpNRAosbQaY3yUGqOpcZI0Zh7JzJx7zt9FyaYffKrp0Gl2iBMkERsSJwOqWJsUZwtUTb/zvTnxlHH1CKxFRNjhcRPKurtVLcpHTelPtkcGP47yrZ/adHiy9kT+gsskjlKLwDlu5QHgZLA20HHa9GcnzGB7j7svS/Tknkc5/MDTHNyTckN3jDntHUN7RxC6AVA3q9TBr8Hqt0uH9r/DcAKKhl3f/EXjPxuoQKE9H9uZohQTNjHocz99oTYqI4JYAA/nEGe79aUNqEDDzDqt26Xr8Q7/VNjiz/jNmIZqmdvDgGyuC5eK97rt7dDV67iawRNR+01f+4vykAdFIblV/zXeknjcC/0jKu49Fe9KPRbetWvKyzhykaFpqG/AZpvHURxAgSfKv6fe05t0fe1gFFaH6WhFF1wpNIkgWcbJRS/QzyV2Zy4ke2K0PdIbY/Tws9Ld8R4mavPFRpGaM8ga0AultnR7tlp7NZ30jzZkkkirRu0Obuh08IavmE4uSag2I2S9soyi7Clnvg+u//CtXpgrsGIwQZx/W5vHYg2xsZiWprjEaCn4JLbUbNKq2XpFIcv/Qbm0LNaGqmH4FBJFOGvfre478CadLWAhJTVySTPVmdFnUil/Lkj4+WtV9frlRe6sGuDyPExPj6r43s/AWd92tX1n9g3vxSpIAEVQAolQaIxT3q6pxkoVHEAOmP4Nzk48o8KHxyGyzTaXnYieHx7k6iY0K+jMwBWgAvhADIgAU4W1eZiZO8lG8RUVPHiCmxi2udZxVotnqFptR+5/CT+vWAL6gXuBq8AVA1+e+Jut4iC+v+ohAiLgZEr/vDyg1iqjFDZfVucWPuc2oMPAR18t8OHkCnkDNxagXjuO1qsAHjsUSBAriAeiEda31vjjF1icLbP45wtM/v4Wx87Oc37mNax5H6UA8LmFWIsoBcWt43wwPUU9MsSDS9joRy5eO09ML6E9dvwPdX9rZvPeL7sAAAAASUVORK5CYII%3D%5D%5BopenPreferences%28%29%3B%5D%5B" title="Options"><img alt="Options" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADHUlEQVR4Xl3DS2hcVRzA4d+55869M5NMppOEyctoxlgnsRgxRrSKpaQ+arG4kkJEBQmu1YUaoXQluNEuRUQ3xShiKdpiKSFpNRAosbQaY3yUGqOpcZI0Zh7JzJx7zt9FyaYffKrp0Gl2iBMkERsSJwOqWJsUZwtUTb/zvTnxlHH1CKxFRNjhcRPKurtVLcpHTelPtkcGP47yrZ/adHiy9kT+gsskjlKLwDlu5QHgZLA20HHa9GcnzGB7j7svS/Tknkc5/MDTHNyTckN3jDntHUN7RxC6AVA3q9TBr8Hqt0uH9r/DcAKKhl3f/EXjPxuoQKE9H9uZohQTNjHocz99oTYqI4JYAA/nEGe79aUNqEDDzDqt26Xr8Q7/VNjiz/jNmIZqmdvDgGyuC5eK97rt7dDV67iawRNR+01f+4vykAdFIblV/zXeknjcC/0jKu49Fe9KPRbetWvKyzhykaFpqG/AZpvHURxAgSfKv6fe05t0fe1gFFaH6WhFF1wpNIkgWcbJRS/QzyV2Zy4ke2K0PdIbY/Tws9Ld8R4mavPFRpGaM8ga0AultnR7tlp7NZ30jzZkkkirRu0Obuh08IavmE4uSag2I2S9soyi7Clnvg+u//CtXpgrsGIwQZx/W5vHYg2xsZiWprjEaCn4JLbUbNKq2XpFIcv/Qbm0LNaGqmH4FBJFOGvfre478CadLWAhJTVySTPVmdFnUil/Lkj4+WtV9frlRe6sGuDyPExPj6r43s/AWd92tX1n9g3vxSpIAEVQAolQaIxT3q6pxkoVHEAOmP4Nzk48o8KHxyGyzTaXnYieHx7k6iY0K+jMwBWgAvhADIgAU4W1eZiZO8lG8RUVPHiCmxi2udZxVotnqFptR+5/CT+vWAL6gXuBq8AVA1+e+Jut4iC+v+ohAiLgZEr/vDyg1iqjFDZfVucWPuc2oMPAR18t8OHkCnkDNxagXjuO1qsAHjsUSBAriAeiEda31vjjF1icLbP45wtM/v4Wx87Oc37mNax5H6UA8LmFWIsoBcWt43wwPUU9MsSDS9joRy5eO09ML6E9dvwPdX9rZvPeL7sAAAAASUVORK5CYII=" border="0" style="margin: 0 6px;" />Options</a> 選項</li>
  <li><a href="custombutton://Page%20Infomation%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACWElEQVR4XqWTzU9TaRSHn3t7ez9aoFoqqGCHITEo4szGkLhxQf1I3LIgmriYTIxxB38J7N256gYTjTGTGjYGJxACooRSCrEpQmuBUuh376dXLdHYDYlP8ia/d3Gec5L3PcLk5KTDbyABjI+P8zZhki0Y6KbFUqpGqWpS1S33mFTqBqWaQaVhUXHvZTdnnwwzNTWFRJOrYZErFxR8qsidvxVyBxUM08Z2bAJ+Gb+mUG3omKaNZds0+SHo8ImAw/v1HTY/FRAFgWN0w6I7qHL9r14kyYtlWq0CgGczcfaODIaHegifDbidveSP6uwf1lmIZ4g//8CDu4OIoojMd0SaxP5PspIqET7fSSpbplCsIXkEEukD1rcO6e0+RcVUiMbWELDhV8HrxSyOpLC0eUByp8TMu888jW0yn8iztl0itphh+WOR6dksuXy5VZDcrZPMVlnZKrOx22Cg7zSjN/owEJmez/JiIcdswp1mz2Q1lW8VpAs6a5kaG/s6b5JHzG0U8asS+xWDXMUBRUFr07AVmZputQoCAZmi46GBB9vjxUIAQJUl2tt9yJqKLatulhns72oVjF7rRlNEgu0a4aCPnqAGQG+n5mYfwTYVRYbIgJ9wSGt9xn9vXaRQTbK8A10BDZ8Es6t7hNoU/gyplKoNHg/mAHj1X6ZVoGkKjyI9vJzbJn1okEhXiacFRAHO+QWGggYAY2NjAN++8cTEhCLSxHYg0OHn3kg/D2+e4faQTOSSl8hlL/+MhLg/8gfAz8UioPN1G0+CZVlONBp1ft1e6dh4UtzOAj/xBePYJME71I8eAAAAAElFTkSuQmCC%5D%5BBrowserPageInfo%28%29%3B%5D%5B" title="Page Infomation"><img alt="Page Infomation" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACWElEQVR4XqWTzU9TaRSHn3t7ez9aoFoqqGCHITEo4szGkLhxQf1I3LIgmriYTIxxB38J7N256gYTjTGTGjYGJxACooRSCrEpQmuBUuh376dXLdHYDYlP8ia/d3Gec5L3PcLk5KTDbyABjI+P8zZhki0Y6KbFUqpGqWpS1S33mFTqBqWaQaVhUXHvZTdnnwwzNTWFRJOrYZErFxR8qsidvxVyBxUM08Z2bAJ+Gb+mUG3omKaNZds0+SHo8ImAw/v1HTY/FRAFgWN0w6I7qHL9r14kyYtlWq0CgGczcfaODIaHegifDbidveSP6uwf1lmIZ4g//8CDu4OIoojMd0SaxP5PspIqET7fSSpbplCsIXkEEukD1rcO6e0+RcVUiMbWELDhV8HrxSyOpLC0eUByp8TMu888jW0yn8iztl0itphh+WOR6dksuXy5VZDcrZPMVlnZKrOx22Cg7zSjN/owEJmez/JiIcdswp1mz2Q1lW8VpAs6a5kaG/s6b5JHzG0U8asS+xWDXMUBRUFr07AVmZputQoCAZmi46GBB9vjxUIAQJUl2tt9yJqKLatulhns72oVjF7rRlNEgu0a4aCPnqAGQG+n5mYfwTYVRYbIgJ9wSGt9xn9vXaRQTbK8A10BDZ8Es6t7hNoU/gyplKoNHg/mAHj1X6ZVoGkKjyI9vJzbJn1okEhXiacFRAHO+QWGggYAY2NjAN++8cTEhCLSxHYg0OHn3kg/D2+e4faQTOSSl8hlL/+MhLg/8gfAz8UioPN1G0+CZVlONBp1ft1e6dh4UtzOAj/xBePYJME71I8eAAAAAElFTkSuQmCC" border="0" style="margin: 0 6px;" />Page Infomation</a> 頁面資訊</li>
  <li><a href="custombutton://Proxy%5D%5B%5D%5Bswitch%28this.PS.getIntPref%28this.pref%29%29%7B%0A%09case%201%3A%20this.PS.setIntPref%28this.pref%2C0%29%3Bbreak%3B%0A%09case%200%3A%20this.PS.setIntPref%28this.pref%2C1%29%3Bbreak%3B%0A%7D%5D%5Bthis.pref%3D%27network.proxy.type%27%3B%0Athis.setState%3Dfunction%28%29%7B%0A%20var%20state%3Dthis.PS.getIntPref%28this.pref%29%3B%0A%20if%20%28state%3D%3D1%29%7B%0A%20%20this.image%3D%0A%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAG1BMVEUA/wCIiIgAAADd3d3///8AAICAAAD/AAAAAP8pkhnQAAAAAXRSTlMAQObYZgAAAF1JREFUeF4tyUERg0AQRNEJDjprAAYFQztYCglYWAlwzi2y053kn17Vj4AK9djJmo3jPP94exqv7zR6prFXvy8D+AG59DGExiJpoKC0gFQ9pmxUzwhNbqsBJ2iq+QNw+RI4rlZUrAAAAABJRU5ErkJggg%3D%3D%27%3B%0A%20%20this.checked%3Dtrue%3B%0A%20%7Delse%7B%0A%20%20this.image%3D%0A%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAElBMVEUA/wAAAACIiIjd3d2AgID///9WXziYAAAAAXRSTlMAQObYZgAAAFRJREFUeF4tydERgCAMBNFABUQr8KjAXAcODTD034s5cb/ezJohs6wuMpow3X8MTeH5prBnXTHHEIAN+LHRGSQFBLJcgGfTindml1lO3qcAJRTP2gv/MBEl7nzAMAAAAABJRU5ErkJggg%3D%3D%27%3B%0A%20%20this.checked%3Dfalse%3B%0A%20%7D%0A%7D%0A%0Athis.PS%3D%0A%20Components.classes%5B%27@mozilla.org/preferences-service%3B1%27%5D%0A%20.getService%28Components.interfaces.nsIPrefBranch%29%3B%0Athis.ob%3D%7B%7D%3B%0Athis.ob.observe%3Dthis.setState.bind%28this%29%3B%0Athis.PS.addObserver%28this.pref%2Cthis.ob%2Cfalse%29%3B%0Athis.setState%28%29%3B" title="Proxy on-off"><img alt="Proxy on-off" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAElBMVEUA/wAAAACIiIjd3d2AgID///9WXziYAAAAAXRSTlMAQObYZgAAAFRJREFUeF4tydERgCAMBNFABUQr8KjAXAcODTD034s5cb/ezJohs6wuMpow3X8MTeH5prBnXTHHEIAN+LHRGSQFBLJcgGfTindml1lO3qcAJRTP2gv/MBEl7nzAMAAAAABJRU5ErkJggg==" border="0" style="margin: 0 6px;" />Proxy on-off</a> 代理伺服器 開/關</li>
  <li><a href="custombutton://%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%09%3Cname%3ERestart%20Firefox%3C/name%3E%0A%09%3Cimage%3E%3C%21%5BCDATA%5Bdata%253Aimage/png%253Bbase64%252CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADL0lEQVR42l2SW2gTWRjH/2eSySSTTpMmvdq4vaSW9UbByFKWFfsourKLFlnqpV5a6CJeH9wHxUof1IcFK7ugVATBuw8uFpbdJdBFRbu7UtSSWopKm2raJG0SJpk26Uxmzp6pXch24Dtwvvn+v/PdCJZ/u0I17DzHrIVZ7ZJ3AobxCHruMn75YpzFtDNfLx6sKyXLxO2eYmvv11vL3b5aBzgLB5vNgpySx+hIGo+fJpCU1Zuind87rxpgAA8pEDd5JMurjkM+xNMq0lkCjufB23jY7TxWeDmUFxn4tT+KQMCFC70TJqCyEPDn/raqlhU+AYm4Ckni4SkVkMsTpBgsqxFIIsHqSoAQis6jowWApdcb/E78M5SioLoZNSg6hC+/anZjc4sHhtWK6QyFwAMNpRwOnywEtA6fA8d1F/Fz0wvpVEybS17GQFs/1h9zYdWe8zWflXx3+oc6TMzqyBkUjWVWdB0vBOx8fbtIVP1OGg7GYkYIwV0PmVfHjqEmWIWB1m1l7sYGEayni8Yx1dkfwwWALf0r/VXRknhUJxmFTOJpV2ops2/ZeYKVZAEo97+JUUPGw437yZsGMWVzlbmXr4OWzUCVkz1NEVxkV2eHBG9tsddTIgiiIzPFHZzBMPPnybtADa070gcsLLCk84DDAeVFEOFgX6gvrnzzs4wYC1SDVdhHi1dWVmSjnTC0v5s+Yp9Z5idAG3skGgFrP0hdPVIDdxB5/cfzREa5y9bld0KwW+CwVXK6V7nKqks+jI+c2jSFKwwwvwiob7sAzMZBs/Og1AD1epFXFWTePENuNgxDV2GTKiD5A4j99QD3x8MbTyfBxoDsIsB/+KrZFND370DlBKtEg87uuiCAOp0MoIOzi1DfD+Ht45vXmiM4w8Rmo7VFQHlzK2Ze9KN6y/ewiW7o05PQ0jLyDJRnC8RXVYMmI5h8cmvk0ofZHdcziDKxwswgo2s8VNPU0JisdDe6ino8NevXSvUBOHyfm9sINR6GPDaIxMTLwUtTyoEbCuJLYs2cFhn2ofdKGj8xM1NS71Vgg8+C7XaCdWz4xXMUg7KB0LYofmP/F8zGmXH/jftfxs1e2EaqEmMAAAAASUVORK5CYII%253D%5D%5D%3E%3C/image%3E%0A%09%3Cmode%3E0%3C/mode%3E%0A%09%3Cinitcode%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/initcode%3E%0A%09%3Ccode%3E%3C%21%5BCDATA%5Bvar%2520confirmRestart%2520%253D%2520window.confirm%2528%2527Are%2520you%2520sure%2520you%2520want%2520to%2520restart%2520firefox%253F%2527%2529%253B%250Aif%2528%2521confirmRestart%2529%2520return%253B%250A%2520%2520%2520%2520%250Avar%2520appStartup%2520%253D%2520Components.interfaces.nsIAppStartup%253B%250A//%2520if%2520%2528canQuitApplication%2528%2529%2529%2520//%2520uncomment%2520if%2520using%2520zeniko%2527s%2520Session%2520Manager%250AComponents.classes%255B%2522@mozilla.org/toolkit/app-startup%253B1%2522%255D%250A.getService%2528appStartup%2529.quit%2528appStartup.eRestart%2520%257C%2520appStartup.eAttemptQuit%2529%253B%2520%2520%2520%2520%5D%5D%3E%3C/code%3E%0A%09%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%3C/custombutton%3E" title="Restart Firefox"><img alt="Restart Firefox" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADL0lEQVR42l2SW2gTWRjH/2eSySSTTpMmvdq4vaSW9UbByFKWFfsourKLFlnqpV5a6CJeH9wHxUof1IcFK7ugVATBuw8uFpbdJdBFRbu7UtSSWopKm2raJG0SJpk26Uxmzp6pXch24Dtwvvn+v/PdCJZ/u0I17DzHrIVZ7ZJ3AobxCHruMn75YpzFtDNfLx6sKyXLxO2eYmvv11vL3b5aBzgLB5vNgpySx+hIGo+fJpCU1Zuind87rxpgAA8pEDd5JMurjkM+xNMq0lkCjufB23jY7TxWeDmUFxn4tT+KQMCFC70TJqCyEPDn/raqlhU+AYm4Ckni4SkVkMsTpBgsqxFIIsHqSoAQis6jowWApdcb/E78M5SioLoZNSg6hC+/anZjc4sHhtWK6QyFwAMNpRwOnywEtA6fA8d1F/Fz0wvpVEybS17GQFs/1h9zYdWe8zWflXx3+oc6TMzqyBkUjWVWdB0vBOx8fbtIVP1OGg7GYkYIwV0PmVfHjqEmWIWB1m1l7sYGEayni8Yx1dkfwwWALf0r/VXRknhUJxmFTOJpV2ops2/ZeYKVZAEo97+JUUPGw437yZsGMWVzlbmXr4OWzUCVkz1NEVxkV2eHBG9tsddTIgiiIzPFHZzBMPPnybtADa070gcsLLCk84DDAeVFEOFgX6gvrnzzs4wYC1SDVdhHi1dWVmSjnTC0v5s+Yp9Z5idAG3skGgFrP0hdPVIDdxB5/cfzREa5y9bld0KwW+CwVXK6V7nKqks+jI+c2jSFKwwwvwiob7sAzMZBs/Og1AD1epFXFWTePENuNgxDV2GTKiD5A4j99QD3x8MbTyfBxoDsIsB/+KrZFND370DlBKtEg87uuiCAOp0MoIOzi1DfD+Ht45vXmiM4w8Rmo7VFQHlzK2Ze9KN6y/ewiW7o05PQ0jLyDJRnC8RXVYMmI5h8cmvk0ofZHdcziDKxwswgo2s8VNPU0JisdDe6ino8NevXSvUBOHyfm9sINR6GPDaIxMTLwUtTyoEbCuJLYs2cFhn2ofdKGj8xM1NS71Vgg8+C7XaCdWz4xXMUg7KB0LYofmP/F8zGmXH/jftfxs1e2EaqEmMAAAAASUVORK5CYII=" border="0" style="margin: 0 6px;" />Restart Firefox</a> 重新啟動</li>
  <li><a href="custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u5074%u908A%u6B04%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAEG0lEQVR4AQEQBO/7AVR1ulWsvt8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAemMv44VpN8gBHFy3/+QNGAAAAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAA3DAQAz+z6ADEUBgDP7PoAMRQGAM/o9gAe7Mqz3LVragTo6/UADRABAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAA0RBgAT+v0ADREGABP6/QANEQYAE/r9ANzG2gsAAAA7BDIbBQBSPwkAGxYKAAAAAAAAAAAA19fXACYmJgAKCQkAAAAAAAAADgAAAAAAAAAOAAAAAAD4/AwAXrQAAAAAAAIEGA4DAA7+9QApEQQA9O7jABEREQAOGfcAQDMRAA4ODgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABeAAAAAAAAAAT5+fkAMiIDAAkD+AAJFRUAAAAAAPz8/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAkJCQDq9QoAGhoQAP/89gD7+/sABwcHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE/v7+APv7+wD6+vkA/vv5APv7+wD+/v4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7+/sALyEGAAD9+AACAgIABwcHAP39/QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwMDAAUFBQA+fn5AAMDAwAJCQkADAwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAcHBwAVFRUA/Pz8AAwMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv7+/wDs7e0A3NzcAPPz8wD+/v4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8/f4AAAAAAAAAAAAE///+AHCR1gACAgEAAAD1AAAA4gDp6ekAErfFAAUFBQAAAAAAAAAAAAAAAAAAAAAAAAAAAPz9/gA0Jw4AzNsAAAH///8AAQEBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADZAf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACNo6cZgnlaQAAAABJRU5ErkJggg%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.toggleSidebar%20%3D%20function%28%29%20%7B%0A%20%20var%20prefString%20%3D%20%22custombuttons.toggleSidebar.sidebarCommand%22%3B%0A%20%20var%20sidebarCmd%20%3D%20document.getElementById%28%22sidebar-box%22%29.getAttribute%28%22sidebarcommand%22%29%3B%0A%20%20if%28%21sidebarCmd%29%20%7B%0A%20%20%20%20try%20%7B%0A%20%20%20%20%20%20sidebarCmd%20%3D%20gPrefService.getCharPref%28prefString%29%3B%0A%20%20%20%20%7D%20catch%28ex%29%20%7B%0A%20%20%20%20%20%20sidebarCmd%20%3D%20%22viewBookmarksSidebar%22%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20gPrefService.setCharPref%28prefString%2C%20sidebarCmd%29%3B%0A%20%20toggleSidebar%28sidebarCmd%29%3B%0A%7D%0A%0Athis.savePrefs%20%3D%20function%28aEvent%29%20%7B%0A%20%20var%20prefString%20%3D%20%22custombuttons.toggleSidebar.sidebarCommand%22%3B%0A%20%20gPrefService.setCharPref%28prefString%2C%20aEvent.target.getAttribute%28%22observes%22%29%29%3B%0A%7D%0A%0Athis.getBookmark%20%3D%20function%28%29%20%7B%0A%20%20var%20rv%20%3D%20%7B%20urls%3A%20null%2C%20names%3A%20null%20%7D%3B%0A%20%20openDialog%28%22chrome%3A//browser/content/bookmarks/selectBookmark.xul%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%22%2C%20%22modal%2C%20centerscreen%2C%20resizable%22%2C%20rv%29%3B%0A%20%20return%20rv%3B%0A%7D%0A%0A%0Afunction%20addSidebar%28aID%2C%20aLabel%2C%20aURL%29%20%7B%0A%20%20var%20bs%20%3D%20document.getElementById%28aID%29%3B%0A%20%20if%28bs%29%20bs.parentNode.removeChild%28bs%29%3B%20%20%20%20%0A%0A%20%20var%20newSidebar%20%3D%20document.getElementById%28%22mainBroadcasterSet%22%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.appendChild%28document.createElement%28%22broadcaster%22%29%29%3B%0A%20%20newSidebar.id%20%3D%20aID%3B%0A%20%20newSidebar.setAttribute%28%22label%22%2C%20aLabel%29%3B%0A%20%20newSidebar.setAttribute%28%22sidebarurl%22%2C%20aURL%29%3B%0A%20%20newSidebar.setAttribute%28%22oncommand%22%2C%20%22toggleSidebar%28%27%22%20+%20aID%20+%20%22%27%29%22%29%3B%0A%20%20newSidebar.setAttribute%28%22type%22%2C%20%22checkbox%22%29%3B%0A%20%20newSidebar.setAttribute%28%22group%22%2C%20%22sidebar%22%29%3B%0A%20%20newSidebar.setAttribute%28%22autoCheck%22%2C%20%22false%22%29%3B%0A%7D%0A%0Aif%28typeof%20BrowserOpenAddonsMgr%20%3D%3D%20%22function%22%29%20%7B%0A%20%20addSidebar%28%22viewAddonsSidebar%22%2C%20%22Add-ons%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%22chrome%3A//mozapps/content/extensions/extensions.xul%22%29%3B%0A%7D%20else%20%7B%0A%20%20addSidebar%28%22viewExtensionsSidebar%22%2C%20%22Extensions%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%22chrome%3A//mozapps/content/extensions/extensions.xul%3Ftype%3Dextensions%22%29%3B%0A%20%20addSidebar%28%22viewThemesSidebar%22%2C%20%22Themes%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%22chrome%3A//mozapps/content/extensions/extensions.xul%3Ftype%3Dthemes%22%29%3B%0A%7D%0A%0A%0A%0Avar%20mPopup%20%3D%20document.createElement%28%22menupopup%22%29%3B%0A//mPopup.savePrefs%20%3D%20savePrefs.bind%28this%29%3B%0AmPopup.setAttribute%28%22oncommand%22%2C%20%22event.stopPropagation%28%29%3B%20this.parentNode.savePrefs%28event%29%22%29%3B%0A%0Avar%20sb%20%3D%20document.getElementById%28%22mainBroadcasterSet%22%29%3B%0Avar%20bc%20%3D%20sb.getElementsByTagName%28%22broadcaster%22%29%3B%0A%0Afor%28var%20i%20%3D%200%3B%20i%20%3C%20bc.length%3B%20i++%29%20%7B%0A%20%20var%20bci%20%3D%20bc%5Bi%5D%3B%0A%20%20if%28%28bci.hasAttribute%28%22group%22%29%20%26%26%20%28bci.getAttribute%28%22group%22%29%20%3D%3D%20%22sidebar%22%29%29%0A%20%20%26%26%20%28bci.hasAttribute%28%22label%22%29%20%7C%7C%20bci.hasAttribute%28%22sidebartitle%22%29%29%0A%20%20%26%26%20%28bci.hasAttribute%28%22oncommand%22%29%29%0A%20%20%26%26%20%28%21bci.hasAttribute%28%22command%22%29%29%29%20%7B%0A%20%20%20%20var%20mi%20%3D%20mPopup.appendChild%28document.createElement%28%22menuitem%22%29%29%3B%0A%20%20%20%20mi.setAttribute%28%22observes%22%2C%20bci.getAttribute%28%22id%22%29%29%3B%0A%20%20%20%20if%28%21bci.hasAttribute%28%22label%22%29%29%0A%20%20%20%20%20%20bci.setAttribute%28%22label%22%2C%20bci.getAttribute%28%22sidebartitle%22%29%29%3B%0A%20%20%7D%0A%7D%0A%0Avar%20sep%20%3D%20mPopup.appendChild%28document.createElement%28%22menuseparator%22%29%29%3B%0Asep.id%20%3D%20%22sidebar-button-separator%22%3B%0A%0Avar%20bmItem%20%3D%20mPopup.appendChild%28document.createElement%28%22menuitem%22%29%29%3B%0AbmItem.setAttribute%28%22label%22%2C%20%22From%20Bookmarks%22%29%3B%0AbmItem.setAttribute%28%22oncommand%22%2C%0A%09%22var%20bm%20%3D%20this.parentNode.parentNode.getBookmark%28%29%3B%20%22%20+%0A%09%22if%20%28bm.urls%20%26%26%20bm.names%29%20%22%20+%0A%09%22openWebPanel%28bm.names%5B0%5D%2C%20bm.urls%5B0%5D%29%3B%22%29%3B%0A%0A%0Athis.appendChild%28mPopup%29%3B%0Athis.type%20%3D%20%22menu-button%22%3B%0A%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*%20-------------------------------------------------------------%0A%20%20%20%20%20Sidebar%20Menu%20Button%20%28beta%29%0A%20%20%20%20%20by%20LouCypher%20%28aka%20Zoolcar9%29%0A%0A%20%20%20%20%20Toggle%20Sidebar%0A%20%20%20-------------------------------------------------------------%20*/%0A%0Athis.toggleSidebar%28%29%3B%0A%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%3C/custombutton%3E" title="Sidebar"><img alt="Sidebar" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAEG0lEQVR4AQEQBO/7AVR1ulWsvt8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAemMv44VpN8gBHFy3/+QNGAAAAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAA3DAQAz+z6ADEUBgDP7PoAMRQGAM/o9gAe7Mqz3LVragTo6/UADRABAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAA0RBgAT+v0ADREGABP6/QANEQYAE/r9ANzG2gsAAAA7BDIbBQBSPwkAGxYKAAAAAAAAAAAA19fXACYmJgAKCQkAAAAAAAAADgAAAAAAAAAOAAAAAAD4/AwAXrQAAAAAAAIEGA4DAA7+9QApEQQA9O7jABEREQAOGfcAQDMRAA4ODgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABeAAAAAAAAAAT5+fkAMiIDAAkD+AAJFRUAAAAAAPz8/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAkJCQDq9QoAGhoQAP/89gD7+/sABwcHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE/v7+APv7+wD6+vkA/vv5APv7+wD+/v4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7+/sALyEGAAD9+AACAgIABwcHAP39/QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwMDAAUFBQA+fn5AAMDAwAJCQkADAwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAcHBwAVFRUA/Pz8AAwMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv7+/wDs7e0A3NzcAPPz8wD+/v4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8/f4AAAAAAAAAAAAE///+AHCR1gACAgEAAAD1AAAA4gDp6ekAErfFAAUFBQAAAAAAAAAAAAAAAAAAAAAAAAAAAPz9/gA0Jw4AzNsAAAH///8AAQEBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADZAf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACNo6cZgnlaQAAAABJRU5ErkJggg==" border="0" style="margin: 0 6px;" />Sidebar</a> 側邊欄(下拉式選單)</li>
  <li><a href="custombutton://Tab%20Bar%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAG6SURBVDjLxVNNKERRFP7ue0/JiIxXyE8aq/HTSP4iG2JpYSEL0qzYWFgrG8zCVopSs5CVnZVIWbFAYuG3NGaKmCz8z9z37rvuvTN+htSUhVPfPefczvd1zrldwjnHX0zDH+3/BQx5BIPBDuGmBJrS5F0IjPr9/hUjeTHj83m9BQWmSghRZzL+9ImYIBq98+zsHMyK5EPAdLtzEQ7fwLJYYjZN+yBJvOeGYaC4OF9xvu2AQNd1VSiLZCz9O5YvxrBwNCxiWaP/XKIk6rqRQv4qEmcUJaYXge0+0YmWusTEjFJAA+eGanXxdBTgNqgjYDMU5VXAW9iEx9gzBpYa0JszkRAQL8DLy0uRleWCy+VSo0gB+5iis2oQjDtgDoMDjqv7CGpKWvFEXzEfGclEEFx1EApFFL5ajFBFvrw7hyW6sB0LFrPwEH9EbWkbnqwXTIeGQH77C/0LlbzbNySITEGKXd+H4c4uxH5kC+snqyfURt2vAj1zHhajVOyAImZTVJhVWrOnC7vhLWycrR0KcuNVgMdJur+xelKL1pe1m5tnG3vUQYsgU7X8dAU84yTKHN18dVjGbUA8T9LeAB6et/fbYA/BAAAAAElFTkSuQmCC%5D%5Bfunction%20tbtoggle%20%28thisBTN%29%0A%7B%0A%09thisBTN.checked%20%3D%20%21thisBTN.checked%3B%0A%09if%20%28%20thisBTN.checked%20%29%0A%09%7B%0A%09%09gBrowser.setStripVisibilityTo%28false%29%3B%0A%09%09gBrowser.mPrefs.setBoolPref%28%22browser.tabs.forceHide%22%2C%20true%29%3B%0A%09%7D%0A%09else%0A%09%7B%0A%09%09gBrowser.setStripVisibilityTo%28true%29%3B%0A%09%09gBrowser.mPrefs.setBoolPref%28%22browser.tabs.forceHide%22%2C%20false%29%3B%0A%09%7D%0A%7D%0Atbtoggle%28this%29%3B%0A%5D%5B" title="Toggle Tabbar"><img alt="Toggle Tabbar" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAG6SURBVDjLxVNNKERRFP7ue0/JiIxXyE8aq/HTSP4iG2JpYSEL0qzYWFgrG8zCVopSs5CVnZVIWbFAYuG3NGaKmCz8z9z37rvuvTN+htSUhVPfPefczvd1zrldwjnHX0zDH+3/BQx5BIPBDuGmBJrS5F0IjPr9/hUjeTHj83m9BQWmSghRZzL+9ImYIBq98+zsHMyK5EPAdLtzEQ7fwLJYYjZN+yBJvOeGYaC4OF9xvu2AQNd1VSiLZCz9O5YvxrBwNCxiWaP/XKIk6rqRQv4qEmcUJaYXge0+0YmWusTEjFJAA+eGanXxdBTgNqgjYDMU5VXAW9iEx9gzBpYa0JszkRAQL8DLy0uRleWCy+VSo0gB+5iis2oQjDtgDoMDjqv7CGpKWvFEXzEfGclEEFx1EApFFL5ajFBFvrw7hyW6sB0LFrPwEH9EbWkbnqwXTIeGQH77C/0LlbzbNySITEGKXd+H4c4uxH5kC+snqyfURt2vAj1zHhajVOyAImZTVJhVWrOnC7vhLWycrR0KcuNVgMdJur+xelKL1pe1m5tnG3vUQYsgU7X8dAU84yTKHN18dVjGbUA8T9LeAB6et/fbYA/BAAAAAElFTkSuQmCC" border="0" style="margin: 0 6px;" />Toggle Tabbar</a> 分頁標籤列 隱藏/顯示</li>
  <li><a href="custombutton://User%20Agent%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1gYMERYOK+FOHQAAA21JREFUeNplk1toWwUAhr9zTnpy7XJpmmZtmjbtZltoS9fOja7besNN+iiKq+CbiDAVn0QRxyZYNhHBBzeZMsZEC4JOUdGp1aFdraOMLl1va3S9JG3a5tqcpDnN5fjiYNDv7YeP/+0T2I3O3dzTFd7Y08HGQjVoAqW+FVtFfCIRGB8Dco/KwqPDWtXbZ2x98Zy9pvZgS3Oj/linTXCUgP9BQhv+8baaXZq9E7119Wxha/KXXQfOI6+94GjpHXriVNApWL4Q1MwiajLD/EQDrx7+ngu/36Xo8GimyFJs6sanZ7anv7wEaBKA5O3sazr58qX6xpZyRRsUfM0KVfVOPn4jzHuXGxj6bIqFrROsrqwJA+0eU0JX1ZlYmJjSdmILIqCzNT9/7tBAtzMcnqDcqyIKNgx6J9e+e4Vanubs2ylq7RfB6OGTr2Y5fKDO7ug8fQYw6yz7erqqmxsOrq8iIH+Oq0qPKIgYRBsOvJTRxDsXLejkXvSlCqrBxA83l4W21qa2yXsN/aKSMLWXeffr47EkuXQl+XwORJBJYSbKh9eXsDedorS6gmKhAIKAkshhdTvlLZ23UyQya9WVewRFTSPQRmwzTrGQ493TaS5cvc74PTPBCASWIuSyGSioqBmVlfUdIbc8YxXBIie2MiSULXLFDq69+RiK8gBZtjHybQ/5rI8D6RmOGCOU5VOwnQdZZn7bCeRFCWd7i7T/0MlUWhX0pSZs1qcY/yZLXdsoDcd/Y/yPHgLp14nFRwjN7EC8Girs1Drymj56d0wy2PRiwdnxXII9JdmMAiYdJdbj3PcP8M9fAfqfeZ/+QRXf40s0dv9KznITqWjCnqhUM4Erl8Xs6vTf6X+nb0uyrKU2UqyuxVmNb6I6jaSDL2HxQDicJRzOIYluuo75MMcqNCk1Px0KhUYlQBOSwUWxrPXJot5lYTOOpmTRUllIZhENf1LTWI279AQu/SDjw/sQI97Y3Mhb53M7ypgEoKnRxZJ8al10+bo0g8usbecFsjtgMbH+k4ujfc+iS/fy85U1LXrfEFOWhz+IBCeHgaT0sIV8LODXBW/595TtrdOMepd5r1sye+oFuSqPthHVvv5oTDXmSvzBsaHzkZB/GNjcVeP/mGrqmroTRffR5OKcDUySqbI+a5eW74RW5kaBNWD7ofwfd0t2nYU4JRwAAAAASUVORK5CYII%3D%5D%5B%5D%5Bvar%20UAs%3Dnew%20Array%3B%0A//------User%20Agents--------%0AUAs.push%28%5B%27IE%27%2C%27Mozilla/4.0%20%28compatible%3B%20MSIE%206.0%3B%20Windows%20NT%205.1%29%27%5D%29%3B%0AUAs.push%28%5B%27Opera%27%2C%27Opera/8.51%20%28Windows%20NT%205.1%3B%20U%3B%20en%29%27%5D%29%3B%0A//------/User%20Agents-------%0A%0Athis.setUA%3Dfunction%28ua%29%7B%0A%20if%20%28ua%29%7B%0A%20%20this.PS.setCharPref%28%27general.useragent.override%27%2Cua%29%3B%0A%20%7D%20else%7B%0A%20%20this.PS.clearUserPref%28%27general.useragent.override%27%29%3B%0A%20%7D%0A%7D%0A%0A%20var%20nMItem%3Dfunction%28label%2Cp%2Cobj%29%7B%0A%20%20%20var%20m%3Ddocument.createElement%28%27menuitem%27%29%3B%0A%20%20%20m.setAttribute%28%27label%27%2Clabel%29%3B%0A%20%20%20m.f%3Dobj.setUA.bind%28obj%29%3B%0A%20%20%20m.setAttribute%28%27oncommand%27%2C%27this.f%28%27+%28p%3F%28%27%22%27+p+%27%22%27%29%3A%28%27null%27%29%29+%27%29%27%29%3B%0A%20%20%20if%20%28p%29%20m.setAttribute%28%27ua%27%2Cp%29%3B%0A%20%20%20m.setAttribute%28%27type%27%2C%27radio%27%29%3B%0A%20%20%20m.setAttribute%28%27name%27%2C%27radio%27%29%3B%0A%20%20%20return%20m%3B%0A%20%7D%0A%20var%20mP%3Ddocument.createElement%28%27menupopup%27%29%3B%0A%20%20for%20%28var%20i%3D0%3Bi%3CUAs.length%3Bi++%29%7B%0A%20%20%20mP.appendChild%28nMItem%28UAs%5Bi%5D%20%5B0%5D%2CUAs%5Bi%5D%20%5B1%5D%2Cthis%29%29%3B%0A%20%20%7D%0A%20%20mP.appendChild%28document.createElement%28%27menuseparator%27%29%29%3B%0A%20%20mP.appendChild%28nMItem%28%27Default%27%2Cnull%2Cthis%29%29%3B%0A%20%20mP.f%3Dfunction%28%29%7B%0A%20%20%20var%20PS%3Dthis.parentNode.PS%3B%0A%20%20%20var%20pref%3D%27general.useragent.override%27%3B%0A%20%20%20var%20ua%3Dnull%3B%0A%20%20%20if%20%28PS.prefHasUserValue%28pref%29%29%7B%0A%20%20%20%20ua%3DPS.getCharPref%28pref%29%3B%0A%20%20%20%7D%0A%20%20%20if%20%28%21ua%29%20this.lastChild.setAttribute%28%27checked%27%2Ctrue%29%3B%0A%20%20%20for%20%28var%20i%3D0%3Bi%3Cthis.childNodes.length%3Bi++%29%7B%0A%20%20%20%20if%20%28this.childNodes%5Bi%5D.getAttribute%28%27ua%27%29%3D%3Dua%29%7B%0A%20%20%20%20%20this.childNodes%5Bi%5D.setAttribute%28%27checked%27%2Ctrue%29%3B%0A%20%20%20%20%20break%3B%0A%20%20%20%20%7D%0A%20%20%20%7D%0A%20%20%7D%0A%20%20mP.setAttribute%28%27onpopupshowing%27%2C%27this.f%28%29%3B%27%29%3B%0A%20%20this.type%3D%22menu%22%3B%0A%20%20this.orient%3D%22vertical%22%3B%0A%20%20this.appendChild%28mP%29%3B%0A%20%20this.PS%3D%0A%20Components.classes%5B%27@mozilla.org/preferences-service%3B1%27%5D%0A%20.getService%28Components.interfaces.nsIPrefBranch%29%3B%0A" title="User Agent Switcher "><img alt="User Agent Switcher " src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1gYMERYOK+FOHQAAA21JREFUeNplk1toWwUAhr9zTnpy7XJpmmZtmjbtZltoS9fOja7besNN+iiKq+CbiDAVn0QRxyZYNhHBBzeZMsZEC4JOUdGp1aFdraOMLl1va3S9JG3a5tqcpDnN5fjiYNDv7YeP/+0T2I3O3dzTFd7Y08HGQjVoAqW+FVtFfCIRGB8Dco/KwqPDWtXbZ2x98Zy9pvZgS3Oj/linTXCUgP9BQhv+8baaXZq9E7119Wxha/KXXQfOI6+94GjpHXriVNApWL4Q1MwiajLD/EQDrx7+ngu/36Xo8GimyFJs6sanZ7anv7wEaBKA5O3sazr58qX6xpZyRRsUfM0KVfVOPn4jzHuXGxj6bIqFrROsrqwJA+0eU0JX1ZlYmJjSdmILIqCzNT9/7tBAtzMcnqDcqyIKNgx6J9e+e4Vanubs2ylq7RfB6OGTr2Y5fKDO7ug8fQYw6yz7erqqmxsOrq8iIH+Oq0qPKIgYRBsOvJTRxDsXLejkXvSlCqrBxA83l4W21qa2yXsN/aKSMLWXeffr47EkuXQl+XwORJBJYSbKh9eXsDedorS6gmKhAIKAkshhdTvlLZ23UyQya9WVewRFTSPQRmwzTrGQ493TaS5cvc74PTPBCASWIuSyGSioqBmVlfUdIbc8YxXBIie2MiSULXLFDq69+RiK8gBZtjHybQ/5rI8D6RmOGCOU5VOwnQdZZn7bCeRFCWd7i7T/0MlUWhX0pSZs1qcY/yZLXdsoDcd/Y/yPHgLp14nFRwjN7EC8Girs1Drymj56d0wy2PRiwdnxXII9JdmMAiYdJdbj3PcP8M9fAfqfeZ/+QRXf40s0dv9KznITqWjCnqhUM4Erl8Xs6vTf6X+nb0uyrKU2UqyuxVmNb6I6jaSDL2HxQDicJRzOIYluuo75MMcqNCk1Px0KhUYlQBOSwUWxrPXJot5lYTOOpmTRUllIZhENf1LTWI279AQu/SDjw/sQI97Y3Mhb53M7ypgEoKnRxZJ8al10+bo0g8usbecFsjtgMbH+k4ujfc+iS/fy85U1LXrfEFOWhz+IBCeHgaT0sIV8LODXBW/595TtrdOMepd5r1sye+oFuSqPthHVvv5oTDXmSvzBsaHzkZB/GNjcVeP/mGrqmroTRffR5OKcDUySqbI+a5eW74RW5kaBNWD7ofwfd0t2nYU4JRwAAAAASUVORK5CYII=" border="0" style="margin: 0 6px;" />User Agent Switcher</a></li>
  <li><a href="custombutton://View%20Selection%20Source%20/%20View%20Source%20in%20Tab%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACBElEQVR4XqVSS47aQBB9tnvaRuEzgAiaRZbZ5ACzyUG4BpwEDpBrcIEcIQuIQBAYZgBhMNjGHoyxO+WSPAKxiZQnl7qr3a/61evWut2uwn9AgNBut/HzdwI/TGB7CX7NAwRRgjC6IDjFH3P/dKacxvcY6x/P6PV6XIBRiv/gsSDQwDuevz9ifzhANwykqUKqFAAN9foThJS4xMmNAkazbkHR5kgKWNYFn4SEyoj0VWtVyAcJIQwulKY05sg8yLBer9VqtcqC58vlUi0Wiyw4n06nHLPZTE0mE+ZkXB0MUNUUuq4jSZKbPIoiOI6D/X6PIAhwoNYo7lswhMkELePrgj4dlnwAgQlCiKwYF77Gh4KX5YbCxuvKxsubjfmrDdc7olCw0Gg0OKrVKmq1GprN5r0Hx+NRhWGoSK7yPU/RqWq73SqSrVzX5ZyC/1M79x5stg62jou968NxjzzG8QVEBpmGwWCA+XyO0WiE4XB478HadmEYOuLzmbwwkFCvT59JcqUIKSW1Usg84qDD7wt8+/oFmqbhdDrBNM1sE+fFYhGlcpnX+/0+cpCi2wK2bbMC07RAXpD8mE/2PI/WDfi+jwytVgsEfsadTqece8AbgyDEbrfjORnIczIMm82G3wDhmiwB+LkCvh4C33WlUkGpVAIhb4Xvfzwe52Tt2gNe/Fcw+Qp/AUHLbC/UoQ17AAAAAElFTkSuQmCC%5D%5Bvar%20focusedWindow%20%3D%20content%3B%0Avar%20docCharset%20%3D%20%22charset%3D%22%20+%20focusedWindow.document.characterSet%3B%0Avar%20reference%20%3D%20focusedWindow.getSelection%28%29%3B%0Aif%20%28%21reference.isCollapsed%29%7B%0A%20window.openDialog%28%22chrome%3A//global/content/viewPartialSource.xul%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22_blank%22%2C%20%22scrollbars%2Cresizable%2Cchrome%2Cdialog%3Dno%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20null%2C%20docCharset%2C%20reference%2C%20%22selection%22%29%3B%0A%7Delse%7B%0A%20var%20sourceURL%20%3D%20%27view-source%3A%27%20+%20content.document.location.href%3B%0A%20gBrowser.selectedTab%20%3D%20gBrowser.addTab%28sourceURL%29%3B%0A%7D" title="View Selection Source / View Source in Tab"><img alt="View Selection Source / View Source in Tab" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACBElEQVR4XqVSS47aQBB9tnvaRuEzgAiaRZbZ5ACzyUG4BpwEDpBrcIEcIQuIQBAYZgBhMNjGHoyxO+WSPAKxiZQnl7qr3a/61evWut2uwn9AgNBut/HzdwI/TGB7CX7NAwRRgjC6IDjFH3P/dKacxvcY6x/P6PV6XIBRiv/gsSDQwDuevz9ifzhANwykqUKqFAAN9foThJS4xMmNAkazbkHR5kgKWNYFn4SEyoj0VWtVyAcJIQwulKY05sg8yLBer9VqtcqC58vlUi0Wiyw4n06nHLPZTE0mE+ZkXB0MUNUUuq4jSZKbPIoiOI6D/X6PIAhwoNYo7lswhMkELePrgj4dlnwAgQlCiKwYF77Gh4KX5YbCxuvKxsubjfmrDdc7olCw0Gg0OKrVKmq1GprN5r0Hx+NRhWGoSK7yPU/RqWq73SqSrVzX5ZyC/1M79x5stg62jou968NxjzzG8QVEBpmGwWCA+XyO0WiE4XB478HadmEYOuLzmbwwkFCvT59JcqUIKSW1Usg84qDD7wt8+/oFmqbhdDrBNM1sE+fFYhGlcpnX+/0+cpCi2wK2bbMC07RAXpD8mE/2PI/WDfi+jwytVgsEfsadTqece8AbgyDEbrfjORnIczIMm82G3wDhmiwB+LkCvh4C33WlUkGpVAIhb4Xvfzwe52Tt2gNe/Fcw+Qp/AUHLbC/UoQ17AAAAAElFTkSuQmCC" border="0" style="margin: 0 6px;" />View Selection Source / View Source in Tab</a> 在新分頁檢視(頁面/被選取)原始碼</li>
</ol></html>
> 自訂工作列上的按鈕
* ''套件作者'':Nicholas Alipaz, Jeff Scott, [[Harold Casstevens|http://minidata.googlepages.com/]], George Dunham
* ''套件網頁'':[[官方網頁|http://custombuttons2.com/]]、[[Add-ons#5066|https://addons.mozilla.org/zh-TW/firefox/addon/5066]]、[[英文討論區|http://custombuttons.phpbbnow.com/]]、[[英文討論區|http://custombuttons2.com/forum/home.php]]
* ''套件語系'':英文其他
* ''撰寫版號'':
* ''套件功能'':
** 在工具列上新增自訂的按鈕。
** 要用語法寫,可從官方網站及討論區尋找他人提供的按鍵直接新增。
** 對工具列上的自訂按鍵提供複製按鍵原始碼、將按鍵複製成 HTML 及 BBCode 連結原始碼、儲存安裝的自訂按鍵……等功能。
**新增方法有二種:
### 點選【檢視】→【新增按鈕】,把他人提供的語法貼在圖片後的空格,或自行撰寫語法內容,完成按確定即可。
### 直接點選他人製成連結的新增按鈕,便會詢問你是否新增該按鈕。
** 新增完要從【檢視】→【工具列】→【自訂】,把按鈕拖出來放到工具列上。
** 可對工具列上新增完成的按鈕按滑鼠右鍵,進行編輯、刪除、複製等動作。
** <<tiddler "Custom Buttons / Custom Buttons² 按鈕語法蒐集">>
* ''相關鏈結'':
* ''相關類似'':[[Custom Buttons]]、[[Toolbar Buttons]]
* ''心得介紹'':<br>和 [[Custom Buttons]] 相比,[[Custom Buttons²]] 對自訂按鍵提供較多的附加管理功能,若不會用到的話,基本的 [[Custom Buttons]] 應該就很夠用了。
> 美化你的工具選單
* ''套件作者'':[[Mel Reyes|http://www.mrtech.com/extensions/]],  Static_Rage, [[Josep del Rio|http://www.uworks.net/]]
* ''套件網頁'':[[官方網頁|http://www.cutemenuproject.com/]]、[[Add-ons#1330|https://addons.mozilla.org/zh-TW/firefox/addon/1330]]
* ''套件語系'':英文其他
* ''撰寫版號'':1.9.2
* ''套件功能'':
** 在工具選單選項前加上小圖示
** 在右鍵快速選單選項前加上小圖示
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?t=11559]]
* ''相關類似''
* ''心得介紹'':<br>這個套件的功能單純只是美化選單。大部分的選單項目是沒有小圖示的,看久了有時不免覺得單調,這時就需要這個套件了。當然也有些佈景主題會為部分選單項目加上小圖示啦!
/***
|''Name:''|DataTiddlerPlugin|
|''Version:''|1.0.6 (2006-08-26)|
|''Source:''|http://tiddlywiki.abego-software.de/#DataTiddlerPlugin|
|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|
|''Licence:''|[[BSD open source license]]|
|''TiddlyWiki:''|1.2.38+, 2.0|
|''Browser:''|Firefox 1.0.4+; InternetExplorer 6.0|
!Description
Enhance your tiddlers with structured data (such as strings, booleans, numbers, or even arrays and compound objects) that can be easily accessed and modified through named fields (in JavaScript code).

Such tiddler data can be used in various applications. E.g. you may create tables that collect data from various tiddlers. 

''//Example: "Table with all December Expenses"//''
{{{
<<forEachTiddler
    where
        'tiddler.tags.contains("expense") && tiddler.data("month") == "Dec"'
    write
        '"|[["+tiddler.title+"]]|"+tiddler.data("descr")+"| "+tiddler.data("amount")+"|\n"'
>>
}}}
//(This assumes that expenses are stored in tiddlers tagged with "expense".)//
<<forEachTiddler
    where
        'tiddler.tags.contains("expense") && tiddler.data("month") == "Dec"'
    write
        '"|[["+tiddler.title+"]]|"+tiddler.data("descr")+"| "+tiddler.data("amount")+"|\n"'
>>
For other examples see DataTiddlerExamples.




''Access and Modify Tiddler Data''

You can "attach" data to every tiddler by assigning a JavaScript value (such as a string, boolean, number, or even arrays and compound objects) to named fields. 

These values can be accessed and modified through the following Tiddler methods:
|!Method|!Example|!Description|
|{{{data(field)}}}|{{{t.data("age")}}}|Returns the value of the given data field of the tiddler. When no such field is defined or its value is undefined {{{undefined}}} is returned.|
|{{{data(field,defaultValue)}}}|{{{t.data("isVIP",false)}}}|Returns the value of the given data field of the tiddler. When no such field is defined or its value is undefined the defaultValue is returned.|
|{{{data()}}}|{{{t.data()}}}|Returns the data object of the tiddler, with a property for every field. The properties of the returned data object may only be read and not be modified. To modify the data use DataTiddler.setData(...) or the corresponding Tiddler method.|
|{{{setData(field,value)}}}|{{{t.setData("age",42)}}}|Sets the value of the given data field of the tiddler to the value. When the value is {{{undefined}}} the field is removed.|
|{{{setData(field,value,defaultValue)}}}|{{{t.setData("isVIP",flag,false)}}}|Sets the value of the given data field of the tiddler to the value. When the value is equal to the defaultValue no value is set (and the field is removed).|

Alternatively you may use the following functions to access and modify the data. In this case the tiddler argument is either a tiddler or the name of a tiddler.
|!Method|!Description|
|{{{DataTiddler.getData(tiddler,field)}}}|Returns the value of the given data field of the tiddler. When no such field is defined or its value is undefined {{{undefined}}} is returned.|
|{{{DataTiddler.getData(tiddler,field,defaultValue)}}}|Returns the value of the given data field of the tiddler. When no such field is defined or its value is undefined the defaultValue is returned.|
|{{{DataTiddler.getDataObject(tiddler)}}}|Returns the data object of the tiddler, with a property for every field. The properties of the returned data object may only be read and not be modified. To modify the data use DataTiddler.setData(...) or the corresponding Tiddler method.|
|{{{DataTiddler.setData(tiddler,field,value)}}}|Sets the value of the given data field of the tiddler to the value. When the value is {{{undefined}}} the field is removed.|
|{{{DataTiddler.setData(tiddler,field,value,defaultValue)}}}|Sets the value of the given data field of the tiddler to the value. When the value is equal to the defaultValue no value is set (and the field is removed).|
//(For details on the various functions see the detailed comments in the source code.)//


''Data Representation in a Tiddler''

The data of a tiddler is stored as plain text in the tiddler's content/text, inside a "data" section that is framed by a {{{<data>...</data>}}} block. Inside the data section the information is stored in the [[JSON format|http://www.crockford.com/JSON/index.html]]. 

//''Data Section Example:''//
{{{
<data>{"isVIP":true,"user":"John Brown","age":34}</data>
}}}

The data section is not displayed when viewing the tiddler (see also "The showData Macro").

Beside the data section a tiddler may have all kind of other content.

Typically you will not access the data section text directly but use the methods given above. Nevertheless you may retrieve the text of the data section's content through the {{{DataTiddler.getDataText(tiddler)}}} function.


''Saving Changes''

The "setData" methods respect the "ForceMinorUpdate" and "AutoSave" configuration values. I.e. when "ForceMinorUpdate" is true changing a value using setData will not affect the "modifier" and "modified" attributes. With "AutoSave" set to true every setData will directly save the changes after a setData.


''Notifications''

No notifications are sent when a tiddler's data value is changed through the "setData" methods. 

''Escape Data Section''
In case that you want to use the text {{{<data>}}} or {{{</data>}}} in a tiddler text you must prefix the text with a tilde ('~'). Otherwise it may be wrongly considered as the data section. The tiddler text {{{~<data>}}} is displayed as {{{<data>}}}.


''The showData Macro''

By default the data of a tiddler (that is stored in the {{{<data>...</data>}}} section of the tiddler) is not displayed. If you want to display this data you may used the {{{<<showData ...>>}}} macro:

''Syntax:'' 
|>|{{{<<}}}''showData '' [''JSON''] [//tiddlerName//] {{{>>}}}|
|''JSON''|By default the data is rendered as a table with a "Name" and "Value" column. When defining ''JSON'' the data is rendered in JSON format|
|//tiddlerName//|Defines the tiddler holding the data to be displayed. When no tiddler is given the tiddler containing the showData macro is used. When the tiddler name contains spaces you must quote the name (or use the {{{[[...]]}}} syntax.)|
|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|


!Revision history
* v1.0.6 (2006-08-26) 
** Removed misleading comment
* v1.0.5 (2006-02-27) (Internal Release Only)
** Internal
*** Make "JSLint" conform
* v1.0.4 (2006-02-05)
** Bugfix: showData fails in TiddlyWiki 2.0
* v1.0.3 (2006-01-06)
** Support TiddlyWiki 2.0
* v1.0.2 (2005-12-22)
** Enhancements:
*** Handle texts "<data>" or "</data>" more robust when used in a tiddler text or as a field value.
*** Improved (JSON) error messages.
** Bugs fixed: 
*** References are not updated when using the DataTiddler.
*** Changes to compound objects are not always saved.
*** "~</data>" is not rendered correctly (expected "</data>")
* v1.0.1 (2005-12-13)
** Features: 
*** The showData macro supports an optional "tiddlername" argument to specify the tiddler containing the data to be displayed
** Bugs fixed: 
*** A script immediately following a data section is deleted when the data is changed. (Thanks to GeoffS for reporting.)
* v1.0.0 (2005-12-12)
** initial version

!Code
***/
//{{{
//============================================================================
//============================================================================
//                           DataTiddlerPlugin
//============================================================================
//============================================================================

// Ensure that the DataTiddler Plugin is only installed once.
//
if (!version.extensions.DataTiddlerPlugin) {



version.extensions.DataTiddlerPlugin = {
    major: 1, minor: 0, revision: 6,
    date: new Date(2006, 7, 26), 
    type: 'plugin',
    source: "http://tiddlywiki.abego-software.de/#DataTiddlerPlugin"
};

// For backward compatibility with v1.2.x
//
if (!window.story) window.story=window; 
if (!TiddlyWiki.prototype.getTiddler) {
	TiddlyWiki.prototype.getTiddler = function(title) { 
		var t = this.tiddlers[title]; 
		return (t !== undefined && t instanceof Tiddler) ? t : null; 
	};
}

//============================================================================
// DataTiddler Class
//============================================================================

// ---------------------------------------------------------------------------
// Configurations and constants 
// ---------------------------------------------------------------------------

function DataTiddler() {
}

DataTiddler = {
    // Function to stringify a JavaScript value, producing the text for the data section content.
    // (Must match the implementation of DataTiddler.parse.)
    //
    stringify : null,
    

    // Function to parse the text for the data section content, producing a JavaScript value.
    // (Must match the implementation of DataTiddler.stringify.)
    //
    parse : null
};

// Ensure access for IE
window.DataTiddler = DataTiddler;

// ---------------------------------------------------------------------------
// Data Accessor and Mutator
// ---------------------------------------------------------------------------


// Returns the value of the given data field of the tiddler.
// When no such field is defined or its value is undefined
// the defaultValue is returned.
// 
// @param tiddler either a tiddler name or a tiddler
//
DataTiddler.getData = function(tiddler, field, defaultValue) {
    var t = (typeof tiddler == "string") ? store.getTiddler(tiddler) : tiddler;
    if (!(t instanceof Tiddler)) {
        throw "Tiddler expected. Got "+tiddler;
    }

    return DataTiddler.getTiddlerDataValue(t, field, defaultValue);
};


// Sets the value of the given data field of the tiddler to
// the value. When the value is equal to the defaultValue
// no value is set (and the field is removed)
//
// Changing data of a tiddler will not trigger notifications.
// 
// @param tiddler either a tiddler name or a tiddler
//
DataTiddler.setData = function(tiddler, field, value, defaultValue) {
    var t = (typeof tiddler == "string") ? store.getTiddler(tiddler) : tiddler;
    if (!(t instanceof Tiddler)) {
        throw "Tiddler expected. Got "+tiddler+ "("+t+")";
    }

    DataTiddler.setTiddlerDataValue(t, field, value, defaultValue);
};


// Returns the data object of the tiddler, with a property for every field.
//
// The properties of the returned data object may only be read and
// not be modified. To modify the data use DataTiddler.setData(...) 
// or the corresponding Tiddler method.
//
// If no data section is defined a new (empty) object is returned.
//
// @param tiddler either a tiddler name or a Tiddler
//
DataTiddler.getDataObject = function(tiddler) {
    var t = (typeof tiddler == "string") ? store.getTiddler(tiddler) : tiddler;
    if (!(t instanceof Tiddler)) {
        throw "Tiddler expected. Got "+tiddler;
    }

    return DataTiddler.getTiddlerDataObject(t);
};

// Returns the text of the content of the data section of the tiddler.
//
// When no data section is defined for the tiddler null is returned 
//
// @param tiddler either a tiddler name or a Tiddler
// @return [may be null]
//
DataTiddler.getDataText = function(tiddler) {
    var t = (typeof tiddler == "string") ? store.getTiddler(tiddler) : tiddler;
    if (!(t instanceof Tiddler)) {
        throw "Tiddler expected. Got "+tiddler;
    }

    return DataTiddler.readDataSectionText(t);
};


// ---------------------------------------------------------------------------
// Internal helper methods (must not be used by code from outside this plugin)
// ---------------------------------------------------------------------------

// Internal.
//
// The original JSONError is not very user friendly, 
// especially it does not define a toString() method
// Therefore we extend it here.
//
DataTiddler.extendJSONError = function(ex) {
	if (ex.name == 'JSONError') {
        ex.toString = function() {
			return ex.name + ": "+ex.message+" ("+ex.text+")";
		};
	}
	return ex;
};

// Internal.
//
// @param t a Tiddler
//
DataTiddler.getTiddlerDataObject = function(t) {
    if (t.dataObject === undefined) {
        var data = DataTiddler.readData(t);
        t.dataObject = (data) ? data : {};
    }
    
    return t.dataObject;
};


// Internal.
//
// @param tiddler a Tiddler
//
DataTiddler.getTiddlerDataValue = function(tiddler, field, defaultValue) {
    var value = DataTiddler.getTiddlerDataObject(tiddler)[field];
    return (value === undefined) ? defaultValue : value;
};


// Internal.
//
// @param tiddler a Tiddler
//
DataTiddler.setTiddlerDataValue = function(tiddler, field, value, defaultValue) {
    var data = DataTiddler.getTiddlerDataObject(tiddler);
    var oldValue = data[field];
	
    if (value == defaultValue) {
        if (oldValue !== undefined) {
            delete data[field];
            DataTiddler.save(tiddler);
        }
        return;
    }
    data[field] = value;
    DataTiddler.save(tiddler);
};

// Internal.
//
// Reads the data section from the tiddler's content and returns its text
// (as a String).
//
// Returns null when no data is defined.
//
// @param tiddler a Tiddler
// @return [may be null]
//
DataTiddler.readDataSectionText = function(tiddler) {
    var matches = DataTiddler.getDataTiddlerMatches(tiddler);
    if (matches === null || !matches[2]) {
        return null;
    }
    return matches[2];
};

// Internal.
//
// Reads the data section from the tiddler's content and returns it
// (as an internalized object).
//
// Returns null when no data is defined.
//
// @param tiddler a Tiddler
// @return [may be null]
//
DataTiddler.readData = function(tiddler) {
    var text = DataTiddler.readDataSectionText(tiddler);
	try {
	    return text ? DataTiddler.parse(text) : null;
	} catch(ex) {
		throw DataTiddler.extendJSONError(ex);
	}
};

// Internal.
// 
// Returns the serialized text of the data of the given tiddler, as it
// should be stored in the data section.
//
// @param tiddler a Tiddler
//
DataTiddler.getDataTextOfTiddler = function(tiddler) {
    var data = DataTiddler.getTiddlerDataObject(tiddler);
    return DataTiddler.stringify(data);
};


// Internal.
// 
DataTiddler.indexOfNonEscapedText = function(s, subString, startIndex) {
	var index = s.indexOf(subString, startIndex);
	while ((index > 0) && (s[index-1] == '~')) { 
		index = s.indexOf(subString, index+1);
	}
	return index;
};

// Internal.
//
DataTiddler.getDataSectionInfo = function(text) {
	// Special care must be taken to handle "<data>" and "</data>" texts inside
	// a data section. 
	// Also take care not to use an escaped <data> (i.e. "~<data>") as the start 
	// of a data section. (Same for </data>)

    // NOTE: we are explicitly searching for a data section that contains a JSON
    // string, i.e. framed with braces. This way we are little bit more robust in
    // case the tiddler contains unescaped texts "<data>" or "</data>". This must
    // be changed when using a different stringifier.

	var startTagText = "<data>{";
	var endTagText = "}</data>";

	var startPos = 0;

	// Find the first not escaped "<data>".
	var startDataTagIndex = DataTiddler.indexOfNonEscapedText(text, startTagText, 0);
	if (startDataTagIndex < 0) {
		return null;
	}

	// Find the *last* not escaped "</data>".
	var endDataTagIndex = text.indexOf(endTagText, startDataTagIndex);
	if (endDataTagIndex < 0) {
		return null;
	}
	var nextEndDataTagIndex;
	while ((nextEndDataTagIndex = text.indexOf(endTagText, endDataTagIndex+1)) >= 0) {
		endDataTagIndex = nextEndDataTagIndex;
	}

	return {
		prefixEnd: startDataTagIndex, 
		dataStart: startDataTagIndex+(startTagText.length)-1, 
		dataEnd: endDataTagIndex, 
		suffixStart: endDataTagIndex+(endTagText.length)
	};
};

// Internal.
// 
// Returns the "matches" of a content of a DataTiddler on the
// "data" regular expression. Return null when no data is defined
// in the tiddler content.
//
// Group 1: text before data section (prefix)
// Group 2: content of data section
// Group 3: text behind data section (suffix)
//
// @param tiddler a Tiddler
// @return [may be null] null when the tiddler contains no data section, otherwise see above.
//
DataTiddler.getDataTiddlerMatches = function(tiddler) {
	var text = tiddler.text;
	var info = DataTiddler.getDataSectionInfo(text);
	if (!info) {
		return null;
	}

	var prefix = text.substr(0,info.prefixEnd);
	var data = text.substr(info.dataStart, info.dataEnd-info.dataStart+1);
	var suffix = text.substr(info.suffixStart);
	
	return [text, prefix, data, suffix];
};


// Internal.
//
// Saves the data in a <data> block of the given tiddler (as a minor change). 
//
// The "chkAutoSave" and "chkForceMinorUpdate" options are respected. 
// I.e. the TiddlyWiki *file* is only saved when AutoSave is on.
//
// Notifications are not send. 
//
// This method should only be called when the data really has changed. 
//
// @param tiddler
//             the tiddler to be saved.
//
DataTiddler.save = function(tiddler) {

    var matches = DataTiddler.getDataTiddlerMatches(tiddler);

    var prefix;
    var suffix;
    if (matches === null) {
        prefix = tiddler.text;
        suffix = "";
    } else {
        prefix = matches[1];
        suffix = matches[3];
    }

    var dataText = DataTiddler.getDataTextOfTiddler(tiddler);
    var newText = 
            (dataText !== null) 
                ? prefix + "<data>" + dataText + "</data>" + suffix
                : prefix + suffix;
    if (newText != tiddler.text) {
        // make the change in the tiddlers text
        
        // ... see DataTiddler.MyTiddlerChangedFunction
        tiddler.isDataTiddlerChange = true;
        
        // ... do the action change
        tiddler.set(
                tiddler.title,
                newText,
                config.options.txtUserName, 
                config.options.chkForceMinorUpdate? undefined : new Date(),
                tiddler.tags);

        // ... see DataTiddler.MyTiddlerChangedFunction
        delete tiddler.isDataTiddlerChange;

        // Mark the store as dirty.
        store.dirty = true;
 
        // AutoSave if option is selected
        if(config.options.chkAutoSave) {
           saveChanges();
        }
    }
};

// Internal.
//
DataTiddler.MyTiddlerChangedFunction = function() {
    // Remove the data object from the tiddler when the tiddler is changed
    // by code other than DataTiddler code. 
    //
    // This is necessary since the data object is just a "cached version" 
    // of the data defined in the data section of the tiddler and the 
    // "external" change may have changed the content of the data section.
    // Thus we are not sure if the data object reflects the data section 
    // contents. 
    // 
    // By deleting the data object we ensure that the data object is 
    // reconstructed the next time it is needed, with the data defined by
    // the data section in the tiddler's text.
    
    // To indicate that a change is a "DataTiddler change" a temporary
    // property "isDataTiddlerChange" is added to the tiddler.
    if (this.dataObject && !this.isDataTiddlerChange) {
        delete this.dataObject;
    }
    
    // call the original code.
	DataTiddler.originalTiddlerChangedFunction.apply(this, arguments);
};


//============================================================================
// Formatters
//============================================================================

// This formatter ensures that "~<data>" is rendered as "<data>". This is used to 
// escape the "<data>" of a data section, just in case someone really wants to use
// "<data>" as a text in a tiddler and not start a data section.
//
// Same for </data>.
//
config.formatters.push( {
    name: "data-escape",
    match: "~<\\/?data>",

    handler: function(w) {
            w.outputText(w.output,w.matchStart + 1,w.nextMatch);
    }
} );


// This formatter ensures that <data>...</data> sections are not rendered.
//
config.formatters.push( {
    name: "data",
    match: "<data>",

    handler: function(w) {
		var info = DataTiddler.getDataSectionInfo(w.source);
		if (info && info.prefixEnd == w.matchStart) {
            w.nextMatch = info.suffixStart;
		} else {
			w.outputText(w.output,w.matchStart,w.nextMatch);
		}
    }
} );


//============================================================================
// Tiddler Class Extension
//============================================================================

// "Hijack" the changed method ---------------------------------------------------

DataTiddler.originalTiddlerChangedFunction = Tiddler.prototype.changed;
Tiddler.prototype.changed = DataTiddler.MyTiddlerChangedFunction;

// Define accessor methods -------------------------------------------------------

// Returns the value of the given data field of the tiddler. When no such field 
// is defined or its value is undefined the defaultValue is returned.
//
// When field is undefined (or null) the data object is returned. (See 
// DataTiddler.getDataObject.)
//
// @param field [may be null, undefined]
// @param defaultValue [may be null, undefined]
// @return [may be null, undefined]
//
Tiddler.prototype.data = function(field, defaultValue) {
    return (field) 
         ? DataTiddler.getTiddlerDataValue(this, field, defaultValue)
         : DataTiddler.getTiddlerDataObject(this);
};

// Sets the value of the given data field of the tiddler to the value. When the 
// value is equal to the defaultValue no value is set (and the field is removed).
//
// @param value [may be null, undefined]
// @param defaultValue [may be null, undefined]
//
Tiddler.prototype.setData = function(field, value, defaultValue) {
    DataTiddler.setTiddlerDataValue(this, field, value, defaultValue);
};


//============================================================================
// showData Macro
//============================================================================

config.macros.showData = {
     // Standard Properties
     label: "showData",
     prompt: "Display the values stored in the data section of the tiddler"
};

config.macros.showData.handler = function(place,macroName,params) {
    // --- Parsing ------------------------------------------

    var i = 0; // index running over the params
    // Parse the optional "JSON"
    var showInJSONFormat = false;
    if ((i < params.length) && params[i] == "JSON") {
        i++;
        showInJSONFormat = true;
    }
    
    var tiddlerName = story.findContainingTiddler(place).id.substr(7);
    if (i < params.length) {
        tiddlerName = params[i];
        i++;
    }

    // --- Processing ------------------------------------------
    try {
        if (showInJSONFormat) {
            this.renderDataInJSONFormat(place, tiddlerName);
        } else {
            this.renderDataAsTable(place, tiddlerName);
        }
    } catch (e) {
        this.createErrorElement(place, e);
    }
};

config.macros.showData.renderDataInJSONFormat = function(place,tiddlerName) {
    var text = DataTiddler.getDataText(tiddlerName);
    if (text) {
        createTiddlyElement(place,"pre",null,null,text);
    }
};

config.macros.showData.renderDataAsTable = function(place,tiddlerName) {
    var text = "|!Name|!Value|\n";
    var data = DataTiddler.getDataObject(tiddlerName);
    if (data) {
        for (var i in data) {
            var value = data[i];
            text += "|"+i+"|"+DataTiddler.stringify(value)+"|\n";
        }
    }
    
    wikify(text, place);
};


// Internal.
//
// Creates an element that holds an error message
// 
config.macros.showData.createErrorElement = function(place, exception) {
    var message = (exception.description) ? exception.description : exception.toString();
    return createTiddlyElement(place,"span",null,"showDataError","<<showData ...>>: "+message);
};

// ---------------------------------------------------------------------------
// Stylesheet Extensions (may be overridden by local StyleSheet)
// ---------------------------------------------------------------------------
//
setStylesheet(
    ".showDataError{color: #ffffff;background-color: #880000;}",
    "showData");


} // of "install only once"
// Used Globals (for JSLint) ==============

// ... TiddlyWiki Core
/*global 	createTiddlyElement, saveChanges, store, story, wikify */
// ... DataTiddler
/*global 	DataTiddler */
// ... JSON
/*global 	JSON */
			

/***
!JSON Code, used to serialize the data
***/
/*
Copyright (c) 2005 JSON.org

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 Software shall be used for Good, not Evil.

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.
*/

/*
    The global object JSON contains two methods.

    JSON.stringify(value) takes a JavaScript value and produces a JSON text.
    The value must not be cyclical.

    JSON.parse(text) takes a JSON text and produces a JavaScript value. It will
    throw a 'JSONError' exception if there is an error.
*/
var JSON = {
    copyright: '(c)2005 JSON.org',
    license: 'http://www.crockford.com/JSON/license.html',
/*
    Stringify a JavaScript value, producing a JSON text.
*/
    stringify: function (v) {
        var a = [];

/*
    Emit a string.
*/
        function e(s) {
            a[a.length] = s;
        }

/*
    Convert a value.
*/
        function g(x) {
            var c, i, l, v;

            switch (typeof x) {
            case 'object':
                if (x) {
                    if (x instanceof Array) {
                        e('[');
                        l = a.length;
                        for (i = 0; i < x.length; i += 1) {
                            v = x[i];
                            if (typeof v != 'undefined' &&
                                    typeof v != 'function') {
                                if (l < a.length) {
                                    e(',');
                                }
                                g(v);
                            }
                        }
                        e(']');
                        return;
                    } else if (typeof x.toString != 'undefined') {
                        e('{');
                        l = a.length;
                        for (i in x) {
                            v = x[i];
                            if (x.hasOwnProperty(i) &&
                                    typeof v != 'undefined' &&
                                    typeof v != 'function') {
                                if (l < a.length) {
                                    e(',');
                                }
                                g(i);
                                e(':');
                                g(v);
                            }
                        }
                        return e('}');
                    }
                }
                e('null');
                return;
            case 'number':
                e(isFinite(x) ? +x : 'null');
                return;
            case 'string':
                l = x.length;
                e('"');
                for (i = 0; i < l; i += 1) {
                    c = x.charAt(i);
                    if (c >= ' ') {
                        if (c == '\\' || c == '"') {
                            e('\\');
                        }
                        e(c);
                    } else {
                        switch (c) {
                            case '\b':
                                e('\\b');
                                break;
                            case '\f':
                                e('\\f');
                                break;
                            case '\n':
                                e('\\n');
                                break;
                            case '\r':
                                e('\\r');
                                break;
                            case '\t':
                                e('\\t');
                                break;
                            default:
                                c = c.charCodeAt();
                                e('\\u00' + Math.floor(c / 16).toString(16) +
                                    (c % 16).toString(16));
                        }
                    }
                }
                e('"');
                return;
            case 'boolean':
                e(String(x));
                return;
            default:
                e('null');
                return;
            }
        }
        g(v);
        return a.join('');
    },
/*
    Parse a JSON text, producing a JavaScript value.
*/
    parse: function (text) {
        var p = /^\s*(([,:{}\[\]])|"(\\.|[^\x00-\x1f"\\])*"|-?\d+(\.\d*)?([eE][+-]?\d+)?|true|false|null)\s*/,
            token,
            operator;

        function error(m, t) {
            throw {
                name: 'JSONError',
                message: m,
                text: t || operator || token
            };
        }

        function next(b) {
            if (b && b != operator) {
                error("Expected '" + b + "'");
            }
            if (text) {
                var t = p.exec(text);
                if (t) {
                    if (t[2]) {
                        token = null;
                        operator = t[2];
                    } else {
                        operator = null;
                        try {
                            token = eval(t[1]);
                        } catch (e) {
                            error("Bad token", t[1]);
                        }
                    }
                    text = text.substring(t[0].length);
                } else {
                    error("Unrecognized token", text);
                }
            } else {
                token = operator = undefined;
            }
        }


        function val() {
            var k, o;
            switch (operator) {
            case '{':
                next('{');
                o = {};
                if (operator != '}') {
                    for (;;) {
                        if (operator || typeof token != 'string') {
                            error("Missing key");
                        }
                        k = token;
                        next();
                        next(':');
                        o[k] = val();
                        if (operator != ',') {
                            break;
                        }
                        next(',');
                    }
                }
                next('}');
                return o;
            case '[':
                next('[');
                o = [];
                if (operator != ']') {
                    for (;;) {
                        o.push(val());
                        if (operator != ',') {
                            break;
                        }
                        next(',');
                    }
                }
                next(']');
                return o;
            default:
                if (operator !== null) {
                    error("Missing value");
                }
                k = token;
                next();
                return k;
            }
        }
        next();
        return val();
    }
};

/***
!Setup the data serialization
***/

DataTiddler.format = "JSON";
DataTiddler.stringify = JSON.stringify;
DataTiddler.parse = JSON.parse;

//}}}

[[首頁]]
[[更新說明]]
[[擴充套件列表]]
> 同時清除複數的書籤小圖示
* ''套件作者'':[[Ronny Perinke|http://www.sephiroth-j.de/]]
* ''套件網頁'':[[官方網頁|http://www.sephiroth-j.de/1/mozilla/#delsiteicons]]
* ''套件語系'':內建繁中
* ''套件功能'':
** 刪除個別書籤前的小圖示。
** 在書籤管理員中可作用。
** 在書籤管理員中可選擇要刪除圖示的複數書籤一次刪除。
* ''相關鏈結'':
* ''相關類似'':[[Delete Icons]]
* ''心得介紹'':<br> 有時會看書籤前的小圖示不順眼,或是被讀取到錯誤的網站圖示,就會想要把書籤小圖示刪掉。這個套件的便利在於可選擇複數的書籤去刪除小圖示並在書籤管理員中亦可作用。但不具備 [[Delete Icons]] 的一次刪除全部書籤圖示的功能。<br><br>只是下次再連到書籤中有圖示的網站,還是會把圖示替代上去。
> 一次清除全部的書籤小圖示
* ''套件作者'':Mike Hokenson
* ''套件網頁'':[[官方網頁|http://www.gozer.org/mozilla/extensions/]]
* ''套件語系'':私譯繁中
* ''撰寫版號'':
* ''套件功能'':
** 刪除個別書籤前的小圖示。
** 一次刪除全部書籤的小圖示。
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?t=6656]]
* ''相關類似'':[[Delete Bookmark Icons]]
* ''心得介紹'':<br> 有時會看書籤前的小圖示不順眼,或是被讀取到錯誤的網站圖示,就會想要把書籤小圖示刪掉。這個套件的便利處是可以一次刪除全部書籤的現有小圖示。但不具備 [[Delete Bookmark Icons]] 一次刪除複數書籤圖示的功能,在書籤管理員中亦無法作用。<br><br>只是下次再連到書籤中有圖示的網站,還是會把圖示替代上去。
> 即時查詢英文單字
* ''套件作者'':Austin
* ''套件網頁'':[[官方網頁|http://code.google.com/p/dictcn/]]、[[Add-ons#2082|https://addons.mozilla.org/zh-TW/firefox/addon/2082]]
* ''套件語系'':內建簡中
* ''撰寫版號'':
* ''套件功能'':
** 自動查詢游標指向的英文單字並浮動顯示。
** 自動查出中文、音標,可設定發音。
** 可設定顯示翻譯為繁體輸出。
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?t=17850]]
* ''相關類似'':[[backword]]
* ''心得介紹'':<br>本來是在用功能更強大的 [[backword]] ,後來友人提到這個較為輕巧,於是才拿來試用。順暢度略差於 [[backword]],且無法自訂查詢引擎,但若不習慣 [[backword]] 的倒可以考慮。
> Firefox裡的續傳套件
* ''套件作者'':Federico Parodi, Nils Maier, Stefano Verna
* ''套件網頁'':[[官方網頁|http://www.downthemall.net/]]、[[Add-ons#201|https://addons.mozilla.org/zh-TW/firefox/addon/201]]
* ''套件語系'':內建繁中
* ''撰寫版號'':0.9.9.10
* ''套件功能'':
** 下載列表管理
** 續傳及分割下載
* ''相關鏈結'':[[社群修改|http://forum.moztw.org/viewtopic.php?t=18122]]
* ''相關類似'':
* ''心得介紹'':<br>這個有點像把 [[FlashGet|http://www.amazesoft.com/]] 這類的續傳軟體內建進 Firefox 裡面。雖然通常個人還是比較喜歡另外開續傳軟體啦,不過有時候沒續傳軟體用或懶得開時,拿這個來頂一頂也還不錯用。
> 簡單下載內嵌多媒體檔案
* ''套件作者'':[[Andrew Ruder|http://www.aeruder.net/]]
* ''套件網頁'':[[官方網頁|http://extensions.aeruder.net/]]、[[Add-ons#1993|https://addons.mozilla.org/zh-TW/firefox/addon/1993]]
* ''套件語系'':英文其他
* ''撰寫版號'':2.0.15
* ''套件功能'':
** 在有 Flash 或影音多媒體檔案在的的頁面,會自動顯示下載選項。
* ''相關鏈結'':[[中文介紹|http://blog.joaoko.net/archives/118]]
* ''相關類似'':
* ''心得介紹'':<br>要注意的是,如果有使用 [[Flashblock]] 之類的套件擋掉 Flash 或其他多媒體檔,必須先解除擋掉設定,本套件才讀得到,才能下載。<br><br>要注意的是支援下載的是頁面上的多媒體,也就是如果拿這個去下載 [[Google Video|http://video.google.com/]] 或 [[YouTube|http://www.youtube.com/]] 只能得到播放的媒介 swf 檔,而非影片檔 flv。<br><br>個人覺得還不錯用,單純因為鮮少會用到所以目前沒有安裝。
> 強化管理下載管理員的
* ''套件作者'':andman42
* ''套件網頁'':[[mozdev|http://dmextension.mozdev.org/]]、[[Add-ons#256|https://addons.mozilla.org/zh-TW/firefox/addon/256]]
* ''套件語系'':內建繁中
* ''套件功能'':
** 自訂下載管理員要另開視窗/開在側邊欄/開在分頁。
** 自訂下載時下載管理員是否自動顯示。
** 自訂下載完成下載管理員是否自動關閉。
* ''相關鏈結'':
* ''相關類似'':[[Download Statusbar]]
* ''心得介紹'':<br>我個人比較偏愛 [[Download Statusbar]] 來管理,顯少使用下載管理員管理,視個人需求選擇吧!
> 極簡顯示管理你的下載
* ''套件作者'':[[Devon Jensen|http://dlstatusbar.proboards43.com/]]
* ''套件網頁'':[[mozdev|http://downloadstatusbar.mozdev.org/]]、[[Add-ons#26|https://addons.mozilla.org/zh-TW/firefox/addon/26]]
* ''套件語系'':內建繁中
* ''撰寫版號'':0.9.6.3
* ''套件功能'':
** 把下載視窗合併到一般頁面上快速管理。
** 預設是在狀態列顯示一整排的【完整模式】,推薦以【迷你模式】縮成小小的狀態列管理更精簡便利。
** 可設定關閉後持續在下載管理員中下載。
** 可自訂下載管理介面外觀。
** 可指定下載掃毒。
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?t=6253]]
* ''相關類似'':[[Download Manager Tweak]]
* ''心得介紹'':<br>Firefox 的下載管理員預設是另開視窗來管理,有時要切換總覺得麻煩且進度不明。這個套件在預設的【完整模式】下,可以直接在頁面的下方列出管理所有的下載及狀態。也可以設定成「迷你模式」,縮成在右下角的小圖示,旁邊會顯示出下載中/已完成的下載數量,點一下圖示就能看到全部的下載進度,當然也可以直接停止或繼續。是 Firefox 必推套件之一。
> 輕鬆下載網頁上的影音圖片
* ''套件作者'':Michel Gutierrez
* ''套件網頁'':[[官方網頁|http://www.downloadhelper.net/]]、[[Add-ons#3006|https://addons.mozilla.org/zh-TW/firefox/addon/3006]]
* ''套件語系'':內建繁中
* ''撰寫版號'':3.2
* ''套件功能'':
** 可支援網頁上的影音(包含 [[YouTube|http://www.youtube.com/]] 和 [[Google Video|http://video.google.com/]] 這種站台)及圖片檔下載。
** 下載支援的檔案類型可以自訂。
** 可設定用 [[FlashGot]] 呼叫外部下載。
** 支援轉檔功能(需另外安裝轉檔軟體)。
* ''相關鏈結'':[[中文介紹|http://www.goston.net/2007/01/30/710/]]
* ''相關類似'':[[VideoDownloader]]、[[UnPlug]]
* ''心得介紹'':<br>在 Add-ons 站的顯示名稱是 Vedio DownloadHelper ,所以連過去看到名字不同不要以為連錯了。安裝後會顯示 DownloadHelper 。<br><br>在工具列會顯示出三顆球圖示。平常是灰色的,連到有(設定)支援的檔案格式可以以下載的網頁時,就會變成彩色的在那裡轉呀轉的,點選圖示右邊的箭頭便可以從列表中選擇要下載的檔案。<br><br>除了下載方式外,支援檔型幾乎都不用動。其實個人只有用在影音檔上,圖片鏈結很少試,雖然圖片鏈結似乎具備一次下載功能?
> 拖放間執行需求動作
* ''套件作者'':[[yukichi|http://bushwhacker.seesaa.net/]]
* ''套件網頁'':[[官方網頁|http://bushwhacker.seesaa.net/article/16088152.html]]、[[Add-ons#2918|https://addons.mozilla.org/zh-TW/firefox/addon/2918]]
* ''套件語系'':內建繁中
* ''撰寫版號'':0.2.5
* ''套件功能'':
** 拖曳沒設成鏈結的純文字網址,可以指定在本分頁開啟、在新分頁前景開啟、在新分頁背景開啟……等不同動作。
** 可以用拖曳的動作把文字快速複製到搜尋引擎或頁面搜尋內。
** 利用拖曳的動作可以快速進行文字、檔案、圖片的存檔,甚至可以指定或設定儲存資料夾。
** 文字、檔案、圖片及套件各自可以對四個方向進行拖曳動作設定。
** 如有安裝[[ConQuery]],支援以[[ConQuery]]呼叫搜尋引擎。
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?t=16801]]
* ''相關類似'':[[Easy DragToGo]]、[[Super DragAndGo]]
* ''心得介紹'':<br>這是從[[Super DragAndGo]]延伸出來的進階套件,泉用過一陣子,後來覺得基本的[[Super DragAndGo]]比較符合個人需求,因而沒有繼續使用。不過友人似乎完全愛上這個套件的文字儲存功能?(笑)依個人需求選擇要適合自己的吧!<br><br>其實官方網站有對應 Firefox 3 的 0.2.5.1 開發版本下載,但個人嚐試後發現並無法完全正常執行,是故放棄轉用 [[Easy DragToGo]] 。
> 拖拉就能開啟純文字網址及搜尋
* ''套件作者'':Easy DragToGo
* ''套件網頁'':[[官方網頁|http://]]、[[mozdev|https://]]、[[Add-ons#6639|https://addons.mozilla.org/zh-TW/firefox/addon/6639]]
* ''套件語系'':內建繁中
* ''撰寫版號'':1.1.2.1
* ''套件功能'':
** 針對文字、鏈結、圖片可以拖曳對應動作的設定。
** 可指定任意、上下、左右或上下左右不同拖曳法的動作。
** 可指定視窗外拖曳入文字、鏈結的對應動作。
** 可指定對應開啟、搜尋在前景或背景。
* ''相關鏈結'':[[中文介紹|http://]]、[[應用介紹|http://]]
* ''相關類似'':[[Drag de Go]]、[[Super DragAndGo]]
* ''心得介紹'':<br>功能基本上跟 [[Super DragAndGo]] 差不多,但具備了 [[Drag de Go]] 的部分進階設定功能。在這兩者皆無法完全正常支援 Firefox 3 的情況下倒是個不錯選擇!
<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler deleteTiddler wikibar'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span></div>
<div class='editor' macro='edit text'></div>
<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler deleteTiddler wikibar'></div>
> 加強書籤搜尋功能
* ''套件作者'':[[AnonEmoose|http://snipurl.com/AnonEmooseFF]]
* ''套件網頁'':[[官方網頁|http://h1.ripway.com/AnonEmoose6/FireFox/ebs.html]]、[[Add-ons#494|https://addons.mozilla.org/zh-TW/firefox/addon/494]]
* ''套件語系'':內建繁中
* ''撰寫版號'':0.1.4.04.1
* ''套件功能'':
** 加強過於簡易的書籤搜尋功能。可以針對標題、網址、描述、關鍵字進行搜尋。
** 加強搜尋文字的方向,可以開頭文字、結尾文字、包含、是、否等不同方法搜尋。
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?t=6138]]
* ''相關類似'':
* ''心得介紹'':<br>其實一般使用者應該用不太到搜尋書籤的功能,但如果跟泉一樣習慣什麼東西都往書籤裡丟,找資料時可是會找得欲哭無淚。尤其是泉習慣不改書籤名,把相關說明全部丟進描述欄裡,很可惜Firefox的預設書籤搜尋是搜不到說明欄裡,還好有這個套件,不然泉要找書籤裡某個東西時可就累了。<br><br>不過搜尋出來的書籤無法得知所在位置,這時可以利用 [[Locate in Bookmark Folders]] 這個套件直接跳到搜尋出來書籤的所在位置進行管理。
> 輕鬆列出你的套件清單
* ''套件作者'':Sogame
* ''套件網頁'':[[官方網頁|http://sogame.awardspace.com/]]、[[Add-ons#3746|https://addons.mozilla.org/zh-TW/firefox/addon/3746]]
* ''套件語系'':內建繁中
* ''撰寫版號'':1.9.0
* ''套件功能'':
** 列出並計算你使用的套件、樣式、外掛。
** 可選擇是否列出HTML、ID、URL、顯示描述、項目總數、(列出)日期。
** 可另存新檔。
* ''相關鏈結'':[[中文介紹|http://blog.joaoko.net/archives/288]]
* ''相關類似'':[[InfoLister]]
* ''心得介紹'':<br>雖然具備另存新檔的功能,不過我懷疑該套件的語系沒設好,另存新檔的內容會亂碼。是故個人習慣複製到剪貼簿自己存檔。
> 讓書籤側邊欄自由移動
* ''套件作者'':[[SHIMODA Hiroshi|http://piro.sakura.ne.jp/xul/]]
* ''套件網頁'':[[官方網頁|http://piro.sakura.ne.jp/xul/_bookmarks2pane.html.en]]、[[Add-ons#1930|https://addons.mozilla.org/zh-TW/firefox/addon/1930]]
* ''套件語系'':內建簡中
* ''撰寫版號'':3.1.2008052801
* ''套件功能'':
** 可選擇書籤在側邊欄或成分離成獨立視窗顯示。
** 可讓分離書籤自動縮起、永遠在前等動作。
** 新增一個下拉式的【側邊欄】切換按鍵,可切換所有用到側邊欄的功能。
* ''相關鏈結'':
* ''相關類似'':
* ''心得介紹'':<br>呣、不知道該怎麼說的套件,只能說跟我想像的似乎不太一樣。泉實在不覺得書籤分成另一個視窗會比較方便。
> 在分頁上顯示編號
* ''套件作者'':[[Chris Gaunt|http://www.hasonetoomany.com]]
* ''套件網頁'':[[官方網頁|http://www.hasonetoomany.com/fancy_numbered_tabs_for_firefox/]]、[[Add-ons#5861|https://addons.mozilla.org/zh-TW/firefox/addon/5861]]
* ''套件語系'':英文其他
* ''撰寫版號'':1.1
* ''套件功能'':
** 在分頁顯示關閉按鍵上,顯示出分頁 1 ~ 8 的編號。
* ''相關鏈結'':[[中文介紹|http://mozlinks-zh.blogspot.com/2007/11/blog-post.html]]
* ''相關類似'':
* ''心得介紹'':<br>Firefox 有個切換分頁的熱鍵是【 Ctrl 】 + 1 ~ 8 的數字鍵,用來切換直接切換到左邊數來前八個分頁。這個套件的功用主要就是讓你不必用眼睛去數哪個分頁到底應該是幾號,可以直接按熱鍵切換。不過若是超過第八個的的分頁可就失去效果了。
> 簡單調校效能
* ''套件作者'':Tony Gentilcore
* ''套件網頁'':[[mozdev|http://fasterfox.mozdev.org/]]、[[Add-ons#1269|https://addons.mozilla.org/zh-TW/firefox/addon/1269]]
* ''套件語系'':內建繁中
* ''撰寫版號'':2.0.0
* ''套件功能'':
** 以簡單的介面調校 Firefox 的效能,而不用自己進入參數設定修改。
** 附帶顯示頁面讀取時間的功能。
* ''相關鏈結'':
* ''相關類似'':
* ''心得介紹'':<br>唔……其實聽說,效能設定好就可以移掉了。不過大概我套件裝太多了或是習慣了,用起來的感覺不太明顯。
> 用 Firefox 上 BBS
* ''套件作者'':Milx
* ''套件網頁'':[[官方網頁|http://firebbs.googlepages.com/index.htm]]
* ''套件語系'':內建繁中
* ''撰寫版號'':0.3.0
* ''套件功能'':
** 讓 Firefox 支援 telnet (BBS )。
** 除了基本的鍵盤操作外,也可以用滑鼠操作。
* ''相關鏈結'':
* ''相關類似'':[[PCMan Plug-in]]
* ''心得介紹'':<br>雖然很久以前就有 [[PCMan Plug-in]] 的出現,讓使者可以在 Firefox 中利用 PCMan 來瀏覽 BBS 。不過在功能上卻遠遠比不上單純使用 [[PCMan|http://pcman.openfoundry.org/]] ,所以泉一直都不喜歡使用 PCMan Plug-in 。<br><br> FireBBS 的原理跟 PCMan Plug-in 不一樣,且可以利用滑鼠來瀏覽。除去因為BBS編碼不同造成的亂碼問題,個人認為較 PCMan Plug-in 與 Firefox 結合的更完善,雖然還在開發中。卻可以期待。
> 讓 Firefox 直接管理 FTP
* ''套件作者'':[[Mime Cuvalo|http://www.nightlight.ws]]
* ''套件網頁'':[[mozdev|http://fireftp.mozdev.org/]]、[[Add-ons#684|https://addons.mozilla.org/zh-TW/firefox/addon/684]]
* ''套件語系'':私譯繁中
* ''撰寫版號'':0.95
* ''套件功能'':
** 讓 Firefox 支援 FTP 的上傳下載。
** 可管理數個 FTP 。
* ''相關鏈結'':[[社群中文|http://forum.moztw.org/viewtopic.php?t=19092]]
* ''相關類似'':
* ''心得介紹'':<br>需要用 FTP 手邊卻沒有 FTP 軟體的好物。<br><br>要留意一下,這個套件不像一般套件直接把各國語系包一起一個 xpi 檔通吃,而是必須去尋找需求的語言版本。官方首頁及 Add-ons 放的都是英文版,中文部分官方網頁只有釋出簡體中文版,若想要用繁體中文,則必需去 [[MozTW|http://forum.moztw.org/]] 尋找社群中文版。
> 簡潔自訂性高的滑鼠手勢
* ''套件作者'':[[Gomita|http://www.xuldev.org/]]
* ''套件網頁'':[[官方網頁|http://www.xuldev.org/firegestures/]]、[[Add-ons#6366|https://addons.mozilla.org/zh-TW/firefox/addon/6366]]
* ''套件語系'':內建繁中
* ''撰寫版號'':1.0.5
* ''套件功能'':
** 自訂拖動滑鼠做出滑鼠手勢的作用。
** 可自訂滑鼠軌跡顏色、粗細。
** 可自訂搖擺手勢、滾輪手勢、按鍵手勢。
** 可自訂語法新增自己需要的動作以設定手勢。官方網站有提供部分沒有內建的手勢供新增。
* ''相關鏈結'':[[中文介紹|http://playpcesor.blogspot.com/2008/02/firegestures.html]]
* ''相關類似'':[[All-in-One Gestures]]
* ''心得介紹'':<br>可以簡單設定,反應也相當靈敏快速的滑鼠手勢套件。小缺點是似乎沒有內建手勢匯出的功能,但可以直接去找設定檔自行備分。
> 擷取並編輯目前瀏覽網頁存成圖片
* ''套件作者'':[[susbox|http://screenshot-program.com/]]
* ''套件網頁'':[[官方網頁|http://screenshot-program.com/fireshot/]]、[[Add-ons#5648|https://addons.mozilla.org/zh-TW/firefox/addon/5648]]
* ''套件語系'':英文其他
* ''撰寫版號'':0.36
* ''套件功能'':
** 可擷取網頁區域或全頁面的圖片。
** 擷取後可選擇直接儲存、以內建的圖片編輯器加工後再儲存、複製到剪貼簿、E-mail、另開影像編輯軟體編輯等。
** 內建圖片編輯器提供線、框線、文字、畫筆、強調、剪裁…等編輯方式,還可以標出編號。
* ''相關鏈結'':[[中文介紹|http://www.goston.net/2007/10/25/1084/]]
* ''相關類似'':[[Pearl Crescent Page Saver Basic]]
* ''心得介紹'':<br>讓擷取和編輯圖片全在 Firefox 一次搞定的套件,適合有編輯-上傳圖片需求又懶得開影像編輯軟體的人(笑)。
> 直覺式的網頁編輯工具
* ''套件作者'':[[Joe Hewitt|http://www.joehewitt.com]]
* ''套件網頁'':[[官方網頁|http://www.getfirebug.com/]]、[[Add-ons#1843|https://addons.mozilla.org/zh-TW/firefox/addon/1843]]
* ''套件語系'':英文其他
* ''撰寫版號'':1.1.0b12
* ''套件功能'':
** 可以檢視、編輯所瀏覽網頁的 HTML、CSS、Script 原始碼,且可預覽編輯結果。
** 以樹狀可摺疊層級顯示原始碼。
** 直接選取網頁上的區塊,會跳到該段原始碼所在位置。
** 檢視原始碼時選取不同的區塊,會將網頁上該區塊亮度顯示。
* ''相關鏈結'':
* ''相關類似'':[[Web Developer]]
* ''心得介紹'':<br>其實還有些功能因為自已不太熟而沒提到。跟 [[Web Developer]] 比起來,這個套件專注在編撰原始碼及檢視頁面原始碼設定的部分,而且功能上十分直覺,很適合想即時檢視網頁編輯效果的人。
> 用 Firefox 管理你的 Flickr
* ''套件作者'':[[hackele|http://hacker.klever.net/]]
* ''套件網頁'':[[官方網頁|http://kin.klever.net/fireflix/]]、[[Add-ons#3453|https://addons.mozilla.org/zh-TW/firefox/addon/3453]]
* ''套件語系'':英文其他
* ''套件功能'':
** Flickr 照片搜尋及瀏覽(不可產生照片 HTML )。
** Flickr 照片上傳,還在上傳列表中便可一次產生複數照片 HTML 。
** Flickr 個人 Set 中的照片顯示及一次產生複數照片 HTML 。
** 產生 HTML 時可以選擇圖片大小和鏈結指向圖的大小或是 Flickr 的圖片頁面。
* ''相關鏈結'':[[中文介紹|http://blog.joaoko.net/archives/149]]
* ''相關類似'':
* ''心得介紹'':<br>一次產生複數照片的 HTML 檔算是這個套件最棒的部分,不過,話說如果直接連圖,應該是算違反 Flickr 的規定吧?
> 呼叫外部下載軟體
* ''套件作者'':[[Giorgio Maone|http://maone.net/]]
* ''套件網頁'':[[官方網頁|http://flashgot.net/]]、[[Add-ons#220|https://addons.mozilla.org/zh-TW/firefox/addon/220]]
* ''套件語系'':內建繁中
* ''撰寫版號'':0.7.2
* ''套件功能'':
** 呼叫外部下載續傳軟體進行單一或複數鏈結之下載。
** 下載時可自行選擇要用哪種軟體進行下載,預設是支援自動偵測下載。
** 沒被偵測到的下載軟體,使用者可以手動加入。
* ''相關鏈結'':
* ''相關類似'':
* ''心得介紹'':<br>Firefox 必推工具之一,直接呼叫各種外部及內部續傳軟體大量下載時的好幫手!
> 擋下拖速度的 Flash
* ''套件作者'':[[Lorenzo Colitti|http://www.colitti.com/lorenzo/]], [[Philip Chee|http://xsidebar.mozdev.org/]]
* ''套件網頁'':[[mozdev|http://flashblock.mozdev.org/]]、[[Add-ons#433|https://addons.mozilla.org/zh-TW/firefox/addon/433]]
* ''套件語系'':內建繁中
* ''撰寫版號'':1.5.4.1
* ''套件功能'':
** 擋下 Macromedia Flash 、 Macromedia Shockwave 和 Macromedia Authorware ,改以擊點後顯示。
** 可指定顯示白名單。
* ''相關鏈結'':
* ''相關類似'':[[Stop Autoplay]]
* ''心得介紹'':<br>泉本身很不喜歡開有太多 Flash 的站,讀取速度慢不說,有些的影音也很吵。不過現在越來越多網站是以大量 Flash 打造,不開 Flash 瀏覽起來也相當痛苦……。<br><br>因為慣用來擋下影音的 [[Stop Autoplay]] 現在內建了擋下 Flash 的功能,雖然有支援當有 [[Flashblock]] 時會將阻擋 Flash 的部分交由 [[Flashblock]] 處理,但還是有點衝突。所以目前移除專心使用 [[Stop Autoplay]] 。
> 直接編輯你的書籤
* ''套件作者'':[[chouser|http://www.bluweb.com/us/chouser/]]
* ''套件網頁'':[[官方網頁|http://bluweb.com/chouser/proj/mozhack/]]、[[Add-ons#117|https://addons.mozilla.org/zh-TW/firefox/addon/117]]
* ''套件語系'':內建繁中
* ''撰寫版號'':0.8.1
* ''套件功能'':
** 在書籤管理員下方顯示編輯視窗,讓使用者點選書籤即可編輯。
** 可點選【 CTRL + P 】或【檢視】→【書籤屬性】關閉/開啟編輯列。
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?t=6271]]
* ''相關類似'':
* ''心得介紹'':<br>使用書籤管理員管理自己的書籤時,最煩人的莫過於每要改一筆書籤或資料夾資料,都要一直去按【屬性】叫出內容修改。這個套件讓你省去按【屬性】選項的動作,只要點選書籤即可以下方編輯器編輯書籤內容。<br><br>使用時有一點要注意,這個套件開啟時,在書籤管理員中無法以【屬性】修改被選取的書籤,得要用下方編輯器才能修改。<br><br>Firefox 3 雖然已具備在收藏庫(原來的書籤管理員)中可直接在下面修改選取的書籤/資料夾,但部分進階設定卻還是需要點一下【更多欄位】(或 【 Alt + E 】)才能顯示,相當不便。
/***
|''Name:''|ForEachTiddlerPlugin|
|''Version:''|1.0.8 (2007-04-12)|
|''Source:''|http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin|
|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|
|''Licence:''|[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]|
|''Copyright:''|&copy; 2005-2007 [[abego Software|http://www.abego-software.de]]|
|''TiddlyWiki:''|1.2.38+, 2.0|
|''Browser:''|Firefox 1.0.4+; Firefox 1.5; InternetExplorer 6.0|
!Description

Create customizable lists, tables etc. for your selections of tiddlers. Specify the tiddlers to include and their order through a powerful language.

''Syntax:'' 
|>|{{{<<}}}''forEachTiddler'' [''in'' //tiddlyWikiPath//] [''where'' //whereCondition//] [''sortBy'' //sortExpression// [''ascending'' //or// ''descending'']] [''script'' //scriptText//] [//action// [//actionParameters//]]{{{>>}}}|
|//tiddlyWikiPath//|The filepath to the TiddlyWiki the macro should work on. When missing the current TiddlyWiki is used.|
|//whereCondition//|(quoted) JavaScript boolean expression. May refer to the build-in variables {{{tiddler}}} and  {{{context}}}.|
|//sortExpression//|(quoted) JavaScript expression returning "comparable" objects (using '{{{<}}}','{{{>}}}','{{{==}}}'. May refer to the build-in variables {{{tiddler}}} and  {{{context}}}.|
|//scriptText//|(quoted) JavaScript text. Typically defines JavaScript functions that are called by the various JavaScript expressions (whereClause, sortClause, action arguments,...)|
|//action//|The action that should be performed on every selected tiddler, in the given order. By default the actions [[addToList|AddToListAction]] and [[write|WriteAction]] are supported. When no action is specified [[addToList|AddToListAction]]  is used.|
|//actionParameters//|(action specific) parameters the action may refer while processing the tiddlers (see action descriptions for details). <<tiddler [[JavaScript in actionParameters]]>>|
|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|

See details see [[ForEachTiddlerMacro]] and [[ForEachTiddlerExamples]].

!Revision history
* v1.0.8 (2007-04-12)
** Adapted to latest TiddlyWiki 2.2 Beta importTiddlyWiki API (introduced with changeset 2004). TiddlyWiki 2.2 Beta builds prior to changeset 2004 are no longer supported (but TiddlyWiki 2.1 and earlier, of cause)
* v1.0.7 (2007-03-28)
** Also support "pre" formatted TiddlyWikis (introduced with TW 2.2) (when using "in" clause to work on external tiddlers)
* v1.0.6 (2006-09-16)
** Context provides "viewerTiddler", i.e. the tiddler used to view the macro. Most times this is equal to the "inTiddler", but when using the "tiddler" macro both may be different.
** Support "begin", "end" and "none" expressions in "write" action
* v1.0.5 (2006-02-05)
** Pass tiddler containing the macro with wikify, context object also holds reference to tiddler containing the macro ("inTiddler"). Thanks to SimonBaird.
** Support Firefox 1.5.0.1
** Internal
*** Make "JSLint" conform
*** "Only install once"
* v1.0.4 (2006-01-06)
** Support TiddlyWiki 2.0
* v1.0.3 (2005-12-22)
** Features: 
*** Write output to a file supports multi-byte environments (Thanks to Bram Chen) 
*** Provide API to access the forEachTiddler functionality directly through JavaScript (see getTiddlers and performMacro)
** Enhancements:
*** Improved error messages on InternetExplorer.
* v1.0.2 (2005-12-10)
** Features: 
*** context object also holds reference to store (TiddlyWiki)
** Fixed Bugs: 
*** ForEachTiddler 1.0.1 has broken support on win32 Opera 8.51 (Thanks to BrunoSabin for reporting)
* v1.0.1 (2005-12-08)
** Features: 
*** Access tiddlers stored in separated TiddlyWikis through the "in" option. I.e. you are no longer limited to only work on the "current TiddlyWiki".
*** Write output to an external file using the "toFile" option of the "write" action. With this option you may write your customized tiddler exports.
*** Use the "script" section to define "helper" JavaScript functions etc. to be used in the various JavaScript expressions (whereClause, sortClause, action arguments,...).
*** Access and store context information for the current forEachTiddler invocation (through the build-in "context" object) .
*** Improved script evaluation (for where/sort clause and write scripts).
* v1.0.0 (2005-11-20)
** initial version

!Code
***/
//{{{

	
//============================================================================
//============================================================================
//		   ForEachTiddlerPlugin
//============================================================================
//============================================================================

// Only install once
if (!version.extensions.ForEachTiddlerPlugin) {

if (!window.abego) window.abego = {};

version.extensions.ForEachTiddlerPlugin = {
	major: 1, minor: 0, revision: 8, 
	date: new Date(2007,3,12), 
	source: "http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin",
	licence: "[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]",
	copyright: "Copyright (c) abego Software GmbH, 2005-2007 (www.abego-software.de)"
};

// For backward compatibility with TW 1.2.x
//
if (!TiddlyWiki.prototype.forEachTiddler) {
	TiddlyWiki.prototype.forEachTiddler = function(callback) {
		for(var t in this.tiddlers) {
			callback.call(this,t,this.tiddlers[t]);
		}
	};
}

//============================================================================
// forEachTiddler Macro
//============================================================================

version.extensions.forEachTiddler = {
	major: 1, minor: 0, revision: 8, date: new Date(2007,3,12), provider: "http://tiddlywiki.abego-software.de"};

// ---------------------------------------------------------------------------
// Configurations and constants 
// ---------------------------------------------------------------------------

config.macros.forEachTiddler = {
	 // Standard Properties
	 label: "forEachTiddler",
	 prompt: "Perform actions on a (sorted) selection of tiddlers",

	 // actions
	 actions: {
		 addToList: {},
		 write: {}
	 }
};

// ---------------------------------------------------------------------------
//  The forEachTiddler Macro Handler 
// ---------------------------------------------------------------------------

config.macros.forEachTiddler.getContainingTiddler = function(e) {
	while(e && !hasClass(e,"tiddler"))
		e = e.parentNode;
	var title = e ? e.getAttribute("tiddler") : null; 
	return title ? store.getTiddler(title) : null;
};

config.macros.forEachTiddler.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
	// config.macros.forEachTiddler.traceMacroCall(place,macroName,params,wikifier,paramString,tiddler);

	if (!tiddler) tiddler = config.macros.forEachTiddler.getContainingTiddler(place);
	// --- Parsing ------------------------------------------

	var i = 0; // index running over the params
	// Parse the "in" clause
	var tiddlyWikiPath = undefined;
	if ((i < params.length) && params[i] == "in") {
		i++;
		if (i >= params.length) {
			this.handleError(place, "TiddlyWiki path expected behind 'in'.");
			return;
		}
		tiddlyWikiPath = this.paramEncode((i < params.length) ? params[i] : "");
		i++;
	}

	// Parse the where clause
	var whereClause ="true";
	if ((i < params.length) && params[i] == "where") {
		i++;
		whereClause = this.paramEncode((i < params.length) ? params[i] : "");
		i++;
	}

	// Parse the sort stuff
	var sortClause = null;
	var sortAscending = true; 
	if ((i < params.length) && params[i] == "sortBy") {
		i++;
		if (i >= params.length) {
			this.handleError(place, "sortClause missing behind 'sortBy'.");
			return;
		}
		sortClause = this.paramEncode(params[i]);
		i++;

		if ((i < params.length) && (params[i] == "ascending" || params[i] == "descending")) {
			 sortAscending = params[i] == "ascending";
			 i++;
		}
	}

	// Parse the script
	var scriptText = null;
	if ((i < params.length) && params[i] == "script") {
		i++;
		scriptText = this.paramEncode((i < params.length) ? params[i] : "");
		i++;
	}

	// Parse the action. 
	// When we are already at the end use the default action
	var actionName = "addToList";
	if (i < params.length) {
	   if (!config.macros.forEachTiddler.actions[params[i]]) {
			this.handleError(place, "Unknown action '"+params[i]+"'.");
			return;
		} else {
			actionName = params[i]; 
			i++;
		}
	} 
	
	// Get the action parameter
	// (the parsing is done inside the individual action implementation.)
	var actionParameter = params.slice(i);


	// --- Processing ------------------------------------------
	try {
		this.performMacro({
				place: place, 
				inTiddler: tiddler,
				whereClause: whereClause, 
				sortClause: sortClause, 
				sortAscending: sortAscending, 
				actionName: actionName, 
				actionParameter: actionParameter, 
				scriptText: scriptText, 
				tiddlyWikiPath: tiddlyWikiPath});

	} catch (e) {
		this.handleError(place, e);
	}
};

// Returns an object with properties "tiddlers" and "context".
// tiddlers holds the (sorted) tiddlers selected by the parameter,
// context the context of the execution of the macro.
//
// The action is not yet performed.
//
// @parameter see performMacro
//
config.macros.forEachTiddler.getTiddlersAndContext = function(parameter) {

	var context = config.macros.forEachTiddler.createContext(parameter.place, parameter.whereClause, parameter.sortClause, parameter.sortAscending, parameter.actionName, parameter.actionParameter, parameter.scriptText, parameter.tiddlyWikiPath, parameter.inTiddler);

	var tiddlyWiki = parameter.tiddlyWikiPath ? this.loadTiddlyWiki(parameter.tiddlyWikiPath) : store;
	context["tiddlyWiki"] = tiddlyWiki;
	
	// Get the tiddlers, as defined by the whereClause
	var tiddlers = this.findTiddlers(parameter.whereClause, context, tiddlyWiki);
	context["tiddlers"] = tiddlers;

	// Sort the tiddlers, when sorting is required.
	if (parameter.sortClause) {
		this.sortTiddlers(tiddlers, parameter.sortClause, parameter.sortAscending, context);
	}

	return {tiddlers: tiddlers, context: context};
};

// Returns the (sorted) tiddlers selected by the parameter.
//
// The action is not yet performed.
//
// @parameter see performMacro
//
config.macros.forEachTiddler.getTiddlers = function(parameter) {
	return this.getTiddlersAndContext(parameter).tiddlers;
};

// Performs the macros with the given parameter.
//
// @param parameter holds the parameter of the macro as separate properties.
//				  The following properties are supported:
//
//						place
//						whereClause
//						sortClause
//						sortAscending
//						actionName
//						actionParameter
//						scriptText
//						tiddlyWikiPath
//
//					All properties are optional. 
//					For most actions the place property must be defined.
//
config.macros.forEachTiddler.performMacro = function(parameter) {
	var tiddlersAndContext = this.getTiddlersAndContext(parameter);

	// Perform the action
	var actionName = parameter.actionName ? parameter.actionName : "addToList";
	var action = config.macros.forEachTiddler.actions[actionName];
	if (!action) {
		this.handleError(parameter.place, "Unknown action '"+actionName+"'.");
		return;
	}

	var actionHandler = action.handler;
	actionHandler(parameter.place, tiddlersAndContext.tiddlers, parameter.actionParameter, tiddlersAndContext.context);
};

// ---------------------------------------------------------------------------
//  The actions 
// ---------------------------------------------------------------------------

// Internal.
//
// --- The addToList Action -----------------------------------------------
//
config.macros.forEachTiddler.actions.addToList.handler = function(place, tiddlers, parameter, context) {
	// Parse the parameter
	var p = 0;

	// Check for extra parameters
	if (parameter.length > p) {
		config.macros.forEachTiddler.createExtraParameterErrorElement(place, "addToList", parameter, p);
		return;
	}

	// Perform the action.
	var list = document.createElement("ul");
	place.appendChild(list);
	for (var i = 0; i < tiddlers.length; i++) {
		var tiddler = tiddlers[i];
		var listItem = document.createElement("li");
		list.appendChild(listItem);
		createTiddlyLink(listItem, tiddler.title, true);
	}
};

abego.parseNamedParameter = function(name, parameter, i) {
	var beginExpression = null;
	if ((i < parameter.length) && parameter[i] == name) {
		i++;
		if (i >= parameter.length) {
			throw "Missing text behind '%0'".format([name]);
		}
		
		return config.macros.forEachTiddler.paramEncode(parameter[i]);
	}
	return null;
}

// Internal.
//
// --- The write Action ---------------------------------------------------
//
config.macros.forEachTiddler.actions.write.handler = function(place, tiddlers, parameter, context) {
	// Parse the parameter
	var p = 0;
	if (p >= parameter.length) {
		this.handleError(place, "Missing expression behind 'write'.");
		return;
	}

	var textExpression = config.macros.forEachTiddler.paramEncode(parameter[p]);
	p++;

	// Parse the "begin" option
	var beginExpression = abego.parseNamedParameter("begin", parameter, p);
	if (beginExpression !== null) 
		p += 2;
	var endExpression = abego.parseNamedParameter("end", parameter, p);
	if (endExpression !== null) 
		p += 2;
	var noneExpression = abego.parseNamedParameter("none", parameter, p);
	if (noneExpression !== null) 
		p += 2;

	// Parse the "toFile" option
	var filename = null;
	var lineSeparator = undefined;
	if ((p < parameter.length) && parameter[p] == "toFile") {
		p++;
		if (p >= parameter.length) {
			this.handleError(place, "Filename expected behind 'toFile' of 'write' action.");
			return;
		}
		
		filename = config.macros.forEachTiddler.getLocalPath(config.macros.forEachTiddler.paramEncode(parameter[p]));
		p++;
		if ((p < parameter.length) && parameter[p] == "withLineSeparator") {
			p++;
			if (p >= parameter.length) {
				this.handleError(place, "Line separator text expected behind 'withLineSeparator' of 'write' action.");
				return;
			}
			lineSeparator = config.macros.forEachTiddler.paramEncode(parameter[p]);
			p++;
		}
	}
	
	// Check for extra parameters
	if (parameter.length > p) {
		config.macros.forEachTiddler.createExtraParameterErrorElement(place, "write", parameter, p);
		return;
	}

	// Perform the action.
	var func = config.macros.forEachTiddler.getEvalTiddlerFunction(textExpression, context);
	var count = tiddlers.length;
	var text = "";
	if (count > 0 && beginExpression)
		text += config.macros.forEachTiddler.getEvalTiddlerFunction(beginExpression, context)(undefined, context, count, undefined);
	
	for (var i = 0; i < count; i++) {
		var tiddler = tiddlers[i];
		text += func(tiddler, context, count, i);
	}
	
	if (count > 0 && endExpression)
		text += config.macros.forEachTiddler.getEvalTiddlerFunction(endExpression, context)(undefined, context, count, undefined);

	if (count == 0 && noneExpression) 
		text += config.macros.forEachTiddler.getEvalTiddlerFunction(noneExpression, context)(undefined, context, count, undefined);
		

	if (filename) {
		if (lineSeparator !== undefined) {
			lineSeparator = lineSeparator.replace(/\\n/mg, "\n").replace(/\\r/mg, "\r");
			text = text.replace(/\n/mg,lineSeparator);
		}
		saveFile(filename, convertUnicodeToUTF8(text));
	} else {
		var wrapper = createTiddlyElement(place, "span");
		wikify(text, wrapper, null/* highlightRegExp */, context.inTiddler);
	}
};


// ---------------------------------------------------------------------------
//  Helpers
// ---------------------------------------------------------------------------

// Internal.
//
config.macros.forEachTiddler.createContext = function(placeParam, whereClauseParam, sortClauseParam, sortAscendingParam, actionNameParam, actionParameterParam, scriptText, tiddlyWikiPathParam, inTiddlerParam) {
	return {
		place : placeParam, 
		whereClause : whereClauseParam, 
		sortClause : sortClauseParam, 
		sortAscending : sortAscendingParam, 
		script : scriptText,
		actionName : actionNameParam, 
		actionParameter : actionParameterParam,
		tiddlyWikiPath : tiddlyWikiPathParam,
		inTiddler : inTiddlerParam, // the tiddler containing the <<forEachTiddler ...>> macro call.
		viewerTiddler : config.macros.forEachTiddler.getContainingTiddler(placeParam) // the tiddler showing the forEachTiddler result
	};
};

// Internal.
//
// Returns a TiddlyWiki with the tiddlers loaded from the TiddlyWiki of 
// the given path.
//
config.macros.forEachTiddler.loadTiddlyWiki = function(path, idPrefix) {
	if (!idPrefix) {
		idPrefix = "store";
	}
	var lenPrefix = idPrefix.length;
	
	// Read the content of the given file
	var content = loadFile(this.getLocalPath(path));
	if(content === null) {
		throw "TiddlyWiki '"+path+"' not found.";
	}
	
	var tiddlyWiki = new TiddlyWiki();

	// Starting with TW 2.2 there is a helper function to import the tiddlers
	if (tiddlyWiki.importTiddlyWiki) {
		if (!tiddlyWiki.importTiddlyWiki(content))
			throw "File '"+path+"' is not a TiddlyWiki.";
		tiddlyWiki.dirty = false;
		return tiddlyWiki;
	}
	
	// The legacy code, for TW < 2.2
	
	// Locate the storeArea div's
	var posOpeningDiv = content.indexOf(startSaveArea);
	var posClosingDiv = content.lastIndexOf(endSaveArea);
	if((posOpeningDiv == -1) || (posClosingDiv == -1)) {
		throw "File '"+path+"' is not a TiddlyWiki.";
	}
	var storageText = content.substr(posOpeningDiv + startSaveArea.length, posClosingDiv);
	
	// Create a "div" element that contains the storage text
	var myStorageDiv = document.createElement("div");
	myStorageDiv.innerHTML = storageText;
	myStorageDiv.normalize();
	
	// Create all tiddlers in a new TiddlyWiki
	// (following code is modified copy of TiddlyWiki.prototype.loadFromDiv)
	var store = myStorageDiv.childNodes;
	for(var t = 0; t < store.length; t++) {
		var e = store[t];
		var title = null;
		if(e.getAttribute)
			title = e.getAttribute("tiddler");
		if(!title && e.id && e.id.substr(0,lenPrefix) == idPrefix)
			title = e.id.substr(lenPrefix);
		if(title && title !== "") {
			var tiddler = tiddlyWiki.createTiddler(title);
			tiddler.loadFromDiv(e,title);
		}
	}
	tiddlyWiki.dirty = false;

	return tiddlyWiki;
};


	
// Internal.
//
// Returns a function that has a function body returning the given javaScriptExpression.
// The function has the parameters:
// 
//	 (tiddler, context, count, index)
//
config.macros.forEachTiddler.getEvalTiddlerFunction = function (javaScriptExpression, context) {
	var script = context["script"];
	var functionText = "var theFunction = function(tiddler, context, count, index) { return "+javaScriptExpression+"}";
	var fullText = (script ? script+";" : "")+functionText+";theFunction;";
	return eval(fullText);
};

// Internal.
//
config.macros.forEachTiddler.findTiddlers = function(whereClause, context, tiddlyWiki) {
	var result = [];
	var func = config.macros.forEachTiddler.getEvalTiddlerFunction(whereClause, context);
	tiddlyWiki.forEachTiddler(function(title,tiddler) {
		if (func(tiddler, context, undefined, undefined)) {
			result.push(tiddler);
		}
	});
	return result;
};

// Internal.
//
config.macros.forEachTiddler.createExtraParameterErrorElement = function(place, actionName, parameter, firstUnusedIndex) {
	var message = "Extra parameter behind '"+actionName+"':";
	for (var i = firstUnusedIndex; i < parameter.length; i++) {
		message += " "+parameter[i];
	}
	this.handleError(place, message);
};

// Internal.
//
config.macros.forEachTiddler.sortAscending = function(tiddlerA, tiddlerB) {
	var result = 
		(tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue) 
			? 0
			: (tiddlerA.forEachTiddlerSortValue < tiddlerB.forEachTiddlerSortValue)
			   ? -1 
			   : +1; 
	return result;
};

// Internal.
//
config.macros.forEachTiddler.sortDescending = function(tiddlerA, tiddlerB) {
	var result = 
		(tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue) 
			? 0
			: (tiddlerA.forEachTiddlerSortValue < tiddlerB.forEachTiddlerSortValue)
			   ? +1 
			   : -1; 
	return result;
};

// Internal.
//
config.macros.forEachTiddler.sortTiddlers = function(tiddlers, sortClause, ascending, context) {
	// To avoid evaluating the sortClause whenever two items are compared 
	// we pre-calculate the sortValue for every item in the array and store it in a 
	// temporary property ("forEachTiddlerSortValue") of the tiddlers.
	var func = config.macros.forEachTiddler.getEvalTiddlerFunction(sortClause, context);
	var count = tiddlers.length;
	var i;
	for (i = 0; i < count; i++) {
		var tiddler = tiddlers[i];
		tiddler.forEachTiddlerSortValue = func(tiddler,context, undefined, undefined);
	}

	// Do the sorting
	tiddlers.sort(ascending ? this.sortAscending : this.sortDescending);

	// Delete the temporary property that holds the sortValue.	
	for (i = 0; i < tiddlers.length; i++) {
		delete tiddlers[i].forEachTiddlerSortValue;
	}
};


// Internal.
//
config.macros.forEachTiddler.trace = function(message) {
	displayMessage(message);
};

// Internal.
//
config.macros.forEachTiddler.traceMacroCall = function(place,macroName,params) {
	var message ="<<"+macroName;
	for (var i = 0; i < params.length; i++) {
		message += " "+params[i];
	}
	message += ">>";
	displayMessage(message);
};


// Internal.
//
// Creates an element that holds an error message
// 
config.macros.forEachTiddler.createErrorElement = function(place, exception) {
	var message = (exception.description) ? exception.description : exception.toString();
	return createTiddlyElement(place,"span",null,"forEachTiddlerError","<<forEachTiddler ...>>: "+message);
};

// Internal.
//
// @param place [may be null]
//
config.macros.forEachTiddler.handleError = function(place, exception) {
	if (place) {
		this.createErrorElement(place, exception);
	} else {
		throw exception;
	}
};

// Internal.
//
// Encodes the given string.
//
// Replaces 
//	 "$))" to ">>"
//	 "$)" to ">"
//
config.macros.forEachTiddler.paramEncode = function(s) {
	var reGTGT = new RegExp("\\$\\)\\)","mg");
	var reGT = new RegExp("\\$\\)","mg");
	return s.replace(reGTGT, ">>").replace(reGT, ">");
};

// Internal.
//
// Returns the given original path (that is a file path, starting with "file:")
// as a path to a local file, in the systems native file format.
//
// Location information in the originalPath (i.e. the "#" and stuff following)
// is stripped.
// 
config.macros.forEachTiddler.getLocalPath = function(originalPath) {
	// Remove any location part of the URL
	var hashPos = originalPath.indexOf("#");
	if(hashPos != -1)
		originalPath = originalPath.substr(0,hashPos);
	// Convert to a native file format assuming
	// "file:///x:/path/path/path..." - pc local file --> "x:\path\path\path..."
	// "file://///server/share/path/path/path..." - FireFox pc network file --> "\\server\share\path\path\path..."
	// "file:///path/path/path..." - mac/unix local file --> "/path/path/path..."
	// "file://server/share/path/path/path..." - pc network file --> "\\server\share\path\path\path..."
	var localPath;
	if(originalPath.charAt(9) == ":") // pc local file
		localPath = unescape(originalPath.substr(8)).replace(new RegExp("/","g"),"\\");
	else if(originalPath.indexOf("file://///") === 0) // FireFox pc network file
		localPath = "\\\\" + unescape(originalPath.substr(10)).replace(new RegExp("/","g"),"\\");
	else if(originalPath.indexOf("file:///") === 0) // mac/unix local file
		localPath = unescape(originalPath.substr(7));
	else if(originalPath.indexOf("file:/") === 0) // mac/unix local file
		localPath = unescape(originalPath.substr(5));
	else // pc network file
		localPath = "\\\\" + unescape(originalPath.substr(7)).replace(new RegExp("/","g"),"\\");	
	return localPath;
};

// ---------------------------------------------------------------------------
// Stylesheet Extensions (may be overridden by local StyleSheet)
// ---------------------------------------------------------------------------
//
setStylesheet(
	".forEachTiddlerError{color: #ffffff;background-color: #880000;}",
	"forEachTiddler");

//============================================================================
// End of forEachTiddler Macro
//============================================================================


//============================================================================
// String.startsWith Function
//============================================================================
//
// Returns true if the string starts with the given prefix, false otherwise.
//
version.extensions["String.startsWith"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
String.prototype.startsWith = function(prefix) {
	var n =  prefix.length;
	return (this.length >= n) && (this.slice(0, n) == prefix);
};



//============================================================================
// String.endsWith Function
//============================================================================
//
// Returns true if the string ends with the given suffix, false otherwise.
//
version.extensions["String.endsWith"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
String.prototype.endsWith = function(suffix) {
	var n = suffix.length;
	return (this.length >= n) && (this.right(n) == suffix);
};


//============================================================================
// String.contains Function
//============================================================================
//
// Returns true when the string contains the given substring, false otherwise.
//
version.extensions["String.contains"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
String.prototype.contains = function(substring) {
	return this.indexOf(substring) >= 0;
};

//============================================================================
// Array.indexOf Function
//============================================================================
//
// Returns the index of the first occurance of the given item in the array or 
// -1 when no such item exists.
//
// @param item [may be null]
//
version.extensions["Array.indexOf"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.indexOf = function(item) {
	for (var i = 0; i < this.length; i++) {
		if (this[i] == item) {
			return i;
		}
	}
	return -1;
};

//============================================================================
// Array.contains Function
//============================================================================
//
// Returns true when the array contains the given item, otherwise false. 
//
// @param item [may be null]
//
version.extensions["Array.contains"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.contains = function(item) {
	return (this.indexOf(item) >= 0);
};

//============================================================================
// Array.containsAny Function
//============================================================================
//
// Returns true when the array contains at least one of the elements 
// of the item. Otherwise (or when items contains no elements) false is returned.
//
version.extensions["Array.containsAny"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.containsAny = function(items) {
	for(var i = 0; i < items.length; i++) {
		if (this.contains(items[i])) {
			return true;
		}
	}
	return false;
};


//============================================================================
// Array.containsAll Function
//============================================================================
//
// Returns true when the array contains all the items, otherwise false.
// 
// When items is null false is returned (even if the array contains a null).
//
// @param items [may be null] 
//
version.extensions["Array.containsAll"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.containsAll = function(items) {
	for(var i = 0; i < items.length; i++) {
		if (!this.contains(items[i])) {
			return false;
		}
	}
	return true;
};


} // of "install only once"

// Used Globals (for JSLint) ==============
// ... DOM
/*global 	document */
// ... TiddlyWiki Core
/*global 	convertUnicodeToUTF8, createTiddlyElement, createTiddlyLink, 
			displayMessage, endSaveArea, hasClass, loadFile, saveFile, 
			startSaveArea, store, wikify */
//}}}


/***
!Licence and Copyright
Copyright (c) abego Software ~GmbH, 2005 ([[www.abego-software.de|http://www.abego-software.de]])

Redistribution and use 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 abego Software nor the names of its contributors may be
used to endorse or promote products derived from this software without specific
prior written permission.

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.
***/

> 幫你關注氣象狀況
* ''套件作者'':[[richwklein|http://richwklein.com]], Jon Stritar
* ''套件網頁'':[[mozdev|http://forecastfox.mozdev.org]]、[[Add-ons#398|https://addons.mozilla.org/zh-TW/firefox/addon/398]]
* ''套件語系'':內建簡中
* ''撰寫版號'':0.9.7.7
* ''套件功能'':
** 檢視設定好的全球想知道城市的天氣,會自動更新。
** 可自訂設定檔檢視不同的城市,也可以設成設定檔依時間輪流切換。
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?t=6352]]
* ''相關類似'':
* ''心得介紹'':<br>得知天氣的好良伴,懶得連天氣預報台時還是個不錯的好物。
/***
<<checkForDataTiddlerPlugin>>
|''Name:''|FormTiddlerPlugin|
|''Version:''|1.0.5 (2006-02-24)|
|''Source:''|http://tiddlywiki.abego-software.de/#FormTiddlerPlugin|
|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|
|''Licence:''|[[BSD open source license]]|
|''Macros:''|formTiddler, checkForDataTiddlerPlugin, newTiddlerWithForm|
|''Requires:''|DataTiddlerPlugin|
|''TiddlyWiki:''|1.2.38+, 2.0|
|''Browser:''|Firefox 1.0.4+; InternetExplorer 6.0|
!Description
Use form-based tiddlers to enter your tiddler data using text fields, listboxes, checkboxes etc. (All standard HTML Form input elements supported).

''Syntax:'' 
|>|{{{<<}}}''formTiddler'' //tiddlerName//{{{>>}}}|
|//tiddlerName//|The name of the FormTemplate tiddler to be used to edit the data of the tiddler containing the macro.|

|>|{{{<<}}}''newTiddlerWithForm'' //formTemplateName// //buttonLabel// [//titleExpression// [''askUser'']] {{{>>}}}|
|//formTemplateName//|The name of the tiddler that defines the form the new tiddler should use.|
|//buttonLabel//|The label of the button|
|//titleExpression//|A (quoted) JavaScript String expression that defines the title (/name) of the new tiddler.|
|''askUser''|Typically the user is not asked for the title when a title is specified (and not yet used). When ''askUser'' is given the user will be asked in any case. This may be used when the calculated title is just a suggestion that must be confirmed by the user|
|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|

For details and how to use the macros see the [[introduction|FormTiddler Introduction]] and the [[examples|FormTiddler Examples]].

!Revision history
* v1.0.5 (2006-02-24)
** Removed "debugger;" instruction
* v1.0.4 (2006-02-07)
** Bug: On IE no data is written to data section when field values changed (thanks to KenGirard for reporting)
* v1.0.3 (2006-02-05)
** Bug: {{{"No form template specified in <<formTiddler>>"}}} when using formTiddler macro on InternetExplorer (thanks to KenGirard for reporting)
* v1.0.2 (2006-01-06)
** Support TiddlyWiki 2.0
* v1.0.1 (2005-12-22)
** Features: 
*** Support InternetExplorer
*** Added newTiddlerWithForm Macro
* v1.0.0 (2005-12-14)
** initial version

!Code
***/
//{{{

//============================================================================
//============================================================================
// FormTiddlerPlugin
//============================================================================
//============================================================================


version.extensions.FormTiddlerPlugin = {
 major: 1, minor: 0, revision: 5,
 date: new Date(2006, 2, 24), 
 type: 'plugin',
 source: "http://tiddlywiki.abego-software.de/#FormTiddlerPlugin"
};

// For backward compatibility with v1.2.x
//
if (!window.story) window.story=window; 
if (!TiddlyWiki.prototype.getTiddler) TiddlyWiki.prototype.getTiddler = function(title) { return t = this.tiddlers[title]; return (t != undefined && t instanceof Tiddler) ? t : null; } 

//============================================================================
// formTiddler Macro
//============================================================================

// -------------------------------------------------------------------------------
// Configurations and constants 
// -------------------------------------------------------------------------------

config.macros.formTiddler = {
 // Standard Properties
 label: "formTiddler",
 version: {major: 1, minor: 0, revision: 4, date: new Date(2006, 2, 7)},
 prompt: "Edit tiddler data using forms",

 // Define the "setters" that set the values of INPUT elements of a given type
 // (must match the corresponding "getter")
 setter: { 
 button: function(e, value) {/*contains no data */ },
 checkbox: function(e, value) {e.checked = value;},
 file: function(e, value) {try {e.value = value;} catch(e) {/* ignore, possibly security error*/}},
 hidden: function(e, value) {e.value = value;},
 password: function(e, value) {e.value = value;},
 radio: function(e, value) {e.checked = (e.value == value);},
 reset: function(e, value) {/*contains no data */ },
 "select-one": function(e, value) {config.macros.formTiddler.setSelectOneValue(e,value);},
 "select-multiple": function(e, value) {config.macros.formTiddler.setSelectMultipleValue(e,value);},
 submit: function(e, value) {/*contains no data */},
 text: function(e, value) {e.value = value;},
 textarea: function(e, value) {e.value = value;}
 },

 // Define the "getters" that return the value of INPUT elements of a given type
 // Return undefined to not store any data.
 getter: { 
 button: function(e, value) {return undefined;},
 checkbox: function(e, value) {return e.checked;},
 file: function(e, value) {return e.value;},
 hidden: function(e, value) {return e.value;},
 password: function(e, value) {return e.value;},
 radio: function(e, value) {return e.checked ? e.value : undefined;},
 reset: function(e, value) {return undefined;},
 "select-one": function(e, value) {return config.macros.formTiddler.getSelectOneValue(e);},
 "select-multiple": function(e, value) {return config.macros.formTiddler.getSelectMultipleValue(e);},
 submit: function(e, value) {return undefined;},
 text: function(e, value) {return e.value;},
 textarea: function(e, value) {return e.value;}
 }
};


// -------------------------------------------------------------------------------
// The formTiddler Macro Handler 
// -------------------------------------------------------------------------------

config.macros.formTiddler.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
 if (!config.macros.formTiddler.checkForExtensions(place, macroName)) {
 return;
 }
 
 // --- Parsing ------------------------------------------

 var i = 0; // index running over the params

 // get the name of the form template tiddler
 var formTemplateName = undefined;
 if (i < params.length) {
 formTemplateName = params[i];
 i++;
 }

 if (!formTemplateName) {
 config.macros.formTiddler.createErrorElement(place, "No form template specified in <<" + macroName + ">>.");
 return;
 }


 // --- Processing ------------------------------------------

 // Get the form template text. 
 // (This contains the INPUT elements for the form.)
 var formTemplateTiddler = store.getTiddler(formTemplateName);
 if (!formTemplateTiddler) {
 config.macros.formTiddler.createErrorElement(place, "Form template '" + formTemplateName + "' not found.");
 return;
 }
 var templateText = formTemplateTiddler.text;
 if(!templateText) {
 // Shortcut: when template text is empty we do nothing.
 return;
 }

 // Get the name of the tiddler containing this "formTiddler" macro
 // (i.e. the tiddler, that will be edited and that contains the data)
 var tiddlerName = config.macros.formTiddler.getContainingTiddlerName(place);

 // Append a "form" element. 
 var formName = "form"+formTemplateName+"__"+tiddlerName;
 var e = document.createElement("form");
 e.setAttribute("name", formName);
 place.appendChild(e);

 // "Embed" the elements defined by the templateText (i.e. the INPUT elements) 
 // into the "form" element we just created
 wikify(templateText, e);

 // Initialize the INPUT elements.
 config.macros.formTiddler.initValuesAndHandlersInFormElements(formName, DataTiddler.getDataObject(tiddlerName));
}


// -------------------------------------------------------------------------------
// Form Data Access 
// -------------------------------------------------------------------------------

// Internal.
//
// Initialize the INPUT elements of the form with the values of their "matching"
// data fields in the tiddler. Also setup the onChange handler to ensure that
// changes in the INPUT elements are stored in the tiddler's data.
//
config.macros.formTiddler.initValuesAndHandlersInFormElements = function(formName, data) {
 // config.macros.formTiddler.trace("initValuesAndHandlersInFormElements(formName="+formName+", data="+data+")");

 // find the form
 var form = config.macros.formTiddler.findForm(formName);
 if (!form) {
 return;
 }

 try {
 var elems = form.elements;
 for (var i = 0; i < elems.length; i++) {
 var c = elems[i];
 
 var setter = config.macros.formTiddler.setter[c.type];
 if (setter) {
 var value = data[c.name];
 if (value != null) {
 setter(c, value);
 }
 c.onchange = onFormTiddlerChange;
 } else {
 config.macros.formTiddler.displayFormTiddlerError("No setter defined for INPUT element of type '"+c.type+"'. (Element '"+c.name+"' in form '"+formName+"')");
 }
 }
 } catch(e) {
 config.macros.formTiddler.displayFormTiddlerError("Error when updating elements with new formData. "+e);
 }
}


// Internal.
//
// @return [may be null]
//
config.macros.formTiddler.findForm = function(formName) {
 // We must manually iterate through the document's forms, since
 // IE does not support the "document[formName]" approach

 var forms = window.document.forms;
 for (var i = 0; i < forms.length; i++) {
 var form = forms[i];
 if (form.name == formName) {
 return form;
 }
 }

 return null;
}


// Internal.
//
config.macros.formTiddler.setSelectOneValue = function(element,value) {
 var n = element.options.length;
 for (var i = 0; i < n; i++) {
 element.options[i].selected = element.options[i].value == value;
 }
}

// Internal.
//
config.macros.formTiddler.setSelectMultipleValue = function(element,value) {
 var values = {};
 for (var i = 0; i < value.length; i++) {
 values[value[i]] = true;
 }
 
 var n = element.length;
 for (var i = 0; i < n; i++) {
 element.options[i].selected = !(!values[element.options[i].value]);
 }
}

// Internal.
//
config.macros.formTiddler.getSelectOneValue = function(element) {
 var i = element.selectedIndex;
 return (i >= 0) ? element.options[i].value : null;
}

// Internal.
//
config.macros.formTiddler.getSelectMultipleValue = function(element) {
 var values = [];
 var n = element.length;
 for (var i = 0; i < n; i++) {
 if (element.options[i].selected) {
 values.push(element.options[i].value);
 }
 }
 return values;
}



// -------------------------------------------------------------------------------
// Helpers 
// -------------------------------------------------------------------------------

// Internal.
//
config.macros.formTiddler.checkForExtensions = function(place,macroName) {
 if (!version.extensions.DataTiddlerPlugin) {
 config.macros.formTiddler.createErrorElement(place, "<<" + macroName + ">> requires the DataTiddlerPlugin. (You can get it from http://tiddlywiki.abego-software.de/#DataTiddlerPlugin)");
 return false;
 }
 return true;
}

// Internal.
//
// Displays a trace message in the "TiddlyWiki" message pane.
// (used for debugging)
//
config.macros.formTiddler.trace = function(s) {
 displayMessage("Trace: "+s);
}

// Internal.
//
// Display some error message in the "TiddlyWiki" message pane.
//
config.macros.formTiddler.displayFormTiddlerError = function(s) {
 alert("FormTiddlerPlugin Error: "+s);
}

// Internal.
//
// Creates an element that holds an error message
// 
config.macros.formTiddler.createErrorElement = function(place, message) {
 return createTiddlyElement(place,"span",null,"formTiddlerError",message);
}

// Internal.
//
// Returns the name of the tiddler containing the given element.
// 
config.macros.formTiddler.getContainingTiddlerName = function(element) {
 return story.findContainingTiddler(element).id.substr(7);
}

// -------------------------------------------------------------------------------
// Event Handlers 
// -------------------------------------------------------------------------------

// This function must be called by the INPUT elements whenever their
// data changes. Typically this is done through an "onChange" handler.
//
function onFormTiddlerChange (e) {
 // config.macros.formTiddler.trace("onFormTiddlerChange "+e);

 if (!e) var e = window.event;

 var target = resolveTarget(e);
 var tiddlerName = config.macros.formTiddler.getContainingTiddlerName(target);
 var getter = config.macros.formTiddler.getter[target.type];
 if (getter) {
 var value = getter(target);
 DataTiddler.setData(tiddlerName, target.name, value);
 } else {
 config.macros.formTiddler.displayFormTiddlerError("No getter defined for INPUT element of type '"+target.type+"'. (Element '"+target.name+"' used in tiddler '"+tiddlerName+"')");
 }
}

// ensure that the function can be used in HTML event handler
window.onFormTiddlerChange = onFormTiddlerChange;


// -------------------------------------------------------------------------------
// Stylesheet Extensions (may be overridden by local StyleSheet)
// -------------------------------------------------------------------------------

setStylesheet(
 ".formTiddlerError{color: #ffffff;background-color: #880000;}",
 "formTiddler");


//============================================================================
// checkForDataTiddlerPlugin Macro
//============================================================================

config.macros.checkForDataTiddlerPlugin = {
 // Standard Properties
 label: "checkForDataTiddlerPlugin",
 version: {major: 1, minor: 0, revision: 0, date: new Date(2005, 12, 14)},
 prompt: "Check if the DataTiddlerPlugin exists"
}

config.macros.checkForDataTiddlerPlugin.handler = function(place,macroName,params) {
 config.macros.formTiddler.checkForExtensions(place, config.macros.formTiddler.label);
}



//============================================================================
// newTiddlerWithForm Macro
//============================================================================

config.macros.newTiddlerWithForm = {
 // Standard Properties
 label: "newTiddlerWithForm",
 version: {major: 1, minor: 0, revision: 1, date: new Date(2006, 1, 6)},
 prompt: "Creates a new Tiddler with a <<formTiddler ...>> macro"
}

config.macros.newTiddlerWithForm.handler = function(place,macroName,params) {
 // --- Parsing ------------------------------------------

 var i = 0; // index running over the params

 // get the name of the form template tiddler
 var formTemplateName = undefined;
 if (i < params.length) {
 formTemplateName = params[i];
 i++;
 }

 if (!formTemplateName) {
 config.macros.formTiddler.createErrorElement(place, "No form template specified in <<" + macroName + ">>.");
 return;
 }

 // get the button label
 var buttonLabel = undefined;
 if (i < params.length) {
 buttonLabel = params[i];
 i++;
 }

 if (!buttonLabel) {
 config.macros.formTiddler.createErrorElement(place, "No button label specified in <<" + macroName + ">>.");
 return;
 }

 // get the (optional) tiddlerName script and "askUser"
 var tiddlerNameScript = undefined;
 var askUser = false;
 if (i < params.length) {
 tiddlerNameScript = params[i];
 i++;

 if (i < params.length && params[i] == "askUser") {
 askUser = true;
 i++;
 }
 }

 // --- Processing ------------------------------------------

 if(!readOnly) {
 var onClick = function() {
 var tiddlerName;
 if (tiddlerNameScript) {
 try {
 tiddlerName = eval(tiddlerNameScript);
 } catch (ex) {
 }
 }
 if (!tiddlerName || askUser) {
 tiddlerName = prompt("Please specify a tiddler name.", askUser ? tiddlerName : "");
 }
 while (tiddlerName && store.getTiddler(tiddlerName)) {
 tiddlerName = prompt("A tiddler named '"+tiddlerName+"' already exists.\n\n"+"Please specify a tiddler name.", tiddlerName);
 }

 // tiddlerName is either null (user canceled) or a name that is not yet in the store.
 if (tiddlerName) {
 var body = "<<formTiddler [["+formTemplateName+"]]>>";
 var tags = [];
 store.saveTiddler(tiddlerName,tiddlerName,body,config.options.txtUserName,new Date(),tags);
 story.displayTiddler(null,tiddlerName,1);
 }
 }

 createTiddlyButton(place,buttonLabel,buttonLabel,onClick);
 }
}

//}}}


/***
!Licence and Copyright
Copyright (c) abego Software ~GmbH, 2005 ([[www.abego-software.de|http://www.abego-software.de]])

Redistribution and use 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 abego Software nor the names of its contributors may be
used to endorse or promote products derived from this software without specific
prior written permission.

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.
***/
[img[http://farm3.static.flickr.com/2178/2228502562_8687e2376c_t.jpg][http://www.flickr.com/photos/95095733@N00/2228502562/]] |可愛的 Foxkeh 佈景
* ''佈景作者'':[[Mozilla Japan|http://www.mozilla-japan.org/]]
* ''佈景網頁'':[[官方網頁|http://www.foxkeh.com/blog/339/]]、[[Add-ons#6198|https://addons.mozilla.org/zh-TW/firefox/addon/6198]]
* ''佈景介紹'':<br> Mozilla Japan 以日本 Firefox 吉祥物 Foxkeh 為主題製作的暖色調可愛佈景。
> 簡單同步你的書籤
* ''套件作者'':[[Foxmarks Inc.|http://www.foxcloud.com/]]
* ''套件網頁'':[[官方網頁|http://www.foxmarks.com/]]、[[Add-ons#2410|https://addons.mozilla.org/zh-TW/firefox/addon/2410/]]
* ''套件語系'':內建繁中
* ''撰寫版號'':
* ''套件功能'':
** 透過 Foxmarks 的服務進行書籤的同步化
* ''相關鏈結'':
* ''相關類似'':
* ''心得介紹'':<br>這個套件很適合完全不懂 FTP 的人進行書籤的同步。安裝後會請你註冊一個 Foxmarks 的帳號,將你的書籤備份在上面以用來同步。你也可以直接登入 [[MyFoxmarks|http://my.foxmarks.com/]] 直接在線上使用已備份好的書籤。適合常用不只一台電腦或一個 Firefox 的使用者。
> 檢視圖片的EXIF資訊
* ''套件作者'':[[Ted Mielczarek|http://ted.mielczarek.org/]]
* ''套件網頁'':[[官方網頁|http://ted.mielczarek.org/code/mozilla/fxif/]]
* ''套件語系'':英文其他
* ''撰寫版號'':0.2.3
* ''套件功能'':
** 檢視JPGE照片檔的EXIF資料。
** 在照片上點滑鼠右鍵→【屬性】,除了原本的圖片資訊外,若有 EXIF 資訊也會顯示出來。
* ''相關鏈結'':
* ''相關類似'':
* ''心得介紹'':<br>在 Firefox 中瀏覽照片時,有時要查看照片的 EXIF 資料時有用,不過蠻多相片網站在存檔時會把 EXIF 清掉,或是顯示出來的不是原始檔案,也就不會保留 EXIF 資訊……。
> 簡便提醒 Google Reader 有新訊息
* ''套件作者'':[[markdbd|http://www.markdbd.com]]
* ''套件網頁'':[[官方網頁|http://www.markdbd.com/proyectos/google_reader_notifier/]]、[[Add-ons#3977|https://addons.mozilla.org/zh-TW/firefox/addon/3977]]
* ''套件語系'':內建繁中
* ''撰寫版號'':0.36
* ''套件功能'':
** 提醒 Google Reader 有更新訊息。
** 在訊息列多一個小圖示,可顯示新訊息的數量。
** 可設定是否依照類別分別註明各自的新訊息數量。
** 可設定更新時間及浮動訊息提醒與否等細節。
* ''相關鏈結'':[[中文介紹|http://blog.joaoko.net/archives/451]]
* ''相關類似'':
* ''心得介紹'':<br>使用 [[Google Reader|http://reader.google.com]] 來檢視 RSS 的人的便利好工具(笑
> 縮圖預覽搜尋引擎的結果
* ''套件作者'':Edward Ackroyd
* ''套件網頁'':[[官方網頁|http://ackroyd.de/googlepreview/]]、[[Add-ons#189|https://addons.mozilla.org/zh-TW/firefox/addon/189]]
* ''套件語系'':內建繁中
* ''套件功能'':英文其他
* ''撰寫版號'':2.0.15
** 可在 [[Google|http://www.google.com]] 及 [[Yahoo|http://tw.yahoo.com]] 搜尋在搜尋結果旁增加該網站的預覽縮圖。
** 可在下方狀態列小圖示上切換開啟與否。
** 可設定一頁顯示的縮圖數量。
** 以上皆可自訂。
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?t=13193]]
* ''相關類似'':
* ''心得介紹'':<br>搜尋時更加便利性的好工具。
> 同時進行Google和維基百科檢索
* ''套件作者'':James Hall
* ''套件網頁'':[[官方網頁|http://www.amusd.com/]]、[[Add-ons#2517|https://addons.mozilla.org/zh-TW/firefox/addon/2517]]
* ''套件語系'':內建簡中
* ''撰寫版號'':0.5.3
* ''套件功能'':
** 在搜尋[[Google|http://www.google.com]]的同時也會搜尋同語系的[[維基百科|http://zh.wikipedia.org/]]。
** 可直接在[[Google|http://www.google.com]]搜尋視窗上點選,把[[維基百科|http://zh.wikipedia.org/]]的搜尋部分縮起或展開。
* ''相關鏈結'':[[中文介紹|http://www.wretch.cc/blog/kaurjmeb&article_id=6227839]]
* ''相關類似'':
* ''心得介紹'':<br>進行[[Google|http://www.google.com]]搜尋時會自動啟用,同時雙管齊下搜尋真是方便呀!
> 像 PDF 一樣抓動網頁
* ''套件作者'':Ian Weiner
* ''套件網頁'':[[mozdev|http://grabanddrag.mozdev.org/]]、[[Add-ons#1250|https://addons.mozilla.org/zh-TW/firefox/addon/1250]]
* ''套件語系'':內建簡中
* ''撰寫版號'':2.5.0.3
* ''套件功能'':
** 讓使用者可以像在操作 PDF 時用手掌抓動頁面。
** 可自訂啟用/關閉的熱鍵。
** 可自訂抓動用的按鍵。
** 可自訂抓動時頁面移動的速度。
* ''相關鏈結'':[[中文介紹|http://www.goston.net/2007/08/09/1006/]]
* ''相關類似'':
* ''心得介紹'':<br>泉自己比較習慣用滑鼠滾輪或是鍵盤上的【 Page Up 】及【 Page Down 】來進行頁面的跳動,一般人常用的捲軸都鮮少去動。還在試用看順不順手。
> 隱藏選單工具列
* ''套件作者'':yuoo2k
* ''套件網頁'':[[官方網頁|http://forum.moztw.org/viewtopic.php?t=15303]]、[[Add-ons#4762|https://addons.mozilla.org/zh-TW/firefox/addon/4762]]
* ''套件語系'':內建繁中
* ''撰寫版號'':1.0.20080310
* ''套件功能'':
** 使選單工具列可以隱藏。
** 按【Alt】可以暫時顯示選單工具列。
* ''相關鏈結'':[[中文討論|http://forum.moztw.org/viewtopic.php?t=18012]]
* ''相關類似'':[[Compact Menu]]、[[Compact Menu 2]]、[[Personal Menu]]
* ''心得介紹'':<br>選單工具列是個不常使用,卻又佔著視窗最上方位置的一個工具列。這個套件就是給覺得選單工具列礙眼的人用的。其實還有不少相似或能更進一步細設的套件,視情況選擇最合適自己的來用吧!。
> 讓火狐具備IE雙核心
* ''套件作者'':[[PCMan (Hong Jen Yee)|http://pcman.sayya.org/]], yuoo2k
* ''套件網頁'':[[mozdev|http://ietab.mozdev.org/]]、[[Add-ons#1419|https://addons.mozilla.org/zh-TW/firefox/addon/1419]]
* ''套件語系'':內建繁中
* ''撰寫版號'':1.3.3.20070528
* ''套件功能'':
** 在Firefox內以IE引擎檢視網頁。
** 可設定固定以IE開啟的網站名單。
** 可直接呼叫外部程式(可設定)來檢視頁面。
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?t=11081]]
* ''相關類似'':[[IE View]]
* ''心得介紹'':<br>遇上某些 IE Only 網頁時的好物。<br><br>話說自從發現這個具備【用外部程式檢視本頁】的功能後,個人連 [[IE View]] 都懶得裝了,反正泉慣用的也只有小狐和 IE 兩種瀏覽器而已。
> 呼叫 IE 檢視頁面
* ''套件作者'':[[Paul Roub|http://roub.net/]]
* ''套件網頁'':[[mozdev|http://ieview.mozdev.org/]]、[[Add-ons#35|https://addons.mozilla.org/zh-TW/firefox/addon/35]]
* ''套件語系'':內建繁中
* ''套件功能'':
** 能呼叫IE檢視頁面。
** 能設定特定頁面只用 IE 檢視。
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?t=8254]]
* ''相關類似'':[[IE Tab]]
* ''心得介紹'':<br>遇上 IE Only 可以便利呼叫IE來開啟的套件。不過其實現在都習慣直接用 [[IE Tab]] 的【用外部程式檢視本頁】功能,就沒在裝這個了。
> 快速上傳管理在 ImageShack 的圖
* ''套件作者'':jAgx
* ''套件網頁'':[[官方網頁|http://pimpsofpain.com/imagebot.html]]、[[Add-ons#1174|https://addons.mozilla.org/zh-TW/firefox/addon/1174]]
* ''套件語系'':英文其他
* ''撰寫版號'':4.0.1
* ''套件功能'':
** 拖拉即可將圖片直接上傳到 ImageShack 。
** 可在圖上點選右鍵直接上傳到 ImageShack 。
** 可會紀錄上傳的圖片,可直接刪除上傳到 ImageShack 的圖片。
** 可直接選取複數的圖並複製出特定格式的 HTML 及 BBCode 原始碼。
** 可自行撰寫原始碼範本。
* ''可相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?t=18403]]
* ''相關類似'':
* ''心得介紹'':<br>[[ImageShack|http://www.imageshack.us/]] 是一個免費的線上圖片空間,可上傳1.53MB以下的jpg、jpeg、png、gif、bmp、tif、tiff、swf檔型。除了直接上傳圖片外,如果有進行註冊,還可以對上傳的圖片進行管理。<br><br>這對常上傳圖檔的人一個很便利的上傳空間,也省去得一張張複製圖檔原始碼的時間。<br><br>中文介紹中有舊版 3.5.4 的 shyangs 私譯漢化,目前對應到 Firefox 3 的版本上尚無中譯。
> 快速插入常用字串並分類管理
* ''套件作者'':M. Onyshchuk
* ''套件網頁'':[[mozdev|http://informenter.mozdev.org/]]、[[Add-ons#673|https://addons.mozilla.org/zh-TW/firefox/addon/673/]]
* ''套件語系'':內建繁中
* ''撰寫版號'':0.5.5.3
* ''套件功能'':
** 在文字輸入欄旁及狀態列顯示箭頭圖示,點選後會列出設定好的字串列表供選擇插入。也可從滑鼠右鍵選取,或按【Insert】鍵叫出選單。
** 直接點選會蓋過文字方塊內的原有文字,要按著CTRL點選才不會蓋過去。
** 可將常用字串列表分類管理,再視情況選擇需要的群組使用。
* ''相關鏈結'':[[中文介紹|http://blog.joaoko.net/archives/153]]
* ''相關類似'':[[Clippings]]、[[Signature]]
* ''心得介紹'':<br>管理及插入多重常用字串極為便利的套件。因為個人常用字串需求量較少,--且偏好從右鍵選取--0.5.5.3已有從右鍵選取插入的功能,目前改用介面較簡潔的 [[Clippings]] 。
> 輕鬆列出你的套件清單
* ''套件作者'':Nickolay Ponomarev
* ''套件網頁'':[[官方網頁|http://mozilla.doslash.org/infolister/]]、[[Add-ons#447|https://addons.mozilla.org/zh-TW/firefox/addon/447]]
* ''套件語系'':內建繁中
* ''套件功能'':
** 列出你使用的套件、樣式、外掛。
** 支援純文字、HTML、XML、XPI、BBCode甚至自訂樣式來輸出列表。
** 支援FTP上傳下載清單。
* ''相關鏈結'':
* ''相關類似'':[[Extension List Dumper]]
* ''心得介紹'':<br>個人感想,真是太暴力了啦,居然還可以直接列一張安裝檔清單出來!當然這點的先決條件是你使用的套件有把套件更新站設正確才能辦到就是了。FTP個人就沒啥意見了,覺得沒什麼必要。不過這個套件不知道是跟泉的套件堆有衝到還是本身問題,泉使用這個套件有時會當掉。<br><br>目前改用[[Extension List Dumper]]來輸出套件清單。
> 分頁頁籤上的縮圖顯示
* ''套件作者'':[[SHIMODA Hiroshi|http://piro.sakura.ne.jp/xul/]]
* ''套件網頁'':[[官方網頁|http://piro.sakura.ne.jp/xul/_informationaltab.html]]、[[Add-ons#4930|https://addons.mozilla.org/zh-TW/firefox/addon/4930]]
* ''套件語系'':英文其他
* ''撰寫版號'':0.2.2007110601
* ''套件功能'':
** 在所有的分頁頁籤上顯示該分頁的縮圖。
** 可自訂顯示在分頁頁籤上的位置(左/中/右)。
** 可自訂顯示的寬度,可鎖定寬度或使用比例。
* ''相關鏈結'':
* ''相關類似'':[[Tab Catalog]]、[[Tab Scope]]
* ''心得介紹'':與 [[Tab Scope]] 要游標移過去才會顯示縮圖的方法不一樣, [[Informational Tab]] 是在分頁載入時就擷出縮圖放在分頁上顯示出來,個人比較喜歡這種沒有即時運算的顯示方法,不過相對就不能利用預覽小視窗做操作了。<br><br>比較接近 [[Tab Catalog]] 可以一覽可視分頁頁籤的縮圖。不過由於是在分頁頁籤上顯示,縮圖並非常小,大概只能知道構圖及色彩吧(笑)
> 為網頁加上便利貼
* ''套件作者'':Tim Horton
* ''套件網頁'':[[官方網頁|http://internote.sourceforge.net]]、[[Add-ons#2011|https://addons.mozilla.org/zh-TW/firefox/addon/2011]]
* ''套件語系'':內建簡中
* ''撰寫版號'':
* ''套件功能'':
** 可針對不同的網頁做出便利貼,讓自己快速加上註記文字。
** 可以設定便利貼的背景及文字顏色,大小也可以自己拉。
** 具備便利貼管理器,可依網站管理便利貼,亦可進行不同格式的匯出。
* ''相關鏈結'':[[中文介紹|http://ck69user.blogspot.com/2007/09/firefox-extension-34-internote.html]]
* ''相關類似'':
* ''心得介紹'':<br>快速為網頁加上註解的好用工具。
> 可保存的重點標記多色螢光筆
* ''套件作者'':[[SHIMODA Hiroshi|http://piro.sakura.ne.jp/xul/]]
* ''套件網頁'':[[官方網頁|http://piro.sakura.ne.jp/xul/_linemarker.html.en]]、[[Add-ons#1931|https://addons.mozilla.org/zh-TW/firefox/addon/1931]]
* ''套件語系'':英文其他
* ''撰寫版號'':2.0.2008040702
* ''套件功能'':
** 反白文字,右鍵快顯工具列選單有數種樣式的標記方式可選。
** 會自動保留螢光標記記錄。
** 右鍵快顯工具列選單提供刪除該標記/全頁標記的選項。
* ''相關鏈結'':
* ''相關類似'':[[TextMarker!]]、[[TextMarker Go]]
* ''心得介紹'':<br>大量瀏覽時有時候會想要畫重點,這時候這個套件就很好用了。且又具備保留標記的功能,下次再開啟可以看到同樣的標記。小缺點是不能自訂標記方式,預設的樣式雖然不少,可惜個人實在無法喜愛它的預設樣式色彩。
> 讓純文字網址自動變成鏈結
* ''套件作者'':[[y5|http://yellow5.us/firefox/]]
* ''套件網頁'':[[官方網頁|http://yellow5.us/firefox/linkification]]、[[Add-ons#190|https://addons.mozilla.org/zh-TW/firefox/addon/190]]
* ''套件語系'':內建繁中
* ''撰寫版號'':1.3.3
* ''套件功能'':
** 可自動轉換無法直接點選開啟的純文字網址成可點選的鏈結。
** 可設定開啟純文字網址鏈結的方式(視窗、分頁、前景、背景)。
** 可以熱鍵 Ctrl + Shift + L 進行轉換與否的切換。
** 可設定被轉換成鏈結的純文字之文字顏色及背景色,以求標明。
** 可設定網頁超過一定字數即不自動轉換純文字成鏈結(預設值是 15000 )。
* ''相關鏈結'':[[中文介紹|http://firefox2007.blogspot.com/2008/05/linkification.html]]
* ''相關類似'':[[Text Link]]
* ''心得介紹'':<br>很方便的的一個套件,如果常瀏覽純文字頁面,覺得很多純文字鏈結,得一個個處理很麻煩時很好用。泉的預設值是關閉,需要用時才從狀態列上的圖示進行切換,另一方面也避免因為這個套件造成 TiddlyWiki 頁面上會造成的插件衝突。
> RSS Feed 尋出並管理
* ''套件作者'':protejohnny
* ''套件網頁'':[[mozdev|http://liveclick.mozdev.org]]、[[Add-ons#2499|https://addons.mozilla.org/zh-TW/firefox/addon/2499]]
* ''套件語系'':內建繁中
* ''撰寫版號'':0.3.0.0b1
* ''套件功能'':
** 找出該頁面所提供的所有 RSS Feed 。
** 強活 Firefox 內建的 RSS Feed 管理。
* ''相關鏈結'':[[中文介紹|http://playpcesor.blogspot.com/2007/08/firefoxrssliveclick.html]]
* ''相關類似'':
* ''心得介紹'':<br>雖然現今有不少部落格及討論區或線上服務提供 Feed 訂閱的服務,但檢視網頁想加入 RSS Feed 時,往往要先把網頁翻過一遍才找得到該站提供的 RSS Feed 。管理的功能由於 Firefox 不是泉的 RSS Reader ,所以並沒在使用。
> 轉換你的火狐介面語言
* ''套件作者'':[[bsmedberg|http://benjamin.smedbergs.us/]]
* ''套件網頁'':[[官方網頁|http://benjamin.smedbergs.us/switch-locales/]]、[[Add-ons#356|https://addons.mozilla.org/zh-TW/firefox/addon/356]]、[[Mozilla FTP|http://releases.mozilla.org/pub/mozilla.org/firefox/releases/]]
* ''套件語系'':英文其他
* ''撰寫版號'':2.1
* ''套件功能'':
** 一個鍵轉換火狐介面的顯示語言。
** 針對需要的語言需要對應版本中去下載語言來安裝。
** 轉換後需重新開啟才會顯示。
* ''相關鏈結'':
* ''相關類似'':
* ''心得介紹'':<br>因為泉會去下載英文版的Portable Firefox來用,所以會需要靠這個套件來進行Firefox的介面語言轉換(不是轉換網頁語言喔)。不過最近都有人打包好處理完成的中文版供人下載就是了(笑)。如果有人想嚐試用不同的語言使用Firefox,也可以靠這個套件快速達成。<br><br>下載語言的路徑:[[Mozilla FTP|http://releases.mozilla.org/pub/mozilla.org/firefox/releases/]] → 找到對應的版號擊點進入 → 找到對應的OS(Windows系列是win32,另外也有Linux系列的選項linux-i686) → xpi → 尋找自己需要的語系檔下載,例如台灣的語系檔是zh-TW。<br><br>之後比照安裝備套的方式拖入Firefox安裝。假如是用Firefox 2.0.0.5,OS是Windows,語系檔的下載頁路徑即為<br>http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.5/win32/xpi/
> 查出搜尋出來的書籤在哪裡
* ''套件作者'':[[Alex Muntean|http://alex.muntean.name/]]
* ''套件網頁'':[[官方網頁|http://alex.muntean.name/projects/mozilla/extensions/Locate_in_Bookmark_Folders/]]、[[Add-ons#622|https://addons.mozilla.org/zh-TW/firefox/addon/622]]
* ''套件語系'':英文其他
* ''撰寫版號'':0.2.5
* ''套件功能'':
** 在書籤管理員中搜尋書籤,對搜尋出來的書籤點滑鼠右鍵【Locate】,就會跳到該書籤所在資料夾。
* ''相關鏈結'':
* ''相關類似'':
* ''心得介紹'':<br>搜尋書籤的便利工具,有了 [[Enhanced Bookmark Search]] 使搜尋書籤更加精確便利後,可以利用這個套件來確認書籤位置,強化 Firefox 的書籤管理功能!
> 讓網址列一目瞭然
* ''套件作者'':[[Dao Gottwald|http://design-noir.de/]]
* ''套件網頁'':[[官方網頁|http://en.design-noir.de/mozilla/locationbar2/]]、[[Add-ons#4014|https://addons.mozilla.org/zh-TW/firefox/addon/4014]]
* ''套件語系'':內建繁中
* ''撰寫版號'':0.9.1
* ''套件功能'':
** 強調網站根目錄,防止網路釣魚。
** 可將網址上面數層目錄都設成鏈結可直接點選。
** 可隱藏通訊協定。
** 美化網址列選擇自訂顏色。
* ''相關鏈結'':[[中文討論|http://forum.moztw.org/viewtopic.php?t=17686]]、[[中文介紹|http://forum.moztw.org/viewtopic.php?t=18191]]
* ''相關類似'':
* ''心得介紹'':<br>其實這個套件對我來說的好處,就是要回到網站的上幾層目錄時不用找鏈結找個半天或是自己去改網址吧…。
> 讓過長的網址文字自動分行
* ''套件作者'':Mel Reyes (aka: mrtech)
* ''套件網頁'':[[官方網頁|http://www.mrtech.com/extensions/]]、[[Add-ons#2021|https://addons.mozilla.org/zh-TW/firefox/addon/2021]]
* ''套件語系'':內建繁中
* ''撰寫版號'':2.1
* ''套件功能'':
** 讓過長的網址及文字自動斷行
** 可設定不啟用網址名單
* ''相關鏈結'':[[中文介紹|http://blog.joaoko.net/archives/120]]、[[應用介紹|http://forum.moztw.org/viewtopic.php?t=13494]]
* ''相關類似'':[[MR Tech Link Wrapper Lite|https://addons.mozilla.org/en-US/firefox/addon/2547]]
* ''心得介紹'':<br>Firefox不會自動折行,造成版面會橫向擴展,就需要這個套件幫忙了。不過白名單介面很不親切,只是以直線將白名單網址分開。<br><br>[[MR Tech Link Wrapper Lite|https://addons.mozilla.org/en-US/firefox/addon/2547]]是作者提供的輕型版,內容完全一樣,只是差在沒有狀態列的小圖示及設定介面,想設定必需進入config調整。
[[首頁]]
[[推薦|使用狀況]]
[[套件|擴充套件列表]]
[[佈景|佈景主題列表]]
<<tag 其他相關>>
[[鏈結|參考網站]]
[[留言板|http://users3.smartgb.com/g/g.php?a=s&i=g31-02354-d3]]
> 快速把鏈結複製成特定格式
* ''套件作者'':[[Rory Parle|http://www.soylentred.net/]]
* ''套件網頁'':[[官方網頁|http://www.soylentred.net/projects/make-link]]、[[Add-ons#142|https://addons.mozilla.org/zh-TW/firefox/addon/142]]
* ''套件語系'':內建繁中
* ''撰寫版號'':8.07
* ''套件功能'':
** 內建以純文字、HTML、BBCode等方式複製鏈結。
** 提供參數,可自訂要將鏈結以何種型式複製。
* ''相關鏈結'':[[中文介紹|http://]]、[[應用介紹|http://]]
* ''相關類似'':[[CoLT]]、[[Copy as HTML Link]]、[[Copy Link Name]]
* ''心得介紹'':<br>網路寫文的好幫手。同樣足以取代 [[Copy as HTML Link]] 、 [[Copy Link Name]] 這兩個套件的功能。<br><br>同樣功能的個人偏愛 [[CoLT]] ,所以沒在用這個。但實際 [[CoLT]] 和 [[Make Link]] 功能是差不多的,只是 [[CoLT]] 有把「複製鏈結名稱」這個功能獨立出來(內建,可更改設定),不若 [[Make Link]] 若想複製鏈結名稱得要自行編輯。--另外就是這個套件沒有內建多語系,雖然個人覺得實際上也沒什麼需要翻譯的選項。--8.07已內建繁體中文。
/***
!Metadata:
|''Name:''|ManageTiddlersPlugin|
|''Description:''|List tiddlers with specific tag and let you manage the multiple selected tiddlers.|
|''Version:''|1.2.0|
|''Date:''|Feb 28, 2007|
|''Source:''|http://www.sourceforge.net/projects/ptw/|
|''Author:''|BramChen (bram.chen (at) gmail (dot) com)|
|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License]]|
|''~CoreVersion:''|2.1.0|
|''Browser:''|Firefox 1.5+; InternetExplorer 6.0|
!Usage:
{{{
<<manageTiddlers
	[tags:'tag1|tag2|...|tagn']
	[listOnly:yes|no]
	[sortField:TiddlerField]
	[sortReverse: yes|no]
>>
(where tagn could be regular expressions)
}}}
!Revision History:
|''Version''|''Date''|''Note''|
|1.2.0|Feb 28, 2007|Supported multi-tags using regular expressions|
|1.1.0|Feb 27, 2007|Added feature Tags:"*" managing all tiddlers|
|1.0.0|Nov 23, 2006|Initial release|
!Code section:
***/
//{{{
version.extensions.manageTiddlers = {major: 1, minor: 21, revision: 0,
 date: new Date("Feb 28, 2007"),
 name: "manageTiddlers",
 type: "Plugin",
 author: "BramChen",
 source: "http://sourceforge.net/project/showfiles.php?group_id=150646"
};
config.options.txtManageTiddlersTag = "";
config.macros.manageTiddlers = {
	confirmDeleteText: "確認是否刪除此文章:\n\n%0",
	listViewTemplate: {
		columns: [
			{name: 'Selected', field: 'Selected', rowName: 'title', type: 'Selector'},
			{name: 'Title', field: 'title', tiddlerLink: 'title', title: "標題", type: 'TiddlerLink'},
//			{name: 'Author', field: 'modifier', title: '作者', type: 'String'},
//			{name: 'Created', field: 'created', title: '建立日期', type: 'Date', dateFormat: 'YYYY年0MM月0DD日,0hh:0mm'},
			{name: 'Snippet', field: 'text', title: '文章摘要', type: 'Snippet'},
//			{name: 'Modified', field: 'modified', title: '修改日期', type: 'Date', dateFormat: 'YYYY年0MM月0DD日,0hh:0mm'},
//			{name: 'Tags', field: 'tags', title: "標籤", type: 'Tags'}
			],
		rowClasses: [
			],
		actions: [
			{caption: "執行選項....", name: ''},
			{caption: "檢視文章", name: 'view'},
			{caption: "編輯文章", name: 'edit'},
			{caption: "刪除文章", name: 'delete'},
			{caption: "QuickEdit", name: 'QuickEdit'}
			]}
}
	
config.macros.manageTiddlers.handler = function(place,macroName,params,wikifier,paramString,tiddler){
	var e = createTiddlyElement(place,"div");
	e.setAttribute("refresh","macro");
	e.setAttribute("macroName","manageTiddlers");
	e.setAttribute("params",paramString);
	this.refresh(e,paramString);
}

config.macros.manageTiddlers.refresh = function(place,params){
	removeChildren(place);
	params = params.parseParams("anon",null,true,false,true);
	var tagged = (typeof params[0] == "undefined")?" ":params[0]["tags"];
	var sortField = params[0]["sortField"];
	var sortReverse = params[0]["sortReverse"];
	var tiddlers = (tagged == " ")?store.getNoTaggedTiddlers():(tagged == "*")?store.reverseLookup("tags","excludeLists",false,"title"):store.getMultiTaggedTiddlers(tagged,sortField);
	if (sortReverse == "yes") {
			tiddlers.sort(function(a,b) {return a[sortField] > b[sortField] ? -1 : (a[sortField] == b[sortField] ? 0 : +1);});
	}
	ListView.create(place,tiddlers,config.macros.manageTiddlers.listViewTemplate,config.macros.manageTiddlers.onSelectCommand);
	if ((params[0]["listOnly"]=="yes"))
		place.getElementsByTagName("select")[0].style.display='none';
}

config.macros.manageTiddlers.onSelectCommand = function(listView,command,rowNames){
	var lists = findRelated(listView,"manageTiddlers","className","parentNode");
	switch(command)
		{
		case "view":
			story.displayTiddlers(null,rowNames);
			break;
		case "edit":
			story.displayTiddlers(null,rowNames,DEFAULT_EDIT_TEMPLATE);
			break;
		case "delete":
			if(rowNames.length > 0 && confirm(config.macros.manageTiddlers.confirmDeleteText.format([rowNames.join(", ")])))
				{
				for(t=0; t<rowNames.length; t++)
					{
					store.removeTiddler(rowNames[t]);
					story.closeTiddler(rowNames[t],true,false);
					}
				}
			break;
		case "quickEdit":
			//Waiting ...
			break;
		}
}

// Add columnTypes, "Snipper", of ListView 
ListView.columnTypes.Snippet = {
	createHeader: function(place,columnTemplate,col)
		{
			createTiddlyText(place,columnTemplate.title);
		},
	createItem: function(place,listObject,field,columnTemplate,col,row)
		{
			var v = listObject[field];
			if(v != undefined)
				createTiddlyText(place,v.substr(0,v.indexOf("\n"))); 
		}
};
// Add a method getNoTaggedTiddlers to "TiddlyWiki"
TiddlyWiki.prototype.getNoTaggedTiddlers = function()
{
	var results = [];
	this.forEachTiddler(function (title,tiddler) {
		if(tiddler.tags.length==0)
			results.push(tiddler);
		});
	results.sort();
	return results;
}
TiddlyWiki.prototype.getMultiTaggedTiddlers = function(tags,sortField)
{
	var re = new RegExp(tags,'mg');
	var results = [];
	this.forEachTiddler(function(title,tiddler) {
		if(tiddler.tags.toString().match(re))
			results.push(tiddler);
	});
	if(!sortField)
		sortField = "title";
	results.sort(function(a,b) {return a[sortField] < b[sortField] ? -1 : (a[sortField] == b[sortField] ? 0 : +1);});
	return results;
};
//}}}
> 便利的網頁尺規
* ''套件作者'':[[Kevin Freitas|http://www.kevinfreitas.net/]]
* ''套件網頁'':[[官方網頁|http://www.kevinfreitas.net/extensions/measureit/]]、[[Add-ons#539|https://addons.mozilla.org/zh-TW/firefox/addon/539]]
* ''套件語系'':英文其他
* ''撰寫版號'':
* ''套件功能'':
** 隨時丈量頁面上各區域的尺寸。
* ''相關鏈結'':
* ''相關類似'':[[Web Developer]]
* ''心得介紹'':<br>有時需要測量網頁上東西尺寸時可用。不過事實上 [[Web Developer]] 也具備尺規的功能,雖然早期還較為陽春,但目前已經改進得非常直覺便利。若有安裝 [[Web Developer]] ,個人是建議不用另外安裝本套件了。
> 編輯你的選單項目
* ''套件作者'':[[Devon Jensen|http://dlstatusbar.proboards43.com/]], Nickolay Ponomarev
* ''套件網頁'':[[mozdev|http://menueditor.mozdev.org/]]、[[Add-ons#710|https://addons.mozilla.org/zh-TW/firefox/addon/710]]
* ''套件語系'':內建繁中
* ''撰寫版號'':
* ''套件功能'':
** 自訂工具列選單。
** 自訂滑鼠右鍵選單列表。
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?t=5920]]
* ''相關類似'':[[Personal Menu]]
* ''心得介紹'':<br>套件安裝多了,總會覺得滑鼠右選單列表和工具列的選單都越來越冗長,不必要的選項越來越多。這時候你就需要這個套件來設定你的選單列表,把不用的隱藏起來或設定順手的位置。<br><br>雖然個人覺得是不錯的套件,可惜不知道是否有套件相衝突,泉安裝後使用起來穩定性不足,加以懶得管理右鍵選單,所以沒用多久就被泉捨棄了。
 |充滿歷史感的三百壯士
* ''佈景作者'':[[Frank Lion|http://franklion.blog.co.uk/]]
* ''佈景網頁'':[[Add-ons#5701|https://addons.mozilla.org/zh-TW/firefox/addon/5701]]
* ''佈景介紹'':<br>老實說泉覺得這個佈景主題非常妙,看到時忍不住笑了出來。不過妙歸妙,做得非常有古典的羅馬氣質,就算是電影主題也相當成功呢!
 |素雅的白色佈景
* ''佈景作者'':[[Frank Lion|http://franklion.blog.co.uk/]]
* ''佈景網頁'':[[Add-ons#2476|https://addons.mozilla.org/zh-TW/firefox/addon/2476]]
* ''佈景介紹'':<br>除了白還是白,泉自己非常喜愛的素雅有質感的佈景。
> 備分你的 Firefox 設定
* ''網頁'':[[官方網頁|http://mozbackup.jasnapaka.com/]]
* ''功能'':
** 把 Firefox 內的擴充套件、佈景主題、書籤、Cookie、密碼、個人設定等備分成檔案。
** 需要時可以進行這些資料的還原。
* ''相關'':[[MozBackup 正體中文站 |http://inxtyle.com/mozbackup/]]
* ''心得'':<br>相較於使用 Portable 的備份容易,對使用安裝版的人來說,如何備分自己的 Firefox 設定一定是件相當困擾的事情。這個小軟體的出現讓你可以備份你的各種私人資料,並且帶去他方電腦做還原。<br><br>稍微遺憾的是沒有支援 Firefox Portable 的備分,雖然目前尚在測試中的 1.4.8bate 是有 Firefox Portable 的選項可選,但個人對 Firefox Portable 3.0 bata 5 的測試並未成功,可能還是得等正式版出來吧?
> 把設定和套件帶著跑
* ''網頁'':[[官方網頁|http://portableapps.com/]]
* ''功能'':
** 把設定和套件及 Firefox 本體全放在同一個資料夾下,變成可攜式軟體。
** 使用時點選 ''FirefoxPortable.exe'' 即可。
* ''相關'':[[OpenOffice.org Portable 非公式正體中文版|http://tw-portableapps.blogspot.com/]]、[[中文介紹|http://wiki.moztw.org/index.php/Portable_Firefox_%E4%BD%BF%E7%94%A8%E3%80%81%E8%87%AA%E8%A8%82%E8%88%87%E4%B8%AD%E6%96%87%E5%8C%96]]
* ''心得'':<br>有時換個電腦就要重新進行 Firefox 的設定及套件安裝實在太累,這時候就就要靠這個了!目前有  OpenOffice 非官方正體中文網站有在做該中文化的動作,推薦中文使用者可以去該站下載。<br><br>小缺點是可能會比安裝版稍微有所延遲,有些電腦在第一次開啟時會要等待較長的時間,之後就不需要那麼久。另外若你放在隨身碟內執行,會視該電腦讀取隨身碟的速度而改變讀取速度,是故個人偏愛直接放入電腦硬碟內執行。<br><br>基本上養成使用這個的習慣後,根本不會想要在電腦裡裝小狐,因為這樣隨時可以開新的出來做玩耍測試,不用擔心把自家小狐玩壞呀!
> 一次對複數分頁動作
* ''套件作者'':[[SHIMODA Hiroshi|http://piro.sakura.ne.jp/xul/]]
* ''套件網頁'':[[官方網頁|http://piro.sakura.ne.jp/xul/_multipletab.html.en]]、[[Add-ons#4838|https://addons.mozilla.org/zh-TW/firefox/addon/4838]]
* ''套件語系'':英文其他
* ''撰寫版號'':0.2.2007111801
* ''套件功能'':
** 按著 CTRL 鍵去點選分頁,可選取複數連續或不連續分頁同時進行動作。
** 可執行動作:加入書籤、複製網址/標題及網址/成HTML碼、複製分頁、移到新視窗、關閉等。
* ''相關鏈結'':
* ''相關類似'':
* ''心得介紹'':<br>其實我常覺得 Firefox 內鍵的加入書籤功能很狹隘,只能一次加一個或一次全加入。泉通常都是想要一次加入某幾個,不是全部,也不是一個,因此常都得一個個手動加入,有了這個就便利許多了。
/***
|Name|NestedSlidersPlugin|
|Source|http://www.TiddlyTools.com/#NestedSlidersPlugin|
|Version|2.3.2|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides|Slider.prototype.stop|
|Description|show content in nest-able 'slider' or 'floating' panels, without needing to create separate tiddlers for each panel|

!!!!!Configuration
<<<
Enable animation for slider panels
<<option chkFloatingSlidersAnimate>> allow sliders to animate when opening/closing
>(note: This setting is in //addition// to the general option for enabling/disabling animation effects:
><<option chkAnimate>> enable animations (entire document)
>For slider animation to occur, you must also allow animation in general.

Debugging messages for 'lazy sliders' deferred rendering:
<<option chkDebugLazySliderDefer>> show debugging alert when deferring slider rendering
<<option chkDebugLazySliderRender>> show debugging alert when deferred slider is actually rendered
<<<
!!!!!Usage
<<<
When installed, this plugin adds new wiki syntax for embedding 'slider' panels directly into tiddler content.  Use {{{+++}}} and {{{===}}} to delimit the slider content.  You can also 'nest' these sliders as deep as you like (see complex nesting example below), so that expandable 'tree-like' hierarchical displays can be created.  This is most useful when converting existing in-line text content to create in-line annotations, footnotes, context-sensitive help, or other subordinate information displays.

Additional optional syntax elements let you specify
*default to open
*cookiename
*heading level
*floater (with optional CSS width value)
*transient display (clicking elsewhere closes panel)
*custom class/label/tooltip/accesskey
*alternate label/tooltip (displayed when panel is open)
*panelID (for later use with {{{<<DOM>>}}} macro.  See [[DOMTweaksPlugin]])
*automatic blockquote style on panel
*deferred rendering of panel content
The complete syntax, using all options, is:
//{{{
++++(cookiename)!!!!!^width^*{{class{[label=key|tooltip][altlabel|alttooltip]}}}#panelID:>...
content goes here
===
//}}}
where:
* {{{+++}}} (or {{{++++}}}) and {{{===}}}<br>marks the start and end of the slider definition, respectively.  When the extra {{{+}}} is used, the slider will be open when initially displayed.
* {{{(cookiename)}}}<br>saves the slider opened/closed state, and restores this state whenever the slider is re-rendered.
* {{{!}}} through {{{!!!!!}}}<br>displays the slider label using a formatted headline (Hn) style instead of a button/link style
* {{{^width^}}} (or just {{{^}}})<br>makes the slider 'float' on top of other content rather than shifting that content downward.  'width' must be a valid CSS value (e.g., "30em", "180px", "50%", etc.).  If omitted, the default width is "auto" (i.e., fit to content)
* {{{"*"}}} //(without the quotes)//<br>denotes "transient display": when a click occurs elsewhere in the document, the slider/floating panel will be automatically closed.  This is useful for creating 'pulldown menus' that automatically go away after they are used.  //Note: using SHIFT-click on a slider label will open/close that slider without triggering the automatic closing of any transient slider panels that are currently displayed, permitting ''temporary'' display of several transient panels at once.//
* """{{class{[label=key|tooltip][altlabel|alttooltip]}}}"""<br>uses label/tooltip/accesskey.  """{{class{...}}}""", """=key""", """|tooltip""" and """[altlabel|alttooltip]""" are optional.  'class' is any valid CSS class name, used to style the slider label text.  'key' must be a ''single letter only''.  altlabel/alttooltip specifiy alternative label/tooltip for use when slider/floating panel is displayed.
* {{{#panelID:}}}<br>defines a unique DOM element ID that is assigned to the panel element used to display the slider content.  This ID can then be used later to reposition the panel using the {{{<<DOM move id>>}}} macro (see [[DOMTweaksPlugin]]), or to access/modify the panel element through use of {{{document.getElementById(...)}}}) javascript code in a plugin or inline script.
* {{{">"}}} //(without the quotes)//<br>automatically adds blockquote formatting to slider content
* {{{"..."}}} //(without the quotes)//<br>defers rendering of closed sliders until the first time they are opened.  //Note: deferred rendering may produce unexpected results in some cases.  Use with care.//

//Note: to make slider definitions easier to read and recognize when editing a tiddler, newlines immediately following the {{{+++}}} 'start slider' or preceding the {{{===}}} 'end slider' sequence are automatically supressed so that excess whitespace is eliminated from the output.//
<<<
!!!!!Examples
<<<
simple in-line slider: 
{{{
+++
   content
===
}}}
+++
   content
===
----
use a custom label and tooltip: 
{{{
+++[label|tooltip]
   content
===
}}}
+++[label|tooltip]
   content
===
----
content automatically blockquoted: 
{{{
+++>
   content
===
}}}
+++>
   content
===
----
all options combined //(default open, cookie, heading, sized floater, transient, class, label/tooltip/key, blockquoted, deferred)//
{{{
++++(testcookie)!!!^30em^*{{big{[label=Z|click or press Alt-Z to open]}}}>...
   content
===
}}}
++++(testcookie)!!!^30em^*{{big{[label=Z|click or press Alt-Z to open]}}}>...
   content
===
----
complex nesting example:
{{{
+++[get info...=I|click for information or press Alt-I]
	put some general information here,
	plus a floating panel with more specific info:
	+++^10em^[view details...|click for details]
		put some detail here, which could in turn contain a transient panel,
		perhaps with a +++^25em^*[glossary definition]explaining technical terms===
	===
===
}}}
+++[get info...=I|click for information or press Alt-I]
	put some general information here,
	plus a floating panel with more specific info:
	+++^10em^[view details...|click for details]
		put some detail here, which could in turn contain a transient panel,
		perhaps with a +++^25em^*[glossary definition]explaining technical terms===
	===
===
<<<
!!!!!Installation
<<<
import (or copy/paste) the following tiddlers into your document:
''NestedSlidersPlugin'' (tagged with <<tag systemConfig>>)
<<<
!!!!!Revision History
<<<
''2007.11.14 - 2.3.2'' in onClickNestedSlider(), prevent SHIFT-click events from opening a new, empty browser window by setting "cancelBubble=true" and calling "stopPropagation()".  Note: SHIFT-click is still processed as a normal click (i.e., it toggles the slider panel display).  Also, using SHIFT-click will prevent 'transient' sliders from being automatically closed when another slider is opened, allowing you to *temporarily* display several transient sliders at once.
''2007.07.26 - 2.3.1'' in document.onclick(), propagate return value from hijacked core click handler to consume OR bubble up click as needed.  Fixes "IE click disease", whereby nearly every mouse click causes a page transition.
|please see [[NestedSlidersPluginHistory]] for additional revision details|
''2005.11.03 - 1.0.0'' initial public release
<<<
!!!!!Credits
<<<
This feature was implemented by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]] with initial research and suggestions from RodneyGomes, GeoffSlocock, and PaulPetterson.
<<<
!!!!!Code
***/
//{{{
version.extensions.nestedSliders = {major: 2, minor: 3, revision: 2, date: new Date(2007,11,14)};
//}}}

//{{{
// options for deferred rendering of sliders that are not initially displayed
if (config.options.chkDebugLazySliderDefer==undefined) config.options.chkDebugLazySliderDefer=false;
if (config.options.chkDebugLazySliderRender==undefined) config.options.chkDebugLazySliderRender=false;
if (config.options.chkFloatingSlidersAnimate==undefined) config.options.chkFloatingSlidersAnimate=false;

// default styles for 'floating' class
setStylesheet(".floatingPanel { position:absolute; z-index:10; padding:0.5em; margin:0em; \
	background-color:#eee; color:#000; border:1px solid #000; text-align:left; }","floatingPanelStylesheet");
//}}}

//{{{
config.formatters.push( {
	name: "nestedSliders",
	match: "\\n?\\+{3}",
	terminator: "\\s*\\={3}\\n?",
	lookahead: "\\n?\\+{3}(\\+)?(\\([^\\)]*\\))?(\\!*)?(\\^(?:[^\\^\\*\\[\\>]*\\^)?)?(\\*)?(?:\\{\\{([\\w]+[\\s\\w]*)\\{)?(\\[[^\\]]*\\])?(\\[[^\\]]*\\])?(?:\\}{3})?(\\#[^:]*\\:)?(\\>)?(\\.\\.\\.)?\\s*",
	handler: function(w)
		{
			lookaheadRegExp = new RegExp(this.lookahead,"mg");
			lookaheadRegExp.lastIndex = w.matchStart;
			var lookaheadMatch = lookaheadRegExp.exec(w.source)
			if(lookaheadMatch && lookaheadMatch.index == w.matchStart)
			{
				// var defopen=lookaheadMatch[1]
				// var cookiename=lookaheadMatch[2]
				// var header=lookaheadMatch[3]
				// var panelwidth=lookaheadMatch[4]
				// var transient=lookaheadMatch[5]
				// var class=lookaheadMatch[6]
				// var label=lookaheadMatch[7]
				// var openlabel=lookaheadMatch[8]
				// var panelID=lookaheadMatch[9]
				// var blockquote=lookaheadMatch[10]
				// var deferred=lookaheadMatch[11]

				// location for rendering button and panel
				var place=w.output;

				// default to closed, no cookie, no accesskey, no alternate text/tip
				var show="none"; var cookie=""; var key="";
				var closedtext=">"; var closedtip="";
				var openedtext="<"; var openedtip="";

				// extra "+", default to open
				if (lookaheadMatch[1]) show="block";

				// cookie, use saved open/closed state
				if (lookaheadMatch[2]) {
					cookie=lookaheadMatch[2].trim().slice(1,-1);
					cookie="chkSlider"+cookie;
					if (config.options[cookie]==undefined)
						{ config.options[cookie] = (show=="block") }
					show=config.options[cookie]?"block":"none";
				}

				// parse label/tooltip/accesskey: [label=X|tooltip]
				if (lookaheadMatch[7]) {
					var parts=lookaheadMatch[7].trim().slice(1,-1).split("|");
					closedtext=parts.shift();
					if (closedtext.substr(closedtext.length-2,1)=="=")	
						{ key=closedtext.substr(closedtext.length-1,1); closedtext=closedtext.slice(0,-2); }
					openedtext=closedtext;
					if (parts.length) closedtip=openedtip=parts.join("|");
					else { closedtip="show "+closedtext; openedtip="hide "+closedtext; }
				}

				// parse alternate label/tooltip: [label|tooltip]
				if (lookaheadMatch[8]) {
					var parts=lookaheadMatch[8].trim().slice(1,-1).split("|");
					openedtext=parts.shift();
					if (parts.length) openedtip=parts.join("|");
					else openedtip="hide "+openedtext;
				}

				var title=show=='block'?openedtext:closedtext;
				var tooltip=show=='block'?openedtip:closedtip;

				// create the button
				if (lookaheadMatch[3]) { // use "Hn" header format instead of button/link
					var lvl=(lookaheadMatch[3].length>6)?6:lookaheadMatch[3].length;
					var btn = createTiddlyElement(createTiddlyElement(place,"h"+lvl,null,null,null),"a",null,lookaheadMatch[6],title);
					btn.onclick=onClickNestedSlider;
					btn.setAttribute("href","javascript:;");
					btn.setAttribute("title",tooltip);
				}
				else
					var btn = createTiddlyButton(place,title,tooltip,onClickNestedSlider,lookaheadMatch[6]);
				btn.innerHTML=title; // enables use of HTML entities in label

				// set extra button attributes
				btn.setAttribute("closedtext",closedtext);
				btn.setAttribute("closedtip",closedtip);
				btn.setAttribute("openedtext",openedtext);
				btn.setAttribute("openedtip",openedtip);
				btn.sliderCookie = cookie; // save the cookiename (if any) in the button object
				btn.defOpen=lookaheadMatch[1]!=null; // save default open/closed state (boolean)
				btn.keyparam=key; // save the access key letter ("" if none)
				if (key.length) {
					btn.setAttribute("accessKey",key); // init access key
					btn.onfocus=function(){this.setAttribute("accessKey",this.keyparam);}; // **reclaim** access key on focus
				}
				btn.onmouseover=function(event) // mouseover on button aligns floater position with button
					{ if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this,this.sliderPanel,this.sliderPanel.className); }

				// create slider panel
				var panelClass=lookaheadMatch[4]?"floatingPanel":"sliderPanel";
				var panelID=lookaheadMatch[9]; if (panelID) panelID=panelID.slice(1,-1); // trim off delimiters
				var panel=createTiddlyElement(place,"div",panelID,panelClass,null);
				panel.button = btn; // so the slider panel know which button it belongs to
				btn.sliderPanel=panel; // so the button knows which slider panel it belongs to
				panel.defaultPanelWidth=(lookaheadMatch[4] && lookaheadMatch[4].length>2)?lookaheadMatch[4].slice(1,-1):"";
				panel.setAttribute("transient",lookaheadMatch[5]=="*"?"true":"false");
				panel.style.display = show;
				panel.style.width=panel.defaultPanelWidth;
				panel.onmouseover=function(event) // mouseover on panel aligns floater position with button
					{ if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this.button,this,this.className); }

				// render slider (or defer until shown) 
				w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
				if ((show=="block")||!lookaheadMatch[11]) {
					// render now if panel is supposed to be shown or NOT deferred rendering
					w.subWikify(lookaheadMatch[10]?createTiddlyElement(panel,"blockquote"):panel,this.terminator);
					// align floater position with button
					if (window.adjustSliderPos) window.adjustSliderPos(place,btn,panel,panelClass);
				}
				else {
					var src = w.source.substr(w.nextMatch);
					var endpos=findMatchingDelimiter(src,"+++","===");
					panel.setAttribute("raw",src.substr(0,endpos));
					panel.setAttribute("blockquote",lookaheadMatch[10]?"true":"false");
					panel.setAttribute("rendered","false");
					w.nextMatch += endpos+3;
					if (w.source.substr(w.nextMatch,1)=="\n") w.nextMatch++;
					if (config.options.chkDebugLazySliderDefer) alert("deferred '"+title+"':\n\n"+panel.getAttribute("raw"));
				}
			}
		}
	}
)

// TBD: ignore 'quoted' delimiters (e.g., "{{{+++foo===}}}" isn't really a slider)
function findMatchingDelimiter(src,starttext,endtext) {
	var startpos = 0;
	var endpos = src.indexOf(endtext);
	// check for nested delimiters
	while (src.substring(startpos,endpos-1).indexOf(starttext)!=-1) {
		// count number of nested 'starts'
		var startcount=0;
		var temp = src.substring(startpos,endpos-1);
		var pos=temp.indexOf(starttext);
		while (pos!=-1)  { startcount++; pos=temp.indexOf(starttext,pos+starttext.length); }
		// set up to check for additional 'starts' after adjusting endpos
		startpos=endpos+endtext.length;
		// find endpos for corresponding number of matching 'ends'
		while (startcount && endpos!=-1) {
			endpos = src.indexOf(endtext,endpos+endtext.length);
			startcount--;
		}
	}
	return (endpos==-1)?src.length:endpos;
}
//}}}

//{{{
window.onClickNestedSlider=function(e)
{
	if (!e) var e = window.event;
	var theTarget = resolveTarget(e);
	var theLabel = theTarget.firstChild.data;
	var theSlider = theTarget.sliderPanel
	var isOpen = theSlider.style.display!="none";

	// toggle label
	theTarget.innerHTML=isOpen?theTarget.getAttribute("closedText"):theTarget.getAttribute("openedText");
	// toggle tooltip
	theTarget.setAttribute("title",isOpen?theTarget.getAttribute("closedTip"):theTarget.getAttribute("openedTip"));

	// deferred rendering (if needed)
	if (theSlider.getAttribute("rendered")=="false") {
		if (config.options.chkDebugLazySliderRender)
			alert("rendering '"+theLabel+"':\n\n"+theSlider.getAttribute("raw"));
		var place=theSlider;
		if (theSlider.getAttribute("blockquote")=="true")
			place=createTiddlyElement(place,"blockquote");
		wikify(theSlider.getAttribute("raw"),place);
		theSlider.setAttribute("rendered","true");
	}
	// show/hide the slider
	if(config.options.chkAnimate && (theSlider.className!='floatingPanel' || config.options.chkFloatingSlidersAnimate))
		anim.startAnimating(new Slider(theSlider,!isOpen,e.shiftKey || e.altKey,"none"));
	else
		theSlider.style.display = isOpen ? "none" : "block";
	// reset to default width (might have been changed via plugin code)
	theSlider.style.width=theSlider.defaultPanelWidth;
	// align floater panel position with target button
	if (!isOpen && window.adjustSliderPos) window.adjustSliderPos(theSlider.parentNode,theTarget,theSlider,theSlider.className);
	// if showing panel, set focus to first 'focus-able' element in panel
	if (theSlider.style.display!="none") {
		var ctrls=theSlider.getElementsByTagName("*");
		for (var c=0; c<ctrls.length; c++) {
			var t=ctrls[c].tagName.toLowerCase();
			if ((t=="input" && ctrls[c].type!="hidden") || t=="textarea" || t=="select")
				{ ctrls[c].focus(); break; }
		}
	}
	var cookie=theTarget.sliderCookie;
	if (cookie && cookie.length) {
		config.options[cookie]=!isOpen;
		if (config.options[cookie]!=theTarget.defOpen)
			saveOptionCookie(cookie);
		else { // remove cookie if slider is in default display state
			var ex=new Date(); ex.setTime(ex.getTime()-1000);
			document.cookie = cookie+"=novalue; path=/; expires="+ex.toGMTString();
		}
	}
	// prevent SHIFT-CLICK from being processed by browser (opens blank window... yuck!)
	// but allow plain click to bubble up to page background (to dismiss open popup, if any)
	if (e.shiftKey) { e.cancelBubble=true; if (e.stopPropagation) e.stopPropagation(); }
	return false;
}
//}}}

//{{{
// click in document background closes transient panels 
document.nestedSliders_savedOnClick=document.onclick;
document.onclick=function(ev) { if (!ev) var ev=window.event; var target=resolveTarget(ev);
	// call original click handler
	if (document.nestedSliders_savedOnClick)
		var retval=document.nestedSliders_savedOnClick.apply(this,arguments);
	// if click was inside transient panel (or something contained by a transient panel)... leave it alone
	var p=target;
	while (p)
		if ((p.className=="floatingPanel"||p.className=="sliderPanel")&&p.getAttribute("transient")=="true") break;
		else p=p.parentNode;
	if (p) return retval;
	// otherwise, find and close all transient panels...
	var all=document.all?document.all:document.getElementsByTagName("DIV");
	for (var i=0; i<all.length; i++) {
		 // if it is not a transient panel, or the click was on the button that opened this panel, don't close it.
		if (all[i].getAttribute("transient")!="true" || all[i].button==target) continue;
		// otherwise, if the panel is currently visible, close it by clicking it's button
		if (all[i].style.display!="none") window.onClickNestedSlider({target:all[i].button}) 
	}
	return retval;
};
//}}}

//{{{
// adjust floating panel position based on button position
if (window.adjustSliderPos==undefined) window.adjustSliderPos=function(place,btn,panel,panelClass) {
	if (panelClass=="floatingPanel") {
		var left=0;
		var top=btn.offsetHeight; 
		if (place.style.position!="relative") {
			var left=findPosX(btn);
			var top=findPosY(btn)+btn.offsetHeight;
			var p=place; while (p && p.className!='floatingPanel') p=p.parentNode;
			if (p) { left-=findPosX(p); top-=findPosY(p); }
		}
		if (findPosX(btn)+panel.offsetWidth > getWindowWidth())  // adjust position to stay inside right window edge
			left-=findPosX(btn)+panel.offsetWidth-getWindowWidth()+15; // add extra 15px 'fudge factor'
		panel.style.left=left+"px"; panel.style.top=top+"px";
	}
}

function getWindowWidth() {
	if(document.width!=undefined)
		return document.width; // moz (FF)
	if(document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) )
		return document.documentElement.clientWidth; // IE6
	if(document.body && ( document.body.clientWidth || document.body.clientHeight ) )
		return document.body.clientWidth; // IE4
	if(window.innerWidth!=undefined)
		return window.innerWidth; // IE - general
	return 0; // unknown
}
//}}}

//{{{
// TW2.1 and earlier:
// hijack Slider animation handler 'stop' handler so overflow is visible after animation has completed
Slider.prototype.coreStop = Slider.prototype.stop;
Slider.prototype.stop = function()
	{ this.coreStop.apply(this,arguments); this.element.style.overflow = "visible"; }

// TW2.2+
// hijack Morpher animation handler 'stop' handler so overflow is visible after animation has completed
if (version.major+.1*version.minor+.01*version.revision>=2.2) {
	Morpher.prototype.coreStop = Morpher.prototype.stop;
	Morpher.prototype.stop = function()
		{ this.coreStop.apply(this,arguments); this.element.style.overflow = "visible"; }
}
//}}}
> 強制安裝版號不容的擴充套件
* ''套件作者'':[[Mossop|http://www.oxymoronical.com]]
* ''套件網頁'':[[官方網頁|http://www.oxymoronical.com/web/firefox/nightly]]、[[Add-ons#6543|https://addons.mozilla.org/zh-TW/firefox/addon/6543]]
* ''套件語系'':英文其他
* ''撰寫版號'':2.0.2
* ''套件功能'':
** 簡便選擇關閉/開啟附加元件的相容性檢查及附加元件更新時的安全性檢查,使不相容的套件可以安裝。
** 一鍵修改版號不相容的套件使之版號相容。
** 可列出安裝套件列表。
* ''相關鏈結'':
* ''相關類似'':
* ''心得介紹'':<br>讓版號不相容的擴充套件可以強制安裝。但要注意,能安裝不代表能正常運作,所以安裝後也得觀察擴充套件的運作狀況。<br><br>主要用途在於 Firefox 版本交替的過渡期時的過渡套件,平常大概會裝的人比較少吧?
> 去除過於花俏的網頁色彩
* ''套件作者'':[[Hemiolasun|http://hemiolasun.free.fr/]]
* ''套件網頁'':[[官方網頁|http://hemiolapei.free.fr/extensions/index.php/no-color]]
* ''套件語系'':內建繁中
* ''撰寫版號'':0.2.3
* ''撰寫版號'':
* ''套件功能'':
** 自訂工具列新增一個【切換文字配色】的按鈕,另可設定在狀態列顯示圖示。
** 按下去可切換去除網頁的色彩指定及背景與否,而不影響版面配置。
* ''相關鏈結'':
* ''相關類似'':
* ''心得介紹'':<br>非常簡潔明瞭的套件,就是用來脫去網頁的色彩指定及背景。適合遇到過於花俏有礙瀏覽的網頁時使用的好幫手。
> 記住你的網頁縮放比例
* ''套件作者'':Jason Tackaberry
* ''套件網頁'':[[官方網頁|http://urandom.ca/nosquint/]]、[[Add-ons#2592|https://addons.mozilla.org/zh-TW/firefox/addon/2592]]
* ''套件語系'':英文其他
* ''撰寫版號'':1.93.2.1
* ''套件功能'':
** 可以分開設定網站的文字及整體縮放比例。
** 可設定瀏覽網站時預設改變文字及整體縮放比例。
** 可設定記住瀏覽網站設定的縮放比例(可設定多久沒訪問即遺忘使用的比例)。
** 在狀態列可顯示整體/文字縮放比例,並即時改變(可設定不顯示)。
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?t=19039]]
* ''相關類似'':
* ''心得介紹'':<br>剛安裝時會預設把整體及文字都放大,所以剛安裝可能得去修改一下預設比例。<br><br>常瀏覽某些比例過小或過大的網站時非常便利的套件;且文字和整體比例是分開算的,對某些整體放大會超出視窗的網站也很方便。
> 加入書籤時自動展開列表
* ''套件作者'':[[chunth|http://www.chuonthis.com/extensions/]]
* ''套件網頁'':[[官方網頁|http://www.chuonthis.com/extensions/#openbook]]、[[Add-ons#42|https://addons.mozilla.org/zh-TW/firefox/addon/42]]
* ''套件語系'':私譯繁中
* ''套件功能'':
** 使加入書籤時除了預設的名稱網址外除了預設的名稱網址外,亦可設定說明、關鍵字。
** 可儲存上一次加入書籤的目錄,並自動把書籤目錄展開。
** 以上皆可進設定依個人需求訂定。
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?t=6249]]
* ''相關類似'':[[Add Bookmark Here ²]]
* ''心得介紹'':<br>因應 Firefox 的書籤加入功能過於陽春,使之更為便利的好套件。在 [[Add Bookmark Here ²]] 是泉自己的必備套件。<br><br>目前已經改用 [[Add Bookmark Here ²]] 這個整個套件取代。
> 簡單快速自製你需要的搜尋引擎
* ''套件作者'':Milx
* ''套件網頁'':--[[Add-ons#3698|https://addons.mozilla.org/zh-TW/firefox/addon/3698]]--
* ''套件語系'':內建繁中
* ''撰寫版號'':0.1.5
* ''套件功能'':
** 從右鍵選項簡單將網頁上搜尋欄位製成 Firefox 搜尋引擎用的 xml 檔。
** 多重選項型搜尋會詢問你要製做何種搜尋。
** 可以備妥的圖片取代網頁預設的小圖示。
* ''相關鏈結'':[[社群討論|http://forum.moztw.org/viewtopic.php?t=16122]]
* ''相關類似'':[[Add to Search Bar]]
* ''心得介紹'':<br>非常棒的擴充套件!只要你知道搜尋用的網站在哪裡,就可以隨自己高興的製作個人需要的搜尋引擎,而不用大費心思去尋找或自行花心思製作某些冷門搜尋網站的搜尋引擎。<br><br>使用上也非常簡單,只要把游標放在網頁上的搜尋文字輸入區,按右鍵就會有加入搜尋引擎的選項。不過用慣後搜尋引擎很容易變得長長一列後,說不定就很需要[[Organize Search Engines]]來進行搜尋引擎的管理了(笑)。<br><br>''已前似乎已停止更新,並從 Mozilla Add-ons 下架,可改用 [[Add to Search Bar]] 來製作搜尋引擎。''
> 進階管理你的搜尋引擎
* ''套件作者'':Dr. Evil
* ''套件網頁'':[[官方網頁|http://maltekraus.de/Firefox/search-tools/]]、[[Add-ons#4565|https://addons.mozilla.org/zh-TW/firefox/addon/4565]]
* ''套件語系'':英文其他
* ''撰寫版號'':1.1.2
* ''套件功能'':
** 在搜尋引擎間加上分隔線
** 為搜尋引擎建立資料夾分類
** 為搜尋引擎加上關鍵字(keyword),可以在網址列直接輸入「搜尋引擎keyword 要搜尋文字」來進行特定搜尋引擎的查詢。
* ''相關鏈結'':[[中文介紹|http://blog.joaoko.net/archives/321]]
* ''相關類似'':[[SearchWords]]
* ''心得介紹'':<br>雖然 Firefox 2.0 起就有內建搜尋引擎的管理,但只具備簡單的上下排序功能而已。這個套件對有安裝大量搜尋引擎習慣的人而言,更可以達到管理搜尋引擎的功效!<br><br>keyword功能讓呼叫常用的搜尋引擎更為便利,雖然Firefox本來就有內建將特定的搜尋用書籤關鍵字存成書籤進行搜尋的便利功能,但直接利用搜尋引擎管理更為直覺,管理也更容易。<br><br>另外一提,若有用[[Context Search]]在右鍵列出你的搜尋引擎,在右鍵選單中也會以你整理的樣子列出,相當便利。

*感謝MilchFlasche告知[[關於keyword的資訊|http://gaaan.com/Browser?p=14491]]!
** [[Mozilla Taiwan 正體中文站 - 搜尋介紹(建議看「快上加快」那項)|http://moztw.org/docs/fx/search/]]
** [[Mozilla Taiwan 討論區: 關鍵字快速搜尋|http://forum.moztw.org/viewtopic.php?t=9516]]
> 用 Firefox 上 BBS
* ''套件作者'':neopro
* ''套件網頁'':[[官方網頁|http://rt.openfoundry.org/Foundry/Project/?Queue=941]]
* ''套件語系'':內建繁中
* ''撰寫版號'':1.0.5.0 20080707 DEV
* ''套件功能'':
** 讓 Firefox 支援 telnet (BBS )。
** 可指定畫面尺寸、字型。
** 支援不斷線的自動送出。
** 支援滑鼠點選、滾輪操作、左鍵拖曳送出搜尋引擎。
*** ↙↓↘:Firefox 目前的搜尋引擎。
*** ↖↑↗:Firefox 第一順位搜尋引擎。
*** →:Firefox 第二順位搜尋引擎。
*** ←:舊的內建搜尋引擎。
* ''關鏈結'':[[新版下載|http://forum.moztw.org/viewtopic.php?t=22640#128271]]
* ''相關類似'':[[FireBBS]]
* ''心得介紹'':<br>[[PCMan|http://pcman.openfoundry.org/]] 是一個輕巧好用的 BBS 及瀏覽器軟體,個人偏重他的 BBS 功能,瀏覽器部分倒是沒有在用。官方有提供純 BBS 的 Open PCMan Lite 及同時可以瀏覽 BBS 及網頁的 Open PCMan Combo 兩種版本,並皆有安裝和可攜式可供選用。<br><br>這個套件原本是由 PCMan 製作者 HZYSoft 開發給想用 Firefox 上 BBS 的人使用,目前是由 neopro 在進行修改。<br><br>但因為 Firefox 和 PCMan 本身的問題,結合的並不算完美, PCMan 軟體提供的部分功能也沒有支援。個人覺得最麻煩的部分在於無法用熱鍵切換分頁,且兩邊的熱鍵很容易衝突。個人認為雙開是較好的選擇。
<!--{{{-->
<div id='header' class='header' macro='gradient vert [[ColorPalette::BGColorDark]] [[ColorPalette::BGColorDark]] '>
	<div class='siteTitle' refresh='content' tiddler='SiteTitle'></div>
	<span id='topMenu' refresh='content' tiddler='MainMenu'></span>
</div>

<div id='sidebar'>
	<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
	<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>

<div id='displayArea'>
	<div id='messageArea'></div>
	<div id='tiddlerDisplay'></div>
	<div id='siteFooter'>
		<span id='SiteFooter' refresh='content' tiddler='SiteFooter'></span>
	</div>
</div>
<!--}}}-->
> 擷取目前瀏覽網頁存成圖片
* ''套件作者'':Kathleen Brade, Mark Smith
* ''套件網頁'':[[官方網頁|http://pearlcrescent.com/products/pagesaver/]]
* ''套件語系'':內建繁中
* ''套件功能'':
** 擷取目前瀏覽網頁所見範圍存成圖檔。
** 擷取目前瀏覽網頁整個頁面存成圖檔。
** 圖檔類型可選擇 PNG 或 JPGE 。
** 可指定存檔命名規則。
* ''相關鏈結'':[[中文介紹|http://blog.joaoko.net/archives/136]]
* ''相關類似'':[[FireShot]]
* ''心得介紹'':<br>上面提的只是基本 Basic 免費版的功能,如果是購買付費,還具備擷取指定範圍和上傳到伺服器等功能。不過個人覺得,能擷取整個頁面包含被擋到的部分,這些基本功能就很夠用了。真的有必要可以搭配其他的擷圖小軟體來使用。
> 強化自訂工具列功能
* ''套件作者'':Merci chao
* ''套件網頁'':[[Add-ons#3895|https://addons.mozilla.org/zh-TW/firefox/addon/3895]]
* ''套件語系'':內建繁中
* ''撰寫版號'':3.0.9
* ''套件功能'':
** 可以將選單工具列隱藏,改放上小小的圖示或「選單」選項。
** 可自訂從「選單」按鍵中下拉的工具列選單內容。
** 自訂工具列圖示中多一個「書籤」工具列,可以以下拉方式開啟書籤。
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?p=75914]]
* ''相關類似'':[[Bookmarks Menu Button]]、[[Compact Menu]]、[[Compact Menu 2]]、[[Hide Menubar]]、[[Menu Editor]]、[[Tiny Menu]]
* ''心得介紹'':<br>以 [[Compact Menu]] 為前身的套件。其實對個人來說,最重要的大概只有增加下拉式書籤工具圖示的功能,因為泉不喜歡拉側邊欄開書籤。<br><br>至於編輯工具列選單內容,連右鍵選單亦可編輯的 [[Menu Editor]] 其實更為便利,只不過很懶得換套件用就沒裝。
> 在Firefox使用IE的「我的最愛」
* ''套件作者'':[[Alex Sirota|http://www.iosart.com/firefox/]]
* ''套件網頁'':[[官方網頁|http://www.iosart.com/firefox/plainoldfavorites/]]、[[Add-ons#668|https://addons.mozilla.org/zh-TW/firefox/addon/668]]
* ''套件語系'':內建繁中
* ''套件功能'':
** 在選單工具列新增一個【我的最愛】的選單,直接讀取並可新增刪除IE的【我的最愛】內容。
* ''相關鏈結'':
* ''相關類似'':
* ''心得介紹'':<br>個人傾向尋找同步工具,但這算蠻適合初用 Firefox 的新手。
> 火狐裡的隨手便利貼
* ''套件作者'':[[Jed Brown|http://jedbrown.net/]], Nickolay Ponomarev
* ''套件網頁'':[[mozdev|http://quicknote.mozdev.org/]]、[[Add-ons#46|https://addons.mozilla.org/zh-TW/firefox/addon/46]]
* ''套件語系'':英文其他
* ''撰寫版號'':0.6.0.4
* ''套件功能'':
** 選取網頁上區域,可以右鍵選項快速將文字存入。
** 可開啟後自行編輯內容。
** 可以熱鍵CTRL+F7直接叫出,亦提供工具列物件供自訂。
* ''相關鏈結'':[[私譯繁中|http://gaaan.com/Browser?p=13228]]
* ''相關類似'':
* ''心得介紹'':<br>有的時候瀏覽網頁總會有一時想記的隻字片語,平常我們會開出一個記事本或Word之類記,但有時卻又覺得太笨重了點。現在有了這個,就省去你多開個視窗的麻煩了!<br><br>shyangs 的私譯繁中版是支援 Fireofox 2 ,目前尚未有支援 Firefox 3 的中文版。
> 快速複製反白文字及網址
* ''套件作者'':Jay Palat
* ''套件網頁'':[[Add-ons#4292|https://addons.mozilla.org/zh-TW/firefox/addon/4292]]
* ''套件語系'':英文其他
* ''撰寫版號'':1.0.8
* ''套件功能'':
** 反白選取網頁上的文字,點選右鍵選單中的【Quote Text】,可直接複製選取文字及其網址。
** 可自訂複製包含網頁標題、反白文字、複製時間。若有需要也可以選取保留網頁上反白的文字及鏈結格式。
* ''相關鏈結'':
* ''相關類似'':[[Copy URL +]]
* ''心得介紹'':<br>缺點大概是複製格式雖然有選擇性,但只能固定單一種,若想修改就得進設定更改。<br><br>其實是因為 [[Copy URL +]] 很久沒更新了,所以在尋找便利的替代品。雖然功能性看起來不錯,但個人比較偏愛 [[Copy URL +]] 可以列出複製方式,依需求選擇複製格式的方法。
> 跟RSS訂閱及閱讀關聯
<<forEachTiddler
 where
 	'tiddler.tags.contains("擴充套件") &&
 	tiddler.tags.contains("RSS相關") &&
	 ! tiddler.tags.contains("_tempEX") '
 sortBy 'tiddler.title'
 script
 'function getFirstLine(s) { var m = s.match(/\s*(.*)/);
  return m != null && m.length >= 1 ? m[1] : "";  }  
	function writeExpenseRow(index, tiddler, context) { var result = ""; if (index == 0) {context.sum = 0; result = "|!推|!啟|!|!官|!開|!相|!無|!名稱|!介紹|\n";} result += "| [_(" + tiddler.title + ":推薦)] | [_(" + tiddler.title + ":啟用)] |~| [_(" + tiddler.title + ":3官方版本支援)] | [_(" + tiddler.title + ":3開發版本支援)] | [_(" + tiddler.title + ":3改相容性支援)] | [_(" + tiddler.title + ":3目前無法支援)] |![[" + tiddler.title + "]] |" + getFirstLine(tiddler.text) + "|\n"; return result;}'
 write
	'writeExpenseRow(index, tiddler, context)'
>>
[img[http://farm4.static.flickr.com/3163/2692822922_60fe2c229f_t.jpg][http://www.flickr.com/photos/95095733@N00/2692822922/]] |可愛的藍色貓咪佈景
* ''佈景作者'':[[Red_Fat_Lazy_Cat|http://www.bluecatsgraphics.com/]]
* ''佈景網頁'':[[官方網頁|http://www.bluecatsgraphics.com/Firefox_Themes/]]、[[Add-ons#812|https://addons.mozilla.org/zh-TW/firefox/addon/812]]
* ''佈景介紹'':<br>很可愛的藍色貓咪佈景。也有綠色版,作者似乎偏愛綠色版,通常藍色版更新得較為遲緩。
[img[http://farm4.static.flickr.com/3224/2692009519_42c7ec23df_t.jpg][http://www.flickr.com/photos/95095733@N00/2692009519/]] |可愛的綠色貓咪佈景
* ''佈景作者'':[[Red_Fat_Lazy_Cat|http://www.bluecatsgraphics.com/]]
* ''佈景網頁'':[[官方網頁|http://www.bluecatsgraphics.com/Firefox_Themes/]]、[[Add-ons#104|https://addons.mozilla.org/zh-TW/firefox/addon/104]]
* ''佈景介紹'':<br>很可愛的綠色貓咪佈景,不過個人偏愛藍色版。
> 便利的行事曆及備忘提醒
* ''套件作者'':Tom Mutdosch, Daniel Lee
* ''套件網頁'':[[mozdev|http://reminderfox.mozdev.org/]]、[[Add-ons#1191|https://addons.mozilla.org/zh-TW/firefox/addon/1191]]
* ''套件語系'':內建繁中
* ''撰寫版號'':
* ''套件功能'':
** 行事曆和 ToDo 提醒,支援重複提醒。
** 可利用 FTP 上傳下載管理行程。
** 支援匯入匯出。
** 可自訂圖示顯示位置。
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?p=63254]]
* ''相關類似'':
* ''心得介紹'':<br>記性不好人的好幫手!
/***
|Name:|RenameTagsPlugin|
|Description:|Allows you to easily rename or delete tags across multiple tiddlers|
|Version:|3.0 ($Rev: 5501 $)|
|Date:|$Date: 2008-06-10 23:11:55 +1000 (Tue, 10 Jun 2008) $|
|Source:|http://mptw.tiddlyspot.com/#RenameTagsPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License|http://mptw.tiddlyspot.com/#TheBSDLicense|
Rename a tag and you will be prompted to rename it in all its tagged tiddlers.
***/
//{{{
config.renameTags = {

	prompts: {
		rename: "Rename the tag '%0' to '%1' in %2 tidder%3?",
		remove: "Remove the tag '%0' from %1 tidder%2?"
	},

	removeTag: function(tag,tiddlers) {
		store.suspendNotifications();
		for (var i=0;i<tiddlers.length;i++) {
			store.setTiddlerTag(tiddlers[i].title,false,tag);
		}
		store.resumeNotifications();
		store.notifyAll();
	},

	renameTag: function(oldTag,newTag,tiddlers) {
		store.suspendNotifications();
		for (var i=0;i<tiddlers.length;i++) {
			store.setTiddlerTag(tiddlers[i].title,false,oldTag); // remove old
			store.setTiddlerTag(tiddlers[i].title,true,newTag);  // add new
		}
		store.resumeNotifications();
		store.notifyAll();
	},

	storeMethods: {

		saveTiddler_orig_renameTags: TiddlyWiki.prototype.saveTiddler,

		saveTiddler: function(title,newTitle,newBody,modifier,modified,tags,fields,clearChangeCount,created) {
			if (title != newTitle) {
				var tagged = this.getTaggedTiddlers(title);
				if (tagged.length > 0) {
					// then we are renaming a tag
					if (confirm(config.renameTags.prompts.rename.format([title,newTitle,tagged.length,tagged.length>1?"s":""])))
						config.renameTags.renameTag(title,newTitle,tagged);

					if (!this.tiddlerExists(title) && newBody == "")
						// dont create unwanted tiddler
						return null;
				}
			}
			return this.saveTiddler_orig_renameTags(title,newTitle,newBody,modifier,modified,tags,fields,clearChangeCount,created);
		},

		removeTiddler_orig_renameTags: TiddlyWiki.prototype.removeTiddler,

		removeTiddler: function(title) {
			var tagged = this.getTaggedTiddlers(title);
			if (tagged.length > 0)
				if (confirm(config.renameTags.prompts.remove.format([title,tagged.length,tagged.length>1?"s":""])))
					config.renameTags.removeTag(title,tagged);
			return this.removeTiddler_orig_renameTags(title);
		}

	},

	init: function() {
		merge(TiddlyWiki.prototype,this.storeMethods);
	}
}

config.renameTags.init();

//}}}

> 自由調整網頁的輸入欄位大小
* ''套件作者'':[[Justin Watt|http://justinsomnia.org/]]
* ''套件網頁'':[[官方網頁|http://justinsomnia.org/2006/10/resizeable-form-fields-for-firefox/]]、--[[Add-ons#3694|https://addons.mozilla.org/zh-TW/firefox/addon/3694]]--
* ''套件語系'':英文其他
* ''撰寫版號'':0.2.1
* ''套件功能'':
** 自由縮放頁面上的輸入欄
* ''相關鏈結'':
* ''相關類似'':[[Resizeable Textarea]]
* ''心得介紹'':<br>雖然原意是讓各種輸入欄都可以自由調整,不知道是套件充衝突或是如何,泉自己在測時並沒有完全展現效果,在部分有使用 JavaScript 的頁面顯然支援不足。<br><br>作者聲明因為他是基於早期沒有更新的 [[Resizeable Textarea]] 這個套件製作,而 [[Resizeable Textarea]] 的作者已對應到 Firefox 3 ,是故他將不再更新本套件,亦不再提供下載。
> 自由調整網頁的輸入欄位大小
* ''套件作者'':Raik Jürgens
* ''套件網頁'':[[Add-ons#3818|https://addons.mozilla.org/zh-TW/firefox/addon/3818]]
* ''套件語系'':英文其他
* ''撰寫版號'':0.1d
* ''套件功能'':
** 自由縮放頁面上的輸入欄
* ''相關鏈結'':[[中文介紹|http://]]、[[應用介紹|http://]]
* ''相關類似'':[[Resizeable Form Fields]]
* ''心得介紹'':<br>輸入欄太小時很方便的套件。
> 增加跳往前後網頁尾碼的按鈕
* ''套件作者'':[[SHIMODA Hiroshi|http://piro.sakura.ne.jp/xul/]]
* ''套件網頁'':[[官方網頁|http://piro.sakura.ne.jp/xul/_rewindforward.html.en]]、[[Add-ons#1934|https://addons.mozilla.org/zh-TW/firefox/addon/1934]]
* ''套件語系'':英文其他
* ''撰寫版號'':
* ''套件功能'':
** 在連號網頁,可以直接前往上一頁或下一頁,或第一頁及最末頁。
* ''相關鏈結'':
* ''相關類似'':[[All-in-One Gestures]]、[[FireGestures]]
* ''心得介紹'':<br>主要是針對以資料庫連號做成頁面的網站工具。可惜時靈時不靈的玩意,有用的時候很方便,沒用的時候也很無言(遠目)雖然還蠻喜歡這個功能的說。<br><br>其實滑鼠手勢套件 [[All-in-One Gestures]]、[[FireGestures]] 也都有提供這個功能,而且可以設成搖擺手勢,比起移動去按工具列上的按鍵更為便利喔!
> 從右鍵快速選擇網頁編碼
* ''套件作者'':[[Kim Go Myoung|http://heygom.com/extensions/]]
* ''套件網頁'':[[官方網頁|http://heygom.com/extensions/rightencoding]]、[[Add-ons#371|https://addons.mozilla.org/zh-TW/firefox/addon/371]]
* ''套件語系'':內建繁中
* ''撰寫版號'':0.2.2
* ''套件功能'':
** 在右鍵加入【語言及字元編碼】的選單。
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?t=7415]]
* ''相關類似'':[[Charset Switcher]]
* ''心得介紹'':<br>瀏覽網站時,最麻煩就是遇到網站讀到的編碼跟網站文字的編碼不合。在 Firefox 預設中要進入【檢視】→【語言及字元編碼】去選擇正確的編碼。有了這個套件,你可以很方便的用滑鼠右鍵快速選取正確的編碼。<br><br>想想如果有裝像 [[Menu Editor]] 這種強大的編輯右鍵選單的套件,應該就不用裝這個了……自設就好了。不過基於個人理由自己倒是沒裝 [[Menu Editor]] ,所以還是認分裝這個了 =w=
> 將網頁存在你的電腦裡
* ''套件作者'':[[Gomita|http://www.xuldev.org/]]
* ''套件網頁'':[[官方網頁|http://amb.vis.ne.jp/mozilla/scrapbook/]]、[[Add-ons#427|https://addons.mozilla.org/zh-TW/firefox/addon/427]]
* ''套件語系'':內建繁中
* ''撰寫版號'':1.3.2.6
* ''套件功能'':
** 將網頁依所見狀態擷取存在自己電腦(非圖檔),並會保留來源網頁。
** 可編輯存好的資料,將不要的部分刪去,並可加上註解或強調。
** 可將數份不同網頁資料合併成一份。
** 可指定儲存位置,並可執行資料的匯入匯出。
* ''相關鏈結'':[[中文介紹|http://www.azuremedia.net/tech/history/content_management/000815.html]]
* ''相關類似'':[[ScrapBook Tags Support]]
* ''心得介紹'':<br>老實說這個套件泉不算熟,因為將就常要移動的習慣,雖然知道方便卻一直刻意不用,只有偶爾需要保存網頁資料時才會安裝在把玩用的上面。不過不管偶爾用了幾次,感想永遠都一樣:可以這樣備份資料實在是太太方便了啦!怎麼可以不推薦呢?<br><br>另外目前有人推出搭配套件[[ScrapBook Tags Support]],用以在[[ScrapBook]]保留下的資料上加入標籤分類,強化了管理機制。
> 為 ScrapBook 的資料加上標籤
* ''套件作者'':[[Thinkbase.net|http://thinkbase.net]]
* ''套件網頁'':[[官方網頁|http://thinkbase.net/w/main/Wiki?scrapbook-tags(zh-CN)]]
* ''套件語系'':內建簡中
* ''套件功能'':
** 使原本只能用資料夾分類的[[ScrapBook]]能個別加上複數不同標籤,只需以空格或分行斷開。
** 能依照標籤分類檢視資料,並可連續用不同tag縮小查詢範圍。
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?t=16251]]
* ''相關類似'':
* ''心得介紹'':<br>切記必需先安裝了[[ScrapBook]]才能使用。<br><br>個人對它的查詢功能還蠻滿意的,惟一的缺點就是tag加入不便,要用手打,而且跟加入書籤的項目欄是不同的。個人比較推薦的使用方式是收下一批資料後,利用「依照標籤分類瀏覽」檢視未加入tag的資料,直接點資料後面的「…」去新增修改標籤資訊。
> 隨時編寫上傳部落格
* ''套件作者'':[[Christopher Finke|http://efinke.com/]]
* ''套件網頁'':[[官方網頁|http://www.scribefire.com/]]、[[Add-ons#1730|https://addons.mozilla.org/zh-TW/firefox/addon/1730]]
* ''套件語系'':內建繁中
* ''撰寫版號'':2.1
* ''套件功能'':
** 可直按按【F8】或狀態列上的圖示在下半部顯示編輯視窗。也可以選擇另開新分頁編輯。
** 可管理多個部落格。
** 可下載線上近期文章儲存或編輯,之後再上傳,也可以選擇(已存在的)文章分類。
** 提供清爽實用的所見即所得編輯器、原始碼編輯器及即時預覽。
** 要 BSP 有提供 API 才能支援,中文有提供 API 的 BSP 較少。有支援的服務如下:
*** [[Blogger|http://www.blogger.com/]]、[[Windows Live Space|http://home.services.spaces.live.com/]]:依名稱選擇即會自動捉取資料。
*** [[樂多日誌 Roodo!|http://blog.roodo.com/]]:目前提供的 API 似乎有點問題,編輯文章無法直接選擇分類。<br>類型選【自定義】→【Movable Type】,<br>API:http://blog.roodo.com/memorysea
*** [[PIXNET 痞客邦|http://www.pixnet.net/blg/]]:[[官方說明|http://blog.pixnet.net/admin/post/11322992]]<br>類型選【自定義】→【WordPress】,<br>API:http://blog.pixnet.net/xmlrpc.php
*** [[FC2ブログ|http://blog.fc2.com/]](日):<br>類型選【自定義】→【WordPress】,<br>API:http://blog.fc2.com/xmlrpc.php
*** 自架的部落格通常都有支援,如較知名的 WordPress([[自架|http://wordpress.org/]]、[[線上服務|http://wordpress.com/]])、[[Movable Type|http://www.movabletype.org/]]。
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?t=12097]]、[[中文介紹|http://blog.joaoko.net/archives/137]]、[[中文介紹|http://playpcesor.blogspot.com/2007/08/scribefire-142firefox.html]]
* ''相關類似'':
* ''心得介紹'':<br>這個擴充套件改過名,原名叫做 [[Performancing|http://performancing.com/]] 。<br><br>讓你在瀏覽網頁時可以隨手編寫保存部落格內容,而不用連到 BSP 的頁面去,也不用怕編一半時斷線。並讓你很簡單的上傳,同一篇想傳到不同的部落格也很便利。不會比知名的部落格離線編輯軟體遜色。<br><br>就泉自己用過的部落格離線編輯器中最喜歡這個編輯器的介面,其他的編輯器或多或少在撰寫上傳文章時會插入多餘的語法,個人是非常厭惡多餘的語法造成的累贅。<br><br>不過很可惜這並不具備分的功能,--最近文章下載也有數量限制--(似乎是看對方提供數量?WordPress可以全部捉到),所以無法當部落格文章備分管理軟體來使用,但一般的撰寫、上傳和近期文章管理來說,應該是非常足夠了。<br>因為用不慣簡體中文加上一些沒有確實翻譯的使用不便,自己順手做了繁體中文釋出。本來想發到 [[BabelZilla|http://www.babelzilla.org/]] 去的,不過那邊的繁體中文已經另外有其他人接手,只好做罷。--不過目前的 2.0.2 是尚未內建繁體中文的。--目前的官方版本已有內建中文。
> 為搜尋引擎加上關鍵字
* ''套件作者'':[[Ryan Flint|http://www.screwedbydesign.com]]
* ''套件網頁'':[[官方網頁|http://www.screwedbydesign.com/software/searchwords/]]、[[Add-ons#4328|https://addons.mozilla.org/zh-TW/firefox/addon/4328]]
* ''套件語系'':英文其他
* ''撰寫版號'':0.3
* ''套件功能'':
** 為搜尋引擎加上關鍵字(keyword),可以在網址列直接輸入「搜尋引擎關鍵字 要搜尋文字」來進行特定搜尋引擎的查詢。
* ''相關鏈結'':[[搜尋說明|http://moztw.org/docs/fx/search/]]、[[關鍵字應用介紹|http://forum.moztw.org/viewtopic.php?t=9516]]
* ''相關類似'':[[Organize Search Engines]]
* ''心得介紹'':<br>雖然Firefox本來就有內建將特定的搜尋用書籤關鍵字存成書籤進行搜尋的便利功能,但直接利用搜尋引擎管理更為便利。<br><br>因為個人用來管理搜尋引擎的[[Organize Search Engines]]本來就有加上關鍵字的功能,所以沒有使用這個套件。不需要管理搜尋引擎又想用關鍵字搜尋的人倒可以嚐試這個套件。<br><br>Firefox 3 已具備鍵入搜尋用關鍵字的功能,是故已不需要再使用本套件才能使用關鍵字搜尋。
> 自動縮放佔空間的搜尋列
* ''套件作者'':xeen
* ''套件網頁'':[[mozdev|http://searchbarautosizer.mozdev.org/]]、[[Add-ons#1172|https://addons.mozilla.org/zh-TW/firefox/addon/1172]]
* ''套件語系'':內建繁中
* ''撰寫版號'':1.3.7
* ''套件功能'':
** 可設定不用時搜尋列縮小,使用時再拉寬。
** 可指定最大、最小及平常顯示時的寬度。
** 可設定送出搜尋後清空搜尋內容。
** 可設定搜尋完跳回預設搜尋引擎。
* ''相關鏈結'':[[中文介紹|http://blog.joaoko.net/archives/349]]
* ''相關類似'':
* ''心得介紹'':<br>是否有時會覺得並非時時需要的搜尋引擎列排在網址列旁很佔位,讓你會覺得網址列不夠長?有時則是有些佈景直接指定搜尋列的大小,那個比例卻不一定對於你的電腦合適。這個套件這時候就很便利了。附帶的送出搜尋時清空的功能也相當實用!
> 重新讀入沒讀完的圖
* ''套件作者'':Cheng Khoon
* ''套件網頁'':[[mozdev|http://showimage.mozdev.org/]]
* ''套件語系'':內建繁中
* ''撰寫版號'':0.4.2
* ''套件功能'':
** 圖片顯示不完全時,在圖上按右鍵有可以只重新讀取該圖片而不用重整頁面的選項。
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?t=5597]]
* ''相關類似'':[[Show Picture]]
* ''心得介紹'':<br>Firefox 必備套件之一。其實個人不明白為什麼 Firefox 不支援這個功能,話說自己也好久沒看到這個功能出現就是了(圖都有讀完成,鮮少讀一半就不見了)。<br><br>Firefox 3 似乎已經具備該功能,其實不安裝也無妨。但若有興趣可以裝裝有進階功能的 [[Show Picture]] 。
> 重新讀入沒讀完的圖
* ''套件作者'':Lumox
* ''套件網頁'':[[官方網頁|http://]]、[[mozdev|https://]]、[[Add-ons#3664|https://addons.mozilla.org/zh-TW/firefox/addon/3664]]
* ''套件語系'':私譯繁中
* ''撰寫版號'':1.3
* ''套件功能'':
** 在右鍵增加功能選項
*** 顯示圖片。
*** 顯示所有圖片。
*** 顯示選取範圍的圖片。
*** 放大圖片佔位符。
*** 顯示最大圖片。
*** 顯示每個框架最大圖片。
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?t=20361]]
* ''相關類似'':[[Show Image]]
* ''心得介紹'':<br>讀取不到圖片時,不必重整全頁就能重讀圖片的好用套件。其實 Firefox 3 已具備該功能,但這個套件追加了全部顯示等等進階便利功能可選用!
[img[下載 Firefox 3|http://images.spreadfirefox.com/affiliates/Buttons/firefox3/foxkeh-fx3-180x60.png][http://www.spreadfirefox.com/node&id=0&t=321]]<<search>><<closeAll>><<newTiddler>><<newTiddler label:"新增套件" focus:title title:'擴充套件名稱' text:"> 套件說明
* ''套件作者'':[[作者|http://]]
* ''套件網頁'':[[官方網頁|http://]]、[[mozdev|https://]]、[[Add-ons#|https://addons.mozilla.org/zh-TW/firefox/addon/]]
* ''套件語系'':內建繁中/私譯繁中/內建簡中/英文其他
* ''撰寫版號'':
* ''套件功能'':
** aa
** bb
** cc
* ''相關鏈結'':[[中文介紹|http://]]、[[應用介紹|http://]]
* ''相關類似'':
* ''心得介紹'':<br>"
 tag:擴充套件 _tempEX>><<newTiddler label:"新增佈景" focus:title title:'佈景主題名稱' text:"[img[圖片網址][圖片鏈結網址]] |佈景說明
* ''佈景作者'':[[作者|http://]]
* ''佈景網頁'':[[官方網頁|http://]]、[[Add-ons#|https://addons.mozilla.org/zh-TW/firefox/addon/]]
* ''佈景介紹'':<br>"
 tag:佈景主題 _tempTheme>><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel  '偏好設定 »' '變更 TiddlyWiki 選項'>>[img[訂閱本站|http://img515.imageshack.us/img515/6923/foxkehrss1wb1.png][Firefox.xml]]
> 讓側邊欄改在右邊開啟
* ''套件作者'':[[Collin Jackson|http://www.collinjackson.com/]]
* ''套件網頁'':[[Add-ons#855|https://addons.mozilla.org/zh-TW/firefox/addon/855]]
* ''套件語系'':英文其他
* ''撰寫版號'':0.3
* ''套件功能'':
** 把側邊欄移到畫面右邊顯示。
* ''相關鏈結'':
* ''相關類似'':[[All-in-One Sidebar]]
* ''心得介紹'':<br>功能很簡單明瞭的套件。老實說,開在左邊的側邊欄已經礙泉的眼非常久了,只要一開啟就會影響在檢視的頁面,嚴重影響瀏覽,這也是泉剛開始不喜開啟側邊欄的原因。泉會裝 [[All-in-One Sidebar]] 主要是為了可以將側邊欄易位,至於其他的功能只能算附加就順便用。有了這個,就不必安裝肥大的 [[All-in-One Sidebar]] ,而可以視需要再揀選套件來搭配了!
> 快速插入常用字串
* ''套件作者'':miek
* ''套件網頁'':[[mozdev|http://signature.mozdev.org/]]、[[Add-ons#578|https://addons.mozilla.org/zh-TW/firefox/addon/578]]
* ''套件語系'':英文其他
* ''撰寫版號'':
* ''套件功能'':
** 在右鍵顯示設定好的插入字串選單供選擇
** 提供設定好的文字彙入匯出服務(中文字串支援不佳)
* ''相關鏈結'':
* ''相關類似'':[[Clippings]]、[[InFormEnter]]
* ''心得介紹'':<br>官網上寫有插入熱鍵,不過泉試不出來。打常用字串或文字表情時很好用。惟一的小缺點就是匯入匯出不支援中文,中文使用匯入匯出功能會全都變亂碼,一般使用下的中文內容倒還不成問題。目前改用同類型的[[Clippings]]。
<html><center><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/tw/">
<img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/2.5/tw/88x31.png" />
</a>
<br />本<span xmlns:dc="http://purl.org/dc/elements/1.1/" href="http://purl.org/dc/dcmitype/Text" rel="dc:type">著作</span>由 <span xmlns:cc="http://creativecommons.org/ns#" property="cc:attributionName">濰泉</span> 製作,以
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/tw/">創用CC 姓名標示-非商業性-相同方式分享 2.5 台灣 授權條款</a> 釋出。</center></html>@@font-size:9pt;display:block;text-align:center; 架構以 [[TiddlyWiki|http://www.tiddlywiki.com/]] <<version>> ([[BSD開放原始碼授權|http://www.opensource.org/licenses/bsd-license.php]]) ,建議以 Firefox 瀏覽以達到最佳效果。@@
濰泉的 Firefox 玩耍筆記
Firefox Note
http://wechuann.googlepages.com/Firefox.html
/***
!Metadata:
|''Name:''|Slider2Plugin|
|''Description:''||
|''Version:''|1.5.2|
|''Date:''|Mar 27, 2007|
|''Source:''|http://www.sourceforge.net/projects/ptw/|
|''Author:''|BramChen (bram.chen (at) gmail (dot) com)|
|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License]]|
|''~CoreVersion:''|2.1.0|
|''Browser:''|Firefox 1.5+; InternetExplorer 6.0|
!Usage:
Manually add ''[[AccordionEffectStyle2]]'' or customized {{{[[YourSliderStyles]]}}} to StyleSheet if it's necessary.
{{{
<<slider2 sliderClass1
 tiddlerTitle1 sliderTitle1 toolsip1
 tiddlerTitle2 sliderTitle2 toolsip2
 ....>>
and/ or
<<slider2 sliderClass2
 tiddlerTitle11 sliderTitle11 toolsip11
 tiddlerTitle12 sliderTitle12 toolsip12
 ...
 buttonClass:'buttonClassName'>>
}}}
*Parameters descriptions:
<<<
#''sliderClasses'' - the name of slider set and also the className of the set, it could be assigned different styles for each slider set.<br>The param ''sliderButton: //buttonClass//'' need to be used together.
#''tiddlerTitles'' - the title of tiddler to include in the slider
#''sliderTitletitles ''- text of the slider
#''toolsips'' - tooltip text of the slider
#''buttonClass:''//'buttonClassName'// - a named param, default is //sliderButton// if it's omitted assigning a class name to slider button, for example, <br>as the first param is 'accordionEffect'<br>and 'the last param value is ''buttonClass:'''button'<br>then the original oc's AccordionEffectStyle is used.
<<<
!Revision History:
|''Version''|''Date''|''Note''|
|1.5.2|Mar 27, 2007|Fixed bugs under IE|
|1.5.1|Mar 24, 2007|Fixed bugs of customized buttonClass, and typos in AccordionEffectStyle2 and Usgaes section
|1.5.0|Mar 22, 2007|<html><ol><li>Added feature: ''slider set'' (like 'tab' macro) by using the first param as grouping className but thus it's ''not compatible with previous verions''.</li><li>Included oc's ''AccordionEffect'' but a small bug fixed.</li><li>Added a extra named param: buttonClass</li></ol></html>|
|1.0.1|Mar 20, 2007|Added animation collapse suggested by oc|
|1.0.0|Mar 18, 2007|Initial release|
!Code section:
***/
//{{{

config.macros.slider2 = {
	buttonClass: "sliderButton",
	lastOpenedSlider: {},
	expandTimeout: null
};

config.macros.slider2.onClickSlider = function(e){
	if (!e) var e = window.event;
	var n = this.nextSibling;
	var isOpen = n.style.display != "none";
	var nodes = this.parentNode.childNodes;
	for(var i=0; i<nodes.length; i++){
		if(nodes[i].title && nodes[i].title != this.title){
			if(nodes[i].nextSibling.className = "sliderPanel"){
				if(config.macros.slider2.lastOpenedSlider[this.parentNode.className] == nodes[i].title){
					if(config.options.chkAnimate)
						anim.startAnimating(new Slider(nodes[i].nextSibling,false,null,"none"));
					else 
						nodes[i].nextSibling.style.display = "none";
				}
			}
		}
	}
	if (config.options.chkAnimate){
		if (config.macros.slider2.expandTimeout)
			clearTimeout(config.macros.slider2.expandTimeout);
		config.macros.slider2.expandTimeout = setTimeout(function(){anim.startAnimating(new Slider(n,!isOpen,null,"none"));},250);
//		anim.startAnimating(new Slider(n,!isOpen,null,"none"));
	} 
	else
		n.style.display = isOpen ? "none" : "block";
	config.macros.slider2.lastOpenedSlider[this.parentNode.className] = isOpen ? "" : this.title;
	return false;
};

config.macros.slider2.createSlider = function(place,title,tooltip,buttonClass){
	var btn = createTiddlyButton(place,title,tooltip,this.onClickSlider,buttonClass);
	var panel = createTiddlyElement(place,"div",null,"sliderPanel",null);
	panel.style.display = "none";
	return panel;
};

config.macros.slider2.handler = function(place,macroName,params,wikifier,paramString,tiddler){
	params = paramString.parseParams("anon",null,true,false,true);
	var buttonClass =  (typeof params[0]['buttonClass'] == 'undefined')? this.buttonClass : params[0]['buttonClass'];
	if (params[1] && params[1].name == "anon"){
		if (params[1].name.length < 4){
			wikify('@@Slider2 params error!@@',place);
			return false;
		}
	}

	var p = params[0]['anon'];

	var sliderset =  createTiddlyElement(place,"div",null,p[0],null);
	var numSliders = (params.length-1)/3-1;
	for (var t=0;t<numSliders;t++){
		var content = p[t*3+1];
		var label = p[t*3+2];
		var prompt = p[t*3+3];
		var panel = this.createSlider(sliderset,label,prompt,buttonClass);
		panel.setAttribute("refresh","content");
		panel.setAttribute("tiddler",content);
		panel.style.display = "none";
		var text = store.getTiddlerText(content);
		if(text)
			wikify(text,panel,null,store.getTiddler(content));
	}
};
config.shadowTiddlers["AccordionEffectStyle2"] = "/*{{{*/\n.accordionEffect2 .sliderButton {display:block; color:#fff; text-align:left; font-weight:bold; line-height:140%; border-top:solid 1px #bbb; border-left:solid 1px #bbb; border-right:solid 1px #888; border-bottom:solid 1px #888; background:#999; margin-left:-0.3em; padding:0 1px 1px 20px;}\n.accordionEffect2 .sliderButton:hover {border-top:solid 1px #777; border-left:solid 1px #777; border-right:solid 1px #bbb; border-bottom:solid 1px #bbb; background:#888; padding:1px 0 0 21px;}\n/*}}}*/\n/*{{{*/\n/*Modified from AccordionEffect, CSS by oc ( http://b-oo-k.net/blog/ )*/\n/*}}}*/";
config.shadowTiddlers["StyleSheet"] += "[[AccordionEffectStyle2]]";
//}}}
> 自訂檢視原始碼的地方
* ''套件作者'':[[SHIMODA Hiroshi|http://piro.sakura.ne.jp/xul/]]
* ''套件網頁'':[[官方網頁|http://piro.sakura.ne.jp/xul/_viewsourceintab.html]]、[[Add-ons#5908|https://addons.mozilla.org/zh-TW/firefox/addon/5908]]
* ''套件語系'':英文其他
* ''撰寫版號'':0.1.2007103001
* ''套件功能'':
** 自訂開啟「檢視原始碼」/「檢視選取範圍原始碼」的方式。
** 可選擇視窗開啟( Firefox 預設)、分頁開啟及自訂外部程式開啟。
* ''相關鏈結'':
* ''相關類似'':
* ''心得介紹'':<br>功能跟名稱一樣簡單明瞭的套件。老實說,每次檢視原始檔就多一個視窗出來,泉常常忘了自己哪些有開過哪些沒開過,或是開了沒有關結果又對同網頁範圍重開一次……能用分頁管理真的方便多了。
> 分割視窗同時瀏覽不同的網頁
* ''套件作者'':[[SHIMODA Hiroshi|http://piro.sakura.ne.jp/xul/]]
* ''套件網頁'':[[官方網頁|http://piro.sakura.ne.jp/xul/_splitbrowser.html.en]]、[[Add-ons#4287|https://addons.mozilla.org/zh-TW/firefox/addon/4287]]
* ''套件語系'':內建繁中
* ''套件功能'':
** 把視窗分割,依需求同時檢視不同的網頁
** 分割方式可以自行設定。
* ''相關鏈結'':[[中文介紹1|http://forum.moztw.org/viewtopic.php?p=95942]]、[[中文介紹2|http://blog.joaoko.net/archives/247]]、[[私譯繁中|http://forum.moztw.org/viewtopic.php?t=17303#125025]]
* ''相關類似'':[[Split Pannel]]
* ''心得介紹'':<br>其實我常在寫文章時常同時比較檢視不同的頁面,有這個實在太方便了!
> 將視窗分割成二個
* ''套件作者'':max1million
* ''套件網頁'':[[官方網頁|http://www.geocities.com/max1million/firefox.htm]]、[[Add-ons#3275|https://addons.mozilla.org/zh-TW/firefox/addon/3275]]
* ''套件語系'':英文其他
* ''套件功能'':
** 在正在瀏覽的視窗,按右鍵,選擇「Split」,就會把當前視窗分割到左半邊去。
* ''相關鏈結'':
* ''相關類似'':[[Split Browser]]
* ''心得介紹'':<br>非常簡單的一個小套件,不像 [[Split Browser]] 可以無限分割,它只能分割成二個視窗。 [[Split Browser]] 對泉來說稍嫌強大了點,所以才會嚐試這個套件,因為原則上泉也不喜歡分割太多視窗出來。<br><br>要說有什麼不滿的話,大概就是分割的視窗會跑到左邊去,而且左邊的分割視窗會不能使用任何套件支援的滑鼠功能;但是泉比較自己要用的視窗在左邊,參考用的在右邊啊(嘆)
> 在狀況列顯示系統佔用等資訊
* ''套件作者'':cyberscorpio
* ''套件網頁'':[[官方網頁|http://doudehou.googlepages.com/statusbarex]]、[[Add-ons#3271|https://addons.mozilla.org/zh-TW/firefox/addon/3271]]
* ''套件語系'':內建簡中
* ''撰寫版號'':0.2.17
* ''套件功能'':
** 可顯示 Firefox 的網路連線狀態。
** 可顯示 Firefox 的 CPU 佔用狀態。
** 可顯示記憶體佔用狀態。
** 可顯示電源狀態。
** 可顯示頁面最後更新時間。
** 以上偕可自訂顯示與否。
* ''相關鏈結'':[[中文介紹|http://playpcesor.blogspot.com/2007/06/firefox-statusbarex.html]]
* ''相關類似'':[[Cache Status]]
* ''心得介紹'':<br>呣、泉自己主要是用來觀察 Firefox 的記憶體及 CPU 的佔用狀態,因為有時 Firefox 會莫名的吃記憶體和 CPU ……。
> 停止網頁上自動播放的影音及Flash
* ''套件作者'':[[Hemiolasun|http://hemiolasun.free.fr/]]
* ''套件網頁'':[[官方網頁|http://hemiolapei.free.fr/extensions/index.php/stop-autoplay]]、[[Add-ons#1765|https://addons.mozilla.org/zh-TW/firefox/addon/1765]]
* ''套件語系'':內建繁中
* ''撰寫版號'':0.7
* ''套件功能'':
** 可設定停止網頁上自動播放的音樂,甚至直接擋掉。
** 讓沒有控制吧可以停止播放的背景音樂出現控制吧。
** 可指定全面擋下 Flash 影音,或只擋下來自指定名單的 Flash ,也可以全面擋下再設定白名單。
** 用滑鼠中鍵或按著【 Ctrl 】以滑鼠左鍵去點 Stop Autoplay 的工具列圖示,可叫出【選項】選單。
** 按著【 Shift 】去點 Stop Autoplay 的工具列圖示,可將當前網址加入顥示 Flash 的白名單。
* ''相關鏈結'':
* ''相關類似'':[[Flashblock]]
* ''心得介紹'':<br>個人在逛網頁時雖然很少在開聲音,但多半不喜歡網頁冒出來的音樂。特別是用慣 Firefox 這類分頁瀏覽器,常常一開就一堆分頁,一個個去檢視倒底是哪一個分頁在播音樂,實在是件很累人的事。有時則一次開啟有設背照音樂網站的數個頁面,每個分頁的背景音樂都同時交錯響起,那可是吵得不得了。所以有這個套件存在實在太好了!<br><br>目前也具備了擋下 Flash 的功能,雖然偵測到有安裝 [[Flashblock]] 時,會將阻擋 Flash 的部分交由 [[Flashblock]] 處理,但似乎會造成部分衝突以至於 Flash 阻擋不完全。就目前的版本(0.7)個人不建議與 [[Flashblock]] 並列。
> 合併停止及重整按鍵
* ''套件作者'': Caio Chassot
* ''套件網頁'':[[官方網頁|http://v2studio.com/k/moz/]]、[[Add-ons#313|https://addons.mozilla.org/zh-TW/firefox/addon/313]]
* ''套件語系'':英文其他
* ''撰寫版號'':0.2.2
* ''套件功能'':
** 把工具列上的停止按鈕和重新整理按鈕合併成一個。
* ''相關鏈結'':[[中文介紹|http://blog.joaoko.net/archives/204]]
* ''相關類似'':
* ''心得介紹'':<br>簡化工具列的套件,覺得工作列上的圖示太多可以拿來減少按鈕佔位。
* [[Gmail|https://mail.google.com/]]
** [[Better Gmail2 Skin - Men's G|http://userstyles.org/styles/4296]] - 淡藍簡約風。
** [[Better Gmail 2 Skin - Fe mails|http://userstyles.org/styles/4108]] - 粉紅可愛風。
** [[Gmail Cleaner and Tweaker (for 1.0 & 2.0)|http://userstyles.org/styles/4211]] - 讓 Gmail 更容易操作。
** [[17個讓Gmail更華麗、更好用的「Stylish佈景主題」 (Firefox外掛)|http://briian.com/?p=5417]] - 重灌狂人
* [[Google Reader|http://www.google.com/reader/view/]]
** [[Google Reader - Sweetface|http://userstyles.org/styles/3507]] - 粉紅可愛風。
** [[Google Reader - Super Clean|http://userstyles.org/styles/4668]] - 隱藏開頭的搜尋及鏈結吧,簡約顯示。
** [[Google Reader - peacock feather|http://userstyles.org/styles/3014]] - 華麗大字佈景,右方還有快速按鍵。個人很喜歡,只可惜配色不當,造成部分文字顯示不清。泉自己是稍微修正了顏色在用。
** [[OS X Style Google Reader|http://userstyles.org/styles/2318]] - MAC 簡約風。
/*{{{*/

body { 
 color: [[ColorPalette::FontNormal]];
 background: [[ColorPalette::BGColorDark]];
 font-size: 14px; 
 letter-spacing: 1px;}

a {
 color: [[ColorPalette::FontLink]]; }

a:hover {
 color: [[ColorPalette::FontALink]];
 background: [[ColorPalette::BGColorTitle]]; }

a:active {
 color: [[ColorPalette::FontALink]];
 background: [[ColorPalette::BGColorTitle]]; }

a img{
 border: none;
 margin: 1px; }

h1,h2,h3,h4,h5 {
 color: [[ColorPalette::FontTitle]];
 background: [[ColorPalette::BGColorDark]]; 
 padding: 7px;}

h1 {font-size: 24px;}
h2 {font-size: 22px;}
h3 {font-size: 20px;}
h5 {font-size: 16px;}
h4 {font-size: 18px;}

table {
 border: 2px solid [[ColorPalette::FontSystem]]; }

th, thead td {
 background: [[ColorPalette::BGColorDark]];
 border: 1px solid [[ColorPalette::FontSystem]];
 color: [[ColorPalette::FontSystem]]; }
 
th a, thead td a {
 color: [[ColorPalette::FontNormal]]; }

td, tr {
 background: transparent;
 border: 1px solid [[ColorPalette::FontSystem]];
 padding: 2px;}

.button {
 font-size: 12px;
 color: [[ColorPalette::FontTag]];
 border: none; }

.button:hover {
 font-size: 12px;
 color: [[ColorPalette::FontALink]];
 background: [[ColorPalette::BGColorTitle]];
 border-color: [[ColorPalette::FontLink]]; }

.button:active {
 font-size: 12px;
 color: [[ColorPalette::FontALink]];
 background: [[ColorPalette::BGColorTitle]];
 border: none; }

.header {
 color: [[ColorPalette::FontLink]];
 background: [[ColorPalette::BGColorDark]];
 font-size: 12px; }

.headerShadow {
 color: [[ColorPalette::FontALink]]; }

.headerShadow a {
 font-weight: bold;
 color: [[ColorPalette::FontALink]];}

.headerShadow a:hover {
 color: [[ColorPalette::FontALink]];
 background: [[ColorPalette::BGColorTitle]];}

.headerShadow a:active {
 color: [[ColorPalette::FontALink]];
 background: [[ColorPalette::BGColorTitle]];}

.headerForeground {
 color: [[ColorPalette::FontALink]]; }

.headerForeground a {
 font-weight: bold;
 color: [[ColorPalette::FontALink]]; }
 
.headerForeground a:hover {
 color: [[ColorPalette::FontALink]];
 background: [[ColorPalette::BGColorTitle]];}
 
.headerForeground a:active {
 color: [[ColorPalette::FontALink]];
 background: [[ColorPalette::BGColorTitle]];}

.siteTitle {
 font-size: 32px;
 font-weight: bold;
 float: left;
 margin-right: 1em;
 margin-left: 0.5em; 
 padding-top: 5px; }

#topMenu {
 border-left: 1px solid [[ColorPalette::BGColorMid]];
 float: left;
 margin: 0; }
#topMenu a, #topMenu .tiddlyLink, #topMenu .button {
 color: [[ColorPalette::FontALink]];
 float: left; 
 margin: 0em;
 padding: 1.6em 15px 10px 15px;
 border: none; 
 border-right: 1px solid [[ColorPalette::BGColorMid]];}
#topMenu a:hover, #topMenu .button:hover {
 color: [[ColorPalette::FontALink]]; 
 background: [[ColorPalette::BGColorTitle]]; }
#topMenu br {
 display: none; }

.tabSelected{
 font-weight: bold;
 color: [[ColorPalette::FontTag]];
 background: [[ColorPalette::BGColorMid]];
 border: 1px solid [[ColorPalette::BGColorDark]];
 border-bottom: none;
 padding: 2px;}
 
.tabUnselected {
 color: [[ColorPalette::FontTag]];
 background: [[ColorPalette::BGColorDark]]; 
 border: 1px solid [[ColorPalette::BGColorMid]];
 border-bottom: none;
 padding: 2px;}
 
.tabContents {
 color: [[ColorPalette::FontNormal]];
 background: [[ColorPalette::BGColorMid]];
 border: 1px solid [[ColorPalette::BGColorDark]]; }

.tabContents hr{
 border: 1px solid [[ColorPalette::FontLink]];}

.tabContents .button {
 border: 0;}

#sidebar {
 font-size: 12px;}

#sidebarOptions input {
 color: [[ColorPalette::FontNormal]];
 background: [[ColorPalette::BGColorMid]] ;
 border: 1px solid [[ColorPalette::FontNormal]]; }

#sidebarOptions .sliderPanel {
 background: [[ColorPalette::BGColorMid]]; 
 margin: 2px 3px 5px 10px;
 padding: 5px;
 font-size: 12px; }

#sidebarOptions .sliderPanel a {
 border: none;
 color: [[ColorPalette::FontLink]];
 font-style: normal;}

#sidebarOptions .sliderPanel a:hover {
 color: [[ColorPalette::FontALink]];
 background: [[ColorPalette::BGColorTitle]]; }

#sidebarOptions .sliderPanel a:active {
 color: [[ColorPalette::FontALink]];
 background: [[ColorPalette::BGColorTitle]]; }
 
#sidebarTabs a:hover, #sidebarTabs a:active{
 color: [[ColorPalette::FontALink]];
 background: [[ColorPalette::BGColorTitle]];}
 
.wizard {
 background: [[ColorPalette::BGColorTitle]];
 border: none; }

.wizard h1 {
 color: [[ColorPalette::FontTitle]];
 font-size: 24px;
 padding: 7px 2px; }
 
.wizard h2 {
 color: [[ColorPalette::FontLink]]; 
 font-size: 22px;
 padding: 7px 2px;}

.wizardStep {
 background: [[ColorPalette::Background]];
 border: none; }

.wizard .button {
 font-size: 12px;
 color: [[ColorPalette::FontTag]];
 background: none;
 border: none; }

.wizard .button:hover {
 font-size: 12px;
 color: [[ColorPalette::FontALink]];
 background: [[ColorPalette::BGColorTitle]];
 border-color: [[ColorPalette::FontLink]]; }

.wizard .button:active {
 font-size: 12px;
 color: [[ColorPalette::FontALink]];
 background: [[ColorPalette::BGColorTitle]];
 border: none; }

#messageArea {
 border: 1px dotted [[ColorPalette::FontNormal]];
 background: [[ColorPalette::BGColorMid]];
 color: [[ColorPalette::FontNormal]]; }

#messageArea .button {
 padding: 0.2em 0.2em 0.2em 0.2em;
 color: [[ColorPalette::FontTag]];
 background: none;
 border: none; }

#messageArea .button:hover {
 font-size: 12px;
 color: [[ColorPalette::FontALink]];
 background: [[ColorPalette::BGColorTitle]];
 border-color: [[ColorPalette::FontLink]]; }

#messageArea .button:active {
 font-size: 12px;
 color: [[ColorPalette::FontALink]];
 background: [[ColorPalette::BGColorTitle]];
 border: none; }

.popup {
 font-size: 12px;
 color: [[ColorPalette::FontALink]];
 background: [[ColorPalette::BGColorDark]];
 border: 1px solid [[ColorPalette::FontALink]];}

.popup hr {
 color: [[ColorPalette::FontALink]];
 background: [[ColorPalette::BGColorDark]];
 border-bottom: 1px; }

.listBreak div{
 border-bottom:1px solid [[ColorPalette::FontALink]];}

.popup li.disabled {
 color: [[ColorPalette::FontALink]]; }

.popup li a, .popup li a:visited {
 border: none;
 color: [[ColorPalette::FontLink]]; }

.popup li a:hover {
 color: [[ColorPalette::FontALink]];
 background: [[ColorPalette::BGColorTitle]];
 border: none;}

#displayArea {
 margin: 0.5em 17em 0em 1.35em;
 padding: 10px 0px 10px; }

.tiddler {
 background: [[ColorPalette::BGColorMid]];
 margin-bottom: 20px;
 padding: 1em 2em 1em 2em;}

.shadow .title {
 color: [[ColorPalette::FontTitle]]; }

.title {
 color: [[ColorPalette::FontTitle]]; }

.subtitle {
 color: [[ColorPalette::FontSystem]]; }

.toolbar {
 color: [ColorPalette::FontSystem]]; }
 
.selected .toolbar .button {
 font-size: 12px;
 color: [[ColorPalette::FontTag]];
 border: none; }

.selected .toolbar .button:hover {
 font-size: 12px;
 color: [[ColorPalette::FontALink]];
 background: [[ColorPalette::BGColorTitle]];
 border-color: [[ColorPalette::FontLink]]; }

.selected .toolbar .button:active {
 font-size: 12px;
 color: [[ColorPalette::FontALink]];
 background: [[ColorPalette::BGColorTitle]];
 border: none; }
 
.tagging, .tagged {
 color: [[ColorPalette::FontSystem]];
 border: 1px dashed [[ColorPalette::FontSystem]];
 background: [[ColorPalette::BGColorMid]];}

.selected .tagging, .selected .tagged {
 color: [[ColorPalette::FontSystem]];
 border: 1px dashed [[ColorPalette::FontSystem]];
 background: [[ColorPalette::BGColorDark]]; }

.tagging .listTitle, .tagged .listTitle {
 color: [[ColorPalette::FontSystem]]; }

.tagging .button, .tagged .button {
 border: none;}

.footer {
 color: [[ColorPalette::FontSystem]];
 background: [[ColorPalette::BGColorDark]]; }

.selected .footer {
 color: [[ColorPalette::FontSystem]];
 background: [[ColorPalette::BGColorDark]]; }

.error, .errorButton {
 color: [[ColorPalette::FontLink]];
 background: [[ColorPalette::Error]]; }
 
.viewer a:hover, .viewer a:active{
 color: [[ColorPalette::FontALink]];
 background: [[ColorPalette::BGColorTitle]];}
 
.viewer .button {
 background: [[ColorPalette::BGColorTitle]];
 font-weight: bold;
 border: none;}

.viewer .button:hover {
 color: [[ColorPalette::FontALink]];
 background: [[ColorPalette::BGColorTitle]];
 border: none; }

.viewer .button:active {
 color: [[ColorPalette::FontALink]];
 background: [[ColorPalette::BGColorTitle]];
 border: none; }

.viewer blockquote {
 background: [[ColorPalette::BGColorDark]];
 border: none;
 padding: 5px;}

.viewer pre {
 font-size: 12px;
 background: [[ColorPalette::BGColorDark]];
 border: 2px inset [[ColorPalette::FontALink]];
 padding: 8px; }

.viewer code {
 color: [[ColorPalette::FontNormal]];}

.viewer hr {
 border: 1px solid [[ColorPalette::FontLink]]; }

.highlight, .marked {
 color: [[ColorPalette::FontALink]];
 background: [[ColorPalette::FontSystem]]; }

.viewer table {
 border: 2px solid [[ColorPalette::FontSystem]]; }

.viewer th, .viewer thead td {
 background: [[ColorPalette::BGColorDark]];
 border: 1px solid [[ColorPalette::FontSystem]];
 color: [[ColorPalette::FontSystem]]; }
 
.viewer th a, .viewer thead td a{ 
 color: [[ColorPalette::FontNormal]]; }

.viewer td, .viewer tr {
 background: transparent;
 border: 1px solid [[ColorPalette::FontSystem]];
 padding: 2px;}

.editor input {
 font-size: 12px;
 color: [[ColorPalette::FontNormal]];
 background: [[ColorPalette::BGColorTitle]];
 border: 1px solid [[ColorPalette::FontNormal]];
 padding: 3px;
 margin: 2px 0px;}

.editor textarea {
 font-size: 12px;
 color: [[ColorPalette::FontNormal]];
 background: [[ColorPalette::BGColorTitle]];
 border: 1px solid [[ColorPalette::FontNormal]];
 padding: 3px;
 margin: 2px 0px;
 width: 100%;}

.editorFooter {
 color: [[ColorPalette::FontSystem]]; }
 
/* Pulign ArchivedTimeline 中間 hr */
#sidebarTabs .timelineSliderPanel hr{
 border: 1px dashed [[ColorPalette::FontLink]]; }
/*}}}*/
/*{{{*/
#saveTest {display:none;}
#messageArea {display:none;}
#copyright {display:none;}
#storeArea {display:none;}
#storeArea div {padding:0.5em; margin:1em 0em 0em 0em; border-color:[[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] #444 #ddd; border-style:solid; border-width:2px; overflow:auto;}
#shadowArea {display:none;}
#javascriptWarning {width:100%; text-align:center; font-weight:bold; background-color:#dd1100; color:[[ColorPalette::Background]]; padding:1em 0em;}

.forEachTiddlerError{color: [[ColorPalette::Background]]fff;background-color: #880000;}

* html .tiddler {height:1%;}

body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0em 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0em 1em 1em; left:0px; top:0px;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0em 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 .3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.wizard {padding:0.1em 1em 0em 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0em 0em 0em 0em; margin:0.4em 0em 0.2em 0em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0em 0em 0em 0em; margin:0.4em 0em 0.2em 0em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0em 0em 0em; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0em;}
.wizardFooter .status {padding:0em 0.4em 0em 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em 0.1em 0.2em;}

#messageArea {position:absolute; top:2em; right:0em; margin:0.5em; padding:0.5em; z-index:200;}
*[id='messageArea'] {position:fixed !important; z-index:200;}
.messageToolbar {display:block; text-align:right; padding:0.2em 0.2em 0.2em 0.2em;}
#messageArea a {text-decoration:underline;}

.tiddlerPopupButton {padding:0.2em 0.2em 0.2em 0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em 1em 1em 1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0em;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0em 0em 0.5em;}
.tab {margin:0em 0em 0em 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0em 14em;}

.toolbar {text-align:right; font-size:.9em;}

.tiddler {padding:1em 1em 0em 1em;}

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0em 0.25em; padding:0em 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

table {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0em; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}

.fieldsetFix {border:0; padding:0; margin:1px 0px 1px 0px;}

.sparkline {line-height:1em;}
.sparktick {outline:0;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em 0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em 0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0em; right:0em;}
#backstageButton a {padding:0.1em 0.4em 0.1em 0.4em; margin:0.1em 0.1em 0.1em 0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; margin:0em 3em 0em 3em; padding:1em 1em 1em 1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em 0.2em 0.4em;}
#backstageCloak {display:none; z-index:50; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/

/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}

h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

.tabSelected{color:[[ColorPalette::PrimaryDark]];
	background:[[ColorPalette::TertiaryPale]];
	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
	border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background::[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}

#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
.sparktick {background:[[ColorPalette::PrimaryDark]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

.imageLink, #displayArea .imageLink {background:transparent;}

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

table {border:2px solid [[ColorPalette::TertiaryDark]];}
th, thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
td, tr {border:1px solid [[ColorPalette::TertiaryDark]];}

.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity:60)';}
/*}}}*/

body {	
	font-size: 12px; 
	letter-spacing: 1px;}

/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar {display: none ! important;}
#displayArea {margin: 1em 1em 0em 1em;}
/* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
noscript {display:none;}
}
/*}}}*/
> 讓網頁以你喜歡的樣子呈現
* ''套件作者'':[[Jason Barnabe (np)|http://userstyles.org/]]
* ''套件網頁'':[[官方網頁|http://userstyles.org/stylish/]]、[[Add-ons#2108|https://addons.mozilla.org/zh-TW/firefox/addon/2108]]
* ''套件語系'':內建繁中
* ''撰寫版號'':0.5.5
* ''套件功能'':
** 讓你自訂不同網頁的CSS樣式來呈現。
** 可針對個別頁面或網域設定,也可設成全域顯示。
** <<tiddler "Style 樣式收集">>
* ''相關鏈結'':[[中文介紹|http://www.goston.net/2007/02/23/746/]]、[[中文說明|http://forum.moztw.org/viewtopic.php?t=16467#90494]]、[[中文Wiki|http://wiki.moztw.org/index.php/Stylish]]、[[相關翻譯|http://forum.moztw.org/viewtopic.php?t=17763]]、[[應用範例|http://forum.moztw.org/viewtopic.php?t=13247]]、[[修改Firefox介面|http://forum.moztw.org/viewtopic.php?t=13497]]
* ''相關類似'':
* ''心得介紹'':<br>有時候總會覺得某些網站的配置不是非常順眼,這時就可以利用這個套件,加以編修的CSS來修改成你喜歡的方式呈現喔!如果是程式苦手,也可以利用 [[Moztw|http://forum.moztw.org/]] 中熱心玩家提供的語法,或是在 [[userstyles.org|http://userstyles.org/]] 尋找適合自己的樣式。
> 拖拉就能開啟純文字網址及存檔
* ''套件作者'':morphis
* ''套件網頁'':[[mozdev|http://superdragandgo.mozdev.org/]]、[[Add-ons#137|https://addons.mozilla.org/zh-TW/firefox/addon/137]]
* ''套件語系'':私譯繁中
* ''撰寫版號'':0.2.6
* ''套件功能'':
** 拖拉純文字網址即可開啟,可設定開啟方式。
** 拖拉圖片即會存檔,可指定固定存檔位置。
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?t=4256]]
* ''相關類似'':[[Drag de Go]]、[[Easy DragToGo]]
* ''心得介紹'':<br>年度推薦套件之一。雖然用過一陣子功能更進一級的改進套件[[Drag de Go]],不過仔細想想還是覺得那對自己來說太多不必要的功能,所以還是裝回了這個。<br><br>可惜作者似乎沒有在維護了,就算強制在 Firefox 3 中啟用亦無法正常動作,目前改用 [[Easy DragToGo]] 取代。
[img[http://farm1.static.flickr.com/163/412289419_6faee2230f_t.jpg][http://www.flickr.com/photos/95095733@N00/412289419/]] |令人懷念的瑪利歐佈景
* ''佈景作者'':[[freewally|http://freewally.deviantart.com/]]
* ''佈景網頁'':[[官方網頁|http://www.deviantart.com/deviation/45691660/]]
* ''佈景介紹'':<br>非常可愛的瑪利歐佈景,工具列上的水管,按下去還會彈一下喔!不過不建議喜歡在工具列上顯示提示文字的人使用,放出提示文字的話,工具列的版面會亂掉。
> 用縮圖一覽已開啟的分頁
* ''套件作者'':[[SHIMODA Hiroshi|http://piro.sakura.ne.jp/xul/]]
* ''套件網頁'':[[官方網頁|http://piro.sakura.ne.jp/xul/_tabcatalog.html.en]]、[[Add-ons#1937|https://addons.mozilla.org/zh-TW/firefox/addon/1937]]
* ''套件語系'':英文其他
* ''套件功能'':
** 用縮圖一覽所有開啟中的視窗。
** 點選預覽圖示即可跳至該分頁。
** 可指定開啟一覽的熱鍵,預設是F8。
* ''相關鏈結'':[[中文介紹|http://www.goston.net/2006/11/06/642/]]
* ''相關類似'':[[Informational Tab]]、[[Tab Scope]]
* ''心得介紹'':<br>IE7 和 Opera 都具備的功能,現在也可以在 Firefox 裡面實現。功能上很簡潔,讓喜歡開多個分頁的人在操作上更為便利。
> 用 3D 特效切換分頁
* ''套件作者'':S
* ''套件網頁'':[[官方網頁|https://sourceforge.net/projects/tabeffect/]]、[[Add-ons#4258|https://addons.mozilla.org/zh-TW/firefox/addon/4258]]
* ''套件語系'':英文其他
* ''套件功能'':
** 切換分頁時以3D燈箱切換
* ''相關鏈結'':[[中文介紹|http://blog.joaoko.net/archives/241]]、[[中文介紹|http://playpcesor.blogspot.com/2007/02/firefoxtab-effect.html]]
* ''相關類似'':
* ''心得介紹'':<br>切換分頁時會用3D燈箱旋轉來顯示,基本上就是裝來炫的套件(笑)
> 強化 Firefox 的分頁功能
* ''套件作者'':[[Hemiolasun|http://hemiolasun.free.fr/]]
* ''套件網頁'':[[官方網頁|http://hemiolapei.free.fr/extensions/index.php/tab-mix-lite]]
* ''套件語系'':內建繁中
* ''撰寫版號'':
* ''套件功能'':
** 可用 CTRL + 數字鍵 切換分頁,也可以 CTRL + Tab 一個一個分頁切換。
** 指定各種方法開敨分頁時的前景後景等設定。
* ''相關鏈結'':
* ''相關類似'':[[Tab Mix Plus]]
* ''心得介紹'':<br>加強 Firefox 分頁功能的套件,一般使用大概足夠了。如果還覺得功能不夠滿足,可以去使用更強大的 [[Tab Mix Plus]]。
> 強化 Firefox 的分頁功能
* ''套件作者'':CPU,  onemen
* ''套件網頁'':[[官方網頁|http://tmp.garyr.net/]]、[[Add-ons#1122|https://addons.mozilla.org/zh-TW/firefox/addon/1122]]、[[開發版本|http://tmp.garyr.net/dev-builds/]]
* ''套件語系'':內建繁中
* ''撰寫版號'':0.3.6
* ''套件功能'':
** 可用 CTRL + 數字鍵 切換分頁,也可以 CTRL + Tab 一個一個分頁切換。
** 鎖定、回覆、定時重整分頁。
** 指定各種方法開敨分頁時的前景後景等設定。
** 設定檔可匯出匯入。
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?t=10181]]
* ''相關類似'':[[Tab Mix Lite]]
* ''心得介紹'':<br>雖然比起之前的版本, Firefox 2.0 強化了不少分頁功能,但用習慣部分套件加強的分頁功能,所以還是習慣裝上套件讓使用更為便利。<br><br>除了 Add-ons 的官方版本外,另外有開發中的社群中文版可供下載安裝。<br><br>如果覺得這個過於繁重,也可以使用較精簡的 [[Tab Mix Lite]]
> 便利的分頁縮圖預覽
* ''套件作者'':[[Gomita|http://www.xuldev.org/]]
* ''套件網頁'':[[官方網頁|http://www.xuldev.org/tabscope/]]、[[Add-ons#4882|https://addons.mozilla.org/zh-TW/firefox/addon/4882]]
* ''套件語系'':內建繁中
* ''套件功能'':
** 游標移到分頁標籤上,會顯示該分頁的預覽視窗。
** 可指定預覽視窗的大小。
** 可指定預覽視窗出現在分頁標籤的下方(預設)或下方。
** 可直接從覽視窗關閉該分頁。
* ''相關鏈結'':[[中文介紹|http://blog.joaoko.net/archives/389]]
* ''相關類似'':[[Informational Tab]]、[[Tab Catalog]]
* ''心得介紹'':<br>想預覽單一分頁內容時很方便的套件。配合習慣把分頁列顯示在底部的使用者,可以自行設定讓預覽小圖示顯示在上方。<br><br>只是個人認為實用上來說,可以一次預覽全部分頁的 [[Tab Catalog]] 要比一次只能預覽一個分頁的這個來得更為便利。當然還是要看使用者覺得何者方便吧。
> 讓網頁上的表格像在Excel裡
* ''套件作者'':[[Mingyi Liu|http://www.mingyi.org]]
* ''套件網頁'':[[官方網頁|http://www.mingyi.org/other/tabletools.html]]、[[Add-ons#2637|https://addons.mozilla.org/zh-TW/firefox/addon/2637]]
* ''套件語系'':內建繁中
* ''撰寫版號'':
* ''套件功能'':
** 可針對網頁上的表格進行排序。
** 可針對網頁上的表格進行指定欄位的下拉式選單及關鍵字篩選。
** 可以 HTML 及 Tab 間隔方式複製網頁上的表格。
** 可設定熱鍵處理。
* ''相關鏈結'':
* ''相關類似'':
* ''心得介紹'':<br>很有趣的套件,把網頁上的表格,設出像 Excel 的篩選功能的下拉式選單,或是針對特定欄位進行關鍵字的篩選。對常常在網頁上檢索各式表格的人來說,可是個超級方便的套件。
> 讓純文字網址自動變成鏈結
* ''套件作者'':[[SHIMODA Hiroshi|http://piro.sakura.ne.jp/xul/]]
* ''套件網頁'':[[官方網頁|http://piro.sakura.ne.jp/xul/_textlink.html.en]]、[[Add-ons#1939|https://addons.mozilla.org/zh-TW/firefox/addon/1939]]
* ''套件語系'':內建繁中
* ''撰寫版號'':2.0.2008042801
* ''套件功能'':
** 可自動轉換無法直接點選開啟的純文字網址成可點選的鏈結。
** 可自訂五組不同擊點方式的效果(開在原分頁/新分頁/新視窗/前景/背景等)。
** 可自訂純文字網址補完規則。
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?t=20547]]
* ''相關類似'':[[Linkification]]
* ''心得介紹'':<br>自訂性遠較 [[Linkification]] 高的純文字網址轉換套件,個人偏愛它可以自訂開啟在背景的部分。
> 可快速跳至標記區的螢光筆
* ''套件作者'':[[Hemiolasun|http://hemiolasun.free.fr/]]
* ''套件網頁'':[[官方網頁|http://hemiolapei.free.fr/extensions/index.php/textmarker-go]]、[[Add-ons#5766|https://addons.mozilla.org/zh-TW/firefox/addon/5766]]
* ''套件語系'':內建繁中
* ''撰寫版號'':0.7.1
* ''套件功能'':
** 三色可自訂前景/背景色的螢光筆。可以右鍵選單點選、加以【Ctrl】點選、【Shift】點選切換三種色彩。
** 使用【F2】或點選右鍵選單即可快速在該頁面上的標記區間切換,同樣可搭配【Ctrl】、【Shift】使用。
* ''相關鏈結'':
* ''相關類似'':[[Line Marker]]、[[TextMarker!]]
* ''心得介紹'':<br>想在單頁面上標記區快速跳躍的好東西。相對是不具備離開該頁面保留螢光標記的功能,需要者大概得自行取捨需求功能吧!
> 在網頁用三色螢光標記重點
* ''套件作者'':Simon Shareef
* ''套件網頁'':[[Add-ons#559|https://addons.mozilla.org/zh-TW/firefox/addon/559]]
* ''套件語系'':英文其他
* ''撰寫版號'':0.3.2
* ''套件功能'':
** 可啟用鍵盤熱鍵,用M、N、B三鍵將反白文字以三種顏色標記(預設關閉)。
** 可以自訂標記顏色。
** 可刪除標記文字。
* ''相關鏈結'':[[中文介紹|http://ck69user.blogspot.com/2007/10/firefox-extension-42-textmarker.html]]
* ''相關類似'':[[Line Marker]]、[[TextMarker Go]]
* ''心得介紹'':<br>讓大量瀏覽時可以快速將重點點明,利於自己閱讀的好幫手。
> 保存文字輸入欄的內容
* ''套件作者'':[[Hemiolasun|http://hemiolasun.free.fr/]]
* ''套件網頁'':[[官方網頁|http://hemiolapei.free.fr/extensions/index.php/textarea-cache]]
* ''套件語系'':內建繁中
* ''撰寫版號'':0.3.7
* ''套件功能'':
** 自動記憶最近三次在文字輸入欄(textarea)中的文字。
** 新版新增了工具列快速鍵,可直接叫出暫存記憶!
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?t=12491]]
* ''相關類似'':
* ''心得介紹'':<br>應該不少人都知道這個非常讚的套件。在網頁上寫文時最怕的莫過於送出後連線錯誤,結果打的文章全數遺失,這個套件幫助大家暫存下內容。
 |充滿冬令節慶氣息的聖誕佈景
* ''佈景作者'':[[TwisterMc|http://www.twistermc.com/]]
* ''佈景網頁'':[[Add-ons#3918|https://addons.mozilla.org/zh-TW/firefox/addon/3918]]
* ''佈景介紹'':<br>非常豪華美麗的聖誕佈景,適合想享受節慶氣氛的人。
> 把選單工具列的選項縮成下拉選單
* ''套件作者'':[[Anthony Lieuallen|http://arantius.com/]]
* ''套件網頁'':[[官方網頁|http://trac.arantius.com/wiki/Extensions/TinyMenu]]、[[Add-ons#1455|https://addons.mozilla.org/zh-TW/firefox/addon/1455]]
* ''套件語系'':內建繁中
* ''撰寫版號'':1.4.6
* ''套件功能'':
** 把選單工具列的數個選項縮成一個【選單】的下拉選項。
** 可選擇各大項顯示與否。
* ''相關鏈結'':
* ''相關類似'':[[Compact Menu]]、[[Compact Menu 2]]、[[Personal Menu]]
* ''心得介紹'':<br>作用非常簡單明確的小套件。缺憾是產生的【選單】這個按鍵無法異位,選單工具列還是隱藏不可。
/*{{{*/
#topMenu br {
	display:none;}

#topMenu a, #topMenu .tiddlyLink, #topMenu .button {
	margin:0em;
	font-size:1.2em;
	color:[[ColorPalette::HeaderPrimaryLight]];
	background:transparent;
	padding:0.5em 1em 0.5em 1em;
	border:none;
	border-right: 1px solid [[ColorPalette::SecondaryDark]];
	loat:left;}

#topMenu {
	border-left: 1px solid [[ColorPalette::SecondaryDark]];
	float:left;margin:0;}
	
#topMenu a:hover {
	color:[[ColorPalette::Background]];
	background:[[ColorPalette::PrimaryDark]];}
/*}}}*/

/*{{{*/
.popupTips {
	position:absolute;
	visibility:hidden;
	padding:0.5em;
	border:2px solid [[ColorPalette::PrimaryPale]];
	background:[[ColorPalette::Background]];
	color:[[ColorPalette::Foreground]];
	z-index:300;
	filter:alpha(opacity=90);-moz-opacity:0.9;opacity: 0.9;}

.tipsNote {
	position:relative;
	border:none;
	background:[[ColorPalette::Background]];
	color:[[ColorPalette::Error]];
	cursor:help;}

.tipsInfo {
	position:relative;
	background:[[ColorPalette::Background]];
	color:[[ColorPalette::Foreground]];}

.tipsMenu {
	margin:0em;
	font-size:1.2em;
	color:[[ColorPalette::HeaderPrimaryLight]];
	background:transparent;
	padding:0.5em 1em 0.5em 1em;
	border:none;
	border-right: 1px solid [[ColorPalette::SecondaryDark]];
	float:left;}
	
.tipsMenu {
	border-left: 1px solid [[ColorPalette::SecondaryDark]];
	float:left;margin:0;}
	
.tipsMenu:hover {
	color:[[ColorPalette::Background]];
	background:[[ColorPalette::Foreground]];}
	
.bigblue {
	font-size: 1.2em;color:darkblue}
	
.help {
	cursor:help;}
/*}}}*/
> 與可愛的Foxkeh同在
* ''套件作者'':Hadakadenkyu
* ''套件網頁'':[[Add-ons#3867|https://addons.mozilla.org/zh-TW/firefox/addon/3867]]
* ''套件語系'':英文其他
* ''套件功能'':
** 把日本的Firefox吉祥物Foxkeh整合到你的Firefox裡面
* ''相關鏈結'':
* ''相關類似'':
* ''心得介紹'':<br>裝可愛的套件之一。目前經過改版,Foxkeh圖片的安排比以前更加完善舒服喔!<br><br>註:[[Foxkeh|http://spreadfirefox.jp/foxkeh/]]是日本的小狐吉祥物,很可愛的呢(笑)<br><br>
[img[之前為了做樣式而做的Foxkeh玩地球圖|http://img78.imageshack.us/img78/9851/foxkenplay200rs4.gif]]
> 提供許多工具列按鍵供選擇
* ''套件作者'':[[Michael B|http://codefisher.org/]]
* ''套件網頁'':[[官方網頁|http://codefisher.org/toolbar_button/]]、[[Add-ons#2377|https://addons.mozilla.org/zh-TW/firefox/addon/2377]]
* ''套件語系'':英文其他
* ''撰寫版號'':0.5.0.1
* ''套件功能'':
** 提供許多常用功能的工具列按鍵讓使用者選擇使用。
* ''相關鏈結'':
* ''相關類似'':[[Custom Buttons]]、[[Custom Buttons²]]
* ''心得介紹'':<br>因為提供的按鍵太多了,懶得一一介紹了。基本上是一些常用選單工具列有的功能,也有少部分的網站。<br><br>相較於 [[Custom Buttons]] 或 [[Custom Buttons²]] 還要自己去找按鍵語法或自行撰寫,這大概是懶人的利器吧?(笑)
> 快速翻譯網頁文字
* ''套件作者'':Nazo
* ''套件網頁'':[[官方網頁|http://www4.pf-x.net/~nazodane/koya/extension/translation.xhtml]]、[[Add-ons#186|https://addons.mozilla.org/zh-TW/firefox/addon/186]]
* ''套件語系'':內建繁中
* ''撰寫版號'':1.4.14.7
* ''套件功能'':
** 選擇好來源語言及翻譯語言,反白好文章段落按下翻譯鍵(或設定啟用中鍵翻譯),即可以浮動視窗檢視翻譯。
** 可在側邊欄開啟翻譯視窗,直接將文字拖入或在其中打字再進行翻譯。
** 具備自動偵測來源語言的功能。
** 可設定要使用的翻譯網站。
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?t=14161]]
* ''相關類似'':
* ''心得介紹'':<br>非常好用的套件,快速檢視網站時的便利工具,雖然網頁翻譯往往只能參考用而已(笑)。<br><br>雖然有自動偵測來源語言的功能,個人使用這個功能時,常常會造成按下去沒反應,個人不太建議使用該功能。
> 樹狀呈現分頁列表
* ''套件作者'':[[SHIMODA Hiroshi|http://piro.sakura.ne.jp/xul/]]
* ''套件網頁'':[[官方網頁|http://piro.sakura.ne.jp/xul/_treestyletab.html.en]]、[[Add-ons#1936|https://addons.mozilla.org/zh-TW/firefox/addon/1936]]
* ''套件語系'':內建簡中
* ''撰寫版號'':1.1.2006011602
* ''套件功能'':
** 以樹狀呈現分頁標籤。
** 可設定分頁標籤列出現在上/下/左/右等不同位置。
** 可設定分頁標籤列自動隱藏/顯示。
* ''相關鏈結'':
* ''相關類似'':
* ''心得介紹'':<br>個人偏愛以直的方式排列出分頁列表,但可惜若以直的方式呈現,分頁側邊欄就常得開開關關,很容易影響瀏覽。這個套件有趣的地方在於他的自動隱藏分頁,在顯示時會以半透明的方式呈現在瀏覽頁面的上方,而不會影響瀏覽。
> 便利 Twitter 工具
* ''套件作者'':Kazuho Okui
* ''套件網頁'':[[官方網頁|http://www.naan.net/trac/wiki/TwitterFox]]、[[Add-ons#5081|https://addons.mozilla.org/zh-TW/firefox/addon/5081]]
* ''套件語系'':內建繁中
* ''撰寫版號'':1.5.3
* ''套件功能'':
** 可管理複數 Twitter 帳號。
** 顯示你的 Twitter 聯播。
** 可直接新增 Twitter 訊息。
** 可直接點選好友訊息回覆。亦可直接打 @ ,停頓會列出好友帳號供選擇。
** 若把 @ 改成 d 就會以私密訊息送交友人。
* ''相關鏈結'':
* ''相關類似'':
* ''心得介紹'':<br>[[Twitter|http://twitter.com/]] 是一種微型部落格,每篇限定百來個字數,編輯不可,通常就是人們祌來一筆想做記錄,又不想打字用的。在加入訂閱後,可以看到訂閱者和自己的聊播,官方也提供放置進部落格的聯播器。除了上官網更新外,官方亦提供 [[gtalk|http://www.google.com/talk/]] 及手機更新(台灣應該不能用吧?)<br><br>這個套件大大增加了 Twitter 的簡易性,讓你不用到開官方網頁或登入 gtalk,也有玩 Twitter 的人不容易過的便利工具!
> 自訂網址列的網址補完字首字尾
* ''套件作者'':Kim Go Myoung|
* ''套件網頁'':[[Add-ons#443|https://addons.mozilla.org/zh-TW/firefox/addon/443]]
* ''套件語系'':內建繁中
* ''撰寫版號'':0.3.3
* ''套件功能'':
** 可以自訂在網址列輸入字母后,按特定鍵自動補完的字首和字尾。
** 可自訂的按鍵:
*** Enter
*** Ctrl + Enter
*** Shift + Enter
*** Ctrl + Shift + Enter
* ''相關鏈結'':
* ''相關類似'':
* ''心得介紹'':<br>Firefox 本身具備在網址列輸入文字後,按特定鍵會補完網址的功能。例如按 Ctrl + Enter 會自動補成「www.文字.com」,如果按 Shift + Enter 則會補成「www.文字.net」,只是對於國內慣用的 .com.tw 就無法補完了。這個套件的功能強化了快速補完網址的自訂性。
> 輕鬆下載網頁上的影音檔案
* ''套件作者'':[[h2g2bob|http://www.compunach.co.nr/]]
* ''套件網頁'':[[mozdev|http://unplug.mozdev.org/]]、[[Add-ons#2254|https://addons.mozilla.org/zh-TW/firefox/addon/2254]]
* ''套件語系'':英文其他
* ''撰寫版號'':1.6.06
* ''套件功能'':
** 在工具列上新增一個魚的圖示,按下去會自動列出頁面上的影音檔的鏈結供下載。
** 可支援網頁上的影音檔(包含 [[YouTube|http://www.youtube.com/]] 和 [[Google Video|http://video.google.com/]] 這種站台)下載。
* ''相關鏈結'':[[中文介紹|http://playpcesor.blogspot.com/2007/02/firefoxunplug-154.html]]
* ''相關類似'':[[DownloadHelper]]、[[VideoDownloader]]
* ''心得介紹'':<br>泉主要用在影音網站如 [[Google Video|http://video.google.com/]] 、 [[YouTube|http://www.youtube.com/]] 的下載用,不過應該也是可以用在別的部分的影音及 Flash 檔案的下載,不過泉自己的需求性不高,故沒測試。
> 快速更新書籤內容
* ''套件作者'':[[chuonthis|http://www.chuonthis.com/extensions/]]
* ''套件網頁'':[[官方網頁|http://www.chuonthis.com/extensions/updatebookmark.php]]、[[Add-ons#689|https://addons.mozilla.org/zh-TW/firefox/addon/689]]
* ''套件語系'':內建簡中
* ''撰寫版號'':0.0.4.1
* ''套件功能'':
** 點選已存在的書籤按右鍵選擇可直接更新內容。
** 更新內容可自訂為:
*** 現在瀏覽頁面的網址(Current > URL)
*** 現在瀏覽頁面的標題(Current > Title)
*** 現在瀏覽頁面的網址和標題( Current > URL and title)
*** 剪貼簿中的網址 (Clipboard > URL)
*** 剪貼簿中的標籤 (Clipboard > Title)
* ''相關鏈結'':
* ''相關類似'':
* ''心得介紹'':<br>更新書籤內容時的便利工具。
> 自動檢查特定網頁更新與否
* ''套件作者'':Pete Burgers
* ''套件網頁'':[[mozdev|http://updatescanner.mozdev.org/]]、[[Add-ons#3362|https://addons.mozilla.org/zh-TW/firefox/addon/3362]]
* ''套件語系'':內建繁中
* ''撰寫版號'':2.2.3
* ''套件功能'':
** 定時掃瞄特定的網頁是否更新。
** 有更新時,狀態列的小圖示會變色, 也有浮動訊息告知。
** 可選擇掃瞄頻率。
** 可選擇更新字數到多少才需要通知。
** 有更新的部分以高亮度表示。
** 可設定網站編碼。
* ''相關鏈結'':[[中文介紹|http://blog.joaoko.net/archives/414]]
* ''相關類似'':[[Bookmarks LinkChecker]]
* ''心得介紹'':<br>雖然現在有RSS供讀者訂閱,即時得知更新訊息,但還是有很多時候我們觀注網站並沒有RSS可供訂閱。這時候這個套件就很方便了。
> 計算你在網站停留的時間
* ''套件作者'':[[Alexander|http://www.undermined.org/]]
* ''套件網頁'':[[官方網頁|http://www.undermined.org/projects/view/2]]、[[Add-ons#3482|https://addons.mozilla.org/zh-TW/firefox/addon/3482]]
* ''套件語系'':英文其他
* ''撰寫版號'':0.2.1
* ''套件功能'':
** 計算你開啟 Firefox 的時間。
** 計算 Firefox 在最上層進行操作的時間。
** 可加入特定網站網址,計算你停留在那些站台的時間。
* ''相關鏈結'':[[中文介紹|http://blog.joaoko.net/archives/450]]
* ''相關類似'':[[Browser Uptime]]
* ''心得介紹'':<br>不單純的計算啟動 Firefox 的時間的話,泉覺得與其觀察特定網站的停留時間,個人倒是比較期望能自動觀察計算所有連結出去網站的停留時間進行統計。因為對於自己在哪些站台停留的比較久,使用者自己反而容易會陷入迷思吧?可惜這套件不具備這個功能(笑)
> 簡易下載 YouTube 和 Google Video
* ''套件作者'':[[Javi Moya|http://javimoya.com/blog]]
* ''套件網頁'':[[官方網頁|http://videodownloader.net/]]、[[Add-ons#2390|https://addons.mozilla.org/zh-TW/firefox/addon/2390/]]
* ''套件語系'':英文其他
* ''撰寫版號'':1.1.1
* ''套件功能'':
** 可以搜尋到 [[Google Video|http://video.google.com/]] 、 [[YouTube|http://www.youtube.com/]] 等影音分享站的原始檔的位址。
** 下載的檔案多為 lv。
* ''相關鏈結'':
* ''相關類似'':[[DownloadHelper]]、[[UnPlug]]
* ''心得介紹'':<br>該官方網站本身也提供線上把影音站的網址複製過去,得到影音原始檔位置的服務。不過能掛在 Firefox 裡面使用當然更方便(笑)。不過目前個人用同類型套件 [[UnPlug]] 取代。<br><br>雖然可以強制支援 Firefox 3,但由於有網站改版問題,無法偵測到正確的影音下載網址 無法達成目的。
<!--{{{-->
<div class='toolbar' macro='toolbar bookmarks closeTiddler closeOthers +editTiddler permalink references jump'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date [[YYYY-0MM-0DD ]]'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date [[YYYY-0MM-0DD]]'></span>)</div>
<!--<div class='tagging' macro='tagging'></div>-->
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<div class='toolbar' macro='toolbar bookmarks closeTiddler closeOthers +editTiddler permalink references jump'></div>
<!--}}}-->
> 多功能網頁編輯及瀏覽
* ''套件作者'':[[Chris Pederick|http://chrispederick.com/]]
* ''套件網頁'':[[官方網頁|http://chrispederick.com/work/webdeveloper/]]、[[Add-ons#60|https://addons.mozilla.org/zh-TW/firefox/addon/60]]
* ''套件語系'':內建繁中
* ''撰寫版號'':1.1.4
* ''套件功能'':
** 可對當前網頁進行 HTML 及 CSS 編輯及及時預欄。
** 可檢視網頁各區塊、元素、框架等頁面資訊。
** 內建尺規、放大鏡等額外功能。
** 支援在新分頁檢視原始碼,並可設定自動換行。
** 支援網頁自動驗證。
** 可指定視窗大小進行檢視。
** 可顯示圖片來源網址及大小等資訊,並使頁面上的圖片依不同的方式不顯示。
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?t=6273]]、[[活用介紹|http://sidekick.myblog.hk/archives/2006/03/06/744/]]
* ''相關類似'':[[Firebug]]
* ''心得介紹'':<br>其實泉應該沒有把功能全部講完,這個是功能多到泉用不完的超級好物,網頁編輯者不容錯過的好用套件。即使對非進行網頁編輯的人而言,它的圖片及網頁框架、表單編輯或其他雜項功能也是相當實用的。
[img[圖片網址][圖片鏈結網址]] |輕爽的雪景日聖誕佈景
* ''佈景作者'':[[browser1|http://www.browser1.de]]
* ''佈景網頁'':[[官方網頁|http://www.browser1.de/]]、[[Add-ons#4065|https://addons.mozilla.org/zh-TW/firefox/addon/4065]]
* ''佈景介紹'':<br>和 [[Tinseltown]] 一樣是冬日的聖誕佈景,但較為輕爽。除了有下雪圖樣版外,還有沒有動態圖的輕型版 [[X-Mas (Light)|https://addons.mozilla.org/zh-TW/firefox/addon/4087]]
> 在文字輸入欄使用所見即所得編輯HTML
* ''套件作者'':Hypercubed
* ''套件網頁'':[[官方網頁|http://www.hypercubed.com/projects/firefox/]]、[[Add-ons#1449|https://addons.mozilla.org/zh-TW/firefox/addon/1449]]
* ''套件語系'':英文其他
* ''撰寫版號'':
* ''套件功能'':
** 在網頁上的文字輸入區可用右鍵叫出所見即所得HTML編輯器。
** 編輯器可以設定以浮動視窗或頁面下半區顯示。
* ''相關鏈結'':[[中文介紹|http://blog.joaoko.net/archives/154]]
* ''相關類似'':[[BBComposer]]
* ''心得介紹'':<br>在網頁上做回應或編輯,有時候會希望能變插入HTML標籤來編輯回應。這個套件就是用在這種時候。<br><br>泉自己本身是不愛用所見即所得編輯器,所以這個套件對泉自己的實際用途不大。另外可惜就是只支援HTML的所見即所得。
> 記下擋住 JavaScript 的黑名單
* ''套件作者'':[[np|http://userstyles.org]]
* ''套件網頁'':[[Add-ons#4922|https://addons.mozilla.org/zh-TW/firefox/addon/4922]]
* ''套件語系'':內建繁中
* ''撰寫版號'':1.3
* ''套件功能'':
** 在狀態列新增圖示,不想啟用 JavaScript 的網站只要點選一下即可加入黑名單。
** 可管理黑名單列表。
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?t=19418]]
* ''相關類似'':
* ''心得介紹'':<br>有 JavaScript 的效果雖然不錯,但有些網站卻可能因處理不當造成運作不良。這時候可以利用這個套件停用並記下不啟用 JavaScript 的網站黑名單。蠻方便的套件。
> 即時查詢並記錄英文單字
* ''套件作者'':gneheix
* ''套件網頁'':[[官方網頁|http://gneheix.googlepages.com/backword]]、[[Add-ons#2955|https://addons.mozilla.org/zh-TW/firefox/addon/2955]]
* ''套件語系'':內建繁中
* ''撰寫版號'':1.3.6.1
* ''套件功能'':
** 自動查詢游標指向的英文單字並浮動顯示,可搭配CTRL取字
** 自動查詢可選擇使用Google辭典或Dict.cn
** 除自動查詢外亦可以語法自建自己慣用字典,自動查詢後點選檢索
** 可發音
** 啟動後台可記錄單字利於自己複習
** 右下角有圖示,可視需要快速啟用關閉
* ''相關鏈結'':
* ''相關類似'':[[DictCN]]
* ''心得介紹'':<br>有時閱讀英文文章想查某一單字又不用開新分頁的好物。後台記錄的部分其實泉自己沒有用,不過對於學習英文的人來說複習單字會更加便利吧!<br><br>目前改用雖然不能自訂字典,但更為輕巧的[[DictCN]]。
> 在電腦中建立網頁捷徑
* ''套件作者'':[[Evan Eveland|http://evelands.net/evan]]
* ''套件網頁'':[[mozdev|http://deskcut.mozdev.org/]]、[[Add-ons#66|https://addons.mozilla.org/zh-TW/firefox/addon/66]]
* ''套件語系'':英文其他
* ''撰寫版號'':0.5.0.5
* ''套件功能'':
** 可以把網頁存成 Windows 捷徑檔。
** 可指定存放捷徑位置。
* ''相關鏈結'':[[中文介紹|http://ck69user.blogspot.com/2008/02/firefox-extension-72-deskcut.html]]
* ''相關類似'':
* ''心得介紹'':<br>有時了某些原因,想把網頁製作像 IE 中可做的網頁捷徑留下來,而不想存在書籤中。可惜 Firefox 本身沒有提供這個功能。這時候這個套件就非常便利了。<br><br>雖然在目前在 Firefox 3 並無法支援,但在 Firefox 3 當中只要把分頁頁籤拖到電腦的資料夾中,即會產生 Windows 用的網頁捷徑喔!
> 用圓餅選單使用滑鼠手勢
* ''套件作者'':Ons Besbes
* ''套件網頁'':[[mozdev|http://easygestures.mozdev.org/]]、[[Add-ons#29|https://addons.mozilla.org/zh-TW/firefox/addon/29]]
* ''套件語系'':內建繁中
* ''撰寫版號'':4.1.2
* ''套件功能'':
** [img[Firefox Extension - easyGestures 圓餅選單|http://static.flickr.com/182/437355655_176ca70b09.jpg ][http://www.flickr.com/photos/95095733@N00/437355655/]]
** 利用指定滑鼠鍵呼叫出設定好的圓盤選單選擇動作。
** 含基本圓盤和二個替換圖盤,可選擇每個圓盤有八或十個動作,也可指定啟用與否。
** 每個圓盤都可以設定個別的延伸動作五個,但在圓盤上要有設連接延伸圓盤的選項。
** 除了基本的動作外,也可指定開啟程式相關參數、網址或Script,動作部分建議參考下方列表,可選擇性相當高。<br>[img[Firefox Extension - easyGestures 動作列表|http://static.flickr.com/159/437355651_9ddddb682e.jpg ][http://www.flickr.com/photos/95095733@N00/437355651/]]
* ''相關鏈結'':[[中文介紹|http://wiki.moztw.org/index.php/Projects/Doc/FirefoxExtension/easyGestures]]、[[應用介紹|http://blog.roodo.com/f85122/archives/2715094.html]]
* ''相關類似'':
* ''心得介紹'':<br>這是個人很喜歡的圓盤套件,從接觸狐狸不久就用到現在。雖然說畫來畫去的滑鼠手勢很好用,可惜泉看到一大排設定,頭就先開始痛,再加上根本記不得設定了什麼手勢是啥子,所以還是習慣用有提示圖示的圓盤選單。<br><br>雖然這個可以指定按鍵啟動,個人偏好圓盤在右鍵拖曳時才出現,才不會跟其他功能打到。關於程式設定參數的部分可以參考應用介紹中焦貓的說明,其他功能,因為中文化出來了就讓大家慢慢把玩吧!其實泉自己也是在翻譯後才發現eG的功能實在強大的不得了,泉自己用基本功能比較多 XD<br><br>另外4.1版新增了面版選擇功能…老實說個人覺得這是比較不必要的功能啦…不過見人見志囉!

> 用跑馬燈呈現 RSS
* ''套件作者'':didier ernotte
* ''套件網頁'':[[mozdev|https://addons.mozilla.org/zh-TW/firefox/addon/361/]]、[[Add-ons#361|https://addons.mozilla.org/zh-TW/firefox/addon/361]]
* ''套件語系'':內建繁中
* ''撰寫版號'':
* ''套件功能'':
** 以跑馬燈方式播放訂閱的 Feed ,可選擇顯示跑馬燈的位置。
** 可自訂時間切換 Feed 。
** 支援 OPML 的匯入匯出。
* ''相關鏈結'':[[中文介紹|http://]]、[[應用介紹|http://]]
* ''相關類似'':
* ''心得介紹'':<br>泉對輕量級的RSS天王 [[Sage]] 一點興趣都沒有,因為一個個去擊點 Feed 閱讀實在太花時間了。泉一直想要找一個可以對全部的 Feed ,依時間順序聯播放跑馬燈的套件,可惜沒找到。最後稍微合意的只有這個。一次只會跑一個Feed,可以最快可以在一分鍾換下個 Feed 跑。雖然這個有群組功能,不過泉試不出群組功能有啥作用,所以直接略過。個人建議使用本套件訂閱更新快速的 Feed ,如新聞,或是你投以高觀注的 Feed 。<br><br>不過泉裝了這個套件後,Firefox 就會變得非常不穩定,不知道是跟泉本身的套件有相衝突,還是套件本身的關係,這點有再觀察測試。
/***
|''Name:''|zh-HantTranslationPlugin|
|''Description:''|Translation of TiddlyWiki into Traditional Chinese|
|''Source:''|http://tiddlywiki-zh.googlecode.com/svn/trunk/|
|''Subversion:''|http://svn.tiddlywiki.org/Trunk/association/locales/core/zh-Hant/locale.zh-Hant.js|
|''Author:''|BramChen (bram.chen (at) gmail (dot) com)|
|''Version:''|2.4.0|
|''Date:''|May 10, 2008|
|''Comments:''|Please make comments at http://groups-beta.google.com/group/TiddlyWiki-zh/|
|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|''~CoreVersion:''|2.4.0|
***/

//{{{
// --
// -- Translateable strings
// --

// Strings in "double quotes" should be translated; strings in 'single quotes' should be left alone

config.locale = 'zh-Hant'; // W3C language tag
config.options.txtFileSystemCharSet = 'BIG5';

if (config.options.txtUserName == 'YourName' || !config.options.txtUserName) // do not translate this line, but do translate the next line
	merge(config.options,{txtUserName: "YourName"});

merge(config.tasks,{
	save: {text: "儲存", tooltip: "儲存變更至此 TiddlyWiki", action: saveChanges},
	sync: {text: "同步", tooltip: "將你的資料內容與外部伺服器與檔案同步", content: '<<sync>>'},
	importTask: {text: "導入", tooltip: "自其他檔案或伺服器導入文章或套件", content: '<<importTiddlers>>'},
	tweak: {text: "選項", tooltip: "改變此 TiddlyWiki 的顯示與行為的設定", content: '<<options>>'},
	upgrade: {text: "更新", tooltip: "更新 TiddlyWiki 核心程式", content: '<<upgrade>>'},
	plugins: {text: "套件管理", tooltip: "管理已安裝的套件", content: '<<plugins>>'}
});

merge(config.optionsDesc,{
	txtUserName: "編輯文章所使用之作者署名",
	chkRegExpSearch: "啟用正規式搜尋",
	chkCaseSensitiveSearch: "搜尋時,區分大小寫",
	chkIncrementalSearch: "隨打即找搜尋",
	chkAnimate: "使用動畫顯示",
	chkSaveBackups: "儲存變更前,保留備份檔案",
	chkAutoSave: "自動儲存變更",
	chkGenerateAnRssFeed: "儲存變更時,也儲存 RSS feed",
	chkSaveEmptyTemplate: "儲存變更時,也儲存空白範本",
	chkOpenInNewWindow: "於新視窗開啟連結",
	chkToggleLinks: "點擊已開啟文章連結時,將其關閉",
	chkHttpReadOnly: "非本機瀏覽文件時,隱藏編輯功能",
	chkForceMinorUpdate: "修改文章時,不變更作者名稱與日期時間",
	chkConfirmDelete: "刪除文章前須確認",
	chkInsertTabs: "使用 tab 鍵插入定位字元,而非跳至下一個欄位",
	txtBackupFolder: "存放備份檔案的資料夾",
	txtMaxEditRows: "編輯模式中顯示列數",
	txtFileSystemCharSet: "指定儲存文件所在之檔案系統之字集 (僅適用於 Firefox/Mozilla only)"});

// Messages
merge(config.messages,{
	customConfigError: "套件載入發生錯誤,詳細請參考 PluginManager",
	pluginError: "發生錯誤: %0",
	pluginDisabled: "未執行,因標籤設為 'systemConfigDisable'",
	pluginForced: "已執行,因標籤設為 'systemConfigForce'",
	pluginVersionError: "未執行,套件需較新版本的 TiddlyWiki",
	nothingSelected: "尚未作任何選擇,至少需選擇一項",
	savedSnapshotError: "此 TiddlyWiki 未正確存檔,詳見 http://www.tiddlywiki.com/#DownloadSoftware",
	subtitleUnknown: "(未知)",
	undefinedTiddlerToolTip: "'%0' 尚無內容",
	shadowedTiddlerToolTip: "'%0' 尚無內容, 但已定義隱藏的預設值",
	tiddlerLinkTooltip: "%0 - %1, %2",
	externalLinkTooltip: "外部連結至 %0",
	noTags: "未設定標籤的文章",
	notFileUrlError: "須先將此 TiddlyWiki 存至檔案,才可儲存變更",
	cantSaveError: "無法儲存變更。可能的原因有:\n- 你的瀏覽器不支援此儲存功能(Firefox, Internet Explorer, Safari and Opera 經適當設定後可儲存變更)\n- 也可能是你的 TiddlyWiki 檔名包含不合法的字元所致。\n- 或是 TiddlyWiki 文件被改名或搬移。",
	invalidFileError: " '%0' 非有效之 TiddlyWiki 文件",
	backupSaved: "已儲存備份",
	backupFailed: "無法儲存備份",
	rssSaved: "RSS feed 已儲存",
	rssFailed: "無法儲存 RSS feed ",
	emptySaved: "已儲存範本",
	emptyFailed: "無法儲存範本",
	mainSaved: "主要的TiddlyWiki已儲存",
	mainFailed: "無法儲存主要 TiddlyWiki,所作的改變未儲存",
	macroError: "巨集 <<\%0>> 執行錯誤",
	macroErrorDetails: "執行巨集 <<\%0>> 時,發生錯誤 :\n%1",
	missingMacro: "無此巨集",
	overwriteWarning: "'%0' 已存在,[確定]覆寫之",
	unsavedChangesWarning: "注意! 尚未儲存變更\n\n[確定]存檔,或[取消]放棄存檔?",
	confirmExit: "--------------------------------\n\nTiddlyWiki 以更改內容尚未儲存,繼續的話將遺失這些更動\n\n--------------------------------",
	saveInstructions: "SaveChanges",
	unsupportedTWFormat: "未支援此 TiddlyWiki 格式:'%0'",
	tiddlerSaveError: "儲存文章 '%0' 時,發生錯誤。",
	tiddlerLoadError: "載入文章 '%0' 時,發生錯誤。",
	wrongSaveFormat: "無法使用格式 '%0' 儲存,請使用標準格式存放",
	invalidFieldName: "無效的欄位名稱:%0",
	fieldCannotBeChanged: "無法變更欄位:'%0'",
	loadingMissingTiddler: "正從伺服器 '%1' 的:\n\n工作區 '%3' 中的 '%2' 擷取文章 '%0'",
	upgradeDone: "已更新至 %0 版\n\n點擊 '確定' 重新載入更新後的 TiddlyWiki"});

merge(config.messages.messageClose,{
	text: "關閉",
	tooltip: "關閉此訊息"});

merge(config.messages,{
	backstage: {
		open: {text: "控制台", tooltip: "開啟控制台執行編寫工作"},
		close: {text: "關閉", tooltip: "關閉控制台"},
		prompt: "控制台:",
		decal: {
			edit: {text: "編輯", tooltip: "編輯 '%0'"}
		}}});

merge(config.messages,{
	listView: {
		tiddlerTooltip: "檢視全文",
		previewUnavailable: "(無法預覽)"}});

merge(config.messages,{
	dates: {
	months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
	days: ["星期日", "星期一","星期二", "星期三", "星期四", "星期五", "星期六"],
	shortMonths: ["一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二"],
	shortDays: ["日", "一","二", "三", "四", "五", "六"],
	daySuffixes: ["st","nd","rd","th","th","th","th","th","th","th",
		"th","th","th","th","th","th","th","th","th","th",
		"st","nd","rd","th","th","th","th","th","th","th",
		"st"],
	am: "上午",
	pm: "下午"}});

merge(config.messages.tiddlerPopup,{ 
	});

merge(config.views.wikified.tag,{
	labelNoTags: "未設標籤",
	labelTags: "標籤: ",
	openTag: "開啟標籤 '%0'",
	tooltip: "顯示標籤為 '%0' 的文章",
	openAllText: "開啟以下所有文章",
	openAllTooltip: "開啟以下所有文章",
	popupNone: "僅此文標籤為 '%0'"});

merge(config.views.wikified,{
	defaultText: "",
	defaultModifier: "(未完成)",
	shadowModifier: "(預設)",
	dateFormat: "YYYY年0MM月0DD日",
	createdPrompt: "建立於"});

merge(config.views.editor,{
	tagPrompt: "設定標籤之間以空白區隔,[[標籤含空白時請使用雙中括弧]],或點選現有之標籤加入",
	defaultText: ""});

merge(config.views.editor.tagChooser,{
	text: "標籤",
	tooltip: "點選現有之標籤加至本文章",
	popupNone: "未設定標籤",
	tagTooltip: "加入標籤 '%0'"});

merge(config.messages,{
	sizeTemplates:
		[
		{unit: 1024*1024*1024, template: "%0\u00a0GB"},
		{unit: 1024*1024, template: "%0\u00a0MB"},
		{unit: 1024, template: "%0\u00a0KB"},
		{unit: 1, template: "%0\u00a0B"}
		]});

merge(config.macros.search,{
	label: " 尋找",
	prompt: "搜尋本 Wiki",
	accessKey: "F",
	successMsg: " %0 篇符合條件: %1",
	failureMsg: " 無符合條件: %0"});

merge(config.macros.tagging,{
	label: "引用標籤:",
	labelNotTag: "無引用標籤",
	tooltip: "列出標籤為 '%0' 的文章"});

merge(config.macros.timeline,{
	dateFormat: "YYYY年0MM月0DD日"});

merge(config.macros.allTags,{
	tooltip: "顯示文章- 標籤為'%0'",
	noTags: "沒有標籤"});

config.macros.list.all.prompt = "依字母排序";
config.macros.list.missing.prompt = "被引用且內容空白的文章";
config.macros.list.orphans.prompt = "未被引用的文章";
config.macros.list.shadowed.prompt = "這些隱藏的文章已預設內容";
config.macros.list.touched.prompt = "自下載或新增後被修改過的文章"; 

merge(config.macros.closeAll,{
	label: "全部關閉",
	prompt: "關閉所有開啟中的 tiddler (編輯中除外)"});

merge(config.macros.permaview,{
	label: "引用連結",
	prompt: "可存取現有開啟之文章的連結位址"});

merge(config.macros.saveChanges,{
	label: "儲存變更",
	prompt: "儲存所有文章,產生新的版本",
	accessKey: "S"});

merge(config.macros.newTiddler,{
	label: "新增文章",
	prompt: "新增 tiddler",
	title: "新增文章",
	accessKey: "N"});

merge(config.macros.newJournal,{
	label: "新增日誌",
	prompt: "新增 jounal",
	accessKey: "J"});

merge(config.macros.options,{
	wizardTitle: "增訂的進階選項",
	step1Title: "增訂的選項儲存於瀏覽器的 cookies",
	step1Html: "<input type='hidden' name='markList'></input><br><input type='checkbox' checked='false' name='chkUnknown'>顯示未知選項</input>",
	unknownDescription: "//(未知)//",
	listViewTemplate: {
		columns: [
			{name: 'Option', field: 'option', title: "選項", type: 'String'},
			{name: 'Description', field: 'description', title: "說明", type: 'WikiText'},
			{name: 'Name', field: 'name', title: "名稱", type: 'String'}
			],
		rowClasses: [
			{className: 'lowlight', field: 'lowlight'}
			]}
	});

merge(config.macros.plugins,{
	wizardTitle: "擴充套件管理",
	step1Title: "- 已載入之套件",
	step1Html: "<input type='hidden' name='markList'></input>", // DO NOT TRANSLATE
	skippedText: "(此套件因剛加入,故尚未執行)",
	noPluginText: "未安裝套件",
	confirmDeleteText: "確認是否刪除此文章:\n\n%0",
	removeLabel: "移除 systemConfig 標籤",
	removePrompt: "移除 systemConfig 標籤",
	deleteLabel: "刪除",
	deletePrompt: "永遠刪除所選",

	listViewTemplate : {
		columns: [
			{name: 'Selected', field: 'Selected', rowName: 'title', type: 'Selector'},
			{name: 'Tiddler', field: 'tiddler', title: "套件", type: 'Tiddler'},
			{name: 'Size', field: 'size', tiddlerLink: 'size', title: "大小", type: 'Size'},
			{name: 'Forced', field: 'forced', title: "強制執行", tag: 'systemConfigForce', type: 'TagCheckbox'},
			{name: 'Disabled', field: 'disabled', title: "停用", tag: 'systemConfigDisable', type: 'TagCheckbox'},
			{name: 'Executed', field: 'executed', title: "已載入", type: "Boolean", trueText: "是", falseText: "否"},
			{name: 'Startup Time', field: 'startupTime', title: "載入時間", type: 'String'},
			{name: 'Error', field: 'error', title: "載入狀態", type: 'Boolean', trueText: "錯誤", falseText: "正常"},
			{name: 'Log', field: 'log', title: "紀錄", type: 'StringList'}
			],
		rowClasses: [
			{className: 'error', field: 'error'},
			{className: 'warning', field: 'warning'}
			]}
	});

merge(config.macros.toolbar,{
	moreLabel: "其他",
	morePrompt: "顯示更多工具命令"});
	
merge(config.macros.refreshDisplay,{
	label: "刷新",
	prompt: "刷新此 TiddlyWiki 顯示"
	});
	
merge(config.macros.importTiddlers,{
	readOnlyWarning: "TiddlyWiki 於唯讀模式下,不支援導入文章。請由本機(file://)開啟 TiddlyWiki 文件",
	wizardTitle: "自其他檔案或伺服器導入文章",
	step1Title: "步驟一:指定伺服器或來源文件",
	step1Html: "指定伺服器類型:<select name='selTypes'><option value=''>選取...</option></select><br>請輸入網址或路徑:<input type='text' size=50 name='txtPath'><br>...或選擇來源文件:<input type='file' size=50 name='txtBrowse'><br><hr>...或選擇指定的饋入來源:<select name='selFeeds'><option value=''>選取...</option></select>",
	openLabel: "開啟",
	openPrompt: "開啟檔案或",
	openError: "讀取來源文件時發生錯誤",
	statusOpenHost: "正與伺服器建立連線",
	statusGetWorkspaceList: "正在取得可用之文章清單",
	errorGettingTiddlerList: "取得文章清單時發生錯誤,請點選「取消」後重試。",
	step2Title: "步驟二:選擇工作區",
	step2Html: "輸入工作區名稱:<input type='text' size=50 name='txtWorkspace'><br>...或選擇工作區:<select name='selWorkspace'><option value=''>選取...</option></select>",
	cancelLabel: "取消",
	cancelPrompt: "取消本次導入動作",
	statusOpenWorkspace: "正在開啟工作區",
	statusGetTiddlerList: "正在取得可用之文章清單",
	step3Title: "步驟三:選擇欲導入之文章",
	step3Html: "<input type='hidden' name='markList'></input><br><input type='checkbox' checked='true' name='chkSync'>保持這些文章與伺服器的連結,便於同步後續的變更。</input><br><input type='checkbox' name='chkSave'>儲存此伺服器的詳細資訊於標籤為 'systemServer' 的文章名為:</input> <input type='text' size=25 name='txtSaveTiddler'>", 
	importLabel: "導入",
	importPrompt: "導入所選文章",
	confirmOverwriteText: "確定要覆寫這些文章:\n\n%0",
	step4Title: "步驟四:正在導入%0 篇文章",
	step4Html: "<input type='hidden' name='markReport'></input>", // DO NOT TRANSLATE
	doneLabel: "完成",
	donePrompt: "關閉",
	statusDoingImport: "正在導入文章 ...",
	statusDoneImport: "所選文章已導入",
	systemServerNamePattern: "%2 位於 %1",
	systemServerNamePatternNoWorkspace: "%1",
	confirmOverwriteSaveTiddler: "此 tiddler '%0' 已經存在。點擊「確定」以伺服器上料覆寫之,或「取消」不變更後離開",
	serverSaveTemplate: "|''Type:''|%0|\n|''網址:''|%1|\n|''工作區:''|%2|\n\n此文為自動產生紀錄伺服器之相關資訊。",
	serverSaveModifier: "(系統)",

	listViewTemplate: {
		columns: [
			{name: 'Selected', field: 'Selected', rowName: 'title', type: 'Selector'},
			{name: 'Tiddler', field: 'tiddler', title: "文章", type: 'Tiddler'},
			{name: 'Size', field: 'size', tiddlerLink: 'size', title: "大小", type: 'Size'},
			{name: 'Tags', field: 'tags', title: "標籤", type: 'Tags'}
			],
		rowClasses: [
			]}
	});

merge(config.macros.upgrade,{
	wizardTitle: "更新 TiddlyWiki 核心程式",
	step1Title: "更新或修補此 TiddlyWiki 至最新版本",
	step1Html: "您將更新至最新版本的 TiddlyWiki 核心程式 (自 <a href='%0' class='externalLink' target='_blank'>%1</a>)。 在更新過程中,您的資料將被保留。<br><br>請注意:更新核心可能不相容於其他套件。若對更新的檔案有問題,詳見 <a href='http://www.tiddlywiki.org/wiki/CoreUpgrades' class='externalLink' target='_blank'>http://www.tiddlywiki.org/wiki/CoreUpgrades</a>",
	errorCantUpgrade: "j無法更新此 TiddlyWiki. 您只能自本機端的 TiddlyWiki 檔案執行更新程序",
	errorNotSaved: "執行更新之前,請先儲存變更",
	step2Title: "確認更新步驟",
	step2Html_downgrade: "您的 TiddlyWiki 將自 %1 版降級至 %0版。<br><br>不建議降級至較舊的版本。",
	step2Html_restore: "此 TiddlyWiki 核心已是最新版 (%0)。<br><br>您可以繼續更新作業以確認核心程式未曾毀損。",
	step2Html_upgrade: "您的 TiddlyWiki 將自 %1 版更新至 %0 版",
	upgradeLabel: "更新",
	upgradePrompt: "準備更新作業",
	statusPreparingBackup: "準備備份中",
	statusSavingBackup: "備份檔案",
	errorSavingBackup: "備份檔案時發生問題",
	statusLoadingCore: "核心程式載入中",
	errorLoadingCore: "載入核心程式時,發生錯誤",
	errorCoreFormat: "新版核心程式發生錯誤",
	statusSavingCore: "正在儲存新版核心程式",
	statusReloadingCore: "新版核心程式載入中",
	startLabel: "開始",
	startPrompt: "開始更新作業",
	cancelLabel: "取消",
	cancelPrompt: "取消更新作業",
	step3Title: "已取消更新作業",
	step3Html: "您已取消更新作業"
	});

merge(config.macros.sync,{
	listViewTemplate: {
		columns: [
			{name: 'Selected', field: 'selected', rowName: 'title', type: 'Selector'},
			{name: 'Tiddler', field: 'tiddler', title: "文章", type: 'Tiddler'},
			{name: 'Server Type', field: 'serverType', title: "伺服器類型", type: 'String'},
			{name: 'Server Host', field: 'serverHost', title: "伺服器主機", type: 'String'},
			{name: 'Server Workspace', field: 'serverWorkspace', title: "伺服器工作區", type: 'String'},
			{name: 'Status', field: 'status', title: "同步情形", type: 'String'},
			{name: 'Server URL', field: 'serverUrl', title: "伺服器網址", text: "View", type: 'Link'}
			],
		rowClasses: [
			],
		buttons: [
			{caption: "同步更新這些文章", name: 'sync'}
			]},
	wizardTitle: "將你的資料內容與外部伺服器與檔案同步",
	step1Title: "選擇欲同步的文章",
	step1Html: '<input type="hidden" name="markList"></input>', // DO NOT TRANSLATE
	syncLabel: "同步",
	syncPrompt: "同步更新這些文章",
	hasChanged: "已更動",
	hasNotChanged: "未更動",
	syncStatusList: {
		none: {text: "...", color: 'transparent'},
		changedServer: {text: "伺服器資料已更動", color: '#80ff80'},
		changedLocally: {text: "本機資料已更動", color: '#80ff80'},
		changedBoth: {text: "已同時更新本機與伺服器上的資料", color: '#ff8080'},
		notFound: {text: "伺服器無此資料", color: '#ffff80'},
		putToServer: {text: "已儲存更新資料至伺服器", color: '#ff80ff'},
		gotFromServer: {text: "已從伺服器擷取更新資料", color: '#80ffff'}
		}
	});

merge(config.macros.annotations,{
	});

merge(config.commands.closeTiddler,{
	text: "關閉",
	tooltip: "關閉本文"});

merge(config.commands.closeOthers,{
	text: "關閉其他",
	tooltip: "關閉其他文章"});

merge(config.commands.editTiddler,{
	text: "編輯",
	tooltip: "編輯本文",
	readOnlyText: "檢視",
	readOnlyTooltip: "檢視本文之原始內容"});

merge(config.commands.saveTiddler,{
	text: "完成",
	tooltip: "確定修改"});

merge(config.commands.cancelTiddler,{
	text: "取消",
	tooltip: "取消修改",
	warning: "確定取消對 '%0' 的修改嗎?",
	readOnlyText: "完成",
	readOnlyTooltip: "返回正常顯示模式"});

merge(config.commands.deleteTiddler,{
	text: "刪除",
	tooltip: "刪除文章",
	warning: "確定刪除 '%0'?"});

merge(config.commands.permalink,{
	text: "引用連結",
	tooltip: "本文引用連結"});

merge(config.commands.references,{
	text: "引用",
	tooltip: "引用本文的文章",
	popupNone: "本文未被引用"});

merge(config.commands.jump,{
	text: "捲頁",
	tooltip: "捲頁至其他已開啟的文章"});

merge(config.commands.syncing,{
	text: "同步",
	tooltip: "本文章與伺服器或其他外部檔案的同步資訊",
	currentlySyncing: "<div>同步類型:<span class='popupHighlight'>'%0'</span></"+"div><div>與伺服器:<span class='popupHighlight'>%1 同步</span></"+"div><div>工作區:<span class='popupHighlight'>%2</span></"+"div>", // Note escaping of closing <div> tag
	notCurrentlySyncing: "無進行中的同步動作",
	captionUnSync: "停止同步此文章",
	chooseServer: "與其他伺服器同步此文章:",
	currServerMarker: "\u25cf ",
	notCurrServerMarker: "  "});

merge(config.commands.fields,{
	text: "欄位",
	tooltip: "顯示此文章的擴充資訊",
	emptyText: "此文章沒有擴充欄位",
	listViewTemplate: {
		columns: [
			{name: 'Field', field: 'field', title: "擴充欄位", type: 'String'},
			{name: 'Value', field: 'value', title: "內容", type: 'String'}
			],
		rowClasses: [
			],
		buttons: [
			]}});

merge(config.shadowTiddlers,{
	DefaultTiddlers: "GettingStarted",
	GettingStarted: "使用此 TiddlyWiki 的空白範本之前,請先修改以下預設文章:\n* SiteTitle 及 SiteSubtitle:網站的標題和副標題,顯示於頁面上方<br />(在儲存變更後,將顯示於瀏覽器視窗的標題列)。\n* MainMenu:主選單(通常在頁面左側)。\n* DefaultTiddlers:內含一些文章的標題,可於載入TiddlyWiki 後的預設開啟。\n請輸入您的大名,作為所建立/ 編輯的文章署名:<<option txtUserName>>",
	MainMenu: "[[使用說明|GettingStarted]]\n\n\n^^~TiddlyWiki 版本:<<version>>\n© 2008 [[UnaMesa|http://www.unamesa.org/]]^^",
	OptionsPanel: "這些設定將暫存於瀏覽器\n請簽名<<option txtUserName>>\n (範例:WikiWord)\n\n <<option chkSaveBackups>> 儲存備份\n <<option chkAutoSave>> 自動儲存\n <<option chkRegExpSearch>> 正規式搜尋\n <<option chkCaseSensitiveSearch>> 區分大小寫搜尋\n <<option chkAnimate>> 使用動畫顯示\n----\n [[進階選項|AdvancedOptions]]",
	SiteTitle: "我的 TiddlyWiki",
	SiteSubtitle: "一個可重複使用的個人網頁式筆記本",
	SiteUrl: 'http://www.tiddlywiki.com/',
	SideBarOptions: '<<search>><<closeAll>><<permaview>><<newTiddler>><<newJournal " YYYY年0MM月0DD日" "日誌">><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel "偏好設定 \u00bb" "變更 TiddlyWiki 選項">>',
	SideBarTabs: '<<tabs txtMainTab "最近更新" "依更新日期排序" TabTimeline "全部" "所有文章" TabAll "分類" "所有標籤" TabTags "更多" "其他" TabMore>>',
	StyleSheet: '[[StyleSheetLocale]]',
	TabMore: '<<tabs txtMoreTab "未完成" "內容空白的文章" TabMoreMissing "未引用" "未被引用的文章" TabMoreOrphans "預設文章" "已預設內容的隱藏文章" TabMoreShadowed>>',
	ToolbarCommands: "|~ViewToolbar|closeTiddler closeOthers +editTiddler > fields syncing permalink references jump|\n|~EditToolbar|+saveTiddler -cancelTiddler deleteTiddler|"});

merge(config.annotations,{
	AdvancedOptions: "此預設文章可以存取一些進階選項。",
	ColorPalette: "此預設文章裡的設定值,將決定 ~TiddlyWiki 使用者介面的配色。",
	DefaultTiddlers: "當 ~TiddlyWiki 在瀏覽器中開啟時,此預設文章裡列出的文章,將被自動顯示。",
	EditTemplate: "此預設文章裡的 HTML template 將決定文章進入編輯模式時的顯示版面。",
	GettingStarted: "此預設文章提供基本的使用說明。",
	ImportTiddlers: "此預設文章提供存取導入中的文章。",
	MainMenu: "此預設文章的內容,為於螢幕左側主選單的內容",
	MarkupPreHead: "此文章的內容將加至 TiddlyWiki 文件的 <head> 段落的起始",
	MarkupPostHead: "此文章的內容將加至 TiddlyWiki 文件的 <head> 段落的最後",
	MarkupPreBody: "此文章的內容將加至 TiddlyWiki 文件的 <body> 段落的起始",
	MarkupPostBody: "此文章的內容將加至 TiddlyWiki 文件的 <body> 段落的最後,於 script 區塊之後",
	OptionsPanel: "此預設文章的內容,為於螢幕右側副選單中的選項面板裡的內容",
	PageTemplate: "此預設文章裡的 HTML template 決定的 ~TiddlyWiki 主要的版面配置",
	PluginManager: "此預設文章提供存取套件管理員",
	SideBarOptions: "此預設文章的內容,為於螢幕右側副選單中選項面板裡的內容",
	SideBarTabs: "此預設文章的內容,為於螢幕右側副選單中的頁籤面板裡的內容",
	SiteSubtitle: "此預設文章的內容為頁面的副標題",
	SiteTitle: "此預設文章的內容為頁面的主標題",
	SiteUrl: "此預設文章的內容須設定為文件發佈時的完整網址",
	StyleSheetColors: "此預設文章內含的 CSS 規則,為相關的頁面元素的配色。''勿修改此文'',請於 StyleSheet 中作增修",
	StyleSheet: "此預設文章內容可包含 CSS 規則",
	StyleSheetLayout: "此預設文章內含的 CSS 規則,為相關的頁面元素的版面配置。''勿修改此文'',請於 StyleSheet 中作增修",
	StyleSheetLocale: "此預設文章內含的 CSS 規則,可依翻譯語系做適當調整",
	StyleSheetPrint: "此預設文章內含的 CSS 規則,用於列印時的樣式",
	TabAll: "此預設文章的內容,為於螢幕右側副選單中的「全部」頁籤的內容",
	TabMore: "此預設文章的內容,為於螢幕右側副選單中的「更多」頁籤的內容",
	TabMoreMissing: "此預設文章的內容,為於螢幕右側副選單中的「未完成」頁籤的內容",
	TabMoreOrphans: "此預設文章的內容,為於螢幕右側副選單中的「未引用」頁籤的內容",
	TabMoreShadowed: "此預設文章的內容,為於螢幕右側副選單中的「預設文章」頁籤的內容",
	TabTags: "此預設文章的內容,為於螢幕右側副選單中的「分類」頁籤的內容",
	TabTimeline: "此預設文章的內容,為於螢幕右側副選單中的「最近更新」頁籤的內容",
	ToolbarCommands: "此預設文章的內容,為顯示於文章工具列之命令",
	ViewTemplate: "此預設文章裡的 HTML template 決定文章顯示的樣子"
	});
//}}}

[img[http://farm1.static.flickr.com/168/413609706_7db0ca3352_t.jpg][http://www.flickr.com/photos/95095733@N00/413609706/]] |仿 IE7 加 Vista 的華麗佈景
* ''佈景作者'':myFireFox
* ''佈景網頁'':[[Add-ons#4129|https://addons.mozilla.org/zh-TW/firefox/addon/4129]]
* ''佈景介紹'':<br>仿 IE7 加上 Vista 的佈景主題,非常具有質感!預設在頁籤區和狀態列都有一些快速工具按鍵,如果不喜歡可以修改樣式內的CSS去改掉,不過個人很懶,而且還不討厭這些快速工具按鍵,所以就沒去修掉了。
/*
語法同 tabs,名稱改為 mytabs,來源 tiddler
的第三個參數改為輸入
"<html> Your inlineHTML contents </html>",
因參數實為包含<html>在內的字串,所以 " 是必須的,
另須留意內文 " 與 '  的使用。
安裝方式則同一般自訂巨集。
*/

config.macros.mytabs = {}
config.macros.mytabs.handler = config.macros.tabs.handler

config.macros.mytabs.onClickTab = function(e)
{
        config.macros.mytabs.switchTab(this.parentNode,this.getAttribute("tab"));
        return false;

}

config.macros.mytabs.switchTab = function(tabset,tab)
{
        var cookie = tabset.getAttribute("cookie");
        var theTab = null
        var nodes = tabset.childNodes;
        for(var t=0; t<nodes.length; t++)
                if(nodes[t].getAttribute && nodes[t].getAttribute("tab") == tab)
                        {
                        theTab = nodes[t];
                        theTab.className = "tab tabSelected";
                        }
                else
                        nodes[t].className = "tab tabUnselected"
        if(theTab)
                {
                if(tabset.nextSibling && tabset.nextSibling.className ==
"tabContents")
                        tabset.parentNode.removeChild(tabset.nextSibling);
                var tabContent =
createTiddlyElement(null,"div",null,"tabContents",null);
                tabset.parentNode.insertBefore(tabContent,tabset.nextSibling);
                var contents = theTab.getAttribute("content");
                wikify(contents,tabContent,null,null);
                if(cookie)
                        {
                        config.options[cookie] = tab;
                        saveOptionCookie(cookie);
                        }
                } 
}
[img[http://farm4.static.flickr.com/3217/2692822678_c15b63552e_t.jpg][http://www.flickr.com/photos/95095733@N00/2692822678/]]|簡樸清爽的佈景
* ''佈景作者'':[[Naoto Kusumi|http://notiz.jp/]]
* ''佈景網頁'':[[官方網頁|http://notiz.jp/mozilla/]]
* ''佈景介紹'':<br>





> 簡單下載ニコ動畫
* ''套件作者'':[[Kazuya Shono|http://miniturbo.org/]]
* ''套件網頁'':[[官方網頁|http://miniturbo.org/product/extension/nicodownloader/]]
* ''套件語系'':英文其他
* ''撰寫版號'':0.5
* ''套件功能'':
** 右鍵快速選單新增下載ニコ動畫的選項。
* ''相關鏈結'':
* ''相關類似'':
* ''心得介紹'':<br>[[ニコニコ動畫|http://www.nicovideo.jp/]] 是一個線上影片網站,這個套件單純只是用來下載這個網站上的影片用。<br><br>--小缺點是右鍵選單上的下載選項不會判斷是否在ニコニコ動畫的網站站內而顯示與否,而會一直出現。--已更新會判斷了。
<<forEachTiddler
 where
 	'tiddler.tags.contains("擴充套件") &&
	 ! tiddler.tags.contains("_tempEX") '
 sortBy 'tiddler.title'
 script
 'function getFirstLine(s) { var m = s.match(/\s*(.*)/);
  return m != null && m.length >= 1 ? m[1] : "";  }  
	function writeExpenseRow(index, tiddler, context) { var result = ""; if (index == 0) {context.sum = 0; result = "|!推|!啟|!|!官|!開|!相|!無|!名稱|!介紹|\n";} result += "| [_(" + tiddler.title + ":推薦)] | [_(" + tiddler.title + ":啟用)] |~| [_(" + tiddler.title + ":3官方版本支援)] | [_(" + tiddler.title + ":3開發版本支援)] | [_(" + tiddler.title + ":3改相容性支援)] | [_(" + tiddler.title + ":3目前無法支援)] |![[" + tiddler.title + "]] |" + getFirstLine(tiddler.text) + "|\n"; return result;}'
 write
	'writeExpenseRow(index, tiddler, context)'
>>
> 上傳及下載檔案的支援
<<forEachTiddler
 where
 	'tiddler.tags.contains("擴充套件") &&
 	tiddler.tags.contains("上傳下載") &&
	 ! tiddler.tags.contains("_tempEX") '
 sortBy 'tiddler.title'
 script
 'function getFirstLine(s) { var m = s.match(/\s*(.*)/);
  return m != null && m.length >= 1 ? m[1] : "";  }  
	function writeExpenseRow(index, tiddler, context) { var result = ""; if (index == 0) {context.sum = 0; result = "|!推|!啟|!|!官|!開|!相|!無|!名稱|!介紹|\n";} result += "| [_(" + tiddler.title + ":推薦)] | [_(" + tiddler.title + ":啟用)] |~| [_(" + tiddler.title + ":3官方版本支援)] | [_(" + tiddler.title + ":3開發版本支援)] | [_(" + tiddler.title + ":3改相容性支援)] | [_(" + tiddler.title + ":3目前無法支援)] |![[" + tiddler.title + "]] |" + getFirstLine(tiddler.text) + "|\n"; return result;}'
 write
	'writeExpenseRow(index, tiddler, context)'
>>
> 整個介面的調整及美化
<<forEachTiddler
 where
 	'tiddler.tags.contains("擴充套件") &&
 	tiddler.tags.contains("介面樣式") &&
	 ! tiddler.tags.contains("_tempEX") '
 sortBy 'tiddler.title'
 script
 'function getFirstLine(s) { var m = s.match(/\s*(.*)/);
  return m != null && m.length >= 1 ? m[1] : "";  }  
	function writeExpenseRow(index, tiddler, context) { var result = ""; if (index == 0) {context.sum = 0; result = "|!推|!啟|!|!官|!開|!相|!無|!名稱|!介紹|\n";} result += "| [_(" + tiddler.title + ":推薦)] | [_(" + tiddler.title + ":啟用)] |~| [_(" + tiddler.title + ":3官方版本支援)] | [_(" + tiddler.title + ":3開發版本支援)] | [_(" + tiddler.title + ":3改相容性支援)] | [_(" + tiddler.title + ":3目前無法支援)] |![[" + tiddler.title + "]] |" + getFirstLine(tiddler.text) + "|\n"; return result;}'
 write
	'writeExpenseRow(index, tiddler, context)'
>>
! Firefox 3官方版本支援
<<forEachTiddler
 where 'tiddler.tags.contains("佈景主題") &&
		tiddler.tags.contains("3官方版本支援")'
 sortBy 'tiddler.title'
 script
 'function getFirstLine(s) { var m = s.match(/\s*(.*)/);
  return m != null && m.length >= 1 ? m[1] : "";  }  
	function writeExpenseRow(index, tiddler, context) { var result = ""; if (index == 0) {context.sum = 0; result = "|!名稱|!縮圖|!介紹|\n";} result += "|![[" + tiddler.title + "]] |" + getFirstLine(tiddler.text) + "|\n"; return result;}'
 write
	'writeExpenseRow(index, tiddler, context)'
>>
! Firefox 3目前無法支援
<<forEachTiddler
 where 'tiddler.tags.contains("佈景主題") &&
		tiddler.tags.contains("3目前無法支援")'
 sortBy 'tiddler.title'
 script
 'function getFirstLine(s) { var m = s.match(/\s*(.*)/);
  return m != null && m.length >= 1 ? m[1] : "";  }  
	function writeExpenseRow(index, tiddler, context) { var result = ""; if (index == 0) {context.sum = 0; result = "|!名稱|!縮圖|!介紹|\n";} result += "|![[" + tiddler.title + "]] |" + getFirstLine(tiddler.text) + "|\n"; return result;}'
 write
	'writeExpenseRow(index, tiddler, context)'
>>
* 點選套件名稱,可以得到更詳細的資訊!
* 推:推薦
* 啟:啟用
* 官:Firefox 3官方版本支援
* 開:Firefox 3開發版本支援
* 相:Firefox 3改相容性支援
* 無:Firefox 3目前無法支援(含改相容性安裝後依然不能正常作用者)
* ''官方版本支援 '' 及 ''一覽'' 表因數量較多,點選後需要一點時間才會顯示出來。
<<tabs 使用狀況
推薦 推薦 推薦
3官方版本支援 "Firefox 3官方版本支援" 3官方版本支援
3開發版本支援 "Firefox 3開發版本支援" 3開發版本支援
3改相容性支援 "Firefox 3改相容性支援" 3改相容性支援
3目前無法支援 "Firefox 3目前無法支援" 3目前無法支援
3已具備該功能 "Firefox 3已具備該功能" 3已具備該功能
啟用 啟用 啟用
停用 停用 停用
一覽 一覽 一覽
>>
<<forEachTiddler
 where 'tiddler.tags.contains("擴充套件") &&
		 ! tiddler.tags.contains("啟用") &&
		 ! tiddler.tags.contains("_tempEX") '
 sortBy 'tiddler.title'
 script
 'function getFirstLine(s) { var m = s.match(/\s*(.*)/);
  return m != null && m.length >= 1 ? m[1] : "";  }  
	function writeExpenseRow(index, tiddler, context) { var result = ""; if (index == 0) {context.sum = 0; result = "|!推|!|!官|!開|!相|!無|!名稱|!介紹|\n";} result += "| [_(" + tiddler.title + ":推薦)] |~| [_(" + tiddler.title + ":3官方版本支援)] | [_(" + tiddler.title + ":3開發版本支援)] | [_(" + tiddler.title + ":3改相容性支援)] | [_(" + tiddler.title + ":3目前無法支援)] |![[" + tiddler.title + "]] |" + getFirstLine(tiddler.text) + "|\n"; return result;}'
 write
	'writeExpenseRow(index, tiddler, context)'
>>
Firefox 的相關資料會在 Prefile 這個資料夾內。
!安裝版
安裝版該資料夾在 Windows XP 中
> C:\Documents and Settings\你的XP帳號\''Application Data''\Mozilla\Firefox\
要注意的就是這是隱藏資料夾,所以如果你沒先在檔案總管中顯示隱藏的資料夾,就會找不到該檔案。
!可攜版( Firefox Portable )
如果是可攜式的就簡單多了,找到你放可攜式資料夾的位置,以下面的相對路徑下去找即可。
> FirefoxPortable\Data\profile\
!相關對應檔案
|>|!個人資料|
|prefile\''bookmarks.html''|書籤記錄(Firefox 2.0)|
|prefile\''formhistory.dat''|自動完成表格的資料|
|prefile\''key3.db''|與個人密碼檔有關|
|prefile\''signons.txt''|個人密碼|
|>|!擴充套件|
|profile\''stylish.rdf''|Style 的備分|
|profile\extensions\''performancing-notes.xml''|ScribeFire 的資料<br>筆記、部落格列表、編輯狀態|
|profile\extensions\''performancing-bloglist.xml''|~|
|profile\extensions\''performancing-editor-state.xml''|~|
> 無法歸類在前面類別者
<<forEachTiddler
 where
 	'tiddler.tags.contains("擴充套件") &&
 	tiddler.tags.contains("其他雜項") &&
	 ! tiddler.tags.contains("_tempEX") '
 sortBy 'tiddler.title'
 script
 'function getFirstLine(s) { var m = s.match(/\s*(.*)/);
  return m != null && m.length >= 1 ? m[1] : "";  }  
	function writeExpenseRow(index, tiddler, context) { var result = ""; if (index == 0) {context.sum = 0; result = "|!推|!啟|!|!官|!開|!相|!無|!名稱|!介紹|\n";} result += "| [_(" + tiddler.title + ":推薦)] | [_(" + tiddler.title + ":啟用)] |~| [_(" + tiddler.title + ":3官方版本支援)] | [_(" + tiddler.title + ":3開發版本支援)] | [_(" + tiddler.title + ":3改相容性支援)] | [_(" + tiddler.title + ":3目前無法支援)] |![[" + tiddler.title + "]] |" + getFirstLine(tiddler.text) + "|\n"; return result;}'
 write
	'writeExpenseRow(index, tiddler, context)'
>>
> 關於分頁及多視窗瀏覽
<<forEachTiddler
 where
 	'tiddler.tags.contains("擴充套件") &&
 	tiddler.tags.contains("分頁視窗") &&
	 ! tiddler.tags.contains("_tempEX") '
 sortBy 'tiddler.title'
 script
 'function getFirstLine(s) { var m = s.match(/\s*(.*)/);
  return m != null && m.length >= 1 ? m[1] : "";  }  
	function writeExpenseRow(index, tiddler, context) { var result = ""; if (index == 0) {context.sum = 0; result = "|!推|!啟|!|!官|!開|!相|!無|!名稱|!介紹|\n";} result += "| [_(" + tiddler.title + ":推薦)] | [_(" + tiddler.title + ":啟用)] |~| [_(" + tiddler.title + ":3官方版本支援)] | [_(" + tiddler.title + ":3開發版本支援)] | [_(" + tiddler.title + ":3改相容性支援)] | [_(" + tiddler.title + ":3目前無法支援)] |![[" + tiddler.title + "]] |" + getFirstLine(tiddler.text) + "|\n"; return result;}'
 write
	'writeExpenseRow(index, tiddler, context)'
>>
目前處於 Firefox 2.0 和 3.0 的過渡期,在 Firefox 3.0 ,擴充套件可以強制安裝後再測能用與否,但佈景主題若是版本不合,卻有可能造成整個 Firefox 無法使用。這時候必須將該佈景刪除才能繼續使用。
!進行步驟
* 方法一(安裝版限定)
## 使用安全模式(Safe mode)啟動即可。
* 方法二(安裝版及可攜版皆可)
## 找到 Profile 資料夾底下的檔案 ''extensions.ini'' ,用記事本(Notepad)開啟該檔。
*** 安裝版:C:\Documents and Settings\你的XP帳號\''Application Data''\Mozilla\Firefox\''extensions.ini''
*** 可攜版:FirefoxPortable\Data\profile\''extensions.ini''
## 找到 ''[ThemeDirs]'' ,底下的會看到類似下面的資料:
{{{
[ThemeDirs]
Extension0=D:\FirefoxPortable\App\firefox\extensions\{972ce4c6-7e08-4474-a285-3208198ce6fd}
Extension1=D:\FirefoxPortable\Data\profile\extensions\{F8DA5A34-B011-4b27-8581-87FDBBDF3698}
Extension2=D:\FirefoxPortable\Data\profile\extensions\{ff356687-aa08-463d-a46c-11c451824939}
Extension3=D:\FirefoxPortable\Data\profile\extensions\rein@notiz.jp
}}}
每一行代表一個安裝的佈景主題安裝的位置(所以你查出來不會跟我一樣)。順序是依照你安裝的順序往下累加,所以越新安裝的就在越後面。刪去有問題的佈景主題那行存檔即可。
! Mozilla 官方網站
* [[Mozilla Taiwan 正體中文站|http://moztw.org/]]
* [[Mozilla Taiwan 討論區|http://forum.moztw.org/]]
* [[Firefox Add-ons|https://addons.mozilla.org/zh-TW/firefox/]] - 擴充套件、佈景主題官方下載站。
* [[フォクすけ*ブログ|http://foxkeh.jp/]] - 日本 Firefox 吉祥物 Foxkeh 的官方網站。
* [[Support - Keyboard shortcuts|http://support.mozilla.com/zh-TW/kb/Keyboard+shortcuts?style_mode=inproduct&bl=n]] - 官方提供的 Firefox 預設快速鍵說明。
! 非 Mozilla 官方的相關網站
* [[PortableApps.com|http://portableapps.com/]] - 可攜式軟體的下載站,大部分都是英文軟體。
* [[OpenOffice.org Portable 非公式正體中文版|http://tw-portableapps.blogspot.com/]] - 有提供可摧式 Firefox 的中文化版供下載。
! Firefox 3 相關資訊
* [[Firefox 3 beta 套件支援列表 - Mozilla Taiwan|http://wiki.moztw.org/index.php/Firefox_3_Extension_Compability_List]]
* [[[教學] 打造中文版的 Firefox 3.0b 可攜版並安裝不相容的套件|http://blog.pixnet.net/Nelson/post/14277569]] - 已有可攜式中文版,可參考處理相容性問題。
! 玩家心得及安裝列表
* [[Firefox 3 可用和推薦的擴充套件列表,歡迎補完!|http://playpcesor.blogspot.com/2008/06/firefox-30_4178.html]]
* [[Firefox 相關 - joaoko's blog|http://blog.joaoko.net/archives/category/firefox/]]
* [[海芋小站: Firefox Extensions|http://ck69user.blogspot.com/search/label/Firefox%20Extensions?max-results=999]]
* [[[FX] 好用的 Extension 及一些工具|http://blog.pixnet.net/Nelson/post/217746]]
* [[小活動:Firefox Extensions List「我的」火狐必裝擴充套件列表,「你的」呢?|http://playpcesor.blogspot.com/2007/11/firefox-extensions-list.html]]
* [[Goston's Blog » [FF] 我的 Firefox 擴充套件說明 3.0 版|http://www.goston.net/2007/03/08/761/]]
* [[R: [閒聊]重建裝滿八、九十個套件的設定檔|http://gaaan.com/Browser?p=15179]] - MilchFlasche
<<forEachTiddler
 where 'tiddler.tags.contains("擴充套件") &&
		 tiddler.tags.contains("啟用") &&
		 ! tiddler.tags.contains("_tempEX")'
 sortBy 'tiddler.title'
 script
 'function getFirstLine(s) { var m = s.match(/\s*(.*)/);
  return m != null && m.length >= 1 ? m[1] : "";  }  
	function writeExpenseRow(index, tiddler, context) { var result = ""; if (index == 0) {context.sum = 0; result = "|!推|!|!官|!開|!相|!無|!名稱|!介紹|\n";} result += "| [_(" + tiddler.title + ":推薦)] |~| [_(" + tiddler.title + ":3官方版本支援)] | [_(" + tiddler.title + ":3開發版本支援)] | [_(" + tiddler.title + ":3改相容性支援)] | [_(" + tiddler.title + ":3目前無法支援)] |![[" + tiddler.title + "]] |" + getFirstLine(tiddler.text) + "|\n"; return result;}'
 write
	'writeExpenseRow(index, tiddler, context)'
>>
> 圖片及影像的支援加強
<<forEachTiddler
 where
 	'tiddler.tags.contains("擴充套件") &&
 	tiddler.tags.contains("圖像影音") &&
	 ! tiddler.tags.contains("_tempEX") '
 sortBy 'tiddler.title'
 script
 'function getFirstLine(s) { var m = s.match(/\s*(.*)/);
  return m != null && m.length >= 1 ? m[1] : "";  }  
	function writeExpenseRow(index, tiddler, context) { var result = ""; if (index == 0) {context.sum = 0; result = "|!推|!啟|!|!官|!開|!相|!無|!名稱|!介紹|\n";} result += "| [_(" + tiddler.title + ":推薦)] | [_(" + tiddler.title + ":啟用)] |~| [_(" + tiddler.title + ":3官方版本支援)] | [_(" + tiddler.title + ":3開發版本支援)] | [_(" + tiddler.title + ":3改相容性支援)] | [_(" + tiddler.title + ":3目前無法支援)] |![[" + tiddler.title + "]] |" + getFirstLine(tiddler.text) + "|\n"; return result;}'
 write
	'writeExpenseRow(index, tiddler, context)'
>>
> 對外部軟體及協定支援
<<forEachTiddler
 where
 	'tiddler.tags.contains("擴充套件") &&
 	tiddler.tags.contains("外部支援") &&
	 ! tiddler.tags.contains("_tempEX") '
 sortBy 'tiddler.title'
 script
 'function getFirstLine(s) { var m = s.match(/\s*(.*)/);
  return m != null && m.length >= 1 ? m[1] : "";  }  
	function writeExpenseRow(index, tiddler, context) { var result = ""; if (index == 0) {context.sum = 0; result = "|!推|!啟|!|!官|!開|!相|!無|!名稱|!介紹|\n";} result += "| [_(" + tiddler.title + ":推薦)] | [_(" + tiddler.title + ":啟用)] |~| [_(" + tiddler.title + ":3官方版本支援)] | [_(" + tiddler.title + ":3開發版本支援)] | [_(" + tiddler.title + ":3改相容性支援)] | [_(" + tiddler.title + ":3目前無法支援)] |![[" + tiddler.title + "]] |" + getFirstLine(tiddler.text) + "|\n"; return result;}'
 write
	'writeExpenseRow(index, tiddler, context)'
>>

!!!注意事項
* 擴充套件 [[Nightly Tester Tools]] 具備同樣的作用,安裝使用該套件即不需執行下列步驟。
* 雖然取消相容性檢查可以讓不合版本的擴充套件順利安裝,但@@color(#ff0000):不代表可以正常運作@@。在運作部分有待測試及觀察。
* 用此方法關閉相容性,會連@@color(#ff0000):佈景主題的相容性檢查亦會關閉@@。強烈建議若關閉的話,@@color(#ff0000):不要嚐試安裝未寫明版本已支援的佈景主題,相容性未支援的佈景有可能造成整個 Firefox 介面完全錯亂無法操作。@@
!!!進行步驟
> 資訊來源:Neslon http://blog.pixnet.net/Nelson/post/14277569
# 在網址列輸入<html><input value="about:config" size="15"></html>。
# 按下【我發誓,我一定會小心的!】按鍵。
# 在列出來的項目任意位置上按滑鼠右鍵<br>→【新增】→【真假 (Boolean) 值】<br>→【輸入偏好設定名稱】設定為<html><input value="extensions.checkCompatibility" size="30"></html><br>設定數值為<html><input value="false" size="8"></html>,關閉''附加元件的相容性檢查''。
# 在列出來的項目任意位置上按滑鼠右鍵<br>→【新增】→【真假 (Boolean) 值】<br>→【輸入偏好設定名稱】設定為<html><input value="extensions.checkUpdateSecurity" size="30"></html><br>設定數值為<html><input value="false" size="8"></html>,關閉''附加元件更新時的安全性檢查''。
<<forEachTiddler
 where 'tiddler.tags.contains("擴充套件") &&
		tiddler.tags.contains("推薦") &&
		 ! tiddler.tags.contains("_tempEX") '
 sortBy 'tiddler.title'
 script
 'function getFirstLine(s) { var m = s.match(/\s*(.*)/);
  return m != null && m.length >= 1 ? m[1] : "";  }  
	function writeExpenseRow(index, tiddler, context) { var result = ""; if (index == 0) {context.sum = 0; result = "|!官|!開|!相|!無|!名稱|!介紹|\n";} result += "| [_(" + tiddler.title + ":3官方版本支援)] | [_(" + tiddler.title + ":3開發版本支援)] | [_(" + tiddler.title + ":3改相容性支援)] | [_(" + tiddler.title + ":3目前無法支援)] |![[" + tiddler.title + "]] |" + getFirstLine(tiddler.text) + "|\n"; return result;}'
 write
	'writeExpenseRow(index, tiddler, context)'
>>
> 強化使用搜尋引擎機能
<<forEachTiddler
 where
 	'tiddler.tags.contains("擴充套件") &&
 	tiddler.tags.contains("搜尋引擎") &&
	 ! tiddler.tags.contains("_tempEX") '
 sortBy 'tiddler.title'
 script
 'function getFirstLine(s) { var m = s.match(/\s*(.*)/);
  return m != null && m.length >= 1 ? m[1] : "";  }  
	function writeExpenseRow(index, tiddler, context) { var result = ""; if (index == 0) {context.sum = 0; result = "|!推|!啟|!|!官|!開|!相|!無|!名稱|!介紹|\n";} result += "| [_(" + tiddler.title + ":推薦)] | [_(" + tiddler.title + ":啟用)] |~| [_(" + tiddler.title + ":3官方版本支援)] | [_(" + tiddler.title + ":3開發版本支援)] | [_(" + tiddler.title + ":3改相容性支援)] | [_(" + tiddler.title + ":3目前無法支援)] |![[" + tiddler.title + "]] |" + getFirstLine(tiddler.text) + "|\n"; return result;}'
 write
	'writeExpenseRow(index, tiddler, context)'
>>
<<forEachTiddler
 where 'tiddler.tags.contains("擴充套件") '
 sortBy 'tiddler.title'
 script ' function getFirstLine(s) { var m = s.match(/\s*(.*)/);
			return m != null && m.length >= 1 ? m[1] : "";  } '
 write '"|![["+tiddler.title+"]] |"+getFirstLine(tiddler.text)+"|\n"'
>>
* 點選套件名稱,可以得到更詳細的資訊!
* 推:推薦
* 啟:啟用
* 官:Firefox 3官方版本支援
* 開:Firefox 3開發版本支援
* 相:Firefox 3改相容性支援
* 無:Firefox 3目前無法支援(含改相容性安裝後依然不能正常作用者)
<<tabs 擴充套件列表
滑鼠手勢 "利用滑鼠和拖曳來操作" "滑鼠手勢"
分頁視窗 "關於分頁及多視窗瀏覽" "分頁視窗"
介面樣式 "整個介面的調整及美化" "介面樣式"
上傳下載 "上傳及下載檔案的支援" "上傳下載"
圖像影音 "圖片及影像的支援加強" "圖像影音"
書籤工具 "管理及使用書籤的加強" "書籤工具"
搜尋引擎 "強化使用搜尋引擎機能" "搜尋引擎"
瀏覽工具 "使瀏覽更加便利的工具" "瀏覽工具"
書寫幫手 "讓書寫變得簡單的工具" "書寫幫手"
語言翻譯 "閱讀書寫無國界的利器" "語言翻譯"
RSS相關 "跟RSS訂閱及閱讀關聯" "RSS相關"
系統設定 "加強對系統的各種設定" "系統設定"
網頁設計 "讓網頁設計更輕鬆便利" "網頁設計"
服務支援 "對線上服務的連動支援" "服務支援"
外部支援 "對外部軟體及協定支援" "外部支援"
其他雜項 "無法歸類在前面類別者" "其他雜項"
>>
> 繁簡對翻的好幫手
* ''套件作者'':路人甲, softcup
* ''套件網頁'':[[官方網頁|http://rt.openfoundry.org/Foundry/Project/?Queue=333]]
* ''套件語系'':內建繁中
* ''撰寫版號'':0.3.8.9
* ''套件功能'':
** 可手動將網頁的繁簡體中文對譯,也可指定網頁自動轉換成繁體或簡體。
** 將剪貼簿中的繁簡體中文對譯。
** 可設定自動轉換繁簡體的名單。
* ''相關鏈結'':[[中文介紹|http://forum.moztw.org/viewtopic.php?p=19073]]
* ''相關類似'':
* ''心得介紹'':<br>看不懂簡體/繁體中文的一大救星,可以直接把網頁上的繁簡體對譯,讓中文閱讀無障礙!<br><br>泉自己是看得懂簡體中文,但是看久了還是怎麼都習慣不了簡體字,這時候這要靠這個套件來進行轉換了!
* 2008-07-30 修正 RSS 得作用。Firefox 自動偵測會指向錯誤,若想訂閱可點選右邊的圖示。
* 2008-07-20 新增 Firefox 3 支援狀況的標籤,並整合入清單。
* 2008-03-30 因應將要出現的 Firefox 3.0 ,更正網址為<br>    &nbsp;http://wechuann.googlepages.com/Firefox.html
* 2008-01 新增最後撰寫時的測試版號資訊「''撰寫版號''」,避免版本誤差問題。<br>    &nbsp;版號部分會慢慢增加,沒有標明版號表示較早期測試的,可能跟目前套件狀況有出入。
> 讓書寫變得簡單的工具
<<forEachTiddler
 where
 	'tiddler.tags.contains("擴充套件") &&
 	tiddler.tags.contains("書寫幫手") &&
	 ! tiddler.tags.contains("_tempEX") '
 sortBy 'tiddler.title'
 script
 'function getFirstLine(s) { var m = s.match(/\s*(.*)/);
  return m != null && m.length >= 1 ? m[1] : "";  }  
	function writeExpenseRow(index, tiddler, context) { var result = ""; if (index == 0) {context.sum = 0; result = "|!推|!啟|!|!官|!開|!相|!無|!名稱|!介紹|\n";} result += "| [_(" + tiddler.title + ":推薦)] | [_(" + tiddler.title + ":啟用)] |~| [_(" + tiddler.title + ":3官方版本支援)] | [_(" + tiddler.title + ":3開發版本支援)] | [_(" + tiddler.title + ":3改相容性支援)] | [_(" + tiddler.title + ":3目前無法支援)] |![[" + tiddler.title + "]] |" + getFirstLine(tiddler.text) + "|\n"; return result;}'
 write
	'writeExpenseRow(index, tiddler, context)'
>>
> 管理及使用書籤的加強
<<forEachTiddler
 where
 	'tiddler.tags.contains("擴充套件") &&
 	tiddler.tags.contains("書籤工具") &&
	 ! tiddler.tags.contains("_tempEX") '
 sortBy 'tiddler.title'
 script
 'function getFirstLine(s) { var m = s.match(/\s*(.*)/);
  return m != null && m.length >= 1 ? m[1] : "";  }  
	function writeExpenseRow(index, tiddler, context) { var result = ""; if (index == 0) {context.sum = 0; result = "|!推|!啟|!|!官|!開|!相|!無|!名稱|!介紹|\n";} result += "| [_(" + tiddler.title + ":推薦)] | [_(" + tiddler.title + ":啟用)] |~| [_(" + tiddler.title + ":3官方版本支援)] | [_(" + tiddler.title + ":3開發版本支援)] | [_(" + tiddler.title + ":3改相容性支援)] | [_(" + tiddler.title + ":3目前無法支援)] |![[" + tiddler.title + "]] |" + getFirstLine(tiddler.text) + "|\n"; return result;}'
 write
	'writeExpenseRow(index, tiddler, context)'
>>
> 對線上服務的連動支援
<<forEachTiddler
 where
 	'tiddler.tags.contains("擴充套件") &&
 	tiddler.tags.contains("服務支援") &&
	 ! tiddler.tags.contains("_tempEX") '
 sortBy 'tiddler.title'
 script
 'function getFirstLine(s) { var m = s.match(/\s*(.*)/);
  return m != null && m.length >= 1 ? m[1] : "";  }  
	function writeExpenseRow(index, tiddler, context) { var result = ""; if (index == 0) {context.sum = 0; result = "|!推|!啟|!|!官|!開|!相|!無|!名稱|!介紹|\n";} result += "| [_(" + tiddler.title + ":推薦)] | [_(" + tiddler.title + ":啟用)] |~| [_(" + tiddler.title + ":3官方版本支援)] | [_(" + tiddler.title + ":3開發版本支援)] | [_(" + tiddler.title + ":3改相容性支援)] | [_(" + tiddler.title + ":3目前無法支援)] |![[" + tiddler.title + "]] |" + getFirstLine(tiddler.text) + "|\n"; return result;}'
 write
	'writeExpenseRow(index, tiddler, context)'
>>
> 利用滑鼠和拖曳來操作
<<forEachTiddler
 where
 	'tiddler.tags.contains("擴充套件") &&
 	tiddler.tags.contains("滑鼠手勢") &&
	 ! tiddler.tags.contains("_tempEX") '
 sortBy 'tiddler.title'
 script
 'function getFirstLine(s) { var m = s.match(/\s*(.*)/);
  return m != null && m.length >= 1 ? m[1] : "";  }  
	function writeExpenseRow(index, tiddler, context) { var result = ""; if (index == 0) {context.sum = 0; result = "|!推|!啟|!|!官|!開|!相|!無|!名稱|!介紹|\n";} result += "| [_(" + tiddler.title + ":推薦)] | [_(" + tiddler.title + ":啟用)] |~| [_(" + tiddler.title + ":3官方版本支援)] | [_(" + tiddler.title + ":3開發版本支援)] | [_(" + tiddler.title + ":3改相容性支援)] | [_(" + tiddler.title + ":3目前無法支援)] |![[" + tiddler.title + "]] |" + getFirstLine(tiddler.text) + "|\n"; return result;}'
 write
	'writeExpenseRow(index, tiddler, context)'
>>
> 使瀏覽更加便利的工具
<<forEachTiddler
 where
 	'tiddler.tags.contains("擴充套件") &&
 	tiddler.tags.contains("瀏覽工具") &&
	 ! tiddler.tags.contains("_tempEX") '
 sortBy 'tiddler.title'
 script
 'function getFirstLine(s) { var m = s.match(/\s*(.*)/);
  return m != null && m.length >= 1 ? m[1] : "";  }  
	function writeExpenseRow(index, tiddler, context) { var result = ""; if (index == 0) {context.sum = 0; result = "|!推|!啟|!|!官|!開|!相|!無|!名稱|!介紹|\n";} result += "| [_(" + tiddler.title + ":推薦)] | [_(" + tiddler.title + ":啟用)] |~| [_(" + tiddler.title + ":3官方版本支援)] | [_(" + tiddler.title + ":3開發版本支援)] | [_(" + tiddler.title + ":3改相容性支援)] | [_(" + tiddler.title + ":3目前無法支援)] |![[" + tiddler.title + "]] |" + getFirstLine(tiddler.text) + "|\n"; return result;}'
 write
	'writeExpenseRow(index, tiddler, context)'
>>
> http://support.mozilla.com/kb/Keyboard+shortcuts?style_mode=inproduct&bl=n
其實在 Firefox 3 中按 F1 也會出現功能指引,不過要稍微點選一下才能找到鍵盤熱鍵列表。且目前線上版沒有中文顯示。
<<mytabs 熱鍵列表
瀏覽 瀏覽 "|>|!瀏覽|
|!指令|!熱鍵|
|上一頁|Alt+左方向鍵←<br>Backspace|
|下一頁|Alt+右方向鍵→<br>Shift+Backspace|
|首頁|Alt+Home|
|開啟檔案|Ctrl+O|
|重新載入|F5 Ctrl Cmd+R|
|重新載入(強制更新快取內容)|Ctrl+F5<br>Ctrl+Shift+R|
|停止|Esc|"
目前頁面 目前頁面 "|>|!目前頁面|
|!指令|!熱鍵|
|頁尾|End|
|頁首|Home|
|移至下個頁框|F6|
|移至上個頁框|Shift+F6|
|頁面資訊|Ctrl+I|
|頁面原始碼|Ctrl+U|
|列印|Ctrl+P|
|頁面另存新檔|Ctrl+S|
|放大文字|Ctrl++|
|縮小文字|Ctrl+-|
|標準文字大小|Ctrl+0|"
編輯 編輯 "|>|!編輯|
|!指令|!熱鍵|
|複製|Ctrl+C|
|剪下|Ctrl+X|
|刪除|Delete|
|貼上|Ctrl+V|
|取消「復原」|Ctrl+Y|
|全選|Ctrl+A|
|復原|Ctrl+Z|"
搜尋 搜尋 "|>|!搜尋|
|!指令|!熱鍵|
|尋找文字|Ctrl+F|
|找下一個|F3<br>Ctrl+G|
|鏈結隨打即找|'|
|文字隨打即找|/|
|找前一個|Shift+F3|
|網路搜尋|Ctrl+K<br>Ctrl+E|"
瀏覽視窗與分頁 瀏覽視窗與分頁 "|>|!瀏覽視窗與分頁|
|!指令|!熱鍵|
|關閉分頁|Ctrl+W<br>Ctrl+F4|
|關閉視窗|Ctrl+Shift+W<br>Alt+F4|
|左移目前分頁|Ctrl+左方向鍵←<br>Ctrl+上方向鍵↑|
|右移目前分頁|Ctrl+右方向鍵→<br>Ctrl+下方向鍵↓|
|目前分頁移至最左邊|Ctrl+Home|
|目前分頁移至最右邊|Ctrl+End|
|開新分頁|Ctrl+T|
|開新視窗|Ctrl+N|
|後一個分頁|Ctrl+Tab<br>Ctrl+Page Down|
|用新分頁開啟鏈結(網址列、搜尋列)|Alt+Enter|
|前一個分頁|Ctrl+Shift+Tab<br>Ctrl+Page Up|
|復原最後關閉的分頁|Ctrl+Shift+T|
|切換至指定分頁(1 ~ 8)|Ctrl+(數字鍵1 - 8)|
|選擇最後使用的分頁|Ctrl+9|"
工具 工具 "|>|!工具|
|!指令|!熱鍵|
|所有分頁加入書籤|Ctrl+Shift+D|
|此頁加入書籤|Ctrl+D|
|顯示書籤|Ctrl+B<br>Ctrl+I|
|鍵盤瀏覽|F7|
|下載管理員|Ctrl+J|
|瀏覽記錄|Ctrl+H Ctrl+Shift+H|
|清除隱私資料|Ctrl+Shift+Del|
|錯誤主控台|Ctrl+Shift+J|"
其它 其它 "|>|!其它|
|!指令|!熱鍵|
|快速完成 www.輸入文字.com 網址|Ctrl+Enter|
|快速完成 www.輸入文字.net 網址|Shift+Enter|
|快速完成 www.輸入文字.org 網址|Ctrl+Shift+Enter|
|刪除已選填入項目|Shift+Del|
|全螢幕|F11|
|切換至網址列|Alt+D<br>F6 Ctrl+L|
|選擇或管理搜尋引擎(須先切換到搜尋列)|Alt+上方向鍵↑<br>Alt+下方向鍵↓<br>F4|"
>>
> 加強對系統的各種設定
<<forEachTiddler
 where
 	'tiddler.tags.contains("擴充套件") &&
 	tiddler.tags.contains("系統設定") &&
	 ! tiddler.tags.contains("_tempEX") '
 sortBy 'tiddler.title'
 script
 'function getFirstLine(s) { var m = s.match(/\s*(.*)/);
  return m != null && m.length >= 1 ? m[1] : "";  }  
	function writeExpenseRow(index, tiddler, context) { var result = ""; if (index == 0) {context.sum = 0; result = "|!推|!啟|!|!官|!開|!相|!無|!名稱|!介紹|\n";} result += "| [_(" + tiddler.title + ":推薦)] | [_(" + tiddler.title + ":啟用)] |~| [_(" + tiddler.title + ":3官方版本支援)] | [_(" + tiddler.title + ":3開發版本支援)] | [_(" + tiddler.title + ":3改相容性支援)] | [_(" + tiddler.title + ":3目前無法支援)] |![[" + tiddler.title + "]] |" + getFirstLine(tiddler.text) + "|\n"; return result;}'
 write
	'writeExpenseRow(index, tiddler, context)'
>>
> 讓網頁設計更輕鬆便利
<<forEachTiddler
 where
 	'tiddler.tags.contains("擴充套件") &&
 	tiddler.tags.contains("網頁設計") &&
	 ! tiddler.tags.contains("_tempEX") '
 sortBy 'tiddler.title'
 script
 'function getFirstLine(s) { var m = s.match(/\s*(.*)/);
  return m != null && m.length >= 1 ? m[1] : "";  }  
	function writeExpenseRow(index, tiddler, context) { var result = ""; if (index == 0) {context.sum = 0; result = "|!推|!啟|!|!官|!開|!相|!無|!名稱|!介紹|\n";} result += "| [_(" + tiddler.title + ":推薦)] | [_(" + tiddler.title + ":啟用)] |~| [_(" + tiddler.title + ":3官方版本支援)] | [_(" + tiddler.title + ":3開發版本支援)] | [_(" + tiddler.title + ":3改相容性支援)] | [_(" + tiddler.title + ":3目前無法支援)] |![[" + tiddler.title + "]] |" + getFirstLine(tiddler.text) + "|\n"; return result;}'
 write
	'writeExpenseRow(index, tiddler, context)'
>>
> 閱讀書寫無國界的利器
<<forEachTiddler
 where
 	'tiddler.tags.contains("擴充套件") &&
 	tiddler.tags.contains("語言翻譯") &&
	 ! tiddler.tags.contains("_tempEX") '
 sortBy 'tiddler.title'
 script
 'function getFirstLine(s) { var m = s.match(/\s*(.*)/);
  return m != null && m.length >= 1 ? m[1] : "";  }  
	function writeExpenseRow(index, tiddler, context) { var result = ""; if (index == 0) {context.sum = 0; result = "|!推|!啟|!|!官|!開|!相|!無|!名稱|!介紹|\n";} result += "| [_(" + tiddler.title + ":推薦)] | [_(" + tiddler.title + ":啟用)] |~| [_(" + tiddler.title + ":3官方版本支援)] | [_(" + tiddler.title + ":3開發版本支援)] | [_(" + tiddler.title + ":3改相容性支援)] | [_(" + tiddler.title + ":3目前無法支援)] |![[" + tiddler.title + "]] |" + getFirstLine(tiddler.text) + "|\n"; return result;}'
 write