Welcome to TiddlyWiki created by Jeremy Ruston; Copyright © 2004-2007 Jeremy Ruston, Copyright © 2007-2011 UnaMesa Association
{{{
скрепить
(конус создать *сила:ветер посолонь закрутить)[1]
(
если
существо направить
носитель сила разрушить в рука существо
через заклинание [1]
то скрепить
носитель сила разрушить в рука существо
&
заклинание: создать *gravity движение направить(от я)
}}}
----
Но лучше не скреплять с носителем сила разрушить дефлекторное ядро, а вкладывать в носитель это ядро. Так как "носитель сила разрушить" может и не являться силой, а вот вложить в носитель силу можно.
После ночных бдений написал заклинание ++Call lightning++.
Для краткости записи приведу силообразующее ядро отдельно.
!! Версия первая
++Ядро «Sparks»++:
{{{
Скрепить (создать сила снежинка)
& (создать сила снежинка)
}}}
Это ядро описывает трущиеся между собой мельчайшие кристаллики льда в воздухе, что и порождает электростатическое электричество, огромные объемы которого и приводят к молниям.
++Основное заклинание:++
{{{
Изъять
сила «sparks» там (S: небеса)
Направить*воздух молния через : (поток создать *металл:образ:проводник молния противосолонь) в
создать магнит (для) сила «sparks»
(согласно разности)
(силы «sparks» там (S: небеса) )
&
(силы «sparks» там,где я создать магнит)
}}}
!! Версия 2, исправленная
(там жест:небеса) можно заменить на (вездетакгдеесть аэрус)
Несмотря на то, что ДМ утверждает, что заклинание верное, создать магнит нельзя. Магнит - направляющая (движитель). Хотя... можно ли создать движитель?
Можно ли вообще сказать "создать d:мысль" или "создать через"?
Скорее всего,
{{{
создать магнит (для) сила «sparks»
}}}
надо переформулировать в :
{{{
создать (ядро sparks) магнит(ом)
}}}
!! Версия 3: храмы, магниты, аэрус
{{{
изъять
sparks (из) храм:сила: аэрус
[d:направить]
d:магнит[ом]
через [канал:] создать (поток *металл:образ:проводник молнией противосолонь d:(сила:мысль) )
в IT
согласно_разности:
(sparks тамгде IT) (sparks в место:сила:аэрус)
}}}
d:(сила:мысль) - описывает применение слово [[сила]] к направляющей [[мысль]]. Так сделано для [[косвенного управления силой мысли|косвенное управление силой мысли]] каналом, а не прямого (мыслью).
ядро "согласно разности" улучшает "прицеливание". Молния направляется не куда-то там, а туда, где сила лайтнинга меньше, чем в слое аэрус.
Следует отметить, что для борьбы с нежитью лучше использовать не {{{металл:образ:проводник}}}, а {{{angelus:образ:проводник}}}, смотри силу [[angelus]]
/***
|''Name:''|CloseUnsavedOnCancel|
|''Version:''|2.0.8 (16-Apr-2006)|
|''Author:''|SimonBaird|
|''Adapted By:''|[[Jack]]|
|''Type:''|Plugin|
!Description
When you click new tiddler then click cancel I think the new tiddler should close automatically. This plugin implements that behaviour.
!Revision History
* 1.0.1 (11-Oct-2005) by SimonBaird
* 2.0.8 Made 2.0.x compatible by Jack on 16-Apr-2006
!Code
***/
//{{{
config.commands.cancelTiddler.handler = function(event,src,title) {
if(story.hasChanges(title) && !readOnly)
if(!confirm(this.warning.format([title])))
return false;
story.setDirty(title,false);
if (!store.tiddlerExists(title) || store.fetchTiddler(title).modifier==config.views.wikified.defaultModifier) {
story.closeTiddler(title,false);
store.removeTiddler(title)
} else {
story.displayTiddler(null,title);
}
return false;
}
//}}}
PageTemplate | ViewTemplate | EditTemplate |
|>|>|SiteTitle - SiteSubtitle|
|MainMenu|DefaultTiddlers<<br>>ViewTemplate<<br>>EditTemplate|SideBarOptions|
|~|~|OptionsPanel|
|~|~|AdvancedOptions|
|~|~|<<tiddler Configuration.SideBarTabs>>|
''StyleSheet:'' StyleSheetColors - StyleSheetLayout - StyleSheetPrint
SiteUrl
[[Configuration.SideBarTabs]]
[[DefaultTiddlers]]
[[ToolbarCommands]]
SideBarTabs
|[[Timeline|TabTimeline]]|[[Все|TabAll]]|[[Tags|TabTags]]|>|>|[[More|TabMore]] |
|>|>||[[Missing|TabMoreMissing]]|[[Orphans|TabMoreOrphans]]|[[Shadowed|TabMoreShadowed]]|
{{{
скрепить
(
создать заклинание на носитель сила в рука человек [указываем жестом]
)
(
заклинание: вложить *inferno э/ч (страх) в животное носитель [тот] человек
)
дотехпор
}}}
Как только человек достает меч - в животное под ним вкладывается волна ужаса и страха. "Он только меч достал. а тут коняга как взбрыкнет!"
----
История заклинания любопытна:
Обороняли мы Крепость Рассвета, штандарт держал Герцог Лито (Leto ==Atreides==). И вот однажды приперся к нам один из принцев крови. Молодой, заносчивый, с ручным мажком... Мы то надеялись, что это подмога прибыла с войсками, а вышло...
Приперся он к нам и сразу стал жизни учить - крепость вы не так обороняете, ров не так копаете, вал неправильный, углы у него прямоугольные, а по канону должны быть 60 градусов... А еще у вас в моих покоях нет мраморной ванны, разве можно так принимать принцев крови? Ну и что, что у вас замок осажден врагом, ванна где, ёмаё??? Почему мне служанка не греет постель, мне вон та нравится! Мне похеру, что это великая волшебница, я её хочу, девочка, дуй в постельку!
В общем этот принц крови нас заебал всех поголовно - начиная от герцога и заканчивая поваром (почему это в соусе томатов пекинских нет, повесить повара немедленно). Мне уже за столом его убить хотелось (что это за смерд смеет перебивать МЕНЯ, ПРИНЦА КРОВИ!!!111, ну да, смею, я и герцогу "вы" говорил только из уважения к его возрасту)
Мы его послали нахрен, заявив - иди отсюда, королю передай письмо. В письме была 1 строка: "ЗАЕБАЛ"
Ну а я по доброте душевной ему меч проклял.
[[Словарь]]
[[Звезда сил]]
/***
|''Name:''|DeliciousTaggingPlugin|
|''Version:''|0.1|
|''Source''|http://jackparke.googlepages.com/jtw.html#DeliciousTaggingPlugin ([[del.icio.us|http://del.icio.us/post?url=http://jackparke.googlepages.com/jtw.html%DeliciousTaggingPlugin]])|
|''Author:''|[[Jack]]|
!Description
Allows easy 'del.icio.us'-like tagging in the EditTemplate by showing all tags as a list of link-buttons.
!Usage
Replace your the editorFooter div in your [[EditTemplate]] with the following:
{{{
<div class='editorFooter' macro='deliciousTagging'></div>
}}}
Старый код:
{{{
<div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span></div>
}}}
!Code
***/
//{{{
version.extensions.deliciousTagging = {major: 0, minor: 1, revision: 0, date: new Date("June 11, 2007")};
config.macros.deliciousTagging= {};
config.macros.deliciousTagging.onTagClick = function(e)
{
if (!e) var e = window.event;
var tag = this.getAttribute("tag");
var title = this.getAttribute("tiddler");
if (!readOnly)
story.setTiddlerTag(title, tag, 0);
return false;
};
config.macros.deliciousTagging.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{
if (tiddler instanceof Tiddler) {
var title = tiddler.title;
if (!e) var e = window.event;
var tags = store.getTags();
var lingo = config.views.editor.tagChooser;
for(var t=0; t < tags.length; t++) {
var theTag = createTiddlyButton( place, tags[t][0], lingo.tagTooltip.format([tags[t][0]]), config.macros.deliciousTagging.onTagClick);
theTag.setAttribute("tag", tags[t][0]);
theTag.setAttribute("tiddler", tiddler.title);
place.appendChild(document.createTextNode(" "));
}
}
};
//}}}
Drain life без работы с кли-полем
{{{
создать храм жизни в теле ты;
создать храм жизни в теле я;
изъять жизнь их храма жизни в теле ты в храм в теле я
создать поток *заклинанием жизнь направить от ты в я согласно разности (сила жизнь в теле ты) (сила жизнь тамшде носитель сила в рука человека разрушить тело я)
}}}
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]] wikibar richText'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div class='toolbar wikibar' macro='wikibar'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div>
<div class='editorFooter' macro='deliciousTagging'></div>
<!--}}}-->
Инореальные существа.
Существа, «выпяченные» из нашего мира каким либо образом. Делятся на 3 категории:
* I категория: уязвимы обычным оружием, уязвимы для магии кроме четырех техник: техники вымещения (Артанис: вымещение заклинания куда-либо, например вымещения камня на поверхность воды со дна), техники контроля, техники перемещения и техники unsummon’а.
* II категория: существа, неуязвимые к оружию, за исключением инореалного высших категорий. Уязвимы магией (кроме тех же 4-х техник).
* III категория: неуязвимы физическим оружием, кроме ethereal weapons высших категорий. Неуязвимы для стандартной логической магии.
{{{
вложить заклинание:
пока (рука существа на носитель:заклинания)
(скрепить
создать *planetary крест на движение противосолонь тела существа
создать *planetary движение тела существа направить *planetary посолонь
создать *planetary движение тела существа направить $p:"сила мысль существа" сквозь воздух
создать *AIR шар вокруг существо
в пирамиду)
в носитель заклинания дотехпор
}}}
{{{
скрепить (сила:жизнь в существо) с
(скрепить
создать *planetary крест на движение противосолонь тела существа
создать *planetary движение тела существа направить *planetary посолонь
создать *planetary движение тела существа направить $p:"сила мысль существа" сквозь воздух
создать *AIR шар вокруг существо
в пирамиду) дотехпор
}}}
/***
|Name|FramedLinksPlugin|
|Source|http://www.TiddlyTools.com/#FramedLinksPlugin|
|Version|1.1.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|clicking an external link opens an IFRAME following the link instead of opening a new tab/window|
This plugin causes clicks on external links to be rendered as inline frames (~IFRAMEs) instead of opening new browser tabs/windows.
!!!!!Usage
<<<
Use standard TiddlyWiki external link syntax into your tiddler content. If {{{chkFramedLinks}}} is enabled or the tiddler is tagged with 'framedLinks' (see Configuration), then whenever you click the external link an IFRAME will be dynamically added to the content. Clicking on the link again removes the IFRAME. Hold down any modifier (shift, control, or alt) while clicking a link ''temporarily'' bypasses the IFRAME handling and use the standard link handling behavior.
<<<
!!!!!Configuration
<<<
<<option chkFramedLinks>> display inline frames for all external links
{{{<<option chkFramedLinks>>}}}
<<option chkFramedLinksTag>> display inline frames for external links in tiddlers tagged with: <<option txtFramedLinksTag>>
{{{<<option chkFramedLinksTag>> <<option txtFramedLinksTag>>}}}
IFRAME size (CSS units: %, em, px, cm, in) - width: <<option txtFrameWidth>> height: <<option txtFrameHeight>>
{{{<<option txtFrameWidth>> <<option txtFrameHeight>>}}}
<<<
!!!!!Examples
<<<
Try these links:
*http://www.TiddlyWiki.com
*http://www.TiddlyTools.com
*http://groups.google.com/group/TiddlyWiki/topics
<<<
!!!!!Revisions
<<<
2008.11.14 [1.1.1] fixed handling for external links embedded in //shadow// tiddlers
2008.09.13 [1.1.0] added support to selectively enable embedded IFRAMEs if the containing tiddler is tagged with 'framedLinks'
2007.11.29 [1.0.5] added slider animation and improved CSS handling for IFRAME height/width to maximize display area
2007.11.29 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.FramedLinksPlugin= {major: 1, minor: 1, revision: 1, date: new Date(2008,11,14)};
var co=config.options; // abbreviation
if (co.chkFramedLinks==undefined) co.chkFramedLinks=false;
if (co.chkFramedLinksTag==undefined) co.chkFramedLinksTag=true;
if (co.txtFramedLinksTag==undefined) co.txtFramedLinksTag="framedLinks";
if (co.txtFrameWidth==undefined) co.txtFrameWidth="100%";
if (co.txtFrameHeight==undefined) co.txtFrameHeight="80%";
window.framedLinks_createExternalLink=createExternalLink;
window.createExternalLink=function(place,url)
{
var link=this.framedLinks_createExternalLink.apply(this,arguments);
link.onclick=function(ev) { var e=ev?ev:window.event;
var co=config.options; // abbreviation
var here=story.findContainingTiddler(this);
if (here) var tid=store.getTiddler(here.getAttribute("tiddler"));
var enabled=co.chkFramedLinks || co.chkFramedLinksTag && tid && tid.isTagged(co.txtFramedLinksTag);
if (!enabled || e.ctrlKey || e.shiftKey || e.altKey) return; // BYPASS
var p=this.parentNode;
var f=this.nextSibling?this.nextSibling.firstChild:null; // get the IFRAME... maybe...
var w=co.txtFrameWidth; if (!w || !w.length) w="100%";
var h=co.txtFrameHeight; if (!h || !h.length) h="80%";
if (h.indexOf("%")) h=(findWindowHeight()*h.replace(/%/,"")/100)+"px"; // calc height as % of window
var showing=f && f.nodeName.toUpperCase()=="IFRAME"; // does IFRAME really exist?
var stretchCell=p.nodeName.toUpperCase()=="TD" && w.indexOf("%")!=-1 && w.replace(/%/,"")>=100;
if (!showing) { // create an iframe
link.style.display="block"; // force IFRAME onto line following link
if (stretchCell) { p.setAttribute("savedWidth",p.style.width); p.style.width="100%"; } // adjust TD so IFRAME stretches
var wrapper=createTiddlyElement(null,"span"); // wrapper for slider animation
wrapper.setAttribute("url",this.href); // for async loading of frame after animation completes
var f=createTiddlyElement(wrapper,"iframe"); // create IFRAME
f.style.backgroundColor="#fff"; f.style.width=w; f.style.height=h;
p.insertBefore(wrapper,this.nextSibling);
function loadURL(wrapper) { var f=wrapper.firstChild; var url=wrapper.getAttribute("url");
var d=f.contentDocument?f.contentDocument:(f.contentWindow?f.contentWindow.document:f.document);
d.open(); d.writeln("<html>connecting to "+url+"</html>"); d.close();
try { f.src=url; } // if the iframe can't handle the href
catch(e) { alert(e.description?e.description:e.toString()); } // ... then report the error
window.scrollTo(0,ensureVisible(wrapper));
}
if (!co.chkAnimate) loadURL(wrapper);
else {
var morph=new Slider(wrapper,true);
morph.callback=loadURL;
morph.properties.push({style: 'width', start: 0, end: 100, template: '%0%'});
anim.startAnimating(morph);
}
} else { // remove iframe
link.style.display="inline"; // restore link style
if (stretchCell) p.style.width=p.getAttribute("savedWidth"); // restore previous width of TD
if (!co.chkAnimate) p.removeChild(f.parentNode);
else {
var morph=new Slider(f.parentNode,false,false,"all");
morph.properties.push({style: 'width', start: 100, end: 0, template: '%0%'});
anim.startAnimating(morph);
}
}
e.cancelBubble=true; if (e.stopPropagation) e.stopPropagation(); return false;
}
return link;
}
//}}}
/***
|Name|FullScreenPlugin|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/#FullScreenPlugin|
|Version|1.1|
|Requires|~TW2.x|
!Description:
Toggle between viewing tiddlers fullscreen and normally. Very handy for when you need more viewing space.
!Demo:
Click the ↕ button in the toolbar for this tiddler. Click it again to turn off fullscreen.
!Installation:
Copy the contents of this tiddler to your TW, tag with systemConfig, save and reload your TW.
Edit the ViewTemplate to add the fullscreen command to the toolbar.
{{{ |~ViewToolbar|closeTiddler closeOthers +editTiddler > fields permalink references jump fullscreen| }}}
!History:
*25-07-06: ver 1.1
*20-07-06: ver 1.0
!Code
***/
//{{{
var lewcidFullScreen = false;
config.commands.fullscreen =
{
text:" «FullScreen» ",
tooltip:"Fullscreen mode"
};
config.commands.fullscreen.handler = function (event,src,title)
{
if (lewcidFullScreen == false)
{
lewcidFullScreen = true;
setStylesheet('#sidebar, .header , #mainMenu{display:none;} #displayArea{margin:0em 0 0 0 !important;}',"lewcidFullScreenStyle");
}
else
{
lewcidFullScreen = false;
setStylesheet(' ',"lewcidFullScreenStyle");
}
}
config.macros.fullscreen={};
config.macros.fullscreen.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{
var label = params[0]||" «Screen» ";
var tooltip = params[1]||"Fullscreen mode";
createTiddlyButton(place,label,tooltip,config.commands.fullscreen.handler);
}
var lewcid_fullscreen_closeTiddler = Story.prototype.closeTiddler;
Story.prototype.closeTiddler =function(title,animate,slowly)
{
lewcid_fullscreen_closeTiddler.apply(this,arguments);
if (story.isEmpty() && lewcidFullScreen == true)
config.commands.fullscreen.handler();
}
Slider.prototype.lewcidStop = Slider.prototype.stop;
Slider.prototype.stop = function()
{
this.lewcidStop();
if (story.isEmpty() && lewcidFullScreen == true)
config.commands.fullscreen.handler();
}
//}}}
Для начала работы рекомендую исправить следующие записки (тиддлы):
* [[SiteTitle]] & [[SiteSubtitle]]: Основной и дополнительный заголовки файла.
* [[MainMenu]]: Главное меню (обычно слева)
* [[DefaultTiddlers]]: Содержит список записок, открываемых по умолчанию.
!! Начать советую со справки:
* [[Справка и настройка]]
Кроме того, следует вписать имя, которым будут подписываться ваши записки: <<option txtUserName>> ~~(латиница рекомендуется)~~
[img[true_speech/spells/]]
----
{{{
скрепить
(сила жизнь в существо)
&
заклинание:
скрепить
(
скрепить
(если существо направить на я заклинание: (направить назад заклинание я)
то направить назад <то> заклинание
)
(если существо направить на я заклинание: (закрыть заклинание я)
то создать spell крест на <то> заклинание
)
(если существо (создать spell крест) на заклинание я
то направить spell назад <то> заклинание
)
(если существо направить на заклинание я заклинание: (разрушить magic заклинание я)
то направить spell назад на то заклинание
) в пирамида
скрепить
(если носитель инферно направить заклинание к существо сквозь заклинание я
если носитель инферно направить заклинание на существо сквозь заклинание я
то направить свят назад то заклинание
)
( если носитель инферно создать заклинание на существо внутри шар заклинание я
если носитель инферно направить заклинание вокруг существо внутри шар заклинание я
то создать скрепить (spell)( свят) крест на то заклинание
)
( если носитель сила инферно направить заклинание к существо сквозь заклинание я
если носитель инферно направить заклинание на существо сквозь заклинание я
то направить свят назад то заклинание
)
( если носитель сила инферно создать заклинание на существо внутри шар заклинание я
если носитель инферно создать заклинание вокруг существо внутри шар заклинание я
то создать скрепить spell свят крест на то заклинание
) в пирамида
(
если имеющий_дар направить на существо внутри шар заклинание я заклинание
если на существо заклинание
то направить мысль в эмоции/чувства имеющий_дар
то направить spell <то> заклинание сквозь заклинание я
)
(
скрепить
(скрепить
создать сила ветер конус посолонь закрутить тамгде существо <радиус_1>
создать свят конус посолонь закрутить тамгде существо <радиус_1 - дельта>
)
(скрепить
(когда носитель сила инферно направить сквозь заклинание я
тогда разрушить (скрепить (пламя образ разрушить) (свят) носитель инферно)
( когда носитель сила инферно направить сквозь заклинание я
тогда разрушить (скрепить (пламя образ разрушить) (свят) носитель сила инферно)
)
)
в пирамида
}}}
----
[>img[true_speech/Cute_Panda_Naru_by_Takuna13.jpg]]
* [[GMail|mailto:karel.wintersky@gmail.com]]
* [[LiveJournal|http://arris-krain.livejournal.com/]]
* [[Imaginaria|http://imaginaria.ru/profile/Arris/]]
* [[GitHub|https://github.com/KarelWintersky/]]
* ICQ: 207-403-021
!! Речь
[[Словарь]]+[[Звезда сил]]
[[₪ Как это работает ₪|http://imaginaria.ru/truespeech/ir-sryv-pokrovov-pre-starter-grade.html]]
! Части речи
[[Слова]]
[[Образующие]]
[[Направляющие]]
[[Объекты]]
[[Силы]]
! Правила
[[Теория сил]]
[[Основная форма]]
[[Каноническая форма]]
[[Словодействия]]
! Spell book
[[Оглавление|Полный список]]
[[Коллекции]]
[[Приёмы]]+[[Примечания]]
! Склерозник
[[Оглавление]]
[[Игромеханика]]
[[Синтаксис]]
/% ! Игромеханика %/
----
~~[[Справка и настройка]]~~
/***
|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|
This plugin adds new wiki syntax for embedding 'slider' panels directly into tiddler content.
!!!!!Usage
<<<
//{{{
++++(cookiename)!!!!!^width^*@{{class{[label=key|tooltip][altlabel|alttooltip]}}}#panelID:>...
content goes here
===
//}}}
* ''"""+++""" (or """++++""") and """==="""''<br>marks the start and end of the slider definition, respectively. When the extra {{{+}}} is used, the slider will be open when initially displayed.
* ''"""(cookiename)"""''<br>saves the slider opened/closed state, and restores this state whenever the slider is re-rendered.
* ''"""! through !!!!!"""''<br>displays the slider label using a formatted headline (Hn) style instead of a button/link style
* ''"""^width^ (or just ^)"""''<br>makes the slider 'float' on top of other content rather than shifting that content downward. 'width' must be a valid CSS value (e.g., "30em", "180px", "50%", etc.). If omitted, the default width is "auto" (i.e., fit to content)
* ''"""*"""''<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
<<<
/***
|Name:|NewMeansNewPlugin|
|Description:|If 'New Tiddler' already exists then create 'New Tiddler (1)' and so on|
|Version:|1.1.1a|
|Date:|27-Jun-2011|
|Source:|http://mptw.tiddlyspot.com/empty.html#NewMeansNewPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License|http://mptw.tiddlyspot.com/#TheBSDLicense|
!!Note: I think this should be in the core
***/
//{{{
// change this or set config.newMeansNewForJournalsToo it in MptwUuserConfigPlugin
if (config.newMeansNewForJournalsToo == undefined) config.newMeansNewForJournalsToo = true;
String.prototype.getNextFreeName = function() {
numberRegExp = / \(([0-9]+)\)$/;
var match = numberRegExp.exec(this);
if (match) {
var num = parseInt(match[1]) + 1;
return this.replace(numberRegExp," ("+num+")");
}
else {
return this + " (1)";
}
}
config.macros.newTiddler.checkForUnsaved = function(newName) {
var r = false;
story.forEachTiddler(function(title,element) {
if (title == newName)
r = true;
});
return r;
}
config.macros.newTiddler.getName = function(newName) {
while (store.getTiddler(newName) || config.macros.newTiddler.checkForUnsaved(newName))
newName = newName.getNextFreeName();
return newName;
}
config.macros.newTiddler.onClickNewTiddler = function()
{
var title = this.getAttribute("newTitle");
if(this.getAttribute("isJournal") == "true") {
title = new Date().formatString(title.trim());
}
// ---- these three lines should be the only difference between this and the core onClickNewTiddler
if (config.newMeansNewForJournalsToo || this.getAttribute("isJournal") != "true")
title = config.macros.newTiddler.getName(title);
var params = this.getAttribute("params");
var tags = params ? params.split("|") : [];
var focus = this.getAttribute("newFocus");
var template = this.getAttribute("newTemplate");
var customFields = this.getAttribute("customFields");
if(!customFields && !store.isShadowTiddler(title))
customFields = String.encodeHashMap(config.defaultCustomFields);
story.displayTiddler(null,title,template,false,null,null);
var tiddlerElem = story.getTiddler(title);
if(customFields)
story.addCustomFields(tiddlerElem,customFields);
var text = this.getAttribute("newText");
if(typeof text == "string")
story.getTiddlerField(title,"text").value = text.format([title]);
for(var t=0;t<tags.length;t++)
story.setTiddlerTag(title,tags[t],+1);
story.focusTiddler(title,focus);
return false;
};
//}}}
Техника: пробой (пронзание)
{{{
направить мыслью толчок стрелой дуновение[1]:
(создать сон тамгде заклинание[1] разрушить)
в существо
}}}
Это СОН с пробоем по астралу. Одной стихией продавливаем оболочку цели (астральную), потом добиваем сном.
Кроме всего прочего, в этом примере используется [[техника неявного связывания ядер|Неявное связывание ядер]].
/***
|''Name:''|RussianTextFormattingPlugin|
|''Version:''|1.1 (11-Jan-2012)|
|''Author:''|KarelWintersky|
|''Type:''|Patch|
!Description
* Add more useful custom formatter for russian users : {{{ ++ someting ++ }}} for ++bold++.
* Also, imports formatting from [[LegacyStrikeThroughPlugin|http://www.tiddlywiki.com/#LegacyStrikeThroughPlugin]] - support for legacy (pre 2.1) strike through formatting.
* And so on
!Revision History
1.1 (11-Jan-2013) by KarelWintersky
1.2 (17-Jan-2013) by KarelWintersky - check for installed once
1.3 (15-Feb-2013) by KarelWintersky - more formatting options
@@todo:@@ disable LegacyStrikeThroughPlugin if installed.
!Code
***/
//{{{
// Ensure that the RussianBoldText Plugin is only installed once.
if(!version.extensions.RussianTextFormattingPlugin)
{
version.extensions.RussianTextFormattingPlugin = {installed:true};
config.formatters.push(
{
name: "boldByCharRU",
match: "\\+\\+",
handler: function(w)
{
w.subWikifyTerm(w.output.appendChild(document.createElement("strong")),/(\+\+)/mg);
}
} );
// LegacyStrikeThroughPlugin
config.formatters.push(
{
name: "legacyStrikeByChar",
match: "==",
termRegExp: /(==)/mg,
element: "strike",
handler: config.formatterHelpers.createElementAndWikify
} );
} //# end of "install only once"
//}}}
/***
|''Name:''|~SectionMacro|
|''Version:''|0.9.4 (20-Apr-2007)|
|''Author:''|[[Jack]]|
|''Type:''|Macro|
!Description
Allows you to create collapsable sections just like the slider macro but without needing to create new tiddlers for these sections.
!Usage
{{{<<section Title Tiddler Text goes here...
and can be multi-
line and include {${${monospace text}$}$}.
>>}}}
<<section Title Tiddler Text goes here...
and can be multi-
line and include {${${monospace text}$}$}.
>>
!Revision History
* Original by [[Jack]] 0.9
* Nested sliders and cookie persistence 0.9.1
* Removed crappy cookie persistance 0.9.2
* Bug-fix with quoted 2st parameter (thanks M. Macolio) 0.9.3
* Bug-fix with monospace text (thanks M. Macolio) 0.9.4
!Code
***/
//{{{
version.extensions.section = {major: 0, minor: 9, revision: 4, date: new Date("Apr 20, 2007")};
config.macros.section = {count:0,display:'none'};
config.macros.section.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
this.slider(place,"chkSection" + this.count++,paramString.substr(params[0].length+(paramString.substr(params[0].length+1,1).match(/['"]/)?2:1)).replace(/\$\>/g, '>').replace(/}\$}\$}/, '}}}').replace(/{\${\${/, '{{{'),params[0], "tooltip");
}
config.macros.section.slider = function(place,cookie,text,title,tooltips) {
var btn = createTiddlyButton(place,title,tooltips,config.macros.slider.onClickSlider,"tiddlyLink tiddlyLinkExisting");
var panel = createTiddlyElement(place,"div",null,"timelineSliderPanel",null);
panel.setAttribute("cookie",cookie);
panel.style.display = config.options[cookie] ? "block" : "none";
panel.style.display=this.display;
if(text) wikify(text,panel);
};
//}}}
<<search>>
<<newTiddler label:"Новая заметка">>
<<newTiddler label:"Новая часть речи" text:{{store.getTiddlerText('Шаблон:часть_речи')}}>><<newTiddler label:"Новое заклинание" tag:"spell" text:{{store.getTiddlerText('Шаблон:заклятие')}}>>
<<saveChanges>>
<<newJournal "DD MMM YYYY" "journal" label:"Дневниковая запись">><<slider chkSliderOptionsPanel OptionsPanel "options »" "Change TiddlyWiki advanced options">>
/***
|''Name:''|SinglePageModePlugin|
|''Description:''| ? |
|''Version:''|2.1.1|
|''Date:''|Feb 21,2006|
|''Source:''|? |
|''Author:''|? |
|''License:''|? |
|''~CoreVersion:''|2.1.0|
***/
//{{{
version.extensions.SinglePageMode= {major: 2, minor: 1, revision: 1, date: new Date(2006,2,4)};
if (config.options.chkSinglePageMode==undefined)
config.options.chkSinglePageMode=false;
config.shadowTiddlers.AdvancedOptions
+= "\n<<option chkSinglePageMode>> Display one tiddler at a time";
config.SPMTimer = 0;
config.lastURL = window.location.hash;
function checkLastURL()
{
if (!config.options.chkSinglePageMode)
{ window.clearInterval(config.SPMTimer); config.SPMTimer=0; return; }
if (config.lastURL == window.location.hash)
return;
var tiddlerName = convertUTF8ToUnicode(decodeURI(window.location.hash.substr(1)));
tiddlerName=tiddlerName.replace(/\[\[/,"").replace(/\]\]/,""); // strip any [[ ]] bracketing
if (tiddlerName.length) story.displayTiddler(null,tiddlerName,1,null,null);
}
Story.prototype.coreDisplayTiddler=Story.prototype.displayTiddler;
Story.prototype.displayTiddler = function(srcElement,title,template,animate,slowly)
{
if (config.options.chkSinglePageMode) {
window.location.hash = encodeURIComponent(String.encodeTiddlyLink(title));
config.lastURL = window.location.hash;
document.title = wikifyPlain("SiteTitle") + " - " + title;
story.closeAllTiddlers();
if (!config.SPMTimer) config.SPMTimer=window.setInterval(function() {checkLastURL();},1000);
}
this.coreDisplayTiddler(srcElement,title,template,animate,slowly)
}
Story.prototype.coreDisplayTiddlers=Story.prototype.displayTiddlers;
Story.prototype.displayTiddlers = function(srcElement,titles,template,unused1,unused2,animate,slowly)
{
// suspend single-page mode when displaying multiple tiddlers
var save=config.options.chkSinglePageMode;
config.options.chkSinglePageMode=false;
this.coreDisplayTiddlers(srcElement,titles,template,unused1,unused2,animate,slowly);
config.options.chkSinglePageMode=save;
}
//}}}
Словарь, грамматика, орфография и заметки
/*{{{*/
/* фикс первого элемента в списке для макроса tagging */
ul li.tagging-listTitle:first-child {
list-style-type: none;
}
/* */
.width100 > table {
width: 100%;
}
.width50 > table {
width: 50%;
}
.twtable th {
text-align:center;
}
#mainMenu {
padding-top: 0;
}
/* */
.wrappingClass {color: #666; background: #bbb;}
.firstletter{ float:left; width:0.75em; font-size:400%; font-family:times,arial; line-height:60%; }
.textleft {text-align:left; display: block;}
.textright {text-align:right; display: block;}
.textcenter {text-align:center; display: block;}
.textjustify {text-align:justify; display: block;}
.textindent25 {text-indent:25px; display: block;}
.textmargin65p {margin-left:65%; display: block;}
.textmargin70p {margin-left:70%; display: block;}
/* border around each tiddler */
.tiddler {
padding: 1em;
margin: 1em 0;
border: 1px solid #ccc;
}
/* make it print a little cleaner */
@media print {
#topMenu {
display: none ! important;
}
#mainMenu {
display: none ! important;
}
#sidebar {
display: none ! important;
}
#toolbar {
display: none ! important;
}
#messageArea {
display: none ! important;
}
.header {
display: none ! important;
}
.tiddler .subtitle {
display: none ! important;
}
.tiddler .toolbar {
display: none ! important;
}
.tiddler .tagging {
display: none ! important;
}
.tiddler .tagged {
display: none ! important;
}
/* not sure if we need all the importants */
.tiddler {
border-style: none ! important;
margin:0px ! important;
padding:0px ! important;
padding-bottom:2em ! important;
}
.headerShadow {
visibility: hidden ! important;
}
}
/* Monospaced font in editor area */
.editor textarea, .editor input {
font-family: 'Consolas', monospace;
background-color:[[ColorPalette::TertiaryPale]];
}
h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;color: green;}
.wrappingClass {color: #666; background: #bbb;}
.firstletter{ float:left; width:0.75em; font-size:400%; font-family:times,arial; line-height:60%; }
.textleft {text-align:left;}
.textright {text-align:right;}
.textcenter {text-align:center;}
.textjustify {text-align:justify;}
.textindent25 {text-indent:25px;}
/*}}}*/
/***
|''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: "\u2193",
uarrow: "\u2191",
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:''|TiddlersBarPlugin|
|''Description:''|A bar to switch between tiddlers through tabs (like browser tabs bar).|
|''Version:''|1.2.1|
|''Date:''|Dec 21,2007|
|''Source:''|http://visualtw.ouvaton.org/VisualTW.html|
|''Author:''|Pascal Collin|
|''License:''|[[BSD open source license|License]]|
|''~CoreVersion:''|2.1.0|
|''Browser:''|Firefox 2.0; InternetExplorer 6.0, others|
!Demos
On [[homepage|http://visualtw.ouvaton.org/VisualTW.html]], open several tiddlers to use the tabs bar.
!Installation
#import this tiddler from [[homepage|http://visualtw.ouvaton.org/VisualTW.html]] (tagged as systemConfig)
#save and reload
#''if you're using a custom [[PageTemplate]]'', add {{{<div id='tiddlersBar' refresh='content' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div>}}} before {{{<div id='tiddlerDisplay'></div>}}}
#optionally, adjust StyleSheetTiddlersBar
!Tips
*Doubleclick on the tiddlers bar (where there is no tab) create a new tiddler.
*Tabs include a button to close {{{x}}} or save {{{!}}} their tiddler.
*By default, click on the current tab close all others tiddlers.
!Configuration options
<<option chkDisableTabsBar>> Disable the tabs bar (to print, by example).
<<option chkHideTabsBarWhenSingleTab >> Automatically hide the tabs bar when only one tiddler is displayed.
<<option txtSelectedTiddlerTabButton>> ''selected'' tab command button.
!Code
***/
//{{{
config.options.chkDisableTabsBar = config.options.chkDisableTabsBar ? config.options.chkDisableTabsBar : false;
config.options.chkHideTabsBarWhenSingleTab = config.options.chkHideTabsBarWhenSingleTab ? config.options.chkHideTabsBarWhenSingleTab : false;
config.options.txtSelectedTiddlerTabButton = config.options.txtSelectedTiddlerTabButton ? config.options.txtSelectedTiddlerTabButton : "closeOthers";
config.macros.tiddlersBar = {
tooltip : "see ",
tooltipClose : "click here to close this tab",
tooltipSave : "click here to save this tab",
promptRename : "Enter tiddler new name",
currentTiddler : "",
previousState : false,
handler: function(place,macroName,params) {
if (config.macros.tiddlersBar.isShown())
story.forEachTiddler(function(title,e){
if (title==config.macros.tiddlersBar.currentTiddler){
var d = createTiddlyElement(null,"span",null,"tab tabSelected");
config.macros.tiddlersBar.createActiveTabButton(d,title);
}
else {
var d = createTiddlyElement(place,"span",null,"tab tabUnselected");
var btn = createTiddlyButton(d,title,config.macros.tiddlersBar.tooltip + title,config.macros.tiddlersBar.onSelectTab);
btn.setAttribute("tiddler", title);
}
var isDirty =story.isDirty(title);
var c = createTiddlyButton(d,isDirty ?"!":"x",isDirty?config.macros.tiddlersBar.tooltipSave:config.macros.tiddlersBar.tooltipClose, isDirty ? config.macros.tiddlersBar.onTabSave : config.macros.tiddlersBar.onTabClose,"tabButton");
c.setAttribute("tiddler", title);
if (place.childNodes) {
place.insertBefore(document.createTextNode(" "),place.firstChild); // to allow break line here when many tiddlers are open
place.insertBefore(d,place.firstChild);
}
else place.appendChild(d);
})
},
refresh: function(place,params){
removeChildren(place);
config.macros.tiddlersBar.handler(place,"tiddlersBar",params);
if (config.macros.tiddlersBar.previousState!=config.macros.tiddlersBar.isShown()) {
story.refreshAllTiddlers();
if (config.macros.tiddlersBar.previousState) story.forEachTiddler(function(t,e){e.style.display="";});
config.macros.tiddlersBar.previousState = !config.macros.tiddlersBar.previousState;
}
},
isShown : function(){
if (config.options.chkDisableTabsBar) return false;
if (!config.options.chkHideTabsBarWhenSingleTab) return true;
var cpt=0;
story.forEachTiddler(function(){cpt++});
return (cpt>1);
},
selectNextTab : function(){ //used when the current tab is closed (to select another tab)
var previous="";
story.forEachTiddler(function(title){
if (!config.macros.tiddlersBar.currentTiddler) {
story.displayTiddler(null,title);
return;
}
if (title==config.macros.tiddlersBar.currentTiddler) {
if (previous) {
story.displayTiddler(null,previous);
return;
}
else config.macros.tiddlersBar.currentTiddler=""; // so next tab will be selected
}
else previous=title;
});
},
onSelectTab : function(e){
var t = this.getAttribute("tiddler");
if (t) story.displayTiddler(null,t);
return false;
},
onTabClose : function(e){
var t = this.getAttribute("tiddler");
if (t) {
if(story.hasChanges(t) && !readOnly) {
if(!confirm(config.commands.cancelTiddler.warning.format([t])))
return false;
}
story.closeTiddler(t);
}
return false;
},
onTabSave : function(e) {
var t = this.getAttribute("tiddler");
if (!e) e=window.event;
if (t) config.commands.saveTiddler.handler(e,null,t);
return false;
},
onSelectedTabButtonClick : function(event,src,title) {
var t = this.getAttribute("tiddler");
if (!event) event=window.event;
if (t && config.options.txtSelectedTiddlerTabButton && config.commands[config.options.txtSelectedTiddlerTabButton])
config.commands[config.options.txtSelectedTiddlerTabButton].handler(event, src, t);
return false;
},
onTiddlersBarAction: function(event) {
var source = event.target ? event.target.id : event.srcElement.id; // FF uses target and IE uses srcElement;
if (source=="tiddlersBar") story.displayTiddler(null,'New Tiddler',DEFAULT_EDIT_TEMPLATE,false,null,null);
},
createActiveTabButton : function(place,title) {
if (config.options.txtSelectedTiddlerTabButton && config.commands[config.options.txtSelectedTiddlerTabButton]) {
var btn = createTiddlyButton(place, title, config.commands[config.options.txtSelectedTiddlerTabButton].tooltip ,config.macros.tiddlersBar.onSelectedTabButtonClick);
btn.setAttribute("tiddler", title);
}
else
createTiddlyText(place,title);
}
}
story.coreCloseTiddler = story.coreCloseTiddler? story.coreCloseTiddler : story.closeTiddler;
story.coreDisplayTiddler = story.coreDisplayTiddler ? story.coreDisplayTiddler : story.displayTiddler;
story.closeTiddler = function(title,animate,unused) {
if (title==config.macros.tiddlersBar.currentTiddler)
config.macros.tiddlersBar.selectNextTab();
story.coreCloseTiddler(title,false,unused); //disable animation to get it closed before calling tiddlersBar.refresh
var e=document.getElementById("tiddlersBar");
if (e) config.macros.tiddlersBar.refresh(e,null);
}
story.displayTiddler = function(srcElement,tiddler,template,animate,unused,customFields,toggle){
story.coreDisplayTiddler(srcElement,tiddler,template,animate,unused,customFields,toggle);
var title = (tiddler instanceof Tiddler)? tiddler.title : tiddler;
if (config.macros.tiddlersBar.isShown()) {
story.forEachTiddler(function(t,e){
if (t!=title) e.style.display="none";
else e.style.display="";
})
config.macros.tiddlersBar.currentTiddler=title;
}
var e=document.getElementById("tiddlersBar");
if (e) config.macros.tiddlersBar.refresh(e,null);
}
ensureVisible=function (e) {return 0} //disable bottom scrolling (not useful now)
config.shadowTiddlers.StyleSheetTiddlersBar = "/*{{{*/\n";
config.shadowTiddlers.StyleSheetTiddlersBar += "#tiddlersBar .button {border:0}\n";
config.shadowTiddlers.StyleSheetTiddlersBar += "#tiddlersBar .tab {white-space:nowrap}\n";
config.shadowTiddlers.StyleSheetTiddlersBar += "#tiddlersBar {padding : 1em 0.5em 2px 0.5em}\n";
config.shadowTiddlers.StyleSheetTiddlersBar += ".tabUnselected .tabButton, .tabSelected .tabButton {padding : 0 2px 0 2px; margin: 0 0 0 4px;}\n";
config.shadowTiddlers.StyleSheetTiddlersBar += ".tiddler, .tabContents {border:1px [[ColorPalette::TertiaryPale]] solid;}\n";
config.shadowTiddlers.StyleSheetTiddlersBar +="/*}}}*/";
store.addNotification("StyleSheetTiddlersBar", refreshStyles);
config.shadowTiddlers.PageTemplate=config.shadowTiddlers.PageTemplate.replace(/<div id='tiddlerDisplay'><\/div>/m,"<div id='tiddlersBar' refresh='content' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div>\n<div id='tiddlerDisplay'></div>")
//}}}
|~ViewToolbar|closeTiddler closeOthers +editTiddler > fields permalink references jump fullscreen|
|~EditToolbar|+saveTiddler -cancelTiddler deleteTiddler|
<!--{{{-->
<div class='toolbar' role='navigation' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<!-- <div class='tagging' macro='tagging'></div> -->
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
/***
|''Name:''|WikiBar+|
|''Version:''|3.0 (based on Wikibar 2.0.0 beta3)|
|''Source:''|[[AiddlyWiki|http://aiddlywiki.sourceforge.net]]|
|''Original:''|[[Arphen Lin|mailto:arphenlin@gmail.com]]|
|''Fixes:''|[[Karel Wintersky|mailto:karel.wintersky@gmail.com]]|
|''Type:''|toolbar macro command extension|
|''Required:''|TiddlyWiki 2.7.0|
!Description
WikiBar is a toolbar that gives access to most of TiddlyWiki's formatting features with a few clicks. It's a handy tool for people who are not familiar with TiddlyWiki syntax.
Besides, with WikiBar-addons, users can extend the power of WikiBar.
!Revision history
*v3.0 (2013/12/14)
** some fixes for latest TiddlyWiki Core
** REQUIRED {{{ <div class='toolbar wikibar' macro='wikibar'></div> }}} in EditTemplate (below {{{<div class='editor' macro='edit title'></div> }}}
*v2.0.0 beta3 (2005/12/30)
** remove macros (replaced by TWMacro addon)
** add wikibar command in toolbar automatically
** rename DOIT to HANDLER
** rename TIP to TOOLTIP
*v2.0.0 beta2 (2005/12/21)
** re-design Wikibar addon framework
*v2.0.0 beta1 (2005/12/14)
** Note:
*** WikiBarPlugin is renamed to WikiBar
** New Features:
*** support TiddlyWiki 2.0.0 template mechanism
*** new wikibar data structure
*** new wikibar-addon framework for developers
**** support dynamic popup menu generator
*** support most new macros added in TiddlyWiki 2.0.0
*** multi-level popup menu
*** fix wikibar tab stop
*** remove paletteSelector
** Known Bugs:
*** popup-menu and color-picker can't be closed correctly
*** some macros can't be displayed correctly in previewer
*** text in previewer will be displayed italic
*v1.2.0 (2005/11/21)
**New Features:
***User defined color palettes supported
####Get color palettes from [[ColorZilla Palettes|http://www.iosart.com/firefox/colorzilla/palettes.html]].
####Save the palette file(*.gpl) as a new tiddler and tag it with 'ColorPalettes', then you can use it in WikiBar.
***WikiBar style sheet supported
***Click on document to close current colorPicker, paletteSelector or aboutWikibar
*v1.1.1 (2005/11/03)
**Bugs fixed:
***'Not enough parameters!' message is displayed when the parameter includes '%+number', ex: 'hello%20world!'
*v1.1.0 (2005/11/01)
**Bugs fixed:
***WikiBar overruns (reported by by GeoffS <gslocock@yahoo.co.uk>)
**New features:
***Insert a color code at the cursor. (Thanks to RunningUtes <RunningUtes@gmail.com>)
***Enable gradient macro. (Thanks to RunningUtes <RunningUtes@gmail.com>)
***Insert tiddler comment tags {{{/% ... %/}}}. (new feature supported by TiddlyWiki 1.2.37)
***Insert DateFormatString for {{{<<today>>}}} macro. (new feature supported by TiddlyWiki 1.2.37)
**Enhanced:
***Allow optional parameters in syntax.
**Bugs:
***'Not enough parameters!' message is displayed when the parameter includes '%+number', ex: 'hello%20world!'
*v1.0.0 (2005/10/30)
**Initial release
!Code
***/
//{{{
config.macros.wikibar = {major: 3, minor: 0, revision: 0, date: new Date(2013,12,14)};
config.macros.wikibar.handler = function(place,macroName,params,wikifier,paramString,tiddler){
if(!(tiddler instanceof Tiddler)) {return;}
story.setDirty(tiddler.title,true);
place.id = 'wikibar'+(tiddler.title).replace(/_/g, "__").replace(/ /g, "_"); // @KW Patch for CORE 2.7.0
place.className = 'toolbar wikibar';
};
function wikibar_install(){
config.commands.wikibar = {
text: 'wikibar',
tooltip: 'wikibar on/off',
handler: function(e,src,title) {
if(!e){ e = window.event; }
title = title.replace(/_/g, "__").replace(/ /g, "_"); // @KW Patch for CORE 2.7.0
var theButton = resolveTarget(e);
theButton.id = 'wikibarButton'+title;
wikibarPopup.remove();
wikibar_installAddons(theButton, title);
wikibar_createWikibar(title);
return(false);
}
};
config.shadowTiddlers['EditTemplate'] = wikibar_addWikibarCommand(config.shadowTiddlers['EditTemplate']);
var tiddler = store.getTiddler('EditTemplate');
if(tiddler){
tiddler.text = wikibar_addWikibarCommand(tiddler.text);
}
}
function wikibar_installAddons(theButton, title){
var tiddlers = store.getTaggedTiddlers('wikibarAddons');
if(!tiddlers) { return; }
theButton.addons=[];
for(var i=0; i<tiddlers.length; i++){
try{
eval(tiddlers[i].text);
try{
wikibar_addonInstall(title);
wikibar_addonInstall = null;
theButton.addons.push({ok:true, name:tiddlers[i].title});
}catch(ex){
theButton.addons.push({ok:false, name:tiddlers[i].title, error:ex});
}
}catch(ex){
theButton.addons.push({ok:false, name:tiddlers[i].title, error:ex});
}
}
}
function wikibar_addWikibarCommand(tiddlerText){
var div = document.createElement('div');
div.style.display = 'none';
div.innerHTML = tiddlerText;
for(var i=0; i<div.childNodes.length; i++){
var o=div.childNodes[i];
if(o.tagName==='DIV'){
if(o.className=='toolbar'){
var macroText = o.getAttribute('macro').trim();
if(macroText.search('wikibar')<=0){
macroText += ' wikibar';
o.setAttribute('macro', macroText);
}
break;
}
}
}
return div.innerHTML.replace(/\"/g, "\'");
}
function wikibar_processSyntaxParams(theSyntax, params){
try{
var pcr = 'AplWikibarPcr';
var rx=null;
var allParams=null;
if(params){
if(typeof(params)=='object'){
for(var i=0; i<params.length; i++){
if(params[i]){
params[i] = params[i].replace(new RegExp('%','g'), pcr).trim();
rx = '(\\[%'+(i+1)+'\\])' + '|' + '(%'+(i+1)+')';
theSyntax = theSyntax.replace(new RegExp(rx,'g'), params[i] );
}
}
allParams = params.join(' ').trim();
}else{
allParams = params.replace(new RegExp('%','g'), pcr).trim();
rx = /(\[%1{1}\])|(%1{1})/g;
theSyntax = theSyntax.replace(rx, allParams);
}
}
if(allParams){
theSyntax = theSyntax.replace(new RegExp('%N{1}','g'), allParams);
}
rx=/\[%(([1-9]{1,}[0-9]{0,})|(N{1}))\]/g;
theSyntax = theSyntax.replace(rx, '');
rx=/%(([1-9]{1,}[0-9]{0,})|(N{1}))/g;
if( theSyntax.match(rx) ){
throw 'Not enough parameters! ' + theSyntax;
}
theSyntax=theSyntax.replace(new RegExp(pcr,'g'), '%');
return theSyntax;
} catch(ex){
return null;
}
}
function wikibar_resolveEditItem(tiddlerWrapper, itemName){
if(tiddlerWrapper.hasChildNodes()){
var c=tiddlerWrapper.childNodes;
for(var i=0; i<c.length; i++){
var txt=wikibar_resolveEditItem(c[i], itemName);
if(!txt){
continue;
}else{
return txt;
}
}
}
return ((tiddlerWrapper.getAttribute && tiddlerWrapper.getAttribute('edit')==itemName)? tiddlerWrapper : null);
}
function wikibar_resolveEditItemValue(tiddlerWrapper, itemName){
var o = wikibar_resolveEditItem(tiddlerWrapper, itemName);
return (o? o.value.replace(/\r/mg,'') : null);
}
function wikibar_resolveTiddlerEditorWrapper(obj){
if(obj.id=='tiddlerDisplay'){return null;}
if((obj.getAttribute && obj.getAttribute('macro')=='edit text')){return obj;}
return wikibar_resolveTiddlerEditorWrapper(obj.parentNode);
}
function wikibar_resolveTiddlerEditor(obj){
if(obj.hasChildNodes()){
var c = obj.childNodes;
for(var i=0; i<c.length; i++){
var o=wikibar_resolveTiddlerEditor(c[i]);
if(o){ return o;}
}
}
return ((obj.getAttribute && obj.getAttribute('edit')=='text')? obj : null);
}
function wikibar_resolveTargetButton(obj){
if(obj.id && obj.id.substring(0,7)=='wikibar'){ return null; }
if(obj.tiddlerTitle){
return obj;
}else{
return wikibar_resolveTargetButton(obj.parentNode);
}
}
function wikibar_isValidMenuItem(tool){
if(!tool){ return false; }
if(tool.TYPE=='MENU' || tool.TYPE=='MAIN_MENU'){
for(var key in tool){
if(key.substring(0,8)=='DYNAITEM'){ return true; }
if(wikibar_isValidMenuItem(tool[key])){ return true; }
}
return false;
}else{
return (tool.HANDLER? true : false);
}
}
function wikibar_editFormat(param){
var editor = param.button.editor;
var params = param.params;
clearMessage();
if(!editor){ return; }
var repText = wikibar_processSyntaxParams(this.syntax, params);
if(repText===null){ return; }
var st = editor.scrollTop;
var ss = editor.selectionStart;
var se = editor.selectionEnd;
var frontText= '';
var endText = '';
var fullText = editor.value;
if(se>ss && ss>=0){
frontText = fullText.substring(0, ss);
endText = fullText.substring(se, fullText.length);
}
else if(ss===0 && (se===0 || se == fullText.length) ){
endText = fullText;
}
else if(se==ss && ss>0){
frontText = fullText.substring(0, ss);
endText = fullText.substring(se, fullText.length);
}
if(repText.indexOf('user_text')>=0 && this.hint){
repText = repText.replace('user_text', this.hint);
}
editor.value = frontText + repText + endText;
editor.selectionStart = ss;
editor.selectionEnd = ss + repText.length;
editor.scrollTop = st;
editor.focus();
}
function wikibar_editFormatByWord(param){
var editor = param.button.editor;
var params = param.params;
clearMessage();
if(!editor){return;}
var repText = wikibar_processSyntaxParams(this.syntax, params);
if(repText===null){ return; }
var st = editor.scrollTop;
var ss = editor.selectionStart;
var se = editor.selectionEnd;
var frontText= '';
var selText = '';
var endText = '';
var fullText = editor.value;
if(se>ss && ss>=0){
frontText = fullText.substring(0, ss);
selText = fullText.substring(ss,se);
endText = fullText.substring(se, fullText.length);
}
else if(ss===0 && (se===0 || se == fullText.length) ){
endText = fullText;
}
else if(se==ss && ss>0){
frontText = fullText.substring(0, ss);
endText = fullText.substring(se, fullText.length);
if(!( fullText.charAt(ss-1).match(/\W/gi) || fullText.charAt(ss).match(/\W/gi) )){
var m = frontText.match(/\W/gi);
if(m){
ss = frontText.lastIndexOf(m[m.length-1])+1;
}
else{
ss = 0;
}
m = endText.match(/\W/gi);
if(m){
se += endText.indexOf(m[0]);
}
else{
se = fullText.length;
}
frontText = fullText.substring(0, ss);
endText = fullText.substring(se, fullText.length);
selText = fullText.substring(ss,se);
}
}
if(selText.length>0){
repText = repText.replace('user_text', selText);
}
if(repText.indexOf('user_text')>=0 && this.hint){
repText = repText.replace('user_text', this.hint);
}
editor.value = frontText + repText + endText;
editor.selectionStart = ss;
editor.selectionEnd = ss + repText.length;
editor.scrollTop = st;
editor.focus();
}
function wikibar_editFormatByCursor(param){
var editor = param.button.editor;
var params = param.params;
clearMessage();
if(!editor){ return; }
var repText = wikibar_processSyntaxParams(this.syntax, params);
if(repText===null){ return; }
var st = editor.scrollTop;
var ss = editor.selectionStart;
var se = editor.selectionEnd;
var frontText= '';
var endText = '';
var fullText = editor.value;
if(se>ss && ss>=0){
frontText = fullText.substring(0, ss);
endText = fullText.substring(se, fullText.length);
}
else if(ss===0 && (se===0 || se == fullText.length) ){
endText = fullText;
}
else if(se==ss && ss>0){
frontText = fullText.substring(0, ss);
endText = fullText.substring(se, fullText.length);
}
if(repText.indexOf('user_text')>=0 && this.hint){
repText = repText.replace('user_text', this.hint);
}
editor.value = frontText + repText + endText;
editor.selectionStart = ss;
editor.selectionEnd = ss + repText.length;
editor.scrollTop = st;
editor.focus();
}
function wikibar_editFormatByLine(param){
var editor = param.button.editor;
var params = param.params;
clearMessage();
if(!editor){ return; }
var repText = wikibar_processSyntaxParams(this.syntax, params);
if(repText===null){ return; }
var st = editor.scrollTop;
var ss = editor.selectionStart;
var se = editor.selectionEnd;
var frontText= '';
var selText = '';
var endText = '';
var fullText = editor.value;
if(se>ss && ss>=0){
if(this.byBlock){
frontText = fullText.substring(0, ss);
selText = fullText.substring(ss,se);
endText = fullText.substring(se, fullText.length);
}
else{
se = ss;
}
}
if(ss===0 && (se===0 || se == fullText.length) ){
var m=fullText.match(/(\n|\r)/g);
if(m){
se = fullText.indexOf(m[0]);
}else{
se = fullText.length;
}
selText = fullText.substring(0, se);
endText = fullText.substring(se, fullText.length);
}
else if(se==ss && ss>0){
frontText = fullText.substring(0, ss);
endText = fullText.substring(se, fullText.length);
m = frontText.match(/(\n|\r)/g);
if(m){
ss = frontText.lastIndexOf(m[m.length-1])+1;
}
else{
ss = 0;
}
m = endText.match(/(\n|\r)/g);
if(m){
se += endText.indexOf(m[0]);
}
else{
se = fullText.length;
}
frontText = fullText.substring(0, ss);
selText = fullText.substring(ss,se);
endText = fullText.substring(se, fullText.length);
}
if(selText.length>0){
repText = repText.replace('user_text', selText);
}
if(repText.indexOf('user_text')>=0 && this.hint){
repText = repText.replace('user_text', this.hint);
}
if(this.byBlock){
if( (frontText.charAt(frontText.length-1)!='\n') && ss>0 ){
repText = '\n' + repText;
}
if( (endText.charAt(0)!='\n') || se==fullText.length){
repText += '\n';
}
}
editor.value = frontText + repText + endText;
editor.selectionStart = ss;
editor.selectionEnd = ss + repText.length;
editor.scrollTop = st;
editor.focus();
}
function wikibar_editFormatByTableCell(param){
var editor = param.button.editor;
var params = param.params;
clearMessage();
if(!editor){ return; }
var repText = wikibar_processSyntaxParams(this.syntax, params);
if(repText===null){ return; }
var st = editor.scrollTop;
var ss = editor.selectionStart;
var se = editor.selectionEnd;
var frontText= '';
var selText = '';
var endText = '';
var fullText = editor.value;
if(ss===0 || ss==fullText.length){
throw 'not valid cell!';
}
se=ss;
frontText = fullText.substring(0, ss);
endText = fullText.substring(se, fullText.length);
i=frontText.lastIndexOf('\n');
j=frontText.lastIndexOf('|');
if(i>j || j<0){
throw 'not valid cell!';
}
ss = j+1;
i=endText.indexOf('\n');
j=endText.indexOf('|');
if(i<j || j<0){
throw 'not valid cell!';
}
se += j;
frontText = fullText.substring(0, ss-1);
selText = fullText.substring(ss,se);
endText = fullText.substring(se+1, fullText.length);
if(this.key.substring(0,5)=='align'){
selText = selText.trim();
if( selText=='>' || selText=='~' || selText.substring(0,8)=='bgcolor(') {return; }
}
if(selText.length>0){
repText = repText.replace('user_text', selText);
}
if(repText.indexOf('user_text')>=0 && this.hint){
repText = repText.replace('user_text', this.hint);
}
editor.value = frontText + repText + endText;
editor.selectionStart = ss;
editor.selectionEnd = ss + repText.length - 2;
editor.scrollTop = st;
editor.focus();
}
function wikibar_editSelectAll(param){
var editor = param.button.editor;
editor.selectionStart = 0;
editor.selectionEnd = editor.value.length;
editor.scrollTop = 0;
editor.focus();
}
function wikibar_doPreview(param){
var theButton = param.button;
var editor = param.button.editor;
var wikibar = theButton.parentNode;
if(!wikibar) { return; }
title = theButton.tiddlerTitle;
var editorWrapper = wikibar_resolveTiddlerEditorWrapper(editor);
var tiddlerWrapper = editorWrapper.parentNode;
var previewer = document.getElementById('previewer'+title);
if(previewer){
previewer.parentNode.removeChild(previewer);
editorWrapper.style.display = 'block';
visible=true;
}else{
previewer = document.createElement('div');
previewer.id = 'previewer'+title;
previewer.className = 'viewer previewer';
previewer.style.height = (editor.offsetHeight) + 'px';
wikify(editor.value, previewer);
tiddlerWrapper.insertBefore(previewer, editorWrapper);
editorWrapper.style.display = 'none';
visible=false;
}
var pv=null;
for(var i=0; i<wikibar.childNodes.length; i++){
try{
var btn = wikibar.childNodes[i];
if(btn.toolItem.key == 'preview'){ pv=btn; }
if(btn.toolItem.key != 'preview'){
btn.style.display = visible ? '': 'none';
}
}catch(ex){}
}
if(!pv) { return; }
if(visible){
pv.innerHTML = '<font face=\"verdana\">∞</font>';
pv.title = 'preview current tiddler';
}
else{
pv.innerHTML = '<font face=\"verdana\">←</font>';
pv.title = 'back to editor';
}
}
function wikibar_doListAddons(param){
clearMessage();
var title = param.button.tiddlerTitle;
var wikibarButton = document.getElementById('wikibarButton'+title);
var ok=0, fail=0;
for(var i=0; i<wikibarButton.addons.length; i++){
var addon=wikibarButton.addons[i];
if(addon.ok){
displayMessage('[ o ] '+addon.name);
ok++;
}
else{
displayMessage('[ x ] '+addon.name + ': ' + addon.error);
fail++;
}
}
displayMessage('---------------------------------');
displayMessage(ok + ' ok ; ' + fail + ' failed');
}
function wikibar_getColorCode(param){
var cbOnPickColor = function(colorCode, param){
param.params = colorCode;
param.button.toolItem.doMore(param);
};
wikibarColorTool.openColorPicker(param.button, cbOnPickColor, param);
}
function wikibar_getLinkUrl(param){
var url= prompt('Please enter the link target', (this.param? this.param : ''));
if (url && url.trim().length>0){
param.params = url;
this.doMore(param);
}
}
function wikibar_getTableRowCol(param){
var rc= prompt('Please enter (rows x cols) of the table', '2 x 3');
if (!rc || (rc.trim()).length<=0){ return; }
var arr = rc.toUpperCase().split('X');
if(arr.length != 2) { return; }
for(var i=0; i<arr.length; i++){
if(isNaN(arr[i].trim())) { return; }
}
var rows = parseInt(arr[0].trim(), 10);
var cols = parseInt(arr[1].trim(), 10);
var txtTable='';
for(var r=0; r<rows; r++){
for(var c=0; c<=cols; c++){
if(c===0){
txtTable += '|';
}else{
txtTable += ' |';
}
}
txtTable += '\n';
}
if(txtTable.trim().length>0){
param.params = txtTable.trim();
this.doMore(param);
}
}
function wikibar_getMacroParam(param){
var p = prompt('Please enter the parameters of macro \"' + this.key + '\":' +
'\nSyntax: ' + this.syntax +
'\n\nNote: '+
'\n%1,%2,... - parameter needed'+
'\n[%1] - optional parameter'+
'\n%N - more than one parameter(1~n)'+
'\n[%N] - any number of parameters(0~n)'+
'\n\nPS:'+
'\n1. Parameters should be seperated with space character'+
'\n2. Use \" to wrap the parameter that includes space character, ex: \"hello world\"'+
'\n3. Input the word(null) for the optional parameter ignored',
(this.param? this.param : '') );
if(!p) { return; }
p=p.readMacroParams();
for(var i=0; i<p.length; i++){
var s=p[i].trim();
if(s.indexOf(' ')>0){ p[i]="'"+s+"'"; }
if(s.toLowerCase()=='null'){ p[i]=null; }
}
param.params = p;
this.doMore(param);
}
function wikibar_getMorePalette(unused){
clearMessage();
displayMessage('Get more color palettes(*.gpl) from ColorZilla Palettes site', 'http:\/\/www.iosart.com/firefox/colorzilla/palettes.html');
displayMessage('Save it as a new tiddler with \"ColorPalettes\" tag');
}
function wikibar_createWikibar(title){
var theWikibar = document.getElementById('wikibar' + title);
if(theWikibar){
if(theWikibar.hasChildNodes()){
theWikibar.style.display = (theWikibar.style.display=='block'? 'none':'block');
return;
}
}
var tiddlerWrapper = document.getElementById('tiddler'+title);
var theTextarea = wikibar_resolveTiddlerEditor(tiddlerWrapper);
if(!theTextarea){
clearMessage();
displayMessage('WikiBar only works in tiddler edit mode now');
return;
}else{
if(!theTextarea.id){ theTextarea.id = 'editor'+title; }
if(!theTextarea.parentNode.id){ theTextarea.parentNode.id='editorWrapper'+title; }
}
if(theWikibar){
theWikibar = document.getElementById('wikibar'+title);
}else{
var editorWrapper = wikibar_resolveTiddlerEditorWrapper(theTextarea);
theWikibar = createTiddlyElement(tiddlerWrapper, 'div', 'wikibar'+title, 'toolbar');
addClass(theWikibar, 'wikibar');
var previewer = document.getElementById('previewer'+title);
if(previewer){
tiddlerWrapper.insertBefore(theWikibar, previewer);
}else{
tiddlerWrapper.insertBefore(theWikibar, editorWrapper);
}
}
wikibar_createMenu(theWikibar,wikibarStore,title,theTextarea);
if(config.options['chkWikibarSetEditorHeight'] && config.options['txtWikibarEditorRows']){
theTextarea.rows = config.options['txtWikibarEditorRows'];
}
setStylesheet(
'.wikibar{text-align:left;visibility:visible;margin:2px;padding:1px;}.previewer{overflow:auto;display:block;border:1px solid;}#colorPicker{position:absolute;display:none;z-index:10;margin:0px;padding:0px;}#colorPicker table{margin:0px;padding:0px;border:2px solid #000;border-spacing:0px;border-collapse:collapse;}#colorPicker td{margin:0px;padding:0px;border:1px solid;font-size:11px;text-align:center;cursor:auto;}#colorPicker .header{background-color:#fff;}#colorPicker .button{background-color:#fff;cursor:pointer;cursor:hand;}#colorPicker .button:hover{padding-top:3px;padding-bottom:3px;color:#fff;background-color:#136;}#colorPicker .cell{padding:4px;font-size:7px;cursor:crosshair;}#colorPicker .cell:hover{padding:10px;}.wikibarPopup{position:absolute;z-index:10;border:1px solid #014;color:#014;background-color:#cef;}.wikibarPopup table{margin:0;padding:0;border:0;border-spacing:0;border-collapse:collapse;}.wikibarPopup .button:hover{color:#eee;background-color:#014;}.wikibarPopup .disabled{color:#888;}.wikibarPopup .disabled:hover{color:#888;background-color:#cef;}.wikibarPopup tr .seperator hr{margin:0;padding:0;background-color:#cef;width:100%;border:0;border-top:1px dashed #014;}.wikibarPopup tr .icon{font-family:verdana;font-weight:bolder;}.wikibarPopup tr .marker{font-family:verdana;font-weight:bolder;}.wikibarPopup td{font-size:0.9em;padding:2px;}.wikibarPopup input{border:0;border-bottom:1px solid #014;margin:0;padding:0;font-family:arial;font-size:100%;background-color:#fff;}',
'WikiBarStyleSheet');
}
function wikibar_createMenu(place,toolset,title,editor){
if(!wikibar_isValidMenuItem(toolset)){return;}
if(!(toolset.TYPE=='MAIN_MENU' || toolset.TYPE=='MENU')){ return; }
for(var key in toolset){
if(key.substring(0,9)=='SEPERATOR'){
wikibar_createMenuSeperator(place);
continue;
}
if(key.substring(0,8)=='DYNAITEM'){
var dynaTools = toolset[key](title,editor);
if(dynaTools.TYPE && dynaTools.TYPE=='MENU'){
wikibar_createMenuItem(place,dynaTools,null,editor,title);
}else{
dynaTools.TYPE = 'MENU';
wikibar_createMenu(place, dynaTools, title, editor);
}
continue;
}
if((toolset[key].TYPE!='MENU' && toolset[key].TYPE!='MAIN_MENU') && !toolset[key].HANDLER){continue;}
wikibar_createMenuItem(place,toolset,key,editor,title);
}
}
function wikibar_createMenuItem(place,toolset,key,editor,title){
if(!key){
var tool = toolset;
}else{
tool = toolset[key];
tool.key = key;
}
if(!wikibar_isValidMenuItem(tool)){return;}
var toolIsOnMainMenu = (toolset.TYPE=='MAIN_MENU');
var toolIsMenu = (tool.TYPE=='MENU');
var theButton;
if(toolIsOnMainMenu){
theButton = createTiddlyButton(
place,
'',
(tool.TOOLTIP? tool.TOOLTIP : ''),
(toolIsMenu? wikibar_onClickMenuItem : wikibar_onClickItem),
'button');
theButton.innerHTML = (tool.CAPTION? tool.CAPTION : key);
theButton.isOnMainMenu = true;
addClass(theButton, (toolIsMenu? 'menu' : 'item'));
place.appendChild( document.createTextNode('\n') );
if(!toolIsMenu){
if(config.options['chkWikibarPopmenuOnMouseOver']){
theButton.onmouseover = function(e){ wikibarPopup.remove(); };
}
}
}else{
theButton=createTiddlyElement(place, 'tr',key,'button');
theButton.title = (tool.TOOLTIP? tool.TOOLTIP : '');
theButton.onclick = (toolIsMenu? wikibar_onClickMenuItem : wikibar_onClickItem);
var tdL = createTiddlyElement(theButton, 'td','','marker');
var td = createTiddlyElement(theButton, 'td');
var tdR = createTiddlyElement(theButton, 'td','','marker');
td.innerHTML = (tool.CAPTION? tool.CAPTION : key);
if(toolIsMenu){
tdR.innerHTML=' ›';
}
if(tool.SELECTED){
tdL.innerHTML = '√ ';
addClass(theButton, 'selected');
}
if(tool.DISABLED){
addClass(theButton, 'disabled');
}
}
theButton.tiddlerTitle = title;
theButton.toolItem = tool;
theButton.editor = editor;
theButton.tabIndex = 999;
if(toolIsMenu){
if(config.options['chkWikibarPopmenuOnMouseOver']){
theButton.onmouseover = wikibar_onClickMenuItem;
}
}
}
function wikibar_createMenuSeperator(place){
if(place.id.substring(0,7)=='wikibar') { return; }
var onclickSeperator=function(e){
if(!e){ e = window.event; }
e.cancelBubble = true;
if (e.stopPropagation){ e.stopPropagation(); }
return(false);
};
var theButton=createTiddlyElement(place,'tr','','seperator');
var td = createTiddlyElement(theButton, 'td','','seperator');
td.colSpan=3;
theButton.onclick=onclickSeperator;
td.innerHTML = '<hr>';
}
function wikibar_genWikibarAbout(){
var toolset={};
toolset.version = {
CAPTION: '<center>WikiBar ' +
config.macros.wikibar.major + '.' +
config.macros.wikibar.minor + '.' +
config.macros.wikibar.revision +
(config.macros.wikibar.beta? ' beta '+config.macros.wikibar.beta : '') +
'</center>',
HANDLER: function(){}
};
toolset.SEPERATOR = {};
toolset.author = {
CAPTION: '<center>Arphen Lin<br>arphenlin@gmail.com</center>',
TOOLTIP: 'send mail to the author',
HANDLER: function(){ window.open('mailto:arphenlin@gmail.com'); }
};
toolset.website = {
CAPTION: '<center>aiddlywiki.sourceforge.net</center>',
TOOLTIP: 'go to the web site of WikiBar',
HANDLER: function(){ window.open('http:\/\/aiddlywiki.sourceforge.net/'); }
};
return toolset;
}
function wikibar_genWikibarOptions(title, editor){
var toolset={};
toolset.popOnMouseOver = {
CAPTION:'popup menu on mouse over',
SELECTED: config.options['chkWikibarPopmenuOnMouseOver'],
HANDLER: function(param){
config.options['chkWikibarPopmenuOnMouseOver'] = !config.options['chkWikibarPopmenuOnMouseOver'];
saveOptionCookie('chkWikibarPopmenuOnMouseOver');
var title = param.button.tiddlerTitle;
var wikibar = document.getElementById('wikibar'+title);
if(wikibar){ wikibar.parentNode.removeChild(wikibar); }
wikibar_createWikibar(title);
}
};
toolset.setEditorSize = {
CAPTION:'set editor height: <input id=\"txtWikibarEditorRows\" type=text size=1 MAXLENGTH=3 value=\"' +
(config.options['txtWikibarEditorRows']? config.options['txtWikibarEditorRows']:editor.rows) + '\"> ok',
HANDLER: function(param){
var input = document.getElementById('txtWikibarEditorRows');
if(input){
var rows = parseInt(input.value, 10);
if(!isNaN(rows)){
var editor = param.button.editor;
editor.rows = rows;
}else{
rows=config.maxEditRows;
}
config.options['txtWikibarEditorRows'] = rows;
saveOptionCookie('txtWikibarEditorRows');
config.maxEditRows = rows;
}
}
};
toolset.setEditorSizeOnLoadingWikibar = {
CAPTION:'set editor height on loading wikibar',
SELECTED: config.options['chkWikibarSetEditorHeight'],
HANDLER: function(param){
config.options['chkWikibarSetEditorHeight'] = !config.options['chkWikibarSetEditorHeight'];
saveOptionCookie('chkWikibarSetEditorHeight');
if(config.options['chkWikibarSetEditorHeight']){
var rows = config.options['txtWikibarEditorRows'];
if(!isNaN(rows)){ rows = 15; }
var editor = param.button.editor;
editor.rows = rows;
config.options['txtWikibarEditorRows'] = rows;
saveOptionCookie('txtWikibarEditorRows');
}
}
};
toolset.SEPERATOR = {};
toolset.update = {
CAPTION: 'check for updates',
DISABLED: true,
HANDLER: function(){}
};
return toolset;
}
function wikibar_genPaletteSelector(){
try{
var cpTiddlers = store.getTaggedTiddlers('ColorPalettes');
if(!cpTiddlers) { return; }
var palettes=[];
palettes.push(wikibarColorTool.defaultPaletteName);
for(var i=0; i<cpTiddlers.length; i++){
palettes.push(cpTiddlers[i].title.trim());
}
var toolset={};
for(i=0; i<palettes.length; i++){
toolset[palettes[i]] = {
TOOLTIP: palettes[i],
SELECTED: (palettes[i]==wikibarColorTool.paletteName),
HANDLER: wikibar_doSelectPalette
};
}
return toolset;
}catch(ex){ return null; }
}
function wikibar_onClickItem(e){
if(!e){ e = window.event; }
var theTarget = resolveTarget(e);
if(theTarget.tagName=='INPUT'){
e.cancelBubble = true;
if (e.stopPropagation){ e.stopPropagation(); }
return;
}
var theButton = wikibar_resolveTargetButton(theTarget);
if(!theButton){ return(false); }
var o = theButton.toolItem;
if(!o) { return; }
var param = {
event: e,
button: theButton
};
if(o.HANDLER){ o.HANDLER(param); }
if(o.DISABLED){
e.cancelBubble = true;
if (e.stopPropagation){ e.stopPropagation(); }
}
return(false);
}
function wikibar_onClickMenuItem(e){
if(!e){ e = window.event; }
var theButton = wikibar_resolveTargetButton(resolveTarget(e));
if(!theButton){ return(false); }
e.cancelBubble = true;
if (e.stopPropagation){ e.stopPropagation(); }
var title = theButton.tiddlerTitle;
var editor = theButton.editor;
var tool = theButton.toolItem;
if(!tool) { return; }
var popup = wikibarPopup.create(this);
if(popup){
wikibar_createMenu(popup,tool,title,editor);
if(!popup.hasChildNodes()){
wikibarPopup.remove();
}else{
wikibarPopup.show(popup, false);
}
}
return(false);
}
var wikibarColorTool = {
defaultPaletteName : 'default',
defaultColumns : 16,
defaultPalette : [
'#FFF','#DDD','#CCC','#BBB','#AAA','#999','#666','#333','#111','#000','#FC0','#F90','#F60','#F30','#C30','#C03',
'#9C0','#9D0','#9E0','#E90','#D90','#C90','#FC3','#FC6','#F96','#F63','#600','#900','#C00','#F00','#F36','#F03',
'#CF0','#CF3','#330','#660','#990','#CC0','#FF0','#C93','#C63','#300','#933','#C33','#F33','#C36','#F69','#F06',
'#9F0','#CF6','#9C3','#663','#993','#CC3','#FF3','#960','#930','#633','#C66','#F66','#903','#C39','#F6C','#F09',
'#6F0','#9F6','#6C3','#690','#996','#CC6','#FF6','#963','#630','#966','#F99','#F39','#C06','#906','#F3C','#F0C',
'#3F0','#6F3','#390','#6C0','#9F3','#CC9','#FF9','#C96','#C60','#C99','#F9C','#C69','#936','#603','#C09','#303',
'#0C0','#3C0','#360','#693','#9C6','#CF9','#FFC','#FC9','#F93','#FCC','#C9C','#969','#939','#909','#636','#606',
'#060','#3C3','#6C6','#0F0','#3F3','#6F6','#9F9','#CFC','#9CF','#FCF','#F9F','#F6F','#F3F','#F0F','#C6C','#C3C',
'#030','#363','#090','#393','#696','#9C9','#CFF','#39F','#69C','#CCF','#C9F','#96C','#639','#306','#90C','#C0C',
'#0F3','#0C3','#063','#396','#6C9','#9FC','#9CC','#06C','#369','#99F','#99C','#93F','#60C','#609','#C3F','#C0F',
'#0F6','#3F6','#093','#0C6','#3F9','#9FF','#699','#036','#039','#66F','#66C','#669','#309','#93C','#C6F','#90F',
'#0F9','#6F9','#3C6','#096','#6FF','#6CC','#366','#069','#36C','#33F','#33C','#339','#336','#63C','#96F','#60F',
'#0FC','#6FC','#3C9','#3FF','#3CC','#399','#033','#39C','#69F','#00F','#00C','#009','#006','#003','#63F','#30F',
'#0C9','#3FC','#0FF','#0CC','#099','#066','#3CF','#6CF','#09C','#36F','#0CF','#09F','#06F','#03F','#03C','#30C'
],
colorPicker : null,
pickColorHandler: null,
userData: null
};
wikibarColorTool.paletteName = wikibarColorTool.defaultPaletteName;
wikibarColorTool.columns = wikibarColorTool.defaultColumns;
wikibarColorTool.palette = wikibarColorTool.defaultPalette;
wikibarColorTool.onPickColor = function(e){
if (!e){ e = window.event; }
var theCell = resolveTarget(e);
if(!theCell){ return(false); }
color = theCell.bgColor.toLowerCase();
if(!color) { return; }
wikibarColorTool.displayColorPicker(false);
if(wikibarColorTool.pickColorHandler){
wikibarColorTool.pickColorHandler(color, wikibarColorTool.userData);
}
return(false);
};
wikibarColorTool.onMouseOver = function(e){
if (!e){ e = window.event; }
var theButton = resolveTarget(e);
if(!theButton){ return(false); }
if(!wikibarColorTool) { return; }
color = theButton.bgColor.toUpperCase();
if(!color) { return; }
td=document.getElementById('colorPickerInfo');
if(!td) { return; }
td.bgColor = color;
td.innerHTML = '<span style=\"color:#000;\">'+color+'</span> ' +
'<span style=\"color:#fff;\">'+color+'</span>';
e.cancelBubble = true;
if (e.stopPropagation){ e.stopPropagation(); }
return(false);
};
wikibarColorTool.openColorPicker = function(theTarget, pickColorHandler, userData){
wikibarColorTool.skipClickDocumentEvent = true;
wikibarColorTool.pickColorHandler = pickColorHandler;
wikibarColorTool.userData = userData;
wikibarColorTool.moveColorPicker(theTarget);
};
wikibarColorTool.convert3to6HexColor = function(c){
c=c.trim();
var rx=/^\#(\d|[a-f])(\d|[a-f])(\d|[a-f])$/gi;
return (rx.test(c)? c.replace(rx, '#$1$1$2$2$3$3') : c);
};
wikibarColorTool.numToHexColor = function (n){
if(typeof(n)=='number' && (n>=0 && n<=255)) {
s = n.toString(16).toLowerCase();
return ((s.length==1)? '0'+s : s);
}else{
return null;
}
};
wikibarColorTool.renderColorPalette = function(){
if(wikibarColorTool.paletteName==wikibarColorTool.defaultPaletteName){
wikibarColorTool.palette=wikibarColorTool.defaultPalette;
wikibarColorTool.columns=wikibarColorTool.defaultColumns;
return;
}
tiddlerText = (store.getTiddlerText(wikibarColorTool.paletteName, '')).trim();
if(tiddlerText.length<=0) { return; }
var cpContents = tiddlerText.split('\n');
var colors=[];
columns = wikibarColorTool.defaultColumns;
var tmpArray=null;
errCount=0;
for(var i=0; i<cpContents.length; i++){
cpLine=cpContents[i].trim();
if( (!cpLine) || (cpLine.length<=0) || (cpLine.charAt(0) == '#') ){ continue; }
if(cpLine.substring(0,8).toLowerCase()=='columns:'){
tmpArray = cpLine.split(':');
try{
columns = parseInt(tmpArray[1],10);
}catch(ex){
columns = wikibarColorTool.defaultColumns;
}
}else{
tmpArray = cpLine.replace('\t', ' ').split(/[ ]{1,}/);
try{
color='';
for(var j=0; j<3; j++){
c=parseInt(tmpArray[j].trim(), 10);
if(isNaN(c)){
break;
}else{
c=wikibarColorTool.numToHexColor(c);
if(!c) {break;}
color+=c;
}
}
if(color.length==6){
colors.push('#'+color);
} else {
throw 'error';
}
}catch(ex){
}
}
}
if(colors.length>0){
wikibarColorTool.palette = colors;
wikibarColorTool.columns = columns;
}else{
throw 'renderColorPalette(): No color defined in the palette.';
}
};
wikibarColorTool.displayColorPicker = function(visible){
if(wikibarColorTool.colorPicker){
wikibarColorTool.colorPicker.style.display = (visible? 'block' : 'none');
}
};
wikibarColorTool.moveColorPicker = function(theTarget){
if(!wikibarColorTool.colorPicker){
wikibarColorTool.createColorPicker();
}
var cp = wikibarColorTool.colorPicker;
var rootLeft = findPosX(theTarget);
var rootTop = findPosY(theTarget);
var popupLeft = rootLeft;
var popupTop = rootTop;
var popupWidth = cp.offsetWidth;
var winWidth = findWindowWidth();
if(popupLeft + popupWidth > winWidth){
popupLeft = winWidth - popupWidth;
}
cp.style.left = popupLeft + 'px';
cp.style.top = popupTop + 'px';
wikibarColorTool.displayColorPicker(true);
};
wikibarColorTool.createColorPicker = function(unused, palette){
if(palette){ wikibarColorTool.paletteName=palette; }
wikibarColorTool.renderColorPalette();
wikibarColorTool.colorPicker = document.createElement('div');
wikibarColorTool.colorPicker.id = 'colorPicker';
document.body.appendChild(wikibarColorTool.colorPicker);
var theTable = document.createElement('table');
wikibarColorTool.colorPicker.appendChild(theTable);
var theTR = document.createElement('tr');
theTable.appendChild(theTR);
var theTD = document.createElement('td');
theTD.className = 'header';
theTD.colSpan = wikibarColorTool.columns;
theTD.innerHTML = wikibarColorTool.paletteName;
theTR.appendChild(theTD);
for(var i=0; i<wikibarColorTool.palette.length; i++){
if((i%wikibarColorTool.columns)===0){
theTR = document.createElement('tr');
theTable.appendChild(theTR);
}
theTD = document.createElement('td');
theTD.className = 'cell';
theTD.bgColor = wikibarColorTool.convert3to6HexColor(wikibarColorTool.palette[i]);
theTD.onclick = wikibarColorTool.onPickColor;
theTD.onmouseover = wikibarColorTool.onMouseOver;
theTR.appendChild(theTD);
}
rest = wikibarColorTool.palette.length % wikibarColorTool.columns;
if(rest>0){
theTD = document.createElement('td');
theTD.colSpan = wikibarColorTool.columns-rest;
theTD.bgColor = '#000000';
theTR.appendChild(theTD);
}
theTR = document.createElement('tr');
theTable.appendChild(theTR);
theTD = document.createElement('td');
theTD.colSpan = wikibarColorTool.columns;
theTD.id = 'colorPickerInfo';
theTR.appendChild(theTD);
};
wikibarColorTool.onDocumentClick = function(e){
if (!e){ e = window.event; }
if(wikibarColorTool.skipClickDocumentEvent) {
wikibarColorTool.skipClickDocumentEvent = false;
return true;
}
if((!e.eventPhase) || e.eventPhase == Event.BUBBLING_PHASE || e.eventPhase == Event.AT_TARGET){
wikibarColorTool.displayColorPicker(false);
}
return true;
};
function wikibar_doSelectPalette(param){
clearMessage();
var theButton = param.button;
if(!theButton.toolItem.key) { return; }
var palette = theButton.toolItem.key;
var oldPaletteName = wikibarColorTool.paletteName;
if(oldPaletteName != palette){
try{
wikibarColorTool.createColorPicker(theButton, palette);
displayMessage('Palette \"'+palette+'\" ('+ wikibarColorTool.palette.length +' colors) is selected');
}catch(ex){
errMsg = ex;
if(errMsg.substring(0,18)=='renderColorPalette'){
displayMessage('Invalid palette \"' + palette + '\", please check it out!');
wikibarColorTool.createColorPicker(theButton, oldPaletteName);
}
}
}
}
var wikibarPopup = {
skipClickDocumentEvent: false,
stack: []
};
wikibarPopup.resolveRootPopup = function(o){
if(o.isOnMainMenu){ return null; }
if(o.className.substring(0,12)=='wikibarPopup'){ return o;}
return wikibarPopup.resolveRootPopup(o.parentNode);
};
wikibarPopup.create = function(root){
for(var i=0; i<wikibarPopup.stack.length; i++){
var p=wikibarPopup.stack[i];
if(p.root==root){
wikibarPopup.removeFrom(i+1);
return null;
}
}
var rootPopup = wikibarPopup.resolveRootPopup(root);
if(!rootPopup){
wikibarPopup.remove();
}else{
wikibarPopup.removeFromRootPopup(rootPopup);
}
var popup = createTiddlyElement(document.body,'div','wikibarPopup'+root.toolItem.key,'wikibarPopup');
var pop = createTiddlyElement(popup,'table','','');
wikibarPopup.stack.push({rootPopup: rootPopup, root: root, popup: popup});
return pop;
};
wikibarPopup.show = function(unused,slowly){
var curr = wikibarPopup.stack[wikibarPopup.stack.length-1];
var overlayWidth = 1;
var rootLeft, rootTop, rootWidth, rootHeight, popupLeft, popupTop, popupWidth;
if(curr.rootPopup){
rootLeft = findPosX(curr.rootPopup);
rootTop = findPosY(curr.root);
rootWidth = curr.rootPopup.offsetWidth;
popupLeft = rootLeft + rootWidth - overlayWidth;
popupTop = rootTop;
}else{
rootLeft = findPosX(curr.root);
rootTop = findPosY(curr.root);
rootHeight = curr.root.offsetHeight;
popupLeft = rootLeft;
popupTop = rootTop + rootHeight;
}
var winWidth = findWindowWidth();
popupWidth = curr.popup.offsetWidth;
if(popupLeft + popupWidth > winWidth){
popupLeft = rootLeft - popupWidth + overlayWidth;
}
curr.popup.style.left = popupLeft + 'px';
curr.popup.style.top = popupTop + 'px';
curr.popup.style.display = 'block';
addClass(curr.root, 'highlight');
if(config.options.chkAnimate){
anim.startAnimating(new Scroller(curr.popup,slowly));
}else{
window.scrollTo(0,ensureVisible(curr.popup));
}
};
wikibarPopup.remove = function(){
if(wikibarPopup.stack.length > 0){
wikibarPopup.removeFrom(0);
}
};
wikibarPopup.removeFrom = function(from){
for(var t=wikibarPopup.stack.length-1; t>=from; t--){
var p = wikibarPopup.stack[t];
removeClass(p.root,'highlight');
p.popup.parentNode.removeChild(p.popup);
}
wikibarPopup.stack = wikibarPopup.stack.slice(0,from);
};
wikibarPopup.removeFromRootPopup = function(from){
for(var t=0; t<wikibarPopup.stack.length; t++){
var p = wikibarPopup.stack[t];
if(p.rootPopup==from){
wikibarPopup.removeFrom(t);
break;
}
}
};
wikibarPopup.onDocumentClick = function(e){
if (!e){ e = window.event; }
if(wikibarPopup.skipClickDocumentEvent){
wikibarPopup.skipClickDocumentEvent=false;
return true;
}
if((!e.eventPhase) || e.eventPhase == Event.BUBBLING_PHASE || e.eventPhase == Event.AT_TARGET){
wikibarPopup.remove();
}
return true;
};
var wikibarStore = {
TYPE: 'MAIN_MENU',
help:{
TYPE:'MENU',
CAPTION: '<font face=\"verdana\">?</font>',
TOOLTIP: 'about WikiBar',
options:{
TYPE:'MENU',
DYNAITEM: wikibar_genWikibarOptions
},
about:{
TYPE:'MENU',
DYNAITEM: wikibar_genWikibarAbout
}
},
preview:{
TOOLTIP: 'preview this tiddler',
CAPTION: '<font face=\"verdana\">∞</font>',
HANDLER: wikibar_doPreview
},
line:{
TOOLTIP: '<hr>',
CAPTION: '<font face=\"verdana\">—</font>',
syntax: '\n----\n',
HANDLER: wikibar_editFormatByCursor
},
crlf:{
TOOLTIP: 'new line',
CAPTION: '<font face=\"verdana\">¶</font>',
syntax: '\n',
HANDLER: wikibar_editFormatByCursor
},
selectAll:{
TOOLTIP: 'select all',
CAPTION: '<font face=\"verdana\">§</font>',
HANDLER: wikibar_editSelectAll
},
deleteSelected:{
TOOLTIP: 'delete selected',
CAPTION: '<font face=\"verdana\">×</font>',
syntax: '',
HANDLER: wikibar_editFormat
},
textFormat:{
TYPE: 'MENU',
CAPTION: 'text',
TOOLTIP: 'text formatters',
ignore:{
TOOLTIP: 'ignore wiki word',
CAPTION: 'ignore wikiWord',
syntax: '~user_text',
hint: 'wiki_word',
HANDLER: wikibar_editFormatByWord
},
bolder:{
TOOLTIP: 'Текст жирным',
CAPTION: '<strong>жирно</strong>',
syntax: "++user_text++",
hint: 'bold_text',
HANDLER: wikibar_editFormatByWord
},
italic:{
TOOLTIP: 'Текст курсивом',
CAPTION: '<em>курсив</em>',
syntax: '\/\/user_text\/\/',
hint: 'italic_text',
HANDLER: wikibar_editFormatByWord
},
underline:{
TOOLTIP: 'underline text',
CAPTION: '<u>подчеркнуто</u>',
syntax: '__user_text__',
hint: 'underline_text',
HANDLER: wikibar_editFormatByWord
},
strikethrough:{
TOOLTIP: 'strikethrough text',
CAPTION: '<strike>зачеркнуто</strike>',
syntax: '==user_text==',
hint: 'strikethrough_text',
HANDLER: wikibar_editFormatByWord
},
superscript:{
TOOLTIP: 'superscript text',
CAPTION: 'X<sup>верхний индекс</sup>',
syntax: '^^user_text^^',
hint: 'superscript_text',
HANDLER: wikibar_editFormatByWord
},
subscript:{
TOOLTIP: 'subscript text',
CAPTION: 'X<sub>нижний индекс</sub>',
syntax: '~~user_text~~',
hint: 'subscript_text',
HANDLER: wikibar_editFormatByWord
},
comment:{
TOOLTIP: 'comment text',
CAPTION: 'комментарий',
syntax: '/%user_text%/',
hint: 'comment_text',
HANDLER: wikibar_editFormatByWord
},
monospaced:{
TOOLTIP: 'monospaced text',
CAPTION: '<code>моноширинный</code>',
syntax: '{{{user_text}}}',
hint: 'monospaced_text',
HANDLER: wikibar_editFormatByWord
}
},
paragraph:{
TYPE: 'MENU',
TOOLTIP: 'форматирование абзацев',
list:{
TYPE: 'MENU',
TOOLTIP: 'list tools',
bullet:{
TOOLTIP: 'bullet point',
syntax: '*user_text',
hint: 'bullet_text',
HANDLER: wikibar_editFormatByLine
},
numbered:{
TOOLTIP: 'numbered list',
syntax: '#user_text',
hint: 'numbered_text',
HANDLER: wikibar_editFormatByLine
}
},
heading:{
TYPE: 'MENU',
heading1:{
CAPTION:'<h1>Heading 1</h1>',
TOOLTIP: 'Heading 1',
syntax: '!user_text',
hint: 'heading_1',
HANDLER: wikibar_editFormatByLine
},
heading2:{
CAPTION:'<h2>Heading 2<h2>',
TOOLTIP: 'Heading 2',
syntax: '!!user_text',
hint: 'heading_2',
HANDLER: wikibar_editFormatByLine
},
heading3:{
CAPTION:'<h3>Heading 3</h3>',
TOOLTIP: 'Heading 3',
syntax: '!!!user_text',
hint: 'heading_3',
HANDLER: wikibar_editFormatByLine
},
heading4:{
CAPTION:'<h4>Heading 4</h4>',
TOOLTIP: 'Heading 4',
syntax: '!!!!user_text',
hint: 'heading_4',
HANDLER: wikibar_editFormatByLine
},
heading5:{
CAPTION:'<h5>Heading 5</h5>',
TOOLTIP: 'Heading 5',
syntax: '!!!!!user_text',
hint: 'heading_5',
HANDLER: wikibar_editFormatByLine
}
},
comment:{
TYPE: 'MENU',
commentByLine:{
CAPTION:'comment by line',
TOOLTIP: 'line comment',
syntax: '/%user_text%/',
hint: 'comment_text',
HANDLER: wikibar_editFormatByLine
},
commentByBlock:{
CAPTION:'comment by block',
TOOLTIP: 'block comment',
syntax: '/%\nuser_text\n%/',
hint: 'comment_text',
byBlock: true,
HANDLER: wikibar_editFormatByLine
}
},
monospaced:{
TYPE: 'MENU',
monosByLine:{
CAPTION: 'monospaced by line',
TOOLTIP: 'line monospaced',
syntax: '{{{\nuser_text\n}}}',
hint: 'monospaced_text',
HANDLER: wikibar_editFormatByLine
},
monosByBlock:{
CAPTION: 'monospaced by block',
TOOLTIP: 'block monospaced',
syntax: '{{{\nuser_text\n}}}',
hint: 'monospaced_text',
byBlock: true,
HANDLER: wikibar_editFormatByLine
}
},
quote:{
TYPE: 'MENU',
quoteByLine:{
CAPTION: 'quote by line',
TOOLTIP: 'line quote',
syntax: '>user_text',
hint: 'quote_text',
HANDLER: wikibar_editFormatByLine
},
quoteByBlcok:{
CAPTION: 'quote by block',
TOOLTIP: 'block quote',
syntax: '<<<\nuser_text\n<<<',
hint: 'quote_text',
byBlock: true,
HANDLER: wikibar_editFormatByLine
}
},
plugin:{
TYPE: 'MENU',
code:{
CAPTION: 'code area',
TOOLTIP: 'block monospaced for plugin',
syntax: '\n\/\/{{{\nuser_text\n\/\/}}}\n',
hint: 'monospaced_plugin_code',
byBlock: true,
HANDLER: wikibar_editFormatByLine
},
commentByLine:{
CAPTION: 'comment by line',
TOOLTIP: 'line comment',
syntax: '\/\/user_text',
hint: 'plugin_comment',
HANDLER: wikibar_editFormatByLine
},
commentByBlock:{
CAPTION: 'comment by block',
TOOLTIP: 'block comment',
syntax: '\/\***\nuser_text\n***\/',
hint: 'plugin_comment',
byBlock: true,
HANDLER: wikibar_editFormatByLine
}
},
css:{
TYPE: 'MENU',
code:{
CAPTION: 'code area',
TOOLTIP: 'block monospaced for css',
syntax: '\n\nuser_text\n\n',
hint: 'monospaced_css_code',
byBlock: true,
HANDLER: wikibar_editFormatByLine
},
commentByLine:{
CAPTION: 'comment by line',
TOOLTIP: 'line comment',
syntax: '',
hint: 'css_comment',
HANDLER: wikibar_editFormatByLine
},
commentByBlock:{
CAPTION: 'comment by block',
TOOLTIP: 'block comment',
syntax: '',
hint: 'css_comment',
byBlock: true,
HANDLER: wikibar_editFormatByLine
}
}
},
color:{
TYPE: 'MENU',
TOOLTIP: 'color tools',
highlight:{
CAPTION:'highlight text',
TOOLTIP: 'highlight text',
syntax: '@@user_text@@',
hint: 'highlight_text',
HANDLER: wikibar_editFormatByWord
},
color:{
CAPTION:'text color',
TOOLTIP: 'text color',
hint: 'your_text',
syntax: '@@color(%1):user_text@@',
HANDLER: wikibar_getColorCode,
doMore: wikibar_editFormatByWord
},
bgcolor:{
CAPTION:'background color',
TOOLTIP: 'background color',
hint: 'your_text',
syntax: '@@bgcolor(%1):user_text@@',
HANDLER: wikibar_getColorCode,
doMore: wikibar_editFormatByWord
},
colorcode:{
CAPTION:'color code',
TOOLTIP: 'insert color code',
syntax: '%1',
HANDLER: wikibar_getColorCode,
doMore: wikibar_editFormatByCursor
},
'color palette':{
TYPE:'MENU',
DYNAITEM: wikibar_genPaletteSelector,
SEPERATOR:{},
morePalette:{
CAPTION:'more palettes',
TOOLTIP:'get more palettes',
HANDLER: wikibar_getMorePalette
}
}
},
link:{
TYPE: 'MENU',
TOOLTIP: 'insert link',
wiki:{
CAPTION:'wiki link',
TOOLTIP: 'wiki link',
syntax: '[[user_text]]',
hint: 'wiki_word',
HANDLER: wikibar_editFormatByWord
},
pretty:{
CAPTION: 'pretty link',
TOOLTIP: 'pretty link',
syntax: '[[user_text|%1]]',
hint: 'pretty_word',
param: 'PrettyLink Target',
HANDLER: wikibar_getLinkUrl,
doMore: wikibar_editFormatByWord
},
url:{
TOOLTIP: 'url link',
syntax: '[[user_text|%1]]',
hint: 'your_text',
param: 'http:\/\/...',
HANDLER: wikibar_getLinkUrl,
doMore: wikibar_editFormatByWord
},
image:{
TOOLTIP: 'image link',
syntax: '[img[user_text|%1]]',
hint: 'alt_text',
param: 'image/icon.jpg',
HANDLER: wikibar_getLinkUrl,
doMore: wikibar_editFormatByWord
}
},
macro:{},
more:{
TYPE: 'MENU',
TOOLTIP: 'more tools',
table:{
TYPE: 'MENU',
TOOLTIP: 'table',
table:{
CAPTION:'create table',
TOOLTIP: 'create a new table',
syntax: '\n%1\n',
HANDLER: wikibar_getTableRowCol,
doMore: wikibar_editFormatByWord
},
header:{
TOOLTIP: 'table header text',
syntax: '|user_text|c',
hint: 'table_header',
HANDLER: wikibar_editFormatByWord
},
cell:{
TOOLTIP: 'create a tabel cell',
syntax: '|user_text|',
hint: 'your_text',
HANDLER: wikibar_editFormatByWord
},
columnHeader:{
CAPTION:'column header',
TOOLTIP: 'create a column header cell',
syntax: '|!user_text|',
hint: 'column_header',
HANDLER: wikibar_editFormatByWord
},
cell:{
TYPE: 'MENU',
CAPTION: 'cell options',
bgcolor:{
CAPTION: 'background color',
TOOLTIP: 'cell bgcolor',
syntax: '|bgcolor(%1):user_text|',
hint: 'your_text',
HANDLER: wikibar_getColorCode,
doMore: wikibar_editFormatByTableCell
},
alignLeft:{
CAPTION: 'align left',
TOOLTIP: 'left align cell text',
syntax: '|user_text|',
hint: 'your_text',
HANDLER: wikibar_editFormatByTableCell
},
alignCenter:{
CAPTION: 'align center',
TOOLTIP: 'center align cell text',
syntax: '| user_text |',
hint: 'your_text',
HANDLER: wikibar_editFormatByTableCell
},
alignRight:{
CAPTION: 'align right',
TOOLTIP: 'right align cell text',
syntax: '| user_text|',
hint: 'your_text',
HANDLER: wikibar_editFormatByTableCell
}
}
},
html:{
TYPE: 'MENU',
html:{
CAPTION: '<html>',
TOOLTIP: 'html tag',
syntax: '<html>\nuser_text\n</html>',
hint: 'html_content',
byBlock: true,
HANDLER: wikibar_editFormatByLine
}
}
},
addon:{
TYPE: 'MENU',
TOOLTIP:'3rd party tools',
'about addons':{
TOOLTIP: 'list loaded addons',
HANDLER: wikibar_doListAddons
},
SEPERATOR:{}
}
};
addEvent(document, 'click', wikibarColorTool.onDocumentClick);
addEvent(document, 'click', wikibarPopup.onDocumentClick);
wikibar_install();
//}}}
* святая сила 3 категории
* обладает свойством проводимости, более сильной, чем металл. Конечно же не может проводить силы противополжного полюса [[инферно]] (и близких к нему, хотя [[мрак]] еще можно провести через канал angelus)
/***
|''Name:''|diceRoller|
|''Version:''|0.5.0|
|''Author:''|Daniel Baird (DanielBaird@gmail.com)|
|''Source:''|http://danielbaird.com/tiddlywinks/|
|''Type:''|Plugin|
!Description
{{{<<dice>>}}} for 3d6
{{{<<dice }}}//{{{specifier}}}//{{{ [}}}//{{{options}}}//{{{]>>}}} where specifier is something like 3d6, 1d4+1, 2d10-5
{{{<<dice fudge [}}}//{{{options}}}//{{{]>>}}} will roll 3 fudge dice (a fudge die gives -1, 0, or +1)
options can be zero or more of the following:
* show:eachface
** shows the face of each die rolled, then the total (not yet implemented)
* show:eachroll
** shows the number on each die rolled, then the total (default)
* show:result
** shows just the total result of the roll
* initialroll:yes
** do a roll when initially displayed
* initialroll:no
** don't roll until the user says so (default)
* rollby:click
** user clicks anywhere on the diceroller area to roll
* rollby:link
** user clicks an underlined link to roll (default)
* rollby:button
** user clicks a button to roll
!Examples
{{{<<dice>>}}}
<<dice>>
{{{<<dice 3d6+2 rollby:button>>}}}
<<dice 3d6+2 rollby:button>>
{{{<<dice fudge initialroll:yes rollby:click>>}}}
<<dice fudge initialroll:yes rollby:click>>
!Code
***/
//{{{
version.extensions.dice = {major: 0, minor: 5, revision: 0};
config.macros.dice = {};
config.macros.dice.handler = function(place,macroName,params) {
var rolldesc = params[0];
if (rolldesc == undefined) rolldesc = '3d6';
var options = '';
if (params.length > 1) {
params.shift();
options = params.join(' ');
}
var thisDiceRoller = new DiceRoller();
createTiddlyElement(place, 'div', thisDiceRoller.id, null, 'If you see this, DiceRoller is broken. Let Daniel know (DanielBaird at gmail dot com).');
thisDiceRoller.newDice(rolldesc, options);
}
// =======================================================================
function DiceRoller() {
this.idprefix = 'dice';
this.version = '0.5 beta';
this.id = this.idprefix + DiceRoller.prototype.nextid;
DiceRoller.prototype.nextid++;
return this;
}
// -----------------------------------------------------------------------
DiceRoller.prototype.nextid = 0;
// -----------------------------------------------------------------------
DiceRoller.prototype.newDice = function(rolldesc, options) {
this.error = null;
this.initialroll = false;
this.display = 'eachroll';
this.rolltag = 'roll';
this.rollagaintag = 'roll again';
this.rollby = 'link';
this.parseDesc(rolldesc);
this.parseOpts(options);
if (this.initialroll) this.rollDice();
this.drawRoller();
// ^^^^^^^^^^^^^ new stuff above.. ^^^^^^^^^^^^^
// this.rolls = rolls;
// this.resultDisplay = 'dice';
// if (resultDisplay != null) this.resultDisplay = resultDisplay;
// this.resultSystem = 'sum';
// if (resultSystem != null) this.resultSystem = resultSystem;
// this.sides = 6;
// this.createDice();
// this.roll();
}
// -----------------------------------------------------------------------
DiceRoller.prototype.parseDesc = function(desc) {
this.rollstr = desc;
desc = desc.toLowerCase();
this.dicetype = 'standard';
this.adjuster = null;
if (desc == 'fudge') {
// 'fudge' system: 3d3, where the d3 gives -1, 0 or +1
this.dicetype = 'fudge';
this.dicesides = 3;
this.rollcount = 3;
} else {
// normal system: eg 3d6+2
var reg = /(\d+)d(\d+)(\+(\d+)|-(\d+))?/;
var info = desc.match(reg);
this.rollcount = parseInt(info[1]);
this.dicesides = parseInt(info[2]);
this.adjuster = parseInt(info[3]);
if ( isNaN(this.adjuster) ) this.adjuster = 0;
}
}
// -----------------------------------------------------------------------
DiceRoller.prototype.parseOpts = function(options) {
this.optstr = options;
options = ' ' + options + ' ';
if (options.indexOf(' show:eachface ') != -1) this.display = 'eachface';
if (options.indexOf(' show:eachroll ') != -1) this.display = 'eachroll';
if (options.indexOf(' show:result ') != -1) this.display = 'result';
if (options.indexOf(' initialroll:yes ') != -1) this.initialroll = true;
if (options.indexOf(' initialroll:no ') != -1) this.initialroll = false;
if (options.indexOf(' rollby:click ') != -1) this.rollby = 'click';
if (options.indexOf(' rollby:link ') != -1) this.rollby = 'link';
if (options.indexOf(' rollby:button ') != -1) this.rollby = 'button';
}
// -----------------------------------------------------------------------
DiceRoller.prototype.createDice = function() {
this.results = new Array(this.rolls);
this.result = 0;
this.showDice();
}
// -----------------------------------------------------------------------
DiceRoller.prototype.drawRoller = function() {
var node = document.getElementById(this.id);
if (this.display == 'eachface') node.innerHTML = this.drawRollerEachFace();
if (this.display == 'eachroll') node.innerHTML = this.drawRollerEachRoll();
if (this.display == 'result') node.innerHTML = this.drawRollerResult();
// getClickHandler() is a function that returns a function.. JS is sweet huh
if (this.rollby == 'click') {
node.onclick = this.getClickHandler();
} else {
document.getElementById(this.id + '_roll').onclick = this.getClickHandler();
}
/*
var html = '';
if (this.display == 'eachface')
html += '<table class="diceroller">';
html += '<tr>';
if (this.resultDisplay == 'text') {
html.push('<td>You rolled ');
}
if (this.resultDisplay != 'textsummary') {
var separator = '';
for (var roll = 0; roll < this.rolls; roll++) {
html.push( separator + this.drawDie(roll) );
if (this.resultDisplay == 'text') separator = ', ';
}
html.push('<td>');
}
if (this.resultSystem == 'fudge') {
var resprefix = '';
if (this.result > 0) resprefix = '+';
html.push('Result is ' + resprefix + this.result + '.<br />Click to roll again.</td>');
} else {
html.push('<td>'+this.rolls+'d'+this.sides+': you rolled ' + this.result + '.<br />Click to roll again.</td>');
}
html += '</tr></table>';
node.innerHTML = html;
*/
}
// -----------------------------------------------------------------------
DiceRoller.prototype.drawRollerResult = function() {
var str = '';
str += 'Rolling';
str += ((this.dicetype == 'fudge')?(':'):(' ' + this.rollstr + ':'));
if (this.result != undefined) {
str += 'You rolled <strong>';
str += ((this.dicetype == 'fudge')?(this.addSign(this.result)):(this.result));
str += '</strong>.';
}
str += this.makeRollTrigger();
return str;
}
// -----------------------------------------------------------------------
DiceRoller.prototype.drawRollerEachRoll = function() {
var str = '';
str += 'Rolling';
str += ((this.dicetype == 'fudge')?(':'):(' ' + this.rollstr + ':'));
if (this.result != undefined) {
str += ' You rolled ';
var joiner = '';
for (var r = 0; r < this.rollcount; r++) {
str += joiner + ((this.dicetype == 'fudge')?(this.addSign(this.results[r])):(this.results[r]));
joiner = ', ';
}
str += ' totalling <strong>';
str += ((this.dicetype == 'fudge')?(this.addSign(this.result)):(this.result));
str += '</strong>.';
}
str += this.makeRollTrigger();
return str;
}
// -----------------------------------------------------------------------
DiceRoller.prototype.addSign = function(num) {
return ( ((parseInt(num) > 0)?('+'):('')) + (num) );
}
// -----------------------------------------------------------------------
DiceRoller.prototype.makeRollTrigger = function() {
var tag = ((this.result == undefined)?(this.rolltag):(this.rollagaintag));
if (this.rollby == 'click') return ' Click to ' + tag + '.';
if (this.rollby == 'link') return ' <a style="text-decoration: underline" href="#" id="' + this.id + '_roll">' + tag + '</a>';
if (this.rollby == 'button') return ' <button id="' + this.id + '_roll">' + tag + '</button>';
}
// -----------------------------------------------------------------------
DiceRoller.prototype.drawDie = function(roll) {
var html = new Array();
if (this.resultDisplay == 'text') {
if (this.resultSystem == 'fudge' && this.results[roll] > 0) html.push('+');
html.push(this.results[roll]);
} else {
html.push('<td class="die">');
//there are seven possible dot positions
var dots = Array();
for (var dot = 0; dot < 7; dot++) {
dots.push(' ');
}
if ( this.results[roll] ) {
if (this.results[roll] > 1) dots[0] = 'O';
if (this.results[roll] > 3) dots[1] = 'O';
if (this.results[roll] == 6) dots[2] = 'O';
if (this.results[roll]%2 == 1) dots[3] = 'O';
if (this.results[roll] == 6) dots[4] = 'O';
if (this.results[roll] > 3) dots[5] = 'O';
if (this.results[roll] > 1) dots[6] = 'O';
}
var pipe = '|';
var space = ' ';
if (this.resultDisplay == 'dice') {
html.push(',-----.<br />');
html.push(pipe + space + dots[0] + space + dots[1] + space + pipe + '<br />');
html.push(pipe + space + dots[2] + dots[3] + dots[4] + space + pipe + '<br />');
html.push(pipe + space + dots[5] + space + dots[6] + space + pipe + '<br />');
html.push('`-----\'<br />');
} else if (this.resultDisplay == 'compact') {
html.push(dots[0] + space + dots[1] + '<br />');
html.push(dots[2] + dots[3] + dots[4] + '<br />');
html.push(dots[5] + space + dots[6] + '<br />');
}
html.push('</td>');
}
return html.join('');
}
// -------------------------------------------------------------------
DiceRoller.prototype.rollDice = function() {
this.result = this.adjuster;
this.results = new Array(this.rollcount);
for (var roll = 0; roll < this.rollcount; roll++) {
this.results[roll] = Math.floor((this.dicesides)*Math.random())+1;
if (this.dicetype == 'fudge') {
this.results[roll] -= 2;
}
this.result += this.results[roll];
}
this.drawRoller();
}
// -----------------------------------------------------------------------
DiceRoller.prototype.getClickHandler = function() {
// trickey bit.. first make a local var that references the
// current dice roller object, then return an anonymous function
// that calls that object's roll() method. woot for closures!
var thisroller = this;
return function(e) {
thisroller.rollDice();
return false;
};
}
// =======================================================================
setStylesheet(
".viewer table.diceroller, .viewer table.diceroller tr { "+
"border: none;" +
"} \n"+
".viewer table.diceroller tr td { "+
"border: none; " +
"} \n"+
".viewer table.diceroller td.die { "+
"padding: 0.5em; " +
"font-family: monospace; " +
"line-height: 0.95em; " +
"} \n"+
"",
"DiceRoller");
//}}}
----
Носитель гравити - любой объект, имеющий массу.
носитель силы гравити - ?
* Универсальный и читерский описатель. Реально он 18 ранга и относится к драконьму словарю, но для меня - он 1 ранга :)
IT описывает любой неодушевленный объект.
А не надо было мастеру спорить со мной, утверждая, что //the// является неопределенным артиклем. :)
Основной образ: Gravity, притяжение.
Не только тяжесть, есть нюансы. Физическое отображение силы порядка.
@@Понятия «порядок» нет. Весь истинный язык – и есть порядок. Планетари – наиболее явственное проявление понятия порядка в физическом мире.@@ -- противоречие Звезде Сил.
/***
|''Name:''|saveAndReloadPlugin|
|''Version:''|1.0.1 (11-Oct-2005)|
|''Author:''|SimonBaird|
|''Type:''|Plugin|
|''Description''|Save and Reload - add macros {{{ <<saveAndReload>> }}} anywhere.|
!Code
***/
//{{{
config.macros.saveAndReload = {};
config.macros.saveAndReload.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{
var label = params[0]||"Save & Reload";
var tooltip = params[1]||"Save & reload";
createTiddlyButton(place,label,tooltip,this.onclick);
}
config.macros.saveAndReload.onclick = function()
{
saveChanges();
window.location.reload( false );
}
//}}}
* противополжна планетари
* это сила, которая прижимает к земле тучи
* силовой вектор: гравитация
* Subgravity - сила тяготения, существующая без наличия материи. Это сила расширения мироздания по умолчанию.
Rain Skylark: Скажем так: при помощи ИР можно решить любую задачу, которую можно решить при помощи магии :) Если при помощи ИР её решить нельзя - при помощи магии эту задачу решать не нужно (бесполезно, вредно, дорого, неэффективно итд). :)
Void Dragon: А какую задачу нельзя решить в ИР?
Rain Skylark: В моем сеттинге - внутримировой (внутрипространственный) телепорт и резуррект.
Rain Skylark: Нет, то есть телепортнуться можно, но очень уж дорого по мане. Ножками быстрее :)
Rain Skylark: И резурректнуть можно, но... криво и неправильно. Без возврата монады (Искры) в тело. Потому что Искра неподвластна магии в принципе (если только божественной).
{{{
(Пыль на я) направить_от_я
}}}
++Общая схема:++
{{{
если А C
или то или
если B D
}}}
++Пример:++
{{{
скрепить
(
если носитель заклинания создать*spell крест на заклинание я
или
если ИМД создать*spell крест на заклинание я
)
&
(
то направить*spell назад [то] заклинание
или
то создать*spell крест на [то] заклинание
)
}}}
Или:
{{{
скрепить:
(
если (ИМД или носитель заклинания) создать*spell крест [на] заклинание я
или
если (ИМД или носитель заклинания) направить*spell назад заклинание я
) & (
то направить назад...
или
создать крест)
}}}
Премерзкая составляющая жизни практически любого волшебника.
Когда нарушается истечение сил и каналы подключения к планарам истончаются, возникает обратный эффект вытесняющего сознания.
Сила сознания становится слишком велика по сравнению с истончающимися каналами и сила волшебника начинает вытесняться в планары. Впрочем, мне ЭТО НЕ ГРОЗИТ. Ключ предохраняет.
P.S. «Перегорел на работе» - это для волшебников очень актуально.
//Артанис придумал и реализовал на практике (практиком поработал волшебник Альберт) способ лечения этой болезни. Основная идея – переподключение заболевшего ко всем планарам… переподключить по каждому планару последовательно не получится (за конечное время), и был избран способ переместиться в пространство между планарами. Артанис назвал это место [[Радужное пространство]]. Для перемещения туда был использован Ключ Волшебства, активированный в режиме колебания [[Струны Сил|Струна Сил]] до состояния «раскрытие радужного пространства» (когда вихрь сил вырвался за пределы пространства ключа, вытеснив Артаниса из пространства).//
{{{
вложить заклинание:
когда рука я на носитель заклинания
тогда создать *$p:planetary движение [чего] ($t:носителя заклинания) $d:мыслью
в носитель заклинания дотехпор
}}}
$p: указывает на силу
$d: указывает на направляющую
$t: указывает на объект
{{{
скрепить:
(
пока (носитель заклинания в рука носитель жизнь) (закрыть пламя вокруг носитель заклинания)
)
&
(
(создать *огонь тамгде носитель на носитель сила:росток) в носитель заклинания дотехпор
)
}}}
Представляю ниже заклинание, создающее портал в Слой Тени, позволяющий заглянуть в него.
Меры предосторожности:
1. Двойная гептаграмма Ааримов.
2. Живая птица Феникс (должен присутствовать при ритуале)
3. ШУМЕТЬ НЕЛЬЗЯ – ни единого звука или шума.
Далее идет текст заклятия.
Феникс, как существо, зацикленное во времени (возрождающееся из пламени), служит маяком для нацеливания на Слой Тени, на структурный хаос Слоя Тени.
* [[Новонайденные слова]]
Type the text for 'New Tiddler'
[[Ааримы]] – легендарный народ, живший до Кровавого Шторма. Судя по некоторым данным, обладали высокими технологиями. Так, известен «[[Маяк Ааримов]]» или «Поющий камень», служащий маяком для их кораблей. Известны два места поселения Ааримов – Звездный Град (на его руинах эльфы построили свой Город Звезд) и затонувший город, над которым Эдмунд построил Твердыню.
При рисовании двойной гептаграммы Ааримов порождается специфическая картина сил внутри.
Двойная гептаграмма ааримов позволяет перемещаться в потоке времени в произвольном направлении.
? [[Люди неба]]
!!! Ядра:
++Зеленый свет: ++
{{{
скрепить (создать^свет)(создать^свет) в заклинание создать^свет
}}}
++Красный свет:++
{{{
скрепить (создать^*сила свет()(создать^(сила свет))в заклинание создать^(сила свет)
}}}
++Белый свет:++
{{{
создать^свет
}}}
Свет вокруг носителя девайса:
{{{
создать заклинание:
пока (рука человек на носитель заклинания)
(ЯДРО вокруг носитель сила в рука человек)
на носитель сила в рука человек.
}}}
Световой клинок:
{{{
создать заклинание:
(
пока
(рука человек на носитель заклинания)
(клинок создать^светом{!} вдоль (носитель заклинания в рука человек))
до тех пор
)
вложить в (носитель:(сила разрушить)(движение через воздух) в рука человек)
}}}
Или вместо светом (метка {!}) - скрепить (...), все что дает другой цвет.
Данное заклинание, обозванное Эдмундом в шутку «волшебный пендель», предназначено для перемещения на небольшие расстояния (в прямой видимости).
@@Внимание: ОСТЕРЕГАТЬСЯ ВСТРЕЧНЫХ ПРЕДМЕТОВ ПО ПРЯМОЙ – РАЗМАЖЕТ.@@
* {{{взрыв импложн вихрь разрушить силой:скрепить(пламя+свят)}}} -- использовали против некроголема;
----
{{{
скрепить
(сила пламя тамгде рука я)
(закрыть пламя вокруг рука я)
}}}
Защита от огня на руке. Важно: если тамгде заменить на вокруг, то есть вокруг будет в обеих ядрах - ядра взаимно нейтрализуются, заклинание работать не будет.
----
Protection from fire:
{{{
скрепить
(сила росток тамгде пламя)
заклинание скрепить:
скрепить с сила пламя тамгде носитель сила росток
заклинание: закрыть пламя вокруг рука я
)
}}}
Не помню, правда, зачем тут я сказал "росток". Дрова в костре что ли хотел описать? Кстати, ++корректнее++ здесь работать не с сила пламя, а с силой огонь (или искра). Так будет идти привязка по силам к тому, что порождает пламя, а не к тому, от ЧЕГО мы защищаемся.
Огонь костра - применимо к костру. Пламя - это огненные заклинания
----
{{{закрыть точка пламя вокруг рука я}}} -- потушит костер
----
{{{
разность
разности огня [и] всполоха
разности снежинки [и] льда
}}}
замеряет разность скоростей преобразования стихий.
----
{{{
создать *(свет) глаз я направить*мысль
}}}
управляемый мыслью кошачий глаз, но в полной темноте не видит.
? Если сказать *"сила свет" - будет ли видеть в темноте?
----
запрет возгорания поверхности на девайс:
{{{
создать место силы: (заклинания: (создать храм заклинания:(закрыть пламя везде) $d:во-все-стороны))
вокруг носитель заклинания
}}}
и
{{{
создать *сила:вода крест везде тамгде сила пламени создать сила огонь
}}}
----
{{{
(создать $p:(точка пламя) сердце)
изъять $p:SPELL силу вложить в
(создать $p:SPELL носитель: (сердце $p:пламени) дотехпор)
создать $p:"точка пламя" сердце [1]
изъять разностью силы пламени ([между] [1] & [2])
вложить $p:SPELL
в
создать $p:SPELL носитель сила: (сердце $p:"точки пламени") [2]
дотехпор
}}}
----
{{{
создать *planetary движение тела существа направить посолонь $d:мысль
}}}
----
++Feather fall:++
{{{
создать *planetary крест на движение противосолонь тела существа
}}}
----
контролируемое закрытие заклинания
{{{
скрепить
(заклинание=[1])
&
(создать заклинание:
скрепить (с сила жизнь в существо)
(заклинание:
когда существо создать слово "финита ля комедиа"
тогда закрыть заклинание [1] на существо)
) дотехпор
}}}
----
"остановка земляной трещины"
{{{
скрепить камень
&
сила *пыль
тамгде, заклинание разрушить *(сила пыль) камень
}}}
----
{{{
скрепить (создать mind вокруг я образ:"вихрь мрак")
(если ИМД разрушить заклинание я
то создать*mind вокруг я образ:"вихрь мрак")
дотехпор
}}}
----
"фиксация духовных параметров"
{{{
скрепить я
сила я
в я
дотехпор
}}}
----
"энчант - артефакт майнд коннект"
{{{
создать *сила:mind
направить сквозь mind
мысль я
в носитель мысль, пока
рука я на носитель заклинания
}}}
защита:
{{{
если имд разрушить э/ч я
если имд разрушить *силой:spell мысль в я
то скрепить (разрушить *spell <то> заклинание)
(закрыть заклинание я)
}}}
----
{{{
пока (вокруг я закрутить*сила:магия воздух)
(направить *сила:магия заклинание [от] я сквозь вихрь)
}}}
перенаправление заклинаний от я через вихрь воздуха вокруг я, созданный магией.
----
++Casting troubles++: (ядро там где ядро)
{{{
(вихрь создать *магия) тамгде (ИМД)
}}}
----
{{{
когда
имд направить на я (сила:разрушить *магия)
тогда
создать*spell крест на то заклинание
}}}
абстрактный дефлект вражеского заклинания
----
{{{ вихрь закрутить*магия тамгде (сила:магия в ИМД) }}}
магический шок. Не будет работать против магов с высоким spellpower.
----
поездка через слой Бури на флаере:
{{{
направить вовсестороны заклинание: скрепить в пирамиду
(
(скрепить (мысль:Литар)(сердце буря))
(направить объект[флаер] стрелой сквозь слой буря силой мысли:Литар)
(скрепить объект[флаер] c сила буря)
(создать вовсестороны храм слоя буря)
(создать заклинание вокруг:скрпить*сила:лайтнинг (тело человек[пассажиры])(сила слоя буря)
)
}}}
----
Энчант на топоре бешеной няки: +ПС vs металл (см. выделенное ядро)
{{{
когда носитель:заклинания движение через металл
тогда ++разрушить силу металла++ вокруг носитель заклинания
}}}
----
жестокая защитка от псиоников магией.
{{{
когда имеющийдар направить мысль на ты
тогда закрыть мысль имеющийдар
}}}
----
{{{
создать место силы храма слоя свят
}}}
{{{
скрепить в пирамиду
{
когда носитель носителя заклинания создать слово "активатор"
тогда [активное ядро A]
дотехпор, пока:
когда носитель носителя заклинания создать слово "деактиватор"
тогда закрыть заклинание [A]
} *4 (4 таких ядра с разными активаторами и активными ядрами)
дотехпор
если человек создать движение:носитель заклинание через воздух
то
когда человек создать слово "дисмисс"
тогда разрушить носитель.
}}}
"Активное ядро А" - некое ядро, создающее произвольный эффект по слову-активатору.
Последнее ядро обеспечивает самоуничтожение магического устройства: для этого его нужно выкинуть и приказать "дисмисс".
! Волшебник Шнаппи, Суровая Империя, 4 сезон
{{{
создать *пламя шар тамгде заклинание: ($d:мысль стрелой *пламенем толчок в существо) разрушить существо
}}}
судя по всему одно из ядер для чего-то тяжелого, см ниже.
----
{{{
скрепить (разрушить стрелой кли-поле существо)[A] (создать заклинание:(направить сила жизнь в существо в я) тамгде (заклинание:[A] разрушить существо)
}}}
simple drain life;
----
{{{
направить стрелой заклинание: создать сон тамгде существо
}}}
(16);
----
{{{
(направить мыслью толчок стрелой дуновение)[1]: (создать сон тамгде заклинание[1] разрушить) в существо
}}}
-- СОН с пробоем по астралу. Используется прием [[Puncture]] - одной стихией продавливаем оболочку цели (астральную), потом добиваем сном.
----
{{{
(направить мыслью толчок стрелой mind)[1]: (создать сон тамгде заклинание[1] разрушить) в существо
}}}
СОН с пробоем по менталу. Менее эффективная версия предыдущего заклинания. Зато, вероятно, работает лучше на более бодрых (мыслящих) людей.
----
++Enchant++ :
{{{
(создать поток свет) тамгде (заклинание[энчант] разрушить *spell существо)
}}}
-- энчант на иголку: тыкаем - светится если уколотый - [[существо]]. Зачем? Нежить детектировать, всяких железных зомби, неотличимых от людей и дневных вампиров -- [[undead]] -- НЕ существо!
----
{{{
$d:мысль : (толчок стрелой пламени)[A] (создать шар пламени тамгде заклинание-А разрушить человек) в человек
}}}
-- неявное связывание + puncture-техника. Каноническая форма! Здесь используется техническая пометка одной из частей заклинания. Такие пометки будут встречаться часто.
----
{{{
$d:мыслью $w:движение $f:стрела *($f:горн: $p:дерева) $w:знак
}}}
-- Стрела Древа. Заклинание целиком на новых "лесных" словах.
----
{{{
создать поток заклинания $d:мыслью : разрушить *spell заклинание
}}}
управляемый поток диспелла.
----
{{{
закрыть вездетамгдеесть я (сила разность( сила металл) (сила металл)) дотехпор
}}}
-- защита от лайтнинга, производимого электролитическим плевком;
----
{{{
создать !смерть направить молния существо
}}}
дешевый килл
----
{{{
если жизнь в существо то создать свет тамгде существо
}}}
-- детект лайф
----
{{{
если ИМД вокруг я то создать свет тамгде ИМД
}}}
детект магов
----
{{{
создать *сила (скрепить (пламя глубина аэрус хаос) в пирамида) волна направить *мысль дотехпор
}}}
Злобная волна.
* дамаг огнем и хаосом по астральной оболочке, не сжигая воздух
** аэрус способен создавать кислород в воздухе. При этом стихия воздух - это просто ВОЗДУХ как атмосферный газ.
*** @@[EXP]@@ Аэфилус крайне нужен - заклинание не сожгло воздух в области действия. При этом "волна" (инстантное) с "дотехпор" (континуос) не применяется, поэтому в данном случае "дотехпор" влияет на "направить *мысль", позволяя очертить конкретно область действия.
----
Может ли служить направляющая "мысль" эффективнее базовой направляющей "направить". проверим:
{{{
поток создать *огонь течение ?мысль дотехпор
}}}
@@может!@@ Но мы получаем КРАЙНЕ интересный эффект:
@@[EXP]@@ возникает поток огня, который проявлен и управляется, пока мы о нем помним. Как только мы про него "забываем", поток исчезает, но заклинание действует и мана течет. Таким образом направляющая "мысль" формирует заклинание, проявляющее эффект при сосредоточении на нем.
----
{{{
создать *(скрепить пламя аэфилус) посолонь закрутить вихрь ?мысль дотехпор
}}}
выжигалка... не для ядерных реакторов
----
{{{
поток создать *стужа течение ?мысль дотехпор
}}}
-- охлаждалка
----
{{{
поток создать *(смерть глубина) течение направить сила мысль дотехпор
}}}
поток смерти
----
{{{ течение стрела }}} -- @@[EXP]@@ - медленное движение
----
{{{
(27) создать глаз направить через пространство
(95) направить течение стрела *мысль заклинание создать *(аэрус всполох хаос глубина) пирамида взрыв вихрь
}}}
-- "Мина"
----
{{{
создать *сила ментал храм заклинания: скрепить: (создать крест планетари везде тамгде заклинание я)+(создать *аэфилус движение я и ты)
}}}
-- Fly, 90 (длительность порядка 90 секунд, масса около 90кг)
----
{{{
создать *сила ментал храм заклинание: скрепить (создать крест планетари везде тамгде заклинание) + (создать *аэфилус движение it) дотехпор
}}}
HFT, эффективность поряда полутора центнеров., (93)
----
{{{
скрепить (глаз животное) с (сила свет) дотехпор
скрепить (глаз человека) с (сила свет) дотехпор
}}}
Повысить фотовосприятие глаза (23), эфф 23 - длительность 23 минут
----
{{{
изъять (сила всполох из храм (точка всполох)) вложить сила в (заклинание создать взрыв *всполох там)
}}}
Уничтожение аннигиляционного реактора танка Альянса энергией самого реактора, 115. сделано по мотивам "кокоса Рэндальфа". Интердикция реактора.
----
{{{
изъять жизнь направить $f:молния существо
}}}
быстрый килл
----
{{{
создать *смерть направить $f:молния существо
}}}
еще быстрее
* {{{}}}
* {{{}}}
Закрыть можно силу или объект, выраженный через силу;
[img[true_speech/balance_xlarge_transparent.png]]
!! Элементальные (стихиальные) силы
{{width100{
| [[искра]] | [[огонь]] | [[пламя]] | [[всполох]] |
| [[пыль]] | [[земля]] | [[камень]] | [[скала]] |
| [[ручей]] | [[вода]] | [[река]] | [[море]] |
| [[ветер]] | [[воздух]] | [[буря]] | [[ураган]] |
| [[росток]] | [[дерево]] | [[лес]] | [[флора]] |
| [[руда]] | [[металл]] | [[сплав]] | [[дух металла]] |
| [[снежинка]] | [[холод]] | [[лед]] | [[стужа]] |
| [[planetary]] | [[gravity]] | [[subgravity]] | [[black hole]] |
| [[sky]] | [[stratos]] | [[aerus]] | [[aefilus]] |
}}}
!! Внешние силы
{{width100{
| [[свет]] | [[благость]] | [[свят]] | [[angelus]] |
| [[жизнь]] | [[дуновение]] | [[астрал]] | [[глубина]] |
| | [[пространство]] | [[точка]] |
| | [[stasis]] | [[время]] | |
| | [[порядок]] | [[хаос]] | |
| [[мрак]] | [[инферно]] | [[ад]] | [[diabolus]] |
| [[смерть]] | [[мысль]] | [[ментал]] | [[подсознание]] |
}}}
!! Особые (комплексные) силы
{{width100{
| [[магия]] | [[заклинание]] | | |
| [[тень (теневой слой)]] | [[серая мгла (grayhaze)]] | [[prime]] | [[starlight]] |
| [[force]] | | |
}}}
----
* "Игла" - непонятно куда делась сила Холод I категории. Слабое и множественное проявление. Колючий.
//
— Скажи мне только одно, если это не секрет: какие еще великие силы есть в мире, кроме света?
— Это вовсе не тайна. Все силы имеют один источник и один конец. Годы и расстояния, звезды и свечи, вода и ветер, волшебство и мастерство человеческих рук, мудрость, заключенная в корнях дерева, — все это возникает одновременно. Мое имя и твое, подлинные имена солнца, ручья, не рожденного еще младенца — все это лишь звуки одного великого слова, которое очень-очень медленно выговаривает сиянием звезд Вселенная. Никакой другой энергии не существует. И другого имени у всего этого — тоже.
//
* [[Старый калькулятор заклинаний|http://restar.gorodok.net/calc/tscalc.local.html]]
* стандартная длительность иллюзии - 1 минута / 1 эффективности (маны). Если иллюзию трогают - длительность уменьшается в 4 раза. Это правило действует для иллюзий на базе слова [[образ]].
* Изучение волшебных книг: (число страниц*6 / интеллект) часов.
... Произошел всплеск силы «force», Эдмунд отправился в одну из лабораторий, приказав мне бежать в холл и «взять живыми».
Но я никого не видел и начал творить заклинание «Волшебного глаза». Закончить мне не дали. Некий силовой удар отбросил меня к стене, но мне удалось удержаться на ногах. От размазывания по стене меня спас эльфийский амулет «Страж», выданный Эдмундом. Восстановив равновесие, я сотворил заклятие разрушения волшебства, – что-то в духе «разрушить *SPELL заклинание везде там,где заклинание»…
И из ниоткуда проявились некие существа в необычных доспехах – полных, с зеркальным забралом, похоже механические, с какими-то колесами и трубками. От них по прежнему не чувствовалось никакого волшебства, но я понял, что воздействовать нужно на волшебную природу этого доспеха.
После нескольких мгновений раздумий мне пришла в голову оригинальная идея – я назвал эту задумку би-коньюнктивным защитным ядром. Я сплел защитное ядро с на ходу сформулированным заклятием изъятия магии и направил его во врагов:
++Категория:++ Изменение.
++Название:++ «Изъятие магической энергии из концентратора магии»
++Длина:++ 70 слов.
++Комментарий:++ состоит из двух сложносоставных ядер – «контр-вскрывающего» и «изымающего». Каждое ядро двусоставное, заклинание построено по принципу двухуровневого бинарного дерева. Далее по тексту применены два сокращения. «НЗ» - носитель заклинания, «ИД» - «имеющий дар».
++Общая формула:++
{{{
Скрепить
«контр-вскрывающее ядро»
&
«ядро изъятия»
}}}
++Формула ядра «контр-вскрытия»:++
{{{
Скрепить
если (ИД или НЗ) создать *SPELL крест на заклинание я
или
если (НЗ или ИД) направить *SPELL назад заклинание я
&
то направить *SPELL назад [то] заклинание
или
то создать *SPELL крест на [то] заклинание
}}}
Обращаю внимание на перестановку «ИД» и «НЗ» в сегменте «если», а также необычную компоновку, которую можно назвать «бинарной плетенкой» или «коньюнктивным бинарным условием». Данная конструкция обрабатывает сразу 4 ситуации вскрытия и контрвскрытия, а на самом деле 8 вариантов (ИД или НЗ).
Это ядро еще можно назвать "двухядерное коньюнктивное защитное ядро" (биконьюнктивное).
++Формула «ядра изъятия»:++
{{{
Скрепить
(
Изъять *MAGIC сила магия [из] носитель магия
Вложить *MAGIC в (создать *SPELL шар носитель магия в рука я)
Сквозь MAGIC [согласно] Разности [между]
(магия в носитель магия в рука я)
&
(магия в носитель магия [S:цель])
)
&
( направить *MAGIC сквозь MAGIC в [S:цель])
}}}
Напоминаю себе, что в данной записи *MAGIC – означает действие стихией MAGIC, а текст [S: цель] обозначает соматическую описательную компоненту заклинания.
В результирующем заклинании эти два ядра скрепляются в одно заклинание.
Эффект необычен. Соматика заканчивается свободной левой рукой, в которой и создается шар-носитель, а посох был в правой. От посоха в скафандры ударил «разряд» заклинания, разделившись на два и тут же вернулся в левую руку – сформировав на ней странный сгусток некой субстанции, которую волшебник Белин определил мне как «сгущенная магия». Доспехи же, лишившись магической энергии в концентраторах, перестали функционировать и осели.
Мое заклинание понравилось волшебнику Хуфу – выбранное им заклинание для иммобилизации противника не дает гарантии жизнеспособности носителей доспехов. Мои же пленники оказались заперты в доспехе, потому как передвигаться в нем без помощи волшебства смог бы, наверное, только витязь Сириус – доспех весит не менее дюжины пудов, а то и более.
Мы развинтили пленников – это оказались эльфы, одетые в нижнее белье и завинченные в доспехи.
Оказывается, с помощью этих доспехов они перемещались и выживали на слое силы «force».
Первое заклинание, приведенное здесь, скорее всего составлено синтаксически неверно (хотя для 2010 года я считал такую запись правильной). "В" пространственный оператор, нельзя скрепить силу+силу В слово.
{{{
Скрепить:
(
Образ снежинка(холодное, колючее)
Образ ручей(течет, журчит)
)
В
Вихрь создать *сила ветер
Закрутить противосолонь
Направить *(сила мысль я)
}}}
Правильная формулировка:
{{{
вихрь
создать *скрепить:
(
(сила ветер)
&
(скрепить
Образ снежинка(холодное, колючее)
&
Образ ручей(течет, журчит)
)
)
противосолонь закрутить
$d:мысль
}}}
Вихрь создаем комплексной силой, направляем (закручиваем), указывая образ действия "противосолонь", направляем к цели посредством направляющей "мысль".
Стоит отметить, что направлять {{{сила мысль я}}} безопаснее, так как в случае использования направляющей {{{мысль}}} напрямую часть сознания волшебника //лично// направляет направляет заклинание. В случае противодействия можно заработать головную боль (как минимум), что в случае опосредованного управления менее вероятно.
----
Заклинание всем хорошо кроме иллюзорности эффекта. Скреплять образы без наполнения их силой (пытаясь получить вредоносный эффект) бесполезно!!!
Вообще по структуре это четырехступенчатое заклинание с первым скрепляющим ядром (f-f-f-d) тип. Но чтобы это была не иллюзия, надо сказать в ядре:
{{{
Скрепить:
Поток Создать *(снежинка: образ: «холодное, колючее»)
Поток Создать *(ручей: образ: «течет, журчит»)
}}}
Курс Молодого Волшебника.
Этот тег присваивается запискам, имеющим полезную информацию для тех, кто хочет вырасти из мага в волшебника.
Каноническая форма больше всего напоминает язык [[FORTH|http://ru.wikipedia.org/wiki/Форт_(язык_программирования)]]
{{{
хаос баланс сложить клинок создать дотехпор IT вложить
}}}
++Важно:++ все слова 18 ранга — ультимативны и являются одновременно словами, образующими, направляющими и стихиями. Магу ОЧЕНЬ тяжело удержать слово 18 ранга в создании. Оптимальная длинна спелла с такими словами (да и любого спелла) — 8*n (а в идеале — 8^n)
Чтобы понять каноническую форму — пролистай статью о форте.
* Хаос (стихия-сила)
* Баланс (слово 18 ранга)
* сложить (сложить два power-а, положить комплексную силу в стек)
* клинок (слово, выражающее оружие в руке человека)
* создать (слово «клинок» создать стихией на вершине стека)
* дотехпор (направляющая, означает «навсегда» обычно)
(то есть создать навсегда клинок суммой баланса и хаоса, «положить» результат в стек)
* IT — читерное слово, есть только у меня. Универсальный описатель 18 ранга стоимостью 1.
* вложить — берет с вершины стека «IT», потом ядро «хаос баланс сложить клинок создать» и вкладывает в IT это ядро.
Получается носитель, зачарованный волшебным клинком, созданным из суммы сил хаоса и баланса. Лютый пиздец, откровенно говоря.
Выдержать такие противоречивые силы может только клинок из… антимагического материала адамантита :) Более того, при попытке зачаровать любой другой клинок таким заклинанием, носитель немедленно рассыплется в мельчайшую пыль (а маг получит таааакую обратку… что может и не выживет :) ).
А вот адамантитовый клинок зачаровать таким спеллом все таки можно :) Но… я не пробовал :) Слишком уж дорогой эксперимент будет, да и результат надо куда-то девать :) В карман такое не спрячешь :)
По хорошему все спеллы нужно писать в канонической форме. Но в самом начале денжена мы попробовали — мозги плавятся очень быстро.
Так что большую часть времени я спеллы писал в обычной форме… и частенько получал ошибки. Более того, перечитывая спеллы сейчас — понимаю — они работать не должны или должны, но не так.
Только сейчас я иногда извращаюсь (извращался) и писал в канонической форме. Одна проблема — запись спелла в такой форме занимает раза в 4 больше времени.
{{{
пока я я я
}}}
(я как цель, я как слово, я как сила?)
{{{
хаос баланс сложить клинок создать дотехпор IT вложить
}}}
Рассмотрим, как интерпретируется такое заклинание, заданное в канонической форме:
|! часть речи |! что это? |! что делаем |
| хаос | стихия-сила | кладем в "стек" хаос |
| баланс | слово, выступающее как стихия | кладем в "стек" баланс |
| сложить | направляющая | извлекаем из стека баланс, он приоритетный, придаем ему основное свойство хаоса, кладем новообразованную силу в стек |
| клинок | слово, выражающее оружие | кладем в "стек" клинок |
| создать | образующая | извлекаем из стека клинок, создаем его силой, идущей в стеке следующей, кладем полученное ядро в стек |
| дотехпор | "навсегда" | модифицируем ядро, задаем длительность "навсегда", кладем в стек ядро (силу) |
| IT | универстальный описатель цели | кладем IT в стек |
| вложить | образующая | берет с вершины стека «IT» и вкладыает в него ядро, лежащее в стеке следом, то есть @@«хаос баланс сложить клинок создать»@@ |
Получается носитель, зачарованный волшебным клинком, созданным из суммы сил хаоса и баланса.
Но что же именно он делает? Тут возможны два варианта:
!! Хаотичный баланс
{{{
хаос баланс сложить
}}}
Приоритетная сила -- [[баланс]], от [[хаос]]а мы получаем главное свойство -- случайную и хаотическую изменчивость. Получаем {{{ клинок хаотически меняющегося баланса }}} , правда остается вопрос - баланса чего. Я думаю, баланса окружающих сил в месте удара. Что-то похожее на melee-style [[Нить Забвения]].
!! Балансирующий хаос
{{{
баланс хаос сложить
}}}
Приоритетная сила -- хаос, от баланса мы получаем свойство __равновесия__.
Получем клинок из ++силы хаоса, замершего в (неустойчивом) __равновесии__++.
Равновесие это обеспечивается силой заклинания. Скорее всего в момент удара баланс заклинания нарушится (под влиянием слабых сил, с которыми начнется интерференция) с соответствующим эффектом.
* [[Заклинания Артаниса]]
* [[Заклинания Шнаппи]]
* [[Заклинания Геррэйта]]
* [[Заклинания из няшного фаллаута]]
* [[Заклинания Дона Хуана]]
Попробую кратенько рассказать расклад сил.
Сначала мы оказались на стороне мятежников. Ну вот как-то так получилось (конечно это были рельсы - если судить математически-строго).
Королевство Аш-Табах вторгается в королевство Каладон. Зачем? На первый взгляд - борьба за ресурсы и богатые пахотные земли. Но 300 лет назад они уже приходили, финалом войны стала грандиозная битва - и Аш-Табах отступил. А теперь, на первый взгляд, вернулся наверстать упущенное.
Герцог Лето (предводитель мятежников) отступает в свои северные провинции. Обороняем Крепость Рассвета. Грандиозное, растянувшееся на два десятка сессий недельное сражение. Тактика, стратегия, сложные заклинания, ловушки... и приходит понимание, что если бы нас действительно хотели уничтожить - на нас бросили бы совсем не эти войска.
Непонимание ситуации усугубляется внезапным отступлением с поля боя элитных Черных Рыцарей (рыцари в магических Power Armor'ах, защищенных от колдовства). Маги зачем-то решили нас напугать и соорудили их иллюзию - 300 рыцарей, выстроившихся в цепь. Настоящие Рыцари оскорбились и отступили. Зачем? Загадка. Много позже я узнал, что один из магов Аш-Табаха сделал это специально - чтобы рыцари нас в блин не раскатали.
Тем более что этот маг, Бэттин, выходит со мной на контакт и буквально уговаривает перейти на их сторону, обещая мыслимые и немыслимые блага.
Приходит понимание, что по крайней мере несколько волшебников Аш-Табаха в этой ситуации имеют свои интересы. Какие? Загадка.
Наступает зима, боевые действия замирают. И тут от командования Аш-Табаха приходит приглашение на Турнир. Мол, лучшие воители соберутся и покажут всем, чего могут. Безопасность гарантируем. Посовещавшись, решаем ехать.
На Турнире архимаг Аш-Табаха Альфин вызывает меня на колдовской поединок и... ну это было красиво :) Я то не в курсе, как такие поединки проводятся, а он пришел на боевой раунд уже весь защитами обвешавшийся. И вот он творит заклинание, я его понимаю - "всеми видами пламени сжечь, спалить, уничтожить, disentegrate, erradicate, destroy". Спешно творю защиту от его заклинания, по сути экспериментальную. Недавно в голову пришла интересная идея, но опробовать негде. Пробую. Падаю полуобугленной тушкой, архимаг, уже торжествующий победу пару секунд спустя осыпается серебристым пеплом.
Много позже выясняется, что поединок и поражение учителя подстроил Бэттин. Зачем? Столкновение интересов внутри Аш-Табаха.
Попутно выясняется (в основном на Турнире), что главная цель некой группировки магов Аш-Табаха - это собрать в одном месте все Ключи (К Миру). Ключей всего 12, на стороне Аш-Табаха их девять - по числу военначальников, на нашей стороне - два - клинок "Миротворец" и мой Посох Волшебника. Где еще один - загадка.
Зачем собирать в одном месте 12 ключей - тоже интересный вопрос, на который никто ответить не хочет или не может. Пытаем дракона. В конечном итоге он раскалывается (приходится заключить еще один кабальный договор), что при помощи двенадцати ключей можно предотвратить катастрофу, которая случается раз в 2000 лет и вот вот должна случиться (через полгодика, первые признаки уже есть).
Но ведь 300 лет назад в грандиозном сражении Ключи уже собрались в одном месте. Почему не случилось… ну того, чего хочет Аш-Табах. Кстати, а чего он хочет? Ну вот соберутся 12 ключей – а дальше что?
Постепенно выясняется, что просто двенадцати ключей недостаточно, нужен еще какой-то предмет для координации их сил. Еще один Ключ к Ключам. Почему то мы думали, что должен быть один предмет, оказалось – нет, парные клинки. Выясняется это интересно – в тот момент, когда мы их создаем. А я то думал, мы просто оружие волшебное для нашего партийного витязя Сириуса в кузнице куем, а тут такое получилось…
Потом мы находим в лесу загадочный артефакт – башню, расписанную странными и страшными узорами, башню, внутри которой подавляются любые наши силы – колдовские или божественные, неважно. Истинное зрение показывает, что башня каким-то образом связана с катаклизмом, драконами, ключами и вообще всей этой историей. Сдуру стукнул по камню этого артефакта своим неразрушимым Посохом... и чуть его не сломал. И испугался.
И все это закручивается все больше и больше. Из прошлого вылезает один из кураторов магической школы, «благодаря» которому меня из неё отчислили. Почему он меня ненавидит и хочет убить? И это выяснили. Попутно я еще своего Учителя освободил из ethereal prison. Вот уж он то мне много чего рассказал по поводу истинного раскалада сил – ну как он его понимал.
Оказывается, Катаклизм вызывается небесным телом, проходящим мимо нашей планеты раз в две тысячи лет. Называется катаклизм Кровавый Шторм, переживает его от силы 1% населения. Длится шторм 6 месяцев… против нас использовали заклинание «Кровавого дождя» - его локальную версию – это очень страшно. С неба льется кровавая субстанция – смертельный контактный яд. Длительность эффекта всего полчаса, но ты попробуй их переживи – она же еще и испряется. И пары её настолько же смертельны. А тут шесть месяцев.
Защитить мир от Шторма можно – для этого надо всего-то навсего выпустить всех драконов из мистического Слоя Тени, места, куда отправляются «души» «убитых» драконов. Но тут есть нюанс – убить дракона крайне сложно. Но если ранить его оружием из загадочного крестовик-камня, то дракон ослабеет и его душу можно будет поймать в некую Головоломку. Точнее при помощи этой Головоломки запереть его душу в Слое Тени. У нас даже есть эта Головоломка, только как её использовать – мы не знали. Мы и узнали то, что это такое от дракона.
Дракон утверждает, что это можно сделать при помощи двенадцати ключей. Тот, кто их соберет – обретет невиданное могущество и способен, пожертвовав жизнью, подправить законы мира. К примеру, выпустить драконов. По словам Гвардхура, 5 раз из 6 (на его памяти) это происходило, еще один раз Шторм уничтожил всю жизнь на планете и её заселили после Шторма пришельцы их других миров. Тут мы сталкиваемся с буквальным пониманием слова «собрать» - тот, кто будет обладать всеми ключами в буквальном смысле. Проблема в том, что отобрать Ключ нельзя, владелец (точнее хранитель) должен его отдать или добровольно (а зная полководцев Аш-Табаха, мы понимаем – это нереально), или его нужно победить в поединке (что чуточку более реально, но лишь чуточку).
Сейчас то я понимаю, что буквально обладать ключом не нужно было, достаточно того, чтобы хранитель каждого ключа дал Сириусу разрешение воспользоваться силой своего ключа. Может быть мы и смогли бы убедить полководцев Аш-Табаха на такое деяние, но влезать в их интриги… При этом каждый из них только рад будет заполучить власть над остальными. Ради чего? У них была своя версия происходящего, мы её не знаем.
По словам Гвардхура, драконы, после того, как их выпускают из Тени, создают над миром купол, существующий шесть месяцев. Или какой-то частью мира, возможно, позволяя выжить тому самому проценту населения.
Анализ некоторых источников показывает, что тот странный артефакт в лесу относится к системе из нескольких десятков артефактов, при помощи которых некая древняя-древняя цивилизация пыталась разрушить Кровавую Звезду (или оттолкнуть её) «гравитационным» лучом. Почему они не достроили систему башен – загадка.
Попутно выясняется, что мой учитель Эдмунд далеко не та няшка, которой он сейчас выглядит. Некроморфы, которыми нас атаковал Аш-Табах – его рук дело. Ну когда-то он создал ритуал, позволяющий из горы трупов собрать некромонстра, а теперь мы их убить пытаемся. Сложно убить DeathClaw, двигающегося со скоростью 50 м/с и обладающего почти мгновенной регенерацией.
http://restar.gorodok.net/tw/kaladon.html#%D0%A0%D0%98%D0%9F%D0%9F%D0%95%D0%A0
Решая запутанную серию квестов с интригами, отправляемся в прошлое. Собирались отправиться на сутки, чтобы предотвратить геноцид Твердыни Рипперами, но куда-то нас занесло не туда. Почему – так и не выяснили (а теперь уже и не выясним). В общем решили выбираться, но чтобы путешествовать по времени, нужно найти теморального мага. Такого Эдмунд знает только одного. Встречаемся с магом и понимаем – гулять так гулять. Отправляемся в далекое прошлое для консультации с создателями гравитационных пушек.
Это тоже было интересное приключение.
Возвращаемся мы в наше время и тут выясняется, что есть и третий способ решения проблемы – Кровавую Звезду уничтожить. На нас выходит некий межмировой торговец, который предлагает… Кровавую Звезду сбить. И даже продает нам ядерную ракету. И мы её запускаем. И даже попадаем в Кровавую Звезду. И даже её уничтожаем.
И вот тут то мы ловим все «плюшки» такого решения. Вмешавшись в законы мира, в естественный ход вещей таким варварским образом, мы получаем такую жуткую отдачу, что с трудом её переживаем. Наши Ключи начинают исчезать, рассасываться в мире – убивая нас. Уничтожая нас. Единственный способ выжить – отказаться от Ключа. Отказаться от могущества – в моем случае – колдовского. Мой посох давал мне возможность «прямого подключения» к любой стихии мира – хоть к огню под водой, хоть ко льду в жерле вулкана.
Но история на этом не завершилась. Да, и Драконов мы выпустили – удалось и на ёлку влезть, и бэксайд почти не оцарапать. И даже подарки от драконов получить по случаю их возвращения.
Отказаться было сложно – садится перед тобой стометровая туша на дюну и интересутся: чего пожелаешь, друг сердешный, за освобождение меня из многовекового полона?
Тоже, кстати, интересный тест – кто что пожелает. Я обзавелся преполезнейшей вещью – фляжкой с бесконечной чистой водой.
Дальше мы разбирались с последствиями неслучившегося катаклизма – «отдача» изрядно ударила по всему миру – землетрясения, штормы, моры, глады… но конечно не такие, как было бы от Шторма.
Меня потом спрашивали – «а ты, волшебник, понимаешь, что своим решением убил десятки, сотни тысяч людей – они погибли в катастрофах, разразившихся после уничтожения Кровавой Звезды. Может быть надо было выпустить драконов, чтобы они нас защитили? И никто бы не пострадал».
Да, отвечаю, понимаю. Я принял это решение сознательно – у нас была возможность избавить мир от пагубы, которая убиваего каждые две тысячи лет. И мы это сделали.
Скажите, а вы на моем месте поступили бы иначе?
Некоторые отвечают, что иначе. Еще и убить пытаются. Зря они, я-то добрый, но иногда приходится брать в руки шашку.
Что интересно, большинство богов, с которыми довелось потом общаться отнеслись к нам доброжелательно. Думаю, мы могли бы рассчитывать на хорошее посмертие… но оно нам не светит. Владельцы Ключей растворяются в мире после смерти.
А потом одна остроухая зараза спела песенку. И мы оказались в этом же мире, но в котором все иначе, лучше, чем в прежнем. Я бы и рад этой остроухой заразе ухи оторвать, но вот уж кто пожертвовал всем собой ради мира – так это он.
Менестрель, любовь моя, я помню тебя. ++Я помню++.
Дан текст. Заклятие принадлежит категории высшего мастерства (16-18 даны).
Данное заклинание имеет в структуре некросилу (основной компонент), incantation (обращение) и conjuring (заклинание) Духа Воздуха Микеля. Меры предосторожности:
#. Начальная стадия подготовки – 60 ударов сердца
#. Накрываемая площадь при стандартном произнесении – 3,5 квадратных мили (радиус немного более мили).
Капли дождя ядовиты, вызывая мучительную смерть при контакте с кожей через пол часа.
Время рассасывания небесной составляющей – ½ часа, земной составляющей – 2 часа.
Картинка-гравюра – тангар с факелом, спускающийся в подземелье + полстранички текста на тангарском.
Перевод Волшебника Хенны:
Внимание. Устройство Кагренака требует к себе особо тщательного отношения. Головоломку запрещается: разбирать без надобности, чистить, использовать в качестве ударного инструмента. Для активации головоломки убедительная просьба запомнить ее текущую конфигурацию – ведь собрав ее вновь можно вернуть ее, повторив начальную комбинацию. Запоминайте и записывайте все положения головоломки, если двигаетесь поэтапно. Возврат из путешествия возможен лишь повторением всех предыдущих комбинаций.
Набор дисков показывает номер кольца, ориентация большого шарика – номер мира. Дополнительными дисками и шариками производится дополнительная калибровка. Выставление всех дисков и шариков в симметричное положение перемещает к центру.
1 сезон:
Хенна: Кагренак – гном, который сделал это устройство.
Альберт: это устройство позволяет перемещаться в центр вселенной. Его «шарики» это не умеют.
{{{
Создать *spell заклинание
Если там носитель мысль
То создать *MIND образ:(носитель мысль) в э/ч я
Направить от я волна посолонь закрутить.
}}}
Направляет движущуются волну заклинания-детекта ментальной активности с сигналкой.
Направлять заклинания посредством {{{сила мысль я}}} безопаснее, так как в случае использования направляющей {{{мысль}}} напрямую часть сознания волшебника лично направляет направляет заклинание.
В случае противодействия можно заработать головную боль (как минимум), что в случае опосредованного управления менее вероятно.
Странный рисунок: объемный четырехлистник, в нем 5 сокетов, в лепестках – красный, зеленый, синий и белый, в центре – бесцветный сокет.
Артанис: похоже, парольный вход к информации. Учитывая, что склерозник вызвать можно, просто зная способ, эта защита актуальна.
* Понадобилось несколько лет, чтобы понять - ++направляющая++ - это не то, КАК направляется заклинание, а ЧЕМ его направляют, ЧТО его направляет. Эти слова описывают движитель, "направлятор".
<<tagging $engine>>
{{{
вложить в камень:сила:(движение создать*subgravity $d:мысль) дотехпор
}}}
----
Составлено во 2 сезоне, зачем - не помню, когда - не помню.
{{{
направить мыслью толчок стрелой дуновение[1]:
(создать сон тамгде заклинание[1] разрушить)
в существо
}}}
Два разных ядра: одно (1) разрушает астральную оболочку, другое - внутреннее - действует.
Слово "[[взгляд]]" - после работы с ловушкой душ.
{{{
носитель:сила [движение] через воздух
}}}
самый простой описатель предмета, обладающего импульсом и движущегося через воздух: стрела, пуля, арбалетный болт.
{{{
носитель:сила в рука человек движение через воздух
}}}
так можно описать оружие, например молот или меч.
!! 2 сезон
Настанет эпоха, когда из Глубин Недр поднимется Посох с учеником и это ++Знак++.
Содрогнется Твердыня, но устоит, выдержав хаос умов.
Придет Единый Правитель, организующий хаос__,__ кровь Твердыни вольется в чужие реки.
Великая Бойня раздробит королевств++а++, из праха придет Дракон, он будет бел на фоне ночи++,++ но растворится в ней.
Падет окружность, падет алмазная стена, воскреснут духи -- Имена.
Придет Восток, придет и Юг.
И камень от письмен сотрут.
Посланник мира "Никогда"
Здесь обретет покой.
Он мир с собою принесет.
Отринув имена.
//Сим заверяю, верно ибо видел. Кагренак.//
[[Краткий рассказ - о том, как оно все было]]
{{textcenter{Коллекция текстов и фактов из Склерозника Эдмунда Остроноса, а также данные,
полученные волшебником Артанисом из сторонних источников.
Приводится с комментариями волшебника Артаниса.}}}
* Большая часть приведенных данных вычитана волшебником Артанисом из склерозника в посохе. Иногда текст дается так, как он идет от лица Эдмунда, но обычно приводится пересказ текста.
* Следует отметить, что мнение Артаниса по ряду вопросов расходится с официальным мнением Твердыни и даже с мнением Эдмунда Остроноса. Равно как Эдмунд в свое время выстроил концепцию волшебства (лежащую в основе Твердынской Школы), так и Артанис выстраивает концепцию, которая может лечь в основу обучения в Школе Арфистов.
* Иногда встречаются комментарии от имени волшебника Моруда. Они относятся ко времени до создания Тринадцатого Ключа («Роза Ветров» и «Странник»).
[[Склерозник:Помощь]]
<<tagging склерозник>>
{{{
w:мысль f:течение*(сила:время) направить*сила:mind противосолонь
}}}
----
правильная и почти каноническая форма Ока Хроноса.
Мысль как слово образовать течением силой времени направить силой мысли назад.
Каждое заклинание на выходе представляет собой сило (power), возможно не имеющую видимого эффекта.
В теории магии упоминается понятие «ядро». Ядром называется минимальная структурная единица действующих заклинаний. См. файлик :)
Не буду поднимать тему канонической формы заклинания, это сложно и запутанно. Будем писать заклинания в human-friendly форме.
Слова — это существительные. Это атомарные понятия, не разбиваемые на составные компоненты. Попробуй разбить знак (в ваших терминах) «Я» на составные компоненты ;) «Я», «поток», «мысль»…
В заклинании ты берешь СЛОВО, формируешь его при помощи ОБРАЗУЮЩЕЙ, напитываешь СИЛОЙ и получаешь ЯДРО.
Это ЯДРО ты посылаешь к цели при помощи НАПРАВЛЯЮЩЕЙ, которая переносит ядро к целеуказателю-ОБЪЕКТУ.
Вообще говоря, ЯДРО может никуда не лететь, а послужить составной компонентой более сложного заклинания :)
----
Примерная формула составления ядра заклинания:
{{{
слово образующая*power направляющая[*power] цель
}}}
[] — опционально.
Слово образовываем (формируем) силой, направляем (возможно, тоже силой) в цель.
Это неканоническая форма. В канонической я сам постоянно путаюсь, по идее там жесткий порядок слов, но я его вечно забываю :)
{{{
слово образующая*power
}}}
называется ЯДРО.
{{{
направляющая[*power]
}}}
называется ДВИЖИТЕЛЬ
{{{
цель
}}}
называется целеуказатель.
----
{{{
создать заклинание:
смерть
направить *скрепить (сила свят)(сила жизнь)
назад дотехпор
}}}
Здесь мы работаем со словом "смерть" как с силой. Опытному волшебнику это даст понимание смерти как силы (стихии), т.е. новое слово в словарь.
----
Вывод:
оперирование со словом (word) как с глаголом переводит его в категорию сил (powers).
Таким образом, w:сила -> p:force можно сделать так:
создать заклинание (на область)
сила
направить *магия
назад дотехпор
! Заклинания:
<<tagging spell>>
! Коллекции заклинаний
<<tagging spells>>
! Порошок Гуи (волшебный порошок перемещения)
Заметка: порошок (рецепт и небольшой флакон) найдены в южной провинции Чжань южной земли кметов.
Представляет из себя уникальное метафизически сконцентрированное вещество, представляет из себя материальное воплощение вселенских сил мироздания.
Для его приготовления требуется следующее (примечание: хранить это в секрете).
#. дыхание ледяного тролля
#. язык саламандры
#. перо великого горного орла из гор Темеридиамидиума (примечание: о господи, не забудь!)
#. личинка алгоя-хорхоя.
Окромя этих чрезвычайно редких компонентов (Артанис: материальных воплощений чистых якорей к 4 элементам) следует использовать следующие… идет еще список из 52 компонентов.
Процесс.
Для процесса требуется знать заклятия:
* фазового перехода;
* планарного смещения;
* заклинание маячка аганазара;
* заклинание дальнего перехода.
Далее описана рецептура процесса (15 страниц).
Артанис: данный порошок широко используется волшебниками Твердыни, хоть и чрезвычайно дорог и сложен в приготовлении. Способ использования – обсыпать себя. Известные мне волшебница Крис и волшебник Альберт возят с собой почти готовый порошок, изготавливая дозы по мере необходимости. Судя по их словам, настройка порошка Гуи на определенное место (маячок аганазара, похоже, запечатлевает в порошке картину вторичных и местечковых сил точки, в которую мы планируем вернуться) занимает незначительное время.
Заклинание Маячка Аганазара запечатлевает картину вторичных сил в нужной точке.
// Перемещение происходит не через радужное пространство, как можно было предположить, а через Prime Material plane.
Предположение, что объект вытесняется заклинанием планарного смещения в ПМП, а потом, по принципу маятника (вероятно объект остается на грани с ПМП), используя заклинание дальнего перехода и маяка, вытесняется на наш план/слой – ОПРАВДАЛОСЬ!
Первые четыре компонента играют двойную роль – как вытесняют объект с ПМП, так и играют другую роль (настройка маяка?).
Заклинание фазового перехода – дает пинка и поглощает инерцию слоевых перемещений (объект выдергивается из ПМП, пролетает реальный мир и пытается нырнуть в ethereal). Заклинание непозволяет объекту нырнуть слишком глубоко в Ethereal, поглощая "инерцию" слоевых смещений.//
Для запечатления сил используется заклинание «Маяка Аганазара», а перед использованием порошка желательно прочитать заклинание «Нацеливание на маяк».
странное:
сердце силы скрепляющей росток + жизнь
глаз магии пространства
----
Все сотворенные, но нереализованные (или неактивированные) заклинания "висят" в Слое Заклинаний.
----
* разность стратос и планетари
----
starlight - небесный свет. Сила звезд, прошедшая через силу планетари, становится обычным светом. Дифференцируя силу света силой планетари получаем как-бы старлайт.
"вложить в силу света силу планетари" - основная идея для связки, описывающей старлайт.
----
Плюс файрболлы МЕДЛЕННО не летают. С точки зрения не мага — «хрясь и готово».
А вот с точки зрения мага в дуэльном режиме — твой оппонент засечет сотворение заклиния еще на стадии формирования ядра.
Практически — чем больше разница спеллпаверов — тем раньше твой оппонент засечет твое заклинание (ты только ядро сформировал, только направляющую прикрепил… а у него уже контрспелл готов) — и тем раньше будет готов отреагировать…
В поединке у мага в приципе дофига времени :) Вот волшебник начал произносить спелл — а ты уже улавливаешь — что он делает и как. И можешь предположить, как будешь зашищаться :)
Но пвп игрок против игрока в магии у нас никогда не было. Я самый сильный маг из всех игроков — мне не с кем :) Только с неписями, а с ними как раз я предпочитал договориться. Или убивать не магией :)
----
Слово «шар» задает шар. Но диаметр этого шара маг задает не в сантиметрах, а мысленно.
Вот этот момент меня убивает в куче псевдопрограммируемых магических системах — то что маг должен указать диаметр шара в сантиметрах, длинну лайтнинга в метрах или подъемную силу в килограммах!
А всего этого нет! Нету в сознании ни сантиметров, ни килограммов, ни секунд. Пока в руках нет портновского метра или рулетки — реальный человек не в состоянии сказать с точностью до сантиметра рост собеседника. А уж тем более вес :) Или импульс летящей пули с точностью до…
Система магии эгоцентрична. Маг, создавая заклинания, является центром вселенной. Он все обсчитывает относительно себя, но на глазок. Углы, расстояния и размеры. И вкладывает их в слова мысленно (при помощи представлений).
В общем то маг действует в полярных координатах :) Это удобно. Но метрика не задана, его окружает поле заклинаний, поле магии и поле стихий :)
----
Я примерно представляю аспекты, с которыми могу оперировать :) Не скажу, что могу вот так, прямо щас назвать все свои слова :) Но несколько лет назад мог :)
Учитывать все слова и не нужно :) Слова ИР являются элементами мироздания :) Нужно примерно знать, слова каких аспектов точно тут не встречаются и какие точно встречаются :) + слова органично вплетены в повседневный быт. Если знать, как их вычленять — можно их просто «вспомнить» :) Например, «слово», «мысль» итд есть всегда :)
Не знаю как еще объяснить. Слова с одной стороны достаточно формальны, но с другой — они описывают атомараные, но широкие понятия. И эти понятия просто являются частями ткани повествования :)
Наверняка меня окружают какие-то слова, магическую формулировку которых я просто не знаю :)
----
Вот у нас и внимание (spellpower) растет, и сами заклинания оптимизируются.
Кстати, до предела оптимизированное заклинание называется (традиционно) конечным. Вероятно, это исторически сложившаяся калька с finalized, не знаю :)
Подавляющее большинство игр и магических систем предоставляют нам именно конечные заклинания.
И это хорошо укладывается в концепцию: архимаг придумал новое заклинание. Выразил его на истинной речи. Потом оптимизировал до предела.
И получилось заклинание, которое достаточно просто пробубнить, делая специальные волшебные жесты и рассыпая вокруг кварцевый порошок (который поддержит твою концентрацию на заклинании, вызывая у тебя ассоциации, необходимость которых заложена во время оптимизации).
По сути — получился инструмент, которым может пользоваться любой magic-user, но при этом совершенно не представлять, каким же образом этот спелл работает :)
----
!! [[Puncture]]
пронзание защиты одним заклинанием и воздействие другим
!! [[Образ заклинания]]
Позволяет описать "якорь" к другому заклинанию (или части заклинания) в очень краткой форме, без многоэтажных наворотов. Просто и понятно - "образ заклинания Х"
----
<<tagging техники>>
//«Мутированное существо, пожалуй одно из самых сильных, которое мне удавалось создать» //
Содержит силу некро и силу инферно одновременно.
Изобретено для усиления войск Аш-Табаха.
Для создания нужно мертвое мясо в количестве примерно 200 человеческих тел. Требуется также значительное число маткомпонентов, 4 заклинания анимирования (10-15 даны) – заклинание подготовки, заклинание соединения, заклинание формирования и заклинание оживления. Чем старее мясо – тем лучше, здесь работает принцип мертвеца, по которому мертвое мясо перерабатывает жизненную силу в некросилу (в рамках теории ERLS: напитывается фиолетовой энергией). По условной шкале неупокоенных существ попадает в категорию некромонстра.
На создание молодого риппера необходима приблизительно неделя неторопливой подготовки.
++ТТХ: ++
Скорость до 120 миль в час (порядка 50 метров в секунду). Дальность прыжка, как по вертикали, так и по горизонтали – 25 метров.
Внешне походит на DeathClaw из мира Fallout.
Контролируется на заклинательном уровне. Изначально обладает интеллектом на уровне собаки, но со временем растет.
Уязвимые места: «между 2 и 3 позвонками (считая от черепа) я специально оставляю уязвимое место, известное только мне». Если в эту точку воткнуть иглу – риппера парализует. Удар дубиной вызовет бессознательное состояние, разрубание – смерть. Это связано с тем, что там проходит очень важный нерв, не прикрытый защищающими слоями мяса и плоти.
Я ввел этот термин для обозначения места, где проявлены все силы нашего мира. Я попал в него, активировав (начав возбуждение) Струны Сил и позволив Вихрю Сил (множество спиралей сил, которые эманировал Ключ в возбужденном состоянии) выйти за пределы посоха и вытеснить меня из нашего мира.
Тот же самый Вихрь Сил можно использовать и при энчанте волшебных изделий, при этом Вихрь должен оставаться в пределах посоха. Снижение концентрации на возбуждении Струны Сил постепенно убирает Вихрь Сил «обратно в посох». Из проявленного вихря сил можно «вытягивать» жгуты сил – как одинарные, так и комплексные. Для этого необходимо «заказать» нужную композицию сил, вспомнив либо ее саму, либо ощущения (которые с ней связаны). Последний метод использовался при создании 13-го Ключа – я представил себе все те ощущения, которые хотел вложить в клинок Сириус – и вытянул из Вихря Сил композицию из 31 силы (если мне не изменяет память?) соответствующую «ночному ветру, крылу ночи, летящему с горных вершин, пронзаемому лучами колючих звезд».
На основе «Изъятия магии» можно сделать более злое заклятие, разрушающее мобильные доспехи за счет вскрытия пламени внутрь за счет самой магической энергии:
{{{
Изъять *magic [из] носитель заклинания в
Вскрыть *magic пламя в носитель заклинания везде_там_где магия в носитель заклинания
Сквозь : скрепить (magic)&(пламя)
Согласно разности (скрепить (пламя)&(магия) в носитель магия)
&
(скрепить (магия)&(пламя) в носитель пламя)
}}}
Назову это «Разрушающее преобразование магии в пламя в носителе заклинаний»
Всего 36 слов (!!!), проверено, но не испытано.
Структура - линейная четырехступенчатая с двойным бинарным разностно-срепляющим разветвлением.
P.S. "Деструктивная трансмутация магии в пламя в носителе магии"
Внимание! После вчерашнего происшествия в Сигиле решил поставить на посох автоактивирующееся заклинание «Пламенной Ярости».
{{textright{Приписка:// я, блядь, дам им всем прикурить.//}}
{{{
пока (условие1)
пока (условие2)
(действие)
}}}
работает, пока оба условия верны (логический ++И++). Для логического или есть образующая [[или]]:
{{{
пока (ИЛИ (условие1)(условие2))
}}}
(префиксная запись)
TНаходится в городе Серпент, в 1500 милях к юго-востоку от города Альтавир. На востоке от города расположены Серпенские болота, на западе – Красная Пустыня с Льдистыми Озерами. ЕСЛИ ТЫ ЗАБЫЛ ЭТО МЕСТО, ТЫ МАРАЗМАТИК.
Содержит забавные символы, приведенные также с расшифровкой и историей народа кхеров.
Далее идет рисунок клинописи и даваемый подстрочник.
Первая строка: «кровь была нашим именем, смерть была нашей жизнью».
Power — это сила/стихия. Я пишу термины языка по английски, чтобы не путать скажем силу как часть речи со словом «сила»
Еще встречаются обозначения:
$w — любое из столбца «слова» (word)
$f — из столбца образующие (формирующие, form)
$d — направляющие (direction)
$t — целеуказатели (target)
$p — Powers, все стихии или комплексные силы.
В прописях заклинаний:
$p: указывает на силу
$d: указывает на направляющую
$t: указывает на объект
Смотри, например [[Волшебная веревка]]
----
* <> - начало и конец блока заклинания.
* "" - передача текстовых описаний образов слов (через $word образ)
* $word, $form, $dir, $targ, $pwr - соответственно общие обозначения категорий слов (чобы не путаться * - $t заклинание и $p заклинание - разные вещи)
* [] - слова, которые не несут обязательной смысловой нагрузки, но приведены в заклинании для понятности.
* образ:"" - описание образа
* носитель: - описание носителя
Привет, коллега. Ты, видно, в очередной раз потерял память, если читаешь эти строки. А может быть ты чужак, jur, который разгадал секрет. В любом случае, лишнего ты не узнаешь.
То, что ты читаешь – называется «склерозник». То, что ты держишь в руке (я надеюсь, у тебя есть рука) – называется «Ключ Мира». Его еще называют «Ключ к власти над миром». Но это не совсем верно, посох – один из ключей. Это ключ к волшебству. Это ведь твое призвание, коллега? Если нет – можешь закрыть склерозник, все остальное тебе будет неинтересно.
Когда-то давным-давно этот посох создал волшебник по прозванию Эдмунд Остронос. Его рукам припысывают еще много славных и позорных деяний, но это все «дела давно минувших дней, преданья старины глубокой» – и для тебя, и для меня. Прожил Эдмунд, насколько мне известно, более 800 лет. По крайней мере по такому временному промежутку раскиданы его эпизодические появления в исторических и нелитературных хрониках. Если судить по миру Каледон (координаты смотри в главе Маяки Артаниса) – Эдмунд основал Скалу (одну из школ волшебства), а много позже поучаствовал в войне Морбианского Королевства и Аш-Табаха (конфликт завершился Битвой на поле Курру, где и была снята Печать Смерть). Между этими событиями прошло от 600 до 800 лет (судя по разным источникам). Эдмунд ведет летоисчисление от Кровавого Шторма. Это древний катаклизм, мрачная и запутанная история. Возможно ты когда-нибудь найдешь в склерознике подробности. Я пока не нашел.
Волшебник Эдмунд отличался от своих коллег не только огромной силой и мастерством, но и некоторой забывчивостью, что не удивительно, при таком-то сроке жизни. Поэтому он и создал «Склерозник». Это волшебная книга, помесь книги заклинаний, дневника и ежедневника, колдовским образом помещенная в посох. Поиск в Склерознике осуществляется довольно просто – загадываешь тему и приказываешь открыться нужной странице. Если темы нет, или ты сформулировал ее неверно – ничего не произойдет. Запомни три простых правила:
# Если страница не открылась – это не значит, что в склерознике ничего нет по этому поводу. Попробуй поискать в других главах или переформулируй запрос.
# Никогда не употребляй слово «магия» - только «волшебство». Маг – низшая ступень в иерархии волшебников. Примерно как лейтенант в иерархии офицеров.
# Склерозник не может содержать все знания мира. Если ты все еще ничего не нашел – это значит, что владельцы посоха не сталкивались с подобным вопросом, или же сталкивались, но нашли настолько очевидное решение, что не потрудились оставить себе заметку на будущее.
Некоторую полезную для себя информацию ты можешь найти в оглавлении.
Теперь кое-что по поводу Ключа к Волшебству. Его можно использовать для простого усиления заклинаний (читаешь заклинание и машешь палкой, результат не гарантирован, последствия тоже). Можно использовать для создания оружия (точнее для энчанта) – спроси у Хенны (не ищи это имя в склерознике, его нет). Его можно использовать для межпланарной навигации (это опасно). Его можно использовать для грамотного усиления заклинаний – как – сам поймешь. Экспериментируй. Это же так интересно – исследовать самому. Ключ можно использовать еще много для чего – сам Эдмунд говорил – «я, даже я не знаю всех возможностей посоха!». Помни – наш девиз: @@«Бороться и искать, найти и не сдаваться»@@.
По поводу путешествий по времени. Я не знаю, как это сделать, хотя один мой знакомый (Аран Светлый Меч, может вы знакомы, а?) побывал в прошлом. Насколько я понимаю, прошлое – застывшая проекция нынешних событий. А будущее – неопределенно колеблющаяся проекция наших деяний. Время многослойно, многовариантно. Подозреваю, оно обладает инерционностью. Отправившись в прошлое и убив своего отца, ты сам не исчезнешь – просто в момент убийства временной континуум разделится на два независимых слоя – там, где родился ты; и там, где твой отец жив. Короче, не заморачивайся этими вещами, а то повторишь судьбу Хрономера. Это такой полоумный исследователь, который не знает, в каком времени он находится… как говорится, хорошего человека должно быть много, а он очень хороший человек. У меня есть идеи, как можно излечить его от этого синдрома множественных хронотел – всего-то создать новый мир. Пока что мне это не по зубам.
Что-то я еще забыл… гхыр, уже самому склерозник нужен…
Ладно, вспомню – допишу.
Засим, откланяюсь. Волшебник Артанис, крепость Кленового Листа, край Морбиан, мир Каледон (см. маяк) Пятый день декабря месяца 1036 года
++ Terranaunt:++ Добрых суток. Мучает вопрос: какая "скорость каста" у мага, использующего Истинную Речь? Мгновенно?
----
Нет.
Зависит от сеттинга ;)
И от ранга слова. Слова более высокого ранга кастуются медленее, чем слова низких.
И от spellpower (или уровня) волшебника.
Но это лирика :)
По поводу ++практики++:
* В мире эпических героев мой волшебник кастует заклинания со скоростью 0,1 секунды за *любое* слово.
** Это чит, вообще-то :) Но у меня очень долго был и disadvantage - при каждом касте я кидал "сбился не сбился при прочтении, а если сбился - то где? И чем это кончилось (как правило ничем хорошим)"
** Со временем волшебники начинают кастовать низкоуровневые или хорошо знакомые заклинания "про себя", так, пальцами шевельнут, что-то буркнут под нос, а вокруг светло стало.
* В другом сеттинге (типа-стар-варз) я кастовал со скоростью 0,1*ранг слова (1-18).
** Но там волшебники силой не были, так, скорее это был интересный эксперимент "как магия сможет ужиться с джедайской силой" (не может. Джедаи кастуют мгновенно и могут намного больше)
* В третьем я вообще спеллы сначала меморайзил (со скоростью 1 секунда * ранг), причем еще не со 100% шансом (то есть был "опыт использования заклинания" в процентах), а потом кастовал почти мгновенно (но не более 1 спелла в раунд).
** То есть технически я мог кастовать и незамеморайзенное заклинание - но - со скоростью меморайза.
А так ++в определении скорости каста следует опираться на эти тезисы++:
#) ранг Слова (лексемы).
** Чем он выше - тем дольше произносится это Слово, тем дольше волшебник наполняет его волшебством.
#) Уровень или Spellpower волшебники (или иной показатель его Личной Волшебной Силы)
#) Опыт в применении конкретного заклинания.
** Если волшебник с младых лет зажигает свет заклинанием, то к выпуску из академии он будет зажигать его движением бровей или усилием мысли (если конечно он не слоупок)
#) Локальные особенности сеттинга, штрафы или бонусы волшебника.
Тем не менее следует отметить несколько интересных моментов:
#) Если вы видите крутого волшебника, тщательно, медленно и методично выговаривающего волшебные слова - он произносит очень важное в данный момент заклинание и не хочет допустить ни шанса провал. Если он на вашей стороне - готовьте коньяк. Если он на вражеской - бегите.
#) скорость произнесения слов можно менять. Низкоранговые слова можно произносить медленно, высокоранговые - быстро. От этого зависит "напитывание" слова волшебством. Это называется "энергетическая балансировка"
#) Произнесение (или даже попытка) высокоуровневого заклинания малоопытным или слабым волшебником ничем хорошим не кончится. В первую очередь для волшебника.
----
++Terranaunt++ пребывает в удивлении от того, как всё проработано...
Скрепить можно силу со словом;
[[Истинная речь, pre-starter grade|http://imaginaria.ru/truespeech/ir-sryv-pokrovov-pre-starter-grade.html]]
{{width100{
| ++Словарь Истинного Языка++ |c
|! ++слова++ ($w) |! ++образующие++ ($f) |! ++направляющие++ ($e) |! ++объекты++ ($t) |
| [[я]] | [[создать]] | [[эмоции/чувства]] | [[я]] |
| [[поток]] | [[в]] | [[направить]] | [[заклинание]] |
| [[толчок]] | [[стрела]] | [[закрыть]] | [[животное]] |
| [[мысль]] | [[разрушить]] | [[вскрыть]] | [[камень]] |
| [[шар]] | [[внутри]] | [[закрутить]] | [[существо]] |
| [[движение]] | [[горн]] | [[от]] | [[гуманоид]] |
| [[слово]] | [[рост]] | [[там,где]] | [[тангар]] |
| [[сон]] | [[течение]] | [[мысль]] | [[стихийный дух]] |
| [[корень]] | [[изъять]] | [[сквозь]] | [[человек]] |
| [[ухо]] | [[противосолонь]] | [[вдоль]] | [[растение]] |
| [[конус]] | [[посолонь]] | [[скрепить]] | [[бес]] |
| [[сила]] | [[вложить]] | [[за]] | [[эльф]] |
| [[тело]] | [[там]] | [[дотехпор]] | [[дух предков]] |
| [[жизнь]] | [[или]] | [[дотехпорпока]] | [[тролль]] |
| [[имеющий дар]] | [[пирамида]] | [[пока(while)]] | [[меч]] |
| [[кли-поле]] | [[молния]] | [[разделить]] | [[undead]] |
| [[глаз]] | [[переместить]] | [[во-все-стороны]] | [[дерево]] |
| [[вихрь]] | [[разность]] | [[к]] | [[неподвижная вода]] |
| [[магия]] | [[волна]] | [[везде]] | [[носитель]] |
| [[знак]] | [[на]] | [[назад]] | [[демон]] |
| [[место]] | [[если-то]] | [[туда]] | [[ты]] |
| [[взгляд]] | [[столп]] | [[сложить]] | [[тень]] |
| [[храм]] | [[так,как]] | [[вездетамгдеесть]] | [[ангел]] |
| [[рука]] | [[когда-тогда]] | [[магнит]] | [[небесный камень]] |
| [[крест]] | [[цепь]] | [[-]] | [[it]] |
| [[образ]] | [[вокруг]] | [[-]] | [[-]] |
| [[спираль]] | [[взрыв]] | [[-]] | [[-]] |
| [[клинок]] | [[сжать]] | [[-]] | [[-]] |
| [[слой]] | [[-]] | [[-]] | [[-]] |
| [[смерть]] | [[-]] | [[-]] | [[-]] |
| [[сердце]] | [[-]] | [[-]] | [[-]] |
| [[баланс]] | [[-]] | [[-]] | [[-]] |
}}}
__Любое__ корректно составленное ядро является силой (power)!
А это означает, что и формировать слова, и направлять ядра можно с помощью других ядер.
Более того, целеуказатель — это не обязательно одно слово, это может быть некая комбинация слов ИР. Как правило это так и есть.
Некоторые слова могут использоваться как целеуказатели.
!! Важно помнить:
* СОЗДАВАТЬ можно только СЛОВА.
* РАЗРУШАТЬ можно только ЦЕЛИ (возможно, описанные при помощи СЛОВ/СУЩНОСТЕЙ)
* [[Закрыть]] можно силу или объект, выраженный через силу;
* Оперирование со ++словом++ как с глаголом (?) переводит его в разряд ++сил++;
* [[Скрепить]] можно ++силу++ со ++словом++;
Термин, описывающий пространство, где подвешены и реализуются заклинания. (Согласно ERLS – ghost plane). Возможно на него можно заглянуть (необходимы исследования). В любом случае, заклинания где-то существуют и работают.
Термин, призванный описать абстракцию – пространство распространения (существования) волшебной энергии (согласно теории ERLS – пространство существования ДМЭ).
* [[Настроить главное меню|MainMenu]]
!! Справка
* [[Справка: форматирование]]
* [[Справка: встроенные плагины]]
* [[Справка: FAQ]]
@@Minor change: @@ - если при сохранении записки зажать shift - это будет "минорное" изменение без корректировки даты.
!! Конфигурация
* [[Configuration]]
! Полезные внешние плагины (то, что musthave):
* [[SectionMacro]] - Allows you to create collapsable sections just like the slider macro but without needing to create new tiddlers for these sections. @@Creates text-link@@
* NestedSlidersPlugin - улучшенная версия SectionMacro, смотри NestedSlidersPluginInfo.
* FramedLinksPlugin - clicking an external link opens an IFRAME following the link instead of opening a new tab/window
* [[saveAndReloadPlugin]] - Save and Reload - add macros {{{ <<saveAndReload>> }}} anywhere.
* FullScreenPlugin - требует правки ToolbarCommands, позволяет развернуть на полный экран просмотр/редактирование.
* WikiBar - простенький редактор разметки.
* DeliciousTagging - Allows easy 'del.icio.us'-like tagging in the EditTemplate by showing all tags as a list of link-buttons.
* SinglePageModePlugin - одностраничный режим, к нему рекомендуется апгрейд:
* TiddlersBarPlugin - open several tiddlers to use the tabs bar.
* CloseUnsavedOnCancel - When you click new tiddler then click cancel I think the new tiddler should close automatically.
----
+++[Все плагины]>
<<tagging systemConfig "системные">>
===
----
+++[Ссылки и благодарности]>
* [[TiddlyWiki|http://www.tiddlywiki.com]] was originally created by ~JeremyRuston and is now a thriving [[open source|OpenSourceLicense]] project with a busy [[Community]] of independent developers. Osmosoft, part of [[BT|http://btplc.com]], is the leading contributor to the project.
* Переведено и адаптировано с http://webpages.charter.net/one_each/
* This is a simple cheat sheet gleened from the [[TiddlyWiki Tutorial|http://www.blogjones.com/TiddlyWikiTutorial.html]].
* Визуальные апгрейды - http://visualtw.ouvaton.org/VisualTW.html
* Special thanks to http://tiddlywiki.org/
===
+++[Как установить плагин?]>
Находим нужный нам плагин (например, в сети).
Создаем тиддл (new tiddler) с соответствующим именем.
Вставляем код плагина в записку.
Присваиваем теги systemConfig и exludeLists (если хотим скрыть плагин из таймлайна)
Нажимаем ++'done'++, потом ++Save changes++, обновляем страницу и пользуемся.
Смотри также плагин [[saveAndReloadPlugin]]
===
----
+++[Создание нового тиддлера на основе шаблона]>
If you create tiddlers with the same information over and over (contacts, quotations, recipes, etc), you are probably going to want a template tiddler to save time. Then you are going to want a macro that creates a new tiddler that includes the information from the template. Here's how:
#''Create the template tiddler.'' Put text and tables and formatting exactly the way you want your new tiddlers based on this template to appear.
#''Create a macro that will open a new tiddler based on your template.''<br>Where I have listed YYYY, insert the words you want to appear in the label for your macro. Where I have listed ZZZZ, insert the exact title of the template tiddler that each new tiddler will be based on. Where I have XXXX insert any tags that you want to be appended to each tiddler that the macro creates.
/*{{{*/
<<newTiddler label:"YYYY" tag:"XXXX" text:{{store.getTiddlerText('ZZZZ')}}>>
/*}}}*/
3. ''Decide where you are going to store your macro.'' You can add it to the SideBarOptions menu under 'new tiddler' and 'new journal.' Or you can add it to a tiddler that you can access from your MainMenu.
===
----
+++[Исключающие теги]>
* excludeLists - исключает записку из списка тегов по дате (обычно он справа)
* excludeSearch - исключает из поиска ?
Важно:
Чтобы исключить определенные теги из доступного списка тегов (EditTemplate), нужно специально настраивать Delicous Tagging Plugin
===
----
+++[in work: Create forms with editable fields]>
I'm not going to show you how to do this. You will need to download the ~FormTiddlerPlugin and the ~DataTiddlerPlugin from Abego Extensions and consult the documentation for specific instructions. But if you would like to see a form in action, check out my ~NewBookTemplate in ~BibblyWiki, a ~TiddlyWiki I created to manage bibliographies, take book notes and organize personal libraries.
The template is [[here|http://www.giffmex.org/bibblywiki.html#NewBookTemplate]]:
A tiddler based on the template is [[here|http://www.giffmex.org/bibblywiki.html#%5B%5BWright%2C%20N.T.%2C%20Jesus%20and%20the%20Victory%20of%20God%5D%5D]].
I recommend you doubleclick them both to see what they look like in edit mode.
''To create a button'' which creates a new tiddler based on the template, here is the macro syntax:
{{{<<newTiddler label:"XXXX" text:{{"<<formTiddler ZZZZ\>\>"}} tag:"OOOO">>}}}
Replace XXXX with the name for your macro label. (ex: "Add a new book")
Replace ZZZZ with the name of the template tiddler. (ex: ~NewBookTemplate)
Replace OOOO with any tag you would like to have appended to every tiddler created by this macro (ex: "booknote")
You can place your new macro in SideBarOptions or in a tiddler accessible from the ~MainMenu.
===
----
+++[Изображение в заголовке]>
Открываем [[PageTemplate]] и заменяем {{{<div class='header'...> }}} на следущее:
{{{ <div class='header' style='background: #A9CDEF url(path/image.extension) top left no-repeat'> }}}
{{{ role='banner' }}} я думаю, можно оставить. Таким образом, для данного tw будет следущий вид:
{{{<div class='header' role='banner' style='background: #A9CDEF url(path/image.extension) top left no-repeat'> }}}
@@Важно:@@
background: color стоит подбирать в тон картинке.
Может быть, можно использовать base64-encoded изображения.
===
----
@@ВАЖНО:@@ Примеры работы плагинов будут недоступны, если сами плагины отключены.
+++[Plugin: slider - встроенный слайдер. Создает кнопку-ссылку, при нажатии на которую раскрывается содержимое другой записки.]>
Простой слайдер. Создает кнопку-ссылку, при нажатии на которую раскрывается содержимое ++другой++ записки.
!!!Слайдер: {{{<<slider chkTestSlider OptionsPanel Настройки "То же, что и 'опции'">>}}}
Результат: <<slider chkTestSlider OptionsPanel Настройки "То же, что и 'опции'">>
Параметры по порядку:
№ имя "cookie" для сохранения состояния слайдера
№ имя заметки, содержащей текст слайдера (это может быть любая заметка)
№ заголовок кнопки-ссылки
№ всплывающая подсказка
===
----
+++[br - принудительный перенос строки]>
{{{ <<br>> }}}
Эффект: aaa <<br>> bb
===
----
+++[Plugin: DiceRoller]>
[[DiceRollerPlugin]]
===
----
+++[Plugin: openAll]>
!!! OpenAll @@Deprecated, возможно не реализован в новом ядре@@
Позволяет открывать записки, помеченные определенным тэгом. В отличие от встроенного {{{tag}}} может предварительно закрывать все открытые записи, позволяет задавать надпись для кнопки, устанавливать лимит отображения (не более N записок) и изменять порядок сортировки на обратный.
Формат {{{<<openAll <тэг> [параметры] >>}}}
Тэг обязателен, параметры опциональны и могут следовать в любом порядке.
|!Параметр|!Описание|
|close~AllFirst|Предварительно закрывает все открытые записки|
|title:Текст|Надпись на кнопке|
|limit:#| Замените # на число записок, которое вы хотите отобразить (по умолчанию 10000)|
|reversOrder|Сортировать по заголовкам в обратном порядке|
Пример: {{{<<openAll systemConfig closeAllFirst "title:Системные настройки">>}}}
<<openAll systemConfig closeAllFirst "title:Системные настройки">>
===
----
+++[Plugin: tagging (генератор списка записок по определенному тегу)]>
Использовать просто: {{{ <<tagging "имя тега" "название списка">>}}}
"название списка" опционально.
{{{
<<tagging systemConfig "системные">>
}}}
Даст:
<<tagging systemConfig "системные">>
Также:
<<tagging "systemHint" "справка">>
===
----
+++[Plugin: ToolBar (internal)]>
The ToolbarMacro is used in the TiddlerTemplateMechanism to define the toolbar that appears when the mouse is hovered over a tiddler. It looks like this:
{{{
<<toolbar closeTiddler -editTiddler +jump>>
}}}
You can precede a command name with a "+" to specify a default command that is automatically chosen when a tiddler is double-clicked, or the ctrl-Enter key combination pressed. Similarly, precede it with "-" to specify a command to be chosen when the Escape key is pressed.
----
Deletes the current tiddler. A confirmation dialogue is displayed unless disabled with the ConfirmBeforeDeleting checkbox in AdvancedOptions. It is used with the ToolbarMacro like this:
{{{
<<toolbar deleteTiddler>>
}}}
Switches the current tiddler to the current edit view. It is used with the ToolbarMacro like this:
{{{
<<toolbar editTiddler>>
}}}
Offers a popup menu to jump directly to any of the currently open tiddlers. It is used with the ToolbarMacro like this:
{{{
<<toolbar jump>>
}}}
Offers a popup menu displaying the tiddlers that link to the current one. It is used with the ToolbarMacro like this:
{{{
<<toolbar references>>
}}}
Saves any pending edits to the current tiddler, and switches it to the default view. It is used with the ToolbarMacro like this:
{{{
<<toolbar saveTiddler>>
}}}
Закрывает все открытые записки кроме текущей (редактируемой). Используется с макросом ToolbarMacro так:
{{{
<<toolbar closeOthers>>
}}}
Сбрасывает все изменения, внесенные в записку и возвращает ее к режиму просмотра.
Используется с макросом ToolbarMacro так:
{{{
<<toolbar cancelTiddler>>
}}}
Closes the current tiddler, regardless of whether it is being editted. It is used with the ToolbarMacro like this:
{{{
<<toolbar closeTiddler>>
}}}
{{{ <<toolBar>> }}}
<<toolBar>>
===
----
+++[Plugin: tagCloud]>
"Облако тэгов" -- отображает все тэги, причем размер шрифта каждого тэга зависит от того, как много записок помечены этим тэгом.
Формат: {{{<<tagCloud>>}}}
Работает для тегов стандартного семейства (tags).
===
----
+++[Plugin: Timeline]>
{{{<<timeline>>}}}
Выводит записи в хронологическом порядке.
===
----
+++[Plugin: Today]>
Текущая дата: {{{<<today>>}}}
Результат: <<today>>
===
----
+++[Plugin: newJournal]>
Новая дневниковая записка: {{{<<newJournal "DD MMM YYYY, hh:mm">>}}}
Результат: <<newJournal "DD MMM YYYY, hh:mm">>
*DDD - день недели
*DD - число, 0DD - добавлять лидирующий ноль
*MMM - название месяца
*MM - номер месяца, 0MM - добавлять лидирующий ноль
*YYYY - год (четыре цифры), YY - две цифры
*hh - часы
*mm - минуты
*ss - секунды
===
----
+++[Plugin: tiddler - Включение записки]>
{{{<<tiddler MainMenu>>}}}
Вставляет текст другой записки в эту.
@@Внимание!@@ На данный момент нет защиты от бесконечных циклов в случае включений "по замкнутому кругу".
===
----
+++[Plugin: Вкладки (tabs, русская версия)]>
{{{
<<tabs txtFavourite
Меню "Главное меню" MainMenu
Опции "Опции" SideBarOptions
>>
}}}
Результат:
<<tabs txtFavourite
Меню "Главное меню" MainMenu
Опции "Опции" SideBarOptions
>>
===
----
+++[Plugin: tabs (английская версия, возможно более полная)]>
!!!<<gradient horiz #fc3 #fff>> [[tabs]]^^<<tiddler CloseThisOpen with: "Macros Built-in" '« back'>>|<<toolbar editTiddler>>» ^^>>
Tabs are a way of displaying tiddlers in tabular form. Each tab is a separate tiddler; here's how it's done.
Anatomy of a tab: __{{{<<}}}@@color:#00e;tabs@@ @@color:#c06;"cookie"@@ @@color:#080;{{{[[}}}tab name {{{]]}}}@@ @@color:red;"tool tip" @@ @@color:blue; {{{[[}}}tiddler to be displayed{{{]]}}}@@{{{>>}}}__
This is the code for two tabs:
{{{<<tabs txtMyTabs [[tabname ]] "tool tip" [[tiddler to be displayed]] [[Here is another tab ]] "Another Tab" [[hr]] >>
}}}
!!!<<gradient horiz #abf #fff>> Here are the tabs for the code above>>
<<tabs txtMyTabs [[tab name ]] "tool tip" [[tiddler to be displayed]][[ Here is another tab ]] "Another Tab" [[hr]] >>
!!!!<<gradient horiz #fcf #fff>> @@color:#000;Note about wrapping tabs to viewer width@@>>
|bgcolor:#fcf;Leave a space after the __tab name__ before the square brackets. e.g {{{[[tabname ]]}}}. Wrapping requires white space for it to be accomplished properly. Leaving a white space after the tab name should allow a large number of tabs to wrap properly even as the screen size is adjusted. As a further note keep in mind tab names with spaces may wrap unpredictably.|
You can force tabs to wrap where you want them by adjusting the titles to have or not have white space; however, it could be unpredictable.
!!!Another way
+++[Create Tabs with a Script]
<<tiddler CreateTabsScript>>
===
!!!!How reference specific tab in a tiddler
Source: [[How reference specific tab in a tiddler? - TiddlyWiki : Google Groups|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/4f7b952f69b523a2]]
{{{
<html><a href='javascript:;' onclick='config.options.tabID="StayViewTabs";story.displayTiddler(story.findContainingTiddler(this),"Styling");story.refreshTiddler("Styling",null,true);'>Styling</a></html>
}}}
!!!<<gradient horiz #abf #fff>> End of tabs>>
===
----
+++[Plugin: tag - Tag popup]>
{{{ <<tag systemConfig>> }}}
<<tag systemConfig>>
===
----
+++[Plugin: ]>
...
===
----
+++[Plugin: ]>
...
===
----
+++[Plugin: ]>
...
===
----
+++[Plugin: ]>
...
===
----
+++[Plugin: ]>
...
===
----
+++[Plugin: ]>
...
===
----
+++[Plugin: ]>
...
===
----
+++[Plugin: ]>
...
===
----
В целях уменьшения количества "служебных" записок я решил не использовать плагин slidebar и собрал всю справочную информацию в одну записку, применив плагин [[NestedSlidersPlugin]] - он генерирует более красивое представление, чем плагин SectionMacro.
Для упрощения форматирования можно воспользоваться установленным плагином [[WikiBar]].
----
+++[Ссылки]>
|!Пример|!Реализация|!примечание|
|[[ссылка]]|{{{[[ссылка]]}}}|
|[[внешняя ссылка|куда-то]]|{{{[[внешняя ссылка|куда-то]]}}}|
===
----
+++[Форматирование текста]>
|!Пример|!Реализация|!примечание|
|''жирный''|{{{''жирный''}}}|базовая английская версия, важно: это одинарные кавычки|
|++альтернатива++|{{{++альтернатива++}}}|требует [[RussianTextFormattingPlugin]]|
|==зачеркнутый==|{{{==зачеркнутый==}}}|требует [[RussianTextFormattingPlugin]]|
|__подчеркнутый__|{{{__подчеркнутый__}}}|базовый|
|//курсив//|{{{//курсив//}}}|базовый|
|Superscript: 2^^3^^=8|{{{2^^3^^=8}}}||
|Subscript: a~~ij~~ = -a~~ji~~|{{{a~~ij~~ = -a~~ji~~}}}||
|@@color(green):цветной@@|{{{@@color(green):цветной@@}}}||
|@@bgcolor(green):фон@@|{{{|@@bgcolor(green):фон@@}}}||
|@@выделение@@|{{{@@выделение@@}}}|на основе правила CSS .marked из [[StyleSheetColors]] |
|{{{моноширинный}}}|{{{ {{{моноширинный}}} }}}||
|~ОтменитьWikiWord|{{{~ОтменитьWikiWord}}}||
|[[ссылка]]|{{{[[ссылка]]}}}|
|[[внешняя ссылка|куда-то]]|{{{[[внешняя ссылка|куда-то]]}}}|
===
----
+++[Блок моноширинного текста]>
<html>{{{ пример }}}</html>
{{{
пример
}}}
===
----
+++[Горизонтальная линия (hr)]>
{{{ в html реализуется тегом <hr> }}}
{{{ ---- }}}
===
----
+++[Список (ul)]>
{{{
* 1st
** 1st-sub1
* 2nd
** 2nd-sub-1
** 2nd-sub-2
}}}
* 1st
** 1st-sub1
* 2nd
** 2nd-sub-1
** 2nd-sub-2
===
----
+++[Нумерованный список]>
{{{
# 1st
## 1st-sub1
## 1st-sub2
}}}
Альтернатива
{{{
№ 1st
№№ 1st-sub1
№№ 1st-sub2
}}}
# 1st
## 1st-sub1
## 1st-sub2
===
----
+++[Изображение]>
{{{
[img[замещающий текст|image URL]]
}}}
{{{
[img[title|filename]]
[img[filename]]
[img[title|filename][link]]
[img[filename][link]]
}}}
Images can be included by their filename or full URL. It's good practice to include a title to be shown as a tooltip, and when the image isn't available. An image can also link to another tiddler or or a URL
[img[Romanesque broccoli|fractalveg.jpg][http://www.flickr.com/photos/jermy/10134618/]]
{{{
[img[Fractal vegetable|fractalveg.jpg]]
[img[This is shown as a tooltip|http://example.com/image.jpg]]
[img[http://example.com/image.jpg]]
[img[http://example.com/image.jpg][ExampleDotCom]]
}}}
The tooltip is optional.
[<img[Forest|forest.jpg][http://www.flickr.com/photos/jermy/8749660/]][>img[Field|field.jpg][http://www.flickr.com/photos/jermy/8749285/]]You can also float images to the left or right: the forest is left aligned with {{{[<img[}}}, and the field is right aligned with {{{[>img[}}}.
@@clear(left):clear(right):display(block):You can use CSS to clear the floats@@
{{{
[<img[A woody bit of Hampstead Heath|forest.jpg]]
[>img[A field near Milton Keynes|field.jpg]]
}}}
===
----
+++[Изображение в заголовке]>
Открываем [[PageTemplate]] и заменяем {{{<div class='header'...> }}} на следущее:
{{{ <div class='header' style='background: #A9CDEF url(path/image.extension) top left no-repeat'> }}}
{{{ role='banner' }}} я думаю, можно оставить. Таким образом, для данного tw будет следущий вид:
{{{<div class='header' role='banner' style='background: #A9CDEF url(path/image.extension) top left no-repeat'> }}}
@@Важно:@@
background: color стоит подбирать в тон картинке.
Может быть, можно использовать base64-encoded изображения.
===
----
+++[Таблицы]>
Строка таблицы начинается с вертикальной черты (|).
{{{
|Закончите строку латинской с, чтобы создать название таблицы|c
|!Для заголовка "!" сразу после вертикальной черты.|!Заголовок2|!Заголовок3|
|строка1 столбец1|строка1 столбец2|строка1 столбец3|
|>|>|Объединение столбцов - знак "больше" ( >)|
|Объединение строк - знак " ~"|>| Пробел выравнивает вправо|
|~|>| Пробелы с обеих сторон центруют |
|>|>|bgcolor(green):Цвет фона bgcolor(цвет):|
}}}
|Закончите строку латинской с, чтобы создать название таблицы|c
|!Для заголовка "!" сразу после вертикальной черты.|!Заголовок2|!Заголовок3|
|строка1 столбец1|строка1 столбец2|строка1 столбец3|
|>|>|Объединение столбцов - знак "больше" ( >)|
|Объединение строк - знак " ~"|>| Пробел выравнивает вправо|
|~|>| Пробелы с обеих сторон центруют |
|>|>|bgcolor(green):Цвет фона bgcolor(цвет):|
===
----
+++[Цитаты (blockquotes)]>
{{{
<<<
"Beware the Jabberwock, my son!
The jaws that bite, the claws that catch!
Beware the Jubjub bird, and shun
The frumious Bandersnatch!"
<<<
}}}
<<<
"Beware the Jabberwock, my son!
The jaws that bite, the claws that catch!
Beware the Jubjub bird, and shun
The frumious Bandersnatch!"
<<<
{{{
>У попа была собака
>...
>На могиле написал:
>>У попа была собака
>>...
>>На могиле написал:
}}}
>У попа была собака
>...
>На могиле написал:
>>У попа была собака
>>...
>>На могиле написал:
===
----
+++[Заголовки]>
{{{
!Заголовок
!!Подзаголовок
!!!Подзаголовок 2
!!!!Подзаголовок 3
!!!!!Подзаголовок 4
}}}
!Заголовок
!!Подзаголовок
!!!Подзаголовок 2
!!!!Подзаголовок 3
!!!!!Подзаголовок 4
(и так далее до 6 уровня)
===
----
+++[inline HTML]>
{{{
<html>
С недавних пор в <a href="http://www.tiddlywiki.com/">TiddlyWiki</a> появилась возможность использовать <b>внедренный HTML</b>
</html>
}}}
<html>
С недавних пор в <a href="http://www.tiddlywiki.com/">TiddlyWiki</a> появилась возможность использовать <b>внедренный HTML</b>
</html>
===
----
+++[Спецсимволы HTML]>
Entities in HTML documents allow characters to be entered that can't easily be typed on an ordinary keyboard. They take the form of an ampersand (&), an identifying string, and a terminating semi-colon (;). There's a complete reference [[here|http://www.htmlhelp.com/reference/html40/entities/]]; some of the more common and useful ones are shown below.
|>|>|>|>|>|>| !HTML Entities |
| &nbsp; | | no-break space | | &apos; | ' | single quote, apostrophe |
| &ndash; | – | en dash |~| &quot; | " | quotation mark |
| &mdash; | — | em dash |~| &prime; | ′ | prime; minutes; feet |
| &hellip; | … | horizontal ellipsis |~| &Prime; | ″ | double prime; seconds; inches |
| &copy; | © | Copyright symbol |~| &lsquo; | ‘ | left single quote |
| &reg; | ® | Registered symbol |~| &rsquo; | ’ | right single quote |
| &trade; | ™ | Trademark symbol |~| &ldquo; | “ | left double quote |
| &dagger; | † | dagger |~| &rdquo; | ” | right double quote |
| &Dagger; | ‡ | double dagger |~| &laquo; | « | left angle quote |
| &para; | ¶ | paragraph sign |~| &raquo; | » | right angle quote |
| &sect; | § | section sign |~| &times; | × | multiplication symbol |
| &uarr; | ↑ | up arrow |~| &darr; | ↓ | down arrow |
| &larr; | ← | left arrow |~| &rarr; | → | right arrow |
| &lArr; | ⇐ | double left arrow |~| &rArr; | ⇒ | double right arrow |
| &harr; | ↔ | left right arrow |~| &hArr; | ⇔ | double left right arrow |
The table below shows how accented characters can be built up by subsituting a base character into the various accent entities in place of the underscore ('_'):
|>|>|>|>|>|>|>|>|>|>|>|>|>|>|>|>|>| !Accented Characters |
| grave accent | &_grave; | À | à | È | è | Ì | ì | Ò | ò | Ù | ù | | | | | | |
| acute accent | &_acute; | Á | á | É | é | Í | í | Ó | ó | Ú | ú | | | Ý | ý | | |
| circumflex accent | &_circ; | Â | â | Ê | ê | Î | î | Ô | ô | Û | û | | | | | | |
| umlaut mark | &_uml; | Ä | ä | Ë | ë | Ï | ï | Ö | ö | Ü | ü | | | Ÿ | ÿ | | |
| tilde | &_tilde; | Ã | ã | | | | | Õ | õ | | | Ñ | ñ | | | | |
| ring | &_ring; | Å | å | | | | | | | | | | | | | |
| slash | &_slash; | | | | | | | Ø | ø | | | | | | | |
| cedilla | &_cedil; | | | | | | | | | | | | | | | Ç | ç |
===
----
+++[Custom-стили CSS]>
{{{
@@color:green;green coloured@@
@@background-color:#ff0000;color:#ffffff;red coloured@@
@@text-shadow:black 3px 3px 8px;font-size:18pt;display:block;margin:1em 1em 1em 1em;border:1px solid black;Access any CSS style@@
}}}
@@color:green;green coloured@@
@@background-color:#ff0000;color:#ffffff;red coloured@@
@@text-shadow:black 3px 3px 8px;font-size:18pt;display:block;margin:1em 1em 1em 1em;border:1px solid black;Access any CSS style@@
===
----
+++[Комментарии]>
To hide text within a tiddler so that it is not displayed you can wrap it in {{{/%}}} and {{{%/}}}. It can be a useful trick for hiding drafts or annotating complex markup.
===
<<br>>
Принудительный перенос текста: {{{<<br>>}}}
{{{ а это - ́ - знак уда́рения: aaaábbb }}}
!! 1 сезон
Условное понятие, сообщенное мне господином драконом Гвардхуром об изначальном месте обитания драконов (которое, впрочем, не является их родиной). Тень Мира имеет какую-то свою, я подозреваю, подплановую структуру, но стоящую вне придуманной мной шкалы.
Как я понял, попасть туда существу, имеющему человеческий разум невозможно, но это со слов дракона (они во многом нас недооценивают).
Мною проведен ряд исследований в этой области, смотри разделы «Врата Тени», «Великие Курганы Урганды». Следует напомнить себе про 7 печатей, которые закрывают, точнее, запрещают драконам выходить в мир. Каждая печать соответствует закону. Гвардхур свято верит, что они работают, и, хотя многие законы выглядят странно, у меня нет причин ему не доверять.
* Первая печать будет снята, когда сгорит символ жизни – Великое Дерево Трейвербах, расположенное в знаменитой роще друидов в 400 милях западнее королевства Лидония. Первая печать называется @@ПЛАМЯ@@.
* Печать – @@СПРАВЕДЛИВОСТЬ@@. Справедливость будет снята, когда девять осудят невиновного (Моруд: судя по тексту это необходимое условие.)
* Печать – @@СМЕРТЬ@@. Смерть будет снята, когда в одно время и в одном месте умрут три великих короля.
* Печать – @@ВОЗДУХ@@. Воздух будет снят, когда небесное дитя Кровавого Шторма ([[Артанис]]: не дождя!) поразит [[Серпенскую Колонну|Серпенская Колонна]]. ([[Гвардхур]] Артанису про дитя К.Ш.: Ты. Это ТВОЯ печать...; Артанис (а ахуе): Я дитя кровавого шторма? Гв.: да, волшебник, это твоя судьба. Ну ладно, что с ней делать - понятно)
* Печать – @@УЖАС@@. Ужас будет снят, когда святой пожрет тысячу младенцев.
* Печать – @@МЕСТЬ@@. Будет снята, когда человек, имеющий душу, убьет ее в себе. (Г: Нет. Сложная для МОЕГО понимания печать; Мне неизвестна судьба людей в посмертии. Их мысли и чувства. Мне неведома судьба рода людского.)
* Печать @@ПРОКЛЯТИЕ@@. Будет снята, когда будут сняты 6 печатей. Тогда выйдет страж, страж Седьмой Печати и принесет с собой Кровавый Шторм. Остановив его, откроется Седьмая Печать.
[[Тень Мира]] – слой, в котором объединены все возможные каузальные и темпоральные потоки. Я думаю, можно сказать, что это еще одна координата, перпендикулярная координате темпорального потока и каузального потока.
Существуют маяки к слою Тени Мира – башни, возведенные древними цивилизациями. По моим данным их цель – изменить мир так, чтобы Кровавый Шторм ушел навсегда. Мир после этого изменится… совсем.
Комментарий: что мы и пронаблюдали...
Несколько лет назад по аналогии с Тенью Мира я попробовал обосновать существование "Блика мира" - светлый аналог Тени. Я думал, что Тень связана с нижним миром... это была ошибка.
Тем не менее некоторые идеи стоит записать снова:
* существ нижнего мира вскрывают (вымещают из слоя) жизненной силой;
** в Нижнем Мире наблюдается сильный дисбаланс жизненной силы;
* существа Верхнего Мира вытесняются эмоциональной энергией ;
** в Верхнем мире сильный дисбаланс эмоциональной энергии. Попросту говоря, в верхнем мире хотят развлечений, а в нижнем - хавать.
** эмоциональная энергия имеет более "высокие" вибрации, чем жизненная сила;
* жизненная сила течет из верхнего мира в нижний (от Блика к Мраку) через реальный мир (в основном в нем задерживаясь).
* эмоциональная энергия течет из Нижнего в Верхний.
** Поэтому и говорят - что "обуреваем темными эмоциями и желаниями".
** А как быть со светлыми эмоциями и желаниями? :) А просто. Люди, испытывающие их, "приподнялись" на нулевым слоем (наш мир), сдвинулись в сторону Верхнего мира. Вы много видели насильников и убийц, испытывающих светлые эмоции?
* Чем выше моральное здоровье - тем сильнее человек сдвинут "вверх" - и тем больше у него тень. //Чем выше забрался - тем больше будет падение // - "грех согрешившего праведника тяжелее греха обывателя"
При создании любого заклинания мы используем логико-магические конструкции. Создаем их мы при помощи ментальных сил разума волшебника. Но откуда берется энергия на заклинания? На эти вопросы и отвечает Теория Сил.
++Def:++ сила – объект или субъект воздействия.
! Виды Сил
!! Примитивные силы
Четыре __характеристики__ сил таковы:
* ++Элементальные++ – эти силы располагаются наиболее «близко» к первичному слою мироздания. Это силы, проявленные на нашем слое в конкретной материальной форме. Складываясь вместе, они образуют материю реального мира.
* ++Эфирно-духовные++ – эти силы еще называют астральными. Эти силы формируют слои призрачных теней, духов, мироощущений (ментальные) и эмоций (эмоциональные). Названы эти силы по своему принципу действия.
* ++Теургические++ – это силы божественной направленности. Согласно одной из еретических теорий – когда личная сила кого-либо становится столь велика, что начинает действовать на мир – этот некто обретает божественный статус в соответствующей сфере проявления силы.
* ++Антиподные++ – это силы, находящиеся в четком противостоянии. Именно это противостояние обеспечивает само существование таких сил-антагонистов.
Несмотря на название, эти силы далеко не всегда «примитивны» в прямом смысле этого слова. Более того, любое (корректно составленное) заклинание является силой.
Характеристики сил могут произвольно комбинироваться, образуя, к примеру «теургический антиподный эфирно-духовный комплекс».
!! Квазисилы (пассивные или порожденные)
С математической точки зрения эти силы можно рассматривать как производные от примитивных.
* ++Темпоральные силы++ – суть сопутствующие для остальных, описанных выше, примитивных сил. Темпоральные силы существуют, пока существуют примитивные силы – это обязательное условие их существования. Фактически, при появлении любая сила вызывает к существованию темпоральную силу. При этом темпоральные силы различных сил между собой не связаны и не взаимодействуют.
* ++Каузальные силы++ – суть силы, возникающие при взаимодействии примитивных сил. Фактически они отмечают сам факт происходящего взаимодействия.
Таким образом, темпоральная сила сопровождает факт существования примитивной силы, а каузальная сила сопровождает факты её взаимодействия с другими силами.
Важно отметить, что темпоральная и каузальная силы не связаны. Появление темпоральной силы не сопровождается появлением казуальной – это силы одного порядка.
++Пример:++
Несомненно, существуют силы огня и воды: ОГОНЬ~~0~~ и ВОДА~~0~~. Как следствие, существуют их темпоральные производные, «регистрирующие» их существование в мироздании: ОГОНЬ~~Т~~ и ВОДА~~Т~~.
Некто объединяет огонь и воду в комплексную силу (огонь&вода)~~0~~
«скрепить огонь & вода» (в канонической форме: вода огонь скрепить)
В момент объединения появляется казуальная сила (огонь&вода)~~К~~, «регистрирующая» взаимодействие сил и практически сразу после этого – темпоральная сила (огонь&вода)~~Т~~, «регистрирующая» существование комплексной силы.
При этом появление казуальной силы (огонь&вода)~~К~~ не сопровождается появлением для неё теморальной силы, «регистрирующей» существование казуальной силы. То есть ((огонь&вода)~~К~~)~~Т~~ не возникает!
!! Основополагающие силы или Законы
Все что известно про эти силы – они ++существуют++ и ++работают++. Почему они работают именно так – неизвестно. Такова воля Творца. Достоверно известны шесть сил, седьмой силой называют все непознанное, всё то, что мы не можем осознать и сформулировать. Все нижеприведенные законы (возможно, кроме Седьмого) касаются примитивных сил.
<<tiddler "Формулировки Законов">>
Это теория сил. Она умозрительна, но применима на практике.
!! Дадим еще пару определений:
++Проявление силы++ – смещение баланса присутствия силы в данной точке.
++Фокус силы++ – естественное проявление силы в данной точке.
Вся ++Ритуальная магия++ основана на Законах Сил. Волшебник, использующий волшебство для взаимодействия с двумя комплексами сил (например, с двумя различными Слоями), обязан учитывать высшие законы.
Сила А~~0~~ может преобразоваться в силу В~~0~~. Согласно Шести законам, существует множество факторов, сопровождающих существование сил А~~0~~ и В~~0~~ (не только темпоральных и казуальных квазисил). Как эти факторы на уровне Законов «сложатся» - так и пойдет процесс преобразования: сила появится, преобразуется или уничтожится.
Искусная работа с Истинной Речью как раз и состоит в «подгонке» комбинации факторов (оболочки заклинания) к комбинации Законов. Как эти факторы будут сформированы – так, согласно Законам, и пойдут процессы.
В теории сил нет закона, запрещающего преобразовать ОГОНЬ~~0~~ в ВОДА~~0~~ (или иную силу преобразовать в её классического антагониста). И именно отсутствие такого закона позволяет нам привести пример:
Некий маг кидает в нас заклинание, ядро которого состоит из //силы воды// и //силы дерева//. Мы создаем контрзаклинание, преобразующее силу дерева в силу огня (это возможно, хотя и довольно сложно). В результате заклинание нашего противника становится крайне нестабильно – в ядре заклинания объединены силы-антагонисты, проявление которых не сбалансировано какой-либо логико-силовой конструкцией (образующей или силовым контуром-оболочкой). Скорее всего заклинание нашего оппонента разрушится.
Все силы преобразуются друг в друга при помощи других сил (комбинаций сил, в том числе и заклинаний).
! Логические компоненты заклинания
(продолжение следует)
Вход находится у южного края леса в 12 полнолуние. Под ночной радугой по отвесу. Найти большое дерево. Под корнями нора. Выгнать барсука. Ни в коем случае не убивать. Совершить обряд полной имитации. Дальше Брондедир не успел рассказать... Возможно, его жена в Сигиле знает, где искать его дневники.
----
Есть читерный способ проникновения на Тропу Соцветий -- через "шаг в миг смерти через отрешение от мира к закону Творца"
----
{{{
Скрепить
{
Вскрыть *скрепить (сила магия)&(сила камня) существо в камень;
Вскрыть *скрепить (сила магия)&(сила пламя) существо в камень;
Вскрыть *скрепить (сила магия)&(сила мрак) существо в камень;
Создать * силой: скрепить (магия)(камень)(пламя)(мрак) форма:(шар)
} в пирамиду
}}}
Когда мы двигались по коридору к -5 ярусу, на нас выкатился некий сгусток мрака и Хуф устроил мне квалификационный экзамен. Необходимо было устранить возникшее препятствие.
Существо несло в себе комбинацию сил «недра», «пламя» и «мрак». По подсказке Эдмунда оно являлось сложным демоном 6 категории. Демона 6 категории невозможно уничтожить, только развоплотить «закрытием». А такого комбинаторного демона еще и закрыть невозможно. Мрак, пламя и камень – очень эффективная комбинация сил, Эдмунд нашел только один способ противодействия… Можно было бы сыграть на противоположном комплексе сил… если бы он был, и Хуф дал вторую подсказку – «какая сила антагонистично-нейтральна этим трем силам». Ответ – «магия».
Моя импровизация – вскрыть магией существо в себя же, используя его же силу, удалась великолепно.
[img[true_speech/spells/управляемый-глаз-с-контрдетектом.gif]]
Уязвимое место этого заклинания - [[контрвскрывашка]] (первое ядро) отражает назад только то заклинание, которое развеивает активное ядро "глаз я": {{{ если ИМД направить на глаз я заклинание }}} (речь идет о произвольном заклинании, но кроме диспелла на такой глаз ничего обычно не направляют, хотя... можно направить и обманку). Заклинание уязвимо, если разрушить ядро "ухо я".
{{{
Конус посолонь закрутить
}}}
Раздувает конус, превращая его в куполообразную форму.
[img[true_speech/forms/kupol.jpg]]
{{{
конус противосолонь закрутить
}}}
Сжимает конус:
[img[true_speech/forms/pseudo_sphere_lobachevsky.jpg]]
|! № |! Закон |! Формулировка |! Комментарий |
| 1 | Закон Существования | Единожды появившаяся сила не может перестать существовать. | (Сила X ⇒ X~~T~~, которая исчезнуть не может) |
| 2 | Закон Несуществования | Сила, переставшая существовать, не может возникнуть вновь. Если что-то уничтожено – оно уничтожено раз и навсегда. | “Реинкарнация” исчезнувшей силы даст другую силы – ибо изменилась комбинация факторов, композиция сил (не только примитивных, но и регистрационных) породивших ее. |
| 3 | Закон истекания | Если сила питается от других сил, то она питает другие силы. | Это закон равновесия сил (в глобальном смысле). Если сила начинает питаться от других сил (увеличивая потенциал) – она начинает питать и другие силы (увеличивая их потенциал). Если сила A~~0~~ питает B~~0~~ и обратно – это уже просто взаимодействие. |
| 4 | Закон увеличения | Если сила питается от одной силы – это значит, она питается от всех сил (так или иначе, напрямую). | Если X~~0~~ питается от α~~0~~ ∈ {A}, то X~~0~~ питается от каждой силы из {A}. |
| 5 | Закон стабильности | Каждая сила стремится к покою | Каждая сила стремится перестать взаимодейстовать с остальными силами (обычно у нее это не получается). Одиночные силы существуют – это силы, о которых мы ничего не знаем. Но стоить выйти на такую силу (это практически нереально) – она перестает быть одиночной – становится взаимодействующей. |
| 6 | Закон нестабильности | Каждая сила стремится вывести другую силу из состояния спокойствия | Силы “толкаются”, им тесно. Этот закон “мутит воду” в омуте сил. |
| 7 | Неизвестный закон | Формулировка неизвестна! | Этот закон охватывает очень большие области, очень большое количество явлений. Все остальное, то, что не описывается предыдущими шестью законами – и составляет седьмой закон. Скорее всего это комплексный закон. Скорее всего он введен в документ для неограниченного расширения и описания непознаваемости мира :) |
[img[true_speech/spells/]]
----
{{{
}}}
----
* ? ? ранга;
*
Пример:
{{{
}}}
Существо оси «holy» II категории — «свят»
Астрал – тот слой, на котором живут слабые призраки, духи, грубые эмоции…
Существо оси «инферно» I категории — «инферно»
----
!!! Примечания
С помощью «точка бес» можно апеллировать к силе инферно. Точнее, не к самой силе инферно, а персонифицированному «клочку» слоя инферно, представляемого термином «бес».
Вообще говоря, объекты, представляющие внешнеслоевые сущности (бес, демон, ангел итп), являются силами.
Целеуказатель вовнутрь. Target selector.
* вдоль… обычно заклинания или проявленной силы (вдоль течения реки).
Везде (area effect) Используется для увеличения арийности заклинания (вред распределяется по площади), например так: «…везде там где…»
* Казуальная направляющая 14 ранга - "везде, там где есть ... "
(explosion) Направленное взрывное воздействие вовне (explosion)
(A → B)
Вкладывают силу в носитель (контейнер), который может быть не физическим, а сформулирован при помощи слов (т.е. являться заклинанием).
Пространственный указатель.
При формировании заклинания этой образующей оно "летит" по направлению указующего жеста до первого объекта, к которому применимо понятие "внутри". Внутри этого объекта оно и реализуется.
(G-оператор) Пространственный оператор.
Придает заклинанию форму - накатывающейся "морской" волны. Форму как геометрическую, так и... функциональную.
* стихия 18 ранга;
* само по себе упоминание времени в заклинании почти бесполезно. Как правило работают со словом "течение" - {{{течение времени}}}
Пример:
{{{
создать*(создать заклинание: создать*stasis крест [на] время) глаз
}}}
Делает детект прошлого. Например, позволит увидеть картинку, скрытую окислом на куске металла. Позволяет увидеть один казуально-независимый объект "как он есть", без учета влияния ++времени++.
* направляющая 2 ранга;
* Служит для открытия/создания. Эта направляющая применима только к энергетическим структурам (в том числе и заклинаниям) и инослоевым существам (демоны, духи, и.т.д.)
* вскрывать можно силы или существа сил (бесы, ангелы, и тому подобное)
** «Вскрыть $p» — портал в слой силы,
** «вскрыть $t» — призыв (summon) существа.
Пример:
{{{
вскрыть существо:сила:ветер в носитель заклинания
}}}
Никогда не вскрывать беса (или иное существо) как заклинание (тем более в заклинание, хотя синтаксически сказать "в заклинание" нельзя). Заклинание является частью сознания, так что в тот же миг бес завладеет телом и душой волшебника или просто сожжёт его. Все так сделавшие становились невоскрешаемыми овощами.
Это золотое правило демонолога: "бесы могут менять форму". Поэтому вызывать беса нужно в форму, по сути - вложить (вскрыть) демона в (носитель).
Примитивный суммон - вскрыть беса.
Примитивный контроль - воздействовать на беса (на его эмоции/чувства) благодатью.
Глаз вообще (для заклинания wizard eye – «создать глаз»)
* образующая 5 ранга
Вмещает стихию и содержит длительное время. Носитель без носителя, бесформенный, выглядит как шар.
Сравни: [[храм]] - дырка в слой, [[носитель]] - содержит, [[горн]] - концентрат/конденсат стихии.
//
Кажется, горн — это концентратор. результат {{{=< <-сила--}}} -- То есть в раструб горна мы направляем поток силы, а на выходе получаем более мощный эффект. Но я могу ошибаться ;) //
Похожие слова: [[горн]], [[храм]], [[носитель]].
Описывает только движение как процесс, проистекающий с ++физическими объектами++. Движение воды – правильно, но нельзя сказать «движение мысли». __Неприменимо к объектам энергетической природы__.
//Stun, confuse, paralyze, etc. //
Применяется к физическим объектам (точнее объектам реального мира, обладающим инерцией), в этом отличие его от [[течение]].
++FAQ:++
[0:24:30] Terranaunt: А файрбол (или еще какой missile-spell) - физический объект?
[0:25:30] Rain Skylark: Нет. Файрболл как заклинание - это __заклинание__, то есть __сила__.
[0:26:11] Rain Skylark: На самом деле конечно сказать можно "создать крест на движение заклинания" , но это будет некорректно и вызовет штрафной бросок :)
[0:26:30] Rain Skylark: если его выкинешь - оно сработает как "течение заклинания" :)
[0:27:06] Rain Skylark: А вот если это огненный шар, сделанный не заклинанием, а скажем... бутылкой молотофф-коктейля - то все нормально :)
Существо оси «инферно» II категории — «ад»
До тех пор - бесконечная длительность заклинания (пока сила не кончится или работают условия существования)
{{{
создать *огонь шар направить дотехпор
}}}
появится огненный шар и полетит вперед... и будет лететь до тех пор, пока не кончится энергия заклинания
Условный оператор, завязанный на время и событие во времени.
(действие) до тех пор, пока (условие)
Описывает домовой дух этноса. Условно светлое существо I категории — «благость»
* вневременной условный оператор (условно-логический)
{{{
если (рука человек на носитель:заклинание)
то (создать свет [вокруг носитель заклинание])
}}}
возможно комбинирование условий:
{{{
если А
если Б
если В
то Г
}}}
если выполнится одно из условий А, Б или В - то сработает ядро Г.
Логическое ИЛИ.
См также: [[Связывание условий логических операторов]]
За чем-то. Пространственный оператор. Позволяет воздействовать на объект, находящийся за чем-то. Полезно, когда объект виден не полностью или не виден совсем.
! Заклинание как сила, используется как SPELL
* по сути поток заклинаний и их скопления - ++поле заклинаний++. Поговаривают о слое заклинаний.
* Описывает поле (в математическом смысле) заклинаний (включает в себя все летящие, подвешенные и работающие заклинания).
* одно из свойств: разная проводимость для разных видов заклинаний.
! Закланание как слово (используется "заклинание")
описывает любой элемент поля заклинаний - отдельное заклинание.
* закрывают силу или энергетическую структуру. Больше ничего закрывать нельзя.
* применимо только к энергетическим структурам. Unsummon, dispell. «Закрыть заклинание».
* слово 8 ранга
* описывает любой знак, символ, руну, пиктограмму, изображение заклинания.
* стоит 8 - настолько увеличивает длительность энчанта (?)
* Используется для энчанта:
{{{
создать заклинание на знаке
}}}
//и в нарисованный знак вложить символьное изображение заклинания.//
(сокр. ИМД) — Не обязательно имеющий магический дар, также описывает существ с повышенным уровнем силы - как жизненной, так и психической. То есть при помощи этого слова можно описывать магов, псиоников, Одаренных... шаманов. Вообще тех, кто обладает Даром.
Огонь I категории. Слабое и множественное проявление
К (к $t, но вне) — Целеуказатель «к» — к объекту, но снаружи.
Пример: «направить сила свят волна к демон», если использовать «в» — демон отдиспеллит заклинание, а с «к» волна силы свят его окружит.
Ряд заклинаний физически изменяет пространство. Огненный шар еще можно отдиспеллить, а вот падающие камни вполне реальны и недиспеллируемы.
Кли-поле — это личное поле, окружающее каждое живое существо и препятствующее проникновению движителей 2 рода внутрь поля.
То есть нельзя создать шар огня В человеке. Кли-поле мешает. Но его можно разрушить :)
* Клинок — Слово сложное и интересное. Его свойства:
** 1. односторонняя направленность;
** 2. она направлена на разрушение;
** 3. сила слова __прямо__ завязана на носителя клинка;
** 4. клинок – оружие, которое направляет один //человек// для убиения другого;
** 5. клинок – пассивная сила, задающаяся словом
(? порожденные К- и Т-силы входят в число образов слова «клинок»). Так как «клинок» — слово, а не объект – оно не имеет четко выраженной формы.
Времязависимый условный оператор (условно-событийный)
возможно комбинирование условий:
{{{
когда А
когда Б
когда В
тогда Г
}}}
когда выполнится одно из условий А, Б или В - тогда сработает ядро Г.
См также: [[Связывание условий логических операторов]]
----
См. [[когда-тогда, если-то, разница]]
Контрвскрывашкой называется одно из ядер заклинания, противодействующее "[[вскрывашке|вскрывашка]]" (логично, да? :) ). Иными словами, контрдиспелл, защита от диспелла или иного отменяющего действия.
Форма "конус". Если (в заклинании) не указано иного — вершина конуса начинается от мага, ось конуса — туда, куда он укажет пальцем. Хотя можно создать конус и в стороне
Корень чего-либо, то из чего идет рост, развитие. Может заменить сердце.
Корень - начало ряда аспектов (как древесно-друидической сферы, так и биологической. Работа с этим словом открывает другие слова этого аспекта).
d:(сила:мысль) - описывает применение слово [[сила]] к направляющей [[мысль]].
Так сделано для [[косвенного управления силой мысли|косвенное управление силой мысли]] каналом, а не прямого (мыслью).
Крест или запрет.
Часто используется как запрещающее слово (основа dispell’а)
Главный образ: стабильность. Неподвижность. Застылость.
! Магия как стихия
* стихия ++магия++ - это в чем всплески (заклинания) проявляются.
! Магия как слово
Развеивать (диспеллить) желательно не стихию "магия", а слово "магия".
Слово, 8 ранг.
Описывает место в пространстве. Область, заданную каким-то границами (описанными при помощи разума волшебника или слов И.Р.).
Первая описательная характеристика пространства. Некое место плоскости или объема, имеющее определенные характеристики.
Можно сказать {{{место силы}}} или {{{место силы храма аэрус}}}
Удобно для открытия колодцев силы.
@@Отдельная стихия, не имеющая градаций@@ (информация из 1 сезона, противоречит Звезде Сил)
Свойства:
#. твердость металла (слабее это проявлено в воде и земле);
#. проводимость (что может быть использовано для создания туннелей для прохода заклинаний, ибо металл нейтрален);
#. disenchant (что крайне затрудняет его использование, заклинания через стихию металла нужно составлять очень осторожно);
#. нейтральность (использование стихии металла с другими стихиями не вызывает антагонистического дисбаланса, но добавляет свойство disenchant (собственная труднофиксируемость));
#. следует также помнить, что стихия дерева НЕ ПРОТИВОПОЛОЖНА металлу.
Молния (Call lightning) делается с помощью металла и воздуха. Металл – тут проводник силы молнии сквозь воздух по созданному каналу к цели – в результате молния не рассеивается.
{{{
создать заклинание:
когда рука существо на носитель заклинание
тогда
скрепить
создать заклинание:
скрепить
(
если свет вокруг носитель заклинание
то
скрепить
закрыть заклинание:(создать свет вокруг носитель заклинание)
создать заклинание:(создать благость вокруг носитель заклинание)
)
(
если благость вокруг носитель заклинание
то
скрепить
закрыть заклинание:(создать благость вокруг носитель заклинание)
создать заклинание:(создать свет вокруг носитель заклинание)
)
в заклинание дотехпор пока
рука существо на носитель:заклинание
создать благость вокруг носитель заклинание
дотехпор
}}}
* движитель 2 рода
* Этим понятием описывается не только быстрое направленное движение, но еще и потенциал.
Мрак - это сила "некро".
Его визуальные образы - тоска, печаль, страх.
!! Мысль как слово
мысль как таковая.
!! Мысль как направляющая
Это мысль, а не слой "mind". Используется для управления заклинаниями мыслью, а не отсылкой к слою mind. Тем не менее этот способ небезопасен. Смотри заметку [[косвенное управление силой мысли]]
Назад (РЕВЕРС событийный)
Не пространственный, а скорее событийный (не темпоральный!) реверс процесса.
{{{«направить назад [тот] шар огня»}}} — шар огня полетит обратно так, как летел сюда. Если в шаре была образующая [[стрела]] - он может еще и полететь по изогнутой траектории.
{{{«направить назад заклинание вскрыть демона»}}} — все понятно.
Вообще, на этой направляющей строятся многие инстинктивные (возвратные) защиты.
если не указано иного — подразумевается «направить от я»
Вода, которая обладает неподвижностью: лужа, пруд, озеро. Масса стоячей воды, вода в кружке, в бочке.
Примеры:
{{{«направить лед к стоячей_воде»}}}
или
{{{«когда рука человек на носитель заклинания тогда направить лед к стоячая_вода в носитель заклинания»}}}.
Описывает носитель чего-либо: «носитель силы жизни» (живое существо), «носитель огня» (факел), «носитель заклинания» (зачарованный предмет).
Слово "носитель" без уточнения использовать нельзя. Носитель всегда содержит силу - базовую либо выраженную через совокупность слов.
Похожие слова: [[горн]], [[храм]].
* Суть описываемое представление о чем-либо.
* {{{«образ человека»}}} — даст нам иллюзию человека, но {{{«образ стихии»}}} выделит конкретное указываемое свойство, которое и использует в заклинании:
** {{{пламя образ:разрушение}}} - описание конкретного образа силы ++пламя++ -- чистое разрушение. Другой вариант записи: {{{образ(пламя):разрушение}}}
* {{{«направить шар образ огонь: (свет огня) объект»}}} — полетит шар, только не огненный, а световой (естественно человеку вреда не причинит). Используется для указания конкретного свойства используемой стихии.
* Но(!) «образ тела дракона» — сила (в нашем мире «тело дракона» не объект).
* А вот «образ тело демона» — в нашем мире «тело демона» не сила, а объект.
** Образ объекта даст качественную (2/3 %) иллюзию.
Огонь II категории. Образы: огонь в очаге или костре.
* (A*B*C*D → баланс).
* Образующая, обладающая свойством концентрации. Имеет строго 4 операнда. {{{«скрепить A, B, C, D в пирамиду»}}}.
* Все четыре компонента-ядра будут работать вместе, но не просто суммироваться, а могут и взаимоизмениться.
* @@Замечание:@@ со временем правило изменилось — оптимальной пирамидой стало скрепление 3 или 4 ядер, но можно скреплять и сколько угодно ядер — имея в итоге нешуточную угрозу структурной дисбалансировки.
** Кроме того, количество ядер можно ограничить значением какой-то функции от навыка волшебства (например, sorcery / 4)
Огонь III категории. Одно из свойств – чистый вред. Это наиболее оптимальная стихия для разрушения.
Условная направляющая, завязанная на время.
Пока (condition) (action)
См: [[Связывание условий логических операторов]]
* по ходу солнца, вверх.
* Согласно естественному порядку вещей (в тех мирах, конечно, где солнце идет как на Земле.
** Не исключено, что в на планетах, вращающихся в другую сторону слово «посолонь» будет крутить заклинание в другую сторону, хотя и все равно указывать «вверх».
поток. Не знаю что тут еще сказать.
против хода солнца, вниз, против естественного порядка вещей.
Земля I категории. Образы: оседает, множество мелкого.
разделяет ядра и силы. Используется как "разделить", так и в контексте "отделить".
{{{
разделить огонь искра [искрой]
}}}
из огня вылетит сноп искр
* Образующая 8 ранга.
* В базовом варианте - разность (difference) между двумя силами А и Б.
----
!! Разность как движитель
Учитывая, что лююое заклинание является силой (хотя бы как совокупность слов Речи), ++разность++ применима не только к внешним (относительно заклинания) сущностям, но и к частям заклинания.
А и Б обладают потенциалами силы, а в случае, если эти операнды являются частями заклинания -- они обладают силой [[spell]] (это в общем случае, в частном - ядра могут иметь свою //окраску//, связанную с используемыми стихиями).
Конструкция {{{ разность А Б }}} описывает предпроцесс перетекания потенциала между операндами. Под "предпроцессом" я понимаю неидущий процес - фактически описатель ++процесса++ как ++силы++, даже как __++движителя++__ , фактически:
{{{
[[движитель согласно]] разности А и Б
}}}
Обсуждение с мастером привело нас к следующему результату:
| разность между силами | движитель |
| разность между логическими конструкциями | образующая |
Разность обеспечивает (описывает) условие перетекания силы.
Этот вопрос возник, когда я попытался понять, что есть разность разности? А есть это разность в логическом смысле - разность между //стремительностями// (скоростями) перетекания потенциалов в разных ядрах. Фактически - дельта скорости -- насколько один процесс перетекания потенциала быстрее или медленнее.
{{{
разность
разность огонь всполох
разность снежинка лёд
}}}
замеряет разность скоростей преобразования стихий
Исследование относится к 14.11.2010
* образующая 3 ранга;
* описывает разрушение объекта.
* Разрушить можно объекты, но не слова (!)
Разрушение происходит через повреждение, таким образом возможна конструкция:
{{{
энчант: (создать поток свет) тамгде (заклинание[энчант] разрушить *spell существо)
}}}
накладываем на иголку. Тыкаем зачарованной иголкой, там где она разрушает существо - зажигается свет. Может показаться, что тут нужно (носитель заклинания), но это ++уже++ энчант, то есть предмет, несущий заклинание.
* Образующая 5 ранга;
* Рост - одно надстраивается над другим. Дуплицирование. Развитие.
Пример:
{{{
создать рост жизни
}}}
Природа I категории. Образы: медленно, но верно – крошит камни своим ростом
* 2 ранг
* низшая из стехий оси "Металла"
Рука. Телекинез – рука & толчок.
Вода I категории. Образы: текучий, журчит, вода (?упругость воды)
//— О да, — ответил Гед. — Свет — это энергия, благодаря которой существуем мы все, но она не зависит от наших потребностей, она вечна. Солнечный свет и свет далеких звезд измеряют время, а время само по себе — это свет. В солнечном свете, воплощенная в дни и годы, проходит жизнь. И в темноте жизнь может воззвать к свету, произнеся его имя… Впрочем, это нечто совсем иное, чем обычные заклинания волшебника, когда он подлинным именем называет тот или иной предмет. Свет сильнее любой магии.//
Процесс облома внутрь. Движение извне внутрь.
Описание силы, как она есть.
* внепространственный движитель.
* через или сквозь силу или слой силы.
{{{направить заклинание сквозь пламя}}},
{{{направить мысль сквозь [слой] мысль}}} и тому подобное.
* Желательно направлять через "родную" силу - так, чтобы не создавать силовую дисбалансировку. То есть не следует направлять огненный шар через воду.
* Кроме того, можно направить заклинание через специально созданный (как правило, при помощи сил-проводников "металл" или "angelus") канал.
* скрепляет ядра (силы).
Комплексная сила будет обладать свойствами обоих операндов.
* слово 4 ранга;
* слово есть слово изреченное - как слово речи человеческой, так и слово речи драконьей, языка истинного. Слово во всех смыслах.
Пример:
{{{
когда человек создать слово тогда создать*свет шар
}}}
* Складывают силы.
* Тоже самое, что и алгебраический знак сложения. Складывает между собой два понятия. При этом приоритетным понятием является первое (в отличие от скрепить)
«сложить сила огня и сила воды» — не получится пар. Получится жидкий огонь. Огонь — но жидкий. Примерно эквивалентно оператору «+» в ассоциативке.
Имеет смысл вкупе со стихией. Описывает слой соответствующей стихии.
//— А как же смерть?
— Чтобы слово прозвучало, — медленно ответил Гед, — должна быть тишина. До слова и после него. //
P.S. Возможно использование как Силы.
Холод II категории. Множественность.
Создают слова (части речи), заклинания и другие энергетические структуры.
[[носитель]] относится к таковым.
Сон.
Относится к силе [[астрал]] (эмоциональная сфера), в меньшей степени - к [[ментал]]у.
"Эшашкануэ"
Отличается от понятия посолонь или противосолонь – слово, а не образующая. Подразумевает спираль любой формы и направленности. Круговое поступательное движение, причем используется и в метафорическом смысле. «Спираль времени» — не бред.
Стихийный дух или элементаль.
Это не сущность, а явление - проявление элемента, выплеснутого в едином порыве. Это явление __абсолютно__ неразумно.
++Важно:++ при вызове элементаля упоминать другие стихии запрещено категорически.
* guided arrow - "самонаводящаяся" стрела. Если мы оформим заклинание этой образующей, оно будет двигаться к цели вне зависимости от смены местоположения целью (в пределах действия заклинания конечно).
* движитель 1 рода
Самый общий целеуказатель на категорию существ.
условный оператор
(действие) так,как (условие)
Пространственный указатель. Обычно сопровождается указанием жестом или иным описателем.
Условный движитель:
{{{«создать заклинание тамгде что-то»}}}
например, {{{там,где заклинание разрушить существо}}}
Эта частица речи похожа на образующую, но если внимательно вдуматься - заметны различия.
Движитель 2 рода.
@@Уточнить:@@ Описывает действие или явление в физическом пространстве. Для работы с ментальным слоем или событиями нужно "[[вездетамгдеесть]]".
Тангар (dward) как он есть.
В основном — body. В числе всего прочего позволяет создавать заклинания для относительно безопасного перемещения по слоям (в формулировке «тело огня», «тело воздуха).
* Теневая сущность.
* Некая сущность, присущая живым объектам, хотя встречается и у неживых. На нее трудно воздействовать и повредить ей можно только чистым светом (разрушить светом, а не силой света).
Это планарно-зависимое слово.
* Тень существа образована падением света на него – так становится видна его темная сущность. У самих темных сущностей как правило, тени нет (в нашем мире). Лишь у редчайших светлых сущностей тени нет (архангелы). На нашем плане даже мельчайший темный дух тени не имеет.
!! Тени – как самостоятельные сущности.
* Может случиться, что тень отделиться или носитель тени умрет и останется сама тень. Такая тень не описывается словом существо, только словом тень. «разделить существо и тень» — неконтролируемая тень + существо с большой вероятностью умереть (? его темные деяния/свойства не переходят в тень, а накапливаются в самом существе, убивая его?). Тень не имеет отношения к стихиям. Поговаривают о [[СЛОЕ ТЕНИ]].
* Стихиями тени неразрушимы. Разрушить тени очень сложно, воздействует свет (причем чистый, а не сила света). Тень нематериальна и воздействует на нее тоже только тень. «вложить свет в тень» – типичный //blue screen of death// на мага. Тени – отдельная тема исследования.
Течение применимо к энергетическим сущностям, к силам.
Течение - это процесс, в том числе протяженный и по времени. В отличие от лексемы [[движение]] это слово можно применить к ++Силе++.
Нельзя сказать "движение силы", но можно сказать "течение силы".
придаем толчком импульс. «Пинковая тяга».
Кинетическое воздействие (физической природы).
Неприменимо к энергетическим объектам - то есть нельзя толкнуть файрболл.
Работает с движителями 1 рода.
@@НИКОГДА НЕ ПРИМЕНЯТЬ К СЕБЕ!!!!@@
Максимальная концентрация силы, фокус (в оптическом смысле) силы.
{{{ точка беса }}} -- максимальная концентрация беса.
{{{ «создать точка MAGIC» }}} -- Более концентрированный эффект, чем «вихрь магия»
Примитивный целеуказатель на существо (в пределах видимости)
Стихия хаоса. Стихия абсолютного неупорядоченного, отрицающего самого понятия бытия.
P.S.
Ох, Артанис, ради бога, не шутите с этой вещью…
храм - псевдоместо силы, "дырка" в слой
Похожие слова: [[горн]], [[носитель]].
Описывает шарообразную форму.
Следует помнить, что шар - это не сфера, это оболочка с заполнением.
Часто записывается сокращенно - ++Э/Ч++.
Это э/ч волшебника, результат влияния его астрального тела на окружающий мир.
* Универсальное слово 1 ранга.
* может выступать любой частью речи:
** ++я как слово++ -- описывает себя; эгоистичное слово-описатель.
** ++я как образующая++ -- ?
** ++я как направляющая++ -- я как движитель;
** ++я как цель++ -- направление на себя; Целеуказатель по умолчанию.
** ++я как сила++ -- силой сущности своей действую!