Welcome to TiddlyWiki created by Jeremy Ruston; Copyright © 2004-2007 Jeremy Ruston, Copyright © 2007-2011 UnaMesa Association
{{{
Background: #f6f6f6
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
TableHeader: #950
TableHeaderBg: #ffd080
TableHeaderRef: #064
TableHeader2: #950
TableHeader2Bg: lightyellow
TableHeader2Ref: #064
TableHeader3: #950
TableHeader3Bg: HoneyDew
TableHeader3Ref: #064
TableHeader4: #950
TableHeader4Bg: LavenderBlush
TableHeader4Ref: #064
TableHeader5: #950
TableHeader5Bg: pink
TableHeader5Ref: #064
HeaderTop: #a60
HeaderBottom: #eb5
PreBg: #ffc
PreBorder: #fe8
FooterTop: #ffe4c0
FooterBottom: #eed090
FooterBg: #fcdc66
FooterBorder: #cba
FooterText: #000
FooterRef: #950
TiddlerBg: #fff
TiddlerEven: #eee
TiddlerRef: #064
TiddlerRem: #800
TiddlerAccent: #060
SliderPanel: #ddd
TabUnselected: #c8c8c8
}}}
/***
|Name:|DisableWikiLinksPlugin|
|Source:|http://www.TiddlyTools.com/#DisableWikiLinksPlugin|
|Version:|1.6.0|
|Author:|Eric Shulman|
|License:|http://www.TiddlyTools.com/#LegalStatements|
|CoreVersion:|2.1|
|Type:|plugin|
|Description:|selectively disable TiddlyWiki's automatic WikiWord linking behavior|
***/
//{{{
version.extensions.DisableWikiLinksPlugin= {major: 1, minor: 6, revision: 0, date: new Date(2008,7,22)};
if (config.options.chkDisableWikiLinks==undefined) config.options.chkDisableWikiLinks=false;
if (config.options.chkDisableNonExistingWikiLinks==undefined) config.options.chkDisableNonExistingWikiLinks=true;
if (config.options.chkAllowLinksFromShadowTiddlers==undefined) config.options.chkAllowLinksFromShadowTiddlers=true;
if (config.options.txtDisableWikiLinksList==undefined) config.options.txtDisableWikiLinksList="DisableWikiLinksList";
if (config.options.txtDisableWikiLinksTag==undefined) config.options.txtDisableWikiLinksTag="excludeWikiWords";
// find the formatter for wikiLink and replace handler with 'pass-thru' rendering
initDisableWikiLinksFormatter();
function initDisableWikiLinksFormatter() {
for (var i=0; i<config.formatters.length && config.formatters[i].name!="wikiLink"; i++);
config.formatters[i].coreHandler=config.formatters[i].handler;
config.formatters[i].handler=function(w) {
// supress any leading "~" (if present)
var skip=(w.matchText.substr(0,1)==config.textPrimitives.unWikiLink)?1:0;
var title=w.matchText.substr(skip);
var exists=store.tiddlerExists(title);
var inShadow=w.tiddler && store.isShadowTiddler(w.tiddler.title);
// check for excluded Tiddler
if (w.tiddler && w.tiddler.isTagged(config.options.txtDisableWikiLinksTag))
{ w.outputText(w.output,w.matchStart+skip,w.nextMatch); return; }
// check for specific excluded wiki words
var t=store.getTiddlerText(config.options.txtDisableWikiLinksList);
if (t && t.length && t.indexOf(w.matchText)!=-1)
{ w.outputText(w.output,w.matchStart+skip,w.nextMatch); return; }
// if not disabling links from shadows (default setting)
if (config.options.chkAllowLinksFromShadowTiddlers && inShadow)
return this.coreHandler(w);
// check for non-existing non-shadow tiddler
if (config.options.chkDisableNonExistingWikiLinks && !exists)
{ w.outputText(w.output,w.matchStart+skip,w.nextMatch); return; }
// if wikiLinks disabled, just return text without linking
if (config.options.chkDisableWikiLinks)
{ w.outputText(w.output,w.matchStart+skip,w.nextMatch); return; }
// do standard WikiWord link formatting
return this.coreHandler(w);
}
}
Tiddler.prototype.coreAutoLinkWikiWords = Tiddler.prototype.autoLinkWikiWords;
Tiddler.prototype.autoLinkWikiWords = function() {
/*
var skip=(this.matchText.substr(0,1)==config.textPrimitives.unWikiLink)?1:0;
var title=this.substr(skip);
var exists=store.tiddlerExists(title);
var exists=store.tiddlerExists(this.title);
alert(this.title+"; "+exists);
if (config.options.chkDisableNonExistingWikiLinks && !exists) return false;
*/
// if all automatic links are not disabled, just return results from core function
if (config.options.chkDisableWikiLinks) return false;
return this.coreAutoLinkWikiWords.apply(this,arguments);
}
Tiddler.prototype.disableWikiLinks_changed = Tiddler.prototype.changed;
Tiddler.prototype.changed = function()
{
this.disableWikiLinks_changed.apply(this,arguments);
// remove excluded wiki words from links array
var t=store.getTiddlerText(config.options.txtDisableWikiLinksList,"").readBracketedList();
if (t.length) for (var i=0; i<t.length; i++)
if (this.links.contains(t[i]))
this.links.splice(this.links.indexOf(t[i]),1);
}
config.optionsDesc["chkDisableWikiLinks"]="Disables WikiLinks";
config.optionsDesc["chkDisableNonExistingWikiLinks"]="Disables only non-existing WikiLinks";
config.optionsDesc["chkAllowLinksFromShadowTiddlers"]="Allows WikiLinks from ShadowTiddlers";
config.optionsDesc["txtDisableWikiLinksList"]="Name of tiddly which contains the default settings for DisableWikiLinksPlugin";
config.optionsDesc["txtDisableWikiLinksTag"]="Disables WikiWords for tiddlers, marked by this tag";
//}}}
<!--{{{-->
<table width=100%><tr>
<td valign=top><div class='title' macro='view title'></div></td>
<td valign=top><div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div></td>
</tr></table>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit tags'></div>
<div class='editorFooter'>
<span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span>
</div>
<div class='editor' macro='edit text'></div>
<!--}}}-->
/***
|''Name:''|ExcludeOrphansPlugin|
|''Author:''|vmunt|
|''Description:''|Обработчик тега excludeOrphans<br>Тag excludeOrphans handler|
|''Version:''|0.1|
|''Date:''|2010|
|''Source:''|http://vmunt.site/tw|
|''License:''|BSD open source license|
|''CoreVersion:''|2.6.0|
Этот модуль создаёт обработчик тега {{{excludeOrphans}}}. Заметки с этим тегом не появляются в списке Потери. Можно использовать для пометки плагинов {{remark{(заметок, помеченных тегом systemConfig, ибо они доступны из сервисных меню, генерируемых кодом)}}}, и для заметок, описывающих авторов заметок {{remark{(ибо ссылка на автора всё равно присутствует в заголовке каждой заметки)}}}. Плагин сделан простой подменой функции {{{TiddlyWiki.prototype.getOrphans}}}
Eng:
This plugin creates tag {{{excludeOrphans}}} handler. This tag useful for {{{systemConfig}}} tiddlers, author tiddlers and others service tiddlers, links to them missing in text tiddlers in this wiki. Tiddlers marks for this tag is not shown in list More/Orphans. Plugin makes as simple replace by function {{{TiddlyWiki.prototype.getOrphans}}}
{{remark{(If you find ugly constructions in my English, I will be pleased to advice how to makes this text more correct. My native language is Russian, and I have no language practice before…}}}
***/
//{{{
// Return an array of names of tiddlers that are defined but not referred to
TiddlyWiki.prototype.getOrphans = function()
{
var results = [];
this.forEachTiddler(function (title,tiddler) {
if(this.getReferringTiddlers(title).length == 0 && !tiddler.isTagged("excludeLists") && !tiddler.isTagged("excludeOrphans"))
results.push(title);
});
results.sort();
return results;
};
//}}}
Назначение и описание TiddlyWiki можно прочитать [[здесь|http://vmunt.site/tw/tw.tutorial.rus.html#TiddlyWiki]]
Для настройки пустой TiddlyWiki надо сделать следующие шаги:
* Настроить имя автора {{remark{(хозяина)}}}: <<option txtUserName>>
* Уточнить [[Заголовок|SiteTitle]] и [[Подзаголовок|SiteSubtitle]] этой TiddlyWiki
* Сделать требуемое [[Главное меню|MainMenu]] документа ({{remark{которое обычно располагается слева}}})
* Подправить год создания в [[Подвале|PageFooter]] документа {{remark{(цветная полоса внизу страницы)}}}
* Установить [[Заметку (заметки), сразу открывающиеся при старте|DefaultTiddlers]] этой TiddlyWiki
/***
|''Name:''|ImportTablePlugin|
|''Old name:''|ImportTiddlersExp|
|''Author:''|vmunt|
|''Description:''|Расширенное меню импорта заметок|
|''Version:''|0.1.1|
|''Date:''|2010|
|''Source:''|http://vmunt.site/tw|
|''License:''|BSD open source license|
|''CoreVersion:''|2.6.0|
|''Remark:''|Не закончена функция formatDateStr() и стоит явное указание форматной строки {{remark{(потому что выравнивание колонки по правому краю в wizard-е пока не знаю, как делать)}}}. Также думаю сделать закомментированный вариант английских названий колонок|
Вместо такого меню импорта:
|!Заметка|!Размер|!Метки|
|TiddlyWiki:rus|26 KB|systemConfig|
делает такое
|!Заметка|!Метки|!Размер|!Кем|!Изменена|!Старая дата|!Бывший автор|!Сколько занимала|
|TiddlyWiki:rus|systemConfig|26 KB|vmunt|16.06.2010|28.07.2010|vmunt|26 KB|
***/
//{{{
config.macros.importTiddlers.listViewTemplateExp = {
columns: [
{name: 'Selected', field: 'Selected', rowName: 'title', type: 'Selector'},
{name: 'Tiddler', field: 'tiddler', title: "Заметка", type: 'Tiddler'},
{name: 'Tags', field: 'tags', title: "Метки", type: 'Tags'},
{name: 'Size', field: 'size', tiddlerLink: 'size', title: "Размер", type: 'Size'},
{name: 'Modifier', field: 'modifier', title: "Кем", type: 'String'}, //**** vmunt: added ****
{name: 'Modified', field: 'modified', title: "Изменена", type: 'String'}, // Fri Jun 4 09:37:00 UTC+0600 2010
{name: 'StoreModifier', field: 'sModified', title: "Старая дата", type: 'String'}, // 201006041906
{name: 'StoreModified', field: 'sModifier', title: "Бывший автор", type: 'String'},
{name: 'StoreSize', field: 'sSize', title: "Сколько занимала", type: 'Size'}],
rowClasses: [
{className: 'warning', field: 'sNewer'},
{className: 'lowlight', field: 'sEqual'}
]};
String.prototype.formatDateString = function(template) {
function hour12(s) { return (int.s > 12) ? zeroPad(int.s - 12,2) : int.s; }
var t = template.replace(/wYYYY/g,this.substr(0,4));
t = t.replace(/wYY/g,this.substr(2,4));
t = t.replace(/YYYY/g,this.substr(0,4));
t = t.replace(/YY/g,this.substr(2,4));
t = t.replace(/mmm/g,config.messages.dates.shortMonths[parseInt(this.substr(4,2))-1]);
t = t.replace(/MMM/g,config.messages.dates.months[parseInt(this.substr(4,2))-1]);
t = t.replace(/0MM/g,this.substr(4,2));
t = t.replace(/MM/g,parseInt(this.substr(4,2))); // not quite correct
t = t.replace(/0DD/g,this.substr(6,2));
t = t.replace(/DD/g,parseInt(this.substr(6,2)));
// t = t.replace(/0mm/g,String.zeroPad(this.getMinutes(),2));
// t = t.replace(/mm/g,this.getMinutes());
// t = t.replace(/0hh12/g,String.zeroPad(this.substr(8,2)));
/*
t = t.replace(/hh12/g,this.getHours12());
t = t.replace(/0hh/g,String.zeroPad(this.getHours(),2));
t = t.replace(/hh/g,this.getHours());
t = t.replace(/0ss/g,String.zeroPad(this.getSeconds(),2));
t = t.replace(/ss/g,this.getSeconds());
t = t.replace(/[ap]m/g,this.getAmPm().toLowerCase());
t = t.replace(/[AP]M/g,this.getAmPm().toUpperCase());
t = t.replace(/0WW/g,String.zeroPad(this.getWeek(),2));
t = t.replace(/WW/g,this.getWeek());
t = t.replace(/DDD/g,config.messages.dates.days[this.getDay()]);
t = t.replace(/ddd/g,config.messages.dates.shortDays[this.getDay()]);
t = t.replace(/DDth/g,this.getDate()+this.daySuffix());
var tz = this.getTimezoneOffset();
var atz = Math.abs(tz);
t = t.replace(/TZD/g,(tz < 0 ? '+' : '-') + String.zeroPad(Math.floor(atz / 60),2) + ':' + String.zeroPad(atz % 60,2));
t = t.replace(/\\/g,"");
*/
return t;
};
config.macros.importTiddlers.onGerTiddlerListOrig = config.macros.importTiddlers.onGetTiddlerList; // Save pointer to original macro
config.macros.importTiddlers.onGetTiddlerList = function(context,wizard) {
if(context.status !== true) {
wizard.setButtons([{caption: config.macros.importTiddlers.cancelLabel, tooltip: config.macros.importTiddlers.cancelPrompt, onClick: config.macros.importTiddlers.onCancel}],config.macros.importTiddlers.errorGettingTiddlerList);
return;
}
// Extract data for the listview
var listedTiddlers = [];
if(context.tiddlers) {
for(var n=0; n<context.tiddlers.length; n++) {
var tiddler = context.tiddlers[n];
var ss = 0;
if (store.tiddlerExists(tiddler.title)) {
ss = store.getTiddlerText(tiddler.title);
ss = ss.length > 0 ? ss.length : -1;
}
var tm = tiddler.modified.convertToYYYYMMDDHHMM();
var sm = store.getValue(tiddler.title,'modified');
listedTiddlers.push({
title: tiddler.title,
modified: tm.formatDateString("0DD.0MM.YYYY"), // config.views.wikified.dateFormat),
modifier: tiddler.modifier,
text: tiddler.text ? wikifyPlainText(tiddler.text,100) : "",
tags: tiddler.tags,
size: tiddler.text ? tiddler.text.length : 0,
tiddler: tiddler,
//*** vmunt added ***
sModified: ss == 0 ? '' : sm.formatDateString("0DD.0MM.YYYY"), // config.views.wikified.dateFormat), //sm.formatDateString("DD.0MM.YYYY")
sModifier: ss == 0 ? '' : store.getValue(tiddler.title,'modifier'),
sSize: ss,
sEqual: sm==tm ? true : false,
sNewer: sm>tm ? true : false
});
}
}
listedTiddlers.sort(function(a,b) {return a.title < b.title ? -1 : (a.title == b.title ? 0 : +1);});
// Display the listview
wizard.addStep(config.macros.importTiddlers.step3Title,config.macros.importTiddlers.step3Html);
var markList = wizard.getElement("markList");
var listWrapper = document.createElement("div");
markList.parentNode.insertBefore(listWrapper,markList);
var listView = ListView.create(listWrapper,listedTiddlers,config.macros.importTiddlers.listViewTemplateExp);
wizard.setValue("listView",listView);
wizard.setValue("context",context);
var txtSaveTiddler = wizard.getElement("txtSaveTiddler");
txtSaveTiddler.value = config.macros.importTiddlers.generateSystemServerName(wizard);
wizard.setButtons([
{caption: config.macros.importTiddlers.cancelLabel, tooltip: config.macros.importTiddlers.cancelPrompt, onClick: config.macros.importTiddlers.onCancel},
{caption: config.macros.importTiddlers.importLabel, tooltip: config.macros.importTiddlers.importPrompt, onClick: config.macros.importTiddlers.doImport}]);
};
//}}}
[[Жёсткие диски]]
[[Обмотки для проводов]]
[[Системные блоки]]
[[ТВ-тюнеры]]
[[Хабы]]
[[Клавиатуры]]
[[Оцифровка видеокассет]]
----
@@color:green;font-size:.9em;[[TiddlyWiki|GettingStarted]], v.<<version>><br>© [[Jeremy Ruston|http://www.tiddlywiki.com/#JeremyRuston]], [[vmunt]], 2014÷2017@@
<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<link rel="shortcut icon" type="image/x-icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAuIwAALiMBeKU/dgAAAAd0SU1FB9wCCg0kDTvUy7gAAAH2SURBVDjLlVNNSJVRED1nzrmLl5sIg6KdSD8gYtZCLIp+QCKCVkEQES0yzCQIMlwYUlRItIqIaBlRQkRtEsN0Edmuh5S10CSpZRbkoh/0a/G+Z2pKNXDhzrlzz505Mxf4B+vrqFzyjPdPJJLsiogmkrUkZxgxSXKQZJvtz02XJ9HXUbmV5EWQ9REhkqOMaLftGySPkQQjMkYwyGUkDzFiS9OlT1UAEFJPkKsZAUZkQdYg4kKE9ED2d9uQTUuQBNlZSCcBoL9zFWzvUkqQDUkM+2YqFDZ539Wp3sdnlteENBIRKc8EJEHyGwAUKiowPT1dn2MZyUeN7WPNABC9Z1dgT/eXUdt3ZGP2FZtOqRMAGtvHIPu07cw2JXUOdVeXRCyrOdC1Zn1EvCGJyOskSUZsj4hxAhN5Zg83nxrZX74X5c2Ocx/fyu733Axs2D4v+1aO/Qi7bW4bY67jlJrzwLKQkL1N0mBe2tP61uGJRQmGuqtBYFz2B9nZLFFpHa9rKZLk3j8GaSHw8lrtgZDu5YqXeh5BktUbjr4YWxg/r4Ti9TpsbB3ukfROduaU4N9ZFBYb5XkEdS1FAIBSuiKbZTFDmlp7+NmrvxLMguRtpfRTpS5AUsNSn2lRgnVHnn9N9kpJT0JqqDo48Br/Y+N3d87z3/fsXjL2F4ebZ2453LoIAAAAAElFTkSuQmCC" />
<!--}}}-->
/***
|Name|NestedSlidersPlugin|
|Source|http://www.TiddlyTools.com/#NestedSlidersPlugin|
|Documentation|http://www.TiddlyTools.com/#NestedSlidersPluginInfo|
|Version|2.4.9|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|show content in nest-able sliding/floating panels, without creating separate tiddlers for each panel's content|
!!!!!Documentation
>see [[NestedSlidersPluginInfo]]
!!!!!Configuration
<<<
<<option chkFloatingSlidersAnimate>> allow floating sliders to animate when opening/closing
>Note: This setting can cause 'clipping' problems in some versions of InternetExplorer.
>In addition, for floating slider animation to occur you must also allow animation in general (see [[AdvancedOptions]]).
<<<
!!!!!Revisions
<<<
2008.11.15 - 2.4.9 in adjustNestedSlider(), don't make adjustments if panel is marked as 'undocked' (CSS class). In onClickNestedSlider(), SHIFT-CLICK docks panel (see [[MoveablePanelPlugin]])
|please see [[NestedSlidersPluginInfo]] for additional revision details|
2005.11.03 - 1.0.0 initial public release. Thanks to RodneyGomes, GeoffSlocock, and PaulPetterson for suggestions and experiments.
<<<
!!!!!Code
***/
//{{{
version.extensions.NestedSlidersPlugin= {major: 2, minor: 4, revision: 9, date: new Date(2008,11,15)};
// options for deferred rendering of sliders that are not initially displayed
if (config.options.chkFloatingSlidersAnimate===undefined)
config.options.chkFloatingSlidersAnimate=false; // avoid clipping problems in IE
// default styles for 'floating' class
setStylesheet(".floatingPanel { position:absolute; z-index:10; padding:0.5em; margin:0em; \
background-color:#eee; color:#000; border:1px solid #000; text-align:left; }","floatingPanelStylesheet");
// if removeCookie() function is not defined by TW core, define it here.
if (window.removeCookie===undefined) {
window.removeCookie=function(name) {
document.cookie = name+'=; expires=Thu, 01-Jan-1970 00:00:01 UTC; path=/;';
}
}
config.formatters.push( {
name: "nestedSliders",
match: "\\n?\\+{3}",
terminator: "\\s*\\={3}\\n?",
lookahead: "\\n?\\+{3}(\\+)?(\\([^\\)]*\\))?(\\!*)?(\\^(?:[^\\^\\*\\@\\[\\>]*\\^)?)?(\\*)?(\\@)?(?:\\{\\{([\\w]+[\\s\\w]*)\\{)?(\\[[^\\]]*\\])?(\\[[^\\]]*\\])?(?:\\}{3})?(\\#[^:]*\\:)?(\\>)?(\\.\\.\\.)?\\s*",
handler: function(w)
{
lookaheadRegExp = new RegExp(this.lookahead,"mg");
lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = lookaheadRegExp.exec(w.source)
if(lookaheadMatch && lookaheadMatch.index == w.matchStart)
{
var defopen=lookaheadMatch[1];
var cookiename=lookaheadMatch[2];
var header=lookaheadMatch[3];
var panelwidth=lookaheadMatch[4];
var transient=lookaheadMatch[5];
var hover=lookaheadMatch[6];
var buttonClass=lookaheadMatch[7];
var label=lookaheadMatch[8];
var openlabel=lookaheadMatch[9];
var panelID=lookaheadMatch[10];
var blockquote=lookaheadMatch[11];
var deferred=lookaheadMatch[12];
// location for rendering button and panel
var place=w.output;
// default to closed, no cookie, no accesskey, no alternate text/tip
var show="none"; var cookie=""; var key="";
var closedtext=">"; var closedtip="";
var openedtext="<"; var openedtip="";
// extra "+", default to open
if (defopen) show="block";
// cookie, use saved open/closed state
if (cookiename) {
cookie=cookiename.trim().slice(1,-1);
cookie="chkSlider"+cookie;
if (config.options[cookie]==undefined)
{ config.options[cookie] = (show=="block") }
show=config.options[cookie]?"block":"none";
}
// parse label/tooltip/accesskey: [label=X|tooltip]
if (label) {
var parts=label.trim().slice(1,-1).split("|");
closedtext=parts.shift();
if (closedtext.substr(closedtext.length-2,1)=="=")
{ key=closedtext.substr(closedtext.length-1,1); closedtext=closedtext.slice(0,-2); }
openedtext=closedtext;
if (parts.length) closedtip=openedtip=parts.join("|");
else { closedtip="show "+closedtext; openedtip="hide "+closedtext; }
}
// parse alternate label/tooltip: [label|tooltip]
if (openlabel) {
var parts=openlabel.trim().slice(1,-1).split("|");
openedtext=parts.shift();
if (parts.length) openedtip=parts.join("|");
else openedtip="hide "+openedtext;
}
var title=show=='block'?openedtext:closedtext;
var tooltip=show=='block'?openedtip:closedtip;
// create the button
if (header) { // use "Hn" header format instead of button/link
var lvl=(header.length>5)?5:header.length;
var btn = createTiddlyElement(createTiddlyElement(place,"h"+lvl,null,null,null),"a",null,buttonClass,title);
btn.onclick=onClickNestedSlider;
btn.setAttribute("href","javascript:;");
btn.setAttribute("title",tooltip);
}
else
var btn = createTiddlyButton(place,title,tooltip,onClickNestedSlider,buttonClass);
btn.innerHTML=title; // enables use of HTML entities in label
// set extra button attributes
btn.setAttribute("closedtext",closedtext);
btn.setAttribute("closedtip",closedtip);
btn.setAttribute("openedtext",openedtext);
btn.setAttribute("openedtip",openedtip);
btn.sliderCookie = cookie; // save the cookiename (if any) in the button object
btn.defOpen=defopen!=null; // save default open/closed state (boolean)
btn.keyparam=key; // save the access key letter ("" if none)
if (key.length) {
btn.setAttribute("accessKey",key); // init access key
btn.onfocus=function(){this.setAttribute("accessKey",this.keyparam);}; // **reclaim** access key on focus
}
btn.setAttribute("hover",hover?"true":"false");
btn.onmouseover=function(ev) {
// optional 'open on hover' handling
if (this.getAttribute("hover")=="true" && this.sliderPanel.style.display=='none') {
document.onclick.call(document,ev); // close transients
onClickNestedSlider(ev); // open this slider
}
// mouseover on button aligns floater position with button
if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this,this.sliderPanel);
}
// create slider panel
var panelClass=panelwidth?"floatingPanel":"sliderPanel";
if (panelID) panelID=panelID.slice(1,-1); // trim off delimiters
var panel=createTiddlyElement(place,"div",panelID,panelClass,null);
panel.button = btn; // so the slider panel know which button it belongs to
btn.sliderPanel=panel; // so the button knows which slider panel it belongs to
panel.defaultPanelWidth=(panelwidth && panelwidth.length>2)?panelwidth.slice(1,-1):"";
panel.setAttribute("transient",transient=="*"?"true":"false");
panel.style.display = show;
panel.style.width=panel.defaultPanelWidth;
panel.onmouseover=function(event) // mouseover on panel aligns floater position with button
{ if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this.button,this); }
// render slider (or defer until shown)
w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
if ((show=="block")||!deferred) {
// render now if panel is supposed to be shown or NOT deferred rendering
w.subWikify(blockquote?createTiddlyElement(panel,"blockquote"):panel,this.terminator);
// align floater position with button
if (window.adjustSliderPos) window.adjustSliderPos(place,btn,panel);
}
else {
var src = w.source.substr(w.nextMatch);
var endpos=findMatchingDelimiter(src,"+++","===");
panel.setAttribute("raw",src.substr(0,endpos));
panel.setAttribute("blockquote",blockquote?"true":"false");
panel.setAttribute("rendered","false");
w.nextMatch += endpos+3;
if (w.source.substr(w.nextMatch,1)=="\n") w.nextMatch++;
}
}
}
}
)
function findMatchingDelimiter(src,starttext,endtext) {
var startpos = 0;
var endpos = src.indexOf(endtext);
// check for nested delimiters
while (src.substring(startpos,endpos-1).indexOf(starttext)!=-1) {
// count number of nested 'starts'
var startcount=0;
var temp = src.substring(startpos,endpos-1);
var pos=temp.indexOf(starttext);
while (pos!=-1) { startcount++; pos=temp.indexOf(starttext,pos+starttext.length); }
// set up to check for additional 'starts' after adjusting endpos
startpos=endpos+endtext.length;
// find endpos for corresponding number of matching 'ends'
while (startcount && endpos!=-1) {
endpos = src.indexOf(endtext,endpos+endtext.length);
startcount--;
}
}
return (endpos==-1)?src.length:endpos;
}
//}}}
//{{{
window.onClickNestedSlider=function(e)
{
if (!e) var e = window.event;
var theTarget = resolveTarget(e);
while (theTarget && theTarget.sliderPanel==undefined) theTarget=theTarget.parentNode;
if (!theTarget) return false;
var theSlider = theTarget.sliderPanel;
var isOpen = theSlider.style.display!="none";
// if SHIFT-CLICK, dock panel first (see [[MoveablePanelPlugin]])
if (e.shiftKey && config.macros.moveablePanel) config.macros.moveablePanel.dock(theSlider,e);
// toggle label
theTarget.innerHTML=isOpen?theTarget.getAttribute("closedText"):theTarget.getAttribute("openedText");
// toggle tooltip
theTarget.setAttribute("title",isOpen?theTarget.getAttribute("closedTip"):theTarget.getAttribute("openedTip"));
// deferred rendering (if needed)
if (theSlider.getAttribute("rendered")=="false") {
var place=theSlider;
if (theSlider.getAttribute("blockquote")=="true")
place=createTiddlyElement(place,"blockquote");
wikify(theSlider.getAttribute("raw"),place);
theSlider.setAttribute("rendered","true");
}
// show/hide the slider
if(config.options.chkAnimate && (!hasClass(theSlider,'floatingPanel') || config.options.chkFloatingSlidersAnimate))
anim.startAnimating(new Slider(theSlider,!isOpen,e.shiftKey || e.altKey,"none"));
else
theSlider.style.display = isOpen ? "none" : "block";
// reset to default width (might have been changed via plugin code)
theSlider.style.width=theSlider.defaultPanelWidth;
// align floater panel position with target button
if (!isOpen && window.adjustSliderPos) window.adjustSliderPos(theSlider.parentNode,theTarget,theSlider);
// if showing panel, set focus to first 'focus-able' element in panel
if (theSlider.style.display!="none") {
var ctrls=theSlider.getElementsByTagName("*");
for (var c=0; c<ctrls.length; c++) {
var t=ctrls[c].tagName.toLowerCase();
if ((t=="input" && ctrls[c].type!="hidden") || t=="textarea" || t=="select")
{ try{ ctrls[c].focus(); } catch(err){;} break; }
}
}
var cookie=theTarget.sliderCookie;
if (cookie && cookie.length) {
config.options[cookie]=!isOpen;
if (config.options[cookie]!=theTarget.defOpen) window.saveOptionCookie(cookie);
else window.removeCookie(cookie); // remove cookie if slider is in default display state
}
// prevent SHIFT-CLICK from being processed by browser (opens blank window… yuck!)
// prevent clicks *within* a slider button from being processed by browser
// but allow plain click to bubble up to page background (to close transients, if any)
if (e.shiftKey || theTarget!=resolveTarget(e))
{ e.cancelBubble=true; if (e.stopPropagation) e.stopPropagation(); }
Popup.remove(); // close open popup (if any)
return false;
}
//}}}
//{{{
// click in document background closes transient panels
document.nestedSliders_savedOnClick=document.onclick;
document.onclick=function(ev) { if (!ev) var ev=window.event; var target=resolveTarget(ev);
if (document.nestedSliders_savedOnClick)
var retval=document.nestedSliders_savedOnClick.apply(this,arguments);
// if click was inside a popup… leave transient panels alone
var p=target; while (p) if (hasClass(p,"popup")) break; else p=p.parentNode;
if (p) return retval;
// if click was inside transient panel (or something contained by a transient panel), leave it alone
var p=target; while (p) {
if ((hasClass(p,"floatingPanel")||hasClass(p,"sliderPanel"))&&p.getAttribute("transient")=="true") break;
p=p.parentNode;
}
if (p) return retval;
// otherwise, find and close all transient panels…
var all=document.all?document.all:document.getElementsByTagName("DIV");
for (var i=0; i<all.length; i++) {
// if it is not a transient panel, or the click was on the button that opened this panel, don't close it.
if (all[i].getAttribute("transient")!="true" || all[i].button==target) continue;
// otherwise, if the panel is currently visible, close it by clicking it's button
if (all[i].style.display!="none") window.onClickNestedSlider({target:all[i].button})
if (!hasClass(all[i],"floatingPanel")&&!hasClass(all[i],"sliderPanel")) all[i].style.display="none";
}
return retval;
};
//}}}
//{{{
// adjust floating panel position based on button position
if (window.adjustSliderPos==undefined) window.adjustSliderPos=function(place,btn,panel) {
if (hasClass(panel,"floatingPanel") && !hasClass(panel,"undocked")) {
// see [[MoveablePanelPlugin]] for use of 'undocked'
var rightEdge=document.body.offsetWidth-1;
var panelWidth=panel.offsetWidth;
var left=0;
var top=btn.offsetHeight;
if (place.style.position=="relative" && findPosX(btn)+panelWidth>rightEdge) {
left-=findPosX(btn)+panelWidth-rightEdge; // shift panel relative to button
if (findPosX(btn)+left<0) left=-findPosX(btn); // stay within left edge
}
if (place.style.position!="relative") {
var left=findPosX(btn);
var top=findPosY(btn)+btn.offsetHeight;
var p=place; while (p && !hasClass(p,'floatingPanel')) p=p.parentNode;
if (p) { left-=findPosX(p); top-=findPosY(p); }
if (left+panelWidth>rightEdge) left=rightEdge-panelWidth;
if (left<0) left=0;
}
panel.style.left=left+"px"; panel.style.top=top+"px";
}
}
//}}}
//{{{
// TW2.1 and earlier:
// hijack Slider stop handler so overflow is visible after animation has completed
Slider.prototype.coreStop = Slider.prototype.stop;
Slider.prototype.stop = function()
{ this.coreStop.apply(this,arguments); this.element.style.overflow = "visible"; }
// TW2.2+
// hijack Morpher stop handler so sliderPanel/floatingPanel overflow is visible after animation has completed
if (version.major+.1*version.minor+.01*version.revision>=2.2) {
Morpher.prototype.coreStop = Morpher.prototype.stop;
Morpher.prototype.stop = function() {
this.coreStop.apply(this,arguments);
var e=this.element;
if (hasClass(e,"sliderPanel")||hasClass(e,"floatingPanel")) {
// adjust panel overflow and position after animation
e.style.overflow = "visible";
if (window.adjustSliderPos) window.adjustSliderPos(e.parentNode,e.button,e);
}
};
}
//}}}
/***
|Name|NestedSlidersPluginInfo|
|Source|http://www.TiddlyTools.com/#NestedSlidersPlugin|
|Documentation|http://www.TiddlyTools.com/#NestedSlidersPluginInfo|
|Version|2.4.9|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|documentation|
|Description|documentation for NestedSlidersPlugin|
Этот модуль добавляет новую вики-разметку для встроенных прямо в заметку выдвижных панелей (слайдеров).
!!!!!Использование
<<<
//{{{
++++(cookiename)!!!!!^width^*@{{class{[label=key|tooltip][altlabel|alttooltip]}}}#panelID:>...
content goes here
===
Также будет добавлено:
++++
содержимое 1
+++-
содержимое 2
+++-
содержимое 3
===
//}}}
* ''"""+++""" (или """++++""") и """==="""''<br>Помечают соответственно начало и конец выдвижной панели. Дополнительный {{remark{(четвёртый)}}} {{{+}}} указывает на то, что выдвижная панель будет открыта сразу при первом же отображении заметки.
* ''"""(имя_cookie)"""''<br>Название переменной, в которой будет сохраняться последнее состояние открытого/закрытого пункта меню. При повторном открытии TiddlyWiki состояние данной выдвижной панели будет восстановлено.
* ''"""! ÷ !!!!!"""''<br>Переключает стиль отображения метки выдвижной панели со стиля кнопки на стиль заголовка соответствующего уровня {{remark{(от 1-го до 5-го)}}}.
* ''"""^ширина^ (или просто ^)"""''<br>Делает выдвижную панель вместо выдвижной {{remark{(сдвигающей расположенный ниже текст дальше вниз)}}} всплывающей над текстом {{remark{(наподобие выпадывающих меню)}}}. {{{Ширина}}} должна быть представлена правильным CSS-значением {{remark{(например, "30em", "180px", "50%", и так далее)}}}. Если {{{ширина}}} опущена, то будет использовано автоматическое определение ширины {{remark{(для полного размещения содержимого)}}}.
* ''"""*"""''<br>denotes "transient display": when a click occurs elsewhere in the document, the slider/floating panel will be automatically closed. This is useful for creating 'pulldown menus' that automatically go away after they are used. //Note: using SHIFT-click on a slider label will open/close that slider without triggering the automatic closing of any transient slider panels that are currently displayed, permitting ''temporary'' display of several transient panels at once.//
* ''"""@"""''<br>denotes "open on hover": the slider/floating panel will be automatically opened as soon as the mouse moves over the slider label, without requiring a click.
* ''"""{{class{[label=key|tooltip][altlabel|alttooltip]}}}"""''<br>uses label/tooltip/accesskey. """{{class{…}}}""", """=key""", """|tooltip""" and """[altlabel|alttooltip]""" are optional. 'class' is any valid CSS class name, used to style the slider label text. 'key' must be a ''single letter only''. altlabel/alttooltip specify alternative label/tooltip for use when slider/floating panel is displayed. //Note: you can use HTML syntax within the label text to include HTML entities (e.g., {{{»}}} (») or {{{►}}} (►), or even embedded images (e.g., {{{<img src="images/eric3.gif">}}}).//
* ''"""#panelID:"""''<br>defines a unique DOM element ID that is assigned to the panel element used to display the slider content. This ID can then be used later to reposition the panel using the {{{<<DOM move id>>}}} macro (see [[DOMTweaksPlugin]]), or to access/modify the panel element through use of {{{document.getElementById(…)}}}) javascript code in a plugin or inline script.
* ''""">"""''<br>automatically adds blockquote formatting to slider content
* ''"""..."""''<br>defers rendering of closed sliders until the first time they are opened.
Notes:
*You can 'nest' sliders as deep as you like (see complex nesting example below), so that expandable 'tree-like' hierarchical displays can be created.
*Deferred rendering (...) can be used to offset processing overhead until actually needed. However, this may produce unexpected results in some cases. Use with care.
* To make slider definitions easier to read and recognize when editing a tiddler, newlines immediately following the 'start slider' or preceding the 'end slider' sequences are automatically supressed so that excess whitespace is eliminated from the output.
<<<
!!!!!Examples
<<<
simple in-line slider:
{{{
+++content===
}}}
+++content===
----
use a custom label and tooltip:
{{{
+++[label|tooltip]content===
}}}
+++[label|tooltip]content===
----
content automatically blockquoted:
{{{
+++>content===
}}}
+++>content===
----
all options (except cookie) //(default open, heading, sized floater, transient, open on hover, class, label/tooltip/key, blockquoted, deferred)//
{{{
++++!!!^30em^*@{{big{[label=Z|click or press Alt-Z to open]}}}>...
content
===
}}}
++++!!!^30em^*@{{big{[label=Z|click or press Alt-Z to open]}}}>...
content
===
----
complex nesting example:
{{{
+++[get info…=I|click for information or press Alt-I]
put some general information here,
plus a floating panel with more specific info:
+++^10em^[view details…|click for details]
put some detail here, which could in turn contain a transient panel,
perhaps with a +++^25em^*[glossary definition]explaining technical terms===
===
===
}}}
+++[get info…=I|click for information or press Alt-I]
put some general information here,
plus a floating panel with more specific info:
+++^10em^[view details…|click for details]
put some detail here, which could in turn contain a transient panel,
perhaps with a +++^25em^*[glossary definition]explaining technical terms===
===
===
----
embedded image as slider button
{{{
+++[<img src=images/eric3.gif>|click me!]>
{{big{OUCH!}}}
===
}}}
+++[<img src=images/eric3.gif>|click me!]>
{{big{OUCH!}}}
===
<<<
!!!!!Revisions
<<<
2008.11.15 2.4.9 in adjustNestedSlider(), don't make adjustments if panel is marked as 'undocked' (CSS class). In onClickNestedSlider(), SHIFT-CLICK docks panel (see [[MoveablePanelPlugin]])
2008.11.13 2.4.8 in document.onclick(), if transient panel is not a sliderPanel or floatingPanel, hide it via CSS
2008.10.05 2.4.7 in onClickNestedSlider(), added try/catch around focus() call to prevent IE error if input field being focused on is currently not visible.
2008.09.07 2.4.6 added removeCookie() function for compatibility with [[CookieManagerPlugin]]
2008.06.07 2.4.5 in 'onmouseover' handler for 'open on hover' slider buttons, use call() method when invoking document.onclick function (avoids error in IE)
2008.06.07 2.4.4 changed default for chkFloatingSlidersAnimate to FALSE to avoid clipping problem on some browsers (IE). Updated Morpher hijack (again) to adjust regular sliderPanel styles as well as floatingPanel styles.
2008.05.07 2.4.3 updated Morpher hijack to adjust floatingPanel styles after animation without affecting other animated elements (i.e. popups). Also, updated adjustSliderPos() to account for scrollwidth and use core findWindowWidth().
2008.04.02 2.4.2 in onClickNestedSlider, handle clicks on elements contained //within// slider buttons (e.g., when using HTML to display an image as a slider button).
2008.04.01 2.4.1 open on hover also triggers document.onclick to close other transient sliders
2008.04.01 2.4.0 re-introduced 'open on hover' feature using "@" symbol
2008.03.26 2.3.5 in document.onclick(), if click is in popup, don't dismiss transient panel (if any)
2008.01.08 [*.*.*] plugin size reduction: documentation moved to …Info tiddler
2007.12.28 2.3.4 added hijack for Animator.prototype.startAnimating(). Previously, the plugin code simply set the overflow to "visible" after animation. This code tweak corrects handling of elements that were styled with overflow=hidden/auto/scroll before animation by saving the overflow style and then restoring it after animation has completed.
2007.12.17 2.3.3 use hasClass() instead of direct comparison to test for "floatingPanel" class. Allows floating panels to have additional classes assigned to them (i.e., by AnimationEffectsPlugin).
2007.11.14 2.3.2 in onClickNestedSlider(), prevent SHIFT-click events from opening a new, empty browser window by setting "cancelBubble=true" and calling "stopPropagation()". Note: SHIFT-click is still processed as a normal click (i.e., it toggles the slider panel display). Also, using SHIFT-click will prevent 'transient' sliders from being automatically closed when another slider is opened, allowing you to *temporarily* display several transient sliders at once.
2007.07.26 2.3.1 in document.onclick(), propagate return value from hijacked core click handler to consume OR bubble up click as needed. Fixes "IE click disease", whereby nearly every mouse click causes a page transition.
2007.07.20 2.3.0 added syntax for setting panel ID (#panelID:). This allows individual slider panels to be repositioned within tiddler content simply by giving them a unique ID and then moving them to the desired location using the {{{<<DOM move id>>}}} macro.
2007.07.19 2.2.0 added syntax for alttext and alttip (button label and tooltip to be displayed when panel is open)
2007.07.14 2.1.2 corrected use of 'transient' attribute in IE to prevent (non-recursive) infinite loop
2007.07.12 2.1.0 replaced use of "*" for 'open/close on rollover' (which didn't work too well). "*" now indicates 'transient' panels that are automatically closed if a click occurs somewhere else in the document. This permits use of nested sliders to create nested "pulldown menus" that automatically disappear after interaction with them has been completed. Also, in onClickNestedSlider(), use "theTarget.sliderCookie", instead of "this.sliderCookie" to correct cookie state tracking when automatically dismissing transient panels.
2007.06.10 2.0.5 add check to ensure that window.adjustSliderPanel() is defined before calling it (prevents error on shutdown when mouse event handlers are still defined)
2007.05.31 2.0.4 add handling to invoke adjustSliderPanel() for onmouseover events on slider button and panel. This allows the panel position to be re-synced when the button position shifts due to changes in unrelated content above it on the page. (thanks to Harsha for bug report)
2007.03.30 2.0.3 added chkFloatingSlidersAnimate (default to FALSE), so that slider animation can be disabled independent of the overall document animation setting (avoids strange rendering and focus problems in floating panels)
2007.03.01 2.0.2 for TW2.2+, hijack Morpher.prototype.stop so that "overflow:hidden" can be reset to "overflow:visible" after animation ends
2007.03.01 2.0.1 in hijack for Slider.prototype.stop, use apply() to pass params to core function
2006.07.28 2.0.0 added custom class syntax around label/tip/key syntax: {{{{{classname{[label=key|tip]}}}}}}
2006.07.25 1.9.3 when parsing slider, save default open/closed state in button element, then in onClickNestedSlider(), if slider state matches saved default, instead of saving cookie, delete it. Significantly reduces the 'cookie overhead' when default slider states are used.
2006.06.29 1.9.2 in onClickNestedSlider(), when setting focus to first control, skip over type="hidden"
2006.06.22 1.9.1 added panel.defaultPanelWidth to save requested panel width, even after resizing has changed the style value
2006.05.11 1.9.0 added optional '^width^' syntax for floating sliders and '=key' syntax for setting an access key on a slider label
2006.05.09 1.8.0 in onClickNestedSlider(), when showing panel, set focus to first child input/textarea/select element
2006.04.24 1.7.8 in adjustSliderPos(), if floating panel is contained inside another floating panel, subtract offset of containing panel to find correct position
2006.02.16 1.7.7 corrected deferred rendering to account for use-case where show/hide state is tracked in a cookie
2006.02.15 1.7.6 in adjustSliderPos(), ensure that floating panel is positioned completely within the browser window (i.e., does not go beyond the right edge of the browser window)
2006.02.04 1.7.5 add 'var' to unintended global variable declarations to avoid FireFox 1.5.0.1 crash bug when assigning to globals
2006.01.18 1.7.4 only define adjustSliderPos() function if it has not already been provided by another plugin. This lets other plugins 'hijack' the function even when they are loaded first.
2006.01.16 1.7.3 added adjustSliderPos(place,btn,panel,panelClass) function to permit specialized logic for placement of floating panels. While it provides improved placement for many uses of floating panels, it exhibits a relative offset positioning error when used within *nested* floating panels. Short-term workaround is to only adjust the position for 'top-level' floaters.
2006.01.16 1.7.2 added button property to slider panel elements so that slider panel can tell which button it belongs to. Also, re-activated and corrected animation handling so that nested sliders aren't clipped by hijacking Slider.prototype.stop so that "overflow:hidden" can be reset to "overflow:visible" after animation ends
2006.01.14 1.7.1 added optional "^" syntax for floating panels. Defines new CSS class, ".floatingPanel", as an alternative for standard in-line ".sliderPanel" styles.
2006.01.14 1.7.0 added optional "*" syntax for rollover handling to show/hide slider without requiring a click (Based on a suggestion by tw4efl)
2006.01.03 1.6.2 When using optional "!" heading style, instead of creating a clickable "Hn" element, create an "A" element inside the "Hn" element. (allows click-through in SlideShowPlugin, which captures nearly all click events, except for hyperlinks)
2005.12.15 1.6.1 added optional "..." syntax to invoke deferred ('lazy') rendering for initially hidden sliders
removed checkbox option for 'global' application of lazy sliders
2005.11.25 1.6.0 added optional handling for 'lazy sliders' (deferred rendering for initially hidden sliders)
2005.11.21 1.5.1 revised regular expressions: if present, a single newline //preceding// and/or //following// a slider definition will be suppressed so start/end syntax can be place on separate lines in the tiddler 'source' for improved readability. Similarly, any whitespace (newlines, tabs, spaces, etc.) trailing the 'start slider' syntax or preceding the 'end slider' syntax is also suppressed.
2005.11.20 1.5.0 added (cookiename) syntax for optional tracking and restoring of slider open/close state
2005.11.11 1.4.0 added !!!!! syntax to render slider label as a header (Hn) style instead of a button/link style
2005.11.07 1.3.0 removed alternative syntax {{{(((}}} and {{{)))}}} (so they can be used by other formatting extensions) and simplified/improved regular expressions to trim multiple excess newlines
2005.11.05 1.2.1 changed name to NestedSlidersPlugin
2005.11.04 1.2.0 added alternative character-mode syntax {{{(((}}} and {{{)))}}}
tweaked "eat newlines" logic for line-mode {{{+++}}} and {{{===}}} syntax
2005.11.03 1.1.1 fixed toggling of default tooltips ("more…" and "less…") when a non-default button label is used. code cleanup, added documentation
2005.11.03 1.1.0 changed delimiter syntax from {{{(((}}} and {{{)))}}} to {{{+++}}} and {{{===}}}. changed name to EasySlidersPlugin
2005.11.03 1.0.0 initial public release
<<<
[[Настройки интерфейса|SystemSettings]] для изменения вида TiddlyWiki, которые сохраняются программой просмотра
Ваше имя для подписывания правок. Можете записать его как WikiWord (к примеру, JoeBloggs)
<<option txtUserName>>
<<option chkSaveBackups>> Резервная копия
<<option chkAutoSave>> Автосохранение
<<option chkRegExpSearch>> Регулярные выражения
<<option chkCaseSensitiveSearch>> Чувствительность к регистру
<<option chkAnimate>> Анимация
----
[[Начальные настройки|GettingStarted]]
[[Расширенные настройки|AdvancedOptions]]
@@color:green;font-size:.9em;© [[Jeremy Ruston|http://www.tiddlywiki.com/#JeremyRuston]], v.<<version>>, [[vmunt]], 2014@@ [[Конфигурирование|GettingStarted]]
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::HeaderTop]] [[ColorPalette::HeaderBottom]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class="topSearch"><span macro='search ""'></span></div>
</div>
<div id='sidebar'>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<!-- vmunt: Tabs slider inserted to SideBarOptions -->
<!-- <div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div> -->
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<<newTiddler>><<permaview>>{{remark{<<unsavedChanges inline "<br>">>}}}<<saveChanges>><<closeAll>><<slider chkSliderOptionsPanel OptionsPanel "настройки »" "Изменение настроек TiddlyWiki">> <<slider chkSliderHistoryPanel SideBarTabs "история »" "Панель истории изменений и прочих списков заметок">>
<<tabs txtMainTab "нет" "Отсутствующие заметки" TabMoreMissing "потери" "Потерянные заметки" TabMoreOrphans "метки" "Все метки" TabTags "история" "История" TabTimeline "все" "Все заметки" TabAll "служебные" "Служебные заметки" TabMoreShadowed>>
Дополнительная информация
/***
!New predefined decoration styles, fixed colors {{remark{(see «Стилевое оформление» tiddler in tutorial for details)}}}
***/
/*{{{*/
.accent { color:[[ColorPalette::TiddlerAccent]];font-style:oblique;font-weight:bold } /* Выделение, акцент на слово или на фразу (Highlighting of important words, themes) */
.alert { color:red } /* Места, требующие особого внимания (Attension text, places) */
.author { color:[[ColorPalette::TiddlerAccent]];font-style:italic;text-align:right } /* Автор публикации (Author name, sign) */
.prefix { font-weight:bold } /* Prompt for text in forms, tables */
.remark { color:[[ColorPalette::TiddlerRem]];font-size:.9em;font-style:italic;margin-bottom:6px;margin-top:6px } /* Примечания переводчика или мои (Remarks, comments, notes) */
.remark CODE,
.remark PRE { font-style:normal;font-size:1.4em } /* Text TT, KBD, SAMP+.remark in FireFox under Linux not shown because font-family:-moz-fixed;font-style:italic; type face is missing */
/*
.remark CODE { color:#840 }
.remark PRE { color:#600 }
*/
.source { color:[[ColorPalette::TiddlerRef]];display:block;float:right;font-style:italic } /* Reference to the source of publication;text-align:right */
.trans,
.titled { color:[[ColorPalette::TiddlerAccent]];font-style:italic;font-weight:bold } /* Word or phrase with floating title (can be used only in HTML mode) */
/*}}}*/
/***
!Change common decoration styles
***/
/*{{{*/
H1, H2, H3, H4, H5, H6 { font-style:italic;padding:0px;text-align:left }
H1, H2 { border-bottom:2px solid [[ColorPalette::TertiaryLight]];margin-bottom:3px;margin-top:6px }
H3, H4, H5, H6 { border-bottom:1px solid [[ColorPalette::TertiaryLight]];margin-bottom:2px;margin-top:3px }
H1 A, H2 A, H3 A, H4 A, H5 A { color:[[ColorPalette::SecondaryDark]] }
BLOCKQUOTE {
background-color:[[ColorPalette::TertiaryPale]];
border-bottom:1px solid [[ColorPalette::TertiaryMid]];border-top:1px solid [[ColorPalette::TertiaryMid]];
border-left:2px solid [[ColorPalette::TertiaryMid]];border-right:2px solid [[ColorPalette::TertiaryMid]];
margin:10px;
padding:5px 10px;
}
BLOCKQUOTE P { color:[[ColorPalette::PrimaryDark]];margin:2px 0px;text-indent:0px } <!-- font-size:0.9em;font-style:italic; -->
BLOCKQUOTE LI { text-align:justify } <!-- font-size:0.9em;font-style:italic;margin:4px 0px; -->
LI { margin:4px 0px 4px 25px;text-align:justify }
TD.odd, TR.odd, TR.oddRow { background-color:[[ColorPalette::TiddlerBg]] }
TD.even, TD.evn, TR.even, TR.evn, TR.evenRow { background-color:[[ColorPalette::TiddlerEven]] }
.viewer { border-top:1px solid [[ColorPalette::TertiaryLight]];padding-top:5px;text-align:justify }
.viewer UL,
.viewer OL { margin-left:0px;margin-bottom:.5em;margin-top:.5em;padding-left:0px;-moz-padding-start:30px }
.viewer .listTitle { margin-left:0px }
.viewer PRE { background-color:[[ColorPalette::PreBg]];border:1px solid [[ColorPalette::PreBorder]];margin:6px 0px }
.viewer TABLE { margin-left:4px;margin-right:4px } <!-- margin:5px 4px -->
.viewer TH { background-color:[[ColorPalette::TableHeaderBg]];color:[[ColorPalette::TableHeader]];text-align:center }
.viewer TH A { color:[[ColorPalette::TableHeaderRef]] }
.viewer TH A:hover { background-color:[[ColorPalette::TableHeaderRef]];color:[[ColorPalette::TableHeaderBg]] }
/*}}}*/
/***
!Define level 2-5 table header styles {{remark{(turns on by ~TableHeadersPlugin)}}}
***/
/*{{{*/
.viewer TH.th2 { background-color:[[ColorPalette::TableHeader2Bg]];color:[[ColorPalette::TableHeader2]] }
.viewer TH.th3 { background-color:[[ColorPalette::TableHeader3Bg]];color:[[ColorPalette::TableHeader3]] }
.viewer TH.th4 { background-color:[[ColorPalette::TableHeader4Bg]];color:[[ColorPalette::TableHeader4]] }
.viewer TH.th5 { background-color:[[ColorPalette::TableHeader5Bg]];color:[[ColorPalette::TableHeader5]] }
.viewer TH.th2 A { color:[[ColorPalette::TableHeader2Ref]] }
.viewer TH.th3 A { color:[[ColorPalette::TableHeader3Ref]] }
.viewer TH.th4 A { color:[[ColorPalette::TableHeader4Ref]] }
.viewer TH.th5 A { color:[[ColorPalette::TableHeader5Ref]] }
.viewer TH.th2 A:hover { background-color:[[ColorPalette::TableHeader2Ref]];color:[[ColorPalette::TableHeader2Bg]] }
.viewer TH.th3 A:hover { background-color:[[ColorPalette::TableHeader3Ref]];color:[[ColorPalette::TableHeader3Bg]] }
.viewer TH.th4 A:hover { background-color:[[ColorPalette::TableHeader4Ref]];color:[[ColorPalette::TableHeader4Bg]] }
.viewer TH.th5 A:hover { background-color:[[ColorPalette::TableHeader5Ref]];color:[[ColorPalette::TableHeader5Bg]] }
/*}}}*/
/***
!Page view customisation
***/
/*{{{*/
#mainMenu FIELDSET {
margin:-3px -3px 3px;
padding:3px;
}
#mainMenu FIELDSET LEGEND {
margin:-2px 2px;
}
P { margin:5px 0px;padding:0px;text-align:justify;text-indent:25px }
.source { color:#080;font-style:italic;text-align:right } /* Ссылка на источник публикации */
.trans,
.titled { color:#060;font-style:italic;font-weight:bold } /* Слово, имеющее всплывающую расшифровку */
SAMP { color:blue }
CITE { color:#006 }
CODE {}
DIV.cite { border:1px solid #666 }
DIV.cite P { color:#004;font-style:italic;margin:4px 25px 4px 25px;text-align:left;text-indent:0px } /* Цитата, взятая из какого-либо источника */
.txtOptionInput { width:11.5em } /* Длина строк ввода (например, имени пользователя) */
/*}}}*/
/*{{{*/
DIV.tiddler { padding-top:6px }
DIV.toolbar { margin-top:4px }
DIV.toolbar A { } /* white-space:nowrap */
DIV.topSearch INPUT.txtOptionInput { width:18em } /* Длина строки поиска в заголовке */
DIV.topSearch { position:absolute;right:12px;top:21px } /* Специальный класс для строки поиска в заголовке (используется в PageTemplate */
DIV.topSearch A,
DIV.topSearch A:visited { border:none;color:white }
DIV.topSearch A:hover { color:#FFEE88 }
DIV.topSearch INPUT { margin-left:.5em }
A.tiddlyLink { color:#064;padding-left:1px;padding-right:1px }
A.tiddlyLink:hover { background-color:#064;color:#fff }
DIV.sliderPanel { padding-left:10px }
TR.info { height:1% } /* Непустые строки в анкетах. Используется для установления минимально необходимой высоты, чтобы пустая строка заполнила всё пространство при объединении ячеек по строкам */
TD.ask { font-style:normal;text-align:right }
TD.num { padding:0px 5px;text-align:right } /* Колонка нумерации */
TD.mark { background-color:#afa;text-align:center } /* Выделенная ячейка расписания */
TD.mid, TD.midb { text-align:center } /* Ячейки с выравниванием по центру */
TD.midb { font-weight:bold }
TD.left { text-align:left } /* padding:1em;text-indent:-1em; Ячейки с выравниванием по левому краю и абзацным выступом */
TD.pic,
DIV.pic { border:1px solid #cc4;padding:10px;text-align:center;text-size:.8em;width:150px }
DIV.pic { float:left;margin:0px 10px 10px 0px }
DIV.cite { border:1px solid #666 }
DIV.cite P { color:#004;font-style:italic;margin:4px 25px 4px 25px;text-align:left;text-indent:0px } /* Цитата, взятая из какого-либо источника */
/* Оформление для таблиц назначений контактов в разъёмах */
TABLE.pinLayout { border:0px solid black;border-collapse:collapse }
TABLE.pinLayout TR { border:none }
TD.ld { border:none;font-size:6pt;padding:0px 6px 0px 2px;text-align:right } /* Описание слева */
TD.rd { border:none;font-size:6pt;padding:0px 2px 0px 6px;text-align:left } /* Описание справа */
TD.pin { border:1px solid darkblue;height:10px;width:10px;padding:0px } /* Сам контакт */
TD.sp { border:none } /* пустые места, обрамление разъёма */
.headerForeground,
.headerShadow { padding:1em 0em 1em 1em }
.headerShadow { left:2px;top:2px } /* Отступ тени в заголовке */
.siteTitle { font-size:2em }
.siteSubtitle { font-size:1em;font-style:italic;margin-left:.5em;vertical-align:.25em }
#contentWrapper { display:block } /* #pageFrame, , HTML, BODY height:100%;min-height:100%*/
#pageFrame { height: auto !important }
#footerPanel { color:[[ColorPalette::FooterText]];background-color:[[ColorPalette::FooterTop]];border:1px solid [[ColorPalette::FooterBorder]];height:1.7em;font-size:1em;margin:-2.3em 1em 0 15.8em;padding:.5em 1em 0em }
#pageFooterLimiter { height:2.3em }
#pageFooter { font-size:.9em }
#pageFooter A { color:[[ColorPalette::FooterRef]] }
#pageFooter A:hover { background-color:[[ColorPalette::FooterRef]];color:[[ColorPalette::FooterTop]] }
#displayArea { margin:1em 1em 0 15.8em }
#displayArea A { white-space:nowrap }
#sidebar { float:left;left:0;right:auto;padding-left: 0.5em;padding-right: 0.5em;top:auto;width:16em }
#mainMenu { background-color:#fff;border:1px solid #ccc;margin-left:0px;margin-top:1em;padding:.5em;position:static;text-align:right;width:13.35em } /* 13.5 */
.tiddler { background-color:#fff;border:1px solid #ccc;margin:5px 0;padding:10px;position:auto }
#sidebarOptions .sliderPanel { background-color:#ddd;font-size:1em;margin-left:0px;margin-right:0px }
#sidebarOptions .sliderPanel A.tabSelected,
#sidebarOptions .sliderPanel A.tabUnselected {
border-left:1px solid #aaa;
border-right:1px solid #aaa;
border-top:1px solid #aaa;
border-top-left-radius:3px;
border-top-right-radius:3px;
color:#042;
font-weight:normal;
margin:0px 1px;
padding:0px 3px
}
#sidebarOptions .sliderPanel A.tabSelected:hover,
#sidebarOptions .sliderPanel A.tabUnselected:hover { background-color:#042;color:#fff }
#sidebarOptions A { margin-left:0px;margin-right:0px;padding-left:.5em;padding-right:.5em }
#sidebarOptions .sliderPanel A.tabSelected { margin:0px;padding:2px 5px 1px }
.tabUnselected { background-color:#c8c8c8 } /* Заголовок неактивной закладки в боковой панели истории */
#sidebarOptions .sliderPanel A.tiddlyLink { color:#042;padding:0px 2px }
#sidebarOptions .sliderPanel A.tiddlyLink:hover { background-color:#042;color:#fff }
#sidebarOptions .sliderPanel A.tiddlyLinkNonExisting { font-weight:normal }
#sidebarOptions .sliderPanel A.tiddlyLinkNonExisting.shadow { font-weight:bold }
#sidebar LI { padding-left:1em;text-align:left;text-indent:-1em }
#sidebar LI.listTitle { padding-left:0px;text-indent:0px }
.tabset { padding-top:.5em }
.tabContents { overflow:hidden }
.tabSetWrapper LI,
.tabContents LI { margin:0px } /* Элементы списка в боковых меню (история, прочее) */
.subtitle { margin-top:4px }
.editor { margin-bottom:2px;margin-top:2px }
.annotation { margin:4px -2px 4px 0px }
.tagging, .tagged { float:right;margin:5px 0px 0px;padding:0 }
.tagging UL,
.tagged UL { margin:0px }
.tagging LI,
.tagged LI { float:left;margin-left:0px;padding-left:.5em;padding-right:.5em }
/*}}}*/
/***
|!Дата|!Изменение|
|17.10.2013|Изменил форматирование blockquote. Подсветил сереньким, убрал лишние отступы|
|19.03.2013|Поменял порядок в SideBarTabs и чуток подправил границы закладок. Закруглил краешки закладок|
|18.06.2011|Сделал стилевую поддержку для заголовков второго–пятого уровней в таблицах {{remark{(сама поддержка таких заголовков включается плагином TableHeadersPlugin)}}}|
|08.05.2011|Внутри displayArea {{remark{(в заметках)}}} для гиперссылок поставлен запрет переноса на другую строку {{remark{(чтобы не разрывать ссылку на несколько строк, ибо часто некрасиво получается)}}}|
|20.03.2011|Сделан левый отступ для sliderPanel. Теперь вложенные sliderPanel имеют визуальную ступенчатую структуру |
|02.03.2011|Добавлены стили перекрёстных ссылок в заголовках {{remark{(для лучшего распознавания сдвигающихся/раздвигающихся текстов)}}} |
|02.02.2011|Добавлены стили для оформления подвала {{remark{(pageFrame, pageFooter, pageFooterLimiter)}}} |
|31.12.2011|Добавлен стиль {{{.viewer TH A}}} для установления цвета ссылок в заголовках таблиц с указанием цвета текста из параметра [[ColorPalette::TableHeaderRef|ColorPalette]] |
|03.11.2010|Добавлен стиль {{{.viewer TH}}} с указанием параметрических цветов текста [[ColorPalette::TableHeader|ColorPalette]] и фона [[ColorPalette::TableHeaderBg|ColorPalette]], плюс тег {{{.viewer PRE}}} тоже сделан параметрическим {{remark{(введены параметры [[ColorPalette::PreBg|ColorPalette]] и [[ColorPalette::PreBorder|ColorPalette]])}}}|
|15.10.2010|К стилю {{{tabContents}}} добавлено свойство {{{overflow:hidden}}} для того, чтобы длинные слова не вылазили за рамку истории|
|14.10.2010|Введён стиль ячейки {{{TD.left}}} с выравниванием по левому краю и абзацным выступом и определены стили {{{TR.oddRow}}} и {{{TR.evenRow}}}|
|20.09.2010|Изменил цвет внутренних ссылок TiddlyWiki, чтобы они чуток отличались цветом от внешних ссылок. Удобно при импортировании текстов с других сайтов, чтобы отличать ссылки, которые уже исправлены на ссылки внутри TiddlyWiki, и которые ещё нет.|
|16.09.2010|Присваивание специфических для {{{DIV.pic}}} параметров {{remark{(float:left в частности)}}} {{{TD.pic}}}-у решено признать неудачной идеей…|
|06.09.2010|Чуток приподнял subtitle в заголовке, чтобы текст смотрелся посередине заголовка {{remark{(ну и при уменьшении ширины экрана чтобы меньше с поиском пересекалось)}}}|
|30.08.2010|Изменена длина строки поиска в заголовке {{remark{(стиль DIV.topSearch)}}}|
|24.08.2010|Добавлен стиль {{{TD.pic}}} и {{{DIV.pic}}} для вставок картинок и оформления галерей|
|20.08.2010|Включена заметная тень заголовка {{remark{(.headerShadow left&top)}}}|
|03.08.2010|Изменено расположение блока меток, для этого изменены стили {{{.tagging}}} и {{{.tagged}}}|
|02.08.2010|Включено выравнивание текста в заметках по ширине {{remark{(стиль .viewer)}}}. Оставлено центрирование заголовков таблиц {{remark{(стиль .viewer TH)}}}. Сделан отступ от правого края списков в истории {{remark{(стили #sidebar LI и #sidebar LI.listTitle)}}}. Убран устаревший стиль {{{LI.listLink}}}|
***/
/*{{{*/
A.image:hover { background-color:white;text-decoration:none; }
A.image IMG:hover { border:1px dotted red;margin:-2px -2px;padding:1px 1px }
.editor TEXTAREA {
font-family:Courier,"Courier New",monospace; /* Courier,"Courier New",monospace; Monaco,"Lucida Console",monospace */
font-size:.9em;
}
/*}}}*/
/***
!Выделение чередования строк в сортированном столбце
***/
/*{{{*/
TABLE.sortable TR.odd TD.sortedCol,
TABLE.sortable TR.oddRow TD.sortedCol { background: none repeat scroll 0 0 #ffffe0 }
TABLE.sortable TR.evn TD.sortedCol,
TABLE.sortable TR.evenRow TD.sortedCol { background: none repeat scroll 0 0 #f4f4ca }
/*}}}*/
/***
!Оформление таблиц описаний функций
***/
/*{{{*/
/*
.functions TR.even,
.functions TR.evenRow { background-color:#F4F4F4 }
*/
.functions TH.th2,
.functions TH.th3,
.functions TH.th4,
.functions TH.th5 { text-align:left }
.functions TH.th2 { padding-left:1em }
/*
.functions TH { font-weight:normal;text-align:left }
.functions TH { background-color:[[ColorPalette::TertiaryLight]];color:[[ColorPalette::Foreground]] }
*/
.functions TH.th2 { background-color:[[ColorPalette::TableHeader2Bg]];color:[[ColorPalette::TableHeader2]] }
.functions TH.th3 { background-color:[[ColorPalette::TableHeader3Bg]];color:[[ColorPalette::TableHeader3]] }
.functions TH.th4 { background-color:[[ColorPalette::TableHeader4Bg]];color:[[ColorPalette::TableHeader4]] }
.functions TH.th5 { background-color:[[ColorPalette::TableHeader5Bg]];color:[[ColorPalette::TableHeader5]] }
/*}}}*/
/***
|Name|StyleSheetLocalPlugin|
|Source|http://vmunt.site/tw/plugins/styleSheetLocalPlugin.html|
|Version|0.0.4|
|Author|vmunt|
|License|Use it free|
|~CoreVersion|2.6|
|Type|plugin|
|Description|This plugin supports two user stylesheet tables: [[StyleSheet]] and <<option txtLocalStyleSheetName>> {{remark{(last tiddler name may be changed locally)}}}|
When user imports themes from other resources into its own ~TiddlyWiki, its replaces entire StyleSheet tiddler usually. But if user already used his own styles, it's will be lost in this case. So this macro alloys to users who likes to experiments with another themes in yours documents move its own important styles to another {{remark{(local)}}} stylesheet tiddler and makes its styles safer.
!Version history
|0.0.4|Inserts getRecursiveTiddlerText() function for enabling ColorPalette colors substitute in StyleSheet:local|
|0.0.3|First realisation|
!Code
***/
//{{{
if (config.options.txtLocalStyleSheetName==undefined) config.options.txtLocalStyleSheetName="StyleSheet:local";
if (config.optionsDesc["txtLocalStyleSheetName"]==undefined) config.optionsDesc["txtLocalStyleSheetName"]="Name of the tiddler with local stylesheet table";
if (!version.extensions.LocalStyleSheetPlugin) {
version.extensions.LocalStyleSheetPlugin = {
major: 0, minor: 0, revision: 3, source: "http://vmunt.site/", copyright: "vmunt, 2011",
lssId: "StyleSheetLocal",
lastLssName: config.options.txtLocalStyleSheetName,
initTimeout: 1,
initialised:false,
init:function() {
if (version.extensions.LocalStyleSheetPlugin.initialised)
removeStyleSheet(this.lssId); // jQuery.stylesheet.remove(this.lssId);
version.extensions.LocalStyleSheetPlugin.initialised = true;
var css=store.getTiddlerText(config.options.txtLocalStyleSheetName);
if (!css) {
version.extensions.LocalStyleSheetPlugin.initialised = false;
return;
}
setStylesheet(css, store.getRecursiveTiddlerText(this.lssId,"",10)); // text, id
}
}
}
// var initUserStyleSheet = function() { version.extensions.LocalStyleSheetPlugin.init() };
setTimeout(version.extensions.LocalStyleSheetPlugin.init, version.extensions.LocalStyleSheetPlugin.initTimeout);
// hijack store.saveTiddler() to refresh CSS rules in DOM when tiddler StyleSheet:local is changed
if (version.extensions.LocalStyleSheetPlugin.saveTiddler==undefined) {
version.extensions.LocalStyleSheetPlugin.saveTiddler=store.saveTiddler;
store.saveTiddler=function(title,newtitle) {
var t=version.extensions.LocalStyleSheetPlugin.saveTiddler.apply(this,arguments);
if (newtitle==config.options.txtLocalStyleSheetName)
version.extensions.LocalStyleSheetPlugin.init();
return t;
}
}
// hijack store.removeTiddler() to remove CSS rules from DOM when tiddler StyleSheet:local is deleted
if (version.extensions.LocalStyleSheetPlugin.removeTiddler==undefined) {
version.extensions.LocalStyleSheetPlugin.removeTiddler=store.removeTiddler;
store.removeTiddler=function(title) {
version.extensions.LocalStyleSheetPlugin.removeTiddler.apply(this,arguments);
if (title==config.options.txtLocalStyleSheetName)
version.extensions.LocalStyleSheetPlugin.init();
}
}
// hijack changing configuration option for replace local style sheet dynamically
if (version.extensions.LocalStyleSheetPlugin.change==undefined) {
version.extensions.LocalStyleSheetPlugin.change = Tiddler.prototype.changed;
Tiddler.prototype.changed = function() {
version.extensions.LocalStyleSheetPlugin.change.apply(this,arguments);
if (version.extensions.LocalStyleSheetPlugin.lastLssName!=config.options.txtLocalStyleSheetName)
version.extensions.LocalStyleSheetPlugin.init();
}
}
//}}}
/***
!Проблема
Современная ~TiddlyWiki включает в себя возможности изменения вида {{remark{(в том числе и путём установки тем оформления и цветовых палитр, создаваемых как самим пользователем, так и разработанных другими людьми)}}}. Пользовательское стилевое оформление {{remark{(сохраняемое в стилевой таблице [[StyleSheet]])}}} в случае установки другой темы {{remark{(которая перезапишет содержимое этой заметки на своё содержимое)}}} в этом случае будет потеряно. Конечно, для отдельных заметок можно сохранять стилевое оформление прямо в данной заметке {{remark{(непосредственно с помощью {{{<html><style type="text/css">…</style></html>}}})}}}, но в случае оформления нескольких заметок в одном стиле это решение становится совершенно неприемлемым. Соответственно, стилевое оформление, используемое строго внутри данного документа, требуется хранить где-то ещё.
!Решение
Модуль [[StyleSheetLocalPlugin]] дополняет стилевые таблицы браузера таблицей, содержащейся в заметке <<option txtLocalStyleSheetName>>. Имя по умолчанию для этой заметки выбрано [[StyleSheet:local]], но на любом компьютере его можно при желании изменить, получив дополнительные эффекты:
# у всех этот документ, например, отображается с белым фоном, а у Вас — с чёрным, или
# сохранив несколько разных локальных стилевых таблиц в документе, можно быстро менять цвета элементов оформления в зависимости от каких-либо условий {{remark{(смены настроения, яркости света в помещении, прочее)}}}.
Думаю, для удобства таблицы с разными цветовыми оформлениями можно даже помечать какой-либо меткой {{remark{(например, {{{Стили}}})}}}.
***/
///%
config.optionsDesc["txtLocalStyleSheetName"]="Имя заметки, содержащей местные правила оформления данного документа";
//%/
chkAllowLinksFromShadowTiddlers: false
chkDisableNonExistingWikiLinks: true
chkDisableWikiLinks: true
chkInsertTabs: true
chkToggleLinks: false
txtDisableWikiLinksList:
txtDisableWikiLinksTag: excludeWikiWords
/***
|''Name:''|TableHeadersPlugin|
|''Version:''|0.1|
|''Description:''|Plugin turn on supports TABLE TH cells with styles th2, th3, th4… for cells with "!!header text", "!!!header text", "!!!header text" and so on|
|''Описание:''|Плагин включает поддержку заголовков таблицы второго, третьего и прочих уровней добавлением стилей th2, th3, th4 и т.д.|
|''CoreVersion:''|2.6.x|
|''Version comment:''|Tested on v.2.6.2|
|''Date:''|2011|
|''Author:''|vmunt|
|''Source:''|http://vmunt.site/tw|
|''License:''|BSD open source license|
***/
//{{{
for(var n=0; n<config.formatters.length; n++) {
if (config.formatters[n].name=='table') {
config.formatters[n].oldRowHandler = config.formatters[n].rowHandler;
config.formatters[n].rowHandler = function(w,e,prevColumns) {
var col = 0;
var colSpanCount = 1;
var prevCell = null;
this.cellRegExp.lastIndex = w.nextMatch;
var cellMatch = this.cellRegExp.exec(w.source);
while(cellMatch && cellMatch.index == w.nextMatch) {
if(cellMatch[1] == "~") {
// Rowspan
var last = prevColumns[col];
if(last) {
last.rowSpanCount++;
last.element.setAttribute("rowspan",last.rowSpanCount);
last.element.setAttribute("rowSpan",last.rowSpanCount); // Needed for IE
last.element.valign = "center";
if(colSpanCount > 1) {
last.element.setAttribute("colspan",colSpanCount);
last.element.setAttribute("colSpan",colSpanCount); // Needed for IE
colSpanCount = 1;
}
}
w.nextMatch = this.cellRegExp.lastIndex-1;
} else if(cellMatch[1] == ">") {
// Colspan
colSpanCount++;
w.nextMatch = this.cellRegExp.lastIndex-1;
} else if(cellMatch[2]) {
// End of row
if(prevCell && colSpanCount > 1) {
prevCell.setAttribute("colspan",colSpanCount);
prevCell.setAttribute("colSpan",colSpanCount); // Needed for IE
}
w.nextMatch = this.cellRegExp.lastIndex;
break;
} else {
// Cell
w.nextMatch++;
var styles = config.formatterHelpers.inlineCssHelper(w);
var spaceLeft = false;
var chr = w.source.substr(w.nextMatch,1);
while(chr == " ") {
spaceLeft = true;
w.nextMatch++;
chr = w.source.substr(w.nextMatch,1);
}
var cell;
if(chr == "!") {
w.nextMatch++;
// vmunt code: insert TH with thN for !!head, !!!head and so on
var thLevel = 1;
while((chr=w.source.substr(w.nextMatch,1))== "!") {
thLevel++;
w.nextMatch++;
}
if(thLevel==1)
cell = createTiddlyElement(e,"th");
else
cell = createTiddlyElement(e,"th",null,'th'+thLevel);
// vmunt code: end
} else {
cell = createTiddlyElement(e,"td");
}
prevCell = cell;
prevColumns[col] = {rowSpanCount:1,element:cell};
if(colSpanCount > 1) {
cell.setAttribute("colspan",colSpanCount);
cell.setAttribute("colSpan",colSpanCount); // Needed for IE
colSpanCount = 1;
}
config.formatterHelpers.applyCssHelper(cell,styles);
w.subWikifyTerm(cell,this.cellTermRegExp);
if(w.matchText.substr(w.matchText.length-2,1) == " ") // spaceRight
cell.align = spaceLeft ? "center" : "left";
else if(spaceLeft)
cell.align = "right";
w.nextMatch--;
}
col++;
this.cellRegExp.lastIndex = w.nextMatch;
cellMatch = this.cellRegExp.exec(w.source);
}
}
}
break;
}
//}}}
/***
|''Name:''|TableSortingPlugin|
|''Description:''|Dynamically sort tables by clicking on column headers|
|''Author:''|Saq Imtiaz ( lewcid@gmail.com )|
|''Source:''|http://tw.lewcid.org/#TableSortingPlugin|
|''Code Repository:''|http://tw.lewcid.org/svn/plugins|
|''Version:''|2.02|
|''Date:''|25-01-2008|
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''~CoreVersion:''|2.2.3|
!!Usage:
* Make sure your table has a header row
** {{{|Name|Phone Number|Address|h}}}<br> Note the /h/ that denote a header row
* Give the table a class of 'sortable'
** {{{
|sortable|k
|Name|Phone Number|Address|h
}}}<br>Note the /k/ that denotes a class name being assigned to the table.
* To disallow sorting by a column, place {{{<<nosort>>}}} in it's header
* To automatically sort a table by a column, place {{{<<autosort>>}}} in the header for that column
** Or to sort automatically but in reverse order, use {{{<<autosort reverse>>}}}
!!Example:
|sortable|k
|Name |Salary |Extension |Performance |File Size |Start date |h
|ZBloggs, Fred |$12000.00 |1353 |+1.2 |74.2Kb |Aug 19, 2003 21:34:00 |
|ABloggs, Fred |$12000.00 |1353 |1.2 |3350b |09/18/2003 |
|CBloggs, Fred |$12000 |1353 |1.200 |55.2Kb |August 18, 2003 |
|DBloggs, Fred |$12000.00 |1353 |1.2 |2100b |07/18/2003 |
|Bloggs, Fred |$12000.00 |1353 |01.20 |6.156Mb |08/17/2003 05:43 |
|Turvey, Kevin |$191200.00 |2342 |-33 |1b |02/05/1979 |
|Mbogo, Arnold |$32010.12 |2755 |-21.673 |1.2Gb |09/08/1998 |
|Shakespeare, Bill |ã122000.00|3211 |6 |33.22Gb |12/11/1961 |
|Shakespeare, Hamlet |ã9000 |9005 |-8 |3Gb |01/01/2002 |
|Fitz, Marvin |â¬3300.30 |5554 |+5 |4Kb |05/22/1995 |
***/
// /%
//!BEGIN-PLUGIN-CODE
config.tableSorting = {
darrow: "▼",
uarrow: "▲",
getText : function (o) {
var p = o.cells[SORT_INDEX];
return p.innerText || p.textContent || '';
},
sortTable : function (o,rev) {
SORT_INDEX = o.getAttribute("index");
var c = config.tableSorting;
var T = findRelated(o.parentNode,"TABLE");
if(T.tBodies[0].rows.length<=1)
return;
var itm = "";
var i = 0;
while (itm == "" && i < T.tBodies[0].rows.length) {
itm = c.getText(T.tBodies[0].rows[i]).trim();
i++;
}
if (itm == "")
return;
var r = [];
var S = o.getElementsByTagName("span")[0];
c.fn = c.sortAlpha;
if(!isNaN(Date.parse(itm)))
c.fn = c.sortDate;
else if(itm.match(/^[$|ã|â¬|\+|\-]{0,1}\d*\.{0,1}\d+$/))
c.fn = c.sortNumber;
else if(itm.match(/^\d*\.{0,1}\d+[K|M|G]{0,1}b$/))
c.fn = c.sortFile;
for(i=0; i<T.tBodies[0].rows.length; i++) {
r[i]=T.tBodies[0].rows[i];
}
r.sort(c.reSort);
if(S.firstChild.nodeValue==c.darrow || rev) {
r.reverse();
S.firstChild.nodeValue=c.uarrow;
}
else
S.firstChild.nodeValue=c.darrow;
var thead = T.getElementsByTagName('thead')[0];
var headers = thead.rows[thead.rows.length-1].cells;
for(var k=0; k<headers.length; k++) {
if(!hasClass(headers[k],"nosort"))
addClass(headers[k].getElementsByTagName("span")[0],"hidden");
}
removeClass(S,"hidden");
for(i=0; i<r.length; i++) {
T.tBodies[0].appendChild(r[i]);
c.stripe(r[i],i);
for(var j=0; j<r[i].cells.length;j++){
removeClass(r[i].cells[j],"sortedCol");
}
addClass(r[i].cells[SORT_INDEX],"sortedCol");
}
},
stripe : function (e,i){
var cl = ["oddRow","evenRow"];
i&1? cl.reverse() : cl;
removeClass(e,cl[1]);
addClass(e,cl[0]);
},
sortNumber : function(v) {
var x = parseFloat(this.getText(v).replace(/[^0-9.-]/g,''));
return isNaN(x)? 0: x;
},
sortDate : function(v) {
return Date.parse(this.getText(v));
},
sortAlpha : function(v) {
return this.getText(v).toLowerCase();
},
sortFile : function(v) {
var j, q = config.messages.sizeTemplates, s = this.getText(v);
for (var i=0; i<q.length; i++) {
if ((j = s.toLowerCase().indexOf(q[i].template.replace("%0\u00a0","").toLowerCase())) != -1)
return q[i].unit * s.substr(0,j);
}
return parseFloat(s);
},
reSort : function(a,b){
var c = config.tableSorting;
var aa = c.fn(a);
var bb = c.fn(b);
return ((aa==bb)? 0 : ((aa<bb)? -1:1));
}
};
Story.prototype.tSort_refreshTiddler = Story.prototype.refreshTiddler;
Story.prototype.refreshTiddler = function(title,template,force,customFields,defaultText){
var elem = this.tSort_refreshTiddler.apply(this,arguments);
if(elem){
var tables = elem.getElementsByTagName("TABLE");
var c = config.tableSorting;
for(var i=0; i<tables.length; i++){
if(hasClass(tables[i],"sortable")){
var x = null, rev, table = tables[i], thead = table.getElementsByTagName('thead')[0], headers = thead.rows[thead.rows.length-1].cells;
for (var j=0; j<headers.length; j++){
var h = headers[j];
if (hasClass(h,"nosort"))
continue;
h.setAttribute("index",j);
h.onclick = function(){c.sortTable(this); return false;};
h.ondblclick = stopEvent;
if(h.getElementsByTagName("span").length == 0)
createTiddlyElement(h,"span",null,"hidden",c.uarrow);
if(!x && hasClass(h,"autosort")) {
x = j;
rev = hasClass(h,"reverse");
}
}
if(x)
c.sortTable(headers[x],rev);
}
}
}
return elem;
};
setStylesheet("table.sortable span.hidden {visibility:hidden;}\n"+
"table.sortable thead {cursor:pointer;}\n"+
"table.sortable .nosort {cursor:default;}\n"+
"table.sortable td.sortedCol {background:#ffc;}","TableSortingPluginStyles");
function stopEvent(e){
var ev = e? e : window.event;
ev.cancelBubble = true;
if (ev.stopPropagation) ev.stopPropagation();
return false;
}
config.macros.nosort={
handler : function(place){
addClass(place,"nosort");
}
};
config.macros.autosort={
handler : function(place,m,p,w,pS){
addClass(place,"autosort"+" "+pS);
}
};
//!END-PLUGIN-CODE
// %/
/***
|''Name:''|TiddlyWiki:rus|
|''Version:''|0.9.7|
|''Description:''|TiddlyWiki russian interface plugin. Supports core up to 2.6.2|
|''Описание:''|Русификация TiddlyWiki. Поддерживает ядро до 2.6.2 включительно|
|''CoreVersion:''|2.6.x|
|''Version comment:''|Tested on v.2.6.0 and 2.6.1|
|''Date:''|2010|
|''Author:''|vmunt|
|''Source:''|http://vmunt.site/tw|
|''License:''|BSD open source license|
|''Idea:''|Глеб Тржемецкий (Gleb Trzhemetski), http://www.glebsite.ru|
***/
//{{{
//-- Строки для перевода
// Строки в "двойных кавычках" должны быть переведены; строки в 'одиночных кавычках' должны быть оставлены как есть
merge(config.tasks,{
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>>'} });
// Options that can be set in the options panel and/or cookies
merge(config.optionsDesc,{
txtUserName: "Имя пользователя для подписывания Ваших правок",
chkRegExpSearch: "Разрешить регулярные выражения при поиске",
chkCaseSensitiveSearch: "Регистро-зависимый поиск",
chkIncrementalSearch: "Последовательный поиск слово-за-словом",
chkAnimate: "Разрешить анимацию",
chkSaveBackups: "Сохранить старую копию при сохранении изменений",
chkAutoSave: "Автоматическое сохранение изменений",
chkGenerateAnRssFeed: "Генерировать RSS-ленту при сохранении изменений",
chkSaveEmptyTemplate: "Генерировать пустой шаблон при сохранении изменений",
chkOpenInNewWindow: "Открывать внешние ссылки в новом окне",
chkToggleLinks: "Нажатие на ссылках для открытия заметок также и закрывает их",
chkHttpReadOnly: "Скрывать возможности редактирования при обращении через протокол HTTP",
chkForceMinorUpdate: "Не обновлять автора изменений и дату редактирования заметок",
chkConfirmDelete: "Спрашивать подтверждение при удалении заметок",
chkInsertTabs: "Использовать клавишу табуляции для вставления символа табуляции вместо перехода по полям",
txtBackupFolder: "Имя папки для резервных копий",
txtMaxEditRows: "Максимальное количество строк в окне редактирования",
txtTheme: "Имя темы для использования",
txtFileSystemCharSet: "Кодировка символов в файле TiddlyWiki для сохранения изменений (только для Firefox/Mozilla)" });
merge(config.messages,{
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'"}); // v.2.6.1
merge(config.messages.messageClose,{text: "[X]", 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 = ["Вс","Пн","Вт","Ср","Чт","Пт","Сб"];
// suffixes for dates, eg "1st","2nd","3rd"…"30th","31st"
config.messages.dates.daySuffixes = [
"-е","-е","-е","-е","-е","-е","-е","-е","-е","-е",
"-е","-е","-е","-е","-е","-е","-е","-е","-е","-е",
"-е","-е","-е","-е","-е","-е","-е","-е","-е","-е",
"-е"];
config.messages.dates.am = "утра";
config.messages.dates.pm = "дня";
merge(config.views.wikified.tag,{
labelNoTags: "меток нет",
labelTags: "метки: ",
openTag: "Открыть метку '%0'",
tooltip: "Показать заметки, помеченные как '%0'",
openAllText: "Открыть всё",
openAllTooltip: "Открыть все эти заметки",
popupNone: "Нет других заметок, помеченных '%0'"});
merge(config.views.wikified,{
defaultText: "Заметка '%0' пока не создана. Создайте её двойным щелчком мышки",
defaultModifier: "(отсутствует)",
shadowModifier: "(встроенная служебная заметка)",
dateFormat: "DD.0MM.YYYY",
createdPrompt: "создана"});
merge(config.views.editor,{
tagPrompt: "Введите метки, разделённые пробелами, в случае необходимости [[используйте двойные квадратные скобки|use double square brackets]], или добавьте существующие метки",
defaultText: "Введите текст для '%0'"});
merge(config.views.editor.tagChooser,{
text: "метки",
tooltip: "Выберите существующую метку для добавления к этой заметке",
popupNone: "Нет ни одной метки",
tagTooltip: "Добавьте метку для '%0'"});
merge(config.messages,{
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"}]});
merge(config.macros.search,{
label: "поиск",
prompt: "Поиск в этой TiddlyWiki",
accessKey: "F",
successMsg: "Найдено %0 заметок с текстом %1",
failureMsg: "Нет ни одной заметки с текстом %0"});
merge(config.macros.tagging,{
label: "метки: ",
labelNotTag: "(нет меток)",
tooltip: "Список заметок, помеченных как '%0'"});
merge(config.macros.timeline,{
dateFormat: "DD.0MM.YYYY"});
merge(config.macros.allTags,{
tooltip: "Показать заметки, помеченные как '%0'",
noTags: "Нет ни одной помеченной заметки"});
config.macros.list.all.prompt = "Все заметки в алфавитном порядке";
config.macros.list.missing.prompt = "Отсутствующие заметки, на которые при этом есть ссылки с других заметок";
config.macros.list.orphans.prompt = "Заметки, на которые нет ни одной ссылки из других заметок";
config.macros.list.shadowed.prompt = "Служебные заметки";
config.macros.list.touched.prompt = "Заметки, которые были изменены";
merge(config.macros.closeAll,{
label: "закрыть всё",
prompt: "Закрыть все отображённые заметки (за исключением заметок в состоянии правки)"});
merge(config.macros.permaview,{
label: "прямая ссылка",
prompt: "Создание адресной строки для открытия TiddlyWiki с текущими открытыми заметками"});
merge(config.macros.saveChanges,{
label: "сохранить",
prompt: "Сохранение TiddlyWiki со всеми заметками",
accessKey: "S"});
merge(config.macros.newTiddler,{
label: "новая заметка",
prompt: "Создать новую заметку",
title: "Новая заметка",
accessKey: "N"});
merge(config.macros.newJournal,{
label: "новая запись",
prompt: "Создать новую заметку с текущей датой и временем",
accessKey: "J"});
merge(config.macros.options,{
wizardTitle: "Расширенные пункты настройки",
step1Title: "Эти настройки Ваша программа просмотра сохраняет с помощью cookies",
step1Html: "<input type='hidden' name='markList'></input><br><input type='checkbox' checked='false' name='chkUnknown'>Показать настройки без описания</input>",
unknownDescription: "//(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'} ]}
});
merge(config.macros.plugins,{
wizardTitle: "Управление модулями",
step1Title: "Подключенные модули",
step1Html: "<input type='hidden' name='markList'></input>", // DO NOT TRANSLATE
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'}
]}
});
merge(config.macros.toolbar,{
moreLabel: "ещё",
morePrompt: "Показать дополнительные команды",
lessLabel: "кратко",
lessPrompt: "Скрыть дополнительные команды",
separator: "|" });
merge(config.macros.refreshDisplay,{
label: "обновить",
prompt: "Обновить отображение TiddlyWiki" });
merge(config.macros.importTiddlers,{
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", // v.2.6.0, removed in v.2.6.1
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>", // DO NOT TRANSLATE
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: []
} });
merge(config.macros.upgrade,{
wizardTitle: "Обновление кода ядра TiddlyWiki",
step1Title: "Обновление или восстановление этой TiddlyWiki до последней версии",
step1Html: "Вы готовы обновить код ядра TiddlyWiki до последней версии (с адреса <a href='%0' class='externalLink' target='_blank'>%1</a>). Информационное наполнение этого файла будет сохранено.<br><br>Заметьте, что обновление кода ядра может вызвать конфликт с уже подключенными старыми модулями. Если у Вас появились проблемы с обновлённым файлом, почитайте здесь: <a href='http://www.tiddlywiki.org/wiki/CoreUpgrades' class='externalLink' target='_blank'>http://www.tiddlywiki.org/wiki/CoreUpgrades</a>",
errorCantUpgrade: "Не могу обновить эту 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"
});
merge(config.macros.sync,{
listViewTemplate: {
columns: [
{name: 'Selected', field: 'selected', rowName: 'title', type: 'Selector'},
{name: 'Tiddler', field: 'tiddler', title: "Заметка", type: 'Tiddler'},
{name: 'Server Type', field: 'serverType', title: "Тип сервера", type: 'String'},
{name: 'Server Host', field: 'serverHost', title: "Хранилище сервера (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>", // DO NOT TRANSLATE
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'} } });
merge(config.macros.annotations,{});
merge(config.commands.closeTiddler,{
text: "закрыть",
tooltip: "Закрыть эту заметку"});
merge(config.commands.closeOthers,{
text: "закрыть другие",
tooltip: "Закрыть все другие заметки"});
merge(config.commands.editTiddler,{
text: "правка",
tooltip: "Исправить эту заметку",
readOnlyText: "просмотр",
readOnlyTooltip: "Просмотр исходного текста этой заметки"});
merge(config.commands.saveTiddler,{
text: "сохранить",
tooltip: "Сохранить изменения этой заметки"});
merge(config.commands.cancelTiddler,{
text: "отмена",
tooltip: "Отменить изменение этой заметки",
warning: "Вы действительно уверены, что Вы хотите потерять все Ваши изменения заметки '%0'?",
readOnlyText: "возврат",
readOnlyTooltip: "Просмотр этой заметки в нормальном режиме"});
merge(config.commands.deleteTiddler,{
text: "удалить",
tooltip: "Удалить эту заметку",
warning: "Вы уверены, что хотите удалить '%0'?"});
merge(config.commands.permalink,{
text: "прямая ссылка",
tooltip: "Адресная строка для этой заметки"});
merge(config.commands.references,{
text: "ссылки",
tooltip: "Показать все заметки, которые ссылаются на эту заметку",
popupNone: "Нет ссылок"});
merge(config.commands.jump,{
text: "переход",
tooltip: "Переход на другую открытую заметку"});
merge(config.commands.syncing,{
text: "синхронизация",
tooltip: "Управление синхронизацией этой заметки с сервером или внешним файлом",
currentlySyncing: "<div>Синхронизирую с помощью <span class='popupHighlight'>'%0'</span> с:</"+"div><div>хранилищем: <span class='popupHighlight'>%1</span></"+"div><div>рабочее пространство: <span class='popupHighlight'>%2</span></"+"div>", // Note escaping of closing <div> tag
notCurrentlySyncing: "Пока не синхронизировано",
captionUnSync: "Остановить синхронизацию этой заметки",
chooseServer: "Привести в соответствие эту заметку с другим сервером:",
currServerMarker: "\u25cf ",
notCurrServerMarker: " "});
merge(config.commands.fields,{
text: "поля",
tooltip: "Отображение расширенных параметров этой заметки",
emptyText: "У этой заметки нет расширенных параметров",
listViewTemplate: {
columns: [
{name: 'Field', field: 'field', title: "Поле", type: 'String'},
{name: 'Value', field: 'value', title: "Значение", type: 'String'} ],
rowClasses: [],
buttons: [] } });
merge(config.shadowTiddlers,{
DefaultTiddlers: "[[GettingStarted]]",
MainMenu: "[[GettingStarted]]",
SiteTitle: "Моя TiddlyWiki",
SiteSubtitle: "гипертекстовая записная книжка",
SiteUrl: "",
SideBarOptions: '<<search>><<closeAll>><<permaview>><<newTiddler>><<newJournal "DD.0MM.YYYY" "journal">><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel "настройки \u00bb" "Изменение настроек TiddlyWiki">>',
SideBarTabs: '<<tabs txtMainTab "история" "История" TabTimeline "все" "Все заметки" TabAll "метки" "Все метки" TabTags "ещё" "Другие списки" TabMore>>',
TabMore: '<<tabs txtMoreTab "нет" "Отсутствующие заметки" TabMoreMissing "потери" "Потерянные заметки" TabMoreOrphans "служебные" "Служебные заметки" TabMoreShadowed>>' });
merge(config.annotations,{
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: "Эта служебная заметка содержит полный вид заголовка страницы" });
//}}}
|~ViewToolbar|closeTiddler closeOthers +editTiddler > fields syncing permalink references jump <|
|~EditToolbar|+saveTiddler -cancelTiddler deleteTiddler|
/***
|Name|UnsavedChangesPlugin|
|Source|http://www.TiddlyTools.com/#UnsavedChangesPlugin|
|Version|3.3.5|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|show droplist of tiddlers that have changed since the last time the document was saved|
|>|!!Minor corrections|
|Description|Rewrites code for supporting localisation and inserts new command parameter ''inline''|
|Author|vmunt|
|Source version|3.3.5|
|Change version|0.0.3|
Display a list of tiddlers that have been changed since the last time the document was saved. The list includes all new/modified tiddlers as well as those changed with "minor edits" enabled and any tiddlers that you import during the session, regardless of their modification date.
!!!!!Usage
<<<
{{{
<<unsavedChanges>> or <<unsavedChanges panel [label [tip]]>>
}}}
{{indent{
the ''panel'' keyword displays a 'control panel' interface containing a droplist of unsaved tiddlers and a 'goto' button, along with a command link to 'save changes'. Depending upon what other plugins are installed, several additional elements will also be displayed: When [[NestedSlidersPlugin]] is installed, the entire control panel is contained within a ''SLIDER''. When [[LoadTiddlersPlugin]] is installed, a ''REVERT'' button is added. When [[SaveAsPlugin]] is installed, a ''SAVE AS'' link is added. When [[UploadPlugin]] is installed, an ''UPLOAD'' (or ''save to web'') link is added. When [[TrashPlugin]] is installed and there are tiddlers tagged with<<tag Trash>>, an ''EMPTY TRASH'' link is added.
You can specify optional ''label'' and ''tip'' parameters in the macro to customize the command link text and tooltip. The default label for the command link is: "There %1 %0 unsaved tiddler%2…", where:
* %0 is automatically replaced with the number of unsaved changes
* %1 is either "is" (if changes=1) or "are" (if changes>1)
* %2 is either blank (if changes=1) or "s" (if changes>1)
resulting in the text: //"There is 1 unsaved tiddler…", "There are 2 unsaved tiddlers…", etc.//
}}}
{{{
<<unsavedChanges list [separator]>>
}}}
{{indent{
the ''list'' keyword displays a simple space-separated list of unsaved tiddlers without any other command links.
You can specify an optional ''separator'' value that can be used in place of the default space character. For example, you can specify {{{"<br>"}}} as the separator in order to display each link, one per line.
}}}
{{{
<<unsavedChanges inline [separator [label [tip]]]>>
}}}
{{indent{
the ''inline'' keyword displays a header preceeded {{remark{(and expanded, if [[NestedSlidersPlugin]] is installed)}}} space-separated list of unsaved tiddlers without any other command links. You can also specify an optional ''separator'', ''label'' and ''tip'' parameters.
}}}
{{{
<<unsavedChanges command [label [tip]]>>
}}}
{{indent{
the ''command'' keyword displays a single 'command link' that, when clicked, displays a ~TiddlyWiki popup containing the list of unsaved tiddlers, the 'save changes' command and, depending upon what other plugins are installed, additional commands for 'save as', 'upload', and 'empty trash' {{remark{(similar to the panel display described above)}}}. You can also specify an optional ''label'' and ''tip'' parameters.
}}}
<<<
!!!!!Examples
<<<
^^//note: the following examples will not display any output unless you have already created/modified tiddlers in the current document.//^^
{{{<<unsavedChanges>>}}}
<<unsavedChanges>>
----
{{{<<unsavedChanges panel "unsaved tiddler%2: %0" "How many tiddler(s) unsaved info">>}}}
<<unsavedChanges panel "unsaved tiddler%2: %0" "How many tiddler(s) unsaved info">>
----
{{{<<unsavedChanges command>>}}}
<<unsavedChanges command>>
----
{{{<<unsavedChanges list>>}}}
<<unsavedChanges list>>
----
{{{<<unsavedChanges list "<br>">>}}}
<<unsavedChanges list "<br>">>
----
{{{<<unsavedChanges inline>>}}}
<<unsavedChanges inline>>
----
{{{<<unsavedChanges inline "<br>">>}}}
<<unsavedChanges inline "<br>">>
<<<
!!!!!Revisions
<<<
2011.04.29 3.3.5 in panel(), use custom label (if provided). Also, removed "small" style from panel commands so surrounding CSS font size will be used.
2010.12.05 3.3.4 display 'save as…' command even if readOnly
2009.03.02 3.3.3 fix handling for titles that contain HTML special chars (lt,gt,quot,amp)
2008.09.02 3.3.2 cleanup popup list output generation and added timestamps/sizes to popup display
2008.08.23 3.3.1 added optional custom 'label' and 'tip' params to 'command' mode and defined default values for mode, label, tip, and separator as object properties for I18N/L10N-readiness.
2008.08.21 3.3.0 complete re-write of rendering and refresh processing to support multiple instances and automatic self-refresh (no longer depends upon core refresh notifications)
2008.08.21 3.2.0 added 'command' option for link+popup as alternative to 'control panel' interface
2008.04.22 3.1.2 use SaveAsPlugin instead of obsolete NewDocumentPlugin to add "save as" link
2007.12.22 3.1.1 hijack removeTiddler() instead of low-level deleteTiddler() to correct tracking and refresh handling issues. in saveTiddler(), check for 'tiddler rename' (title!=newtitle) and adjust list accordingly.
2007.12.21 3.1.0 added support for {{{<<unsavedChanges list separator>>}}} usage to unsaved tiddlers as a simple list of links, embedded in tiddler content (e.g., [[MainMenu]])
2007.12.20 3.0.0 rewrite to track ALL changed tiddlers, including imports and minor edits, regardless of saved modification dates. Also, rewrote display logic to directly refresh macro output instead of triggering a page refresh. The entire process is MUCH more efficient now.
2007.08.02 2.0.0 converted from inline script
2007.01.01 1.0.0 initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.UnsavedChangesPlugin= {major: 3, minor: 3, revision: 5, date: new Date(2011,4,29)};
config.macros.unsavedChanges = {
changed: [], // list of currently unsaved tiddler titles
defMode: "panel",
defSep: " ",
defLabel: "There %1 %0 unsaved tiddler%2",
defTip: "view a list of unsaved tiddler changes",
gotoLabel: "goto", // vmunt
cmdFormat: " [[%1 - %0 (%2 byte%3)|%0]] ", // %0 -- tiddler label, %1 – modification date, %2 – tiddler size, %3 – byte ending
cmdTime: 'YYYY.0MM.0DD 0hh:0mm:0ss',
panelFormat: '<option value="%0">%1 - %0 (%2 byte%3)</option>',
panelTime: 'YYYY.0MM.0DD 0hh:0mm:0ss',
inlineFormat: "[[%0 (%1)|%0]]",
inlineTime: "0hh:0mm",
ending1: function(c) { return (c==1?'is':'are'); }, // "there is" / "there are"
ending2: function(c) { return (c==1?'':'s'); }, // tiddler-tiddlers
ending3: function(c) { return (c==1?'':'s'); }, // byte-bytes in item format string
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
var wrapper=createTiddlyElement(place,"span",null,"unsavedChanges");
wrapper.setAttribute("mode",params[0]||this.defMode);
switch (wrapper.getAttribute("mode")) { // vmunt
case "panel":
wrapper.setAttribute("label",params[1]||this.defLabel);
wrapper.setAttribute("tip",params[2]||this.defTip);
break;
case "command":
wrapper.setAttribute("label",params[1]||this.defLabel);
wrapper.setAttribute("tip",params[2]||this.defTip);
break;
case "list":
wrapper.setAttribute("sep",params[1]||this.defSep);
break;
case "inline":
wrapper.setAttribute("sep",params[1]||this.defSep);
wrapper.setAttribute("label",params[2]||this.defLabel);
wrapper.setAttribute("tip",params[3]||this.defTip);
break;
}
this.render(wrapper);
},
render: function(wrapper) {
removeChildren(wrapper); // make sure its empty
if (!this.changed.length) return; // no changes = no output
switch (wrapper.getAttribute("mode")) {
case "command": this.command(wrapper); break;
case "list": this.list(wrapper); break;
case "inline": this.inline(wrapper); break; // inserts a new command word
case "panel": default: this.panel(wrapper); break;
}
},
refresh: function() {
var wrappers=document.getElementsByTagName("span");
for (var w=0; w<wrappers.length; w++)
if (hasClass(wrappers[w],"unsavedChanges"))
this.render(wrappers[w]);
},
list: function(place) { // show simple list of unsaved tiddlers
wikify("[["+this.changed.join("]]"+place.getAttribute("sep")+"[[")+"]]",place);
},
inline: function(place) { // show inline list of unsaved tiddlers with times
var c=this.changed.length; var e1=this.ending1(c); var e2=this.ending2(c);
var list=[];
for (var i=c-1; i>=0; i--) {
var tid=store.getTiddler(this.changed[i]);
if (!tid) continue;
var when=tid.modified.formatString(this.inlineTime); var endb=this.ending3(tid.text.length);
list.push(this.inlineFormat.format([tid.title,when,tid.text.length,endb]));
}
var NSP=config.formatters.findByField("name","nestedSliders");
var out=place.getAttribute("label").format([c,e1,e2]);
out=NSP?'+++(_Unsaved)['+out+'|'+this.defTip+']...':(out+"\n");
out+=list.join(place.getAttribute('sep'));
out+=NSP?'===':'';
wikify(out,place);
},
command: function(place) { // show command link with popup list
var c=this.changed.length;
var e1=this.ending1(c); var e2=this.ending2(c);
var txt=place.getAttribute("label").format([c,e1,e2]);
var tip=place.getAttribute("tip");
var action=function(ev) { if (!ev) var ev=window.event;
var p=Popup.create(this); if (!p) return false;
var d=createTiddlyElement(p,"div");
d.style.whiteSpace="normal"; d.style.width="auto"; d.style.padding="2px";
// gather pretty links for changed tiddlers
var list=[]; var tm=config.macros.unsavedChanges.cmdTime; var fmt=config.macros.unsavedChanges.cmdFormat;
for (var i=config.macros.unsavedChanges.changed.length-1; i>=0; i--) {
var tid=store.getTiddler(config.macros.unsavedChanges.changed[i]);
if (!tid) continue;
var when=tid.modified.formatString(tm); var endb=config.macros.unsavedChanges.ending3(tid.text.length);
list.push(fmt.format([tid.title,when,tid.text.length,endb]));
}
wikify("@@white-space:nowrap;"+list.join("<br>")+"@@",d);
var t="\n----\n";
t+="@@white-space:nowrap;display:block;text-align:center; ";
if (!readOnly) {
t+="<<saveChanges>>";
t+=config.macros.saveAs?" | <<saveAs>>":"";
t+=config.macros.upload?" | <<upload>>":"";
t+=(config.macros.emptyTrash&&store.getTaggedTiddlers("Trash").length)?" | <<emptyTrash>>":"";
} else {
t+=config.macros.saveAs?"<<saveAs>>":"";
}
t+=" @@";
wikify(t,d);
Popup.show();
ev.cancelBubble=true; if(ev.stopPropagation)ev.stopPropagation();
return(false);
}
createTiddlyButton(place,txt,tip,action,"button");
},
panel: function(place) { // show composite droplist+buttons+commands
// gather changed tiddlers (in reverse order by date - most recent first)
var tids=[]; for (var i=this.changed.length-1; i>=0; i--)
{ var t=store.getTiddler(this.changed[i]); if (t) tids.push(t); }
tids.sort(function(a,b){return a.modified<b.modified?-1:(a.modified==b.modified?0:1);});
// generate droplist items
var list=[];
for (var i=tids.length-1; i>=0; i--) {
var when=tids[i].modified.formatString(this.panelTime); var endb=this.ending3(tids[i].text.length);
list.push(this.panelFormat.format([tids[i].title.htmlEncode(),when,tids[i].text.length,endb]));
}
// display droplist, buttons, and command links
var out=''; var c=this.changed.length;
var NSP=config.formatters.findByField("name","nestedSliders");
var e1=this.ending1(c); var e2=this.ending2(c);
var summary=place.getAttribute("label").format([c,e1,e2]);
out+=NSP?'+++(_Unsaved)['+summary+'|'+this.defTip+']...':(summary+"\n"); // vmunt: It seems "_Unsaved" (instead "unsaved") simplifies review of cookie list
out+='<html><form style="display:inline"><!--\
--><select size="1" name="list" \
title="select a tiddler to view" \
onchange="var v=this.value; if (v.length) story.displayTiddler(null,v);"><!--\
-->'+list.join('')+'<!--\
--></select><!--\
--><input type="button" value="'+this.gotoLabel+'" onclick="this.form.list.onchange();">';
if (config.macros.loadTiddlers) {
out+='<input type="button" value="revert" \
title="import the last saved version of this tiddler" \
onclick="var v=this.form.list.value; if (!v.length) return; \
var t=\'<\'+\'<loadTiddlers [[tiddler:\'+v+\']] \'; \
t+=document.location.href; \
t+=\' confirm force noreport>\'+\'>\'; \
var e=document.getElementById(\'executeRevert\'); \
if (e) e.parentNode.removeChild(e); \
e=document.createElement(\'span\'); \
e.id=\'executeRevert\'; \
wikify(t,e);">';
}
out+='</form></html>';
out+='\n{{nowrap{';
if (!readOnly) {
out+="<<saveChanges>>";
out+=config.macros.saveAs?" | <<saveAs>>":"";
out+=config.macros.upload?" | <<upload>>":"";
out+=(config.macros.emptyTrash&&store.getTaggedTiddlers("Trash").length)?" | <<emptyTrash>>":"";
} else {
out+=config.macros.saveAs?"<<saveAs>>":"";
}
out+='}}}';
out+=NSP?'===':'';
wikify(out,place);
}
};
// hijack store.saveTiddler() to track changes to tiddlers
if (store.showUnsaved_saveTiddler==undefined) {
store.showUnsaved_saveTiddler=store.saveTiddler;
store.saveTiddler=function(title,newtitle) {
if (title!=newtitle) {
var i=config.macros.unsavedChanges.changed.indexOf(title);
if (i!=-1) config.macros.unsavedChanges.changed.splice(i,1); // remove old from list
}
var i=config.macros.unsavedChanges.changed.indexOf(newtitle);
if (i!=-1) config.macros.unsavedChanges.changed.splice(i,1); // remove new title from list
config.macros.unsavedChanges.changed.push(newtitle); // add new title to END of list
var t=this.showUnsaved_saveTiddler.apply(this,arguments);
if (!this.notificationLevel) config.macros.unsavedChanges.refresh();
return t;
}
}
// hijack store.removeTiddler() to track changes to tiddlers
if (store.showUnsaved_removeTiddler==undefined) {
store.showUnsaved_removeTiddler=store.removeTiddler;
store.removeTiddler=function(title) {
var i=config.macros.unsavedChanges.changed.indexOf(title);
if (i!=-1) config.macros.unsavedChanges.changed.splice(i,1); // remove from list
this.showUnsaved_removeTiddler.apply(this,arguments);
if (!this.notificationLevel) config.macros.unsavedChanges.refresh();
}
}
// hijack store.setDirty() function to reset change list after file save
// note: do NOT hijack the prototype function. This hijack should only be applied to
// the main 'store' instance only (i.e., don't refresh when loading temporary store
// as part of ImportTiddlers processing)
if (store.showUnsaved_setDirty==undefined) {
store.showUnsaved_setDirty=store.setDirty;
store.setDirty = function(flag) {
var refresh=this.isDirty() && !flag; // 'dirty' to 'clean', force a refresh…
this.showUnsaved_setDirty.apply(this,arguments); // but change the flag first.
if (refresh) {
config.macros.unsavedChanges.changed=[]; // clear changed list
config.macros.unsavedChanges.refresh();
}
}
}
//}}}
/***
!Описание
/%
|Name|UnsavedChangesPlugin:rus|
|Description|Both translation to russian for plugin [[UnsavedChangesPlugin]] by Eric Shulman, source from [[TiddlyTools.com|http://www.TiddlyTools.com/#UnsavedChangesPlugin]] and russian documentation for this plugin|
|Описание|Модуль русифицирует работу модуля [[UnsavedChangesPlugin]] Эрика Шульмана и без этого модуля бесполезен|
|Source|http://vmunt.site/tw/plugins/unsavedChangesPluginRus.html|
|Version|0.0.3|
|Author|vmunt|
|License|Use it free|
|~CoreVersion|2.1 {{remark{(as Eric's plugin)}}}|
|Type|plugin|
!Изменения (changes)
0.0.3: Вставлен параметр %3, содержащий окончание слова «байт» в строках генерации списков изменённых заметок {{remark{(byte ending inserted as parameter %3 in list format string of changed tiddlers)}}}
%/Модуль [[UnsavedChangesPlugin]] отображает выпадывающий список заметок, которые были изменены или созданы после последнего сохранения документа. Этот список отображает также те заметки, которые были сохранены с помощью функции «мелких изменений» {{remark{(то есть без изменения даты модификации заметки)}}}, и те, которые были импортированы во время этой сессии вне зависимости от их даты последнего изменения
!Использование
{{remark{Примечание: Примеры в этом документе не будут отображаться до тех пор, пока в этой TiddlyWiki не будут присутствовать какие-либо изменённые заметки}}}
!!Встраиваемый диалог
{{{
<<unsavedChanges>>
}}}
отображает:
<<<
<<unsavedChanges>>
<<<
Также встраивание может быть выполнено так:
{{{
<<unsavedChanges panel [уведомление [подсказка]]>>
}}}
Вы можете указать дополнительные параметры ''уведомление'' и ''подсказка'' для настройки текста ''уведомительной ссылки'' и ''всплывающей подсказки''. Строка по умолчанию для ''уведомительной ссылки'' такая: ""Изменен%2 %0 замет%1 »"", где:
* %0 автоматически заменяется на цифру количества несохранённых заметок,
* %1 будет правильным окончанием для слова Заметка/Заметки/Заметок,
* %2 будет правильным окончанием для слов Изменена/Изменены/Изменено.
В результате получится текст: //"Изменена 1 заметка »", "Изменены 3 заметки »", "Изменено 5 заметок »", и так далее.//
Например:
|!Синтаксис|!Результат|
|<html><pre><<unsavedChanges panel>></pre></html>|<<unsavedChanges panel>>|
|<html><pre><<unsavedChanges panel "Изменено: %0 замет%1" "Информация о том, сколько заметок изменено">></pre></html>|<<unsavedChanges panel "Изменено: %0 замет%1" "Информация о том, сколько заметок изменено">>|
Ключевое слово {{{panel}}} отображает интерфейс, предназдаченный для панели управления, который содержит выпадывающий список несохранённых заметок и кнопочки ''Перейти'' и ''Сохранить''. Также при наличии других установленных модулей могут появляться дополнительные кнопочки:
* Когда в документе присутствует модуль [[NestedSlidersPlugin]], список заметок помещается в скрываемый контейнер {{remark{(слайдер)}}}
* Если установлен модуль [[LoadTiddlersPlugin]], добавляется кнопочка ''Восстановить'' {{remark{(Откат изменений)}}}
* Если установлен модуль [[SaveAsPlugin]], появляется кнопочка ''Сохранить как''
* При модуле [[UploadPlugin]] появляется кнопка ''Выгрузить'' {{remark{(или ''Сохранить в сеть'')}}}
* Когда присутствует модуль [[TrashPlugin]] и в списке присутствуют заметки, помеченные тегом {{{Trash}}}, появляется кнопка ''Очистить корзину''
!!Всплывающий диалог
Синтаксис
{{{
<<unsavedChanges command [уведомление [подсказка]]>>
}}}
отображает
<<<
<<unsavedChanges command>>
<<<
Использование ключевого слова ''command'' позволяет отображать одну ''уведомительную ссылку'', которая при нажатии на неё показывает всплывающее окно ~TiddlyWiki со списком несохранённых заметок, а также с кнопкой ''Сохранить изменения'' и другими кнопками, зависящими от наличия в документе установленных дополнительных плагинов {{remark{(''Сохранить как'', ''Выгрузить в сеть'' и ''Очистить корзину'', то есть теми же кнопками, которые уже были описаны выше в описании параметра ''panel'')}}}.
!!Простой список
{{{
<<unsavedChanges list [разделитель]>>
}}}
работает так:
<<<
<<unsavedChanges list>>
<<<
Ключевое слово ''list'' отображает простой список разделённых пробелами изменённых заметок без дополнительных командных кнопок. Вы можете указать дополнительный ''разделитель'', который будет использован для вставки вместо пробела. Например, если использовать в качестве разделителя строку {{{"<br>"}}}, то каждая ссылка на изменённую заметку будет располагаться на отдельной строке:
{{{
<<unsavedChanges list "<br>">>
}}}
<<<
<<unsavedChanges list "<br>">>
<<<
!!Встраиваемый список
Синтаксис
{{{
<<unsavedChanges inline [разделитель [уведомление [подсказка]]]>>
}}}
вместо всплывающего окна делает список заметок {{remark{(аналогично команде ''list'')}}} со временем последней корректировки, но при наличии модуля [[NestedSlidersPlugin]] дополнительно заключает этот список в рамки скрываемого текста {{remark{(слайдера)}}}, например:
{{{<<unsavedChanges inline>>}}}
<<<
<<unsavedChanges inline>>
<<<
или
{{{<<unsavedChanges inline "<br>">>}}}
<<<
<<unsavedChanges inline "<br>">>
<<<
***/
///%
//{{{
merge(config.macros.unsavedChanges, {
// defMode: "panel",
// defSep: " ",
defLabel: "Изменен%2 %0 замет%1 »",
ending1: function(c) { return (c==1?'ка':(c<5?'ки':'ок')) }, // Замет:ка (1), ки (2-4), ок (5+)
ending2: function(c) { return (c==1?'а':(c<5?'ы':'о')) }, // Изменен:а (1), ы (2-4), о (5+)
ending3: function(c) {
if (c<5 || c>21) {
var endC=c.toString();
endC = endC.substr(endC.length-1);
return ('234'.indexOf(endC)!=-1?'а':'');
}
return ''
},
defTip: "Показать/скрыть все несохранённые заметки",
gotoLabel: "►", // ►►
cmdFormat: " [[%1 – %0 (%2 байт%3)|%0]] ",
cmdTime: '0hh:0mm',
panelFormat: '<option value="%0">%1 – %0 (%2 байт%3)</option>',
panelTime: '0hh:0mm',
inlineFormat: "[[%0 (%1)|%0]]",
inlineTime: '0hh:0mm'
});
//}}}
//%/
<!--{{{-->
<table width=100%>
<tr><td valign=top>
<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>
</td>
<td valign=top>
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='tagClear'></div>
</td></tr>
</table>
<div class='viewer' macro='view text wikified'></div>
<!--}}}-->
<!--{{{-->
<span class='yourSearchNumber' macro='foundTiddler number'></span>
<span class='yourSearchTitle' macro='foundTiddler title'/></span> -
<span macro='foundTiddler field includeURL'/></span> -
<span class='yourSearchTags' macro='foundTiddler field tags 50'/></span>
<span macro="yourSearch if previewText"><div class='yourSearchText' macro='foundTiddler field text 250'/></div></span>
<!--}}}-->
/***
|''Name:''|YourSearchPlugin|
|''Version:''|2.1.5 (2010-02-16)|
|''Source:''|http://tiddlywiki.abego-software.de/#YourSearchPlugin|
|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|
|''Licence:''|[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]|
|''Copyright:''|© 2005-2010 [[abego Software|http://www.abego-software.de]]|
|''~CoreVersion:''|2.1.0|
|''Community:''|[[del.icio.us|http://del.icio.us/post?url=http://tiddlywiki.abego-software.de/index.html%23YourSearchPlugin]]|
|''Browser:''|Firefox 1.0.4+; Firefox 1.5; ~InternetExplorer 6.0|
!About YourSearch
YourSearch gives you a bunch of new features to simplify and speed up your daily searches in TiddlyWiki. It seamlessly integrates into the standard TiddlyWiki search: just start typing into the 'search' field and explore!
For more information see [[Help|YourSearch Help]].
!Compatibility
This plugin requires TiddlyWiki 2.1.
Check the [[archive|http://tiddlywiki.abego-software.de/archive]] for ~YourSearchPlugins supporting older versions of TiddlyWiki.
!Source Code
***/
/***
This plugin's source code is compressed (and hidden). Use this [[link|http://tiddlywiki.abego-software.de/archive/YourSearchPlugin/Plugin-YourSearch-src.2.1.5.js]] to get the readable source code.
***/
///%
if(!version.extensions.YourSearchPlugin){version.extensions.YourSearchPlugin={major:2,minor:1,revision:5,source:"http://tiddlywiki.abego-software.de/#YourSearchPlugin",licence:"[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]",copyright:"Copyright (c) abego Software GmbH, 2005-2010 (www.abego-software.de)"};if(!window.abego){window.abego={};}if(!Array.forEach){Array.forEach=function(_1,_2,_3){for(var i=0,_4=_1.length;i<_4;i++){_2.call(_3,_1[i],i,_1);}};Array.prototype.forEach=function(_5,_6){for(var i=0,_7=this.length;i<_7;i++){_5.call(_6,this[i],i,this);}};}abego.toInt=function(s,_8){if(!s){return _8;}var n=parseInt(s);return (n==NaN)?_8:n;};abego.createEllipsis=function(_9){var e=createTiddlyElement(_9,"span");e.innerHTML="…";};abego.shallowCopy=function(_a){if(!_a){return _a;}var _b={};for(var n in _a){_b[n]=_a[n];}return _b;};abego.copyOptions=function(_c){return !_c?{}:abego.shallowCopy(_c);};abego.countStrings=function(_d,s){if(!s){return 0;}var _e=s.length;var n=0;var _f=0;while(1){var i=_d.indexOf(s,_f);if(i<0){return n;}n++;_f=i+_e;}return n;};abego.getBracedText=function(_10,_11,_12){if(!_11){_11=0;}var re=/\{([^\}]*)\}/gm;re.lastIndex=_11;var m=re.exec(_10);if(m){var s=m[1];var _13=abego.countStrings(s,"{");if(!_13){if(_12){_12.lastIndex=re.lastIndex;}return s;}var len=_10.length;for(var i=re.lastIndex;i<len&&_13;i++){var c=_10.charAt(i);if(c=="{"){_13++;}else{if(c=="}"){_13--;}}}if(!_13){if(_12){_12.lastIndex=i-1;}return _10.substring(m.index+1,i-1);}}};abego.select=function(_14,_15,_16,_17){if(!_17){_17=[];}_14.forEach(function(t){if(_15.call(_16,t)){_17.push(t);}});return _17;};abego.consumeEvent=function(e){if(e.stopPropagation){e.stopPropagation();}if(e.preventDefault){e.preventDefault();}e.cancelBubble=true;e.returnValue=true;};abego.TiddlerFilterTerm=function(_18,_19){if(!_19){_19={};}var _1a=_18;if(!_19.textIsRegExp){_1a=_18.escapeRegExp();if(_19.fullWordMatch){_1a="\\b"+_1a+"\\b";}}var _1b=new RegExp(_1a,"m"+(_19.caseSensitive?"":"i"));this.tester=new abego.MultiFieldRegExpTester(_1b,_19.fields,_19.withExtendedFields);};abego.TiddlerFilterTerm.prototype.test=function(_1c){return this.tester.test(_1c);};abego.parseNewTiddlerCommandLine=function(s){var m=/(.*?)\.(?:\s+|$)([^#]*)(#.*)?/.exec(s);if(!m){m=/([^#]*)()(#.*)?/.exec(s);}if(m){var r;if(m[3]){var s2=m[3].replace(/#/g,"");r=s2.parseParams("tag");}else{r=[[]];}var _1d=m[2]?m[2].trim():"";r.push({name:"text",value:_1d});r[0].text=[_1d];return {title:m[1].trim(),params:r};}else{return {title:s.trim(),params:[[]]};}};abego.parseTiddlerFilterTerm=function(_1e,_1f,_20){var re=/\s*(?:(?:\{([^\}]*)\})|(?:(=)|([#%!])|(?:(\w+)\s*\:(?!\/\/))|(?:(?:("(?:(?:\\")|[^"])+")|(?:\/((?:(?:\\\/)|[^\/])+)\/)|(\w+\:\/\/[^\s]+)|([^\s\)\-\"]+)))))/mg;var _21={"!":"title","%":"text","#":"tags"};var _22={};var _23;re.lastIndex=_1f;while(1){var i=re.lastIndex;var m=re.exec(_1e);if(!m||m.index!=i){throw "Word or String literal expected";}if(m[1]){var _24={};var _25=abego.getBracedText(_1e,0,_24);if(!_25){throw "Invalid {…} syntax";}var f=Function("tiddler","return ("+_25+");");return {func:f,lastIndex:_24.lastIndex,markRE:null};}if(m[2]){_23=true;}else{if(m[3]){_22[_21[m[3]]]=1;}else{if(m[4]){_22[m[4]]=1;}else{var _26=m[6];var _27=m[5]?window.eval(m[5]):m[6]?m[6]:m[7]?m[7]:m[8];var _20=abego.copyOptions(_20);_20.fullWordMatch=_23;_20.textIsRegExp=_26;var _28=[];for(var n in _22){_28.push(n);}if(_28.length==0){_20.fields=_20.defaultFields;}else{_20.fields=_28;_20.withExtendedFields=false;}var _29=new abego.TiddlerFilterTerm(_27,_20);var _2a=_26?_27:_27.escapeRegExp();if(_2a&&_23){_2a="\\b"+_2a+"\\b";}return {func:function(_2b){return _29.test(_2b);},lastIndex:re.lastIndex,markRE:_2a?"(?:"+_2a+")":null};}}}}};abego.BoolExp=function(s,_2c,_2d){this.s=s;var _2e=_2d&&_2d.defaultOperationIs_OR;var _2f=/\s*(?:(\-|not)|(\())/gi;var _30=/\s*\)/g;var _31=/\s*(?:(and|\&\&)|(or|\|\|))/gi;var _32=/\s*[^\)\s]/g;var _33=/\s*(\-|not)?(\s*\()?/gi;var _34;var _35=function(_36){_33.lastIndex=_36;var m=_33.exec(s);var _37;var _38;if(m&&m.index==_36){_36+=m[0].length;_37=m[1];if(m[2]){var e=_34(_36);_30.lastIndex=e.lastIndex;if(!_30.exec(s)){throw "Missing ')'";}_38={func:e.func,lastIndex:_30.lastIndex,markRE:e.markRE};}}if(!_38){_38=_2c(s,_36,_2d);}if(_37){_38.func=(function(f){return function(_39){return !f(_39);};})(_38.func);_38.markRE=null;}return _38;};_34=function(_3a){var _3b=_35(_3a);while(1){var l=_3b.lastIndex;_31.lastIndex=l;var m=_31.exec(s);var _3c;var _3d;if(m&&m.index==l){_3c=!m[1];_3d=_35(_31.lastIndex);}else{try{_3d=_35(l);}catch(e){return _3b;}_3c=_2e;}_3b.func=(function(_3e,_3f,_40){return _40?function(_41){return _3e(_41)||_3f(_41);}:function(_42){return _3e(_42)&&_3f(_42);};})(_3b.func,_3d.func,_3c);_3b.lastIndex=_3d.lastIndex;if(!_3b.markRE){_3b.markRE=_3d.markRE;}else{if(_3d.markRE){_3b.markRE=_3b.markRE+"|"+_3d.markRE;}}}};var _43=_34(0);this.evalFunc=_43.func;if(_43.markRE){this.markRegExp=new RegExp(_43.markRE,_2d.caseSensitive?"mg":"img");}};abego.BoolExp.prototype.exec=function(){return this.evalFunc.apply(this,arguments);};abego.BoolExp.prototype.getMarkRegExp=function(){return this.markRegExp;};abego.BoolExp.prototype.toString=function(){return this.s;};abego.MultiFieldRegExpTester=function(re,_44,_45){this.re=re;this.fields=_44?_44:["title","text","tags"];this.withExtendedFields=_45;};abego.MultiFieldRegExpTester.prototype.test=function(_46){var re=this.re;for(var i=0;i<this.fields.length;i++){var s=store.getValue(_46,this.fields[i]);if(typeof s=="string"&&re.test(s)){return this.fields[i];}}if(this.withExtendedFields){return store.forEachField(_46,function(_47,_48,_49){return typeof _49=="string"&&re.test(_49)?_48:null;},true);}return null;};abego.TiddlerQuery=function(_4a,_4b,_4c,_4d,_4e){if(_4c){this.regExp=new RegExp(_4a,_4b?"mg":"img");this.tester=new abego.MultiFieldRegExpTester(this.regExp,_4d,_4e);}else{this.expr=new abego.BoolExp(_4a,abego.parseTiddlerFilterTerm,{defaultFields:_4d,caseSensitive:_4b,withExtendedFields:_4e});}this.getQueryText=function(){return _4a;};this.getUseRegExp=function(){return _4c;};this.getCaseSensitive=function(){return _4b;};this.getDefaultFields=function(){return _4d;};this.getWithExtendedFields=function(){return _4e;};};abego.TiddlerQuery.prototype.test=function(_4f){if(!_4f){return false;}if(this.regExp){return this.tester.test(_4f);}return this.expr.exec(_4f);};abego.TiddlerQuery.prototype.filter=function(_50){return abego.select(_50,this.test,this);};abego.TiddlerQuery.prototype.getMarkRegExp=function(){if(this.regExp){return "".search(this.regExp)>=0?null:this.regExp;}return this.expr.getMarkRegExp();};abego.TiddlerQuery.prototype.toString=function(){return (this.regExp?this.regExp:this.expr).toString();};abego.PageWiseRenderer=function(){this.firstIndexOnPage=0;};merge(abego.PageWiseRenderer.prototype,{setItems:function(_51){this.items=_51;this.setFirstIndexOnPage(0);},getMaxPagesInNavigation:function(){return 10;},getItemsCount:function(_52){return this.items?this.items.length:0;},getCurrentPageIndex:function(){return Math.floor(this.firstIndexOnPage/this.getItemsPerPage());},getLastPageIndex:function(){return Math.floor((this.getItemsCount()-1)/this.getItemsPerPage());},setFirstIndexOnPage:function(_53){this.firstIndexOnPage=Math.min(Math.max(0,_53),this.getItemsCount()-1);},getFirstIndexOnPage:function(){this.firstIndexOnPage=Math.floor(this.firstIndexOnPage/this.getItemsPerPage())*this.getItemsPerPage();return this.firstIndexOnPage;},getLastIndexOnPage:function(){return Math.min(this.getFirstIndexOnPage()+this.getItemsPerPage()-1,this.getItemsCount()-1);},onPageChanged:function(_54,_55){},renderPage:function(_56){if(_56.beginRendering){_56.beginRendering(this);}try{if(this.getItemsCount()){var _57=this.getLastIndexOnPage();var _58=-1;for(var i=this.getFirstIndexOnPage();i<=_57;i++){_58++;_56.render(this,this.items[i],i,_58);}}}finally{if(_56.endRendering){_56.endRendering(this);}}},addPageNavigation:function(_59){if(!this.getItemsCount()){return;}var _5a=this;var _5b=function(e){if(!e){var e=window.event;}abego.consumeEvent(e);var _5c=abego.toInt(this.getAttribute("page"),0);var _5d=_5a.getCurrentPageIndex();if(_5c==_5d){return;}var _5e=_5c*_5a.getItemsPerPage();_5a.setFirstIndexOnPage(_5e);_5a.onPageChanged(_5c,_5d);};var _5f;var _60=this.getCurrentPageIndex();var _61=this.getLastPageIndex();if(_60>0){_5f=createTiddlyButton(_59,"Previous","Go to previous page (Shortcut: Alt-'<')",_5b,"prev");_5f.setAttribute("page",(_60-1).toString());_5f.setAttribute("accessKey","<");}for(var i=-this.getMaxPagesInNavigation();i<this.getMaxPagesInNavigation();i++){var _62=_60+i;if(_62<0){continue;}if(_62>_61){break;}var _63=(i+_60+1).toString();var _64=_62==_60?"currentPage":"otherPage";_5f=createTiddlyButton(_59,_63,"Go to page %0".format([_63]),_5b,_64);_5f.setAttribute("page",(_62).toString());}if(_60<_61){_5f=createTiddlyButton(_59,"Next","Go to next page (Shortcut: Alt-'>')",_5b,"next");_5f.setAttribute("page",(_60+1).toString());_5f.setAttribute("accessKey",">");}}});abego.LimitedTextRenderer=function(){var _65=40;var _66=4;var _67=function(_68,_69,_6a){var n=_68.length;if(n==0){_68.push({start:_69,end:_6a});return;}var i=0;for(;i<n;i++){var _6b=_68[i];if(_6b.start<=_6a&&_69<=_6b.end){var r;var _6c=i+1;for(;_6c<n;_6c++){r=_68[_6c];if(r.start>_6a||_69>_6b.end){break;}}var _6d=_69;var _6e=_6a;for(var j=i;j<_6c;j++){r=_68[j];_6d=Math.min(_6d,r.start);_6e=Math.max(_6e,r.end);}_68.splice(i,_6c-i,{start:_6d,end:_6e});return;}if(_6b.start>_6a){break;}}_68.splice(i,0,{start:_69,end:_6a});};var _6f=function(_70){var _71=0;for(var i=0;i<_70.length;i++){var _72=_70[i];_71+=_72.end-_72.start;}return _71;};var _73=function(c){return (c>="a"&&c<="z")||(c>="A"&&c<="Z")||c=="_";};var _74=function(s,_75){if(!_73(s[_75])){return null;}for(var i=_75-1;i>=0&&_73(s[i]);i--){}var _76=i+1;var n=s.length;for(i=_75+1;i<n&&_73(s[i]);i++){}return {start:_76,end:i};};var _77=function(s,_78,_79){var _7a;if(_79){_7a=_74(s,_78);}else{if(_78<=0){return _78;}_7a=_74(s,_78-1);}if(!_7a){return _78;}if(_79){if(_7a.start>=_78-_66){return _7a.start;}if(_7a.end<=_78+_66){return _7a.end;}}else{if(_7a.end<=_78+_66){return _7a.end;}if(_7a.start>=_78-_66){return _7a.start;}}return _78;};var _7b=function(s,_7c){var _7d=[];if(_7c){var _7e=0;var n=s.length;var _7f=0;do{_7c.lastIndex=_7e;var _80=_7c.exec(s);if(_80){if(_7e<_80.index){var t=s.substring(_7e,_80.index);_7d.push({text:t});}_7d.push({text:_80[0],isMatch:true});_7e=_80.index+_80[0].length;}else{_7d.push({text:s.substr(_7e)});break;}}while(true);}else{_7d.push({text:s});}return _7d;};var _81=function(_82){var _83=0;for(var i=0;i<_82.length;i++){if(_82[i].isMatch){_83++;}}return _83;};var _84=function(s,_85,_86,_87,_88){var _89=Math.max(Math.floor(_88/(_87+1)),_65);var _8a=Math.max(_89-(_86-_85),0);var _8b=Math.min(Math.floor(_86+_8a/3),s.length);var _8c=Math.max(_8b-_89,0);_8c=_77(s,_8c,true);_8b=_77(s,_8b,false);return {start:_8c,end:_8b};};var _8d=function(_8e,s,_8f){var _90=[];var _91=_81(_8e);var pos=0;for(var i=0;i<_8e.length;i++){var t=_8e[i];var _92=t.text;if(t.isMatch){var _93=_84(s,pos,pos+_92.length,_91,_8f);_67(_90,_93.start,_93.end);}pos+=_92.length;}return _90;};var _94=function(s,_95,_96){var _97=_96-_6f(_95);while(_97>0){if(_95.length==0){_67(_95,0,_77(s,_96,false));return;}else{var _98=_95[0];var _99;var _9a;if(_98.start==0){_99=_98.end;if(_95.length>1){_9a=_95[1].start;}else{_67(_95,_99,_77(s,_99+_97,false));return;}}else{_99=0;_9a=_98.start;}var _9b=Math.min(_9a,_99+_97);_67(_95,_99,_9b);_97-=(_9b-_99);}}};var _9c=function(_9d,s,_9e,_9f,_a0){if(_9f.length==0){return;}var _a1=function(_a2,s,_a3,_a4,_a5){var t;var _a6;var pos=0;var i=0;var _a7=0;for(;i<_a3.length;i++){t=_a3[i];_a6=t.text;if(_a4<pos+_a6.length){_a7=_a4-pos;break;}pos+=_a6.length;}var _a8=_a5-_a4;for(;i<_a3.length&&_a8>0;i++){t=_a3[i];_a6=t.text.substr(_a7);_a7=0;if(_a6.length>_a8){_a6=_a6.substr(0,_a8);}if(t.isMatch){createTiddlyElement(_a2,"span",null,"marked",_a6);}else{createTiddlyText(_a2,_a6);}_a8-=_a6.length;}if(_a5<s.length){abego.createEllipsis(_a2);}};if(_9f[0].start>0){abego.createEllipsis(_9d);}var _a9=_a0;for(var i=0;i<_9f.length&&_a9>0;i++){var _aa=_9f[i];var len=Math.min(_aa.end-_aa.start,_a9);_a1(_9d,s,_9e,_aa.start,_aa.start+len);_a9-=len;}};this.render=function(_ab,s,_ac,_ad){if(s.length<_ac){_ac=s.length;}var _ae=_7b(s,_ad);var _af=_8d(_ae,s,_ac);_94(s,_af,_ac);_9c(_ab,s,_ae,_af,_ac);};};(function(){function _b0(msg){alert(msg);throw msg;};if(version.major<2||(version.major==2&&version.minor<1)){_b0("YourSearchPlugin requires TiddlyWiki 2.1 or newer.\n\nCheck the archive for YourSearch plugins\nsupporting older versions of TiddlyWiki.\n\nArchive: http://tiddlywiki.abego-software.de/archive");}abego.YourSearch={};var _b1;var _b2;var _b3=function(_b4){_b1=_b4;};var _b5=function(){return _b1?_b1:[];};var _b6=function(){return _b1?_b1.length:0;};var _b7=4;var _b8=10;var _b9=2;var _ba=function(s,re){var m=s.match(re);return m?m.length:0;};var _bb=function(_bc,_bd){var _be=_bd.getMarkRegExp();if(!_be){return 1;}var _bf=_bc.title.match(_be);var _c0=_bf?_bf.length:0;var _c1=_ba(_bc.getTags(),_be);var _c2=_bf?_bf.join("").length:0;var _c3=_bc.title.length>0?_c2/_bc.title.length:0;var _c4=_c0*_b7+_c1*_b9+_c3*_b8+1;return _c4;};var _c5=function(_c6,_c7,_c8,_c9,_ca,_cb){_b2=null;var _cc=_c6.reverseLookup("tags",_cb,false);try{var _cd=[];if(config.options.chkSearchInTitle){_cd.push("title");}if(config.options.chkSearchInText){_cd.push("text");}if(config.options.chkSearchInTags){_cd.push("tags");}_b2=new abego.TiddlerQuery(_c7,_c8,_c9,_cd,config.options.chkSearchExtendedFields);}catch(e){return [];}var _ce=_b2.filter(_cc);var _cf=abego.YourSearch.getRankFunction();for(var i=0;i<_ce.length;i++){var _d0=_ce[i];var _d1=_cf(_d0,_b2);_d0.searchRank=_d1;}if(!_ca){_ca="title";}var _d2=function(a,b){var _d3=a.searchRank-b.searchRank;if(_d3==0){if(a[_ca]==b[_ca]){return (0);}else{return (a[_ca]<b[_ca])?-1:+1;}}else{return (_d3>0)?-1:+1;}};_ce.sort(_d2);return _ce;};var _d4=80;var _d5=50;var _d6=250;var _d7=50;var _d8=25;var _d9=10;var _da="yourSearchResult";var _db="yourSearchResultItems";var _dc;var _dd;var _de;var _df;var _e0;var _e1=function(){if(version.extensions.YourSearchPlugin.styleSheetInited){return;}version.extensions.YourSearchPlugin.styleSheetInited=true;setStylesheet(store.getTiddlerText("YourSearchStyleSheet"),"yourSearch");};var _e2=function(){return _dd!=null&&_dd.parentNode==document.body;};var _e3=function(){if(_e2()){document.body.removeChild(_dd);}};var _e4=function(e){_e3();var _e5=this.getAttribute("tiddlyLink");if(_e5){var _e6=this.getAttribute("withHilite");var _e7=highlightHack;if(_e6&&_e6=="true"&&_b2){highlightHack=_b2.getMarkRegExp();}story.displayTiddler(this,_e5);highlightHack=_e7;}return (false);};var _e8=function(){if(!_de){return;}var _e9=_de;var _ea=findPosX(_e9);var _eb=findPosY(_e9);var _ec=_e9.offsetHeight;var _ed=_ea;var _ee=_eb+_ec;var _ef=findWindowWidth();if(_ef<_dd.offsetWidth){_dd.style.width=(_ef-100)+"px";_ef=findWindowWidth();}var _f0=_dd.offsetWidth;if(_ed+_f0>_ef){_ed=_ef-_f0-30;}if(_ed<0){_ed=0;}_dd.style.left=_ed+"px";_dd.style.top=_ee+"px";_dd.style.display="block";};var _f1=function(){if(_dd){window.scrollTo(0,ensureVisible(_dd));}if(_de){window.scrollTo(0,ensureVisible(_de));}};var _f2=function(){_e8();_f1();};var _f3;var _f4;var _f5=new abego.PageWiseRenderer();var _f6=function(_f7){this.itemHtml=store.getTiddlerText("YourSearchItemTemplate");if(!this.itemHtml){_b0("YourSearchItemTemplate not found");}this.place=document.getElementById(_db);if(!this.place){this.place=createTiddlyElement(_f7,"div",_db);}};merge(_f6.prototype,{render:function(_f8,_f9,_fa,_fb){_f3=_fb;_f4=_f9;var _fc=createTiddlyElement(this.place,"div",null,"yourSearchItem");_fc.innerHTML=this.itemHtml;applyHtmlMacros(_fc,null);refreshElements(_fc,null);},endRendering:function(_fd){_f4=null;}});var _fe=function(){if(!_dd||!_de){return;}var _ff=store.getTiddlerText("YourSearchResultTemplate");if(!_ff){_ff="<b>Tiddler YourSearchResultTemplate not found</b>";}_dd.innerHTML=_ff;applyHtmlMacros(_dd,null);refreshElements(_dd,null);var _100=new _f6(_dd);_f5.renderPage(_100);_f2();};_f5.getItemsPerPage=function(){var n=(config.options.chkPreviewText)?abego.toInt(config.options.txtItemsPerPageWithPreview,_d9):abego.toInt(config.options.txtItemsPerPage,_d8);return (n>0)?n:1;};_f5.onPageChanged=function(){_fe();};var _101=function(){if(_de==null||!config.options.chkUseYourSearch){return;}if((_de.value==_dc)&&_dc&&!_e2()){if(_dd&&(_dd.parentNode!=document.body)){document.body.appendChild(_dd);_f2();}else{abego.YourSearch.onShowResult(true);}}};var _102=function(){_e3();_dd=null;_dc=null;};var _103=function(self,e){while(e!=null){if(self==e){return true;}e=e.parentNode;}return false;};var _104=function(e){if(e.target==_de){return;}if(e.target==_df){return;}if(_dd&&_103(_dd,e.target)){return;}_e3();};var _105=function(e){if(e.keyCode==27){_e3();}};addEvent(document,"click",_104);addEvent(document,"keyup",_105);var _106=function(text,_107,_108){_dc=text;_b3(_c5(store,text,_107,_108,"title","excludeSearch"));abego.YourSearch.onShowResult();};var _109=function(_10a,_10b,_10c,_10d,_10e,_10f){_e1();_dc="";var _110=null;var _111=function(txt){if(config.options.chkUseYourSearch){_106(txt.value,config.options.chkCaseSensitiveSearch,config.options.chkRegExpSearch);}else{story.search(txt.value,config.options.chkCaseSensitiveSearch,config.options.chkRegExpSearch);}_dc=txt.value;};var _112=function(e){_111(_de);return false;};var _113=function(e){if(!e){var e=window.event;}_de=this;switch(e.keyCode){case 13:if(e.ctrlKey&&_e0&&_e2()){_e0.onclick.apply(_e0,[e]);}else{_111(this);}break;case 27:if(_e2()){_e3();}else{this.value="";clearMessage();}break;}if(String.fromCharCode(e.keyCode)==this.accessKey||e.altKey){_101();}if(this.value.length<3&&_110){clearTimeout(_110);}if(this.value.length>2){if(this.value!=_dc){if(!config.options.chkUseYourSearch||config.options.chkSearchAsYouType){if(_110){clearTimeout(_110);}var txt=this;_110=setTimeout(function(){_111(txt);},500);}}else{if(_110){clearTimeout(_110);}}}if(this.value.length==0){_e3();}};var _114=function(e){this.select();clearMessage();_101();};var args=_10e.parseParams("list",null,true);var _115=getFlag(args,"buttonAtRight");var _116=getParam(args,"sizeTextbox",this.sizeTextbox);var btn;if(!_115){btn=createTiddlyButton(_10a,this.label,this.prompt,_112);}var txt=createTiddlyElement(null,"input",null,"txtOptionInput searchField",null);if(_10c[0]){txt.value=_10c[0];}txt.onkeyup=_113;txt.onfocus=_114;txt.setAttribute("size",_116);txt.setAttribute("accessKey",this.accessKey);txt.setAttribute("autocomplete","off");if(config.browser.isSafari){txt.setAttribute("type","search");txt.setAttribute("results","5");}else{txt.setAttribute("type","text");}if(_10a){_10a.appendChild(txt);}if(_115){btn=createTiddlyButton(_10a,this.label,this.prompt,_112);}_de=txt;_df=btn;};var _117=function(){_e3();var _118=_b5();var n=_118.length;if(n){var _119=[];for(var i=0;i<n;i++){_119.push(_118[i].title);}story.displayTiddlers(null,_119);}};var _11a=function(_11b,_11c,_11d,_11e){invokeMacro(_11b,"option",_11c,_11d,_11e);var elem=_11b.lastChild;var _11f=elem.onclick;elem.onclick=function(e){var _120=_11f.apply(this,arguments);_fe();return _120;};return elem;};var _121=function(s){var _122=["''","{{{","}}}","//","<<<","/***","***/"];var _123="";for(var i=0;i<_122.length;i++){if(i!=0){_123+="|";}_123+="("+_122[i].escapeRegExp()+")";}return s.replace(new RegExp(_123,"mg"),"").trim();};var _124=function(){var i=_f3;return (i>=0&&i<=9)?(i<9?(i+1):0):-1;};var _125=new abego.LimitedTextRenderer();var _126=function(_127,s,_128){_125.render(_127,s,_128,_b2.getMarkRegExp());};var _129=TiddlyWiki.prototype.saveTiddler;TiddlyWiki.prototype.saveTiddler=function(_12a,_12b,_12c,_12d,_12e,tags,_12f){_129.apply(this,arguments);_102();};var _130=TiddlyWiki.prototype.removeTiddler;TiddlyWiki.prototype.removeTiddler=function(_131){_130.apply(this,arguments);_102();};config.macros.yourSearch={label:"yourSearch",prompt:"Gives access to the current/last YourSearch result",handler:function(_132,_133,_134,_135,_136,_137){if(_134.length==0){return;}var name=_134[0];var func=config.macros.yourSearch.funcs[name];if(func){func(_132,_133,_134,_135,_136,_137);}},tests:{"true":function(){return true;},"false":function(){return false;},"found":function(){return _b6()>0;},"previewText":function(){return config.options.chkPreviewText;}},funcs:{itemRange:function(_138){if(_b6()){var _139=_f5.getLastIndexOnPage();var s="%0 - %1".format([_f5.getFirstIndexOnPage()+1,_139+1]);createTiddlyText(_138,s);}},count:function(_13a){createTiddlyText(_13a,_b6().toString());},query:function(_13b){if(_b2){createTiddlyText(_13b,_b2.toString());}},version:function(_13c){var t="YourSearch %0.%1.%2".format([version.extensions.YourSearchPlugin.major,version.extensions.YourSearchPlugin.minor,version.extensions.YourSearchPlugin.revision]);var e=createTiddlyElement(_13c,"a");e.setAttribute("href","http://tiddlywiki.abego-software.de/#YourSearchPlugin");e.innerHTML="<font color=\"black\" face=\"Arial, Helvetica, sans-serif\">"+t+"<font>";},copyright:function(_13d){var e=createTiddlyElement(_13d,"a");e.setAttribute("href","http://www.abego-software.de");e.innerHTML="<font color=\"black\" face=\"Arial, Helvetica, sans-serif\">© 2005-2008 <b><font color=\"red\">abego</font></b> Software<font>";},newTiddlerButton:function(_13e){if(_b2){var r=abego.parseNewTiddlerCommandLine(_b2.getQueryText());var btn=config.macros.newTiddler.createNewTiddlerButton(_13e,r.title,r.params,"new tiddler","Create a new tiddler based on search text. (Shortcut: Ctrl-Enter; Separators: '.', '#')",null,"text");var _13f=btn.onclick;btn.onclick=function(){_e3();_13f.apply(this,arguments);};_e0=btn;}},linkButton:function(_140,_141,_142,_143,_144,_145){if(_142<2){return;}var _146=_142[1];var text=_142<3?_146:_142[2];var _147=_142<4?text:_142[3];var _148=_142<5?null:_142[4];var btn=createTiddlyButton(_140,text,_147,_e4,null,null,_148);btn.setAttribute("tiddlyLink",_146);},closeButton:function(_149,_14a,_14b,_14c,_14d,_14e){var _14f=createTiddlyButton(_149,"close","Close the Search Results (Shortcut: ESC)",_e3);},openAllButton:function(_150,_151,_152,_153,_154,_155){var n=_b6();if(n==0){return;}var _156=n==1?"open tiddler":"open all %0 tiddlers".format([n]);var _157=createTiddlyButton(_150,_156,"Open all found tiddlers (Shortcut: Alt-O)",_117);_157.setAttribute("accessKey","O");},naviBar:function(_158,_159,_15a,_15b,_15c,_15d){_f5.addPageNavigation(_158);},"if":function(_15e,_15f,_160,_161,_162,_163){if(_160.length<2){return;}var _164=_160[1];var _165=(_164=="not");if(_165){if(_160.length<3){return;}_164=_160[2];}var test=config.macros.yourSearch.tests[_164];var _166=false;try{if(test){_166=test(_15e,_15f,_160,_161,_162,_163)!=_165;}else{_166=(!eval(_164))==_165;}}catch(ex){}if(!_166){_15e.style.display="none";}},chkPreviewText:function(_167,_168,_169,_16a,_16b,_16c){var _16d=_169.slice(1).join(" ");var elem=_11a(_167,"chkPreviewText",_16a,_16c);elem.setAttribute("accessKey","P");elem.title="Show text preview of found tiddlers (Shortcut: Alt-P)";return elem;}}};config.macros.foundTiddler={label:"foundTiddler",prompt:"Provides information on the tiddler currently processed on the YourSearch result page",handler:function(_16e,_16f,_170,_171,_172,_173){var name=_170[0];var func=config.macros.foundTiddler.funcs[name];if(func){func(_16e,_16f,_170,_171,_172,_173);}},funcs:{title:function(_174,_175,_176,_177,_178,_179){if(!_f4){return;}var _17a=_124();var _17b=_17a>=0?"Open tiddler (Shortcut: Alt-%0)".format([_17a.toString()]):"Open tiddler";var btn=createTiddlyButton(_174,null,_17b,_e4,null);btn.setAttribute("tiddlyLink",_f4.title);btn.setAttribute("withHilite","true");_126(btn,_f4.title,_d4);if(_17a>=0){btn.setAttribute("accessKey",_17a.toString());}},tags:function(_17c,_17d,_17e,_17f,_180,_181){if(!_f4){return;}_126(_17c,_f4.getTags(),_d5);},text:function(_182,_183,_184,_185,_186,_187){if(!_f4){return;}_126(_182,_121(_f4.text),_d6);},field:function(_188,_189,_18a,_18b,_18c,_18d){if(!_f4){return;}var name=_18a[1];var len=_18a.length>2?abego.toInt(_18a[2],_d7):_d7;var v=store.getValue(_f4,name);if(v){_126(_188,_121(v),len);}},number:function(_18e,_18f,_190,_191,_192,_193){var _194=_124();if(_194>=0){var text="%0)".format([_194.toString()]);createTiddlyElement(_18e,"span",null,"shortcutNumber",text);}}}};var opts={chkUseYourSearch:true,chkPreviewText:true,chkSearchAsYouType:true,chkSearchInTitle:true,chkSearchInText:true,chkSearchInTags:true,chkSearchExtendedFields:true,txtItemsPerPage:_d8,txtItemsPerPageWithPreview:_d9};for(var n in opts){if(config.options[n]==undefined){config.options[n]=opts[n];}}config.shadowTiddlers.AdvancedOptions+="\n<<option chkUseYourSearch>> Use 'Your Search' //([[more options|YourSearch Options]]) ([[help|YourSearch Help]])// ";config.shadowTiddlers["YourSearch Help"]="!Field Search\nWith the Field Search you can restrict your search to certain fields of a tiddler, e.g"+" only search the tags or only the titles. The general form is //fieldname//'':''//textToSearch// (e."+"g. {{{title:intro}}}). In addition one-character shortcuts are also supported for the standard field"+"s {{{title}}}, {{{text}}} and {{{tags}}}:\n|!What you want|!What you type|!Example|\n|Search ''titles "+"only''|start word with ''!''|{{{!jonny}}} (shortcut for {{{title:jonny}}})|\n|Search ''contents/text "+"only''|start word with ''%''|{{{%football}}} (shortcut for {{{text:football}}})|\n|Search ''tags only"+"''|start word with ''#''|{{{#Plugin}}} (shortcut for {{{tags:Plugin}}})|\n\nUsing this feature you may"+" also search the extended fields (\"Metadata\") introduced with TiddlyWiki 2.1, e.g. use {{{priority:1"+"}}} to find all tiddlers with the priority field set to \"1\".\n\nYou may search a word in more than one"+" field. E.g. {{{!#Plugin}}} (or {{{title:tags:Plugin}}} in the \"long form\") finds tiddlers containin"+"g \"Plugin\" either in the title or in the tags (but does not look for \"Plugin\" in the text). \n\n!Boole"+"an Search\nThe Boolean Search is useful when searching for multiple words.\n|!What you want|!What you "+"type|!Example|\n|''All words'' must exist|List of words|{{{jonny jeremy}}} (or {{{jonny and jeremy}}}"+")|\n|''At least one word'' must exist|Separate words by ''or''|{{{jonny or jeremy}}}|\n|A word ''must "+"not exist''|Start word with ''-''|{{{-jonny}}} (or {{{not jonny}}})|\n\n''Note:'' When you specify two"+" words, separated with a space, YourSearch finds all tiddlers that contain both words, but not neces"+"sarily next to each other. If you want to find a sequence of word, e.g. '{{{John Brown}}}', you need"+" to put the words into quotes. I.e. you type: {{{\"john brown\"}}}.\n\nUsing parenthesis you may change "+"the default \"left to right\" evaluation of the boolean search. E.g. {{{not (jonny or jeremy)}}} finds"+" all tiddlers that contain neither \"jonny\" nor \"jeremy. In contrast to this {{{not jonny or jeremy}}"+"} (i.e. without parenthesis) finds all tiddlers that either don't contain \"jonny\" or that contain \"j"+"eremy\".\n\n!'Exact Word' Search\nBy default a search result all matches that 'contain' the searched tex"+"t. E.g. if you search for {{{Task}}} you will get all tiddlers containing 'Task', but also '~Complet"+"edTask', '~TaskForce' etc.\n\nIf you only want to get the tiddlers that contain 'exactly the word' you"+" need to prefix it with a '='. E.g. typing '=Task' will find the tiddlers that contain the word 'Tas"+"k', ignoring words that just contain 'Task' as a substring.\n\n!~CaseSensitiveSearch and ~RegExpSearch"+"\nThe standard search options ~CaseSensitiveSearch and ~RegExpSearch are fully supported by YourSearc"+"h. However when ''~RegExpSearch'' is on Filtered and Boolean Search are disabled.\n\nIn addition you m"+"ay do a \"regular expression\" search even with the ''~RegExpSearch'' set to false by directly enterin"+"g the regular expression into the search field, framed with {{{/.../}}}. \n\nExample: {{{/m[ae][iy]er/"+"}}} will find all tiddlers that contain either \"maier\", \"mayer\", \"meier\" or \"meyer\".\n\n!~JavaScript E"+"xpression Filtering\nIf you are familiar with JavaScript programming and know some TiddlyWiki interna"+"ls you may also use JavaScript expression for the search. Just enter a JavaScript boolean expression"+" into the search field, framed with {{{ { ... } }}}. In the code refer to the variable tiddler and e"+"valuate to {{{true}}} when the given tiddler should be included in the result. \n\nExample: {{{ { tidd"+"ler.modified > new Date(\"Jul 4, 2005\")} }}} returns all tiddler modified after July 4th, 2005.\n\n!Com"+"bined Search\nYou are free to combine the various search options. \n\n''Examples''\n|!What you type|!Res"+"ult|\n|{{{!jonny !jeremy -%football}}}|all tiddlers with both {{{jonny}}} and {{{jeremy}}} in its tit"+"les, but no {{{football}}} in content.|\n|{{{#=Task}}}|All tiddlers tagged with 'Task' (the exact wor"+"d). Tags named '~CompletedTask', '~TaskForce' etc. are not considered.|\n\n!Access Keys\nYou are encour"+"aged to use the access keys (also called \"shortcut\" keys) for the most frequently used operations. F"+"or quick reference these shortcuts are also mentioned in the tooltip for the various buttons etc.\n\n|"+"!Key|!Operation|\n|{{{Alt-F}}}|''The most important keystroke'': It moves the cursor to the search in"+"put field so you can directly start typing your query. Pressing {{{Alt-F}}} will also display the pr"+"evious search result. This way you can quickly display multiple tiddlers using \"Press {{{Alt-F}}}. S"+"elect tiddler.\" sequences.|\n|{{{ESC}}}|Closes the [[YourSearch Result]]. When the [[YourSearch Resul"+"t]] is already closed and the cursor is in the search input field the field's content is cleared so "+"you start a new query.|\n|{{{Alt-1}}}, {{{Alt-2}}},... |Pressing these keys opens the first, second e"+"tc. tiddler from the result list.|\n|{{{Alt-O}}}|Opens all found tiddlers.|\n|{{{Alt-P}}}|Toggles the "+"'Preview Text' mode.|\n|{{{Alt-'<'}}}, {{{Alt-'>'}}}|Displays the previous or next page in the [[Your"+"Search Result]].|\n|{{{Return}}}|When you have turned off the 'as you type' search mode pressing the "+"{{{Return}}} key actually starts the search (as does pressing the 'search' button).|\n\n//If some of t"+"hese shortcuts don't work for you check your browser if you have other extensions installed that alr"+"eady \"use\" these shortcuts.//";config.shadowTiddlers["YourSearch Options"]="|>|!YourSearch Options|\n|>|<<option chkUseYourSearch>> Use 'Your Search'|\n|!|<<option chkPreviewText"+">> Show Text Preview|\n|!|<<option chkSearchAsYouType>> 'Search As You Type' Mode (No RETURN required"+" to start search)|\n|!|Default Search Filter:<<option chkSearchInTitle>>Title ('!') <<option chk"+"SearchInText>>Text ('%') <<option chkSearchInTags>>Tags ('#') <<option chkSearchExtendedFiel"+"ds>>Extended Fields<html><br><font size=\"-2\">The fields of a tiddlers that are searched when you don"+"'t explicitly specify a filter in the search text <br>(Explictly specify fields using one or more '!"+"', '%', '#' or 'fieldname:' prefix before the word/text to find).</font></html>|\n|!|Number of items "+"on search result page: <<option txtItemsPerPage>>|\n|!|Number of items on search result page with pre"+"view text: <<option txtItemsPerPageWithPreview>>|\n";config.shadowTiddlers["YourSearchStyleSheet"]="/***\n!~YourSearchResult Stylesheet\n***/\n/*{{{*/\n.yourSearchResult {\n\tposition: absolute;\n\twidth: 800"+"px;\n\n\tpadding: 0.2em;\n\tlist-style: none;\n\tmargin: 0;\n\n\tbackground: #ffd;\n\tborder: 1px solid DarkGra"+"y;\n}\n\n/*}}}*/\n/***\n!!Summary Section\n***/\n/*{{{*/\n.yourSearchResult .summary {\n\tborder-bottom-width:"+" thin;\n\tborder-bottom-style: solid;\n\tborder-bottom-color: #999999;\n\tpadding-bottom: 4px;\n}\n\n.yourSea"+"rchRange, .yourSearchCount, .yourSearchQuery {\n\tfont-weight: bold;\n}\n\n.yourSearchResult .summary ."+"button {\n\tfont-size: 10px;\n\n\tpadding-left: 0.3em;\n\tpadding-right: 0.3em;\n}\n\n.yourSearchResult .summa"+"ry .chkBoxLabel {\n\tfont-size: 10px;\n\n\tpadding-right: 0.3em;\n}\n\n/*}}}*/\n/***\n!!Items Area\n***/\n/*{{{*"+"/\n.yourSearchResult .marked {\n\tbackground: none;\n\tfont-weight: bold;\n}\n\n.yourSearchItem {\n\tmargin-to"+"p: 2px;\n}\n\n.yourSearchNumber {\n\tcolor: #808080;\n}\n\n\n.yourSearchTags {\n\tcolor: #008000;\n}\n\n.yourSearc"+"hText {\n\tcolor: #808080;\n\tmargin-bottom: 6px;\n}\n\n/*}}}*/\n/***\n!!Footer\n***/\n/*{{{*/\n.yourSearchFoote"+"r {\n\tmargin-top: 8px;\n\tborder-top-width: thin;\n\tborder-top-style: solid;\n\tborder-top-color: #999999;"+"\n}\n\n.yourSearchFooter a:hover{\n\tbackground: none;\n\tcolor: none;\n}\n/*}}}*/\n/***\n!!Navigation Bar\n***/"+"\n/*{{{*/\n.yourSearchNaviBar a {\n\tfont-size: 16px;\n\tmargin-left: 4px;\n\tmargin-right: 4px;\n\tcolor: bla"+"ck;\n\ttext-decoration: underline;\n}\n\n.yourSearchNaviBar a:hover {\n\tbackground-color: none;\n}\n\n.yourSe"+"archNaviBar .prev {\n\tfont-weight: bold;\n\tcolor: blue;\n}\n\n.yourSearchNaviBar .currentPage {\n\tcolor: #"+"FF0000;\n\tfont-weight: bold;\n\ttext-decoration: none;\n}\n\n.yourSearchNaviBar .next {\n\tfont-weight: bold"+";\n\tcolor: blue;\n}\n/*}}}*/\n";config.shadowTiddlers["YourSearchResultTemplate"]="<!--\n{{{\n-->\n<span macro=\"yourSearch if found\">\n<!-- The Summary Header ============================"+"================ -->\n<table class=\"summary\" border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">"+"<tbody>\n <tr>\n\t<td align=\"left\">\n\t\tYourSearch Result <span class=\"yourSearchRange\" macro=\"yourSearc"+"h itemRange\"></span>\n\t\t of <span class=\"yourSearchCount\" macro=\"yourSearch count\"></span>\n"+"\t\tfor <span class=\"yourSearchQuery\" macro=\"yourSearch query\"></span>\n\t</td>\n\t<td class=\"yourSea"+"rchButtons\" align=\"right\">\n\t\t<span macro=\"yourSearch chkPreviewText\"></span><span class=\"chkBoxLabel"+"\">preview text</span>\n\t\t<span macro=\"yourSearch newTiddlerButton\"></span>\n\t\t<span macro=\"yourSearch openAllButton\"></span>\n\t\t<span macro=\"yourSearch lin"+"kButton 'YourSearch Options' options 'Configure YourSearch'\"></span>\n\t\t<span macro=\"yourSearch linkB"+"utton 'YourSearch Help' help 'Get help how to use YourSearch'\"></span>\n\t\t<span macro=\"yourSearch clo"+"seButton\"></span>\n\t</td>\n </tr>\n</tbody></table>\n\n<!-- The List of Found Tiddlers ================="+"=========================== -->\n<div id=\"yourSearchResultItems\" itemsPerPage=\"25\" itemsPerPageWithPr"+"eview=\"10\"></div>\n\n<!-- The Footer (with the Navigation) ==========================================="+"= -->\n<table class=\"yourSearchFooter\" border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\"><tbody"+">\n <tr>\n\t<td align=\"left\">\n\t\tResult page: <span class=\"yourSearchNaviBar\" macro=\"yourSearch naviBar"+"\"></span>\n\t</td>\n\t<td align=\"right\"><span macro=\"yourSearch version\"></span>, <span macro=\"yourSearc"+"h copyright\"></span>\n\t</td>\n </tr>\n</tbody></table>\n<!-- end of the 'tiddlers found' case ========="+"================================== -->\n</span>\n\n\n<!-- The \"No tiddlers found\" case ================="+"========================== -->\n<span macro=\"yourSearch if not found\">\n<table class=\"summary\" border="+"\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\"><tbody>\n <tr>\n\t<td align=\"left\">\n\t\tYourSearch Resu"+"lt: No tiddlers found for <span class=\"yourSearchQuery\" macro=\"yourSearch query\"></span>.\n\t</td>\n\t<t"+"d class=\"yourSearchButtons\" align=\"right\">\n\t\t<span macro=\"yourSearch newTiddlerButton\"></span>\n\t\t<span macro=\"yourSearch linkButton 'YourSearch Options'"+" options 'Configure YourSearch'\"></span>\n\t\t<span macro=\"yourSearch linkButton 'YourSearch Help' help"+" 'Get help how to use YourSearch'\"></span>\n\t\t<span macro=\"yourSearch closeButton\"></span>\n\t</td>\n <"+"/tr>\n</tbody></table>\n</span>\n\n\n<!--\n}}}\n-->\n";config.shadowTiddlers["YourSearchItemTemplate"]="<!--\n{{{\n-->\n<span class='yourSearchNumber' macro='foundTiddler number'></span>\n<span class='yourSea"+"rchTitle' macro='foundTiddler title'/></span> - \n<span class='yourSearchTags' macro='found"+"Tiddler field tags 50'/></span>\n<span macro=\"yourSearch if previewText\"><div class='yourSearchText' macro='fo"+"undTiddler field text 250'/></div></span>\n<!--\n}}}\n-->";config.shadowTiddlers["YourSearch"]="<<tiddler [[YourSearch Help]]>>";config.shadowTiddlers["YourSearch Result"]="The popup-like window displaying the result of a YourSearch query.";config.macros.search.handler=_109;var _195=function(){if(config.macros.search.handler!=_109){alert("Message from YourSearchPlugin:\n\n\nAnother plugin has disabled the 'Your Search' features.\n\n\nYou may "+"disable the other plugin or change the load order of \nthe plugins (by changing the names of the tidd"+"lers)\nto enable the 'Your Search' features.");}};setTimeout(_195,5000);abego.YourSearch.getStandardRankFunction=function(){return _bb;};abego.YourSearch.getRankFunction=function(){return abego.YourSearch.getStandardRankFunction();};abego.YourSearch.getCurrentTiddler=function(){return _f4;};abego.YourSearch.closeResult=function(){_e3();};abego.YourSearch.getFoundTiddlers=function(){return _b1;};abego.YourSearch.getQuery=function(){return _b2;};abego.YourSearch.onShowResult=function(_196){highlightHack=_b2?_b2.getMarkRegExp():null;if(!_196){_f5.setItems(_b5());}if(!_dd){_dd=createTiddlyElement(document.body,"div",_da,"yourSearchResult");}else{if(_dd.parentNode!=document.body){document.body.appendChild(_dd);}}_fe();highlightHack=null;};})();}
//%/
<html><table>
<tr><th>Тип связи</th><th>Значение</th><th>Примечание</th></tr>
<tr class="odd"><td rowspan=2 class="evn mid">Тел.<br>(phones):</td><td class="mid">+7(342)298-56-08</td><td class="remark">моб. (mobile)</td></tr>
<tr class="evn"><td class="mid">+7(342)261-91-53</td><td class="remark">дом. (home)</td></tr>
<tr class="odd"><td class="mid">Аська (ICQ):</td><td class="mid">470-208-921</td><td class="remark">запросы авторизации отключены (для уменьшения количества спама), поэтому сначала просто сообщение пишите, чтобы я вас увидел<br>(authorisation query off, so send me a simple message first)</td></tr>
<tr class="evn"><td class="mid">Скайп (Skype):</td><td class="mid">vmunt.in.skype</td><td /></tr>
<tr class="odd"><td class="mid">Jabber/XMPP:</td><td class="mid">vmunt <span class="remark">(большая собачка)</span> jabber <span class="remark">(маленькая точка)</span> ru</td><td /></tr>
<tr class="evn"><td class="mid">Почта (mail):</td><td class="mid">vmunt <span class="remark">(большая собачка)</span> мэйл <span class="remark">(маленькая точка)</span> ру</td><td /></tr>
<tr class="odd"><td class="mid">Сайт (www):</td><td class="mid">vmunt.site</td><td /></tr>
</table></html>
{{remark{Вся информация о диске представлена в двух таблицах:}}}
# {{remark{серийный номер и данные тестирования MHDD, и}}}
# {{remark{данные S.M.A.R.T., полученные с помощью MHDD {{remark{(последние данные, если тестирований было несколько)}}}.}}}
{{remark{Объявление о продаже: [[Avito|https://www.avito.ru/perm/tovary_dlya_kompyutera/18_zhestkih_diskov_sata_35_ot_200_do_500gb_1199347863]].}}}
++++![Продающиеся »»][Продающиеся ««]
+++!![01. Maxtor STM3250820AS 250Gb »»][01. Maxtor STM3250820AS 250Gb ««]
|!Жёсткий диск|!Cерийный номер|>|>|>|>|>|!Задержка|!Дата покупки<br>{{remark{(тестирования)}}}|!Примечание|
|~|~|!<3ms|!<10ms|!<50ms|!<150ms|!<500ms|!>500ms|~|~|
|Maxtor STM3250820AS 250Gb | 9QE40J9D | 1'765'395| 149'212| 677| 0| 0| 0| 09.12.2012 |Бывший диск C: с детского компьютера |
|~|~| 1'764'415| 150'206| 663| 0| 0| 0| {{remark{12.02.2017}}} |время тестирования: 1:01:34. |
|~|~| 1'762'775| 151'832| 677| 0| 0| 0| {{remark{2.05.2017}}} |Seek error rate: 111M, Ultra ATA CRC error rate: 1, HDA temperature: 53, время тестирования: 1:01:34. |
{{{
HDD: MAXTOR STM3250820AS; FW: 3.AAE; SN: 9QE40J9D
--------------------------------------------------------
Name Val Worst Raw
Att # 1 : Read error rate : 105 89 7606538
Att # 3 : Spin up time : 96 95 0
Att # 4 : Number of spin-up times : 99 99 1251
Att # 5 : Reallocated sectors count : 100 100 0
Att # 7 : Seek error rate : 80 61 104666680
Att # 9 : Power-on time : 95 95 4817
Att # 10 : Spin-up retries : 100 100 0
Att # 12 : Start/stop count : 99 99 1262
Att # 187 : Unknown : 100 100 0
Att # 189 : Unknown : 100 100 0
Att # 190 : Unknown : 71 45 488374301
Att # 194 : HDA Temperature : 29 55 29
Att # 195 : Hardware ECC recovered : 86 57 21276284
Att # 197 : Current pending sectors : 100 100 0
Att # 198 : Offline scan UNC sectors : 100 100 0
Att # 199 : Ultra ATA CRC Error Rate : 200 200 1
Att # 200 : Write error rate : 100 253 0
Att # 202 : Unknown : 100 253 0
}}}
===
+++!![02. WDC WD3000JD-98KLB0 300Gb »»][02. WDC WD3000JD-98KLB0 300Gb ««]
|!Жёсткий диск|!Cерийный номер|>|>|>|>|>|!Задержка|!Дата покупки<br>{{remark{(тестирования)}}}|!Примечание|
|~|~|!<3ms|!<10ms|!<50ms|!<150ms|!<500ms|!>500ms|~|~|
|WDC WD3000JD-98KLB0 300Gb | WD-WCAMR1266577 | 1'880'436| 417'461| 419| 5| 3| 0| {{remark{20.10.2015}}} |Warnings: 343'991'940, 496'899'375, 531'073'455, reallocated sectors count: 2, reallocate event count: 1, Ultra ATA CRC error rate: 39, write error rate: 3, время тестирования: 1:35:39. |
|~|~| 1'880'687| 417'474| 159| 2| 2| 0| {{remark{20.10.2015}}} |После очистки warnings: 496'899'375, 531'074'985, reallocated sectors count: 2, reallocate event count: 1, Ultra ATA CRC error rate: 39, write error rate: 3, время тестирования: 1:35:36. |
{{{
HDD: WDC WD3000JD-98KLB0; FW: 08.05J08; SN: WD-WCAMR1266577
--------------------------------------------------------
Name Val Worst Raw
Att # 1 : Read error rate : 200 200 44
Att # 3 : Spin up time : 223 185 3825
Att # 4 : Number of spin-up times : 99 99 1097
Att # 5 : Reallocated sectors count : 199 199 2
Att # 7 : Seek error rate : 200 200 0
Att # 9 : Power-on time : 80 80 14604
Att # 10 : Spin-up retries : 100 100 0
Att # 11 : Calibration retries : 100 100 0
Att # 12 : Start/stop count : 99 99 1093
Att # 194 : HDA Temperature : 126 85 24
Att # 196 : Reallocate event count : 199 199 1
Att # 197 : Current pending sectors : 200 200 0
Att # 198 : Offline scan UNC sectors : 200 200 0
Att # 199 : Ultra ATA CRC Error Rate : 200 200 39
Att # 200 : Write error rate : 200 200 3
}}}
===
+++!![03. WDC WD3200SD-01KNB0 320Gb »»][03. WDC WD3200SD-01KNB0 320Gb ««]
|!Жёсткий диск|!Cерийный номер|>|>|>|>|>|!Задержка|!Дата покупки<br>{{remark{(тестирования)}}}|!Примечание|
|~|~|!<3ms|!<10ms|!<50ms|!<150ms|!<500ms|!>500ms|~|~|
|WDC WD3200SD-01KNB0 320Gb<br />{{remark{(Raid Edition)}}} | WD-WCAMR2669793 | 2'166'443| 284'313| 765| 3| 0| 0| {{{19.10.2015}}} |{{remark{Серверный диск ЗУИЦ)}}}: {{error{UNC: 16}}}, reallocate sectors count: 23, reallocate event count: 2, offline scan UNC sectors: 32, ultra ATA CRC error rate: 1, время тестирования: 1:36:17. |
|~|~| 2'167'048| 284'426| 64| 2| 0| 0| {{{19.10.2015}}} |После очистки значения SMART те же самые, только UNC-дырки куда-то пропали. |
{{{
HDD: WDC WD3200SD-01KNB0; FW: 08.05J08; SN: WD-WCAMR2669793
--------------------------------------------------------
Name Val Worst Raw
Att # 1 : Read error rate : 200 200 0
Att # 3 : Spin up time : 231 186 3441
Att # 4 : Number of spin-up times : 100 100 694
Att # 5 : Reallocated sectors count : 197 197 23
Att # 7 : Seek error rate : 200 200 0
Att # 9 : Power-on time : 66 66 25480
Att # 10 : Spin-up retries : 100 100 0
Att # 11 : Calibration retries : 100 100 0
Att # 12 : Start/stop count : 100 100 691
Att # 194 : HDA Temperature : 132 90 18
Att # 196 : Reallocate event count : 198 198 2
Att # 197 : Current pending sectors : 200 200 0
Att # 198 : Offline scan UNC sectors : 200 199 32
Att # 199 : Ultra ATA CRC Error Rate : 200 200 1
Att # 200 : Write error rate : 200 200 0
}}}
===
+++!![04. Samsung HD320LJ 320Gb »»][04. Samsung HD320LJ 320Gb ««]
|!Жёсткий диск|!Cерийный номер|>|>|>|>|>|!Задержка|!Дата покупки<br>{{remark{(тестирования)}}}|!Примечание|
|~|~|!<3ms|!<10ms|!<50ms|!<150ms|!<500ms|!>500ms|~|~|
|Samsung HD320LJ 320Gb | S0K4J1TP100576 | 1'724'573| 721'750| 5'217| 0| 0| 0| {{remark{29.04.2017}}} |Reallocate sectors count (and all others): 0, время тестирования: 1:46:51. |
{{{
HDD: SAMSUNG HD320LJ; FW: BT100-15; SN: S0K4J1TP100576
--------------------------------------------------------
Name Val Worst Raw
Att # 1 : Read error rate : 100 100 0
Att # 3 : Spin up time : 100 100 8320
Att # 4 : Number of spin-up times : 90 90 10859
Att # 5 : Reallocated sectors count : 253 253 0
Att # 7 : Seek error rate : 253 253 0
Att # 8 : Seek time performance : 253 253 0
Att # 9 : Power-on time : 100 100 23024
Att # 10 : Spin-up retries : 253 253 0
Att # 11 : Calibration retries : 253 100 0
Att # 12 : Start/stop count : 95 95 5055
Att # 190 : Unknown : 59 44 41
Att # 194 : HDA Temperature : 115 70 41
Att # 195 : Hardware ECC recovered : 100 100 12120764
Att # 196 : Reallocate event count : 253 253 0
Att # 197 : Current pending sectors : 253 253 0
Att # 198 : Offline scan UNC sectors : 253 253 0
Att # 199 : Ultra ATA CRC Error Rate : 200 200 0
Att # 200 : Write error rate : 100 100 0
Att # 201 : Unknown : 100 100 0
Att # 202 : Unknown : 253 253 0
}}}
===
+++!![05. WDC WD4000AAJS-65YFA0 400Gb »»][05. WDC WD4000AAJS-65YFA0 400Gb ««]
|!Жёсткий диск|!Cерийный номер|>|>|>|>|>|!Задержка|!Дата покупки<br>{{remark{(тестирования)}}}|!Примечание|
|~|~|!<3ms|!<10ms|!<50ms|!<150ms|!<500ms|!>500ms|~|~|
|WDC WD4000AAJS-65YFA0 400Gb | WD-WCAS82902898 | 2'805'716| 258'594| 88| 6| 0| 0| {{remark{16.04.2014}}} |Reallocated sectors count: 0, Ultra ATA CRC error rate: 21, время тестирования: 1:48:37 |
{{{
HDD: WDC WD4000AAJS-65YFA0; FW: 12.01C02; SN: WD-WCAS82902898
--------------------------------------------------------
Name Val Worst Raw
Att # 1 : Read error rate : 200 200 0
Att # 3 : Spin up time : 172 169 6400
Att # 4 : Number of spin-up times : 100 100 129
Att # 5 : Reallocated sectors count : 200 200 0
Att # 7 : Seek error rate : 200 200 0
Att # 9 : Power-on time : 100 100 328
Att # 10 : Spin-up retries : 100 100 0
Att # 11 : Calibration retries : 100 100 0
Att # 12 : Start/stop count : 100 100 129
Att # 192 : Power-off retract count : 200 200 42
Att # 193 : Load/unload cycle count : 200 200 129
Att # 194 : HDA Temperature : 125 97 25
Att # 196 : Reallocate event count : 200 200 0
Att # 197 : Current pending sectors : 200 200 0
Att # 198 : Offline scan UNC sectors : 200 200 0
Att # 199 : Ultra ATA CRC Error Rate : 200 200 21
Att # 200 : Write error rate : 200 200 0
}}}
===
+++!![06. Hitachi HDT725040VLA360 400Gb »»][06. Hitachi HDT725040VLA360 400Gb ««]
|!Жёсткий диск|!Cерийный номер|>|>|>|>|>|!Задержка|!Дата покупки<br>{{remark{(тестирования)}}}|!Примечание|
|~|~|!<3ms|!<10ms|!<50ms|!<150ms|!<500ms|!>500ms|~|~|
|Hitachi HDT725040VLA360 400Gb | VFD301R30PK46D | 2'311'962| 751'483| 950| 0| 0| 0| {{remark{30.08.2015}}} |Relocated sectors count: 1, relocated event count: 1, HDA temperature: 52. |
{{{
HDD: Hitachi HDT725040VLA360; FW: V5COA73A; SN: VFD301R30PK46D
--------------------------------------------------------
Name Val Worst Raw
Att # 1 : Read error rate : 100 100 0
Att # 2 : Throughput performance : 100 100 0
Att # 3 : Spin up time : 88 88 37356082
Att # 4 : Number of spin-up times : 100 100 154
Att # 5 : Reallocated sectors count : 100 100 1
Att # 7 : Seek error rate : 100 100 0
Att # 8 : Seek time performance : 100 100 0
Att # 9 : Power-on time : 100 100 583
Att # 10 : Spin-up retries : 100 100 0
Att # 12 : Start/stop count : 100 100 153
Att # 192 : Power-off retract count : 100 100 165
Att # 193 : Load/unload cycle count : 100 100 165
Att # 194 : HDA Temperature : 206 206 29
Att # 196 : Reallocate event count : 100 100 1
Att # 197 : Current pending sectors : 100 100 0
Att # 198 : Offline scan UNC sectors : 100 100 0
Att # 199 : Ultra ATA CRC Error Rate : 200 253 0
}}}
===
+++!![07. Hitachi HDT725040VLA360 400Gb »»][07. Hitachi HDT725040VLA360 400Gb ««]
|!Жёсткий диск|!Cерийный номер|>|>|>|>|>|!Задержка|!Дата покупки<br>{{remark{(тестирования)}}}|!Примечание|
|~|~|!<3ms|!<10ms|!<50ms|!<150ms|!<500ms|!>500ms|~|~|
|Hitachi HDT725040VLA360 400Gb | VFD301R30PBABD | 2'311'612| 751'757| 1'034| 1| 0| 0| {{remark{29.08.2015}}} |Reallocated sectors count: 0, HDA temperature: 52, время тестирования: 1:59:56. |
{{{
HDD: Hitachi HDT725040VLA360; FW: V5COA73A; SN: VFD301R30PBABD
--------------------------------------------------------
Name Val Worst Raw
Att # 1 : Read error rate : 100 100 0
Att # 2 : Throughput performance : 100 100 0
Att # 3 : Spin up time : 97 97 33489414
Att # 4 : Number of spin-up times : 100 100 199
Att # 5 : Reallocated sectors count : 100 100 0
Att # 7 : Seek error rate : 100 100 0
Att # 8 : Seek time performance : 100 100 0
Att # 9 : Power-on time : 100 100 323
Att # 10 : Spin-up retries : 100 100 0
Att # 12 : Start/stop count : 100 100 197
Att # 192 : Power-off retract count : 100 100 201
Att # 193 : Load/unload cycle count : 100 100 201
Att # 194 : HDA Temperature : 230 230 26
Att # 196 : Reallocate event count : 100 100 0
Att # 197 : Current pending sectors : 100 100 0
Att # 198 : Offline scan UNC sectors : 100 100 0
Att # 199 : Ultra ATA CRC Error Rate : 200 253 0
}}}
===
+++!![08. Hitachi HDT725040VLA360 400Gb »»][08. Hitachi HDT725040VLA360 400Gb ««]
|!Жёсткий диск|!Cерийный номер|>|>|>|>|>|!Задержка|!Дата покупки<br>{{remark{(тестирования)}}}|!Примечание|
|~|~|!<3ms|!<10ms|!<50ms|!<150ms|!<500ms|!>500ms|~|~|
|Hitachi HDT725040VLA360 400Gb | R31HWLSK | 2'312'857| 750'593| 954| 0| 0| 0| {{remark{2.05.2017}}} |Reallocated sectors count: 0, HDA temperature: 52, время тестирования: 1:59:55. |
{{{
HDD: Hitachi HDT725040VLA360; FW: V5COA7EA; SN: VFK301R31HWLSK
--------------------------------------------------------
Name Val Worst Raw
Att # 1 : Read error rate : 100 100 0
Att # 2 : Throughput performance : 100 100 0
Att # 3 : Spin up time : 107 107 30998989
Att # 4 : Number of spin-up times : 100 100 3383
Att # 5 : Reallocated sectors count : 100 100 0
Att # 7 : Seek error rate : 100 100 0
Att # 8 : Seek time performance : 100 100 0
Att # 9 : Power-on time : 98 98 15088
Att # 10 : Spin-up retries : 100 100 0
Att # 12 : Start/stop count : 100 100 3354
Att # 192 : Power-off retract count : 97 97 3661
Att # 193 : Load/unload cycle count : 97 97 3661
Att # 194 : HDA Temperature : 115 115 52
Att # 196 : Reallocate event count : 100 100 0
Att # 197 : Current pending sectors : 100 100 0
Att # 198 : Offline scan UNC sectors : 100 100 0
Att # 199 : Ultra ATA CRC Error Rate : 200 253 0
}}}
===
+++!![09. Hitachi HDT725040VLA360 400Gb »»][09. Hitachi HDT725040VLA360 400Gb ««]
|!Жёсткий диск|!Cерийный номер|>|>|>|>|>|!Задержка|!Дата покупки<br>{{remark{(тестирования)}}}|!Примечание|
|~|~|!<3ms|!<10ms|!<50ms|!<150ms|!<500ms|!>500ms|~|~|
|Hitachi HDT725040VLA360 400Gb | VFK301R31HWMRK | 2'312'002| 751'468| 934| 0| 0| 0| {{remark{29.08.2015}}} |Relocated sectors count: 0, HDA temperature: 51, время тестирования: 1:59:55. |
{{{
HDD: Hitachi HDT725040VLA360; FW: V5COA7EA; SN: VFK301R31HWMRK
--------------------------------------------------------
Name Val Worst Raw
Att # 1 : Read error rate : 100 100 0
Att # 2 : Throughput performance : 100 100 0
Att # 3 : Spin up time : 97 97 33096204
Att # 4 : Number of spin-up times : 100 100 344
Att # 5 : Reallocated sectors count : 100 100 0
Att # 7 : Seek error rate : 100 100 0
Att # 8 : Seek time performance : 100 100 0
Att # 9 : Power-on time : 99 99 9018
Att # 10 : Spin-up retries : 100 100 0
Att # 12 : Start/stop count : 100 100 338
Att # 192 : Power-off retract count : 100 100 708
Att # 193 : Load/unload cycle count : 100 100 708
Att # 194 : HDA Temperature : 240 240 25
Att # 196 : Reallocate event count : 100 100 0
Att # 197 : Current pending sectors : 100 100 0
Att # 198 : Offline scan UNC sectors : 100 100 0
Att # 199 : Ultra ATA CRC Error Rate : 200 253 0
}}}
===
+++!![10. Samsung HD502IJ 500Gb »»][10. Samsung HD502IJ 500Gb ««]
{{error{BIOS ругается: "SMART status bad" при единственном переназначенном секторе.}}}
|!Жёсткий диск|!Cерийный номер|>|>|>|>|>|!Задержка|!Дата покупки<br>{{remark{(тестирования)}}}|!Примечание|
|~|~|!<3ms|!<10ms|!<50ms|!<150ms|!<500ms|!>500ms|~|~|
|Samsung HD502IJ 500Gb | S13TJ1KQ610475 | 3'476'009| 354'433| 41| 1| 0| 0| {{remark{20.10.2015}}} |Reallocated sectors count: 1, reallocated event count: 1, soft read error rate: 5, Ultra ATA CRC error rate: 5, write error rate: 2, время тестирования: 1:51:13. |
|~|~| 3'475'046| 355'400| 37| 1| 0| 0| {{remark{20.10.2015}}} |Reallocated sectors count: 1, reallocate event count: 1, soft read error rate: 5, Ultra ATA CRC error rate: 5, write error rate: 1, время тестирования: 1:51:13. |
|~|~| 3'470'198| 360'243| 42| 1| 0| 0| {{remark{07.10.2017}}} |Время тестирования: 1:51:13. |
SMART att. (05.10.2017):
{{{
HDD: SAMSUNG HD502IJ; FW: 1AA01112; SN: S13TJ1KQ610475
--------------------------------------------------------
Name Val Worst Raw
Att # 1 : Read error rate : 100 99 1
Att # 3 : Spin up time : 86 86 5150
Att # 4 : Number of spin-up times : 100 100 157
Att # 5 : Reallocated sectors count : 100 100 1
Att # 7 : Seek error rate : 253 253 0
Att # 8 : Seek time performance : 100 100 0
Att # 9 : Power-on time : 100 100 420
Att # 10 : Spin-up retries : 100 100 0
Att # 11 : Calibration retries : 100 100 2
Att # 12 : Start/stop count : 100 100 157
Att # 13 : Soft read error rate : 100 99 1
Att # 183 : Unknown : 100 100 0
Att # 184 : Unknown : 1 1 299
Att # 187 : Unknown : 100 100 22
Att # 188 : Unknown : 100 100 0
Att # 190 : Unknown : 65 59 606273571
Att # 194 : HDA Temperature : 65 55 35
Att # 195 : Hardware ECC recovered : 100 100 4022494
Att # 196 : Reallocate event count : 100 100 1
Att # 197 : Current pending sectors : 100 100 0
Att # 198 : Offline scan UNC sectors : 100 100 0
Att # 199 : Ultra ATA CRC Error Rate : 100 99 0
Att # 200 : Write error rate : 100 100 0
Att # 201 : Unknown : 100 100 0
}}}
Тестирование 22.10.2017:
{{{
HDD: SAMSUNG HD502IJ; FW: 1AA01112; SN: S13TJ1KQ610475
--------------------------------------------------------
Name Val Worst Raw
Att # 1 : Read error rate : 100 99 1
Att # 3 : Spin up time : 86 86 5200
Att # 4 : Number of spin-up times : 100 100 159
Att # 5 : Reallocated sectors count : 100 100 1
Att # 7 : Seek error rate : 253 253 0
Att # 8 : Seek time performance : 100 100 0
Att # 9 : Power-on time : 100 100 420
Att # 10 : Spin-up retries : 100 100 0
Att # 11 : Calibration retries : 100 100 2
Att # 12 : Start/stop count : 100 100 159
Att # 13 : Soft read error rate : 100 99 1
Att # 183 : Unknown : 100 100 0
Att # 184 : Unknown : 1 1 299
Att # 187 : Unknown : 100 100 22
Att # 188 : Unknown : 100 100 0
Att # 190 : Unknown : 83 59 286326801
Att # 194 : HDA Temperature : 80 55 20
Att # 195 : Hardware ECC recovered : 100 100 17
Att # 196 : Reallocate event count : 100 100 1
Att # 197 : Current pending sectors : 100 100 0
Att # 198 : Offline scan UNC sectors : 100 100 0
Att # 199 : Ultra ATA CRC Error Rate : 100 99 0
Att # 200 : Write error rate : 100 100 0
Att # 201 : Unknown : 253 253 0
}}}
===
+++!![11. Hitachi HDT725050VLA380 500Gb »»][11. Hitachi HDT725050VLA380 500Gb ««]
|!Жёсткий диск|!Cерийный номер|>|>|>|>|>|!Задержка|!Дата покупки<br>{{remark{(тестирования)}}}|!Примечание|
|~|~|!<3ms|!<10ms|!<50ms|!<150ms|!<500ms|!>500ms|~|~|
|Hitachi HDT725050VLA380 500Gb | VFK482R41WAPAK | 3'139'995| 689'264| 1'222| 3| 0| 0| {{remark{28.08.2015}}} |Read error rate: 65536, reallocated sectors count: 2, reallocate event count: 2, HDA temperature: 58, время тестирования: 2:14:55. |
SMART att. (07.02.2017):
{{{
HDD: Hitachi HDT725050VLA360; FW: V56OA7EA; SN: VFK482R41WAPAK
--------------------------------------------------------
Name Val Worst Raw
Att # 1 : Read error rate : 99 99 196608
Att # 2 : Throughput performance : 100 100 0
Att # 3 : Spin up time : 101 101 32244207
Att # 4 : Number of spin-up times : 100 100 145
Att # 5 : Reallocated sectors count : 100 100 2
Att # 7 : Seek error rate : 100 100 0
Att # 8 : Seek time performance : 100 100 0
Att # 9 : Power-on time : 100 100 429
Att # 10 : Spin-up retries : 100 100 0
Att # 12 : Start/stop count : 100 100 140
Att # 192 : Power-off retract count : 100 100 151
Att # 193 : Load/unload cycle count : 100 100 151
Att # 194 : HDA Temperature : 111 111 54
Att # 196 : Reallocate event count : 100 100 2
Att # 197 : Current pending sectors : 100 100 0
Att # 198 : Offline scan UNC sectors : 100 100 0
Att # 199 : Ultra ATA CRC Error Rate : 200 253 0
}}}
SMART att. (22.10.2017):
{{{
HDD: Hitachi HDT725050VLA360; FW: V56OA7EA; SN: VFK482R41WAPAK
--------------------------------------------------------
Name Val Worst Raw
Att # 1 : Read error rate : 100 100 0
Att # 2 : Throughput performance : 100 100 0
Att # 3 : Spin up time : 101 101 32440814
Att # 4 : Number of spin-up times : 100 100 154
Att # 5 : Reallocated sectors count : 100 100 6
Att # 7 : Seek error rate : 100 100 0
Att # 8 : Seek time performance : 100 100 0
Att # 9 : Power-on time : 100 100 449
Att # 10 : Spin-up retries : 100 100 0
Att # 12 : Start/stop count : 100 100 149
Att # 192 : Power-off retract count : 100 100 160
Att # 193 : Load/unload cycle count : 100 100 160
Att # 194 : HDA Temperature : 115 115 52
Att # 196 : Reallocate event count : 100 100 6
Att # 197 : Current pending sectors : 100 100 0
Att # 198 : Offline scan UNC sectors : 100 100 0
Att # 199 : Ultra ATA CRC Error Rate : 200 253 0
}}}
===
===
+++![Проданные »»][Проданные ««]
{{remark{Дата продажи, срок гарантии.}}}
+++!![Samsung HD321KJ 320Gb »»][Samsung HD321KJ 320Gb ««]
{{remark{Продан и установлен в компьютер А.Х. 16.02.2017.}}}
|!Жёсткий диск|!Cерийный номер|>|>|>|>|>|!Задержка|!Дата покупки<br>{{remark{(тестирования)}}}|!Примечание|
|~|~|!<3ms|!<10ms|!<50ms|!<150ms|!<500ms|!>500ms|~|~|
|{{remark{Samsung HD321KJ 320Gb}}} | S0MQJ13P113462 | 2'251'513| 194'817| 5'200| 1| 0| 0| {{remark{14.04.2014}}} |Reallocated sectors count: 0, время тестирования: 1:20:10. |
{{{
HDD: SAMSUNG HD321KJ; FW: CP100-10; SN: S0MQJ13P113462
--------------------------------------------------------
Name Val Worst Raw
Att # 1 : Read error rate : 253 100 0
Att # 3 : Spin up time : 100 100 5696
Att # 4 : Number of spin-up times : 100 100 928
Att # 5 : Reallocated sectors count : 253 253 0
Att # 7 : Seek error rate : 253 253 0
Att # 8 : Seek time performance : 253 253 0
Att # 9 : Power-on time : 100 100 14874
Att # 10 : Spin-up retries : 253 253 0
Att # 11 : Calibration retries : 253 253 0
Att # 12 : Start/stop count : 100 100 523
Att # 187 : Unknown : 253 253 0
Att # 188 : Unknown : 253 253 0
Att # 190 : Unknown : 58 55 42
Att # 194 : HDA Temperature : 112 103 42
Att # 195 : Hardware ECC recovered : 100 100 54014
Att # 196 : Reallocate event count : 253 253 0
Att # 197 : Current pending sectors : 253 253 0
Att # 198 : Offline scan UNC sectors : 253 253 0
Att # 199 : Ultra ATA CRC Error Rate : 200 200 0
Att # 200 : Write error rate : 100 100 0
Att # 201 : Unknown : 253 100 0
Att # 202 : Unknown : 253 253 0
}}}
===
+++!![Samsung HD502IJ 500Gb »»][Samsung HD502IJ 500Gb ««]
{{remark{Продан Павлу 08.06.2017.}}}
|!Жёсткий диск|!Cерийный номер|>|>|>|>|>|!Задержка|!Дата покупки<br>{{remark{(тестирования)}}}|!Примечание|
|~|~|!<3ms|!<10ms|!<50ms|!<150ms|!<500ms|!>500ms|~|~|
|Samsung HD502IJ 500Gb | S13TJ1KQ804135 | 3'421'076| 409'333| 74| 1| 0| 0| {{remark{27.10.2014}}} |Reallocated: {{error{отсутствует}}}, reallocate event count: 0, UltraATA CRC error rate: 0, Hardware ECC recovered: 112'609'657 {{remark{(ерунда какая-то)}}}. |
|~|~| 3'424'431| 404'683| 1349| 21| 0| 0| {{remark{17.07.2015}}} |Reallocate event count: 0, Ultra ATA CRC error rate: 2, hardware ECC recovered: 118'301'662, время тестирования: 1:54:41.|
|~|~| 3'426'291| 400'663| 3'506| 24| 0| 0| {{remark{25.08.2015}}} |Reallocated sectors count: 0, hardware ECC recovered: 124'604'938, Ultra ATA CRC error rate: 2, время тестирования: 1:56:22. |
{{{
HDD: SAMSUNG HD502IJ; FW: 1AA01113; SN: S13TJ1KQ804135
--------------------------------------------------------
Name Val Worst Raw
Att # 1 : Read error rate : 100 100 0
Att # 3 : Spin up time : 86 86 5190
Att # 4 : Number of spin-up times : 100 100 90
Att # 5 : Reallocated sectors count : 100 100 0
Att # 7 : Seek error rate : 100 100 0
Att # 8 : Seek time performance : 100 100 0
Att # 9 : Power-on time : 100 100 1872
Att # 10 : Spin-up retries : 100 100 0
Att # 11 : Calibration retries : 100 100 4
Att # 12 : Start/stop count : 100 100 90
Att # 13 : Soft read error rate : 100 100 0
Att # 183 : Unknown : 100 100 0
Att # 184 : Unknown : 100 100 0
Att # 187 : Unknown : 100 100 0
Att # 188 : Unknown : 100 100 0
Att # 190 : Unknown : 82 52 303169554
Att # 194 : HDA Temperature : 82 51 18
Att # 195 : Hardware ECC recovered : 100 100 0
Att # 196 : Reallocate event count : 100 100 0
Att # 197 : Current pending sectors : 100 100 0
Att # 198 : Offline scan UNC sectors : 100 100 0
Att # 199 : Ultra ATA CRC Error Rate : 100 100 2
Att # 200 : Write error rate : 100 100 0
Att # 201 : Unknown : 253 253 0
}}}
===
+++!![Samsung HD501LJ 500Gb »»][Samsung HD501LJ 500Gb ««]
{{remark{Продан Евгению 09.07.2017.}}}
|!Жёсткий диск|!Cерийный номер|>|>|>|>|>|!Задержка|!Дата покупки<br>{{remark{(тестирования)}}}|!Примечание|
|~|~|!<3ms|!<10ms|!<50ms|!<150ms|!<500ms|!>500ms|~|~|
|Samsung HD501LJ 500Gb | S0MUJ1FPA61244 | 3'417'811| 403'574| 9'099| 0| 0| 0| {{remark{21.03.2015}}} |Время тестирования: 2:14:48, Ultra ATA CRC error rate: 0|
|~|~| 3'418'661| 402'894| 8'929| 0| 0| 0| {{remark{26.08.2015}}} |Reallocated sectors count: 0, soft read error rate: 119'455'001, hardware ECC recovered: 119'455'001, время тестирования: 2:14:46. |
{{{
HDD: SAMSUNG HD501LJ; FW: CR100-12; SN: S0MUJ1FPA61244
--------------------------------------------------------
Name Val Worst Raw
Att # 1 : Read error rate : 253 100 0
Att # 3 : Spin up time : 100 100 7488
Att # 4 : Number of spin-up times : 100 100 146
Att # 5 : Reallocated sectors count : 253 253 0
Att # 7 : Seek error rate : 253 253 0
Att # 8 : Seek time performance : 253 253 0
Att # 9 : Power-on time : 100 100 371
Att # 10 : Spin-up retries : 253 253 0
Att # 11 : Calibration retries : 253 100 0
Att # 12 : Start/stop count : 100 100 88
Att # 13 : Soft read error rate : 253 100 0
Att # 187 : Unknown : 253 253 0
Att # 188 : Unknown : 100 100 1
Att # 190 : Unknown : 80 50 20
Att # 194 : HDA Temperature : 178 82 20
Att # 195 : Hardware ECC recovered : 253 100 0
Att # 196 : Reallocate event count : 253 253 0
Att # 197 : Current pending sectors : 253 253 0
Att # 198 : Offline scan UNC sectors : 253 253 0
Att # 199 : Ultra ATA CRC Error Rate : 200 200 0
Att # 200 : Write error rate : 253 100 0
Att # 201 : Unknown : 253 100 0
Att # 202 : Unknown : 253 253 0
}}}
===
+++!![Samsung HD401LJ 400Gb »»][Samsung HD401LJ 400Gb ««]
{{remark{Hitachi после И. удалось восстановить, а вот этот диск, видимо, ушёл в помойку.}}}
|!Жёсткий диск|!Cерийный номер|>|>|>|>|>|!Задержка|!Дата покупки<br>{{remark{(тестирования)}}}|!Примечание|
|~|~|!<3ms|!<10ms|!<50ms|!<150ms|!<500ms|!>500ms|~|~|
|Samsung HD401LJ 400Gb | S0HVJ1WL907443 | 2'787'314| 259'674| 17'414| 2| 0| 0| {{remark{18.04.2014}}} |Reallocated sectors count: 0, время тестирования: 1:48:42 |
|~|~| 2'791'525| 260'275| 12'601| 0| 3| 0|Warns: 379'792'155, 379'793'430, 379'794'450, время тестирования: 1:48:01 (после возврата от И. и очистки диска от его файлов SMART недоступен) |
{{{
HDD: SAMSUNG HD401LJ; FW: ZZ100-15; SN: S0HVJ1WL907443
--------------------------------------------------------
Name Val Worst Raw
Att # 1 : Read error rate : 253 100 0
Att # 3 : Spin up time : 100 100 8000
Att # 4 : Number of spin-up times : 100 100 521
Att # 5 : Reallocated sectors count : 253 253 0
Att # 7 : Seek error rate : 253 253 0
Att # 8 : Seek time performance : 253 253 0
Att # 9 : Power-on time : 100 100 1376
Att # 10 : Spin-up retries : 253 253 0
Att # 11 : Calibration retries : 253 253 0
Att # 12 : Start/stop count : 100 100 285
Att # 190 : Unknown : 79 51 21
Att # 194 : HDA Temperature : 175 91 21
Att # 195 : Hardware ECC recovered : 253 100 0
Att # 196 : Reallocate event count : 253 253 0
Att # 197 : Current pending sectors : 253 253 0
Att # 198 : Offline scan UNC sectors : 253 253 0
Att # 199 : Ultra ATA CRC Error Rate : 200 200 0
Att # 200 : Write error rate : 253 100 0
Att # 201 : Unknown : 253 100 0
Att # 202 : Unknown : 253 253 0
}}}
===
+++!![Hitachi HDP725050GLA360 500Gb »»][Hitachi HDP725050GLA360 500Gb ««]
{{remark{Продан Сергею 22.10.2017.}}}
|!Жёсткий диск|!Cерийный номер|>|>|>|>|>|!Задержка|!Дата покупки<br>{{remark{(тестирования)}}}|!Примечание|
|~|~|!<3ms|!<10ms|!<50ms|!<150ms|!<500ms|!>500ms|~|~|
|Hitachi HDP725050GLA360 500Gb | GEA530RE0MNP0A | 3'594'899| 235'296| 287| 2| 0 | 0| {{remark{31.10.2014}}} |Время тестирования: 1:49:20, Reallocated: 0|
SMART att. (22.10.2017):
{{{
HDD: Hitachi HDP725050GLA360; FW: GM4OA52A; SN: GEA530RE0MNP0A
--------------------------------------------------------
SMART attributes:
Name Val Worst Raw
Att # 1 : Read error rate : 100 100 0
Att # 2 : Throughput performance : 100 100 0
Att # 3 : Spin up time : 115 115 21954892
Att # 4 : Number of spin-up times : 100 100 48
Att # 5 : Reallocated sectors count : 100 100 0
Att # 7 : Seek error rate : 100 100 0
Att # 8 : Seek time performance : 131 131 29
Att # 9 : Power-on time : 100 100 154
Att # 10 : Spin-up retries : 100 100 0
Att # 12 : Start/stop count : 100 100 48
Att # 192 : Power-off retract count : 100 100 48
Att # 193 : Load/unload cycle count : 100 100 48
Att # 194 : HDA Temperature : 200 200 30
Att # 196 : Reallocate event count : 100 100 0
Att # 197 : Current pending sectors : 100 100 0
Att # 198 : Offline scan UNC sectors : 100 100 0
Att # 199 : Ultra ATA CRC Error Rate : 200 200 0
}}}
===
+++!![Hitachi HDT725050VLA380 500Gb »»][Hitachi HDT725050VLA380 500Gb ««]
{{remark{Продан Владимиру 03.11.2017.}}}
|!Жёсткий диск|!Cерийный номер|>|>|>|>|>|!Задержка|!Дата покупки<br>{{remark{(тестирования)}}}|!Примечание|
|~|~|!<3ms|!<10ms|!<50ms|!<150ms|!<500ms|!>500ms|~|~|
|Hitachi HDT725050VLA380 500Gb | VFA401R41KTDTA | 3'266'002| 563'375| 1'106| 1| 0| 0| {{remark{28.08.2015}}} |Reallocated sectors count: 0, HDA temperature: 56, время тестирования: 2:09:57. |
|~|~| 3'246'348| 583'052| 1'084| 0| 0| 0| {{remark{22.10.2017}}} |Время тестирования: 2:09:57. |
SMART att. (22.10.2017):
{{{
HDD: Hitachi HDT725050VLA380; FW: V56OA7EA; SN: VFA401R41KTDTA
--------------------------------------------------------
SMART attributes:
Name Val Worst Raw
Att # 1 : Read error rate : 100 100 0
Att # 2 : Throughput performance : 100 100 0
Att # 3 : Spin up time : 99 99 32965112
Att # 4 : Number of spin-up times : 100 100 64
Att # 5 : Reallocated sectors count : 100 100 0
Att # 7 : Seek error rate : 100 100 0
Att # 8 : Seek time performance : 100 100 0
Att # 9 : Power-on time : 100 100 122
Att # 10 : Spin-up retries : 100 100 0
Att # 12 : Start/stop count : 100 100 63
Att # 192 : Power-off retract count : 100 100 65
Att # 193 : Load/unload cycle count : 100 100 65
Att # 194 : HDA Temperature : 222 222 27
Att # 196 : Reallocate event count : 100 100 0
Att # 197 : Current pending sectors : 100 100 0
Att # 198 : Offline scan UNC sectors : 100 100 0
Att # 199 : Ultra ATA CRC Error Rate : 200 253 0
}}}
===
+++!![Samsung SP2504C 250Gb »»][Samsung SP2504C 250Gb ««]
{{remark{Продан молодому человеку 26.11.2017.}}}
|!Жёсткий диск|!Cерийный номер|>|>|>|>|>|!Задержка|!Дата покупки<br>{{remark{(тестирования)}}}|!Примечание|
|~|~|!<3ms|!<10ms|!<50ms|!<150ms|!<500ms|!>500ms|~|~|
|Samsung SP2504C 250Gb | S09QJ1FL606233 | 1'707'875| 207'187| 213| 0| 0| 0| {{remark{14.04.2014}}} |Reallocated sectors count: 0, время тестирования: 1:08:55 |
{{{
HDD: SAMSUNG SP2504C; FW: VT100-41; SN: S09QJ1FL606233
--------------------------------------------------------
Name Val Worst Raw
Att # 1 : Read error rate : 253 100 0
Att # 3 : Spin up time : 100 100 5952
Att # 4 : Number of spin-up times : 99 99 1353
Att # 5 : Reallocated sectors count : 253 253 0
Att # 7 : Seek error rate : 253 253 0
Att # 8 : Seek time performance : 253 253 0
Att # 9 : Power-on time : 100 100 11328
Att # 10 : Spin-up retries : 253 253 0
Att # 11 : Calibration retries : 253 253 0
Att # 12 : Start/stop count : 100 100 883
Att # 187 : Unknown : 1 1 458
Att # 190 : Unknown : 175 88 21
Att # 194 : HDA Temperature : 175 88 21
Att # 195 : Hardware ECC recovered : 253 100 0
Att # 196 : Reallocate event count : 253 253 0
Att # 197 : Current pending sectors : 253 100 0
Att # 198 : Offline scan UNC sectors : 253 253 0
Att # 199 : Ultra ATA CRC Error Rate : 200 200 10
Att # 200 : Write error rate : 253 100 0
Att # 201 : Unknown : 253 100 0
Att # 202 : Unknown : 253 253 0
}}}
===
+++!![Hitachi HDT725040VLA360 400Gb »»][Hitachi HDT725040VLA360 400Gb ««]
{{remark{Продан хорошему человеку из района Цирка 04.12.2017.}}}
|!Жёсткий диск|!Cерийный номер|>|>|>|>|>|!Задержка|!Дата покупки<br>{{remark{(тестирования)}}}|!Примечание|
|~|~|!<3ms|!<10ms|!<50ms|!<150ms|!<500ms|!>500ms|~|~|
|Hitachi HDT725040VLA360 400Gb | VFK301R31HWU4K | 2'312'482| 750'982| 931| 0| 0| 0| {{remark{30.08.2015}}} |Relocated sectors count: 0, HDA temperature: 52, время тестирования: 1:59:56. |
|~|~| 2'312'440| 750'982| 973| 0| 0| 0| {{remark{01.10.2017}}} |Время тестирования: 1:59:55.|
{{{
HDD: Hitachi HDT725040VLA360; FW: V5COA7EA; SN: VFK301R31HWU4K
--------------------------------------------------------
Name Val Worst Raw
Att # 1 : Read error rate : 100 100 0
Att # 2 : Throughput performance : 100 100 0
Att # 3 : Spin up time : 115 115 23724539
Att # 4 : Number of spin-up times : 100 100 3620
Att # 5 : Reallocated sectors count : 100 100 0
Att # 7 : Seek error rate : 100 100 0
Att # 8 : Seek time performance : 100 100 0
Att # 9 : Power-on time : 96 96 31341
Att # 10 : Spin-up retries : 100 100 0
Att # 12 : Start/stop count : 100 100 3615
Att # 192 : Power-off retract count : 97 97 4751
Att # 193 : Load/unload cycle count : 97 97 4751
Att # 194 : HDA Temperature : 107 107 56
Att # 196 : Reallocate event count : 100 100 0
Att # 197 : Current pending sectors : 100 100 0
Att # 198 : Offline scan UNC sectors : 100 100 0
Att # 199 : Ultra ATA CRC Error Rate : 200 253 0
}}}
===
+++!![Samsung SP2004C 200Gb »»][Samsung SP2004C 200Gb ««]
{{remark{Продан энергичному молодому человеку для фермы криптовалюты 22.12.2017.}}}
|!Жёсткий диск|!Cерийный номер|>|>|>|>|>|!Задержка|!Дата покупки<br>{{remark{(тестирования)}}}|!Примечание|
|~|~|!<3ms|!<10ms|!<50ms|!<150ms|!<500ms|!>500ms|~|~|
|Samsung SP2004C 200Gb | S07GJ1GL803928 | 1'023'468| 507'437| 1'339| 0| 0| 0| {{remark{14.04.2014}}} |Reallocated sectors count: 0, время тестирования: 1:08:16. |
|~|~| 1'025'625| 506'443| 176| 0| 0| 0| {{remark{7.10.2017}}} |Время тестирования: 01:08:06. |
{{{
HDD: SAMSUNG SP2004C; FW: VM100-41; SN: S07GJ1GL803928
--------------------------------------------------------
Name Val Worst Raw
Att # 1 : Read error rate : 253 100 0
Att # 3 : Spin up time : 100 100 6016
Att # 4 : Number of spin-up times : 100 100 153
Att # 5 : Reallocated sectors count : 253 253 0
Att # 7 : Seek error rate : 253 253 0
Att # 8 : Seek time performance : 253 253 0
Att # 9 : Power-on time : 100 100 6589
Att # 10 : Spin-up retries : 253 253 0
Att # 11 : Calibration retries : 253 253 0
Att # 12 : Start/stop count : 100 100 101
Att # 187 : Unknown : 253 253 0
Att # 190 : Unknown : 175 82 21
Att # 194 : HDA Temperature : 175 82 21
Att # 195 : Hardware ECC recovered : 253 100 0
Att # 196 : Reallocate event count : 253 253 0
Att # 197 : Current pending sectors : 253 100 0
Att # 198 : Offline scan UNC sectors : 253 253 0
Att # 199 : Ultra ATA CRC Error Rate : 200 200 0
Att # 200 : Write error rate : 253 100 0
Att # 201 : Unknown : 253 100 0
Att # 202 : Unknown : 253 253 0
}}}
SMART att. (07.10.2017):
{{{
HDD: SAMSUNG SP2004C; FW: VM100-41; SN: S07GJ1GL803928
--------------------------------------------------------
Name Val Worst Raw
Att # 1 : Read error rate : 100 100 0
Att # 3 : Spin up time : 100 100 5952
Att # 4 : Number of spin-up times : 100 100 178
Att # 5 : Reallocated sectors count : 253 253 0
Att # 7 : Seek error rate : 253 253 0
Att # 8 : Seek time performance : 253 253 0
Att # 9 : Power-on time : 100 100 6597
Att # 10 : Spin-up retries : 253 253 0
Att # 11 : Calibration retries : 253 253 0
Att # 12 : Start/stop count : 100 100 117
Att # 187 : Unknown : 253 253 0
Att # 190 : Unknown : 109 82 43
Att # 194 : HDA Temperature : 109 82 43
Att # 195 : Hardware ECC recovered : 100 100 21695824
Att # 196 : Reallocate event count : 253 253 0
Att # 197 : Current pending sectors : 253 100 0
Att # 198 : Offline scan UNC sectors : 253 253 0
Att # 199 : Ultra ATA CRC Error Rate : 200 200 0
Att # 200 : Write error rate : 100 100 0
Att # 201 : Unknown : 100 100 0
Att # 202 : Unknown : 253 253 0
}}}
===
+++!![05. Samsung HD321KJ 320Gb »»][05. Samsung HD321KJ 320Gb ««]
{{remark{Продан хорошему МЧ 3.01.2018 под современные игры.}}}
|!Жёсткий диск|!Cерийный номер|>|>|>|>|>|!Задержка|!Дата покупки<br>{{remark{(тестирования)}}}|!Примечание|
|~|~|!<3ms|!<10ms|!<50ms|!<150ms|!<500ms|!>500ms|~|~|
|Samsung HD321KJ 320Gb | S0MQJ1EPB07586 | 2'245'856| 200'306| 5'378| 0| 0| 0| {{remark{14.04.2014}}} |Скорость на внешних дорожках: ~81'900 kb/s<br />Ср.скорость: 64'671 kb/s<br />Время тестирования: 1:20:31 |
|~|~| 2'249'620| 195'859| 6'061| 0| 0| 0| {{remark{26.08.2015}}} |Reallocated sectors count: 0, soft read error rate: 130'535'168, hardware ECC recovered: 130'535'168, время тестирования: 1:20:37. |
{{{
HDD: SAMSUNG HD321KJ; FW: CP100-12; SN: S0MQJ1EPB07586
--------------------------------------------------------
Name Val Worst Raw
Att # 1 : Read error rate : 253 100 0
Att # 3 : Spin up time : 100 100 5504
Att # 4 : Number of spin-up times : 100 100 57
Att # 5 : Reallocated sectors count : 253 253 0
Att # 7 : Seek error rate : 253 253 0
Att # 8 : Seek time performance : 253 253 0
Att # 9 : Power-on time : 253 253 153
Att # 10 : Spin-up retries : 253 253 0
Att # 11 : Calibration retries : 253 253 0
Att # 12 : Start/stop count : 100 100 33
Att # 13 : Soft read error rate : 253 100 0
Att # 187 : Unknown : 253 253 0
Att # 188 : Unknown : 100 100 1
Att # 190 : Unknown : 80 52 20
Att # 194 : HDA Temperature : 178 91 20
Att # 195 : Hardware ECC recovered : 253 100 0
Att # 196 : Reallocate event count : 253 253 0
Att # 197 : Current pending sectors : 253 253 0
Att # 198 : Offline scan UNC sectors : 253 253 0
Att # 199 : Ultra ATA CRC Error Rate : 200 200 0
Att # 200 : Write error rate : 253 100 0
Att # 201 : Unknown : 253 100 0
Att # 202 : Unknown : 253 253 0
}}}
===
+++!![ »»][ ««]
|!Жёсткий диск|!Cерийный номер|>|>|>|>|>|!Задержка|!Дата покупки<br>{{remark{(тестирования)}}}|!Примечание|
|~|~|!<3ms|!<10ms|!<50ms|!<150ms|!<500ms|!>500ms|~|~|
{{{
Вставить
}}}
===
===
+++![Потеряшки »»][Потеряшки ««]
+++!![Seagate ST3200826AS 200Gb »»][Seagate ST3200826AS 200Gb ««]
|!Жёсткий диск|!Cерийный номер|>|>|>|>|>|!Задержка|!Дата покупки<br>{{remark{(тестирования)}}}|!Примечание|
|~|~|!<3ms|!<10ms|!<50ms|!<150ms|!<500ms|!>500ms|~|~|
|Seagate ST3200826AS 200Gb | 4ND0FZDC | 1'187'716| 344'359| 169| 0| 0| 0| {{remark{24.08.2015}}} |Reallocated sectors count: 0, время тестирования: 1:15:43. |
{{{
HDD: ST3200826AS; FW: 3.03; SN: 4ND0FZDC
--------------------------------------------------------
Name Val Worst Raw
Att # 1 : Read error rate : 63 54 33122632
Att # 3 : Spin up time : 98 98 0
Att # 4 : Number of spin-up times : 99 99 1658
Att # 5 : Reallocated sectors count : 100 100 0
Att # 7 : Seek error rate : 81 60 146892678
Att # 9 : Power-on time : 96 96 4134
Att # 10 : Spin-up retries : 100 100 0
Att # 12 : Start/stop count : 99 99 1985
Att # 194 : HDA Temperature : 25 54 25
Att # 195 : Hardware ECC recovered : 63 54 33122632
Att # 197 : Current pending sectors : 100 100 0
Att # 198 : Offline scan UNC sectors : 100 100 0
Att # 199 : Ultra ATA CRC Error Rate : 200 200 0
Att # 200 : Write error rate : 100 253 0
Att # 202 : Unknown : 100 253 0
}}}
===
===
Новые клавиатуры, ремонтные мыши и наушники.
Спиральные пластиковые пружины для формирования единого аккуратного жгута проводов из хаоса проводов, идущих от системного блока, монитора или аудиоаппаратуры. Объявления на Avito пока нет, длина пружин порядка 0,6 м, стоимость:
* 1 шт — 100 руб. за штуку,
* 2÷4 — 80 руб. за штуку,
* 4÷8 — 60 руб. за штуку,
* 9 и более — 50 руб. за штуку.
Продажа системных блоков
плюс уменьшение шума
плюс улучшение охлаждения
плюс резервное копирование
плюс модернизация и сборка компьютеров на заказ
(безопасность не настраивать, бесполезно (ибо если человек этого ещё не делал, то и делать не будет))