Welcome to TiddlyWiki created by Jeremy Ruston; Copyright © 2004-2007 Jeremy Ruston, Copyright © 2007-2011 UnaMesa Association
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
<!--{{{-->
<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 excludeLists'></span></div>
<!--}}}-->
When getting started, you may want to:
* Set your username for signing your edits: <<option txtUserName>>
* Change the page [[title|SiteTitle]] (now "<<tiddler SiteTitle>>") and [[subtitle|SiteSubtitle]] (now "<<tiddler SiteSubtitle>>"); they also set the browser tab title
* Create a tiddler where your content "starts"
** Use the button on the sidebar or [[link|My first tiddler]] it here, follow the link, edit, and click "done"
** It will be shown in the Timeline (usually on the right), but you may want to link it in the MainMenu (usually on the left)
** and/or make it open when the ~TiddlyWiki is opened by editing the list of [[DefaultTiddlers]] (separate links with spaces or linebreaks)
* Save your ~TiddlyWiki
** Although "download saving" works in any browser, it's not that convenient, so you'll probably want to use [[a dedicated saver|https://classic.tiddlywiki.com/#%5B%5BSetting up saving%5D%5D]]
<!--{{{-->
<link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2280%22>🖼️</text></svg>">
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<!--}}}-->
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]]
<!--{{{-->
<div class='header' role='banner'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' role='navigation' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' role='navigation' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' role='complementary' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea' role='main'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
/*{{{*/
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]]; }
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}
.txtOptionInput {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.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: -moz-linear-gradient(to bottom, [[ColorPalette::PrimaryLight]], [[ColorPalette::PrimaryMid]]);
background: linear-gradient(to bottom, [[ColorPalette::PrimaryLight]], [[ColorPalette::PrimaryMid]]);
}
.header a:hover {background:transparent;}
.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::Foreground]];
background:[[ColorPalette::Background]];
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 {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]]; }
.wizard__title { color:[[ColorPalette::PrimaryDark]]; border:none; }
.wizard__subtitle { color:[[ColorPalette::Foreground]]; border:none; }
.wizardStep { background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]]; }
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizardFooter .status a { color: [[ColorPalette::PrimaryPale]]; }
.wizard .button {
color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
border-color:[[ColorPalette::SecondaryDark]];
}
.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]];
}
.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}
#messageArea { background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; box-shadow: 1px 2px 5px [[ColorPalette::TertiaryMid]]; }
.messageToolbar__button { color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none; }
.messageToolbar__button_withIcon { background:inherit; }
.messageToolbar__button_withIcon:active { background:inherit; border:none; }
.tw-icon line { stroke: [[ColorPalette::TertiaryDark]]; }
.messageToolbar__button:hover .tw-icon line { stroke: [[ColorPalette::Foreground]]; }
.popup {
background: [[ColorPalette::Background]];
color: [[ColorPalette::TertiaryDark]];
box-shadow: 1px 2px 5px [[ColorPalette::TertiaryMid]];
}
.popup li a, .popup li a:visited, .popup li a:hover, .popup li a:active {
color:[[ColorPalette::Foreground]]; border: none;
}
.popup li a:hover { background:[[ColorPalette::SecondaryLight]]; }
.popup li a:active { background:[[ColorPalette::SecondaryPale]]; }
.popup li.disabled { color:[[ColorPalette::TertiaryMid]]; }
.popupHighlight {color:[[ColorPalette::Foreground]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}
.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}
.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: 2px solid [[ColorPalette::TertiaryPale]]; }
.selected .tagging, .selected .tagged { border: 2px solid [[ColorPalette::TertiaryLight]]; }
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button { border:none; }
.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}
.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]]; }
.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 th, .viewer thead td, .twtable th, .twtable thead td { background: [[ColorPalette::SecondaryMid]]; color: [[ColorPalette::Background]]; }
.viewer td, .viewer tr, .twtable td, .twtable tr { border: 1px solid [[ColorPalette::TertiaryLight]]; }
.twtable caption { color: [[ColorPalette::TertiaryMid]]; }
.viewer pre {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]]; background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%; background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}
.readOnly {background:[[ColorPalette::TertiaryPale]];}
#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:.75em; font-family:arial,helvetica,sans-serif; margin:0; padding:0; }
* html .tiddler {height:1%;}
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;}
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; border-width: 1px; }
#contentWrapper .chkOptionInput {border:0;}
.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}
a {text-decoration:none;}
.externalLink {text-decoration:underline;}
.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;}
.headerShadow {position:relative; padding:3em 0 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:3em 0 1em 1em; left:0; top:0;}
.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:0 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 0.3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}
.wizard { padding:0.1em 2em 0; }
.wizard__title { font-size:2em; }
.wizard__subtitle { font-size:1.2em; }
.wizard__title, .wizard__subtitle { font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em; }
.wizardStep { padding:1em; }
.wizardFooter { padding: 0.8em 0; }
.wizardFooter .status { display: inline-block; line-height: 1.5; padding: 0.3em 1em; }
.wizardFooter .button { margin:0.5em 0 0; font-size:1.2em; padding:0.2em 0.5em; }
#messageArea { position:fixed; top:2em; right:0; margin:0.5em; padding:0.7em 1em; z-index:2000; }
.messageToolbar { text-align:right; padding:0.2em 0; }
.messageToolbar__button { text-decoration:underline; }
.messageToolbar__button_withIcon { display: inline-block; }
.tw-icon { height: 1em; width: 1em; } /* width for IE */
.tw-icon line { stroke-width: 1; stroke-linecap: round; }
.messageArea__text a { text-decoration:underline; }
.popup {position:absolute; z-index:300; font-size:.9em; padding:0.3em 0; list-style:none; margin:0;}
.popup .popupMessage, .popup li.disabled, .popup li a { padding: 0.3em 0.7em; }
.popup li a {display:block; font-weight:normal; cursor:pointer;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}
.tiddlerPopupButton {padding:0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em; margin:0;}
.tabset {padding:1em 0 0 0.5em;}
.tab {display: inline-block; white-space: nowrap; position: relative; bottom: -0.7px; margin: 0 0.25em 0 0; padding:0.2em;}
.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 0 14em;}
.toolbar {text-align:right; font-size:.9em;}
.tiddler { padding: 1em; }
.title { font-size: 1.6em; font-weight: bold; }
.subtitle { font-size: 1.1em; }
.missing .viewer, .missing .title { font-style: italic; }
.missing .subtitle { display: none; }
.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;}
.tagged li, .tagging li { margin: 0.3em 0; }
.tagClear {clear:both;}
.footer {font-size:.9em;}
.footer li {display:inline;}
.annotation { padding: 0.5em 0.8em; margin: 0.5em 1px; }
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0 0.25em; padding:0 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 0; }
.viewer th, .viewer td, .viewer tr, .viewer caption, .twtable th, .twtable td, .twtable tr, .twtable caption { padding: 0.2em 0.4em; }
.twtable caption { font-size: 0.9em; }
table.listView { margin: 0.8em 1.0em; }
table.listView th, table.listView td, table.listView tr { text-align: left; }
.listView > thead { position: sticky; top: 0; }
* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer pre {padding:0.5em; overflow:auto;}
pre, code { font-family: monospace, monospace; font-size: 1em; }
.viewer pre, .viewer code { line-height: 1.4em; }
.editor {font-size:1.1em; line-height:1.4em;}
.editor input, .editor textarea {display:block; width:100%; box-sizing: border-box; font:inherit;}
.editorFooter {padding:0.25em 0; font-size:.9em;}
.editorFooter .button {padding-top:0; padding-bottom:0;}
.fieldsetFix {border:0; padding:0; margin:1px 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;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;}
#backstageButton a {padding: 0.3em 0.5em; display: inline-block;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel { display:none; z-index:100; position:absolute; width:90%; margin:0 5%; }
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding: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; }
}
/*}}}*/
<!--{{{-->
<div class='toolbar' role='navigation' 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>
<!--}}}-->
Vanilla ~TiddlyWiki allows to embed static images with the {{{[img[url]]}}} syntax. But what if you need to create an image gallery with some nice navigation and hotkeys? Well, there are some cool js libs out there that can help. Here is an [[implementation|FancyBox2Plugin]] of a macro that creates galleries using the [[FancyBox library|http://fancyapps.com/fancybox/]]. To go further, see [[examples|FancyBox examples]] or [[documentation|FancyBox2PluginInfo]].
As usually, you can send your feedback to the Google group ([[main FB2P thread|https://groups.google.com/forum/#!topic/tiddlywiki/5K0-Znmf9us]]), but also you can leave comments right here (presumably, I will learn about them faster; I'm testing this now):
<<disqus thread:"ImageGalleries repo" forum:ylprojects>>
[[Creating image galleries in TiddlyWiki]]
/***
|Description |Add Disqus threads (comments) to your tiddlers|
|Source |https://github.com/YakovL/TiddlyWiki_DisqusPlugin/blob/master/DisqusPlugin.js|
|Author |Yakov Litvin|
|Version |0.3.1|
|License |[[MIT|https://github.com/YakovL/TiddlyWiki_YL_ExtensionsCollection/blob/master/Common%20License%20(MIT)]]|
***/
//{{{
config.macros.disqus = {
mountThread: function(container, shouldSubstituteContainer, forumName, threadId, threadUrl) {
// adapted from github.com/bimlas/tw5-disqus/blob/master/plugins/disqus/macro/comments.js
const loaderScriptId = "DISQUS-LOADER"
const currentLoaderScript = document.getElementById(loaderScriptId)
if(currentLoaderScript !== null) (document.head || document.body).removeChild(currentLoaderScript)
// D script updates the first element with this id on load and ignores others
const commentsElementId = "disqus_thread"
const threadDivClass = "disqus_thread" // not needed really
const $prevCommentsElement = jQuery("#" + commentsElementId)
if($prevCommentsElement[0]) { // maybe use while instead
const oldUrl = $prevCommentsElement.data("thread").url
const oldId = $prevCommentsElement.data("thread").id
const btn = jQuery("<a class=button>show comments</a>")
.data("thread", { url: oldUrl, id: oldId })
btn.on("click", () => {
// * forumName – pass via .data as well?
config.macros.disqus.mountThread(btn, true, forumName, oldId, oldUrl)
})
$prevCommentsElement.replaceWith(btn)
}
const $thread = jQuery("<div></div>").addClass(threadDivClass).attr("id", commentsElementId)
.data("thread", { url: threadUrl, id: threadId })
shouldSubstituteContainer ? jQuery(container).replaceWith($thread) : $thread.appendTo(container)
// basic code from https://ylprojects.disqus.com/admin/settings/universalcode/
window.disqus_config = function () {
// see more at https://help.disqus.com/customer/en/portal/articles/2158629
if(threadUrl) this.page.url = threadUrl
this.page.identifier = threadId
}
;(function() {
const loaderScript = document.createElement('script')
loaderScript.src = 'https://' + forumName + '.disqus.com/embed.js'
loaderScript.id = loaderScriptId
loaderScript.setAttribute('data-timestamp', +new Date())
;(document.head || document.body).appendChild(loaderScript)
})()
},
handler: function(place, macroName, params, wikifier, paramString, tiddler) {
const isLocal = window.isLocal || function() { return (document.location.protocol == "file:") }
if(isLocal()) return
const pParams = paramString.parseParams("anon", null, true, false, true)
// forum shortname, also known as disqus_shortname
// TODO: add a config for the default value instead of a hardcoded value for my personal usage
const forumShortname = getParam(pParams, "forum", "")
// also known as disqus_identifier
// TODO: check if this works with non-latin letters; .oO if just tiddler.title is enough, or we have to use window.location/SiteUrl as well (maybe permalink
const threadId = getParam(pParams, "thread", tiddler ? tiddler.title : "outside-content")
// used for permalinking purposes, also known as disqus_url
const url = getParam(pParams, "url", tiddler.title && story.getPermalink ? story.getPermalink(tiddler.title) : "")
this.mountThread(place, false, forumShortname, threadId, url)
}
}
//}}}
{{{
<<fancyBox
"img/1.JPG" "img/2.JPG" "img/3.JPG" "img/4.JPG" "img/5.JPG" "img/6.JPG"
label:"field of a cylindrical magnet" "field of a cylindrical magnet on a larger scale" "field of two parallel magnets" "field of a couple of antiparallel magnets" "field of two attracting magnets" "field of two repelling magnets"
>>
}}}
<<fancyBox
"img/1.JPG" "img/2.JPG" "img/3.JPG" "img/4.JPG" "img/5.JPG" "img/6.JPG"
label:"field of a cylindrical magnet" "field of a cylindrical magnet on a larger scale" "field of two parallel magnets" "field of a couple of antiparallel magnets" "field of two attracting magnets" "field of two repelling magnets"
>>
<<fancyBox
"data:image/jpeg;base64,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"
thumb:"data:image/jpeg;base64,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"
config:"{ openEffect: 'elastic' }"
align:center
>>
+++[Code]
{{{
<<fancyBox
"data:image/jpeg;base64,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"
thumb: "data:image/jpeg;base64,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"
config:"{ openEffect: 'elastic' }"
align: center
>>
}}}
===
!!!SVG converted to base64
can be also used for thumbs, but are not supported as main images for now:
<<fancyBox
"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIj8+Cjxzdmcgd2lkdGg9IjY0MCIgaGVpZ2h0PSI0ODAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiA8IS0tIENyZWF0ZWQgd2l0aCBTVkctZWRpdCAtIGh0dHA6Ly9zdmctZWRpdC5nb29nbGVjb2RlLmNvbS8gLS0+CiA8Zz4KICA8dGl0bGU+TGF5ZXIgMTwvdGl0bGU+CiAgPHJlY3QgaWQ9InN2Z18xIiB4PSIxMTMiIHk9IjEzNyIgd2lkdGg9IjIwOSIgaGVpZ2h0PSI5NCIgc3Ryb2tlLXdpZHRoPSI1IiBzdHJva2U9IiMwMDAwMDAiIGZpbGw9IiNmZmZmMDAiLz4KICA8ZWxsaXBzZSByeD0iMTk2IiBpZD0ic3ZnXzUiIGN4PSI0MDAiIGN5PSIyNDEiIHJ5PSI1MyIgc3Ryb2tlLXdpZHRoPSI1IiBzdHJva2U9IiMwMDAwMDAiIGZpbGw9IiMwMGJmMDAiLz4KIDwvZz4KPC9zdmc+">>
{{{
<<fancyBox
"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIj8+Cjxzdmcgd2lkdGg9IjY0MCIgaGVpZ2h0PSI0ODAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiA8IS0tIENyZWF0ZWQgd2l0aCBTVkctZWRpdCAtIGh0dHA6Ly9zdmctZWRpdC5nb29nbGVjb2RlLmNvbS8gLS0+CiA8Zz4KICA8dGl0bGU+TGF5ZXIgMTwvdGl0bGU+CiAgPHJlY3QgaWQ9InN2Z18xIiB4PSIxMTMiIHk9IjEzNyIgd2lkdGg9IjIwOSIgaGVpZ2h0PSI5NCIgc3Ryb2tlLXdpZHRoPSI1IiBzdHJva2U9IiMwMDAwMDAiIGZpbGw9IiNmZmZmMDAiLz4KICA8ZWxsaXBzZSByeD0iMTk2IiBpZD0ic3ZnXzUiIGN4PSI0MDAiIGN5PSIyNDEiIHJ5PSI1MyIgc3Ryb2tlLXdpZHRoPSI1IiBzdHJva2U9IiMwMDAwMDAiIGZpbGw9IiMwMGJmMDAiLz4KIDwvZz4KPC9zdmc+">>
}}}
<<external [[FancyBox2Plugin]] file:"FancyBox2Plugin.js" plugin:true>>
!!!Single image
{{{
<<fancyBox "img/1.JPG" title:"Field of a cylindrical magnet" thumb:"img/1 thumb.png">>
}}}
<<fancyBox "img/1.JPG" title:"Field of a cylindrical magnet" thumb:"img/1 thumb.png">>
!!!Galleries
!!!!One-by-one syntax
<<fancyBox
"img/1.JPG" "img/2.JPG" "img/3.JPG" "img/4.JPG" "img/5.JPG" "img/6.JPG"
thumb:"img/1 thumb.png" "img/2 thumb.png" "img/3 thumb.png" "img/4 thumb.png" "img/5 thumb.png" "img/6 thumb.png"
title:"field of a cylindrical magnet" "field of a cylindrical magnet on a larger scale" "field of two parallel magnets" "field of a couple of antiparallel magnets" "field of two attracting magnets" "field of two repelling magnets"
>>
+++[Show the macro code]
{{{
<<fancyBox
"img/1.JPG" "img/2.JPG" "img/3.JPG" "img/4.JPG" "img/5.JPG" "img/6.JPG"
thumb:"img/1 thumb.png" "img/2 thumb.png" "img/3 thumb.png" "img/4 thumb.png" "img/5 thumb.png" "img/6 thumb.png"
title:"field of a cylindrical magnet" "field of a cylindrical magnet on a larger scale" "field of two parallel magnets" "field of a couple of antiparallel magnets" "field of two attracting magnets" "field of two repelling magnets"
>>
}}}
===
Note: when using in web, thumbs should be set: otherwise, the thumbs made of minified but not compressed images may cause slow gallery loading (on relatively slow connections): see [[how it works|Example of a gallery without thumbnails]].
!!!!Arbitrary order syntax
The macro can be used in +++[this manner]
{{{
<<fancyBox
"img/1.JPG" thumb:"img/1 thumb.png" title:"field of a cylindrical magnet"
image:"img/2.JPG" thumb:"img/2 thumb.png" title:"field of a cylindrical magnet on a larger scale"
image:"img/3.JPG" thumb:"img/3 thumb.png" title:"field of two parallel magnets"
image:"img/4.JPG" thumb:"img/4 thumb.png" title:"field of a couple of antiparallel magnets"
image:"img/5.JPG" thumb:"img/5 thumb.png" title:"field of two attracting magnets"
image:"img/6.JPG" thumb:"img/6 thumb.png" title:"field of two repelling magnets"
>>
}}}
===. This is useful when thumbs or titles are defined only for some images:
{{{
<<fancyBox
"img/1.JPG" title:"field of a cylindrical magnet"
image:"img/2.JPG" thumb:"img/2 thumb.png" title:"field of a cylindrical magnet on a larger scale"
image:"img/3.JPG" thumb:"img/3 thumb.png"
image:"img/4.JPG" title:"field of a couple of antiparallel magnets" thumb:"img/4 thumb.png"
image:"img/5.JPG" thumb:"img/5 thumb.png" title:"field of two attracting magnets"
image:"img/6.JPG" thumb:"img/6 thumb.png"
>>
}}}
resulting in:
<<fancyBox
"img/1.JPG" title:"field of a cylindrical magnet"
image:"img/2.JPG" thumb:"img/2 thumb.png" title:"field of a cylindrical magnet on a larger scale"
image:"img/3.JPG" thumb:"img/3 thumb.png"
image:"img/4.JPG" title:"field of a couple of antiparallel magnets" thumb:"img/4 thumb.png"
image:"img/5.JPG" thumb:"img/5 thumb.png" title:"field of two attracting magnets"
image:"img/6.JPG" thumb:"img/6 thumb.png"
>>
!!!For each image/wrapper params
!!!!Changing thumbnails size and styles
The following addition to the macro params can be used to set their size:
{{{
images-max-width:"15.6%"
}}}
note that there's the default value of {{{max-width}}} equal to {{{24%}}} and the default values of left and right margins equal to {{{0.5%}}} (set by the plugin) which can be overwritten like this. The used value 15.6% is a rough value of {{{100% / 6 - 1%}}} (6 pictures, 1% for margins). The result is:
<<fancyBox
"img/1.JPG" "img/2.JPG" "img/3.JPG" "img/4.JPG" "img/5.JPG" "img/6.JPG"
thumb:"img/1 thumb.png" "img/2 thumb.png" "img/3 thumb.png" "img/4 thumb.png" "img/5 thumb.png" "img/6 thumb.png"
title:"field of a cylindrical magnet" "field of a cylindrical magnet on a larger scale" "field of two parallel magnets" "field of a couple of antiparallel magnets" "field of two attracting magnets" "field of two repelling magnets"
images-max-width:"15.6%"
>>
Any CSS property of each image can set using params with the {{{image-}}} prefix. For instance, here's a way to make all the images be of the same height (unfortunately, this is browser/screen-size/zoom dependent way as cm and %width can have different ratios; play with zooming to see how it works):
{{{
images-max-width:"17.5%" images-max-height:"2.7cm"
}}}
<<fancyBox
"img/1.JPG" "img/2.JPG" "img/3.JPG" "img/4.JPG" "img/5.JPG" "img/6.JPG"
thumb:"img/1 thumb.png" "img/2 thumb.png" "img/3 thumb.png" "img/4 thumb.png" "img/5 thumb.png" "img/6 thumb.png"
title:"field of a cylindrical magnet" "field of a cylindrical magnet on a larger scale" "field of two parallel magnets" "field of a couple of antiparallel magnets" "field of two attracting magnets" "field of two repelling magnets"
images-max-width:"17.5%" images-max-height:"2.7cm"
>>
!!!!Using custom HTML instead of thumbnails
Starting the {{{thumb}}} param with {{{html:}}} allows to use a custom HTML instead:
{{{
<<fancyBox
"img/1.JPG" thumb:"html: custom <i>html</i> instead of a thumb"
image:"img/2.JPG" thumb:"img/2 thumb.png"
>>
}}}
<<fancyBox
"img/1.JPG" thumb:"html: custom <i>html</i> instead of a thumb"
image:"img/2.JPG" thumb:"img/2 thumb.png"
>>
!!!!Adding custom classes to images
Any class can be added to images like this:
{{{
images-class:"myBorder"
}}}
Here, CSS for {{{myBorder}}} is defined at StyleSheet which gives:
<<fancyBox
"img/1.JPG" "img/2.JPG" thumb:"img/1 thumb.png" "img/2 thumb.png" title:"field of a cylindrical magnet" "field of a cylindrical magnet on a larger scale"
images-class:"myBorder"
>>
!!!!Same for wrappers...
Likewise, styles and classes can be added to the {{{a}}} wrappers of the images.
{{{
images-wrapper:"myWrapper" images-wrapper:"just-another-class"
}}}
gives (with StyleSheet):
<<fancyBox
"img/1.JPG" thumb:"img/1 thumb.png" title:"field of a cylindrical magnet"
wrappers-class:"myWrapper" wrappers-class:"just-another-class"
>>
(ok, this is not a great example, in fact I'm not sure if styling of wrappers is needed at all, let me know what you think)
!!!Global (per macro) params
!!!!Align
{{{
<<fancyBox "img/1.JPG" title:"field of a cylindrical magnet" thumb:"img/1 thumb.png" align:center>>
}}}
(can be {{{left}}}, {{{center}}} or {{{right}}})
<<fancyBox "img/1.JPG" title:"field of a cylindrical magnet" thumb:"img/1 thumb.png" align:center>>
!!!!Inline
Sometimes, it's useful to show a thumb or custom html inline, for instance a clickable emoji: <<fancyBox
"img/1.JPG" thumb:"html: 👁️" inline
>>. This can be done via the {{{inline}}} param:
{{{
<<fancyBox "img/1.JPG" thumb:"html: 👁️" inline>>
}}}
!!!!Gallery id
Each gallery has and id which is by default generated so that different galleries have diffent ones. If two galleries have the same id, they are displayed as one, which can be useful. This can be made, usgin the {{{galleryId}}} param, here's a couple of "concept" examples:
* +++[Two-parts gallery]
<<fancyBox
"img/1.JPG" "img/2.JPG"
title:"field of a cylindrical magnet" "field of a cylindrical magnet on a larger scale"
images-max-width:"49%"
galleryId:"two-parts-gallery"
>><<fancyBox
"img/3.JPG" "img/4.JPG" "img/5.JPG" "img/6.JPG"
thumb:"img/3 thumb.png" "img/4 thumb.png" "img/5 thumb.png" "img/6 thumb.png"
title:"field of two parallel magnets" "field of a couple of antiparallel magnets" "field of two attracting magnets" "field of two repelling magnets"
images-max-width:"24%"
galleryId:"two-parts-gallery"
>>
{{{
<<fancyBox
"img/1.JPG" "img/2.JPG"
title:"field of a cylindrical magnet" "field of a cylindrical magnet on a larger scale"
images-max-width:"49%"
galleryId:"two-parts-gallery"
>><<fancyBox
"img/3.JPG" "img/4.JPG" "img/5.JPG" "img/6.JPG"
thumb:"img/3 thumb.png" "img/4 thumb.png" "img/5 thumb.png" "img/6 thumb.png"
title:"field of two parallel magnets" "field of a couple of antiparallel magnets" "field of two attracting magnets" "field of two repelling magnets"
images-max-width:"24%"
galleryId:"two-parts-gallery"
>>
}}}
===
* +++[Alignment using table]
|>|max-width:30em;<<fancyBox "img/1.JPG" title:"field of a cylindrical magnet" images-max-width:"100%" galleryId:"table-gallery">>|<<fancyBox "img/2.JPG" thumb:"img/2 thumb.png" title:"field of a cylindrical magnet on a larger scale" images-max-width:"100%" galleryId:"table-gallery">>|
|~|~|<<fancyBox "img/3.JPG" thumb:"img/3 thumb.png" title:"field of two parallel magnets" images-max-width:"100%" galleryId:"table-gallery">>|
|<<fancyBox "img/4.JPG" thumb:"img/4 thumb.png" title:"field of a couple of antiparallel magnets" images-max-width:"100%" galleryId:"table-gallery">>|<<fancyBox "img/5.JPG" thumb:"img/5 thumb.png" title:"field of two attracting magnets" images-max-width:"100%" galleryId:"table-gallery">>|<<fancyBox "img/6.JPG" thumb:"img/6 thumb.png" title:"field of two repelling magnets" images-max-width:"100%" galleryId:"table-gallery">>|
{{{
|>|max-width:30em;<<fancyBox "img/1.JPG" title:"field of a cylindrical magnet" images-max-width:"100%" galleryId:"table-gallery">>|<<fancyBox "img/2.JPG" thumb:"img/2 thumb.png" title:"field of a cylindrical magnet on a larger scale" images-max-width:"100%" galleryId:"table-gallery">>|
|~|~|<<fancyBox "img/3.JPG" thumb:"img/3 thumb.png" title:"field of two parallel magnets" images-max-width:"100%" galleryId:"table-gallery">>|
|<<fancyBox "img/4.JPG" thumb:"img/4 thumb.png" title:"field of a couple of antiparallel magnets" images-max-width:"100%" galleryId:"table-gallery">>|<<fancyBox "img/5.JPG" thumb:"img/5 thumb.png" title:"field of two attracting magnets" images-max-width:"100%" galleryId:"table-gallery">>|<<fancyBox "img/6.JPG" thumb:"img/6 thumb.png" title:"field of two repelling magnets" images-max-width:"100%" galleryId:"table-gallery">>|
}}}
===
!!!!Using fancyBox settings
In this example, the fancyBox options are used (via the {{{config}}} param) to change the opening effect:
{{{
config:"{ openEffect: 'elastic', openSpeed: 350 }"
}}}
<<fancyBox
"img/1.JPG" "img/2.JPG" "img/3.JPG" "img/4.JPG"
thumb:"img/1 thumb.png" "img/2 thumb.png" "img/3 thumb.png" "img/4 thumb.png"
title:"field of a cylindrical magnet" "field of a cylindrical magnet on a larger scale" "field of two parallel magnets" "field of a couple of antiparallel magnets"
config:"{ openEffect: 'elastic', openSpeed: 350 }"
>>
You can find more [[tips & tricks|http://fancyapps.com/fancybox/#useful]] and [[documentation|http://fancyapps.com/fancybox/#docs]] on the lib's page; the {{{config}}} param is evaluated and passed to the {{{.fancybox}}} function, so you can copy-paste codes from some examples directly to the macro.
!!!Using base64
It is in fact possible to attach images into ~TiddlyWiki in a text form using the [[base64 format|https://en.wikipedia.org/wiki/Base64]]. An image can be easily converted to base64 using [[this|http://www.askapache.com/online-tools/base64-image-converter/]] or [[this|http://www.base64-image.de/step-1.php]] or some other tool. There are several drawbacks: you have to use some external software, the byte-size of the image increases once it is converted to base64, and also it takes huge space in a tiddler and increases the TW size (not sure about loading time when used locally). Sometimes it can be useful nonetheless, especially for small images, icons; here's [[an exmaple of usage|Example of base64 usage]].
FancyBox2Plugin
<<include "node: ImageGalleriesRepo" filters:"[[FancyBox2Plugin installer and updater]] [[FancyBox2Plugin]]" import:4 noRefresh>>
|''Description''|Documentation for the [[FancyBox2Plugin|https://yakovl.github.io/TiddlyWiki_ImageGalleries/#FancyBox2Plugin]] v0.9.4|
|''Author''|Yakov Litvin|
|''Licence''|see [[the plugin|https://yakovl.github.io/TiddlyWiki_ImageGalleries/#FancyBox2Plugin]]|
|''Feedback''|see [[intro|https://yakovl.github.io/TiddlyWiki_ImageGalleries/#%5B%5BCreating%20image%20galleries%20in%20TiddlyWiki%5D%5D]]|
|''Credits''|The plugin was inspired by the earlier Mario Pietsch's [[implementation|http://fancybox.tiddlyspace.com/]] which seems to get broken at some point|
The plugin defines the {{{fancyBox}}} macro which creates an image gallery, like in the [[examples|https://yakovl.github.io/TiddlyWiki_ImageGalleries/#%5B%5BFancyBox%20examples%5D%5D]].
!!!Plugin installation
is the simplest one: just import the plugin tiddler, or copy-paste and add the {{{systemConfig}}} tag. No external icons are required as they are [[converted|http://www.askapache.com/online-tools/base64-image-converter/]] to base64 and inserted directly into StyleSheetFancyBox.
!!!Macro syntax
The simplest usage is rather self-explanatory:
{{{
<<fancyBox image1url image2url ...>>
}}}
!!!!Per image params
For each image, a title (shown in the fancyBox) and a "thumbnail" (an alternative image, usually of a smaller size, shown in the text, when the fancyBox is not opened) can be defined. For one image, they are defined as follows (the {{{[}}}...{{{]}}} wrapper means that the param is optional):
{{{
<<fancyBox imageUrl [thumb:thumbnailUrl] [title:imageTitle]>>
}}}
Instead of the {{{title}}} param, {{{label}}} can be used, but with multiple images they shouldn't be mixed: use either {{{title}}}s or {{{label}}}s in the same macro (this is done for partial backward compability with Mario's plugin).
For multiple images, there's a couple of ways to set the images/titles:
# put images' urls one by one -- then other params are applied starting from the first image and then sequentially:{{jD{
{{{
<<fancyBox
image1url image2url ... imageNurl
[thumb:image1thumb image2thumb ... imageMthumb]
[title:image1title image2title ... imageLtitle]
>>
}}}
}}} The first thumb corresponds to the first image, the second -- to the second one, ..., same for titles (here M ≤ N, L ≤ N).
# or, put the additional params after images' url -- in this case it's possible to add those to several images at arbitrary number:{{jD{
{{{
<<fancyBox
[image:]image1url [thumb:image1thumb] [title:image1title]
image:image2url [thumb:image2thumb] [title:image2title]
...
image:imageNurl [thumb:imageNthumb] [title:imageNtitle]
>>
}}}
}}} If "thumb" and "title" are not used, the next image url doesn't require the "image:" part.
Keep in mind that using thumbnails can speed up tiddler loading considerably, especially on the web.
!!!!For each image/wrapper params
Aside changing styles for the whole document (see below), it is possible to set them for a single macro. For that, one can use the {{{images-}}} and {{{wrappers-}}} prefixed params. These params are to be used like CSS properties: for instance, if you'd like to increase the margins around the images and add red borders, you can write:
{{{
<<fancyBox ...
images-margin:"1%"
images-border:"thin solid red"
>>
}}}
and the {{{margin: 1%; border: thin solid red;}}} styling is applied to each picture. Any CSS property name can be used, but this doesn't allow to use pseudo-selectors like {{{:hover}}} or {{{:before}}}.
As each image is wrapped into an {{{a}}} element, there's also a possibility to style the wrappers -- this is done in the same way using the {{{wrappers-}}} params but it doesn't seem like a thing to use frequently.
Alternatively, you can use the {{{images-class}}} and {{{wrappers-class}}} params to add DOM classes to them and use external styling (StyleSheet and such):
{{{
<<fancyBox ...
wrappers-class:"myWrapperClass" wrappers-class:"my-other-wrapper_class"
>>
}}}
!!!!"Global" params
The plugin supports fancyBox configuration via the "global" ''{{{config}}} param'': the whole param is evaluated and passed to the {{{.fancybox}}} function. This example is a adoption of the "Remove white border around content" [[Fiddle|http://jsfiddle.net/nJfAZ/]]:
{{{
<<fancyBox
image1url image2url ... imageNurl
config:"{ padding: 0 }"
>>
}}}
For further tweaking, see fancyBox [[documentation|http://fancyapps.com/fancybox/#docs]], tips & tricks and examples (on the same page).
Using the ''{{{align}}} param'', one can move the block with images to {{{center}}} or {{{right}}}. Presumably, this is mostly useful for moving single images to center:
{{{
<<fancyBox someImage align:center>>
}}}
Each gallery gets an auto-generated id. You can also set the id yourself by using the {{{galleryId}}} param: if two or more galleries has the same id, the are concatenated in fancyBox:
{{{
<<fancyBox ... galleryId:"my-id">>
...
<<fancyBox ... galleryId:"my-id">>
}}}
If you have multiple images in a single folder, you may want to use the ''{{{folder}}} and {{{thumbFolder}}} params'': the former makes all pathes of images relative to it ("" if omitted):
{{{
<<fancyBox "some path/subpath1/image1.jpg"
"some path/subpath2/image2.png"
...
>>
}}}
is the same as
{{{
<<fancyBox "subpath1/image1.jpg"
"subpath2/image2.png"
...
folder:"some path"
>>
}}}
This also allows to move large numbers of images without changing each url in each macro. {{{thumbFolder}}} does the same to images' thumbnails, the only difference is: by default it's equal to the {{{folder}}} param value.
!!!Styles definition and tweaking
~FancyBox styling is contained in the StyleSheetFancyBox shadow. It can be changed to meet your needs; deleting it brings it back to its initial (shadow) state.
!!!What is not implemented (yet)
~FancyBox allows to work with content other than images, which is to be implemented in further versions. Some other features may be implemented in the future, like settings for better representation of thumbnails etc.
/***
|''Name''|InnerExternalLinkPlugin|
|''Version''|0.9.1|
|''Author''|Yakov Litvin|
***/
//{{{
config.extensions.InnerExternalLinkPlugin_orig_createExternalLink = createExternalLink;
createExternalLink = function(place,url,label) {
var permaLinkRegExp = /([^#]+)#(?:(?:([^%\[]+))|(?:\[\[([^\]]+)\]\])|(?:%5B%5B([^\]]+)%5D%5D))/,
// better to use decoding
match = permaLinkRegExp.exec(url),
siteUrlText = store.getTiddlerText("SiteUrl"),
pageLocation = window.location,
urlRegExp = /^(([^:\/\?#]+):)?(\/\/([^\/\?#]*))?([^\?#]*)(\?([^#]*))?(#(.*))?/,
matched = false;
if(match) {
var bareUrl = match[1],
tiddlerName = match[4]? match[4] : (match[3]? match[3] : match[2]);
tiddlerName = decodeURIComponent(tiddlerName);
} else
return config.extensions.InnerExternalLinkPlugin_orig_createExternalLink(place,url,label);
if(siteUrlText == bareUrl)
matched = true;
match = urlRegExp.exec(pageLocation.toString());
if(match[1]+match[3]+match[5] == bareUrl)
matched = true;
// may be additional normalizing (stripping the protocol etc, encoding/decoding) should be added
if(matched)
return createTiddlyLink(place, tiddlerName, label);
else
return config.extensions.InnerExternalLinkPlugin_orig_createExternalLink(place,url,label);
};
//}}}
[[Intro|Creating image galleries in TiddlyWiki]]
[[Plugin|FancyBox2Plugin]]
[[Examples|FancyBox examples]]
[[Docs|FancyBox2PluginInfo]]
[[Licence|Yakov Litvin Public Licence]]
<!--{{{-->
<div style="text-align: center; margin: 2%"><!-- my wrapper -->
<!-- Yandex.Metrika informer -->
<a href="https://metrika.yandex.ru/stat/?id=22899424&from=informer"
target="_blank" rel="nofollow"><img src="//bs.yandex.ru/informer/22899424/3_1_FFFFFFFF_EFEFEFFF_0_pageviews"
style="width:88px; height:31px; border:0;" alt="Яндекс.Метрика" title="Яндекс.Метрика: данные за сегодня (просмотры, визиты и уникальные посетители)" onclick="try{Ya.Metrika.informer({i:this,id:22899424,lang:'ru'});return false}catch(e){}"/></a>
<!-- /Yandex.Metrika informer -->
<!-- Yandex.Metrika counter -->
<script type="text/javascript">
(function (d, w, c) {
(w[c] = w[c] || []).push(function() {
try {
w.yaCounter22899424 = new Ya.Metrika({id:22899424,
clickmap:true,
trackLinks:true,
accurateTrackBounce:true,
trackHash:true});
} catch(e) { }
});
var n = d.getElementsByTagName("script")[0],
s = d.createElement("script"),
f = function () { n.parentNode.insertBefore(s, n); };
s.type = "text/javascript";
s.async = true;
s.src = (d.location.protocol == "https:" ? "https:" : "http:") + "//mc.yandex.ru/metrika/watch.js";
if (w.opera == "[object Opera]") {
d.addEventListener("DOMContentLoaded", f, false);
} else { f(); }
})(document, window, "yandex_metrika_callbacks");
</script>
<noscript><div><img src="//mc.yandex.ru/watch/22899424" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter -->
</div><!-- end of my wrapper -->
<!--}}}-->
/***
|Name|NestedSlidersPlugin|
|Source|http://www.TiddlyTools.com/#NestedSlidersPlugin|
|Documentation|http://www.TiddlyTools.com/#NestedSlidersPluginInfo|
|Version|2.4.9|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|show content in nest-able sliding/floating panels, without creating separate tiddlers for each panel's content|
!!!!!Configuration
<<<
<<option chkFloatingSlidersAnimate>> allow floating sliders to animate when opening/closing
Note: for floating slider animation to occur you must also allow animation in general (see [[AdvancedOptions]]).
<<<
!!!!!Code
***/
//{{{
version.extensions.NestedSlidersPlugin= {major: 2, minor: 4, revision: 9, date: new Date(2008,11,15)};
// options for deferred rendering of sliders that are not initially displayed
if (config.options.chkFloatingSlidersAnimate===undefined)
config.options.chkFloatingSlidersAnimate=false; // avoid clipping problems in IE
// 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");
// if removeCookie() function is not defined by TW core, define it here.
if (window.removeCookie===undefined) {
window.removeCookie=function(name) {
document.cookie = name+'=; expires=Thu, 01-Jan-1970 00:00:01 UTC; path=/;';
}
}
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 hover=lookaheadMatch[6];
var buttonClass=lookaheadMatch[7];
var label=lookaheadMatch[8];
var openlabel=lookaheadMatch[9];
var panelID=lookaheadMatch[10];
var blockquote=lookaheadMatch[11];
var deferred=lookaheadMatch[12];
// 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 (defopen) show="block";
// cookie, use saved open/closed state
if (cookiename) {
cookie=cookiename.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 (label) {
var parts=label.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 (openlabel) {
var parts=openlabel.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 (header) { // use "Hn" header format instead of button/link
var lvl=(header.length>5)?5:header.length;
var btn = createTiddlyElement(createTiddlyElement(place,"h"+lvl,null,null,null),"a",null,buttonClass,title);
btn.onclick=onClickNestedSlider;
btn.setAttribute("href","javascript:;");
btn.setAttribute("title",tooltip);
}
else
var btn = createTiddlyButton(place,title,tooltip,onClickNestedSlider,buttonClass);
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=defopen!=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.setAttribute("hover",hover?"true":"false");
btn.onmouseover=function(ev) {
// optional 'open on hover' handling
if (this.getAttribute("hover")=="true" && this.sliderPanel.style.display=='none') {
document.onclick.call(document,ev); // close transients
onClickNestedSlider(ev); // open this slider
}
// mouseover on button aligns floater position with button
if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this,this.sliderPanel);
}
// create slider panel
var panelClass=panelwidth?"floatingPanel":"sliderPanel";
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=(panelwidth && panelwidth.length>2)?panelwidth.slice(1,-1):"";
panel.setAttribute("transient",transient=="*"?"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); }
// render slider (or defer until shown)
w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
if ((show=="block")||!deferred) {
// render now if panel is supposed to be shown or NOT deferred rendering
w.subWikify(blockquote?createTiddlyElement(panel,"blockquote"):panel,this.terminator);
// align floater position with button
if (window.adjustSliderPos) window.adjustSliderPos(place,btn,panel);
}
else {
var src = w.source.substr(w.nextMatch);
var endpos=findMatchingDelimiter(src,"+++","===");
panel.setAttribute("raw",src.substr(0,endpos));
panel.setAttribute("blockquote",blockquote?"true":"false");
panel.setAttribute("rendered","false");
w.nextMatch += endpos+3;
if (w.source.substr(w.nextMatch,1)=="\n") w.nextMatch++;
}
}
}
}
)
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);
while (theTarget && theTarget.sliderPanel==undefined) theTarget=theTarget.parentNode;
if (!theTarget) return false;
var theSlider = theTarget.sliderPanel;
var isOpen = theSlider.style.display!="none";
// if SHIFT-CLICK, dock panel first (see [[MoveablePanelPlugin]])
if (e.shiftKey && config.macros.moveablePanel) config.macros.moveablePanel.dock(theSlider,e);
// 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") {
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 && (!hasClass(theSlider,'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);
// 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")
{ try{ ctrls[c].focus(); } catch(err){;} break; }
}
}
var cookie=theTarget.sliderCookie;
if (cookie && cookie.length) {
config.options[cookie]=!isOpen;
if (config.options[cookie]!=theTarget.defOpen) window.saveOptionCookie(cookie);
else window.removeCookie(cookie); // remove cookie if slider is in default display state
}
// prevent SHIFT-CLICK from being processed by browser (opens blank window... yuck!)
// prevent clicks *within* a slider button from being processed by browser
// but allow plain click to bubble up to page background (to close transients, if any)
if (e.shiftKey || theTarget!=resolveTarget(e))
{ e.cancelBubble=true; if (e.stopPropagation) e.stopPropagation(); }
Popup.remove(); // close open popup (if any)
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);
if (document.nestedSliders_savedOnClick)
var retval=document.nestedSliders_savedOnClick.apply(this,arguments);
// if click was inside a popup... leave transient panels alone
var p=target; while (p) if (hasClass(p,"popup")) break; else p=p.parentNode;
if (p) return retval;
// if click was inside transient panel (or something contained by a transient panel), leave it alone
var p=target; while (p) {
if ((hasClass(p,"floatingPanel")||hasClass(p,"sliderPanel"))&&p.getAttribute("transient")=="true") break;
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})
if (!hasClass(all[i],"floatingPanel")&&!hasClass(all[i],"sliderPanel")) all[i].style.display="none";
}
return retval;
};
//}}}
//{{{
// adjust floating panel position based on button position
if (window.adjustSliderPos==undefined) window.adjustSliderPos=function(place,btn,panel) {
if (hasClass(panel,"floatingPanel") && !hasClass(panel,"undocked")) {
// see [[MoveablePanelPlugin]] for use of 'undocked'
var rightEdge=document.body.offsetWidth-1;
var panelWidth=panel.offsetWidth;
var left=0;
var top=btn.offsetHeight;
if (place.style.position=="relative" && findPosX(btn)+panelWidth>rightEdge) {
left-=findPosX(btn)+panelWidth-rightEdge; // shift panel relative to button
if (findPosX(btn)+left<0) left=-findPosX(btn); // stay within left edge
}
if (place.style.position!="relative") {
var left=findPosX(btn);
var top=findPosY(btn)+btn.offsetHeight;
var p=place; while (p && !hasClass(p,'floatingPanel')) p=p.parentNode;
if (p) { left-=findPosX(p); top-=findPosY(p); }
if (left+panelWidth>rightEdge) left=rightEdge-panelWidth;
if (left<0) left=0;
}
panel.style.left=left+"px"; panel.style.top=top+"px";
}
}
//}}}
//{{{
// TW2.1 and earlier:
// hijack Slider 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 stop handler so sliderPanel/floatingPanel 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);
var e=this.element;
if (hasClass(e,"sliderPanel")||hasClass(e,"floatingPanel")) {
// adjust panel overflow and position after animation
e.style.overflow = "visible";
if (window.adjustSliderPos) window.adjustSliderPos(e.parentNode,e.button,e);
}
};
}
//}}}
<<search>><<closeAll>><<permaview>><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel "options »" "Change TiddlyWiki advanced options">>
/%<<slider chkSliSideBarTabs SideBarTabs##Tabs "Aggregated navigation lists" "">>
!Tabs
%/<<tabs txtMainTab
"Timeline" "Timeline" SideBarTabs##TabTimeline
"All" "All tiddlers" SideBarTabs##TabAll
"Tags" "All tags" SideBarTabs##TabTags
"More" "More lists" SideBarTabs##TabsMore
>>/%
!TabTimeline
<<timeline>>
!TabAll
<<list all>>
!TabTags
<<allTags excludeLists>>
!TabsMore
<<tabs txtMoreTab
"Missing" "Missing tiddlers" SideBarTabs##TabMoreMissing
"Orphans" "Orphaned tiddlers" SideBarTabs##TabMoreOrphans
"Shadowed" "Shadowed tiddlers" SideBarTabs##TabMoreShadowed
>>
!TabMoreMissing
<<list missing>>
!TabMoreOrphans
<<list orphans>>
!TabMoreShadowed
<<list shadowed>>
!%/
a tool to create image galleries in ~TiddlyWiki
https://yakovl.github.io/TiddlyWiki_ImageGalleries/
/*{{{*/
div[tags=""] .tagged { display: none; }
.myBorder { border: thin solid red; }
.myWrapper:before { content:"\\o/"; }
.myWrapper:after { content:"\\o/"; }
/*}}}*/
/***
|Description |Allows to store any number of tiddlers as external files and more|
|Source |https://github.com/YakovL/TiddlyWiki_TiddlerInFilePlugin/blob/master/TiddlerInFilePlugin.js|
|Author |Yakov Litvin|
|Version |1.1.3*|
|License |[[MIT|https://github.com/YakovL/TiddlyWiki_YL_ExtensionsCollection/blob/master/Common%20License%20(MIT)]]|
!!!Usage
Once the plugin is installed (copy - tag {{{systemConfig}}} - reload) storing tiddlers in files is done via 2 steps:
# list (describe) those in [[ExternalTiddlersList]] by writing {{{<<external>>}}} macros there
# if the file exists and the tiddler doesn't, reload TW (external tiddler will be loaded on startup);<br>if the tiddler exists and the file doesn't, just save your TW
Here's how the macro is used:
{{{
<<external [[MyTestTiddler]]>>
}}}
will store the tiddler's text in {{{MyTestTiddler.txt}}} in the same folder as TW. There's a number of other options:
{{{
<<external [[tiddler name]]
[file:<relative path with or without filename and extension>]
[format:{externalized | text}]
[keepInternal:true]
[plugin:true]
>>
}}}
Examples of the {{{file}}} param usage:
* {{{<<external [[MyTestTiddler]] file:"other name">>}}} makes file name different from tiddler name
* {{{<<external [[MyPlugin]] file:"MyPlugin.js" plugin:true>>}}} sets a custom file extension (see also the {{{plugin}}} option below)
* {{{<<external [[MyLog]] file:"../logs/">>}}} will store the file in another folder (note that omitted filename after {{{/}}} means "use tiddler name as filename and default extension")
* the plugin doesn't take care of forbidden characters yet ({{{*}}}, {{{?}}}, {{{"}}} etc), so be careful about those
Supported formats are
* {{{text}}} (default) – only tiddler text is stored in the file with {{{.txt}}} extension; and
* {{{externalized}}} – whole tiddler is stored in the same format as in TW store, file has {{{.tid.html}}} extension and is displayed is monospace tiddler text when opened in browser
Formats can be added by extending {{{config.macros.external.fileFormats}}}.
The {{{keepInternal}}} option makes TW save the tiddler in both external file and TW itself. This, for instance, affects tiddlers stored in {{{text}}} format: without it, all fields like creator, modified etc are destroyed on reload (since are not saved), but with it they are preserved.
The {{{plugin}}} option makes TW evaluate the tiddler like it does with plugins. Note that it doesn't handle plugin dependencies yet. @@color:red;Warning@@: TIFP doesn't currently take care of installing only once, so use {{{plugin}}} with {{{keepInternal}}} ''only'' if you understand the outcome (for instance, some plugins may create infinite loops; also remember that internal version will be always installed first).
***/
//{{{
config.macros.external = {
fileFormats: {
text: {
extension: 'txt',
externalize: function(tiddler) { return tiddler.text },
// changes tiddler as a side-effect not to remove existing fields
internalize: function(tiddler, source) {
tiddler.text = source
}
},
externalized: {
extension: 'tid.html',
externalize: function(tiddler) {
return store.getSaver().externalizeTiddler(store, tiddler)
},
// like for 'text', extends tiddler, doesn't create from scratch
internalize: function(tiddler, source) {
var div = createTiddlyElement(document.body, 'div')
div.setAttribute('style','display:none;')
div.innerHTML = source
store.getLoader().internalizeTiddler(store, tiddler,
tiddler.title, div.firstChild)
div.remove()
}
}/*,
tid: { extension: 'tid' },
json: { extension: 'tid.json' }
externalizedWithFormatter? sane to implement?
*/
},
// here and below "meta" means "info about registered external tiddler,
// be it loaded or not"
getExtension: function(meta) {
const format = this.fileFormats[meta.fileFormat]
if(!format) return //# ok??
return format.extension
},
externalizeTiddler: function(meta) {
const format = this.fileFormats[meta.fileFormat]
if(!format) return //# ok??
return format.externalize(meta.tiddler)
},
internalizeTiddler: function(meta, source) {
const format = this.fileFormats[meta.fileFormat]
if(!format) return //# ok??
const tiddler = store.fetchTiddler(meta.tiddlerName) ||
new Tiddler(meta.tiddlerName)
format.internalize(tiddler, source) //# pass meta to tiddler?
tiddler.doNotSave = function() { return !meta.keepInTW }
meta.tiddler = tiddler
return tiddler
},
listName: "ExternalTiddlersList",
// read files list, load
init: function() {
const listTiddler = store.fetchTiddler(this.listName)
if(!listTiddler || !listTiddler.text) return
wikify(listTiddler.text, createTiddlyElement(null, 'div'))
for(let meta of this.tiddlersMeta) this.loadExternal(meta)
},
handler: function(place, macroName, params, wikifier, paramString, tiddler) {
// parse params, register
const defaultParam = 'tiddler'
const pParams = paramString.parseParams(defaultParam, null, true)
const meta = {}
meta.tiddlerName = getParam(pParams, defaultParam)
if(!meta.tiddlerName) return
// although called .fileName, it actually can contain relative part of a path
// fallback to meta.tiddlerName is set when calculating the full path
meta.fileName = getParam(pParams, 'file', '')
//# check if contains "bad" characters (like " or * ..for local paths only)
meta.fileFormat = getParam(pParams, 'format', 'text')
meta.isPlugin = getFlag(pParams, 'plugin') //# allow just "plugin" instead of "plugin:true"?
const keepInternal = getParam(pParams, 'keepInternal')
meta.keepInTW = !!keepInternal && keepInternal !== 'false' //# ~
this.registerExternal(meta)
// visual feedback
const macroText = wikifier.source.substring(wikifier.matchStart, wikifier.nextMatch)
createTiddlyText(place, 'external ')
createTiddlyLink(place, meta.tiddlerName, true)
createTiddlyText(place, ' (')
createTiddlyElement(place, 'code', '', '', macroText.slice(2 + macroName.length + 1, -2))
createTiddlyText(place, ')')
},
// describes tiddlers registered as external, not necessarily loaded
tiddlersMeta: [],
registerExternal: function(meta) {
//# check if already registered, don't register twice
this.tiddlersMeta.push(meta)
},
getMetaFor: function(tiddlerOrTitle) {
var isTitle = typeof tiddlerOrTitle == "string"
for(meta of this.tiddlersMeta)
if(isTitle && meta.tiddlerName == tiddlerOrTitle ||
!isTitle && meta.tiddler == tiddlerOrTitle)
return meta
},
loadExternal: function(meta) {
// sync loading fails on startup because TF injects new mozillaLoadFile too late
// var tiddlerText = loadFile(getLocalPath(getFullPath(meta.fileName)));
// onExternalTiddlerLoad(tiddlerText !== null, meta, tiddlerText);
// so we use async instead:
const callback = this.onExternalTiddlerLoad
const path = getFullPath(meta.fileName, meta.tiddlerName, this.getExtension(meta))
// httpReq("GET", path, callback, meta) uses default dataType,
// which causes js to get evaluated on load. To avoid this, we customize the ajax call:
jQuery.ajax({
type: "GET",
url: path,
dataType: "text",
processData: false,
cache: false,
complete: function(xhr, textStatus) {
if((!xhr.status && location.protocol === "file:") || (xhr.status >= 200 && xhr.status < 300) || xhr.status === 304)
callback(true, meta, xhr.responseText, path, xhr)
else
callback(false, meta, null, path, xhr)
}
})
//# rename onExternalTiddlerLoad into internalizeAndRegister?
},
onExternalTiddlerLoad: function(success, meta, responseText) {
if(!success) return //# notify somehow? may fail because file is not created yet or ...
const tiddler = config.macros.external.internalizeTiddler(meta, responseText)
store.addTiddler(tiddler)
//# what if tiddler already exists?
if(meta.isPlugin) {
// make it look normally
tiddler.tags.pushUnique('systemConfig')
const author = store.getTiddlerText(tiddler.title + "::Author")
if(author) {
tiddler.creator = tiddler.creator || author
tiddler.modifier = tiddler.modifier || tiddler.creator
}
eval(tiddler.text)
// for plugins introducing macros, formatters etc (may be adjusted in the future)
story.refreshAllTiddlers()
refreshAll()
// apply CSS
store.notifyAll()
}
//meta.lastLoaded = responseText
},
saveExternal: function(meta, callback) {
const fullPath = getFullPath(meta.fileName, meta.tiddlerName, this.getExtension(meta))
// we don't try to save remote files (yet)
if(!isLocalAbsolutePath(fullPath)) {
//# if(callback) callback(.., '[saving remote is not supported]')
return
}
const localPath = getLocalPath(fullPath)
const contentToSave = this.externalizeTiddler(meta)
// save only if have something to save
//if(contentToSave != meta.lastLoaded) {
saveFile(localPath, contentToSave)
//# get result of saving, return it
//# or move externalizing into a separate helper?
// meta.lastLoaded = contentToSave
//# this assumes saving didn't fail, which may be wrong
//}
//# if(callback) callback(.., '[...]')
},
saveAll: function() {
let overallSuccess = true
for(let meta of this.tiddlersMeta) {
// a tiddler may got created after registration
if(!meta.tiddler) {
let tiddlerInStore = store.fetchTiddler(meta.tiddlerName)
if(tiddlerInStore) {
meta.tiddler = tiddlerInStore
} else
// tiddler doesn't exist and we do nothing
continue
//# based on config, we can show a warning instead
}
//# if(meta.tiddler.title != meta.tiddlerName)
// means tiddler got renamed → change meta.tiddlerName &
// update this.listName . If store contains another tiddler
// with that name, still keep the registered one?
overallSuccess = this.saveExternal(meta) && overallSuccess
//# if saving failed, do something! (.oO dirty, notifying)
}
return overallSuccess
}
}
//# see implementations in STP (share to the core?)
function isAbsolutePath(path) {
// covers http:, https:, file:, other schemas, windows paths (D:\...)
if(/^\w+\:/.exec(path)) return true
// unix absolute paths, starting with /
if(/^\//.exec(path)) return true
return false
}
function isLocalAbsolutePath(path) {
//# rename? we're going to check whether an absolute path is local, not path is absolute local
return /^\w\:/.exec(path) || /^\//.exec(path) || /^file\:/.exec(path)
}
function getFullPath(subPath, nameFallback, extension) {
const fileNamePosition = subPath.lastIndexOf('/') + 1
const fileName = subPath.substr(fileNamePosition)
if(fileName && fileName.indexOf('.') == -1)
subPath += '.' + extension
if(!fileName)
subPath += nameFallback + '.' + extension
if(isAbsolutePath(subPath)) return subPath
const url = window.location.toString()
const base = url.substr(0, url.lastIndexOf('/') + 1)
return base + subPath
}
//# ideally, don't save main store if it were not changed
if(!config.macros.external.orig_saveChanges) {
config.macros.external.orig_saveChanges = saveChanges
saveChanges = function(onlyIfDirty, tiddlers) {
config.macros.external.saveAll()
//# should we do smth about setDirty (if saving of a tiddler failed)?
return config.macros.external.orig_saveChanges.apply(this, arguments)
}
}
// hijack method of store (since not present in TiddlyWiki.prototype)
if(!config.macros.external.orig_deleteTiddler) {
config.macros.external.orig_deleteTiddler = store.deleteTiddler
store.deleteTiddler = function(title) {
var registeredMeta = config.macros.external.getMetaFor(title)
if(registeredMeta) registeredMeta.tiddler = null
return config.macros.external.orig_deleteTiddler.apply(this, arguments)
}
}
//}}}
|~ViewToolbar|closeTiddler closeOthers +editTiddler jump permalink > fields references deleteTiddler|
|~EditToolbar|+saveTiddler -cancelTiddler references deleteTiddler|
Yakov Litvin Public Licence Version 0.4
----
Copyright (c) 2014, Yakov Litvin
Redistribution and use in source and compressed source/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 compressed source/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.
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.