<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:#396e55;}
a:hover {background:cyan;}
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]];
	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 {position:absolute; right:10px; width:18em; font-size:.9em;}
#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]];}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryLight]]; 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]];}

.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 {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]];}

.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:1px solid transparent;}
.viewer table, table.twtable {border:2px solid transparent;}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:lightblue; border:1px solid [[ColorPalette::TertiaryDark]]; color:black;}
#.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid transparent;}
.viewer td, .twtable td {border:1px solid transparent;}
.viewer td, .viewer tr {border:1px solid red;}
.viewer td, .twtable tr {border:1px solid blue;}

.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]];}
.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);}
* html .tiddler {height:1%;}

body {font-size:1em; font-family:calibri,verdana,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:9em;}

#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;}

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;}

.tuduSlider .button{ display: block; color: #396e55; text-align: left;
font-weight: bold;                   / цвет пунктов меню
border-top: solid 0px #bbb;
border-left: solid 0px #bbb;
border-right: solid 0px #888;
border-bottom: solid 0px #888;
background: transparent; / фон пунктов меню
margin-left: -0.3em;
padding: 0 1px 1px 10px;

.tuduSlider .button:hover{
border-top: solid 1px #777;
border-left: solid 1px #777;
border-right: solid 1px #bbb;
border-bottom: solid 1px #bbb;
background: blue;
padding: 1px 0 0 11px;

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

.siteTitle {font-size:1.5em;color:#911f2b;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:12.5em; text-align:left; line-height:1.2em; padding:1em 0.5em 0.5em 0.5em; font-size:1.3em;}

#topMenu ul { margin:0; padding:0; list-style:none; width:100%; overflow:hidden; clear:both; }
#topMenu ul li { float:left; margin:0; padding:0; }
#topMenu ul li a { height:18px; vertical-align: middle; text-decoration:none; display:block; float:left; font-size:12px;  font-weight:bold; color:[[ColorPalette::Background]]; margin:0 20px 0 0; padding:5px 8px 5px 8px }
#topMenu ul li a:hover { background-color:[[ColorPalette::MainAccentLight]]; }
#topMenu a.button { float:right; margin:0.8em 0 0 1.5em; background:#396e55; color:#fff0a8; border-width:1;}
#topMenu a.button:hover { color:[[ColorPalette::MainAccent]]; background-color:red;}

#sidebar {position:absolute; right:0px; width:12.5em; 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:12.5em; overflow:hidden;}

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

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

.tiddlerPopupButton {padding:0.2em;}
.popupTiddler {position: absolute; z-index:300; padding: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 0;}
.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 0 0 0.5em;}
.tab {margin:0 0 0 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 0 14em;}

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

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

.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 {font-size:1.2em; }
.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 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:0 3px 0 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 0; font-size:.9em;}
.editorFooter .button {padding-top:0; padding-bottom:0;}

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

.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.1em 0.4em; margin:0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin-left:3em; padding:1em;}
.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;}
noscript {display:none;} /* Fixes a feature in Firefox where print preview displays the noscript content */
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span> 
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span> 
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
<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 id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
* [[TopMenu]]
* [[MainMenu]]
* [[DefaultTiddlers]]
<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 excludeLists'></span></div>
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]]

version.extensions.ArchivePlugin = {major: 2, minor: 4, revision: 0, date: new Date("Jun 6, 2008")};
config.macros.ArchivePlugin = {};
config.macros.ArchivePlugin.init = function () {
 this.archivePath = getWikiPath('notes');

// Hijacking the built-in functions
TW21Saver.prototype.externalizeTiddler = function(store,tiddler)
	try {
		var extendedAttributes = "";
		var usePre = config.options.chkUsePreForStorage;
			function(tiddler,fieldName,value) {
				// don't store stuff from the temp namespace
				if(typeof value != "string")
					value = "";
				if (!fieldName.match(/^temp\./))
					extendedAttributes += ' %0="%1"'.format([fieldName,value.escapeLineBreaks().htmlEncode()]);
		var created = tiddler.created.convertToYYYYMMDDHHMM();
		var modified = tiddler.modified.convertToYYYYMMDDHHMM();
		var vdate = version.date.convertToYYYYMMDDHHMM();
		var attributes = tiddler.modifier ? ' modifier="' + tiddler.modifier.htmlEncode() + '"' : "";
		attributes += (usePre && modified == created) ? "" : ' modified="' + modified +'"';
		attributes += (usePre && created == vdate) ? "" :' created="' + created + '"';
		var tags = tiddler.getTags();
		if(!usePre || tags)
			attributes += ' tags="' + tags.htmlEncode() + '"';
		return ('<div %0="%1"%2%3>%4</'+'div>').format([
				usePre ? "title" : "tiddler",
				usePre ? "\n<pre>" + tiddler.saveMe() + "</pre>\n" : tiddler.escapeLineBreaks().htmlEncode()
	} catch (ex) {
		throw exceptionText(ex,config.messages.tiddlerSaveError.format([tiddler.title]));

Tiddler.prototype.saveMe = function() {
 if (this.tags.indexOf('Нотаток') != -1) {
 // Save tiddler body to a file in the archive folder
   if (this.text) {
      saveFile(config.macros.ArchivePlugin.archivePath +  this.title.filenameEncode(), this.text)
 return '';
 return this.text.htmlEncode();

// This hijack ensures plugins can also be archived
var archivePlugin_getPluginInfo = getPluginInfo;
getPluginInfo = function(tiddler) {
 tiddler.text = store.getValue(tiddler, 'text');
 return archivePlugin_getPluginInfo(tiddler);

function readTextFile(file) {
var rawFile = new XMLHttpRequest();
rawFile.open("GET", file, false);
rawFile.onreadystatechange = function ()
    if(rawFile.readyState === 4)
        if(rawFile.status === 200 || rawFile.status == 0)
            var allText = rawFile.responseText;

TiddlyWiki.prototype.getValue = function(tiddler, fieldName) {
 var t = this.resolveTiddler(tiddler);
 if (!t)
 return undefined;

 fieldName = fieldName.toLowerCase();
 if (t.tags.indexOf('Нотаток')!=-1 && fieldName=='text' && t['text']=='') {
 try {
  if (!readOnly) {
    var tmp = loadFile(config.macros.ArchivePlugin.archivePath +  t.title.filenameEncode());
//    alert(config.macros.ArchivePlugin.archivePath +  t.title.filenameEncode());
  else {
    var tmp = readTextFile("http://schoolsuncity6.ho.ua/notes/"+t.title.filenameEncode());
//    alert("http://lubny-cprpp.ho.ua/notes/"+t.title.filenameEncode());
   tmp = (tmp.charCodeAt(0) == 239 ? manualConvertUTF8ToUnicode(tmp) : tmp);
 } catch (e) {
   return '';
 alert("{{{Error: Unable to load file '" + config.macros.ArchivePlugin.archivePath + this.created.convertToArchiveName() + t.title.filenameEncode() + '.html' + "'}}}");
return tmp;
 } else {
 var accessor = TiddlyWiki.standardFieldAccess[fieldName];
 if (accessor) {
 return accessor.get(t);
 return t.fields ? t.fields[fieldName] : undefined;

String.prototype.filenameEncode = function() {

function getWikiPath(folderName) {
 var originalPath = document.location.toString();
 if(originalPath.substr(0,5) != 'file:') {
//af alert(config.messages.notFileUrlError);
 var localPath = getLocalPath(originalPath);
 var backSlash = localPath.lastIndexOf('\\') == -1 ? '/' : '\\';
 var dirPathPos = localPath.lastIndexOf(backSlash);
 var subPath = localPath.substr(0,dirPathPos) + backSlash + (folderName ? folderName + backSlash : '');
 return subPath;
// Deleting archive files
TiddlyWiki.prototype.archivePlugin_removeTiddler = TiddlyWiki.prototype.removeTiddler;
TiddlyWiki.prototype.removeTiddler = function(title) {
 var tiddler = store.getTiddler(title);
 var filePath = config.macros.ArchivePlugin.archivePath + title.filenameEncode();
 if (tiddler.tags.indexOf('Нотаток') != -1) ieDeleteFile(filePath);
function ieDeleteFile(filePath) {
// IE Support only
 if (!config.browser.isIE) return false;
	try {
		var fso = new ActiveXObject("Scripting.FileSystemObject");
	} catch(ex) {return null;}
	try {
	 var file = fso.GetFile(filePath);
	} catch(ex) {return null;}
	return true;
|Description:|Closes the tiddler if you click new tiddler then cancel. Default behaviour is to leave it open|
|Author:|Simon Baird <simon.baird@gmail.com>|

  handler_mptw_orig_closeUnsaved: config.commands.cancelTiddler.handler,

  handler: function(event,src,title) {
    if (!story.isDirty(title) && !store.tiddlerExists(title) && !store.isShadowTiddler(title))
    return false;


Name: MptwMinoga
Background: #ff9
Foreground: #000
PrimaryPale: #911f2b
PrimaryLight: #911f2b
PrimaryMid: #000
PrimaryDark: #FF2e4c
SecondaryPale: #f8a
SecondaryLight: #c2beb8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #f8f8f8
TertiaryLight: #bbb
TertiaryMid: #999
TertiaryDark: #888
Error: #f88
[[Ласкаво просимо!]]

|Description:|Adds a New tiddler button in the tag drop down|
|Author:|Simon Baird <simon.baird@gmail.com>|

window.onClickTag_mptw_orig = window.onClickTag;
window.onClickTag = function(e) {
  var tag = this.getAttribute("tag");
  var title = this.getAttribute("tiddler");
  var popup = Popup.stack[Popup.stack.length-1].popup;
  wikify("<<newTiddler label:'New tiddler' tag:'"+tag+"'>>",createTiddlyElement(popup,"li"));
  return false;

|Description:|Allows conditional inclusion/exclusion in templates|
|Author:|Simon Baird <simon.baird@gmail.com>|
For use in ViewTemplate and EditTemplate. Example usage:
{{{<div macro="showWhenTagged Task">[[TaskToolbar]]</div>}}}
{{{<div macro="showWhen tiddler.modifier == 'BartSimpson'"><img src="bart.gif"/></div>}}}

Warning: the showWhen and hideWhen macros will blindly eval paramString.
This could be used to execute harmful javascript from a tiddler.

(TODO: Make some effort to sanitize paramString. Perhaps disallow the equals sign?)

window.hideWhenLastTest = false;

window.removeElementWhen = function(test,place) {
  window.hideWhenLastTest = test;
  if (test) {


  hideWhen: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
    removeElementWhen( eval(paramString), place );

  showWhen: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
    removeElementWhen( !eval(paramString), place );

  hideWhenTagged: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
    removeElementWhen( tiddler.tags.containsAll(params), place );

  showWhenTagged: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
    removeElementWhen( !tiddler.tags.containsAll(params), place );

  hideWhenTaggedAny: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
    removeElementWhen( tiddler.tags.containsAny(params), place );

  showWhenTaggedAny: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
    removeElementWhen( !tiddler.tags.containsAny(params), place );

  hideWhenTaggedAll: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
    removeElementWhen( tiddler.tags.containsAll(params), place );

  showWhenTaggedAll: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
    removeElementWhen( !tiddler.tags.containsAll(params), place );

  hideWhenExists: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
    removeElementWhen( store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0]), place );

  showWhenExists: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
    removeElementWhen( !(store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0])), place );

  hideWhenTitleIs: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
    removeElementWhen( tiddler.title == params[0], place );

  showWhenTitleIs: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
    removeElementWhen( tiddler.title != params[0], place );

  'else': { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
    removeElementWhen( !window.hideWhenLastTest, place );


config.options.chkHttpReadOnly = false;

|Author|Eric Shulman|
|Description|adds support for resizing images|
This plugin adds optional syntax to scale an image to a specified width and height and/or interactively resize the image with the mouse.
The extended image syntax is:
where ''(w,h)'' indicates the desired width and height (in CSS units, e.g., px, em, cm, in, or %). Use ''auto'' (or a blank value) for either dimension to scale that dimension proportionally (i.e., maintain the aspect ratio). You can also calculate a CSS value 'on-the-fly' by using a //javascript expression// enclosed between """{{""" and """}}""". Appending a plus sign (+) to a dimension enables interactive resizing in that dimension (by dragging the mouse inside the image). Use ~SHIFT-click to show the full-sized (un-scaled) image. Use ~CTRL-click to restore the starting size (either scaled or full-sized).
[<img(21% ,+)[images/meow.gif]]
[<img(13%+, )[images/meow.gif]]
[<img( 8%+, )[images/meow.gif]]
[<img( 5% , )[images/meow.gif]]
[<img( 3% , )[images/meow.gif]]
[<img( 2% , )[images/meow.gif]]
[img(  1%+,+)[images/meow.gif]]
[<img(21% ,+)[images/meow.gif]]
[<img(13%+, )[images/meow.gif]]
[<img( 8%+, )[images/meow.gif]]
[<img( 5% , )[images/meow.gif]]
[<img( 3% , )[images/meow.gif]]
[<img( 2% , )[images/meow.gif]]
[img(  1%+,+)[images/meow.gif]]
2011.09.03 [1.2.3] bypass addStretchHandlers() if no '+' suffix is used (i.e., not resizable)
2010.07.24 [1.2.2] moved tip/dragtip text to config.formatterHelpers.imageSize object to enable customization
2009.02.24 [1.2.1] cleanup width/height regexp, use '+' suffix for resizing
2009.02.22 [1.2.0] added stretchable images
2008.01.19 [1.1.0] added evaluated width/height values
2008.01.18 [1.0.1] regexp for "(width,height)" now passes all CSS values to browser for validation
2008.01.17 [1.0.0] initial release
version.extensions.ImageSizePlugin= {major: 1, minor: 2, revision: 3, date: new Date(2011,9,3)};
var f=config.formatters[config.formatters.findByField("name","image")];
f.handler=function(w) {
	this.lookaheadRegExp.lastIndex = w.matchStart;
	var lookaheadMatch = this.lookaheadRegExp.exec(w.source)
	if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
		var floatLeft=lookaheadMatch[1];
		var floatRight=lookaheadMatch[2];
		var width=lookaheadMatch[3];
		var height=lookaheadMatch[4];
		var tooltip=lookaheadMatch[5];
		var src=lookaheadMatch[6];
		var link=lookaheadMatch[7];

		// Simple bracketted link
		var e = w.output;
		if(link) { // LINKED IMAGE
			if (config.formatterHelpers.isExternalLink(link)) {
				if (config.macros.attach && config.macros.attach.isAttachment(link)) {
					// see [[AttachFilePluginFormatters]]
					e = createExternalLink(w.output,link);
					e.title = config.macros.attach.linkTooltip + link;
				} else
					e = createExternalLink(w.output,link);
			} else 
				e = createTiddlyLink(w.output,link,false,null,w.isStatic);

		var img = createTiddlyElement(e,"img");
		if(floatLeft) img.align="left"; else if(floatRight) img.align="right";
		if(width||height) {
			var x=width.trim(); var y=height.trim();
			var stretchW=(x.substr(x.length-1,1)=='+'); if (stretchW) x=x.substr(0,x.length-1);
			var stretchH=(y.substr(y.length-1,1)=='+'); if (stretchH) y=y.substr(0,y.length-1);
			if (x.substr(0,2)=="{{")
				{ try{x=eval(x.substr(2,x.length-4))} catch(e){displayMessage(e.description||e.toString())} }
			if (y.substr(0,2)=="{{")
				{ try{y=eval(y.substr(2,y.length-4))} catch(e){displayMessage(e.description||e.toString())} }
			img.style.width=x.trim(); img.style.height=y.trim();
			if (stretchW||stretchH) config.formatterHelpers.addStretchHandlers(img,stretchW,stretchH);
		if(tooltip) img.title = tooltip;

		if (config.macros.attach && config.macros.attach.isAttachment(src))
			src=config.macros.attach.getAttachment(src); // see [[AttachFilePluginFormatters]]
		else if (config.formatterHelpers.resolvePath) { // see [[ImagePathPlugin]]
			if (config.browser.isIE || config.browser.isSafari) {
					return false;
			} else
		w.nextMatch = this.lookaheadRegExp.lastIndex;

	tip: 'SHIFT-CLICK=show full size, CTRL-CLICK=restore initial size',
	dragtip: 'DRAG=stretch/shrink, '

config.formatterHelpers.addStretchHandlers=function(e,stretchW,stretchH) {
	e.statusMsg='width=%0, height=%1';
	e.onmousedown=function(ev) { var ev=ev||window.event;
		return false;
	e.onmousemove=function(ev) { var ev=ev||window.event;
		if (this.sizing) {
			var s=this.style;
			var currX=!config.browser.isIE?ev.pageX:(ev.clientX+findScrollX());
			var currY=!config.browser.isIE?ev.pageY:(ev.clientY+findScrollY());
			var newW=(currX-this.offsetLeft)/(this.startX-this.offsetLeft)*this.startW;
			var newH=(currY-this.offsetTop )/(this.startY-this.offsetTop )*this.startH;
			if (this.stretchW) s.width =Math.floor(Math.max(newW,this.minW))+'px';
			if (this.stretchH) s.height=Math.floor(Math.max(newH,this.minH))+'px';
			clearMessage(); displayMessage(this.statusMsg.format([s.width,s.height]));
		return false;
	e.onmouseup=function(ev) { var ev=ev||window.event;
		if (ev.shiftKey) { this.style.width=this.style.height=''; }
		if (ev.ctrlKey)  { this.style.width=this.originalW; this.style.height=this.originalH; }
		return false;
	e.onmouseout=function(ev) { var ev=ev||window.event;
		return false;
|Description:|A handy way to insert timestamps in your tiddler content|
|Author:|Simon Baird <simon.baird@gmail.com>|
If you enter {ts} in your tiddler content (without the spaces) it will be replaced with a timestamp when you save the tiddler. Full list of formats:
* {ts} or {t} -> timestamp
* {ds} or {d} -> datestamp
* !ts or !t at start of line -> !!timestamp
* !ds or !d at start of line -> !!datestamp
(I added the extra ! since that's how I like it. Remove it from translations below if required)
* Change the timeFormat and dateFormat below to suit your preference.
* See also http://mptw2.tiddlyspot.com/#AutoCorrectPlugin
* You could invent other translations and add them to the translations array below.

config.InstantTimestamp = {

  timeFormat: 'DD/0MM/YY 0hh:0mm',
  dateFormat: 'DD/0MM/YY',

  translations: [
    [/^!ts?$/img,  "'!!{{ts{'+now.formatString(config.InstantTimestamp.timeFormat)+'}}}'"],
    [/^!ds?$/img,  "'!!{{ds{'+now.formatString(config.InstantTimestamp.dateFormat)+'}}}'"],



  excludeTags: [

  excludeTiddlers: [


TiddlyWiki.prototype.saveTiddler_mptw_instanttimestamp = TiddlyWiki.prototype.saveTiddler;
TiddlyWiki.prototype.saveTiddler = function(title,newTitle,newBody,modifier,modified,tags,fields,clearChangeCount,created) {

  tags = tags ? tags : []; 
  tags = (typeof(tags) == "string") ? tags.readBracketedList() : tags;
  var conf = config.InstantTimestamp;

  if ( !tags.containsAny(conf.excludeTags) && !conf.excludeTiddlers.contains(newTitle) ) {

    var now = new Date();
    var trans = conf.translations;
    for (var i=0;i<trans.length;i++) {
      newBody = newBody.replace(trans[i][0], eval(trans[i][1]));

  return this.saveTiddler_mptw_instanttimestamp(title,newTitle,newBody,modifier,modified,tags,fields,clearChangeCount,created);

setStylesheet(".ts,.ds { font-style:italic; }","instantTimestampStyles");


|Description:|Intelligently limit the number of backup files you create|
|Author:|Simon Baird|
You end up with just backup one per year, per month, per weekday, per hour, minute, and second.  So total number won't exceed about 200 or so. Can be reduced by commenting out the seconds/minutes/hours line from modes array
Works in IE and Firefox only.  Algorithm by Daniel Baird. IE specific code by by Saq Imtiaz.

var MINS  = 60 * 1000;
var HOURS = 60 * MINS;
var DAYS  = 24 * HOURS;

if (!config.lessBackups) {
  config.lessBackups = {
    modes: [
      ["YYYY",  365*DAYS], 
      ["MMM",   31*DAYS],  
      ["ddd",   7*DAYS],   
      //["d0DD",  1*DAYS], 
      ["h0hh",  24*HOURS], 
      ["m0mm",  1*HOURS],  
      ["s0ss",  1*MINS],   

window.getSpecialBackupPath = function(backupPath) {

  var now = new Date();

  var modes = config.lessBackups.modes;

  for (var i=0;i<modes.length;i++) {

    var specialBackupPath = backupPath.replace(/(\.)([0-9]+\.[0-9]+)(\.html)$/,

    try {
      if (config.browser.isIE) {
        var fsobject = new ActiveXObject("Scripting.FileSystemObject")
        var fileExists  = fsobject.FileExists(specialBackupPath);
        if (fileExists) {
          var fileObject = fsobject.GetFile(specialBackupPath);
          var modDate = new Date(fileObject.DateLastModified).valueOf();
      else {
        var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
        var fileExists = file.exists();
        if (fileExists) {
          var modDate = file.lastModifiedTime;
    catch(e) {
      return backupPath;

    var expiry = new Date(modDate + modes[i][1]);
    if (!fileExists || now > expiry)
      return specialBackupPath;

window.getBackupPath_mptw_orig = window.getBackupPath;
window.getBackupPath = function(localPath) {
  return getSpecialBackupPath(getBackupPath_mptw_orig(localPath));

{{tuduSlider{<<slider chkProNas ProNas 'Про школу' >>}}}
{{tuduSlider{<<slider chkPedKol PedKol 'Педагогічний колектив' >>}}}
{{tuduSlider{<<slider chkUpravl Upravl 'Прозорість управління' >>}}}
{{tuduSlider{<<slider chkOsvit Osvit 'Освітній процес' >>}}}
{{tuduSlider{<<slider chkMetod Metod 'Методична робота' >>}}}
{{tuduSlider{<<slider chkInfo Info 'Інформаційна сторінка' >>}}}
| !!Зроблено у [[TiddlyWiki|http://www.tiddlywiki.com]] <<version>> |%/
*[[На допомогу вчителю]]
*[[Підвищення кваліфікації]]
*[[Основні методичні заходи]]
*[[Педагогічний Олімп]]
Name: MptwBlack
Background: #000
Foreground: #fff
PrimaryPale: #333
PrimaryLight: #555
PrimaryMid: #888
PrimaryDark: #aaa
SecondaryPale: #111
SecondaryLight: #222
SecondaryMid: #555
SecondaryDark: #888
TertiaryPale: #222
TertiaryLight: #666
TertiaryMid: #888
TertiaryDark: #aaa
Error: #300
Name: MptwBlue
Background: #fff
Foreground: #000
PrimaryPale: #cdf
PrimaryLight: #57c
PrimaryMid: #114
PrimaryDark: #012
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88


  mptwCollapse: {
    handler: function(place,macroName,params) {
      createTiddlyButton(place, params[0] == '+' ? '\u25AD' : '\u25AC', 'collapse/uncollapse', function(){

/* this doesn't work unless you have a modified ViewTempate */
config.shadowTiddlers["MptwCollapsePluginStyles"] = ""
  +".collapsed .uncollapsedView { display:none;       }"
  +".collapsedView              { display:none;       }"
  +".collapsed .collapsedView   { display:block;      }"
  +".tiddler.collapsed          { padding-bottom:1em; }"
  +".tiddler.collapsed .title   { font-size:100%;     }"



|Description:|Miscellaneous tweaks used by MPTW|
|Author:|Simon Baird <simon.baird@gmail.com>|
!!Note: instead of editing this you should put overrides in MptwUserConfigPlugin
var originalReadOnly = readOnly;
var originalShowBackstage = showBackstage;

config.options.chkHttpReadOnly = true;  
//readOnly = false;
//showBackstage = true;                   

readOnly = (window.location.protocol == "file:") ? false :  true; 
showBackstage = (window.location.protocol == "file:") ? true :  false; 

config.options.chkInsertTabs = false;   
config.views.wikified.defaultText = "";
config.views.editor.defaultText = "";

config.options.chkSaveBackups = true;     
config.options.txtBackupFolder = 'backup';

config.options.chkAutoSave = (window.location.protocol == "file:"); 

config.mptwVersion = "2.7.3";


if (config.options.txtTheme == '')
  config.options.txtTheme = 'MptwTheme';

config.shadowTiddlers.GettingStarted += "\n\nSee also [[MPTW]].";

config.shadowTiddlers.OptionsPanel = config.shadowTiddlers.OptionsPanel.replace(/(\n\-\-\-\-\nAlso see \[\[AdvancedOptions\]\])/, "{{select{<<selectTheme>>\n<<selectPalette>>}}}$1");

config.mptwDateFormat = 'DD.MM.YY';
config.mptwJournalFormat = 'Journal DD.MM.YY';

Name: MptwGreen
Background: #fff
Foreground: #000
PrimaryPale: #9b9
PrimaryLight: #385
PrimaryMid: #031
PrimaryDark: #020
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
Name: MptwMinoga
Background: #ff9
Foreground: #000
PrimaryPale: #f2e0ba
PrimaryLight: #618FA9
PrimaryMid: #000
PrimaryDark: #FF2e4c
SecondaryPale: #f8a
SecondaryLight: #c2beb8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #f8f8f8
TertiaryLight: #bbb
TertiaryMid: #999
TertiaryDark: #888
Error: #f88
Name: MptwRed
Background: #fff
Foreground: #000
PrimaryPale: #eaa
PrimaryLight: #c55
PrimaryMid: #711
PrimaryDark: #500
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
|Description|Mptw Theme with some rounded corners (Firefox only)|


.viewer tr.oddRow { background-color: #ffe; }
.viewer tr.evenRow { background-color: #afa; }
{ -moz-border-radius: 1em; }

.tab {
	-moz-border-radius-topleft: 0.5em;
	-moz-border-radius-topright: 0.5em;
#topMenu {
	-moz-border-radius-bottomleft: 2em;
	-moz-border-radius-bottomright: 2em;

Name: MptwSmoke
Background: #fff
Foreground: #000
PrimaryPale: #aaa
PrimaryLight: #777
PrimaryMid: #111
PrimaryDark: #000
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
|Description|Mptw Theme with the default TiddlyWiki PageLayout and Styles|
Name: MptwTeal
Background: #fff
Foreground: #000
PrimaryPale: #B5D1DF
PrimaryLight: #618FA9
PrimaryMid: #1a3844
PrimaryDark: #000
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #f8f8f8
TertiaryLight: #bbb
TertiaryMid: #999
TertiaryDark: #888
Error: #f88
|Description|Mptw Theme including custom PageLayout|

http://mptw.tiddlyspot.com/#MptwTheme ($Rev: 1829 $)

<div class='header' style='background: url(pict/TitleBG.jpg) top left repeat'>
	<div class='headerShadow'>
		<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
		<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
<!-- div id='topMenu' refresh='content' -->
<!-- tiddler='MainMenu'></div> -->
<div id="topMenu" refresh="content" tiddler="TopMenu">;</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 id='displayArea'>
	<div id='messageArea'></div>
	<div id='tiddlerDisplay'></div>

<div class="uncollapsedView">

<div class='titleContainer'>
	<span class='title' macro='view title'></span>
	<span macro="miniTag"></span>

<div class='subtitle'>
	(updated <span macro='view modified date {{config.mptwDateFormat?config.mptwDateFormat:"MM/0DD/YY"}}'></span>
	by <span macro='view modifier link'></span>)
	(<span macro='message views.wikified.createdPrompt'></span>
	<span macro='view created date {{config.mptwDateFormat?config.mptwDateFormat:"MM/0DD/YY"}}'></span>)

<div macro="showWhen tiddler.tags.containsAny(['css','html','pre','systemConfig']) && !tiddler.text.match('{{'+'{')">
	<div class='viewer'><pre macro='view text'></pre></div>
<div macro="else">
	<div class='viewer' macro='view text wikified'></div>

<div class="tagglyTagging" macro="tagglyTagging"></div>
<div class="collapsedView">
	<span class='toolbar'>
		<span macro='toolbar closeTiddler'></span>
		<span macro='mptwCollapse +'></span>
	<span class='title' macro='view title'></span>


<div class='toolbar'>
	<span macro="showWhenTagged systemConfig">
	<span macro="showWhenTagged systemTheme"><span macro="applyTheme"></span></span>
	<span macro="showWhenTagged systemPalette"><span macro="applyPalette"></span></span>
	<span macro="showWhen tiddler.tags.contains('css') || tiddler.title == 'StyleSheet'"><span macro="refreshAll"></span></span>
	<span style="padding:1em;"></span>
	<span macro='toolbar closeTiddler +editTiddler deleteTiddler </span> <span macro='newHere label:"new here"'></span>
	<span macro='newJournalHere {{config.mptwJournalFormat?config.mptwJournalFormat:"MM/0DD/YY"}}'></span>
	<!--span macro='mptwCollapse -'></span-->

<div class="toolbar" macro="toolbar +saveTiddler saveCloseTiddler closeOthers -cancelTiddler cancelCloseTiddler deleteTiddler"></div>
<div class="title" macro="view title"></div>
<div class="editLabel">Title</div><div class="editor" macro="edit title"></div>
<div macro='annotations'></div>
<div class="editLabel">Content</div><div class="editor" macro="edit text"></div>
<div class="editLabel">Tags</div><div class="editor" macro="edit tags"></div>
<div class="editorFooter"><span macro="message views.editor.tagPrompt"></span><span macro="tagChooser"></span></div>


/* a contrasting background so I can see where one tiddler ends and the other begins */
body {background-image: url(pict/BodyBG.jpg);
background-repeat: repeat; background-position: left; backgound-color: transparent; font-family: calibri, tahoma,arial,helvetica;}

/* sexy colours and font for the header */
.headerForeground {
	color: [[ColorPalette::PrimaryPale]];
.headerShadow, .headerShadow a {
	color: [[ColorPalette::PrimaryMid]];

/* separate the top menu parts */
.headerForeground, .headerShadow {
	padding: 1em 1em 0;

.headerForeground, .headerShadow {
	font-family: 'Trebuchet MS', sans-serif;
.headerForeground .siteSubtitle {
	color: [[ColorPalette::PrimaryLight]];
.headerShadow .siteSubtitle {
	color: [[ColorPalette::PrimaryMid]];

/* make shadow go and down right instead of up and left */
.headerShadow {
	left: 1px;
	top: 1px;

/* prefer monospace for editing */
.editor textarea, .editor input {
	font-family: 'Consolas', monospace;

/* sexy tiddler titles */
.title {
	font-size: 250%;
	color: #cc0033;
	font-family: 'Times New Roman', sans-serif;

/* more subtle tiddler subtitle */
.subtitle {
	font-size: 90%;
	color: [[ColorPalette::TertiaryMid]];
.subtitle .tiddlyLink {
	color: [[ColorPalette::TertiaryMid]];

/* a little bit of extra whitespace */
.viewer {

/* don't want any background color for headings */
h1,h2,h3,h4,h5,h6 {
	background-color: transparent;
	color: [[ColorPalette::Foreground]];

/* give tiddlers 3d style border and explicit background */
.tiddler {
	background: url(pict/TiddlerBG.jpg) top left repeat;
	border-right: 2px [[ColorPalette::TertiaryMid]] solid;
	border-bottom: 2px [[ColorPalette::TertiaryMid]] solid;
	margin-bottom: 1em;
	padding:1em 2em 2em 1.5em;

/* make options slider look nicer */
#sidebarOptions .sliderPanel {
	border:solid 1px [[ColorPalette::PrimaryLight]];

/* the borders look wrong with the body background */
#sidebar .button {
	border-style: none;

/* this means you can put line breaks in SidebarOptions for readability */
#sidebarOptions br {

/* undo the above in OptionsPanel */
#sidebarOptions .sliderPanel br {

/* horizontal main menu stuff */
#displayArea {
	margin: 1em 18em 0em 17.5em; /* use the freed up space */
#topMenu br {
	display: none;
#topMenu {
	background: [[ColorPalette::PrimaryLight]];
#topMenu {
#topMenu .button, #topMenu .tiddlyLink, #topMenu a {
	margin-left: 0.5em;
	margin-right: 0.5em;
	padding-left: 3px;
	padding-right: 3px;
	background: blue;
	color: yellow;
	font-size: 150%;
#topMenu .button:hover, #topMenu .tiddlyLink:hover {
	background: white;
	color: blue;

/* make 2.2 act like 2.1 with the invisible buttons */
.toolbar {
.selected .toolbar {

/* experimental. this is a little borked in IE7 with the button 
 * borders but worth it I think for the extra screen realestate */
.toolbar { float:right; }

/* fix for TaggerPlugin. from sb56637. improved by FND */
.popup li .tagger a {

/* makes theme selector look a little better */
#sidebarOptions .sliderPanel .select .button {
#sidebarOptions .sliderPanel .select br {

/* make it print a little cleaner */
@media print {
	#topMenu {
		display: none ! important;
	/* not sure if we need all the importants */
	.tiddler {
		border-style: none ! important;
		margin:0px ! important;
		padding:0px ! important;
		padding-bottom:2em ! important;
	.tagglyTagging .button, .tagglyTagging .hidebutton {
		display: none ! important;
	.headerShadow {
		visibility: hidden ! important;
	.tagglyTagged .quickopentag, .tagged .quickopentag {
		border-style: none ! important;
	.quickopentag a.button, .miniTag {
		display: none ! important;

/* get user styles specified in StyleSheet */

|Description|Mptw Theme with a reduced header to increase useful space|


<!-- horizontal MainMenu -->
<div id='topMenu' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<span refresh='content' tiddler='SiteTitle' style="padding-left:1em;font-weight:bold;"></span>:
<span refresh='content' tiddler='MainMenu'></span>
<div id='sidebar'>
	<div id='sidebarOptions'>
		<div refresh='content' tiddler='SideBarOptions'></div>
		<div style="margin-left:0.1em;"
			macro='slider chkTabSliderPanel SideBarTabs {{"tabs \u00bb"}} "Show Timeline, All, Tags, etc"'></div>
<div id='displayArea'>
	<div id='messageArea'></div>
	<div id='tiddlerDisplay'></div>
|Description:|A place to put your config tweaks so they aren't overwritten when you upgrade MPTW|
See http://www.tiddlywiki.org/wiki/Configuration_Options for other options you can set. In some cases where there are clashes with other plugins it might help to rename this to zzMptwUserConfigPlugin so it gets executed last.

config.options.txtTheme = 'MptwRoundTheme';
config.options.txtUserName = 'Master'
config.options.chkSaveBackups = false;
config.options.chkAutoSave = false;
config.options.chkRegExpSearch = false;
config.options.chkCaseSensitiveSearch = false;
config.options.txtBackupFolder = 'backups';
config.options.chkAnimate = false;
|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/]]|
|Description|Quickly create new TiddlyWiki documents from your existing document, with just one click|

Use the {{{<<newDocument>>}}} macro to place a "new document" link into your sidebar/mainmenu/any tiddler (wherever you like).  Select this command to automatically create a "new.html" document containing a specific set of tagged tiddlers.  Optional parameters let you specify an alternate path/filename for the new file, or different tags to match.  You can also indicate "ask" for either parameter, which will  trigger a prompt for input when the command is selected.

{{{<<newDocument label:text prompt:text filename tag tag tag...>>}}}
{{{<<newDocument label:text prompt:text filename all>>}}}
{{{<<newDocument label:text prompt:text filename snap ID>>}}}
{{{<<newDocument label:text prompt:text filename snap here>>}}}
{{{<<newDocument label:text prompt:text nofile print ID>>}}}
{{{<<newDocument label:text prompt:text nofile print here>>}}}
* ''label:text'' defines //optional// alternative link text (replaces default "new document" display)
* ''prompt:text'' defines //optional// alternative tooltip text for 'mouseover' prompting (replaces default hard-coded tooltip text)
* ''filename'' is any local path-and-filename.  If no parameters are provided, the default is to create the file "new.html" in the current directory.  If a filename is provided without a path (i.e., there is no "/" in the input), then the current directory is also assumed.  Otherwise, this parameter is expected to contain the complete path and filename needed to write the file to your local hard disk.  If ''ask'' is used in place of the filename parameter then, when the command link is selected, a message box will be automatically displayed so you can select/enter the path and filename.
* ''tag tag tag...'' is a list of one or more space-separated tags (use quotes or {{{[[]]}}} around tags that contain spaces).  The new document will include all tiddlers that match at least one of the tags in the list.  The default is to include tiddlers tagged with <<tag includeNew>>.    The special value ''all'' may be used to match every tiddler (even those without tags).   If ''ask'' is used in place of the tags then, when the command link is selected, a message box will be automatically displayed so you can enter the desired tags at that time.
* When you use the keyword ''snap'' in place of the tags, you can generate a file containing the //rendered//  CSS-and-HTML that is currently being displayed in browser.  By default, the snapshop uses the 'contentWrapper' DOM element ID to automatically include all the TiddlyWiki elements, such as the sidebars and header, in addition to the center 'story' column containing the tiddler content.
* When you use the keyword ''print'' in place of the tags, a snapshot is generated, but the contents are not written to a file.  Instead, they are displayed in a separate browser tab/window, and the print dialog for that tab/window is automatically invoked.
* You can limit the snapshot to capture only a portion of the rendered TiddlyWiki elements by specifiying an optional alternate DOM element ID, such as "displayArea" (the entire center 'story' column) or even just a single tiddler (e.g., "tidderMyTiddlerTitle", assuming that "MyTiddlerTitle" is currently displayed).  Only the portions of the document that are contained //within// the specified DOM element will be transcribed to the resulting snapshot file.  If ''ask'' is used in place of a DOM element ID, you will be prompted to enter the ID (default is "contentWrapper") when the snapshot is being taken.  This allows you to easily enter the ID of any currently displayed tiddler to make quick snapshots of specific tiddlers.  If ''here'' is used in place of a DOM element ID, the current tiddler id is used.

Note: as of version 1.4.0 of this plugin, support for selecting tiddlers by using tag *expressions* has been replaced with simpler, more efficient "containsAny()" logic.  To create new ~TiddlyWiki documents that contain only those tiddlers selected with advanced AND/OR/NOT Boolean expressions, you can use the filtering features provided by the ExportTiddlersPlugin (see www.TiddlyTools.com/#ExportTiddlersPlugin).
equivalent to {{{<<newDocument new.htm includeNew systemTiddlers>>}}}
creates default "new.html" containing tiddlers tagged with either<<tag includeNew>>or<<tag systemTiddlers>>
try it: <<newDocument>>

{{{<<newDocument empty.html systemTiddlers>>}}}
creates "empty.html" containing only tiddlers tagged with<<tag systemTiddlers>>
//(reproduces old-style (pre 2.0.2) empty file)//
try it: <<newDocument empty.html systemTiddlers>>

{{{<<newDocument "label:create Import/Export starter" ask importexport>>}}}
save importexport tiddlers to a new file, prompts for path/file
try it: <<newDocument "label:create Import/Export starter" ask importexport>>

{{{<<newDocument ask ask>>}}}
prompts for path/file, prompts for tags to match
try it: <<newDocument ask ask>>

{{{<<newDocument ask all>>}}}
save all current TiddlyWiki contents to a new file, prompts for path/file
try it: <<newDocument ask all>>

{{{<<newDocument ask snap>>}}}
generates snapshot of currently displayed document, prompts for path/file
try it: <<newDocument ask snap>>

{{{<<newDocument ask snap here>>}}}
generates snapshot of this tiddler ONLY, prompts for path/file
try it: <<newDocument ask snap here>>

{{{<<newDocument ask print here>>}}}
prints a snapshot of this tiddler ONLY
try it: <<newDocument nofile print here>>

Import (or copy/paste) the following tiddlers into your document:
''NewDocumentPlugin'' (tagged with <<tag systemConfig>>)
!!!!!Revision History
''2007.12.04 [*.*.*]'' update for TW2.3.0: replaced deprecated core functions, regexps, and macros
''2007.03.30 [1.7.0]'' added support for "print" param as alternative for "snap".  When "print" is used, the filename is ignored and ouput is directed to another browser tab/window, where the print dialog is then automatically triggered.
''2007.03.30 [1.6.1]'' added support for "here" keyword for current tiddler elementID and "prompt:text" param for specifying tooltip text
''2007.02.12 [1.6.0]'' in onClickNewDocument(), reset HTML source 'markup'
''2006.10.23 [1.5.1]'' in onClickNewDocument(), get saved parameter value for snapID instead of using default "contentWrapper" (oops!)
''2006.10.18 [1.5.0]'' new optional param for 'snap'... specify alternative DOM element ID (default is still "contentWrapper").  Based on a suggestion from Xavier Verges.
''2006.08.03 [1.4.3]'' in promptForFilename(), for IE (WinXP only), added handling for UserAccounts.CommonDialog
''2006.07.29 [1.4.2]'' in onClickNewDocument(), okmsg display is now linked to newly created file
''2006.07.24 [1.4.1]'' in promptForFilename(), check for nsIFilePicker.returnCancel to allow nsIFilePicker.returnOK **OR** nsIFilePicker.returnReplace to be processed.
''2006.05.23 [1.4.0]'' due to very poor performance, support for tag *expressions* has been removed, in favor of a simpler "containsAny()" scan for tags.
''2006.04.09 [1.3.6]'' in onClickNewDocument, added call to convertUnicodeToUTF8() to better handle international characters.
''2006.03.15 [1.3.5]'' added nsIFilePicker() handler for selecting filename in moz-based browsers.  IE and other non-moz browsers still use simple prompt() dialog
''2006.03.15 [1.3.0]'' added "label:text" param for custom link text.  added special "all" filter parameter for "save as..." handling (writes all tiddlers to output file)
''2006.03.09 [1.2.0]'' added special "snap" filter parameter to generate and write "snapshot" files containing static HTML+CSS for currently rendered document.
''2006.02.24 [1.1.2]'' Fix incompatiblity with TW 2.0.5 by removing custom definition of getLocalPath() (which is now part of TW core)
''2006.02.03 [1.1.1]'' concatentate 'extra' params so that tag expressions don't have to be quoted.   moved all text to 'formatted' string definitions for easier translation.
''2006.02.03 [1.1.0]'' added support for tag EXPRESSIONS.  plus improved documentation and code cleanup
''2006.02.03 [1.0.0]'' Created.
This feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]
version.extensions.newDocument = {major: 1, minor: 7, revision: 0, date: new Date(2007,3,30)};

config.macros.newDocument = {
	newlabel: "new document",
	newprompt: "Create a new TiddlyWiki 'starter' document",
	newdefault: "new.html",
	allparam: "all",
	saveaslabel: "save as...",
	saveasprompt: "Save current TiddlyWiki to a different file",
	printparam: "print",
	snapparam: "snap",
	snaplabel: "create a snapshot",
	snapprompt: "Create a 'snapshot' of the current TiddlyWiki display",
	snapdefault: "snapshot.html",
	snapID: "contentWrapper",
	snapIDprompt: "Please enter a DOM element ID for the desired content",
	snapIDerrmsg: "Unrecognized document element ID: '%0'",
	askparam: "ask",
	hereparam: "here",
	labelparam: "label:",
	promptparam: "prompt:",
	fileprompt: "Please enter a filename",
	filter: "includeNew",
	filterprompt: "Match one or more tags:\n(space-separated, use [[...]] around tags containing spaces)",
	filtererrmsg: "Error in tag filter '%0'",
	snapmsg: "Document snapshot written to %1",
	okmsg: "%0 tiddlers written to %1",
	failmsg: "An error occurred while creating %0"

config.macros.newDocument.handler = function(place,macroName,params) {

	var path=getLocalPath(document.location.href);
	var slashpos=path.lastIndexOf("/"); if (slashpos==-1) slashpos=path.lastIndexOf("\\"); 
	if (slashpos!=-1) path = path.substr(0,slashpos+1); 

	if (params[0] && params[0].substr(0,config.macros.newDocument.labelparam.length)==config.macros.newDocument.labelparam)
		var label=params.shift().substr(config.macros.newDocument.labelparam.length)
	if (params[0] && params[0].substr(0,config.macros.newDocument.promptparam.length)==config.macros.newDocument.promptparam)
		var prompt=params.shift().substr(config.macros.newDocument.promptparam.length)
	var filename=params.shift(); if (!filename) filename=config.macros.newDocument.newdefault;
	if (params[0]==config.macros.newDocument.snapparam || params[0]==config.macros.newDocument.printparam) {
		var printmode=(params[0]==config.macros.newDocument.printparam);
		if (!label) var label=config.macros.newDocument.snaplabel;
		if (!prompt) var prompt=config.macros.newDocument.snapprompt;
		var defaultfile=config.macros.newDocument.snapdefault;
		var snapID=config.macros.newDocument.snapID;
		if (params[0]) var snapID=params.shift();
	if (params[0]==config.macros.newDocument.allparam) {
		if (!label) var label=config.macros.newDocument.saveaslabel;
		if (!prompt) var prompt=config.macros.newDocument.saveasprompt;
		var defaultfile=getLocalPath(document.location.href);
		var slashpos=defaultfile.lastIndexOf("/"); if (slashpos==-1) slashpos=defaultfile.lastIndexOf("\\");
		if (slashpos!=-1) defaultfile=defaultfile.substr(slashpos+1); 
	if (!prompt) var prompt=config.macros.newDocument.newprompt;
	if (!label) var label=config.macros.newDocument.newlabel;
	if (!defaultfile) var defaultfile=config.macros.newDocument.newdefault;

	var btn=createTiddlyButton(place,label,prompt,onClickNewDocument);

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

	var okmsg=config.macros.newDocument.okmsg;
	var failmsg=config.macros.newDocument.failmsg;
	var count=0;
	var out="";
	if (btn.snapID) { 
		var snapID=btn.snapID;
		if (btn.snapID==config.macros.newDocument.askparam)
		if (btn.snapID==config.macros.newDocument.hereparam)
			{ var here=story.findContainingTiddler(btn); if (here) snapID=here.id; }
		if (!document.getElementById(snapID)) { 
			if (snapID) 
			e.cancelBubble = true; if (e.stopPropagation) e.stopPropagation(); return(false);
		var styles=document.getElementsByTagName("style");
		for(var i=0; i < styles.length; i++)
			out +="/* stylesheet from tiddler:"+styles[i].getAttribute("id")+" */\n"+styles[i].innerHTML+"\n\n";
	} else { 
		var sourcefile=getLocalPath(document.location.href);
		var source=loadFile(sourcefile);
		if(source==null) { alert(config.messages.cantSaveError); return null; }
		var posOpeningDiv=source.indexOf(startSaveArea);
		var posClosingDiv=source.lastIndexOf(endSaveArea);
		if((posOpeningDiv==-1)||(posClosingDiv==-1)) { alert(config.messages.invalidFileError.format([sourcefile])); return; }
		var match=btn.filter;
		if (match[0]==config.macros.newDocument.askparam) { 
			var newfilt=prompt(config.macros.newDocument.filterprompt,config.macros.newDocument.filter);
			if (!newfilt) return;  
		var storeAreaDivs=[];
		var tiddlers=store.getTiddlers('title');
		for (var i=0; i<tiddlers.length; i++)
			if (match[0]==config.macros.newDocument.allparam || (tiddlers[i].tags && tiddlers[i].tags.containsAny(match)) )
	if (btn.printmode) {
		var win=window.open("","_blank","");
	} else {
		var filename=btn.file;
		if (filename==config.macros.newDocument.askparam)
		if (!filename) return; 
		var slashpos=filename.lastIndexOf("/"); if (slashpos==-1) slashpos=filename.lastIndexOf("\\");
		if (slashpos==-1) filename=btn.path+filename;
		var ok=saveFile(filename,out);
		var msg=ok?okmsg.format([count,filename]):failmsg.format([filename]);
		var link=ok?"file:///"+filename.replace(/\\/g,'/'):""; 
		clearMessage(); displayMessage(msg,link);
	e.cancelBubble = true; if (e.stopPropagation) e.stopPropagation(); return(false);

function promptForFilename(msg,path,file)
	if(window.Components) { 
		try {
			var nsIFilePicker = window.Components.interfaces.nsIFilePicker;
			var picker = Components.classes['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);
			picker.init(window, msg, nsIFilePicker.modeSave);
			var thispath = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
			if (picker.show()!=nsIFilePicker.returnCancel) var result=picker.file.persistentDescriptor;
		catch(e) { alert('error during local file access: '+e.toString()) }
	else { 
		try { 
			var s = new ActiveXObject('UserAccounts.CommonDialog');
			s.Filter='All files|*.*|Text files|*.txt|HTML files|*.htm;*.html|';
			if (s.showOpen()) var result=s.FileName;
		catch(e) { var result=prompt(msg,path+file); } 
	return result;
|Description:|Creates the new here and new journal macros|
|Author:|Simon Baird <simon.baird@gmail.com>|
merge(config.macros, {
  newHere: {
    handler: function(place,macroName,params,wikifier,paramString,tiddler) {
      wikify("<<newTiddler "+paramString+" tag:[["+tiddler.title+"]]>>",place,null,tiddler);
  newJournalHere: {
    handler: function(place,macroName,params,wikifier,paramString,tiddler) {
      wikify("<<newJournal "+paramString+" tag:[["+tiddler.title+"]]>>",place,null,tiddler);

|Description:|If 'New Tiddler' already exists then create 'New Tiddler (1)' and so on|
|Author:|Simon Baird <simon.baird@gmail.com>|
!!Note: I think this should be in the core

if (config.newMeansNewForJournalsToo == undefined) config.newMeansNewForJournalsToo = true;

String.prototype.getNextFreeName = function() {
  numberRegExp = / \(([0-9]+)\)$/;
  var match = numberRegExp.exec(this);
  if (match) {
  var num = parseInt(match[1]) + 1;
    return this.replace(numberRegExp," ("+num+")");
  else {
    return this + " (1)";

config.macros.newTiddler.checkForUnsaved = function(newName) {
  var r = false;
  story.forEachTiddler(function(title,element) {
    if (title == newName)
      r = true;
  return r;

config.macros.newTiddler.getName = function(newName) {
  while (store.getTiddler(newName) || config.macros.newTiddler.checkForUnsaved(newName))
    newName = newName.getNextFreeName();
  return newName;

config.macros.newTiddler.onClickNewTiddler = function()
  var title = this.getAttribute("newTitle");
  if(this.getAttribute("isJournal") == "true") {
    title = new Date().formatString(title.trim());

  if (config.newMeansNewForJournalsToo || this.getAttribute("isJournal") != "true")
    title = config.macros.newTiddler.getName(title);

  var params = this.getAttribute("params");
  var tags = params ? params.split("|") : [];
  var focus = this.getAttribute("newFocus");
  var template = this.getAttribute("newTemplate");
  var customFields = this.getAttribute("customFields");
  if(!customFields && !store.isShadowTiddler(title))
    customFields = String.encodeHashMap(config.defaultCustomFields);
  var tiddlerElem = story.getTiddler(title);
  var text = this.getAttribute("newText");
  if(typeof text == "string")
    story.getTiddlerField(title,"text").value = text.format([title]);
  for(var t=0;t<tags.length;t++)
  return false;

<<option txtUserName>>
<<option chkSaveBackups>> Резервная копия
<<option chkAutoSave>> Автосохранение
<<option chkAnimate>> Анимация
[[Начальные настройки|GettingStarted]]
[[Расширенные настройки|AdvancedOptions]]
*[[Інтелект та обдарованість]]
*[[Учнівське самоврядування]]
*[[Проєктно-дослідницька діяльність]]
*[[Національно-патріотичне виховання]]
*[[Профорієнтаційна сторінка]]
*[[Морально-етичне виховання]]
*[[Клуби та студії]]
*[[Соціально-психологічна підтримка]]
*[[Протидія булінгу]]
*[[Connecting classrooms]]
*[[E-Тwinning Plus Media Center Project]]
*[[Професійні педагогічні спільноти]]
|Description:|Provides a new date format ('pppp') that displays times such as '2 days ago'|
|Author:|Simon Baird <simon.baird@gmail.com>|
* If you want to you can rename this plugin. :) Some suggestions: LastUpdatedPlugin, RelativeDatesPlugin, SmartDatesPlugin, SexyDatesPlugin.
* Inspired by http://ejohn.org/files/pretty.js
Date.prototype.prettyDate = function() {
  var diff = (((new Date()).getTime() - this.getTime()) / 1000);
  var day_diff = Math.floor(diff / 86400);

  if (isNaN(day_diff))      return "";
  else if (diff < 0)        return "in the future";
  else if (diff < 60)       return "just now";
  else if (diff < 120)      return "1 minute ago";
  else if (diff < 3600)     return Math.floor(diff/60) + " minutes ago";
  else if (diff < 7200)     return "1 hour ago";
  else if (diff < 86400)    return Math.floor(diff/3600) + " hours ago";
  else if (day_diff == 1)   return "Yesterday";
  else if (day_diff < 7)    return day_diff + " days ago";
  else if (day_diff < 14)   return  "a week ago";
  else if (day_diff < 31)   return Math.ceil(day_diff/7) + " weeks ago";
  else if (day_diff < 62)   return "a month ago";
  else if (day_diff < 365)  return "about " + Math.ceil(day_diff/31) + " months ago";
  else if (day_diff < 730)  return "a year ago";
  else                      return Math.ceil(day_diff/365) + " years ago";

Date.prototype.formatString_orig_mptw = Date.prototype.formatString;

Date.prototype.formatString = function(template) {
  return this.formatString_orig_mptw(template).replace(/pppp/,this.prettyDate());

config.mptwDateFormat = 'pppp';

*[[Наша візитка]]
*[[Історія школи]]
*[[Інноваційна діяльність]]
|Description:|Changes tag links to make it easier to open tags as tiddlers|
|Author:|Simon Baird <simon.baird@gmail.com>|
config.quickOpenTag = {

  dropdownChar: (document.all ? "\u25bc" : "\u25be"), 

  createTagButton: function(place,tag,excludeTiddler) {
    var splitTag = tag.split("|");
    var pretty = tag;
    if (splitTag.length == 2) {
      tag = splitTag[1];
      pretty = splitTag[0];

    var sp = createTiddlyElement(place,"span",null,"quickopentag");

    var theTag = createTiddlyButton(sp,config.quickOpenTag.dropdownChar,
    if (excludeTiddler)

  miniTagHandler: function(place,macroName,params,wikifier,paramString,tiddler) {
    var tagged = store.getTaggedTiddlers(tiddler.title);
    if (tagged.length > 0) {
      var theTag = createTiddlyButton(place,config.quickOpenTag.dropdownChar,
      theTag.className = "miniTag";

  allTagsHandler: function(place,macroName,params) {
    var tags = store.getTags(params[0]);
    var filter = params[1]; 
    var ul = createTiddlyElement(place,"ul");
    if(tags.length == 0)
    for(var t=0; t<tags.length; t++) {
      var title = tags[t][0];
      if (!filter || (title.match(new RegExp('^'+filter)))) {
        var info = getTiddlyLinkInfo(title);
        var theListItem =createTiddlyElement(ul,"li");
        var theLink = createTiddlyLink(theListItem,tags[t][0],true);
        var theCount = " (" + tags[t][1] + ")";
        var theDropDownBtn = createTiddlyButton(theListItem," " +

  styles: [
"/* created by QuickOpenTagPlugin */",
".tagglyTagged .quickopentag, .tagged .quickopentag ",
" { margin-right:1.2em; border:1px solid #eee; padding:2px; padding-right:0px; padding-left:1px; }",
".quickopentag .tiddlyLink { padding:2px; padding-left:3px; }",
".quickopentag a.button { padding:1px; padding-left:2px; padding-right:2px;}",
"/* extra specificity to make it work right */",
"#displayArea .viewer .quickopentag a.button, ",
"#displayArea .viewer .quickopentag a.tiddyLink, ",
"#mainMenu .quickopentag a.tiddyLink, ",
"#mainMenu .quickopentag a.tiddyLink ",
" { border:0px solid black; }",
"#displayArea .viewer .quickopentag a.button, ",
"#mainMenu .quickopentag a.button ",
" { margin-left:0px; padding-left:2px; }",
"#displayArea .viewer .quickopentag a.tiddlyLink, ",
"#mainMenu .quickopentag a.tiddlyLink ",
" { margin-right:0px; padding-right:0px; padding-left:0px; margin-left:0px; }",
"a.miniTag {font-size:150%;} ",
"#mainMenu .quickopentag a.button ",
" /* looks better in right justified main menus */",
" { margin-left:0px; padding-left:2px; margin-right:0px; padding-right:0px; }",
"#topMenu .quickopentag { padding:0px; margin:0px; border:0px; }",
"#topMenu .quickopentag .tiddlyLink { padding-right:1px; margin-right:0px; }",
"#topMenu .quickopentag .button { padding-left:1px; margin-left:0px; border:0px; }",

  init: function() {
    window.createTagButton = this.createTagButton;
    config.macros.allTags.handler = this.allTagsHandler;
    config.macros.miniTag = { handler: this.miniTagHandler };
    config.shadowTiddlers["QuickOpenTagStyles"] = this.styles;


|Description:|Allows you to easily rename or delete tags across multiple tiddlers|
|Author:|Simon Baird <simon.baird@gmail.com>|
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) {
    for (var i=0;i<tiddlers.length;i++) {

  renameTag: function(oldTag,newTag,tiddlers) {
    for (var i=0;i<tiddlers.length;i++) {

  storeMethods: {

    saveTiddler_orig_renameTags: TiddlyWiki.prototype.saveTiddler,

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

          if (!this.tiddlerExists(title) && newBody == "")
            return null;
      return this.saveTiddler_orig_renameTags(title,newTitle,newBody,modifier,modified,tags,fields,clearChangeCount,created,creator);

    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":""])))
      return this.removeTiddler_orig_renameTags(title);


  init: function() {



|Description:|Provides two extra toolbar commands, saveCloseTiddler and cancelCloseTiddler|
|Author:|Simon Baird <simon.baird@gmail.com>|
To use these add them to the commands in ToolbarCommands under EditToolbar,
or in the MptwTheme tiddler under EditTemplate.

  saveCloseTiddler: {
    text: 'зберегти і закрити',
    tooltip: 'Save changes to this tiddler and close it',
    handler: function(ev,src,title) {
      var closeTitle = title;
      var newTitle = story.saveTiddler(title,ev.shiftKey);
      if (newTitle)
        closeTitle = newTitle;
      return config.commands.closeTiddler.handler(ev,src,closeTitle);

  cancelCloseTiddler: {
    text: 'скасувати і закрити',
    tooltip: 'Undo changes to this tiddler and close it',
    handler: function(ev,src,title) {
      return config.commands.closeTiddler.handler(ev,src,title);


|Description:|Lets you easily switch theme and palette|
|Author:|Simon Baird <simon.baird@gmail.com>|
* Borrows largely from ThemeSwitcherPlugin by Martin Budden http://www.martinswiki.com/#ThemeSwitcherPlugin
* Theme is cookie based. But set a default by setting config.options.txtTheme in MptwConfigPlugin (for example)
* Palette is not cookie based. It actually overwrites your ColorPalette tiddler when you select a palette, so beware.
* {{{<<selectTheme>>}}} makes a dropdown selector
* {{{<<selectPalette>>}}} makes a dropdown selector
* {{{<<applyTheme>>}}} applies the current tiddler as a theme
* {{{<<applyPalette>>}}} applies the current tiddler as a palette
* {{{<<applyTheme TiddlerName>>}}} applies TiddlerName as a theme
* {{{<<applyPalette TiddlerName>>}}} applies TiddlerName as a palette

config.macros.selectTheme = {
  label: {
    selectTheme:"select theme",
    selectPalette:"select palette"
  prompt: {
    selectTheme:"Select the current theme",
    selectPalette:"Select the current palette"
  tags: {

config.macros.selectTheme.handler = function(place,macroName)
  var btn = createTiddlyButton(place,this.label[macroName],this.prompt[macroName],this.onClick);

config.macros.selectTheme.onClick = function(ev)
  var e = ev ? ev : window.event;
  var popup = Popup.create(this);
  var mode = this.getAttribute('mode');
  var tiddlers = store.getTaggedTiddlers(config.macros.selectTheme.tags[mode]);
  if (mode == "selectPalette") {
    var btn = createTiddlyButton(createTiddlyElement(popup,'li'),"(default)","default color palette",config.macros.selectTheme.onClickTheme);
  for(var i=0; i<tiddlers.length; i++) {
    var t = tiddlers[i].title;
    var name = store.getTiddlerSlice(t,'Name');
    var desc = store.getTiddlerSlice(t,'Description');
    var btn = createTiddlyButton(createTiddlyElement(popup,'li'), name?name:t, desc?desc:config.macros.selectTheme.label['mode'], config.macros.selectTheme.onClickTheme);
  return stopEvent(e);

config.macros.selectTheme.onClickTheme = function(ev)
  var mode = this.getAttribute('mode');
  var theme = this.getAttribute('theme');
  if (mode == 'selectTheme')
  return false;

config.macros.selectTheme.updatePalette = function(title)
  if (title != "") {
    if (title != "(default)")

config.macros.applyTheme = {
  label: "apply",
  prompt: "apply this theme or palette" 

config.macros.applyTheme.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
  var useTiddler = params[0] ? params[0] : tiddler.title;
  var btn = createTiddlyButton(place,this.label,this.prompt,config.macros.selectTheme.onClickTheme);

config.macros.selectPalette = config.macros.selectTheme;
config.macros.applyPalette = config.macros.applyTheme;

config.macros.refreshAll = { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
  createTiddlyButton(place,"refresh","refresh layout and styles",function() { refreshAll(); });

| [img(100%,)[Гаряча лінія з питань протидії торгівлі людьми та консультування мігрантів|pict/527.jpg][https://www.527.org.ua/]] |
| @@font-size(1.6em):''ОГОЛОШЕННЯ''@@ |
@@color(green):''Територія обслуговування:''@@
:вул. Вишневецьких
:вул. Першотравнева
:вул. Монастирська
:вул. Ботанічна
:вул. Свободи
:вул. Щелканова
:вул. П.Лубенського
:вул. Грушевського
:вул. Кузні
| @@font-size(1.3em): [[Вакансії]]@@ |
| @@font-size(1.6em):''Корисні посилання''@@ |
| [[Літературний сайт Володимира Малика|http://malyk.ho.ua/]] |
| [[HUMAN - Дистанційне навчання|https://www.human.ua/]] |
| [[Лубенська міська рада|http://lubnyrada.gov.ua/]] |
| [[Міністерство освіти і науки України|http://www.mon.gov.ua/]] |
| [[Український центр оцінювання якості освіти|http://www.testportal.gov.ua/]] |
| [[Харківський регіональний центр оцінювання якості освіти|https://zno-kharkiv.org.ua/]] |
| [[Освітній портал|http://www.osvita.org.ua/]] |
| [[Професійно-технічна освіта в Україні|http://www.proftekhosvita.org.ua]] |
| [[Вищі навчальні заклади України|http://www.mon.gov.ua/main.php?query=nz]] |
| [[Освітній портал "ПедПРЕСА"|http://pedpresa.ua/]] |
| [img(100%,)[Державна служба якості освіти|pict/dsyao.jpg][http://www.sqe.gov.ua/]] |
| [img(100%,)[ГО Ла-Страда|pict/la-strada.jpg][http://la-strada.org.ua/]] |
| [img(100%,)[Я маю право|pict/pravo.jpg][http://pravo.minjust.gov.ua/]] |
| [img(100%,)[Безоплатна правова допомога|pict/legalaid.jpg][http://legalaid.gov.ua/]] |

|''Description''|displays search results as a simple list of matching tiddlers|
|''License''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
if(!version.extensions.SimpleSearchPlugin) { 
version.extensions.SimpleSearchPlugin = { installed: true };

if(!config.extensions) { config.extensions = {}; }

config.extensions.SimpleSearchPlugin = {
	heading: "Результати пошуку",
	containerId: "searchResults",
	btnCloseLabel: "закрити",
	btnCloseTooltip: "Відмовитись від перегляду результатів пошуку",
	btnCloseId: "search_close",
	btnOpenLabel: "Відкрити всі результати",
	btnOpenTooltip: "Відкрити всі результати пошуку",
	btnOpenId: "search_open",

	displayResults: function(matches, query) {
		var el = document.getElementById(this.containerId);
		query = '"""' + query + '"""'; 
		if(el) {
		} else { //# fallback: use displayArea as parent
			var container = document.getElementById("displayArea");
			el = document.createElement("div");
			el.id = this.containerId;
			el = container.insertBefore(el, container.firstChild);
		var msg = "!" + this.heading + "\n";
		if(matches.length > 0) {
			msg += "''" + config.macros.search.successMsg.format([matches.length.toString(), query]) + ":''\n";
			this.results = [];
			for(var i = 0 ; i < matches.length; i++) {
				msg += "* [[" + matches[i].title + "]]\n";
		} else {
			msg += "''" + config.macros.search.failureMsg.format([query]) + "''"; // XXX: do not use bold here!?
		createTiddlyButton(el, this.btnCloseLabel, this.btnCloseTooltip, config.extensions.SimpleSearchPlugin.closeResults, "button", this.btnCloseId);
		wikify(msg, el);
		if(matches.length > 0) { 
			createTiddlyButton(el, this.btnOpenLabel, this.btnOpenTooltip, config.extensions.SimpleSearchPlugin.openAll, "button", this.btnOpenId);

	closeResults: function() {
		var el = document.getElementById(config.extensions.SimpleSearchPlugin.containerId);
		config.extensions.SimpleSearchPlugin.results = null;
		highlightHack = null;

	openAll: function(ev) {
		story.displayTiddlers(null, config.extensions.SimpleSearchPlugin.results);
		return false;

config.shadowTiddlers.StyleSheetSimpleSearch = "/*{{{*/\n" +
	"#" + config.extensions.SimpleSearchPlugin.containerId + " {\n" +
	"\toverflow: auto;\n" +
	"\tpadding: 5px 1em 10px;\n" +
	"\tbackground-color: [[ColorPalette::TertiaryPale]];\n" +
	"}\n\n" +
	"#" + config.extensions.SimpleSearchPlugin.containerId + " h1 {\n" +
	"\tmargin-top: 0;\n" +
	"\tborder: none;\n" +
	"}\n\n" +
	"#" + config.extensions.SimpleSearchPlugin.containerId + " ul {\n" +
	"\tmargin: 0.5em;\n" +
	"\tpadding-left: 1.5em;\n" +
	"}\n\n" +
	"#" + config.extensions.SimpleSearchPlugin.containerId + " .button {\n" +
	"\tdisplay: block;\n" +
	"\tborder-color: [[ColorPalette::TertiaryDark]];\n" +
	"\tpadding: 5px;\n" +
	"\tbackground-color: [[ColorPalette::TertiaryLight]];\n" +
	"}\n\n" +
	"#" + config.extensions.SimpleSearchPlugin.containerId + " .button:hover {\n" +
	"\tborder-color: [[ColorPalette::SecondaryMid]];\n" +
	"\tbackground-color: [[ColorPalette::SecondaryLight]];\n" +
	"}\n\n" +
	"#" + config.extensions.SimpleSearchPlugin.btnCloseId + " {\n" +
	"\tfloat: right;\n" +
	"\tmargin: -5px -1em 5px 5px;\n" +
	"}\n\n" +
	"#" + config.extensions.SimpleSearchPlugin.btnOpenId + " {\n" +
	"\tfloat: left;\n" +
	"\tmargin-top: 5px;\n" +
	"}\n" +
store.addNotification("StyleSheetSimpleSearch", refreshStyles);

Story.prototype.search = function(text, useCaseSensitive, useRegExp) {
	highlightHack = new RegExp(useRegExp ? text : text.escapeRegExp(), useCaseSensitive ? "mg" : "img");
	var matches = store.search(highlightHack, null, "excludeSearch");
	var q = useRegExp ? "/" : "'";
	config.extensions.SimpleSearchPlugin.displayResults(matches, q + text + q);

TiddlyWiki.prototype.search = function(searchRegExp, sortField, excludeTag, match) {
	var candidates = this.reverseLookup("tags", excludeTag, !!match);
	var primary = [];
	var secondary = [];
	var tertiary = [];
	for(var t = 0; t < candidates.length; t++) {
		if(candidates[t].title.search(searchRegExp) != -1) {
		} else if(candidates[t].tags.join(" ").search(searchRegExp) != -1) {
		} else if(candidates[t].text.search(searchRegExp) != -1) {
	var results = primary.concat(secondary).concat(tertiary);
	if(sortField) {
		results.sort(function(a, b) {
			return a[sortField] < b[sortField] ? -1 : (a[sortField] == b[sortField] ? 0 : +1);
	return results;

|Author|Eric Shulman|
|Description|Show tiddlers one at a time with automatic permalink, or always open tiddlers at top/bottom of page.|
This plugin allows you to configure TiddlyWiki to navigate more like a traditional multipage web site with only one tiddler displayed at a time.
>see [[SinglePageModePluginInfo]]
<<option chkSinglePageMode>> Display one tiddler at a time
><<option chkSinglePagePermalink>> Automatically permalink current tiddler
><<option chkSinglePageKeepFoldedTiddlers>> Don't close tiddlers that are folded
><<option chkSinglePageKeepEditedTiddlers>> Don't close tiddlers that are being edited
<<option chkTopOfPageMode>> Open tiddlers at the top of the page
<<option chkBottomOfPageMode>> Open tiddlers at the bottom of the page
<<option chkSinglePageAutoScroll>> Automatically scroll tiddler into view (if needed)

* The "display one tiddler at a time" option can also be //temporarily// set/reset by including a 'paramifier' in the document URL: {{{#SPM:true}}} or {{{#SPM:false}}}.
* If more than one display mode is selected, 'one at a time' display takes precedence over both 'top' and 'bottom' settings, and if 'one at a time' setting is not used, 'top of page' takes precedence over 'bottom of page'.
* When using Apple's Safari browser, automatically setting the permalink causes an error and is disabled.
2010.11.30 2.9.7 use story.getTiddler()
2008.10.17 2.9.6 changed chkSinglePageAutoScroll default to false
| Please see [[SinglePageModePluginInfo]] for previous revision details |
2005.08.15 1.0.0 Initial Release.  Support for BACK/FORWARD buttons adapted from code developed by Clint Checketts.
version.extensions.SinglePageModePlugin= {major: 2, minor: 9, revision: 7, date: new Date(2010,11,30)};
config.paramifiers.SPM = { onstart: function(v) {
	if (config.options.chkSinglePagePermalink && !config.browser.isSafari) {
		config.lastURL = window.location.hash;
		if (!config.SPMTimer) config.SPMTimer=window.setInterval(function() {checkLastURL();},1000);
} };
if (config.options.chkSinglePageMode==undefined)
if (config.options.chkSinglePagePermalink==undefined)
if (config.options.chkSinglePageKeepFoldedTiddlers==undefined)
if (config.options.chkSinglePageKeepEditedTiddlers==undefined)
if (config.options.chkTopOfPageMode==undefined)
if (config.options.chkBottomOfPageMode==undefined)
if (config.options.chkSinglePageAutoScroll==undefined)
config.SPMTimer = 0;
config.lastURL = window.location.hash;
function checkLastURL()
	if (!config.options.chkSinglePageMode)
		{ window.clearInterval(config.SPMTimer); config.SPMTimer=0; return; }
	if (config.lastURL == window.location.hash) return; // no change in hash
	var tids=decodeURIComponent(window.location.hash.substr(1)).readBracketedList();
	if (tids.length==1) // permalink (single tiddler in URL)
	else { // restore permaview or default view
		config.lastURL = window.location.hash;
		if (!tids.length) tids=store.getTiddlerText("DefaultTiddlers").readBracketedList();

if (Story.prototype.SPM_coreDisplayTiddler==undefined)
Story.prototype.displayTiddler = function(srcElement,tiddler,template,animate,slowly)
	var title=(tiddler instanceof Tiddler)?tiddler.title:tiddler;
	var tiddlerElem=story.getTiddler(title); // ==null unless tiddler is already displayed
	var opt=config.options;
	var single=opt.chkSinglePageMode && !startingUp;
	var top=opt.chkTopOfPageMode && !startingUp;
	var bottom=opt.chkBottomOfPageMode && !startingUp;
	if (single) {
		story.forEachTiddler(function(tid,elem) {
			// skip current tiddler and, optionally, tiddlers that are folded.
			if (	tid==title
				|| (opt.chkSinglePageKeepFoldedTiddlers && elem.getAttribute("folded")=="true"))
			// if a tiddler is being edited, ask before closing
			if (elem.getAttribute("dirty")=="true") {
				if (opt.chkSinglePageKeepEditedTiddlers) return;
				// if tiddler to be displayed is already shown, then leave active tiddler editor as is
				// (occurs when switching between view and edit modes)
				if (tiddlerElem) return;
				// otherwise, ask for permission
				var msg="'"+tid+"' is currently being edited.\n\n";
				msg+="Press OK to save and close this tiddler\nor press Cancel to leave it opened";
				if (!confirm(msg)) return; else story.saveTiddler(tid);
	else if (top)
	else if (bottom)
	if (opt.chkSinglePagePermalink && !config.browser.isSafari) {
		window.location.hash = encodeURIComponent(String.encodeTiddlyLink(title));
		config.lastURL = window.location.hash;
		document.title = wikifyPlain("SiteTitle") + " - " + title;
		if (!config.SPMTimer) config.SPMTimer=window.setInterval(function() {checkLastURL();},1000);
	if (tiddlerElem && tiddlerElem.getAttribute("dirty")=="true") { // editing... move tiddler without re-rendering
		var isTopTiddler=(tiddlerElem.previousSibling==null);
		if (!isTopTiddler && (single || top))
		else if (bottom)
		else this.SPM_coreDisplayTiddler.apply(this,arguments); // let CORE render tiddler
	} else
		this.SPM_coreDisplayTiddler.apply(this,arguments); // let CORE render tiddler
	var tiddlerElem=story.getTiddler(title);
	if (tiddlerElem&&opt.chkSinglePageAutoScroll) {
		// scroll to top of page or top of tiddler
		var isTopTiddler=(tiddlerElem.previousSibling==null);
		var yPos=isTopTiddler?0:ensureVisible(tiddlerElem);
		// if animating, defer scroll until after animation completes
		var delay=opt.chkAnimate?config.animDuration+10:0;

if (Story.prototype.SPM_coreDisplayTiddlers==undefined)
Story.prototype.displayTiddlers = function() {
	// suspend single/top/bottom modes when showing multiple tiddlers
	var opt=config.options;
	var saveSPM=opt.chkSinglePageMode; opt.chkSinglePageMode=true;
	var saveTPM=opt.chkTopOfPageMode; opt.chkTopOfPageMode=true;
	var saveBPM=opt.chkBottomOfPageMode; opt.chkBottomOfPageMode=false;

[img(100%,)[pict/logo.jpg][Ласкаво просимо!]]
/* give tiddlers 3d style border and explicit background */
.tiddler {
	background: #fff1ab;
	border-right: 4px [[ColorPalette::TertiaryMid]] solid;
	border-bottom: 4px [[ColorPalette::TertiaryMid]] solid;
	margin-bottom: 1em;
	padding:1em 2em 2em 1.5em;

#topMenu .button, #topMenu .tiddlyLink, #topMenu a {
	margin-left: 0.5em;
	margin-right: 0.5em;
	padding-left: 10px;
	padding-right: 10px;
	background: transparent;
	color: #fff0a8;
	font-size: 150%;
#topMenu .button:hover, #topMenu .tiddlyLink:hover {
	background: blue;
	color: white;
|Description:|tagglyTagging macro is a replacement for the builtin tagging macro in your ViewTemplate|
|Author:|Simon Baird <simon.baird@gmail.com>|
See http://mptw.tiddlyspot.com/#TagglyTagging


  parseTagExpr: function(debug) {

    if (this.trim() == "")
      return "(true)";

    var anyLogicOp = /(!|&&|\|\||\(|\))/g;
    var singleLogicOp = /^(!|&&|\|\||\(|\))$/;

    var spaced = this.
      replace(/\[\(/g," [[").
      replace(/\)\]/g,"]] ").
      replace(anyLogicOp," $1 ");

    var expr = "";

    var tokens = spaced.readBracketedList(false); 

    for (var i=0;i<tokens.length;i++)
      if (tokens[i].match(singleLogicOp))
        expr += tokens[i];
        expr += "tiddler.tags.contains('%0')".format([tokens[i].replace(/'/,"\\'")]); 

    if (debug)

    return '('+expr+')';


  getTiddlersByTagExpr: function(tagExpr,sortField) {

    var result = [];

    var expr = tagExpr.parseTagExpr();

    store.forEachTiddler(function(title,tiddler) {
      if (eval(expr))

      sortField = "title";

    result.sort(function(a,b) {return a[sortField] < b[sortField] ? -1 : (a[sortField] == b[sortField] ? 0 : +1);});

    return result;

config.taggly = {

  lingo: {
    labels: {
      asc:        "\u2191", 
      desc:       "\u2193", 
      title:      "title",
      modified:   "modified",
      created:    "created",
      show:       "+",
      hide:       "-",
      normal:     "normal",
      group:      "group",
      commas:     "commas",
      sitemap:    "sitemap",
      numCols:    "cols\u00b1", 
      label:      "Tagged as '%0':",
      exprLabel:  "Matching tag expression '%0':",
      excerpts:   "excerpts",
      descr:      "descr",
      slices:     "slices",
      contents:   "contents",
      sliders:    "sliders",
      noexcerpts: "title only",
      noneFound:  "(none)"

    tooltips: {
      title:      "Click to sort by title",
      modified:   "Click to sort by modified date",
      created:    "Click to sort by created date",
      show:       "Click to show tagging list",
      hide:       "Click to hide tagging list",
      normal:     "Click to show a normal ungrouped list",
      group:      "Click to show list grouped by tag",
      sitemap:    "Click to show a sitemap style list",
      commas:     "Click to show a comma separated list",
      numCols:    "Click to change number of columns",
      excerpts:   "Click to show excerpts",
      descr:      "Click to show the description slice",
      slices:     "Click to show all slices",
      contents:   "Click to show entire tiddler contents",
      sliders:    "Click to show tiddler contents in sliders",
      noexcerpts: "Click to show entire title only"

    tooDeepMessage: "* //sitemap too deep...//"

  config: {
    showTaggingCounts: true,
    listOpts: {
      sortBy:     ["title","modified","created"],
      sortOrder:  ["asc","desc"],
      hideState:  ["show","hide"],
      listMode:   ["normal","group","sitemap","commas"],
      numCols:    ["1","2","3","4","5","6"],
      excerpts:   ["noexcerpts","excerpts","descr","slices","contents","sliders"]
    valuePrefix: "taggly.",
    excludeTags: ["excludeLists","excludeTagging"],
    excerptSize: 50,
    excerptMarker: "/%"+"%/",
    siteMapDepthLimit: 25

  getTagglyOpt: function(title,opt) {
    var val = store.getValue(title,this.config.valuePrefix+opt);
    return val ? val : this.config.listOpts[opt][0];

  setTagglyOpt: function(title,opt,value) {
    if (!store.tiddlerExists(title)) {
      store.saveTiddler(title,title,config.views.editor.defaultText.format([title]),config.options.txtUserName,new Date(),"");

      if (!store.getTaggedTiddlers(title).length) {

    return store.setValue(title, this.config.valuePrefix+opt, value == this.config.listOpts[opt][0] ? null : value);

  getNextValue: function(title,opt) {
    var current = this.getTagglyOpt(title,opt);
    var pos = this.config.listOpts[opt].indexOf(current);
    var limit = (opt == "numCols" ? store.getTaggedTiddlers(title).length : this.config.listOpts[opt].length);
    var newPos = (pos + 1) % limit;
    return this.config.listOpts[opt][newPos];

  toggleTagglyOpt: function(title,opt) {
    var newVal = this.getNextValue(title,opt);

  createListControl: function(place,title,type) {
    var lingo = config.taggly.lingo;
    var label;
    var tooltip;
    var onclick;

    if ((type == "title" || type == "modified" || type == "created")) {
      label = lingo.labels[type];
      tooltip = lingo.tooltips[type];

      if (this.getTagglyOpt(title,"sortBy") == type) {
        label += lingo.labels[this.getTagglyOpt(title,"sortOrder")];
        onclick = function() {
          return false;
      else {
        onclick = function() {
          return false;
    else {
      label = lingo.labels[type == "numCols" ? type : this.getNextValue(title,type)];
      tooltip = lingo.tooltips[type == "numCols" ? type : this.getNextValue(title,type)];
      onclick = function() {
        return false;

    if (!(this.getTagglyOpt(title,"listMode") == "commas" && type == "numCols"))
      createTiddlyButton(place,label,tooltip,onclick,type == "hideState" ? "hidebutton" : "button");

  makeColumns: function(orig,numCols) {
    var listSize = orig.length;
    var colSize = listSize/numCols;
    var remainder = listSize % numCols;

    var upperColsize = colSize;
    var lowerColsize = colSize;

    if (colSize != Math.floor(colSize)) {
      upperColsize = Math.floor(colSize) + 1;
      lowerColsize = Math.floor(colSize);

    var output = [];
    var c = 0;
    for (var j=0;j<numCols;j++) {
      var singleCol = [];
      var thisSize = j < remainder ? upperColsize : lowerColsize;
      for (var i=0;i<thisSize;i++)

    return output;

  drawTable: function(place,columns,theClass) {
    var newTable = createTiddlyElement(place,"table",null,theClass);
    var newTbody = createTiddlyElement(newTable,"tbody");
    var newTr = createTiddlyElement(newTbody,"tr");
    for (var j=0;j<columns.length;j++) {
      var colOutput = "";
      for (var i=0;i<columns[j].length;i++)
        colOutput += columns[j][i];
      var newTd = createTiddlyElement(newTr,"td",null,"tagglyTagging"); 
    return newTable;

  createTagglyList: function(place,title,isTagExpr) {
    switch(this.getTagglyOpt(title,"listMode")) {
      case "group":  return this.createTagglyListGrouped(place,title,isTagExpr); break;
      case "normal": return this.createTagglyListNormal(place,title,false,isTagExpr); break;
      case "commas": return this.createTagglyListNormal(place,title,true,isTagExpr); break;
      case "sitemap":return this.createTagglyListSiteMap(place,title,isTagExpr); break;

  getTaggingCount: function(title,isTagExpr) {
    if (this.config.showTaggingCounts) {
      var tagCount = config.taggly.getTiddlers(title,'title',isTagExpr).length;
      if (tagCount > 0)
        return " ("+tagCount+")";
    return "";

  getTiddlers: function(titleOrExpr,sortBy,isTagExpr) {
    return isTagExpr ? store.getTiddlersByTagExpr(titleOrExpr,sortBy) : store.getTaggedTiddlers(titleOrExpr,sortBy);

  getExcerpt: function(inTiddlerTitle,title,indent) {
    if (!indent)
      indent = 1;

    var displayMode = this.getTagglyOpt(inTiddlerTitle,"excerpts");
    var t = store.getTiddler(title);

    if (t && displayMode == "excerpts") {
      var text = t.text.replace(/\n/," ");
      var marker = text.indexOf(this.config.excerptMarker);
      if (marker != -1) {
        return " {{excerpt{<nowiki>" + text.substr(0,marker) + "</nowiki>}}}";
      else if (text.length < this.config.excerptSize) {
        return " {{excerpt{<nowiki>" + t.text + "</nowiki>}}}";
      else {
        return " {{excerpt{<nowiki>" + t.text.substr(0,this.config.excerptSize) + "..." + "</nowiki>}}}";
    else if (t && displayMode == "contents") {
      return "\n{{contents indent"+indent+"{\n" + t.text + "\n}}}";
    else if (t && displayMode == "sliders") {
      return "<slider slide>\n{{contents{\n" + t.text + "\n}}}\n</slider>";
    else if (t && displayMode == "descr") {
      var descr = store.getTiddlerSlice(title,'Description');
      return descr ? " {{excerpt{" + descr  + "}}}" : "";
    else if (t && displayMode == "slices") {
      var result = "";
      var slices = store.calcAllSlices(title);
      for (var s in slices)
        result += "|%0|<nowiki>%1</nowiki>|\n".format([s,slices[s]]);
      return result ? "\n{{excerpt excerptIndent{\n" + result  + "}}}" : "";
    return "";

  notHidden: function(t,inTiddler) {
    if (typeof t == "string")
      t = store.getTiddler(t);
    return (!t || !t.tags.containsAny(this.config.excludeTags) ||
        (inTiddler && this.config.excludeTags.contains(inTiddler)));

  createTagglyListNormal: function(place,title,useCommas,isTagExpr) {

    var list = config.taggly.getTiddlers(title,this.getTagglyOpt(title,"sortBy"),isTagExpr);

    if (this.getTagglyOpt(title,"sortOrder") == "desc")
      list = list.reverse();

    var output = [];
    var first = true;
    for (var i=0;i<list.length;i++) {
      if (this.notHidden(list[i],title)) {
        var countString = this.getTaggingCount(list[i].title);
        var excerpt = this.getExcerpt(title,list[i].title);
        if (useCommas)
          output.push((first ? "" : ", ") + "[[" + list[i].title + "]]" + countString + excerpt);
          output.push("*[[" + list[i].title + "]]" + countString + excerpt + "\n");

        first = false;

    return this.drawTable(place,
      this.makeColumns(output,useCommas ? 1 : parseInt(this.getTagglyOpt(title,"numCols"))),
      useCommas ? "commas" : "normal");

  createTagglyListGrouped: function(place,title,isTagExpr) {
    var sortBy = this.getTagglyOpt(title,"sortBy");
    var sortOrder = this.getTagglyOpt(title,"sortOrder");

    var list = config.taggly.getTiddlers(title,sortBy,isTagExpr);

    if (sortOrder == "desc")
      list = list.reverse();

    var leftOvers = []
    for (var i=0;i<list.length;i++)

    var allTagsHolder = {};
    for (var i=0;i<list.length;i++) {
      for (var j=0;j<list[i].tags.length;j++) {

        if (list[i].tags[j] != title) { 

          if (this.notHidden(list[i].tags[j],title)) {

            if (!allTagsHolder[list[i].tags[j]])
              allTagsHolder[list[i].tags[j]] = "";

            if (this.notHidden(list[i],title)) {
              allTagsHolder[list[i].tags[j]] += "**[["+list[i].title+"]]"
                    + this.getTaggingCount(list[i].title) + this.getExcerpt(title,list[i].title) + "\n";



    var allTags = [];
    for (var t in allTagsHolder)

    var sortHelper = function(a,b) {
      if (a == b) return 0;
      if (a < b) return -1;
      return 1;

    allTags.sort(function(a,b) {
      var tidA = store.getTiddler(a);
      var tidB = store.getTiddler(b);
      if (sortBy == "title") return sortHelper(a,b);
      else if (!tidA && !tidB) return 0;
      else if (!tidA) return -1;
      else if (!tidB) return +1;
      else return sortHelper(tidA[sortBy],tidB[sortBy]);

    var leftOverOutput = "";
    for (var i=0;i<leftOvers.length;i++)
      if (this.notHidden(leftOvers[i],title))
        leftOverOutput += "*[["+leftOvers[i]+"]]" + this.getTaggingCount(leftOvers[i]) + this.getExcerpt(title,leftOvers[i]) + "\n";

    var output = [];

    if (sortOrder == "desc")
    else if (leftOverOutput != "")

    for (var i=0;i<allTags.length;i++)
      if (allTagsHolder[allTags[i]] != "")
        output.push("*[["+allTags[i]+"]]" + this.getTaggingCount(allTags[i]) + this.getExcerpt(title,allTags[i]) + "\n" + allTagsHolder[allTags[i]]);

    if (sortOrder == "desc" && leftOverOutput != "")

    return this.drawTable(place,


  treeTraverse: function(title,depth,sortBy,sortOrder,isTagExpr) {

    var list = config.taggly.getTiddlers(title,sortBy,isTagExpr);

    if (sortOrder == "desc")

    var indent = "";
    for (var j=0;j<depth;j++)
      indent += "*"

    var childOutput = "";

    if (depth > this.config.siteMapDepthLimit)
      childOutput += indent + this.lingo.tooDeepMessage + "\n";
      for (var i=0;i<list.length;i++)
        if (list[i].title != title)
          if (this.notHidden(list[i].title,this.config.inTiddler))
            childOutput += this.treeTraverse(list[i].title,depth+1,sortBy,sortOrder,false);

    if (depth == 0)
      return childOutput;
      return indent + "[["+title+"]]" + this.getTaggingCount(title) + this.getExcerpt(this.config.inTiddler,title,depth) + "\n" + childOutput;

  createTagglyListSiteMap: function(place,title,isTagExpr) {
    this.config.inTiddler = title; 
    var output = this.treeTraverse(title,0,this.getTagglyOpt(title,"sortBy"),this.getTagglyOpt(title,"sortOrder"),isTagExpr);
    return this.drawTable(place,

  macros: {
    tagglyTagging: {
      handler: function (place,macroName,params,wikifier,paramString,tiddler) {
        var parsedParams = paramString.parseParams("tag",null,true);
        var refreshContainer = createTiddlyElement(place,"div");


        var tag = getParam(parsedParams,"tag");
        var expr = getParam(parsedParams,"expr");

        if (expr) {
        else {
          if (tag) {
          else {

      refresh: function(place) {
        var title = place.getAttribute("title");
        var isTagExpr = place.getAttribute("isTagExpr") == "true";
        var showEmpty = place.getAttribute("showEmpty") == "true";
        var countFound = config.taggly.getTiddlers(title,'title',isTagExpr).length
        if (countFound > 0 || showEmpty) {
          var lingo = config.taggly.lingo;
          if (config.taggly.getTagglyOpt(title,"hideState") == "show") {
                isTagExpr ? lingo.labels.exprLabel.format([title]) : lingo.labels.label.format([title]));
            if (countFound == 0 && showEmpty)

  styles: [
"/* created by TagglyTaggingPlugin */",
".tagglyTagging { padding-top:0.5em; }",
".tagglyTagging li.listTitle { display:none; }",
".tagglyTagging ul {",
" margin-top:0px; padding-top:0.5em; padding-left:2em;",
" margin-bottom:0px; padding-bottom:0px;",
".tagglyTagging { vertical-align: top; margin:0px; padding:0px; }",
".tagglyTagging table { margin:0px; padding:0px; }",
".tagglyTagging .button { visibility:hidden; margin-left:3px; margin-right:3px; }",
".tagglyTagging .button, .tagglyTagging .hidebutton {",
" color:[[ColorPalette::TertiaryLight]]; font-size:90%;",
" border:0px; padding-left:0.3em;padding-right:0.3em;",
".tagglyTagging .button:hover, .hidebutton:hover, ",
".tagglyTagging .button:active, .hidebutton:active  {",
" border:0px; background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]];",
".selected .tagglyTagging .button { visibility:visible; }",
".tagglyTagging .hidebutton { color:[[ColorPalette::Background]]; }",
".selected .tagglyTagging .hidebutton { color:[[ColorPalette::TertiaryLight]] }",
".tagglyLabel { color:[[ColorPalette::TertiaryMid]]; font-size:90%; }",
".tagglyTagging ul {padding-top:0px; padding-bottom:0.5em; margin-left:1em; }",
".tagglyTagging ul ul {list-style-type:disc; margin-left:-1em;}",
".tagglyTagging ul ul li {margin-left:0.5em; }",
".editLabel { font-size:90%; padding-top:0.5em; }",
".tagglyTagging .commas { padding-left:1.8em; }",
"/* not technically tagglytagging but will put them here anyway */",
".tagglyTagged li.listTitle { display:none; }",
".tagglyTagged li { display: inline; font-size:90%; }",
".tagglyTagged ul { margin:0px; padding:0px; }",
".excerpt { color:[[ColorPalette::TertiaryDark]]; }",
".excerptIndent { margin-left:4em; }",
"div.tagglyTagging table,",
"div.tagglyTagging table tr,",
" {border-style:none!important; }",
".tagglyTagging .contents { border-bottom:2px solid [[ColorPalette::TertiaryPale]]; padding:0 1em 1em 0.5em;",
"  margin-bottom:0.5em; }",
".tagglyTagging .indent1  { margin-left:3em;  }",
".tagglyTagging .indent2  { margin-left:4em;  }",
".tagglyTagging .indent3  { margin-left:5em;  }",
".tagglyTagging .indent4  { margin-left:6em;  }",
".tagglyTagging .indent5  { margin-left:7em;  }",
".tagglyTagging .indent6  { margin-left:8em;  }",
".tagglyTagging .indent7  { margin-left:9em;  }",
".tagglyTagging .indent8  { margin-left:10em; }",
".tagglyTagging .indent9  { margin-left:11em; }",
".tagglyTagging .indent10 { margin-left:12em; }",
".tagglyNoneFound { margin-left:2em; color:[[ColorPalette::TertiaryMid]]; font-size:90%; font-style:italic; }",

  init: function() {
    config.shadowTiddlers["TagglyTaggingStyles"] = this.styles;



By Saq Imtiaz

config.formatters.unshift( {
  name: "inlinesliders",
  match: "\\<slider",
  lookaheadRegExp: /(?:<slider)(\+?) (.*?)(?:>)\n((?:.|\n)*?)\n(?:<\/slider>)/mg,
  handler: function(w) {
    this.lookaheadRegExp.lastIndex = w.matchStart;
    var lookaheadMatch = this.lookaheadRegExp.exec(w.source)
    if(lookaheadMatch && lookaheadMatch.index == w.matchStart ) {
      var btn = createTiddlyButton(w.output,lookaheadMatch[2] + " "+"\u00BB",lookaheadMatch[2],this.onClickSlider,"button sliderButton");
      var panel = createTiddlyElement(w.output,"div",null,"sliderPanel");
      panel.style.display = (lookaheadMatch[1] == '+' ? "block" : "none");
      w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
   onClickSlider : function(e) {
    if(!e) var e = window.event;
    var n = this.nextSibling;
    n.style.display = (n.style.display=="none") ? "block" : "none";
    return false;

|''Description:''|TiddlyWiki russian interface plugin. Supports core up to 2.6.2|
|''Описание:''|Русификация TiddlyWiki. Поддерживает ядро до 2.6.2 включительно|
|''Version comment:''|Tested on v.2.6.0 and 2.6.1|
|''License:''|BSD open source license|
|''Idea:''|Глеб Тржемецкий (Gleb Trzhemetski), http://www.glebsite.ru|

	save: {text: "сохранить", tooltip: "Сохранить Ваши изменения в эту TiddlyWiki", action: saveChanges},
	sync: {text: "синхронизация", tooltip: "Синхронизировать изменения с другим файлом или сервером TiddlyWiki", content: '<<sync>>'},
	importTask: {text: "импорт", tooltip: "Импортировать заметки и модули из другого файла или сервера TiddlyWiki", content: '<<importTiddlers>>'},
	tweak: {text: "настройка", tooltip: "Подстроить появление и поведение TiddlyWiki", content: '<<options>>'},
	upgrade: {text: "обновление", tooltip: "Обновить код ядра TiddlyWiki", content: '<<upgrade>>'},
	plugins: {text: "модули", tooltip: "Управление встроенными модулями", content: '<<plugins>>'} });

	txtUserName: "Имя пользователя для подписывания Ваших правок",
	chkRegExpSearch: "Разрешить регулярные выражения при поиске",
	chkCaseSensitiveSearch: "Регистро-зависимый поиск",
	chkIncrementalSearch: "Последовательный поиск слово-за-словом",
	chkAnimate: "Разрешить анимацию",
	chkSaveBackups: "Сохранить старую копию при сохранении изменений",
	chkAutoSave: "Автоматическое сохранение изменений",
	chkGenerateAnRssFeed: "Генерировать RSS-ленту при сохранении изменений",
	chkSaveEmptyTemplate: "Генерировать пустой шаблон при сохранении изменений",
	chkOpenInNewWindow: "Открывать внешние ссылки в новом окне",
	chkToggleLinks: "Нажатие на ссылках для открытия заметок также и закрывает их",
	chkHttpReadOnly: "Скрывать возможности редактирования при обращении через протокол HTTP",
	chkForceMinorUpdate: "Не обновлять автора изменений и дату редактирования заметок",
	chkConfirmDelete: "Спрашивать подтверждение при удалении заметок",
	chkInsertTabs: "Использовать клавишу табуляции для вставления символа табуляции вместо перехода по полям",
	txtBackupFolder: "Имя папки для резервных копий",
	txtMaxEditRows: "Максимальное количество строк в окне редактирования",
	txtTheme: "Имя темы для использования",
	txtFileSystemCharSet: "Кодировка символов в файле TiddlyWiki для сохранения изменений (только для Firefox/Mozilla)" });

	customConfigError: "Не удалось загрузить модуль. Подробнее смотрите в PluginManager",
	pluginError: "Ошибка: %0",
	pluginDisabled: "Не выполнено в связи с запретом, установленным меткой 'systemConfigDisable'",
	pluginForced: "Executed because forced via 'systemConfigForce' tag",
	pluginVersionError: "Не выполнено, так как этот модуль сделан для более новой версии TiddlyWiki",
	nothingSelected: "Ничего не выбрано. Вы должны сначала выбрать один или несколько элементов",
	savedSnapshotError: "Похоже, что эта TiddlyWiki была сохранена с ошибкой. Обратитесь к http://www.tiddlywiki.com/#Download за более детальной информацией",
	subtitleUnknown: "(неизвестно)",
	undefinedTiddlerToolTip: "Заметка '%0' пока не создана",
	shadowedTiddlerToolTip: "Заметка '%0' пока не создана, но она имеет предопределённое служебное значение",
	tiddlerLinkTooltip: "%0 - %1, %2",
	externalLinkTooltip: "Зовнішнє посилання на %0",
	noTags: "Нет помеченных заметок",
	notFileUrlError: "Вам нужно сначала сохранить эту TiddlyWiki в файл, прежде чем Вы сможете сохранять изменения",
	cantSaveError: "Сохранить изменения невозможно. Возможные причины включают:\n- Ваша программа просмотра не поддерживает сохранение (Firefox, Internet Explorer, Safari и Opera все работают, но только тогда, когда правильно настроены)\n- путь к файлу TiddlyWiki содержит запрещённые символы\n- файл TiddlyWiki был перемещён, удалён или переименован",
	invalidFileError: "Исходный файл '%0' не похож на правильную TiddlyWiki",
	backupSaved: "Архивная копия сохранена",
	backupFailed: "Не удалось сохранить архивную копию",
	rssSaved: "RSS-лента сохранена",
	rssFailed: "Не удалось сохранить файл с RSS-лентой",
	emptySaved: "Пустой шаблон сохранён",
	emptyFailed: "Не удалось сохранить файл с пустым шаблоном",
	mainSaved: "Главный файл TiddlyWiki сохранён",
	mainFailed: "Не удалось сохранить главный файл TiddlyWiki. Ваши изменения не сохранены",
	macroError: "Ошибка в макросе <<\%0>>",
	macroErrorDetails: "Ошибка при выполнении макроса <<\%0>>:\n%1",
	missingMacro: "Нет такого макроса",
	overwriteWarning: "Заметка с именем '%0' уже существует. Нажмите OK для перезаписи её содержимого",
	unsavedChangesWarning: "ВНИМАНИЕ! В TiddlyWiki есть несохранённые изменения\n\nНажмите OK для сохранения\nНажмите CANCEL, если изменения не нужны",
	confirmExit: "--------------------------------\n\nВ TiddlyWiki есть несохранённые изменения. Если Вы продолжите, Вы потеряете эти изменения\n\n--------------------------------",
	saveInstructions: "SaveChanges",
	unsupportedTWFormat: "Неподдерживаемый формат TiddlyWiki '%0'",
	tiddlerSaveError: "Ошибка при сохранении заметки '%0'",
	tiddlerLoadError: "Ошибка при загрузке заметки '%0'",
	wrongSaveFormat: "Не могу сохранить с форматом хранения '%0'. Используйте стандартный формат для сохранения.",
	invalidFieldName: "Неверное имя поля %0",
	fieldCannotBeChanged: "Поле '%0' не может быть изменено",
	loadingMissingTiddler: "Пытаюсь восстановить заметку '%0' с сервера '%1' по адресу:\n\n'%2' в 'рабочем пространстве' '%3'",
	upgradeDone: "Обновление до версии %0 завершено\n\nНажмите 'OK' для перезагрузки новой обновлённой TiddlyWiki",
	invalidCookie: "Испорченная cookie-переменная '%0'"}); 

merge(config.messages.messageClose,{text: "Закрити", tooltip: "закрыть эту область сообщения"});

config.messages.backstage = {
	open: {text: "обслуживание", tooltip: "Откройте меню обслуживания для проведения сервисных задач"},
	close: {text: "закрыть", tooltip: "Закрытие меню обслуживания"},
	prompt: "Ослуживание: ",
	decal: {edit: {text: "правка", tooltip: "Правка заметки '%0'"}}};

config.messages.listView = {
	tiddlerTooltip: "Щёлкните тут для просмотра полного текста этой заметки",
	previewUnavailable: "(предварительный просмотр недоступен)"};

config.messages.dates.months = ["января","февраля","марта","апреля","мая","июня","июля","августа","сентября","октября","ноября","декабря"];
config.messages.dates.days = ["Воскресенье","Понедельник","Вторник","Среда","Четверг","Пятница","Суббота"];
config.messages.dates.shortMonths = ["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"];
config.messages.dates.shortDays = ["Вс","Пн","Вт","Ср","Чт","Пт","Сб"];
config.messages.dates.daySuffixes = [
config.messages.dates.am = "утра";
config.messages.dates.pm = "дня";

	labelNoTags: "меток нет",
	labelTags: "метки: ",
	openTag: "Открыть метку '%0'",
	tooltip: "Показать заметки, помеченные как '%0'",
	openAllText: "Открыть всё",
	openAllTooltip: "Открыть все эти заметки",
	popupNone: "Нет других заметок, помеченных '%0'"});

	defaultText: "Заметка '%0' пока не создана. Создайте её двойным щелчком мышки",
	defaultModifier: "(отсутствует)",
	shadowModifier: "(встроенная служебная заметка)",
	dateFormat: "DD.0MM.YYYY",
	createdPrompt: "создана"});

	tagPrompt: "Введите метки, разделённые пробелами, в случае необходимости [[используйте двойные квадратные скобки|use double square brackets]], или добавьте существующие метки",
	defaultText: "Введите текст для '%0'"});

	text: "метки",
	tooltip: "Выберите существующую метку для добавления к этой заметке",
	popupNone: "Нет ни одной метки",
	tagTooltip: "Добавьте метку для '%0'"});

	sizeTemplates: [
		{unit: 1024*1024*1024, template: "%0\u00a0 Gb"},
		{unit: 1024*1024, template: "%0\u00a0 Mb"},
		{unit: 1024, template: "%0\u00a0 Kb"},
		{unit: 1, template: "%0\u00a0 b"}]});

	label: "Шукати >",
	prompt: "Пошук по матеріалам сайту",
	accessKey: "F",
	successMsg: "Знайдено %0 заміток з текстом %1",
	failureMsg: "Не знайдено жодної замітки з текстом %0"});

	lklabel: "мітки: ",
	labelNotTag: "(нема міток)",
	tooltip: "Список заметок, помеченных как '%0'"});

	dateFormat: "DD.0MM.YYYY"});

	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 = "Заметки, которые были изменены";

	label: "закрити всі",
	prompt: "Закрыть все отображённые заметки (за исключением заметок в состоянии правки)"});

	label: "пряме посилання",
	prompt: "Создание адресной строки для открытия TiddlyWiki с текущими открытыми заметками"});

	label: "зберегти",
	prompt: "Сохранение TiddlyWiki со всеми заметками",
	accessKey: "S"});

	label: "нова замітка",
	prompt: "Создать новую заметку",
	title: "Новая заметка",
	accessKey: "N"});

	label: "новий запис",
	prompt: "Создать новую заметку с текущей датой и временем",
	accessKey: "J"});

	wizardTitle: "Расширенные пункты настройки",
	step1Title: "Эти настройки Ваша программа просмотра сохраняет с помощью cookies",
	step1Html: "<input type='hidden' name='markList'></input><br><input type='checkbox' checked='false' name='chkUnknown'>Показать настройки без описания</input>",
	unknownDescription: "//(unknown)//",
	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'} ]}

	wizardTitle: "Управление модулями",
	step1Title: "Подключенные модули",
	step1Html: "<input type='hidden' name='markList'></input>",
	skippedText: "(Этот модуль не выполняется, так как после его добавления ещё не было перезапуска TiddlyWiki)",
	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: 'Description', field: 'Description', title: "Описание", type: 'String'},
			{name: 'Version', field: 'Version', title: "Версия", type: 'String'},
			{name: 'Size', field: 'size', tiddlerLink: 'size', title: "Размер", type: 'Size'},
			{name: 'Forced', field: 'forced', title: "Forced", 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'} ]},
	listViewTemplateReadOnly: {
		columns: [
			{name: 'Tiddler', field: 'tiddler', title: "Заметка", type: 'Tiddler'},
			{name: 'Description', field: 'Description', title: "Описание", type: 'String'},
			{name: 'Version', field: 'Version', title: "Версия", type: 'String'},
			{name: 'Size', field: 'size', tiddlerLink: 'size', title: "Размер", type: 'Size'},
			{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: "Log", type: 'StringList'}
		rowClasses: [
			{className: 'error', field: 'error'},
			{className: 'warning', field: 'warning'}

	moreLabel: "ещё",
	morePrompt: "Показать дополнительные команды",
	lessLabel: "кратко",
	lessPrompt: "Скрыть дополнительные команды",
	separator: "|" });

	label: "обновить",
	prompt: "Обновить отображение TiddlyWiki" });

	readOnlyWarning: "Вы не можете добавлять что-либо в открытую только для чтения TiddlyWiki. Попробуйте открыть её как файл (через обращение file://)",
	wizardTitle: "Импорт заметок из другого файла или сервера",
	step1Title: "Шаг 1: Найдите сервер или файл TiddlyWiki",
	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: "Возникли проблемы с получением файла TiddlyWiki", 
	statusOpenHost: "Открытие узла",
	statusGetWorkspaceList: "Получение списка доступных рабочих областей",
	step2Title: "Шаг 2: Выберите рабочую область",
	step2Html: "Введите имя рабочей области: <input type='text' size=50 name='txtWorkspace'><br>...или выберите рабочую область: <select name='selWorkspace'><option value=''>Выберите...</option></select>",
	cancelLabel: "отмена",
	cancelPrompt: "Отмена этого импорта",
	statusOpenWorkspace: "Открытие рабочего пространства",
	statusGetTiddlerList: "Получение списка разрешённых заметок",
	errorGettingTiddlerList: "Ошибка при получении списка заметок, нажмите Отмену и попробуйте снова",
	step3Title: "Шаг 3: Выберите импортируемые заметки",
	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: "Шаг 4: Импортируется заметок: %0",
	step4Html: "<input type='hidden' name='markReport'></input>", 
	doneLabel: "завершить",
	donePrompt: "Закрыть этот мастер-диалог",
	statusDoingImport: "Импортирование заметок",
	statusDoneImport: "Все заметки импортированы",
	systemServerNamePattern: "%2 из %1",
	systemServerNamePatternNoWorkspace: "%1",
	confirmOverwriteSaveTiddler: "Заметка '%0' уже существует. Нажмите 'OK' для замены её на заметку с указанного сервера, или нажмите 'Cancel' для оставления её неизменной",
	serverSaveTemplate: "|''Введите:''|%0|\n|''Адрес:''|%1|\n|''Рабочее пространство:''|%2|\n\nЭта заметка будет автоматически создана для записи параметров этого сервера",
	serverSaveModifier: "(System)",
	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: []
	} });

	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: "Не могу обновить эту 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: "Вы отменили процесс обновления TiddlyWiki"

	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: "Хранилище сервера (host)", 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>", 
	syncLabel: "синхронизация",
	syncPrompt: "Синхронизировать эти заметки",
	hasChanged: "Изменены с момента последней синхронизации",
	hasNotChanged: "Нет изменений с момента последней синхронизации",
	syncStatusList: {
		none: {text: "...", display:'none', className:'notChanged'},
		changedServer: {text: "Изменены на сервере", display:null, className:'changedServer'},
		changedLocally: {text: "Изменены локально", display:null, className:'changedLocally'},
		changedBoth: {text: "Изменены в обоих местах сразу", display:null, className:'changedBoth'},
		notFound: {text: "Отсутствует на сервере", display:null, className:'notFound'},
		putToServer: {text: "Обновление сохранено на сервер", display:null, className:'putToServer'},
		gotFromServer: {text: "Обновления получены с сервера", display:null, className:'gotFromServer'} } });


	text: "Закрити",
	tooltip: "Закрыть эту заметку"});

	text: "закрыти інші",
	tooltip: "Закрыть все другие заметки"});

	text: "редагувати",
	tooltip: "Исправить эту заметку",
	readOnlyText: "просмотр",
	readOnlyTooltip: "Просмотр исходного текста этой заметки"});

	text: "зберегти",
	tooltip: "Сохранить изменения этой заметки"});

	text: "скасувати",
	tooltip: "Отменить изменение этой заметки",
	warning: "Вы действительно уверены, что Вы хотите потерять все Ваши изменения заметки '%0'?",
	readOnlyText: "возврат",
	readOnlyTooltip: "Просмотр этой заметки в нормальном режиме"});

	text: "видалити",
	tooltip: "Удалить эту заметку",
	warning: "Вы уверены, что хотите удалить '%0'?"});

	text: "пряме посилання",
	tooltip: "Адресная строка для этой заметки"});

	text: "посилання",
	tooltip: "Показать все заметки, которые ссылаются на эту заметку",
	popupNone: "Нет ссылок"});

	text: "перехід",
	tooltip: "Переход на другую открытую заметку"});

	text: "синхронизация",
	tooltip: "Управление синхронизацией этой заметки с сервером или внешним файлом",
	currentlySyncing: "<div>Синхронизирую с помощью <span class='popupHighlight'>'%0'</span> с:</"+"div><div>хранилищем: <span class='popupHighlight'>%1</span></"+"div><div>рабочее пространство: <span class='popupHighlight'>%2</span></"+"div>", 
	notCurrentlySyncing: "Пока не синхронизировано",
	captionUnSync: "Остановить синхронизацию этой заметки",
	chooseServer: "Привести в соответствие эту заметку с другим сервером:",
	currServerMarker: "\u25cf ",
	notCurrServerMarker: "  "});

	text: "поля",
	tooltip: "Отображение расширенных параметров этой заметки",
	emptyText: "У этой заметки нет расширенных параметров",
	listViewTemplate: {
		columns: [
			{name: 'Field', field: 'field', title: "Поле", type: 'String'},
			{name: 'Value', field: 'value', title: "Значение", type: 'String'} ],
		rowClasses: [],
		buttons: [] } });

	DefaultTiddlers: "[[GettingStarted]]",
	MainMenu: "[[GettingStarted]]",
	SiteTitle: "Моя TiddlyWiki",
	SiteSubtitle: "гипертекстовая записная книжка",
	SiteUrl: "",
	SideBarOptions: '',
	SideBarTabs: '',
	TabMore: '<<tabs txtMoreTab "нет" "Отсутствующие заметки" TabMoreMissing "потери" "Потерянные заметки" TabMoreOrphans "служебные" "Служебные заметки" TabMoreShadowed>>' });

	AdvancedOptions: "Эта служебная заметка обеспечивает доступ к некоторым дополнительным настройкам",
	ColorPalette: "Значения из этой служебной заметки определяют цветовую схему пользовательского интерфейса TiddlyWiki",
	DefaultTiddlers: "Заметки, перечисленные в этой служебной заметке, будут автоматически открываться при каждом запуске TiddlyWiki",
	EditTemplate: "Шаблон HTML в этой служебной заметке определяет, как заметки будут выглядеть, пока они редактируются",
	GettingStarted: "Эта служебная заметка содержит инструкции по начальному использованию",
	ImportTiddlers: "Эта служебная заметка обеспечивает доступ к импортированным заметкам",
	MainMenu: "Эта служебная заметка используется для хранения содержимого главного меню (//обычно отображается в левой колонке экрана//)",
	MarkupPreHead: "Эта заметка вставляется в начало раздела <head> этого HTML-файла c TiddlyWiki",
	MarkupPostHead: "Эта заметка вставляется в конец раздела <head> этого HTML-файла c TiddlyWiki",
	MarkupPreBody: "Эта заметка вставляется в начало раздела <body> этого HTML-файла c TiddlyWiki",
	MarkupPostBody: "Эта заметка вставляется в конец раздела <body> этого HTML-файла с TiddlyWiki сразу же после блока кода",
	OptionsPanel: "Эта служебная заметка используется для хранения скрываемой панели Настроек, расположенной на боковой панели",
	PageTemplate: "HTML-шаблон в этой служебной заметке определяет общий вид TiddlyWiki",
	PluginManager: "Эта служебная заметка обеспечивает доступ к управлению модулями",
	SideBarOptions: "Эта служебная заметка используется для хранения панели поиска и настроек на боковой панели",
	SideBarTabs: "Эта служебная заметка содержит начинку панели со списком служебных заметок на боковой панели",
	SiteSubtitle: "Эта служебная  заметка содержит вторую часть заголовка страницы",
	SiteTitle: "Эта служебная заметка содержит первую часть заголовка страницы",
	SiteUrl: "В эту служебную заметку должен быть занесён полный URL публикации этой TiddlyWiki",
	StyleSheetColors: "Эта служебная заметка содержит CSS-описания, относящиеся к цветам элементов страницы. ''НЕ ИЗМЕНЯЙТЕ ЭТУ ЗАМЕТКУ''. Все изменения делайте в служебной заметке StyleSheet",
	StyleSheet: "Эта заметка может содержать Ваши определения и изменения стилей CSS",
	StyleSheetLayout: "Эта служебная заметка содержит СSS-описания, относящиеся к расположению элементов страниц.''НЕ ИЗМЕНЯЙТЕ ЭТУ ЗАМЕТКУ''. Все изменения делайте в служебной заметке StyleSheet",
	StyleSheetLocale: "Эта служебная заметка содержит CSS-описания, относящиеся к переводу на местный язык",
	StyleSheetPrint: "Эта служебная заметка содержит CSS-описания для печати",
	SystemSettings: "Эта заметка используется для хранения параметров настройки этой TiddlyWiki",
	TabAll: "Эта служебная заметка содержит начинку закладки 'Все' на боковой панели",
	TabMore: "Эта служебная заметка содержит начинку закладки 'Ещё' на боковой панели",
	TabMoreMissing: "Эта служебная заметка содержит начинку закладки 'Нет' на боковой панели",
	TabMoreOrphans: "Эта служебная заметка содержит начинку закладки 'Потери' на боковой панели",
	TabMoreShadowed: "Эта служебная заметка содержит начинку закладки 'Служебные' на боковой панели",
	TabTags: "Эта служебная заметка содержит начинку закладки 'Метки' на боковой панели",
	TabTimeline: "Эта служебная заметка содержит начинку закладки 'История' на боковой панели",
	ToolbarCommands: "Эта служебная заметка определяет, какие команды будут показываться в меню заметки",
	ViewTemplate: "HTML-шаблон в этой сервисной заметке определяет, как будет выглядеть заметка",
	WindowTitle: "Эта служебная заметка содержит полный вид заголовка страницы" });


|Created by|SaqImtiaz|
Provides a button for toggling visibility of the SideBar. You can choose whether the SideBar should initially be hidden or displayed.

<<toggleSideBar "Toggle Sidebar">>

{{{<<toggleSideBar>>}}} <<toggleSideBar>>
additional options:
{{{<<toggleSideBar label tooltip show/hide>>}}} where:
label = custom label for the button,
tooltip = custom tooltip for the button,
show/hide = use one or the other, determines whether the sidebar is shown at first or not.
(default is to show the sidebar)

You can add it to your tiddler toolbar, your MainMenu, or where you like really.
If you are using a horizontal MainMenu and want the button to be right aligned, put the following in your StyleSheet:
{{{ .HideSideBarButton {float:right;} }}}

*23-07-06: version 1.0: completely rewritten, now works with custom stylesheets too, and easier to customize start behaviour. 
*20-07-06: version 0.11
*27-04-06: version 0.1: working.


         styleHide :  "#sidebar { display: none;}\n"+"#contentWrapper #displayArea { margin-right: 1em;}\n"+"",
         styleShow : " ",
         arrow1: "»",
         arrow2: "«"

config.macros.toggleSideBar.handler=function (place,macroName,params,wikifier,paramString,tiddler)
          var tooltip= params[1]||'toggle sidebar';
          var mode = (params[2] && params[2]=="hide")? "hide":"show";
          var arrow = (mode == "hide")? this.settings.arrow1:this.settings.arrow2;
          var label= (params[0]&&params[0]!='.')?params[0]+" "+arrow:arrow;
          var theBtn = createTiddlyButton(place,label,tooltip,this.onToggleSideBar,"button HideSideBarButton");
          if (mode == "hide")

config.macros.toggleSideBar.onToggleSideBar = function(){
          var sidebar = document.getElementById("sidebar");
          var settings = config.macros.toggleSideBar.settings;
          if (sidebar.getAttribute("toggle")=='hide')
              this.firstChild.data= (this.firstChild.data).replace(settings.arrow1,settings.arrow2);
               this.firstChild.data= (this.firstChild.data).replace(settings.arrow2,settings.arrow1);

     return false;

setStylesheet(".HideSideBarButton .button {font-weight:bold; padding: 0 5px;}\n","ToggleSideBarButtonStyles");

[img[Шкільний ютуб-канал|pict/yt1.png][https://www.youtube.com/c/SolarTVLubny]]
[img[Ютуб-канал кафедри іноземної мови|pict/yt2.png][https://www.youtube.com/channel/UC1bRlpUzJ6cnKiKPwMMjqCA]]
<<toggleSideBar 'Iнфо' 'Корисні посилання та інша цікава інформація' hide>>
*[[Нормативні документи]]
*[[Фінансова звітність]]
*[[Публічна інформація]]
/%*[[Академічна доброчесність]]%/

| ''Name:''|YouTubeVideoDisplayPlugin|
| ''Description:''|Displays ~YouTube videos within tiddlers.|
| ''Version:''|1.0.6|
| ''Last Modified:''|01 June 2012|
| ''Author:''|Scott Simmons (~Secret-HQ)|
| ''Shadow Tiddlers:''|[[YouTubeVideoDisplayPlugin_StyleSheet]]<br>[[YouTubeVideoDisplayPlugin_Player]]<br>[[YouTubeVideoDisplayPlugin_Demo]]|
| ''Requires:''|no additional tiddlers (self-contained)|
| ''Core Version:''||
| ''Source:''|http://tiddlywiki.secret-hq.com/#YouTubeVideoDisplayPlugin|
| ''License:''|[[open source|http://tiddlywiki.secret-hq.com/#license]]|


Install this plugin, add the tag {{{systemConfig}}}, and reload your ~TiddlyWiki to make the plugin available.

To display a ~YouTube video in a tiddler, insert:

<<youtube VIDEOID>>

... where {{{VIDEOID}}} is the ID of the ~YouTube video you want to insert.  This is the value associated with the parameter {{{v}}} in ~YouTube ~URLs:


You may also find it at the end of a playlist URL:


Note that some ~YouTube {{{v}}} values begin with non-alphanumeric characters, like the underscore or hyphen:


!!Optional Parameters

This plugin accepts six optional parameters after the video ID, in any order.  These parameters control the appearance (//aspect ratio//, //width//, //height//, //alignment//) and behavior (//autostart//, //time//) of the embedded video player.  You may also use shorthand notations for the parameters and their values.  Here's a list of the parameters (and their shorthand versions), with valid values for each:

#{{{aspect}}} (or {{{R}}})
**For widescreen videos:
**For standard videos:
**Default value: ''widescreen''
#{{{width}}} (or {{{W}}})
**A number of pixels (any valid integer).
**Default value: ''400''
***If the aspect ratio is set to //standard//, the default width is ''366'' instead.
***If the macro includes a parameter for height but none for width, the default width is ignored, and width is calculated  from the height.
#{{{height}}} (or {{{H}}})
**A number of pixels (any valid integer).
**Default value: ''225''
***If the aspect ratio is set to //standard//, the default height is ''275'' instead.
***If the macro includes a parameter for width but none for height, the default height is ignored, and height is calculated from the width.
#{{{align}}} (or {{{float}}} or {{{F}}} or {{{A}}})
**Aligned to the left:
**Aligned to the right:
**Default value: ''right''
#{{{autostart}}} (or {{{autoplay}}} or {{{auto}}})
**Play the video automatically when the tiddler loads:
**Prevent the video from playing automatically:
**Default value: ''0'' (no autostart)
#{{{time}}} (or {{{start}}} or {{{at}}} or {{{T}}} or {{{S}}})
**A number of seconds (any valid integer).
**Default value: ''0'' (starts at the beginning)


This generates a 400 pixel wide, 247 pixel tall widescreen player aligned to the center of your tiddler that automatically starts playing the video at the 180-second mark (3 minutes in) as soon as the tiddler is loaded:

<<youtube p2plAqE_Odc aspect:"widescreen" width:"400" height:"247" align:"center" start:"180" autostart:"yes">>

You could also use the shortcut parameter names thusly:

<<youtube p2plAqE_Odc r:"w" w:"400" h:"247" f:"c" t:"180" auto:"1">>

[[Click here for a demo of different macro calls.|YouTubeVideoDisplayPlugin_Demo]]  (This plugin must be installed and activated to view the demo tiddler.)


version.extensions.YouTubeVideoDisplayPlugin = { major:1, minor:0, revision:6, date:new Date(2012,06,01), source:"http://tiddlywiki.secret-hq.com/#YouTubeVideoDisplayPlugin" };


| date|version|changes|h
| 01 June 2012|1.0.6|Updated shadow tiddler [[YouTubeVideoDisplayPlugin_Player]] for compatibility with new ~YouTube embed code.<br>Player color is still determined by ~TiddlyWiki ~ColorPalette, but these colors are ignored by the newest version of the ~YouTube code.|
| 24 March 2012|1.0.5|Corrected an error in documentation (listing "S" as a valid shortcut for the start time parameter).<br>Added error handling to accept "S" as the name of the start time parameter if used by mistake.|
| 29 January 2012|1.0.4|Cleaned up documentation.|
| 30 June 2011|1.0.3|Added player colors determined by the ~TiddlyWiki color palette.|
| 27 June 2011|1.0.2|Added support for autoplay and video start times as optional parameters.<br>Updated documentation.|
| 25 June 2011|1.0.1|Added names to the optional parameters so they could be used in any order.<br>Updated documentation.|
| 31 May 2011|1.0.0|Initial release.<br>Buggy.|



config.shadowTiddlers["YouTubeVideoDisplayPlugin_StyleSheet"] = "/*{{{*/"+"\n";
config.shadowTiddlers["YouTubeVideoDisplayPlugin_StyleSheet"] += ".ytvdRight {"+"\n";
config.shadowTiddlers["YouTubeVideoDisplayPlugin_StyleSheet"] += "  float:right;"+"\n";
config.shadowTiddlers["YouTubeVideoDisplayPlugin_StyleSheet"] += "  text-align:right;"+"\n";
config.shadowTiddlers["YouTubeVideoDisplayPlugin_StyleSheet"] += "  margin:8px;"+"\n";
config.shadowTiddlers["YouTubeVideoDisplayPlugin_StyleSheet"] += "}"+"\n";
config.shadowTiddlers["YouTubeVideoDisplayPlugin_StyleSheet"] += "\n";
config.shadowTiddlers["YouTubeVideoDisplayPlugin_StyleSheet"] += ".ytvdLeft {"+"\n";
config.shadowTiddlers["YouTubeVideoDisplayPlugin_StyleSheet"] += "  float:left;"+"\n";
config.shadowTiddlers["YouTubeVideoDisplayPlugin_StyleSheet"] += "  text-align:left;"+"\n";
config.shadowTiddlers["YouTubeVideoDisplayPlugin_StyleSheet"] += "  margin:8px;"+"\n";
config.shadowTiddlers["YouTubeVideoDisplayPlugin_StyleSheet"] += "}"+"\n";
config.shadowTiddlers["YouTubeVideoDisplayPlugin_StyleSheet"] += "\n";
config.shadowTiddlers["YouTubeVideoDisplayPlugin_StyleSheet"] += ".ytvdCenter {"+"\n";
config.shadowTiddlers["YouTubeVideoDisplayPlugin_StyleSheet"] += "  margin:8px auto;"+"\n";
config.shadowTiddlers["YouTubeVideoDisplayPlugin_StyleSheet"] += "  text-align:center;"+"\n";
config.shadowTiddlers["YouTubeVideoDisplayPlugin_StyleSheet"] += "}"+"\n";
config.shadowTiddlers["YouTubeVideoDisplayPlugin_StyleSheet"] += "/*}}}*/";


!!Templates (Shadow Tiddlers)

Table to display ~YouTube videos:
config.shadowTiddlers["YouTubeVideoDisplayPlugin_Player"] = "<html>";
config.shadowTiddlers["YouTubeVideoDisplayPlugin_Player"] += "<div class=\"$youtubeVideoDisplayClass\">"+"\n";
config.shadowTiddlers["YouTubeVideoDisplayPlugin_Player"] += "<!--VIDEO EMBED CODE-->"+"\n";
config.shadowTiddlers["YouTubeVideoDisplayPlugin_Player"] += "<object width=\"$youtubeVideoWidth\" height=\"$youtubeVideoHeight\">"+"\n";
config.shadowTiddlers["YouTubeVideoDisplayPlugin_Player"] += "<param name=\"movie\" value=\"http://www.youtube.com/v/"+"$youtubeVideoID"+"?version=3"+"&hl=en&fs=1&border=1\"></param>"+"\n";
config.shadowTiddlers["YouTubeVideoDisplayPlugin_Player"] += "<param name=\"allowFullScreen\" value=\"true\"></param>"+"\n";
config.shadowTiddlers["YouTubeVideoDisplayPlugin_Player"] += "<param name=\"allowscriptaccess\" value=\"always\"></param>"+"\n";
config.shadowTiddlers["YouTubeVideoDisplayPlugin_Player"] += "<embed src=\"http://www.youtube.com/v/"+"$youtubeVideoID"+"?version=3"+"$youtubeAutostartString"+"$youtubeStartTimeString"+"$youtubePlayerColor1String$"+"$youtubePlayerColor2String"+"&hl=en&fs=1&border=0\" type=\"application/x-shockwave-flash\" allowscriptaccess=\"always\" allowfullscreen=\"true\" width=\"$youtubeVideoWidth\" height=\"$youtubeVideoHeight\"></embed>"+"\n";
config.shadowTiddlers["YouTubeVideoDisplayPlugin_Player"] += "</object>"+"\n";
config.shadowTiddlers["YouTubeVideoDisplayPlugin_Player"] += "<!--/VIDEO EMBED CODE-->"+"\n";
config.shadowTiddlers["YouTubeVideoDisplayPlugin_Player"] += "<br>"+"\n";
config.shadowTiddlers["YouTubeVideoDisplayPlugin_Player"] += "<a href=\"http://www.youtube.com/watch?v="+"$youtubeVideoID"+"$youtubeStartTimeURLString"+"\" target=\"_blank\">"+"Дивитись на YouTube"+"</a>"+"\n";
config.shadowTiddlers["YouTubeVideoDisplayPlugin_Player"] += "</div>";
config.shadowTiddlers["YouTubeVideoDisplayPlugin_Player"] += "</html>";

Examples tiddler:
config.shadowTiddlers["YouTubeVideoDisplayPlugin_Demo"] = "<<youtube V4xEchrVYQk>>"+"\n"+"{{{"+"\n"+"<<youtube V4xEchrVYQk>>"+"\n"+"}}}"+"\n"+"... displays a standard ~YouTube player aligned to the right of this text.  By default, the player is 400 pixels wide and 225 pixels tall and is displayed with a widescreen (16:9) aspect ratio.";
config.shadowTiddlers["YouTubeVideoDisplayPlugin_Demo"] += "\n";
config.shadowTiddlers["YouTubeVideoDisplayPlugin_Demo"] += "@@clear:right;display:block;<hr>@@";
config.shadowTiddlers["YouTubeVideoDisplayPlugin_Demo"] += "\n";
config.shadowTiddlers["YouTubeVideoDisplayPlugin_Demo"] += "<<youtube hkNe1DVOUgU aspect:\"standard\" align:\"right\" width:\"300\">>"+"\n"+"{{{"+"\n"+"<<youtube hkNe1DVOUgU aspect:\"standard\" align:\"right\" width:\"300\">>"+"\n"+"}}}"+"\n"+"... displays a player with standard (4:3) dimensions (as opposed to widescreen).  The video shown here was recorded in 4:3, so the player fits it better.  This video is also resized by adding the parameter for //width//."+"\n\n"+"Other valid macro calls include:"+"\n"+"{{{"+"\n"+"<<youtube hkNe1DVOUgU aspect:\"square\" float:\"right\" width:\"300\">>"+"\n"+"<<youtube hkNe1DVOUgU aspect:\"4:3\" align:\"R\" width:\"300\">>"+"\n"+"<<youtube hkNe1DVOUgU a:\"standard\" float:\">\" width:\"300\">>"+"\n"+"<<youtube hkNe1DVOUgU a:\"square\" w:\"300\">>"+"\n"+"<<youtube hkNe1DVOUgU a:\"4:3\" w:\"300\">>"+"\n"+"}}}"+"\n"+"Passing the \"right\" (or \">\" or \"R\") value on //align// (or //float//) is optional, since the video will be aligned to the right if no alignment value is defined.)";
config.shadowTiddlers["YouTubeVideoDisplayPlugin_Demo"] += "\n";
config.shadowTiddlers["YouTubeVideoDisplayPlugin_Demo"] += "@@clear:right;display:block;<hr>@@";
config.shadowTiddlers["YouTubeVideoDisplayPlugin_Demo"] += "\n";
config.shadowTiddlers["YouTubeVideoDisplayPlugin_Demo"] += "<<youtube _Ht-ZnidvGY align:\"left\">>"+"\n"+"{{{"+"\n"+"<<youtube _Ht-ZnidvGY align:\"left\">>"+"\n"+"}}}"+"\n"+"... displays a player aligned to the left of text."+"\n\n"+"Other valid macro calls:"+"\n"+"{{{"+"\n"+"<<youtube _Ht-ZnidvGY align:\"L\">>"+"\n"+"<<youtube _Ht-ZnidvGY align:\"<\">>"+"\n"+"}}}";
config.shadowTiddlers["YouTubeVideoDisplayPlugin_Demo"] += "\n";
config.shadowTiddlers["YouTubeVideoDisplayPlugin_Demo"] += "@@clear:left;display:block;<hr>@@";
config.shadowTiddlers["YouTubeVideoDisplayPlugin_Demo"] += "\n";
config.shadowTiddlers["YouTubeVideoDisplayPlugin_Demo"] += "<<youtube p2plAqE_Odc aspect:\"wide\" align:\"center\" start:\"307\">>"+"\n"+"{{{"+"\n"+"<<youtube p2plAqE_Odc aspect:\"wide\" align:\"center\" start:\"307\">>"+"\n"+"}}}"+"\n"+"... displays a player centered above the text that follows it.  This player also includes the //start// parameter, which tells the player to skip to the 307-second mark (5:08), where the narrator is talking about plugins. ;)"+"\n\n"+"Other valid macro calls:"+"\n"+"{{{"+"\n"+"<<youtube p2plAqE_Odc align:\"C\" time:\"307\">>"+"\n"+"<<youtube p2plAqE_Odc align:\"-\" at:\"307\">>"+"\n"+"}}}"+"\n"+"Passing the \"wide\" value on //aspect// is optional, since the video will be treated as widescreen in no value for //aspect// is defined.)";


config.macros.youtube = {}
config.macros.youtube.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
   var parsedParams = paramString.parseParams('anon',null,true,false,false);
   var youtubeVideoID = params[0];
   var youtubeAspectRatio = getParam(parsedParams,"aspect","");
   if ((youtubeAspectRatio == '') || (youtubeAspectRatio == 'null')) {
      var youtubeAspectRatio = getParam(parsedParams,"a","");
   if ((youtubeAspectRatio == '') || (youtubeAspectRatio == 'null')) {
      var youtubeAspectRatio = getParam(parsedParams,"r","");
   if ((youtubeAspectRatio == '') || (youtubeAspectRatio == 'null')) {
      var youtubeAspectRatio = 'widescreen';
   var regexpAspectStandard = /^s.*?|4.*?$/i;
   var regexpAspectWide = /^w.*?|16.*?$/i;
   if (regexpAspectStandard.test(youtubeAspectRatio)) {
      var youtubeAspectRatio = 'standard';
   else if (regexpAspectWide.test(youtubeAspectRatio)) {
      var youtubeAspectRatio = 'widescreen';
   else {
      var youtubeAspectRatio = 'widescreen';
   // This variable is set "true" when the regex matches the value to which it's applied
   var regexpIsNumeric = /^[0-9]+$/i;
   var youtubeVideoWidth = getParam(parsedParams,"width","");
   if ((youtubeVideoWidth == '') || (youtubeVideoWidth == 'null')) {
      var youtubeVideoWidth = getParam(parsedParams,"w","");
   if (!regexpIsNumeric.test(youtubeVideoWidth)) {
      var youtubeVideoWidth = '';
   var youtubeVideoHeight = getParam(parsedParams,"height","");
   if ((youtubeVideoHeight == '') || (youtubeVideoHeight == 'null')) {
      var youtubeVideoHeight = getParam(parsedParams,"h","");
   if (!regexpIsNumeric.test(youtubeVideoHeight)) {
      var youtubeVideoHeight = '';
   if ((youtubeVideoWidth != '') && (youtubeVideoHeight == '')) {
      if (youtubeAspectRatio == 'standard') {
         var youtubeVideoHeight = youtubeVideoWidth * 3 / 4;
      else if (youtubeAspectRatio == 'widescreen') {
         var youtubeVideoHeight = youtubeVideoWidth * 9 / 16;
   else if ((youtubeVideoWidth == '') && (youtubeVideoHeight != '')) {
      if (youtubeAspectRatio == 'standard') {
         var youtubeVideoWidth = youtubeVideoHeight * 4 / 3;
      else if (youtubeAspectRatio == 'widescreen') {
         var youtubeVideoWidth = youtubeVideoHeight * 16 / 9;
   else if ((youtubeVideoWidth == '') && (youtubeVideoHeight == '')) {
      if (youtubeAspectRatio == 'standard') {
         var youtubeVideoWidth = '366';
         var youtubeVideoHeight = '275';
      else if (youtubeAspectRatio == 'widescreen') {
         var youtubeVideoWidth = '400';
         var youtubeVideoHeight = '225';
   var youtubeVideoAlignment = getParam(parsedParams,"align","");
   if ((youtubeVideoAlignment == '') || (youtubeVideoAlignment == 'null')) {
      var youtubeVideoAlignment = getParam(parsedParams,"float","");
   if ((youtubeVideoAlignment == '') || (youtubeVideoAlignment == 'null')) {
      var youtubeVideoAlignment = getParam(parsedParams,"f","");
   if ((youtubeVideoAlignment == '') || (youtubeVideoAlignment == 'null')) {
      var youtubeVideoAlignment = getParam(parsedParams,"a","");
   // This allow for misspellings and abbreviations like "r." or "rt"
   // ">" = "right", "<" = "left", and "-" = "center"
   // These variables are set "true" when the regex matches the value to which it's applied.
   var regexpRight = /^r.*?|>$/i;
   var regexpLeft = /^l.*?|<$/i;
   var regexpCenter = /^c.*?|-$/i;
   if (regexpRight.test(youtubeVideoAlignment)) {
      var youtubeVideoDisplayClass = 'ytvdRight';
   else if (regexpLeft.test(youtubeVideoAlignment)) {
      var youtubeVideoDisplayClass = 'ytvdLeft';
   else if (regexpCenter.test(youtubeVideoAlignment)) {
      var youtubeVideoDisplayClass = 'ytvdCenter';
      var youtubeVideoDisplayClass = 'ytvdRight';
   var youtubeAutostart = getParam(parsedParams,"autostart","");
   if ((youtubeAutostart == '') || (youtubeAutostart == 'null')) {
      var youtubeAutostart = getParam(parsedParams,"autoplay","");
   if ((youtubeAutostart == '') || (youtubeAutostart == 'null')) {
      var youtubeAutostart = getParam(parsedParams,"auto","");
   var regexpYes = /^ye?s?|1$/i;
   var regexpNo = /^no?|0$/i;
   if (regexpYes.test(youtubeAutostart)) {
      var youtubeAutostart = '1';
   else if (regexpNo.test(youtubeAutostart)) {
      var youtubeAutostart = '0';
   else {
      var youtubeAutostart = '';
   if (youtubeAutostart != '' || 'null') {
      var youtubeAutostartString = "&autoplay="+youtubeAutostart;
   else {
      var youtubeAutostartString = '';
   var youtubeStartTime = getParam(parsedParams,"time","");
   if ((youtubeStartTime == '') || (youtubeStartTime == 'null')) {
      var youtubeStartTime = getParam(parsedParams,"at","");
   if ((youtubeStartTime == '') || (youtubeStartTime == 'null')) {
      var youtubeStartTime = getParam(parsedParams,"t","");
   if ((youtubeStartTime == '') || (youtubeStartTime == 'null')) {
      var youtubeStartTime = getParam(parsedParams,"start","");
   if ((youtubeStartTime == '') || (youtubeStartTime == 'null')) {
      var youtubeStartTime = getParam(parsedParams,"s","");
   if (!regexpIsNumeric.test(youtubeStartTime)) {
      var youtubeStartTime = '';
   if ((youtubeStartTime != '') && (youtubeStartTime != 'null')) {
      var youtubeStartTimeString = "&start="+youtubeStartTime;
      var youtubeStartTimeURLString = "#at="+youtubeStartTime;
   else {
      var youtubeStartTimeString = '';
      var youtubeStartTimeURLString = '';
   var youtubePlayerColor1 = store.getTiddlerText("ColorPalette::PrimaryDark","");
   var youtubePlayerColor2 = store.getTiddlerText("ColorPalette::PrimaryLight","");
   var regexpHexShort = /^#([0-9A-Za-z]{3})$/i;
   if (youtubePlayerColor1 != '') {
      if (!regexpHexShort.test(youtubePlayerColor1)) {
         var youtubePlayerColor1 = youtubePlayerColor1.replace(/^#([0-9A-Za-z]+)$/g,"$1");
      else if (regexpHexShort.test(youtubePlayerColor1)) {
         var youtubePlayerColor1 = youtubePlayerColor1.replace(/^#(.)(.)(.)$/g,"$1$1$2$2$3$3");
      var youtubePlayerColor1String = "&color1=0x"+youtubePlayerColor1;
   else {
      var youtubePlayerColor1String = '';
   if (youtubePlayerColor2 != '') {
      if (!regexpHexShort.test(youtubePlayerColor2)) {
         var youtubePlayerColor2 = youtubePlayerColor2.replace(/^#([0-9A-Za-z]+)$/g,"$1");
      else if (regexpHexShort.test(youtubePlayerColor2)) {
         var youtubePlayerColor2 = youtubePlayerColor2.replace(/^#(.)(.)(.)$/g,"$1$1$2$2$3$3");
      var youtubePlayerColor2String = "&color2=0x"+youtubePlayerColor2;
   else {
      var youtubePlayerColor2String = '';
   var tid = 'YouTubeVideoDisplayPlugin_Player';
   var txt = store.getTiddlerText(tid,'');

Введите текст для 'systemPalette'

:[[Перша педагогічна рада в 2022-2023 н.році]]
:[[До уваги батьків! Безкоштовна допомога дитячого психолога]]
:[[Перемога шестикласників у Міжнародному  дистанційному 2х туровому конкурсі творчої учнівської та студентської молоді та дорослих виконавців «I LOVE UKRAINE!»]]
:[[Успішні результати НМТ-2022]]
:[[Перемога у ХХІ Всеукраїнському конкурсі учнівської творчості «Об’єднаймося ж, брати мої!»]]
:[[Фінал Міжнародного конкурсу з української мови імені Петра Яцика]]
:[[Нам знову дякують]]
:<<youtube YsuQLPNM09o align:"center">>
:[[Євросоюз та МОМ  розробили правила безпеки для внутрішньо переміщених осіб]]
:[[День вишиванки-2022]]
:[[Допомога тваринам у цей непростий час]]
:[[Перемоги у двох конкурсах Лізи Ніколайчик]]
:[[Урок у музеї учнів 6-Г класу (до Міжнародного дня музею)]]
:[[День Європи-2022]]
:[[Фотопроєкт "Великдень у моїй родині"]]
:[[Міжнародний день рідної мови]]
:[[Уроки медіаграмотності педагогічної спільноти іноземних мов]]
:[[Всеукраїнський урок медіаграмотності від педагогічної спільноти гуманітарних та суспільних наук]]
:[[Всеукраїнський урок медіаграмотності від професійної педагогічної спільноти точних та природничих наук]]
:[[Уроки медіаграмотності в початковій школі]]
:[[Медіаграмотність на уроках фізичної культури]]
:[[Територіальний конкурс з інформаційних технологій]]
:[[Перемога учениці 5-Г класу в Міжнародному конкурсі "Чубинський fest"]]
:[[Нетрадиційний урок до Дня святого Валентина]]
:[[Участь у програмі Re:debate]]
:[[Флешмоб "Разом до безпечного інтернету"]]
:[[Міжнародна конференція в рамках програми Generation Global]]
:[[Участь учнів 4-В класу у ІІ Всеукраїнському марафоні з української мови]]
:[[Результати обласного Міжнародного конкурсу з української мови імені Петра Яцика]]
:[[Результати фестивалю відеоуроків "Освітяни Лубенщини презентують"]]
:[[Всеукраїнський конкурс "Зимові свята в традиціях нашого народу"]]
:[[Переможці Марафону з української мови]]
:[[Участь у V Всеукраїнському конкурсі "Гуманне ставлення до тварин"]]
:[[Екскурсія 3-В до столиці]]
:[[Перемога в Марафоні з української мови]]
:[[Гран-прі учнів 5-Г класу в конкурсі "Новорічний марафон"]]
:[[Психолого-педагогічний консиліум]]
:[[Зимові свята в 1-А]]
:[[Проєкт "Музичнi iнструменти" серед учнiв 3-х класiв]]
:[[Урок математики англійською]]
:[[Інтегрований урок з української мови та алгебри]]
:[[Вручення "Оскара" на уроках інформатики]]
:[[Результати II етапу Міжнародного конкурсу знавців рідної мови імені П.Яцика]]
:[[Зустріч учнів 7-А класу з лікарем-наркологом]]
:[[Перемога в Міжнародному дистанційному фестивалі-конкурсі "Соняшник"]]
:[[Година мужності в 4-А класі]]
:[[Благодійна акція "Монетки дітям"]]
:[[Місячник цифрової грамотності]]
:[[Виховна година "Ми всі - різні, ми всі - рівні" у 8-А класі]]
:[[Тренінг "ВІЛ СНІД. Передбачити, уникнути, не захворіти"]]
:[[День Шотландії]]
:[[День пам'яті жертв Голодомору]]
:[[День подяки в школі]]
:[[Історичний конкурс "Ми діти твої, Полтавщино, вивчаємо віхи твої"]]
:[[Результати міського Міжнародного мовно-літературного конкурсу імені Тараса Шевченка]]
:[[Безпека на дорозі - безпека життя]]
:[[Тиждень безпеки руху в школі]]
:[[Тиждень моди в 1-А класі]]
:[[Квест "Толерантність - ознака вищої гідності"]]
:[[Година спілкування "Усі ми різні, усі ми рівні" (6-А клас)]]
:[[Квест "Дорожній рух - наш вірний друг"]]
:[[Краєзнавча експедиція "130 років на варті погоди"]]
:[[Історично-краєзнавчий маршрут "Шеметова стежина"]]
:[["Нев'янучість Лубенських художніх весен"]]
:[[Тренінг "Нова українська школа: перехід на наступний рівень"]]
:[["Знаєш нашу солов'їну? - Заяви на всю країну!"]]
:[[Участь семикласників у математичній онлайн-олімпіаді]]
:[[Святкування Дня писемності]]
:[[Пізнаємо минуле, щоб творити майбутнє!]]
:[[Завершення реалізації екопроєктів]]
:[[Навчальний семінар-тренінг для членів шкільного НТУ «ДивоСвіт»]]
:[[Педрада "Академічна доброчесність - шлях до успіху"]]
:[[Конкурс знавців української мови імені П.Яцика серед учнів початкової школи]]
:[[Реалізація проєкту "Зелений клас для екологічної освіти учнів Лубенської спеціалізованої школи №6"]]
:[[Благоустрій пришкільної території]]
:[[Мовознавчий тренінг "Підвищення орфографічної грамотності"]]
:[[Шкільна олімпіада з інформатики]]
:[[Презентація 5-х класів]]
:[[Свято першокласника]]
:[[Участь 4-В класу в олімпіаді "Всеосвіта"]]
:[[Шкільний етап Міжнародного мовно-літературного конкурсу імені Тараса Шевченка]]
:[[Тиждень початкової школи]]
:[[Мініпроєкт у 4-А до Всесвітнього дня каші]]
:[[Театральний дебют 2-А класу]]
:[[Фінал XVIII Міжнародного конкурсу "Уроки війни та Голокосту - уроки толерантності"]]
:[["У світі казки чарівної" (1-Б клас)]]
:[[Гра-подорож "Місто майстрів" у 4-В класі]]
:[[Конкурс віршів "Зелене Свято"]]
:[[Вікторина "Цікавий світ професій" (1-В клас)]]
:[["Вони такі ж, як і ми". Урок-роздум у 4-А класі до Всесвітнього дня тварин]]
:[[Урок доброти у 1-А класі]]
:[[4 жовтня - Всесвітній день тварин. Урок добра в 1В класі]]
:[[До 80-річчя трагедії в Бабиному Яру]]
:[[Екскурсія 9-Б до столиці]]
:[[Вибори мера  2021-2022 навч.року]]
:[[Святкуємо День міста-2021]]
:[[Команда КВН "Тузи" в Затоці]]
:[[День здоров'я-2021]]
:[[День фізкультури та спорту]]
:[[Участь в обласному проєкті #ШГБCamp2021]]
:[[Зустріч з працівниками поліції]]
:[[Перший урок - важлива подія для всіх]]
:[[Новий навчальний рік запрошує в освітню подорож]]
[[До уваги батьків майбутніх першокласників 2022-2023 н.р.]]
[[До уваги батьків дошкільнят!]]
:[[Якимець Римма - переможниця міжнародної програми обміну майбутніх лідерів «FLEX»]]
:[[Сайт Володимира Малика]]
:[[Навчальна практика з англійської мови для учнів 6-А класу]]
:[[Навчальна практика для 8А на Замковій горі]]
:[[Предметні олімпіади для учнів 3-4-х класів]]
:[[Завершення роботи суботньої школи естетичного виховання]]
:[["Збереження здоров'я - невід'ємна складова щасливого життя"]]
:[["З книгою ми дружимо, живемо-не тужимо"]]
:[[«Свято книги» у 1-Г класі]]
:[[Конкурс майстрів декламаторського мистецтва учнів початкових класів]]
:[[Квест-гра у 1–А класі]]
:[[Проєкт у 1-А класі]]
:[[Учениця 10-Б Якимець Римма отримала статус фіналістки програми обміну молодіжних лідерів FLEX]]
:[[Перемога у Всеукраїнській олімпіаді "Всеосвіта Весна-2021]]
:[[International Science Project Olympiad]]
:[[Рухаємося, розвиваємося, самовдосконалюємося…]]
:[[Увага конкурс! Всеукраїнський проєкт «Мішечок»]]
:[[Регіональний науково-практичний семінар "Проєктна технологія навчання хімії"]]
:[[Засідання круглого столу на кафедрі вчителів початкових класів]]
:[[Тематичний тиждень у 3В класі «Мандрівка літературними стежками»]]
:[[Завершення проекту «Подорож у країну Чайландію»/ 3А клас]]
:[[Виховний захід «Книги у нашому житті»/ 2А клас]]
:[[Проєкт «Подорож у країну Чайландію»/ 3А клас]]
:[[День числа "Пі"]]
:[[Міжнародний жіночий день для учнів 4В класу]]
:[[Завершення проєкту "Збережемо тваринний і рослинний світ нашого краю"/ 2В клас]]
:[[Завершення проєкту "Дружба"/ 4Г клас]]
:[[Виховний захід «Мова наша - солов'їна» / 1Г клас]]
:[[Чарівник з берегів Сули]]
:[[Любов - це... (дослідження 3А кл. )]]
:[[Разом до найкращого Інтернету]]
:[[Всеукраїнський урок "Онлайн-синергія для найкращого інтернету"]]
:[[Safer Internet Day Challenge 2021!]]
:[[Відеоурок «Інформаційні технології для безпеки дітей в Інтернет»]]
:[[Про встановлення карантину та запровадження обмежувальних протиепідемічних заходів]]
:[[Педагогічна рада]]
:[[Мовознавчий семінар-практикум "Вивчаємо новий укрїнський правопис"]]

Школа має триповерхову будівлю:
*26 класних кімнат і навчальних аудиторій,
*10 кабінетів англійської мови,
*сучасні обладнані кабінети інформатики, фізики, хімії, біології, математики, географії,
*спортивний, актовий і танцювальний зали,
*ресурсний інформаційно-методичний центр, обладнаний комп’ютерами, які мають доступ до мережі Інтернет,
*учительський мультимедійний методичний центр, обладнаний меблями-трансформерами,  комп’ютерами, ~DVD-програвачем, супутниковим телебаченням,  телевізором з плазмовим екраном, інтерактивною дошкою.
!!Кабінет хімії
!!Кабінет фізики
!!Кабінет географії
!!Кабінет біології
!!Кабінети англійської мови
!!Танцювальний клас
!!Ресурсний інформаційно-методичний центр
!!Учительський мультимедійний методичний центр

@@color(red):''Шановні батьки майбутніх першокласників!''@@

Лубенська спеціалізована школа І-ІІІ ступенів №6 оголошує набір здобувачів освіти до перших класів на 2022–2023 навчальний рік. Прийом документів триватиме з ''26 квітня до 31 травня 2022 року''.

@@color(red):''До школи першочергово будуть зараховані:''@@
*''діти, що проживають у мікрорайоні, який обслуговує освітній заклад'':
**вул. Вишневецьких
**вул. Першотравнева
**вул. Монастирська
**вул. Ботанічна
**вул. Свободи
**вул. Щелканова
**вул. П.Лубенського
**вул. Грушевського
**вул. Кузні;
*''діти, які є рідними братами та/або сестрами здобувачів освіти нашого закладу'';
*''діти працівників цього закладу''.
@@color(red):''Для оформлення особової справи учня необхідно підготувати:''@@
*''копію свідоцтва про народження'';
*''документ, що підтверджує місце проживання дитини на території обслуговування освітнього закладу'';
*''медичну довідку за формою первинної облікової документації № 086-1/о'' «Довідка учня для загальноосвітнього навчального закладу про результати обов’язкового медичного профілактичного огляду», затвердженою наказом Міністерства охорони здоров’я України від 16.08.2010 р. № 682, зареєстрованим в Міністерстві юстиції України 10.09.2010 р. за № 794/18089.
@@color(red):Реєстрацію дитини до 1 класу можна здійснити з ''26 квітня до 31 травня 2022 року'' автоматизовано на порталі ''https://school.isuo.org'' або надати всі необхідні документи в паперовому вигляді до освітнього закладу в зазначений термін.@@
>Телефон для довідок: ''70-838''
>//Адміністрація спеціалізованої школи №6//

|Вища категорія| 51|
|Перша категорія| 11|
|Друга категорія| 2|
|Спеціаліст| 8|
|Мають звання:|>|
|Заслужений учитель| 1|
|Учитель-методист| 32|
|Старший учитель| 13|
|Загальна кількість учнів| 965|
|Початкова школа| 403|
|Середня школа| 448|
|Старша школа| 114|

Добро -- це те, чим ми прагнемо наповнити своє життя. Щирі люди завжди випромінюють світло й тепло, які відчувають усі навколишні. Потребу в ласці маємо не лише ми, а й наші найменші друзі, для яких настали теж важкі часи.

Рятуючись від небезпеки, сім'я з Краматорська забрала з собою 11 собак та 8 котів. Зараз усі в безпеці в одному із сіл Оржицького району. Мама Анна та її донька Лєра розчулилися та були щиро вдячні за благодійну допомогу від учнів 6-В класу. Не передати словами, скільки щирих побажань та слів подяки вони адресували дітям та батькам за подарунки та підтримку чотирилапим.

Ще в мирний час у класі стартував проєкт "Стежинкою добра…", метою якого є розвиток в учнів найвищих людських цінностей. Творіть добро! Будьте чуйними до тих, хто знаходиться поруч! Не відкладайте добрі справи на майбутнє!
<a href="news/2022/0427/01.jpg" rel="iLoad|27042022"><img src="news/2022/0427/01.png"/></a>
<a href="news/2022/0427/02.jpg" rel="iLoad|27042022"><img src="news/2022/0427/02.png"/></a>
<a href="news/2022/0427/03.jpg" rel="iLoad|27042022"><img src="news/2022/0427/03.png"/></a>
<a href="news/2022/0427/04.jpg" rel="iLoad|27042022"><img src="news/2022/0427/04.png"/></a>
<a href="news/2022/0427/05.jpg" rel="iLoad|27042022"><img src="news/2022/0427/05.png"/></a>
<a href="news/2022/0427/06.jpg" rel="iLoad|27042022"><img src="news/2022/0427/06.png"/></a>
<a href="news/2022/0427/07.jpg" rel="iLoad|27042022"><img src="news/2022/0427/07.png"/></a>
<a href="news/2022/0427/08.jpg" rel="iLoad|27042022"><img src="news/2022/0427/08.png"/></a>

*вул. Вишневецьких
*вул. Першотравнева
*вул. Монастирська
*вул. Ботанічна
*вул. Свободи
*вул. Щелканова
*вул. П. Лубенського
*вул. Грушевського
*вул. Кузні

*наукове товариство «Дивосвіт»
*європейський клуб «LINK»
*танцювальний колектив «Карден»
*вокальний ансамбль «Валері»
*студія образотворчого мистецтва «Дивоцвіт»

[>img(30%,)[news/2021/lemchuk.jpg]]Здоров’я -- це безцінне багатство людини, від якого залежить уся її життєдіяльність. Ніякі досягнуті цілі не приносять повного щастя, якщо немає здоров’я. Тому дуже важливо вести здоровий спосіб життя, незважаючи та те, скільки людині років. 

Тільки здорова людина може плідно працювати й приносити користь суспільству. Свідомий вибір бути здоровим у дітей молодшого й середнього шкільного віку ще не сформований. Розуміння способу життя підлітків зводиться в основному до добре відомих положень - не пити, не курити, загартовуватися й більше рухатися, не нервувати. 

Людина сьогодні звикла сподіватися не на захисні сили свого організму, а на могутність медицини. Академік Амосов стверджував: «Щоб бути здоровим, потрібні власні зусилля, постійні і значні. Замінити їх не можна нічим». Щоб жити повноцінним, щасливим життям довгі-предовгі роки, необхідно стежити за своїм здоров’ям: правильно харчуватися, займатися спортом і загартовуватися. Як відомо, людині потрібні для здоров’я сонце, повітря та вода -- наші кращі друзі. Від себе додам, що не менш важливий позитивний настрій, тобто відсутність злих, негативних думок і поганих вчинків. Суттєво також для здоров’я бажати всім добра та завжди перебувати в гарному настрої.

Головне -- замислитися над наслідками своїх дій. Зрозуміло, що для того, аби бути здоровим, потрібно докласти певних зусиль і не набувати шкідливих звичок. Якщо і є якісь причини, то треба вжити всіх заходів, аби їх позбутися.

Я думаю, що звернути увагу на своє здоров’я й змінити майбутнє на краще ніколи не пізно. Якщо людина почне дотримуватися здорового способу життя, то вона звільниться від проблем і навіть уникне серйозних хвороб.
>Лемчук Анна, 10-Б клас