Welcome to TiddlyWiki created by Jeremy Ruston; Copyright © 2004-2007 Jeremy Ruston, Copyright © 2007-2011 UnaMesa Association
#''Love for God:'' Because I genuinely love God and would rather please him with my life than disappoint him (Ps. 42:1-2, Mt. 13:44, 1 Peter 1:8-9).
#''Worship of God:'' Because my lifestyle is an important part of my worship of God, and God deserves my best.
#''Creation:'' Because God is my Creator. That makes me his, and I have the obligation to obey him (Isa. 45:9).
#''Redemption:'' Because Jesus bought me with his blood, I am not my own, but belong to him, so I have even more obligation to obey him (1 Cor. 6:19-20, 1 Pet. 1:17-19).
#''Gratitude:'' Because God loves me and has done so much for me, especially on the cross, and I want to show my thankfulness to him by giving Him my life (Titus 2:11-14).
#''Love for the church:'' Because God loves his church, and I want to love and serve his church by my faithful involvement (Eph. 5:25-27).
#''Jesus’ example:'' Because Jesus’ example inspires me to imitate him and become more like him (1 John 3:16).
#''Who I am in Christ:'' Because I know I have a new, wonderful identity in Christ. My citizenship is in heaven, and I have renounced my former way of life. I want to live like a citizen of heaven (Romans 6, Phil. 3:20-4:1).
#''My conduct as a witness to Christ:'' I represent Jesus and I want to be a good witness by how I live. I want others to see Jesus’ life-changing power in me, so they will believe in him, too (Mt. 5:16, Titus 2:7-10, 1 Peter 2:12).
#''Modeling for others:'' Because I want to set a good example for others. Maybe someday they will want to treat me the way I treat them (Luke 6:31).
#''The love others have for me:'' Because I don’t want to disappoint other Christians who love me and are praying for me.
#''The obligations of privilege:'' Because not everyone in the world enjoys the benefits I do: a Christian education, religious freedom, material blessings. These things are a great privilege and imply a great responsibility to use what I have wisely (1 Peter 5:8-9).
#''Blessings in this life:'' Because I want God to bless me in this life, and doing good brings blessings (1 Peter 3:10-12). I know God’s way is the best way (Ps. 19:7-11, Ps. 119). Obedience to him will bring me more happiness and satisfaction than the short-lasting happiness that sin brings. Despite the world’s promises, God’s way really is better.
#''The consequences of sin in this life:'' Because I hate sin and want to avoid it like the plague. Sin only brings trouble and consequences – sickness, debt, sadness, broken relationships, wasted time, regrets, a bad reputation, problems with the law, etc, even death (Rom. 6:23, 12:9).
#''Eternal reward:'' Because I know God will judge me someday. I don’t want to lose out on rewards in heaven (Mt. 6:19-21, 2 Cor. 5:9-10, Galatians 6:9, 1 John 2:28).
#''The power of habits:'' Because the more I sin now, the harder it will be for me to stop later. I want to avoid bad behavior habits now. And the more good I do now, the easier it will be for me to do good later on. I want to cultivate good habits while I’m young (Eccl. 12:1).
#''Greater assurance of the reality of my salvation:'' My good works increase my assurance that God has saved me (2 Peter 1:10-11, Mt. 7:17-18), because I see God’s power working in me. I see the fruit of the Spirit, evidence that he is in me (Gal. 5:22-23).
#''Victory over my enemy:'' Because Satan is my enemy and I don’t want him to beat me. I don’t want him to be able to laugh at me. I want to see him lose. (James 4:7, Rev. 12:10-11).
I originally posted this at http://www.giffmex.org/blog/?p=317.
*My investigation of ethical systems (more precisely //normative// ethical systems) led to confusing contradictions between sources, but from what I can glean from them, there are four main ethical systems contemplated by ethicists:
**''Deontological ethics'' focuses on the inherent rightness or wrongness of one's actions in the context of rules and laws, and asks, "How can I act correctly and appropriately?" There are three subcategories of deontological ethics:
***//Divine command theory// - God's commands are moral absolutes. Ethics is based on God's will, as revealed in special revelation.
***//Natural law// - There are absolutes that can be derived from the way nature (general revelation) works, apart from special divine revelation
***//Ethical rationalism// - There are absolutes that can be derived from the use of human reason
**''Teleological'' or ''consequentialist ethics'' focuses on the end results that an action will have, and asks, "How can I act so as to make a bigger and better impact on the world?" There are a number of subcategories of teleological ethics.
***//Utilitarianism// - We should seek to do the acts that will do the greatest good for the greatest number of people
***//Ethical egoism// - Actions that advance self-interest are moral
**''Virtue ethics'' focuses on the character of the moral agent, and asks, "How can I act so I can become a better person?"
**''Ethical relativism'' states that values are conventions or social contracts between human beings that become a part of human cultures. There are no universal, objective principles binding people in all societies. The moral thing to do depends on which cultural context we are in. Relativism would include //situation ethics//, which teaches that each situation is unique, so there are no universal standards that apply to every possible scenario. So one must do the best he or she can to do the loving thing in each situation.
*These systems are not all mutually exclusive. Each has its pros and cons when considered in isolation, but when combined appropriately they complement and reinforce each other.
*In my opinion, virtue ethics is the best way to approach ethics - the goal of the Christian is not so much to obey rules, as it is to become more Christlike, to reflect God's image more perfectly. And virtue ethics, properly understood, incorporates the other approaches to ethics:
**Rules, especially God's rules, are essential tools in the development of one's virtue.
**And when one becomes virtuous, it will result in love - which desires to bring greater benefit to the people and the world around us.
**Ethical egoism seems counter to Christian teachings on self-denial and love for others. But even Jesus appealed to one's self-interest when he said we should store up treasures in heaven for ourselves. As strange as it is to say, the one who is honestly motivated by his own eternal self-interest will want to become selfless, and love others sacrificially, because that is what brings greatest blessing to oneself in the long run.
**Ethical relativism as stated is not compatible with Christian teaching. But it is not completely devoid of truth. One's ethical response does need to be expressed in culturally relevant ways.
{{squote{Sources: Rae, Mitchell}}}
A note about me: my name is Dave Gifford - I am an ordained minister in the Christian Reformed Church, and a missionary in Mexico City. My primary website is http://www.giffmex.org. Feel free to contact me at: dgifford (at) crcna (dot) org with questions, concerns or ideas.
''About us''
*[[About Dave Gifford]]
*[[My philosophy]]
*[[Give us your feedback]]
*[[Ways you can help me]]
*Note: this file is meant to be an introductory teaching aid to give the average Christian free access to helpful information. Those doing scholarly work should refer to the sources cited and the bibliographies for further information.
''Miscellaneous insights''| [[@|AcademicTOC]]
-----
''Languages''
*[[English word origins]] (<<getTagCount "English word origins">>)
''Art''
*[[My cartoons]]
*[[My blog post with my old cartoons]]
*[[Slideshow of art from my old sketchbooks]]
''Articles''
*[[My article 'How to drive in Mexico City']]
*[[My article 'Giffmex Walt Disney World awards']]
*My theory that [[Walt Disney is the antichrist]]
''Our photos on Flickr''
*[[Slideshow of my 'Fun stuff' set on Flickr]]
*[[Slideshow of my 'Plants and places of beauty' set on Flickr]]
*[[Slideshow of my 'Mexican art and customs' set on Flickr]]
*[[Slideshow of my 'Mexico City graffiti' set on Flickr]]
*[[Slideshow of my 'Mexican food' set on Flickr]]
*[[Slideshow of my 'Mexico is beautiful' set on Flickr]]
{{squote{<<newTiddler tag:'Aesthetics' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Aesthetics")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
Here are all the clausal analyses I have done on Titus, using the sentences as they appear in Greek.
''Titus 3.1-2''
<<tiddler "Titus 3.1-2 clausal diagram">>
''Titus 3.3''
<<tiddler "Titus 3.3 clauses">>
''Titus 3.4-7''
<<tiddler "Titus 3.4-7 clauses">>
{{squote{<<newTiddler tag:'Anger' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Anger")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
{{squote{<<newTiddler tag:'Attitudes and virtues (general)' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Attitudes and virtues (general)")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
{{squote{<<newTiddler tag:'Be a better listener' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Be a better listener")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
''Insights on the body and the emotions'' | [[@|BodyEmotionsTOC]]
-----
''The body''
*[[Physical health]] (<<getTagCount "Physical health">>)
*[[Sexuality]] (<<getTagCount "Sexuality">>)
*[[Substance abuse]] (<<getTagCount "Substance abuse">>)
''Emotions''
*[[Emotions (general)]] (<<getTagCount "Emotions (general)">>)
*[[Anger]] (<<getTagCount "Anger">>)
*[[Sadness and grief]] (<<getTagCount "Sadness and grief">>)
*[[Fear, worry and anxiety]] (<<getTagCount "Fear, worry and anxiety">>)
*[[Happiness and joy]] (<<getTagCount "Happiness and joy">>)
Bud Caddell captures one of life's tensions and offers advice in this simple but wise graphic:
[img[http://farm3.static.flickr.com/2482/3592960452_90656305a7.jpg]]
{{squote{Source: Bud Caddell, "how to be happy in business", http://whatconsumesme.com/2009/posts-ive-written/how-to-be-happy-in-business-venn-diagram/. Used with permission.}}}
{{squote{<<newTiddler tag:'Calling and vocation' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Calling and vocation")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
''Insights on character and words of inspiration'' | [[@|CharacterTOC]]
-----
*[[Words of inspiration]] (<<getTagCount "Words of inspiration">>)
*[[Motivation vs procrastination]] (<<getTagCount "Motivation vs procrastination">>)
*[[Habits and discipline]] (<<getTagCount "Habits and discipline">>)
*[[Testing and temptation]] (<<getTagCount "Testing and temptation">>)
''Attitudes and virtues''
*[[Attitudes and virtues (general)]] (<<getTagCount "Attitudes and virtues (general)">>)
*[[Concern over apathy]] (<<getTagCount "Concern over apathy">>)
*[[Humility over pride]] (<<getTagCount "Humility over pride">>)
*[[Kindness over cruelty]] (<<getTagCount "Kindness over cruelty">>)
*[[Love over hate]] (<<getTagCount "Love over hate">>)
/***
|Name|CheckboxPlugin|
|Source|http://www.TiddlyTools.com/#CheckboxPlugin|
|Documentation|http://www.TiddlyTools.com/#CheckboxPluginInfo|
|Version|2.4.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|Add checkboxes to your tiddler content|
This plugin extends the TiddlyWiki syntax to allow definition of checkboxes that can be embedded directly in tiddler content. Checkbox states are preserved by:
* by setting/removing tags on specified tiddlers,
* or, by setting custom field values on specified tiddlers,
* or, by saving to a locally-stored cookie ID,
* or, automatically modifying the tiddler content (deprecated)
When an ID is assigned to the checkbox, it enables direct programmatic access to the checkbox DOM element, as well as creating an entry in TiddlyWiki's config.options[ID] internal data. In addition to tracking the checkbox state, you can also specify custom javascript for programmatic initialization and onClick event handling for any checkbox, so you can provide specialized side-effects in response to state changes.
!!!!!Documentation
>see [[CheckboxPluginInfo]]
!!!!!Revisions
<<<
2008.01.08 [*.*.*] plugin size reduction: documentation moved to [[CheckboxPluginInfo]]
2008.01.05 [2.4.0] set global "window.place" to current checkbox element when processing checkbox clicks. This allows init/beforeClick/afterClick handlers to reference RELATIVE elements, including using "story.findContainingTiddler(place)". Also, wrap handlers in "function()" so "return" can be used within handler code.
|please see [[CheckboxPluginInfo]] for additional revision details|
2005.12.07 [0.9.0] initial BETA release
<<<
!!!!!Code
***/
//{{{
version.extensions.CheckboxPlugin = {major: 2, minor: 4, revision:0 , date: new Date(2008,1,5)};
//}}}
//{{{
config.checkbox = { refresh: { tagged:true, tagging:true, container:true } };
config.formatters.push( {
name: "checkbox",
match: "\\[[xX_ ][\\]\\=\\(\\{]",
lookahead: "\\[([xX_ ])(=[^\\s\\(\\]{]+)?(\\([^\\)]*\\))?({[^}]*})?({[^}]*})?({[^}]*})?\\]",
handler: function(w) {
var lookaheadRegExp = new RegExp(this.lookahead,"mg");
lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = lookaheadRegExp.exec(w.source)
if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
// get params
var checked=(lookaheadMatch[1].toUpperCase()=="X");
var id=lookaheadMatch[2];
var target=lookaheadMatch[3];
if (target) target=target.substr(1,target.length-2).trim(); // trim off parentheses
var fn_init=lookaheadMatch[4];
var fn_clickBefore=lookaheadMatch[5];
var fn_clickAfter=lookaheadMatch[6];
var tid=story.findContainingTiddler(w.output); if (tid) tid=tid.getAttribute("tiddler");
var srctid=w.tiddler?w.tiddler.title:null;
config.macros.checkbox.create(w.output,tid,srctid,w.matchStart+1,checked,id,target,config.checkbox.refresh,fn_init,fn_clickBefore,fn_clickAfter);
w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
}
}
} );
config.macros.checkbox = {
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
if(!(tiddler instanceof Tiddler)) { // if no tiddler passed in try to find one
var here=story.findContainingTiddler(place);
if (here) tiddler=store.getTiddler(here.getAttribute("tiddler"))
}
var srcpos=0; // "inline X" not applicable to macro syntax
var target=params.shift(); if (!target) target="";
var defaultState=params[0]=="checked"; if (defaultState) params.shift();
var id=params.shift(); if (id && !id.length) id=null;
var fn_init=params.shift(); if (fn_init && !fn_init.length) fn_init=null;
var fn_clickBefore=params.shift();
if (fn_clickBefore && !fn_clickBefore.length) fn_clickBefore=null;
var fn_clickAfter=params.shift();
if (fn_clickAfter && !fn_clickAfter.length) fn_clickAfter=null;
var refresh={ tagged:true, tagging:true, container:false };
this.create(place,tiddler.title,tiddler.title,0,defaultState,id,target,refresh,fn_init,fn_clickBefore,fn_clickAfter);
},
create: function(place,tid,srctid,srcpos,defaultState,id,target,refresh,fn_init,fn_clickBefore,fn_clickAfter) {
// create checkbox element
var c = document.createElement("input");
c.setAttribute("type","checkbox");
c.onclick=this.onClickCheckbox;
c.srctid=srctid; // remember source tiddler
c.srcpos=srcpos; // remember location of "X"
c.container=tid; // containing tiddler (may be null if not in a tiddler)
c.tiddler=tid; // default target tiddler
c.refresh = {};
c.refresh.container = refresh.container;
c.refresh.tagged = refresh.tagged;
c.refresh.tagging = refresh.tagging;
place.appendChild(c);
// set default state
c.checked=defaultState;
// track state in config.options.ID
if (id) {
c.id=id.substr(1); // trim off leading "="
if (config.options[c.id]!=undefined)
c.checked=config.options[c.id];
else
config.options[c.id]=c.checked;
}
// track state in (tiddlername|tagname) or (fieldname@tiddlername)
if (target) {
var pos=target.indexOf("@");
if (pos!=-1) {
c.field=pos?target.substr(0,pos):"checked"; // get fieldname (or use default "checked")
c.tiddler=target.substr(pos+1); // get specified tiddler name (if any)
if (!c.tiddler || !c.tiddler.length) c.tiddler=tid; // if tiddler not specified, default == container
if (store.getValue(c.tiddler,c.field)!=undefined)
c.checked=(store.getValue(c.tiddler,c.field)=="true"); // set checkbox from saved state
} else {
var pos=target.indexOf("|"); if (pos==-1) var pos=target.indexOf(":");
c.tag=target;
if (pos==0) c.tag=target.substr(1); // trim leading "|" or ":"
if (pos>0) { c.tiddler=target.substr(0,pos); c.tag=target.substr(pos+1); }
if (!c.tag.length) c.tag="checked";
var t=store.getTiddler(c.tiddler);
if (t && t.tags)
c.checked=t.isTagged(c.tag); // set checkbox from saved state
}
}
// trim off surrounding { and } delimiters from init/click handlers
if (fn_init) c.fn_init="(function(){"+fn_init.trim().substr(1,fn_init.length-2)+"})()";
if (fn_clickBefore) c.fn_clickBefore="(function(){"+fn_clickBefore.trim().substr(1,fn_clickBefore.length-2)+"})()";
if (fn_clickAfter) c.fn_clickAfter="(function(){"+fn_clickAfter.trim().substr(1,fn_clickAfter.length-2)+"})()";
c.init=true; c.onclick(); c.init=false; // compute initial state and save in tiddler/config/cookie
},
onClickCheckbox: function(event) {
window.place=this;
if (this.init && this.fn_init) // custom function hook to set initial state (run only once)
{ try { eval(this.fn_init); } catch(e) { displayMessage("Checkbox init error: "+e.toString()); } }
if (!this.init && this.fn_clickBefore) // custom function hook to override changes in checkbox state
{ try { eval(this.fn_clickBefore) } catch(e) { displayMessage("Checkbox onClickBefore error: "+e.toString()); } }
if (this.id)
// save state in config AND cookie (only when ID starts with 'chk')
{ config.options[this.id]=this.checked; if (this.id.substr(0,3)=="chk") saveOptionCookie(this.id); }
if (this.srctid && this.srcpos>0 && (!this.id || this.id.substr(0,3)!="chk") && !this.tag && !this.field) {
// save state in tiddler content only if not using cookie, tag or field tracking
var t=store.getTiddler(this.srctid); // put X in original source tiddler (if any)
if (t && this.checked!=(t.text.substr(this.srcpos,1).toUpperCase()=="X")) { // if changed
t.set(null,t.text.substr(0,this.srcpos)+(this.checked?"X":"_")+t.text.substr(this.srcpos+1),null,null,t.tags);
if (!story.isDirty(t.title)) story.refreshTiddler(t.title,null,true);
store.setDirty(true);
}
}
if (this.field) {
if (this.checked && !store.tiddlerExists(this.tiddler))
store.saveTiddler(this.tiddler,this.tiddler,"",config.options.txtUserName,new Date());
// set the field value in the target tiddler
store.setValue(this.tiddler,this.field,this.checked?"true":"false");
// DEBUG: displayMessage(this.field+"@"+this.tiddler+" is "+this.checked);
}
if (this.tag) {
if (this.checked && !store.tiddlerExists(this.tiddler))
store.saveTiddler(this.tiddler,this.tiddler,"",config.options.txtUserName,new Date());
var t=store.getTiddler(this.tiddler);
if (t) {
var tagged=(t.tags && t.tags.indexOf(this.tag)!=-1);
if (this.checked && !tagged) { t.tags.push(this.tag); store.setDirty(true); }
if (!this.checked && tagged) { t.tags.splice(t.tags.indexOf(this.tag),1); store.setDirty(true); }
}
// if tag state has been changed, update display of corresponding tiddlers (unless they are in edit mode...)
if (this.checked!=tagged) {
if (this.refresh.tagged) {
if (!story.isDirty(this.tiddler)) // the TAGGED tiddler in view mode
story.refreshTiddler(this.tiddler,null,true);
else // the TAGGED tiddler in edit mode (with tags field)
config.macros.checkbox.refreshEditorTagField(this.tiddler,this.tag,this.checked);
}
if (this.refresh.tagging)
if (!story.isDirty(this.tag)) story.refreshTiddler(this.tag,null,true); // the TAGGING tiddler
}
}
if (!this.init && this.fn_clickAfter) // custom function hook to react to changes in checkbox state
{ try { eval(this.fn_clickAfter) } catch(e) { displayMessage("Checkbox onClickAfter error: "+e.toString()); } }
// refresh containing tiddler (but not during initial rendering, or we get an infinite loop!) (and not when editing container)
if (!this.init && this.refresh.container && this.container!=this.tiddler)
if (!story.isDirty(this.container)) story.refreshTiddler(this.container,null,true); // the tiddler CONTAINING the checkbox
return true;
},
refreshEditorTagField: function(title,tag,set) {
var tagfield=story.getTiddlerField(title,"tags");
if (!tagfield||tagfield.getAttribute("edit")!="tags") return; // if no tags field in editor (i.e., custom template)
var tags=tagfield.value.readBracketedList();
if (tags.contains(tag)==set) return; // if no change needed
if (set) tags.push(tag); // add tag
else tags.splice(tags.indexOf(tag),1); // remove tag
for (var t=0;t<tags.length;t++) tags[t]=String.encodeTiddlyLink(tags[t]);
tagfield.value=tags.join(" "); // reassemble tag string (with brackets as needed)
return;
}
}
//}}}
{{squote{<<newTiddler tag:'Church life and participation' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Church life and participation")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
Background: #fff
Foreground: #000
PrimaryPale: #ddddff
PrimaryLight: #110077
PrimaryMid: #110077
PrimaryDark: #014
SecondaryPale: #7788bb
SecondaryLight: #5566aa
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
{{squote{<<newTiddler tag:'Concern over apathy' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Concern over apathy")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
/***
|Name|CoreTweaks|
|Source|http://www.TiddlyTools.com/#CoreTweaks|
|Version||
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.2.0|
|Type|plugin|
|Description|a small collection of overrides to TW core functions|
This tiddler contains small changes to TW core functions that correct or enhance standard features or behaviors.
***/
//{{{
// calculate TW version number - used to determine which tweaks should be applied
var ver=version.major+version.minor/10+version.revision/100;
//}}}
/***
----
***/
// // to be fixed in 2.6.0:
// // {{block{
/***
!!!1151 adjust popup placement when root element is in scrolled DIV
***/
// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/1151
When a popup link is placed inside a DIV with style "overflow:scroll" or "overflow:auto" and that DIV is then scrolled, the position of the resulting popup appears further down the page that intended, because it is not adjusting for the relative scroll offset of the containing DIV. This tweak patches the Popup.place() function to calculate and subtract the current scroll offset from the computed popup position, so that it appears in the correct location on the page.
Test case: //(scroll to the bottom of this DIV and click on "test popup")//
{{groupbox{
<<tiddler ScrollBox with: CoreTweaks##1151test 12em>>}}}/%
!1151test
<<tiddler About>>
<<showPopup tiddler:About label:"test popup" tip:About popupClass:sticky>>
!end
%/
***/
//{{{
window.findScrollOffsetX=function(obj) {
var x=0;
while(obj) {
if (obj.scrollLeft && obj.nodeName!='HTML')
x+=obj.scrollLeft;
obj=obj.parentNode;
}
return -x;
}
window.findScrollOffsetY=function(obj) {
var y=0;
while(obj) {
if (obj.scrollTop && obj.nodeName!='HTML')
y+=obj.scrollTop;
obj=obj.parentNode;
}
return -y;
}
var fn=Popup.place.toString();
if (fn.indexOf('findScrollOffsetX')==-1) { // only once
fn=fn.replace(/var\s*rootLeft\s*=/,'var rootLeft = window.findScrollOffsetX(root) +');
fn=fn.replace(/var\s*rootTop\s*=/,'var rootTop = window.findScrollOffsetY(root) +');
eval('Popup.place='+fn);
}
//}}}
// // }}}}}}// // {{block{
/***
!!!1147 tiddler macro with params does not refresh
***/
// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/1147
when the {{{<<tiddler SomeTiddler>>}}} macro is handled, the resulting span has extra attributes: {{{refresh='content'}}} and {{{tiddler='SomeTiddler'}}}. If SomeTiddler is changed, {{{store.notify('SomeTiddler')}}} triggers {{{refreshDisplay()}}}, which automatically re-renders transcluded content in any span that has these extra attributes. However, when additional arguments are passed by using {{{<<tiddler SomeTiddler with: arg arg arg ...>>}}} then the resulting span does NOT get the extra attributes noted above and, as a consequence, the transcluded content is not being refreshed, even though the underlying tiddler has changed
To correct this, in {{{config.macros.tiddler.handler}}}:
*set the 'refresh' and 'tiddler' attributes even when arguments are present in the macro
*store the arguments themselves in an attribute (e.g, 'args'), using as a space-separated, bracketed list
Then, in {{{config.refreshers.content}}}:
*retrieve the stored arguments (if any) and the tiddler source
*substitute arguments into source and re-render the span with the updated content
***/
//{{{
config.refreshers.content=function(e,changeList) {
var title = e.getAttribute("tiddler");
var force = e.getAttribute("force");
var args = e.getAttribute("args"); // ADDED
if(force != null || changeList == null || changeList.indexOf(title) != -1) {
removeChildren(e);
// wikify(store.getTiddlerText(title,""),e,null,store.fetchTiddler(title)); // REMOVED
config.macros.tiddler.transclude(e,title,args); // ADDED
return true;
} else
return false;
};
config.macros.tiddler.handler=function(place,macroName,params,wikifier,paramString,tiddler) {
params = paramString.parseParams("name",null,true,false,true);
var names = params[0]["name"];
var tiddlerName = names[0];
var className = names[1] || null;
var args = params[0]["with"];
var wrapper = createTiddlyElement(place,"span",null,className);
// if(!args) { // REMOVED
wrapper.setAttribute("refresh","content");
wrapper.setAttribute("tiddler",tiddlerName);
// } // REMOVED
if(args!==undefined) wrapper.setAttribute("args",'[['+args.join(']] [[')+']]'); // ADDED
this.transclude(wrapper,tiddlerName,args); // REFACTORED TO ...tiddler.transclude
}
// REFACTORED FROM ...tiddler.handler
config.macros.tiddler.transclude=function(wrapper,tiddlerName,args) {
var text = store.getTiddlerText(tiddlerName); if (!text) return;
var stack = config.macros.tiddler.tiddlerStack;
if(stack.indexOf(tiddlerName) !== -1) return;
stack.push(tiddlerName);
try {
if (typeof args == "string") args=args.readBracketedList(); // ADDED
var n = args ? Math.min(args.length,9) : 0;
for(var i=0; i<n; i++) {
var placeholderRE = new RegExp("\\$" + (i + 1),"mg");
text = text.replace(placeholderRE,args[i]);
}
config.macros.tiddler.renderText(wrapper,text,tiddlerName,null); // REMOVED UNUSED 'params'
} finally {
stack.pop();
}
};
//}}}
// // }}}}}}// // {{block{
/***
!!!1134 allow leading whitespace in section headings / TBD handle shadow tiddler sections
***/
// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/1134
This tweak REPLACES and extends {{{store.getTiddlerText()}}} so it can return sections defined in shadow tiddlers as well as permitting use of leading whitespace in section headings.
***/
//{{{
TiddlyWiki.prototype.getTiddlerText = function(title,defaultText)
{
if(!title) return defaultText;
var parts = title.split(config.textPrimitives.sectionSeparator);
var title = parts[0];
var section = parts[1];
var parts = title.split(config.textPrimitives.sliceSeparator);
var title = parts[0];
var slice = parts[1]?this.getTiddlerSlice(title,parts[1]):null;
if(slice) return slice;
var tiddler = this.fetchTiddler(title);
var text = defaultText;
if(this.isShadowTiddler(title))
text = this.getShadowTiddlerText(title);
if(tiddler)
text = tiddler.text;
if(!section) return text;
var re = new RegExp("(^!{1,6}[ \t]*" + section.escapeRegExp() + "[ \t]*\n)","mg");
re.lastIndex = 0;
var match = re.exec(text);
if(match) {
var t = text.substr(match.index+match[1].length);
var re2 = /^!/mg;
re2.lastIndex = 0;
match = re2.exec(t); //# search for the next heading
if(match)
t = t.substr(0,match.index-1);//# don't include final \n
return t;
}
return defaultText;
};
//}}}
// // }}}}}}// // {{block{
/***
!!!824 ~WindowTitle - alternative to combined ~SiteTitle/~SiteSubtitle in window titlebar
***/
// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/824 - OPEN
This tweak allows definition of an optional [[WindowTitle]] tiddler that, when present, provides alternative text for display in the browser window's titlebar, instead of using the combined text content from [[SiteTitle]] and [[SiteSubtitle]] (which will still be displayed as usual in the TiddlyWiki document header area).
Note: this ticket replaces http://trac.tiddlywiki.org/ticket/401 (closed), which proposed using a custom [[PageTitle]] tiddler for this purpose. ''If you were using the previous '401 ~PageTitle' tweak, you will need to rename [[PageTitle]] to [[WindowTitle]] to continue to use your custom window title text''
***/
//{{{
config.shadowTiddlers.WindowTitle='<<tiddler SiteTitle>> - <<tiddler SiteSubtitle>>';
window.getPageTitle=function() { return wikifyPlain('WindowTitle'); }
store.addNotification('WindowTitle',refreshPageTitle); // so title stays in sync with tiddler changes
//}}}
// // }}}}}}// // {{block{
/***
!!!471 'creator' field for new tiddlers
***/
// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/471 - OPEN
This tweak HIJACKS the core's saveTiddler() function to automatically add a 'creator' field to a tiddler when it is FIRST created. You can use """<<view creator>>""" (or """<<view creator wikified>>""" if you prefer) to show this value embedded directly within the tiddler content, or {{{<span macro="view creator"></span>}}} in the ViewTemplate and/or EditTemplate to display the creator value in each tiddler.
***/
//{{{
// hijack saveTiddler()
TiddlyWiki.prototype.CoreTweaks_creatorSaveTiddler=TiddlyWiki.prototype.saveTiddler;
TiddlyWiki.prototype.saveTiddler=function(title,newTitle,newBody,modifier,modified,tags,fields)
{
var existing=store.tiddlerExists(title);
var tiddler=this.CoreTweaks_creatorSaveTiddler.apply(this,arguments);
if (!existing) store.setValue(title,'creator',config.options.txtUserName);
return tiddler;
}
//}}}
// // }}}}}}
// // fixed in ~TW2.4.3
// // {{block{
/***
!!!444 'tiddler' and 'place' - global variables for use in computed macro parameters
***/
// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/444 - CLOSED:FIXED - TW2.4.3 - http://trac.tiddlywiki.org/changeset/8367
When invoking a macro, this tweak makes the current containing tiddler object and DOM rendering location available as global variables (window.tiddler and window.place, respectively). These globals can then be used within //computed macro parameters// to retrieve tiddler-relative and/or DOM-relative values or perform tiddler-specific side-effect functionality.
***/
//{{{
if (ver<2.43) {
window.coreTweaks_invokeMacro = window.invokeMacro;
window.invokeMacro = function(place,macro,params,wikifier,tiddler) {
var here=story.findContainingTiddler(place);
window.tiddler=here?store.getTiddler(here.getAttribute('tiddler')):tiddler;
window.place=place;
window.coreTweaks_invokeMacro.apply(this,arguments);
}
}
//}}}
// // }}}}}}
// // fixed in ~TW2.4.2:
// // {{block{
/***
!!!823 apply option values via paramifiers (e.g. #chk...and #txt...)
***/
// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/823 - CLOSED:FIXED - TW2.4.2 http://trac.tiddlywiki.org/changeset/7988
This tweak extends and ''//replaces//'' the core {{{invokeParamifier()}}} function to support use of ''option paramifiers'' that set TiddlyWiki option values on-the-fly, directly from a document URL.
If a paramifier begins with 'chk' (checkbox) or 'txt' (text field), it's value will be automatically stored in {{{config.options.*}}}, adding to or overriding any existing 'chk' or 'txt' option values that may have already been loaded from browser cookies and/or assigned by the TW core or plugin initialization functions using hard-coded default values. Note: option values that have been overriden by paramifiers are only applied during the current document session, and are not //automatically// retained. However, if you edit an overridden option value during that session, then the modified value is, of course, saved in a browser cookie, as usual.
***/
//{{{
if (ver<2.42) {
function invokeParamifier(params,handler)
{
if(!params || params.length == undefined || params.length <= 1)
return;
for(var t=1; t<params.length; t++) {
var p = config.paramifiers[params[t].name];
if(p && p[handler] instanceof Function)
p[handler](params[t].value);
else { // not a paramifier with handler()... check for an 'option' prefix
var h=config.optionHandlers[params[t].name.substr(0,3)];
if (h && h.set instanceof Function)
h.set(params[t].name,params[t].value);
}
}
}
}
//}}}
// // }}}}}}
// // closed: won't fix //(leave as core tweaks)//
// // {{block{
/***
!!!637 TiddlyLink tooltip - custom formatting
***/
// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/637 - CLOSED: WON'T FIX
This tweak modifies the tooltip format that appears when you mouseover a link to a tiddler. It adds an option to control the date format, as well as displaying the size of the tiddler (in bytes)
Tiddler link tooltip format:
{{stretch{<<option txtTiddlerLinkTootip>>}}}
^^where: %0=title, %1=username, %2=modification date, %3=size in bytes, %4=description slice^^
Tiddler link tooltip date format:
{{stretch{<<option txtTiddlerLinkTooltipDate>>}}}
***/
//{{{
config.messages.tiddlerLinkTooltip='%0 - %1, %2 (%3 bytes) - %4';
config.messages.tiddlerLinkTooltipDate='DDD, MMM DDth YYYY 0hh12:0mm AM';
config.options.txtTiddlerLinkTootip=
config.options.txtTiddlerLinkTootip||config.messages.tiddlerLinkTooltip;
config.options.txtTiddlerLinkTooltipDate=
config.options.txtTiddlerLinkTooltipDate||config.messages.tiddlerLinkTooltipDate;
Tiddler.prototype.getSubtitle = function() {
var modifier = this.modifier;
if(!modifier) modifier = config.messages.subtitleUnknown;
var modified = this.modified;
if(modified) modified = modified.formatString(config.options.txtTiddlerLinkTooltipDate);
else modified = config.messages.subtitleUnknown;
var descr=store.getTiddlerSlice(this.title,'Description')||'';
return config.options.txtTiddlerLinkTootip.format([this.title,modifier,modified,this.text.length,descr]);
};
//}}}
// // }}}}}}// // {{block{
/***
!!!607 add HREF link on permaview command
***/
// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/607 - CLOSED: WON'T FIX
This tweak automatically sets the HREF for the 'permaview' sidebar command link so you can use the 'right click' context menu for faster, easier bookmarking. Note that this does ''not'' automatically set the permaview in the browser's current location URL... it just sets the HREF on the command link. You still have to click the link to apply the permaview.
***/
//{{{
config.macros.permaview.handler = function(place)
{
var btn=createTiddlyButton(place,this.label,this.prompt,this.onClick);
addEvent(btn,'mouseover',this.setHREF);
addEvent(btn,'focus',this.setHREF);
};
config.macros.permaview.setHREF = function(event){
var links = [];
story.forEachTiddler(function(title,element) {
links.push(String.encodeTiddlyLink(title));
});
var newURL=document.location.href;
var hashPos=newURL.indexOf('#');
if (hashPos!=-1) newURL=newURL.substr(0,hashPos);
this.href=newURL+'#'+encodeURIComponent(links.join(' '));
}
//}}}
// // }}}}}}// // {{block{
/***
!!!458 add permalink-like HREFs on internal TiddlyLinks
***/
// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/458 - CLOSED: WON'T FIX
This tweak assigns a permalink-like HREF to internal Tiddler links (which normally do not have any HREF defined). This permits the link's context menu (right-click) to include 'open link in another window/tab' command. Based on a request from Dustin Spicuzza.
***/
//{{{
window.coreTweaks_createTiddlyLink=window.createTiddlyLink;
window.createTiddlyLink=function(place,title,includeText,theClass,isStatic,linkedFromTiddler,noToggle)
{
// create the core button, then add the HREF (to internal links only)
var link=window.coreTweaks_createTiddlyLink.apply(this,arguments);
if (!isStatic)
link.href=document.location.href.split('#')[0]+'#'+encodeURIComponent(String.encodeTiddlyLink(title));
return link;
}
//}}}
// // }}}}}}
// // open tickets:
// // {{block{
/***
!!!608/609/610 toolbars - toggles, separators and transclusion
***/
// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/608 - OPEN (more/less toggle)
http://trac.tiddlywiki.org/ticket/609 - OPEN (separators)
http://trac.tiddlywiki.org/ticket/610 - OPEN (wikify tiddler/slice/section content)
This combination tweak extends the """<<toolbar>>""" macro to add use of '<' to insert a 'less' menu command (the opposite of '>' == 'more'), as well as use of '*' to insert linebreaks and "!" to insert a vertical line separator between toolbar items. In addition, this tweak add the ability to use references to tiddlernames, slices, or sections and render their content inline within the toolbar, allowing easy creation of new toolbar commands using TW content (such as macros, links, inline scripts, etc.)
To produce a one-line style, with "less" at the end, use
| ViewToolbar| foo bar baz > yabba dabba doo < |
or to use a two-line style with more/less toggle:
| ViewToolbar| foo bar baz > < * yabba dabba doo |
***/
//{{{
merge(config.macros.toolbar,{
moreLabel: 'more\u25BC',
morePrompt: 'Show additional commands',
lessLabel: '\u25C4less',
lessPrompt: 'Hide additional commands',
separator: '|'
});
config.macros.toolbar.onClickMore = function(ev) {
var e = this.nextSibling;
e.style.display = 'inline'; // show menu
this.style.display = 'none'; // hide button
return false;
};
config.macros.toolbar.onClickLess = function(ev) {
var e = this.parentNode;
var m = e.previousSibling;
e.style.display = 'none'; // hide menu
m.style.display = 'inline'; // show button
return false;
};
config.macros.toolbar.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
for(var t=0; t<params.length; t++) {
var c = params[t];
switch(c) {
case '!': // ELS - SEPARATOR (added)
createTiddlyText(place,this.separator);
break;
case '*': // ELS - LINEBREAK (added)
createTiddlyElement(place,'BR');
break;
case '<': // ELS - LESS COMMAND (added)
var btn = createTiddlyButton(place,
this.lessLabel,this.lessPrompt,config.macros.toolbar.onClickLess,'moreCommand');
break;
case '>':
var btn = createTiddlyButton(place,
this.moreLabel,this.morePrompt,config.macros.toolbar.onClickMore,'moreCommand');
var e = createTiddlyElement(place,'span',null,'moreCommand');
e.style.display = 'none';
place = e;
break;
default:
var theClass = '';
switch(c.substr(0,1)) {
case '+':
theClass = 'defaultCommand';
c = c.substr(1);
break;
case '-':
theClass = 'cancelCommand';
c = c.substr(1);
break;
}
if(c in config.commands)
this.createCommand(place,c,tiddler,theClass);
else { // ELS - WIKIFY TIDDLER/SLICE/SECTION (added)
if (c.substr(0,1)=='~') c=c.substr(1); // ignore leading ~
var txt=store.getTiddlerText(c);
if (txt) {
// trim any leading/trailing newlines
txt=txt.replace(/^\n*/,'').replace(/\n*$/,'');
// trim PRE format wrapper if any
txt=txt.replace(/^\{\{\{\n/,'').replace(/\n\}\}\}$/,'');
// render content into toolbar
wikify(txt,createTiddlyElement(place,'span'),null,tiddler);
}
} // ELS - end WIKIFY CONTENT
break;
}
}
};
//}}}
// // }}}}}}// // {{block{
/***
!!!529 IE fixup - case-sensitive element lookup of tiddler elements
***/
// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/529 - OPEN
This tweak hijacks the standard browser function, document.getElementById(), to work-around the case-INsensitivity error in Internet Explorer (all versions up to and including IE7) //''Note: This tweak is only applied when using IE, and only for lookups of rendered tiddler elements within the containing 'tiddlerDisplay' element.''//
***/
//{{{
if (config.browser.isIE) {
document.coreTweaks_coreGetElementById=document.getElementById;
document.getElementById=function(id) {
var e=document.coreTweaks_coreGetElementById(id);
if (!e || !e.parentNode || e.parentNode.id!='tiddlerDisplay') return e;
for (var i=0; i<e.parentNode.childNodes.length; i++)
if (id==e.parentNode.childNodes[i].id) return e.parentNode.childNodes[i];
return null;
};
}
//}}}
// // }}}}}}// // {{block{
/***
!!!890 add conditional test to """<<tiddler>>""" macro
***/
// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/890 - OPEN
This tweak extends the {{{<<tiddler>>}}} macro syntax so you can include a javascript-based //test expression// to determine if the tiddler transclusion should be performed:
{{{
<<tiddler TiddlerName if:{{...}} with: param param etc.>>
}}}
If the test is ''true'', then the tiddler is transcluded as usual. If the test is ''false'', then the transclusion is skipped and //no output is produced//.
***/
//{{{
config.macros.tiddler.if_handler = config.macros.tiddler.handler;
config.macros.tiddler.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{
params = paramString.parseParams('name',null,true,false,true);
if (!getParam(params,'if',true)) return;
this.if_handler.apply(this,arguments);
};
//}}}
// // }}}}}}// // {{block{
/***
!!!831 backslash-quoting for embedding newlines in 'line-mode' formats
***/
// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/831 - OPEN
This tweak pre-processes source content to convert 'double-backslash-newline' into {{{<br>}}} before wikify(), so that literal newlines can be embedded in line-mode wiki syntax (e.g., tables, bullets, etc.)
***/
//{{{
window.coreWikify = wikify;
window.wikify = function(source,output,highlightRegExp,tiddler)
{
if (source) arguments[0]=source.replace(/\\\\\n/mg,'<br>');
coreWikify.apply(this,arguments);
}
//}}}
// // }}}}}}// // {{block{
/***
!!!683 FireFox3 Import bug: 'browse' button replacement
***/
// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/683 - OPEN
The web standard 'type=file' input control that has been used as a local path/file picker for TiddlyWiki no longer works as expected in FireFox3, which has, for security reasons, limited javascript access to this control so that *no* local filesystem path information can be revealed, even when it is intentional and necessary, as it is with TiddlyWiki. This tweak provides alternative HTML source that patches the backstage import panel. It replaces the 'type=file' input control with a text+button combination of controls that invokes a system-native secure 'file-chooser' dialog box to provide TiddlyWiki with access to a complete path+filename so that TW functions properly locate user-selected local files.
>Note: ''This tweak also requires http://trac.tiddlywiki.org/ticket/604 - cross-platform askForFilename()''
***/
//{{{
if (window.Components) {
var fixhtml='<input name="txtBrowse" style="width:30em"><input type="button" value="..."'
+' onClick="window.browseForFilename(this.previousSibling,true)">';
var cmi=config.macros.importTiddlers;
cmi.step1Html=cmi.step1Html.replace(/<input type='file' size=50 name='txtBrowse'>/,fixhtml);
}
merge(config.messages,{selectFile:'Please enter or select a file'}); // ready for I18N translation
window.browseForFilename=function(target,mustExist) { // note: both params are optional
var msg=config.messages.selectFile;
if (target && target.title) msg=target.title; // use target field tooltip (if any) as dialog prompt text
// get local path for current document
var path=getLocalPath(document.location.href);
var p=path.lastIndexOf('/'); if (p==-1) p=path.lastIndexOf('\\'); // Unix or Windows
if (p!=-1) path=path.substr(0,p+1); // remove filename, leave trailing slash
var file=''
var result=window.askForFilename(msg,path,file,mustExist); // requires #604
if (target && result.length) // set target field and trigger handling
{ target.value=result; target.onchange(); }
return result;
}
//}}}
// // }}}}}}// // {{block{
/***
!!!604 cross-platform askForFilename()
***/
// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/604 - OPEN
invokes a system-native secure 'file-chooser' dialog box to provide TiddlyWiki with access to a complete path+filename so that TW functions properly locate user-selected local files.
***/
//{{{
window.askForFilename=function(msg,path,file,mustExist) {
var r = window.mozAskForFilename(msg,path,file,mustExist);
if(r===null || r===false)
r = window.ieAskForFilename(msg,path,file,mustExist);
if(r===null || r===false)
r = window.javaAskForFilename(msg,path,file,mustExist);
if(r===null || r===false)
r = prompt(msg,path+file);
return r||'';
}
window.mozAskForFilename=function(msg,path,file,mustExist) {
if(!window.Components) return false;
try {
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
var nsIFilePicker = window.Components.interfaces.nsIFilePicker;
var picker = Components.classes['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);
picker.init(window, msg, mustExist?nsIFilePicker.modeOpen:nsIFilePicker.modeSave);
var thispath = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
thispath.initWithPath(path);
picker.displayDirectory=thispath;
picker.defaultExtension='html';
picker.defaultString=file;
picker.appendFilters(nsIFilePicker.filterAll|nsIFilePicker.filterText|nsIFilePicker.filterHTML);
if (picker.show()!=nsIFilePicker.returnCancel)
var result=picker.file.path;
}
catch(ex) { displayMessage(ex.toString()); }
return result;
}
window.ieAskForFilename=function(msg,path,file,mustExist) {
if(!config.browser.isIE) return false;
try {
var s = new ActiveXObject('UserAccounts.CommonDialog');
s.Filter='All files|*.*|Text files|*.txt|HTML files|*.htm;*.html|';
s.FilterIndex=3; // default to HTML files;
s.InitialDir=path;
s.FileName=file;
return s.showOpen()?s.FileName:'';
}
catch(ex) { displayMessage(ex.toString()); }
return result;
}
window.javaAskForFilename=function(msg,path,file,mustExist) {
if(!document.applets['TiddlySaver']) return false;
// TBD: implement java-based askFile(...) function
try { return document.applets['TiddlySaver'].askFile(msg,path,file,mustExist); }
catch(ex) { displayMessage(ex.toString()); }
}
//}}}
// // }}}}}}// // {{block{
/***
!!!657 wrap tabs onto multiple lines
***/
// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/657 - OPEN
This tweak inserts an extra space element following each tab, allowing them to wrap onto multiple lines if needed.
***/
//{{{
config.macros.tabs.handler = function(place,macroName,params)
{
var cookie = params[0];
var numTabs = (params.length-1)/3;
var wrapper = createTiddlyElement(null,'div',null,'tabsetWrapper ' + cookie);
var tabset = createTiddlyElement(wrapper,'div',null,'tabset');
tabset.setAttribute('cookie',cookie);
var validTab = false;
for(var t=0; t<numTabs; t++) {
var label = params[t*3+1];
var prompt = params[t*3+2];
var content = params[t*3+3];
var tab = createTiddlyButton(tabset,label,prompt,this.onClickTab,'tab tabUnselected');
createTiddlyElement(tab,'span',null,null,' ',{style:'font-size:0pt;line-height:0px'}); // ELS
tab.setAttribute('tab',label);
tab.setAttribute('content',content);
tab.title = prompt;
if(config.options[cookie] == label)
validTab = true;
}
if(!validTab)
config.options[cookie] = params[1];
place.appendChild(wrapper);
this.switchTab(tabset,config.options[cookie]);
};
//}}}
// // }}}}}}// // {{block{
/***
!!!628 hide 'no such macro' errors
***/
// // {{groupbox small{
/***
http://trac.tiddlywiki.org/ticket/628 - OPEN
When invoking a macro that is not defined, this tweak prevents the display of the 'error in macro... no such macro' message. This is useful when rendering tiddler content or templates that reference macros that are defined by //optional// plugins that have not been installed in the current document.
<<option chkHideMissingMacros>> hide 'no such macro' error messages
***/
//{{{
if (config.options.chkHideMissingMacros===undefined)
config.options.chkHideMissingMacros=false;
window.coreTweaks_missingMacro_invokeMacro = window.invokeMacro;
window.invokeMacro = function(place,macro,params,wikifier,tiddler) {
if (!config.macros[macro] || !config.macros[macro].handler)
if (config.options.chkHideMissingMacros) return;
window.coreTweaks_missingMacro_invokeMacro.apply(this,arguments);
}
//}}}
// // }}}}}}
// // <<foldHeadings>>
[[Welcome to the Random life insight button!]]
{{squote{<<newTiddler tag:'Discrimination' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Discrimination")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div macro='tiddler QuickEditToolbar'></div>
<div class='editor' macro='edit tags'></div>
<div class='editor' macro='edit text'></div>
<div macro='edit tagcolor' style="margin-top:1em;">
<span class='label' style="margin-right:10px;">Tag Color (valid css!):</label>
</div>
<!--}}}-->
{{squote{<<newTiddler tag:'Emotions (general)' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Emotions (general)")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
{{squote{<<newTiddler tag:'English word origins' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("English word origins")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
{{squote{<<newTiddler tag:'Epistemology' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Epistemology")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
{{squote{<<newTiddler tag:'Ethics' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Ethics")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
{{squote{<<newTiddler tag:'Evangelism' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Evangelism")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
{{squote{<<newTiddler tag:'Fear, worry and anxiety' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Fear, worry and anxiety")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
/***
|Name|FontSizePlugin|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/#FontSizePlugin|
|Version|1.0|
|Requires|~TW2.x|
!Description:
Resize tiddler text on the fly. The text size is remembered between sessions by use of a cookie.
You can customize the maximum and minimum allowed sizes.
(only affects tiddler content text, not any other text)
Also, you can load a TW file with a font-size specified in the url.
Eg: http://tw.lewcid.org/#font:110
!Demo:
Try using the font-size buttons in the sidebar, or in the MainMenu above.
!Installation:
Copy the contents of this tiddler to your TW, tag with systemConfig, save and reload your TW.
Then put {{{<<fontSize "font-size:">>}}} in your SideBarOptions tiddler, or anywhere else that you might like.
!Usage
{{{<<fontSize>>}}} results in <<fontSize>>
{{{<<fontSize font-size: >>}}} results in <<fontSize font-size:>>
!Customizing:
The buttons and prefix text are wrapped in a span with class fontResizer, for easy css styling.
To change the default font-size, and the maximum and minimum font-size allowed, edit the config.fontSize.settings section of the code below.
!Notes:
This plugin assumes that the initial font-size is 100% and then increases or decreases the size by 10%. This stepsize of 10% can also be customized.
!History:
*27-07-06, version 1.0 : prevented double clicks from triggering editing of containing tiddler.
*25-07-06, version 0.9
!Code
***/
//{{{
config.fontSize={};
//configuration settings
config.fontSize.settings =
{
defaultSize : 100, // all sizes in %
maxSize : 200,
minSize : 40,
stepSize : 10
};
//startup code
var fontSettings = config.fontSize.settings;
if (!config.options.txtFontSize)
{config.options.txtFontSize = fontSettings.defaultSize;
saveOptionCookie("txtFontSize");}
setStylesheet(".tiddler .viewer {font-size:"+config.options.txtFontSize+"%;}\n","fontResizerStyles");
setStylesheet("#contentWrapper .fontResizer .button {display:inline;font-size:105%; font-weight:bold; margin:0 1px; padding: 0 3px; text-align:center !important;}\n .fontResizer {margin:0 0.5em;}","fontResizerButtonStyles");
//macro
config.macros.fontSize={};
config.macros.fontSize.handler = function (place,macroName,params,wikifier,paramString,tiddler)
{
var sp = createTiddlyElement(place,"span",null,"fontResizer");
sp.ondblclick=this.onDblClick;
if (params[0])
createTiddlyText(sp,params[0]);
createTiddlyButton(sp,"+","increase font-size",this.incFont);
createTiddlyButton(sp,"=","reset font-size",this.resetFont);
createTiddlyButton(sp,"-","decrease font-size",this.decFont);
}
config.macros.fontSize.onDblClick = function (e)
{
if (!e) var e = window.event;
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
return false;
}
config.macros.fontSize.setFont = function ()
{
saveOptionCookie("txtFontSize");
setStylesheet(".tiddler .viewer {font-size:"+config.options.txtFontSize+"%;}\n","fontResizerStyles");
}
config.macros.fontSize.incFont=function()
{
if (config.options.txtFontSize < fontSettings.maxSize)
config.options.txtFontSize = (config.options.txtFontSize*1)+fontSettings.stepSize;
config.macros.fontSize.setFont();
}
config.macros.fontSize.decFont=function()
{
if (config.options.txtFontSize > fontSettings.minSize)
config.options.txtFontSize = (config.options.txtFontSize*1) - fontSettings.stepSize;
config.macros.fontSize.setFont();
}
config.macros.fontSize.resetFont=function()
{
config.options.txtFontSize=fontSettings.defaultSize;
config.macros.fontSize.setFont();
}
config.paramifiers.font =
{
onstart: function(v)
{
config.options.txtFontSize = v;
config.macros.fontSize.setFont();
}
};
//}}}
/***
|''Name:''|ForEachTiddlerPlugin|
|''Version:''|1.0.8 (2007-04-12)|
|''Source:''|http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin|
|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|
|''Licence:''|[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]|
|''Copyright:''|© 2005-2007 [[abego Software|http://www.abego-software.de]]|
|''TiddlyWiki:''|1.2.38+, 2.0|
|''Browser:''|Firefox 1.0.4+; Firefox 1.5; InternetExplorer 6.0|
!Description
Create customizable lists, tables etc. for your selections of tiddlers. Specify the tiddlers to include and their order through a powerful language.
''Syntax:''
|>|{{{<<}}}''forEachTiddler'' [''in'' //tiddlyWikiPath//] [''where'' //whereCondition//] [''sortBy'' //sortExpression// [''ascending'' //or// ''descending'']] [''script'' //scriptText//] [//action// [//actionParameters//]]{{{>>}}}|
|//tiddlyWikiPath//|The filepath to the TiddlyWiki the macro should work on. When missing the current TiddlyWiki is used.|
|//whereCondition//|(quoted) JavaScript boolean expression. May refer to the build-in variables {{{tiddler}}} and {{{context}}}.|
|//sortExpression//|(quoted) JavaScript expression returning "comparable" objects (using '{{{<}}}','{{{>}}}','{{{==}}}'. May refer to the build-in variables {{{tiddler}}} and {{{context}}}.|
|//scriptText//|(quoted) JavaScript text. Typically defines JavaScript functions that are called by the various JavaScript expressions (whereClause, sortClause, action arguments,...)|
|//action//|The action that should be performed on every selected tiddler, in the given order. By default the actions [[addToList|AddToListAction]] and [[write|WriteAction]] are supported. When no action is specified [[addToList|AddToListAction]] is used.|
|//actionParameters//|(action specific) parameters the action may refer while processing the tiddlers (see action descriptions for details). <<tiddler [[JavaScript in actionParameters]]>>|
|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|
See details see [[ForEachTiddlerMacro]] and [[ForEachTiddlerExamples]].
!Revision history
* v1.0.8 (2007-04-12)
** Adapted to latest TiddlyWiki 2.2 Beta importTiddlyWiki API (introduced with changeset 2004). TiddlyWiki 2.2 Beta builds prior to changeset 2004 are no longer supported (but TiddlyWiki 2.1 and earlier, of cause)
* v1.0.7 (2007-03-28)
** Also support "pre" formatted TiddlyWikis (introduced with TW 2.2) (when using "in" clause to work on external tiddlers)
* v1.0.6 (2006-09-16)
** Context provides "viewerTiddler", i.e. the tiddler used to view the macro. Most times this is equal to the "inTiddler", but when using the "tiddler" macro both may be different.
** Support "begin", "end" and "none" expressions in "write" action
* v1.0.5 (2006-02-05)
** Pass tiddler containing the macro with wikify, context object also holds reference to tiddler containing the macro ("inTiddler"). Thanks to SimonBaird.
** Support Firefox 1.5.0.1
** Internal
*** Make "JSLint" conform
*** "Only install once"
* v1.0.4 (2006-01-06)
** Support TiddlyWiki 2.0
* v1.0.3 (2005-12-22)
** Features:
*** Write output to a file supports multi-byte environments (Thanks to Bram Chen)
*** Provide API to access the forEachTiddler functionality directly through JavaScript (see getTiddlers and performMacro)
** Enhancements:
*** Improved error messages on InternetExplorer.
* v1.0.2 (2005-12-10)
** Features:
*** context object also holds reference to store (TiddlyWiki)
** Fixed Bugs:
*** ForEachTiddler 1.0.1 has broken support on win32 Opera 8.51 (Thanks to BrunoSabin for reporting)
* v1.0.1 (2005-12-08)
** Features:
*** Access tiddlers stored in separated TiddlyWikis through the "in" option. I.e. you are no longer limited to only work on the "current TiddlyWiki".
*** Write output to an external file using the "toFile" option of the "write" action. With this option you may write your customized tiddler exports.
*** Use the "script" section to define "helper" JavaScript functions etc. to be used in the various JavaScript expressions (whereClause, sortClause, action arguments,...).
*** Access and store context information for the current forEachTiddler invocation (through the build-in "context" object) .
*** Improved script evaluation (for where/sort clause and write scripts).
* v1.0.0 (2005-11-20)
** initial version
!Code
***/
//{{{
//============================================================================
//============================================================================
// ForEachTiddlerPlugin
//============================================================================
//============================================================================
// Only install once
if (!version.extensions.ForEachTiddlerPlugin) {
if (!window.abego) window.abego = {};
version.extensions.ForEachTiddlerPlugin = {
major: 1, minor: 0, revision: 8,
date: new Date(2007,3,12),
source: "http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin",
licence: "[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]",
copyright: "Copyright (c) abego Software GmbH, 2005-2007 (www.abego-software.de)"
};
// For backward compatibility with TW 1.2.x
//
if (!TiddlyWiki.prototype.forEachTiddler) {
TiddlyWiki.prototype.forEachTiddler = function(callback) {
for(var t in this.tiddlers) {
callback.call(this,t,this.tiddlers[t]);
}
};
}
//============================================================================
// forEachTiddler Macro
//============================================================================
version.extensions.forEachTiddler = {
major: 1, minor: 0, revision: 8, date: new Date(2007,3,12), provider: "http://tiddlywiki.abego-software.de"};
// ---------------------------------------------------------------------------
// Configurations and constants
// ---------------------------------------------------------------------------
config.macros.forEachTiddler = {
// Standard Properties
label: "forEachTiddler",
prompt: "Perform actions on a (sorted) selection of tiddlers",
// actions
actions: {
addToList: {},
write: {}
}
};
// ---------------------------------------------------------------------------
// The forEachTiddler Macro Handler
// ---------------------------------------------------------------------------
config.macros.forEachTiddler.getContainingTiddler = function(e) {
while(e && !hasClass(e,"tiddler"))
e = e.parentNode;
var title = e ? e.getAttribute("tiddler") : null;
return title ? store.getTiddler(title) : null;
};
config.macros.forEachTiddler.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
// config.macros.forEachTiddler.traceMacroCall(place,macroName,params,wikifier,paramString,tiddler);
if (!tiddler) tiddler = config.macros.forEachTiddler.getContainingTiddler(place);
// --- Parsing ------------------------------------------
var i = 0; // index running over the params
// Parse the "in" clause
var tiddlyWikiPath = undefined;
if ((i < params.length) && params[i] == "in") {
i++;
if (i >= params.length) {
this.handleError(place, "TiddlyWiki path expected behind 'in'.");
return;
}
tiddlyWikiPath = this.paramEncode((i < params.length) ? params[i] : "");
i++;
}
// Parse the where clause
var whereClause ="true";
if ((i < params.length) && params[i] == "where") {
i++;
whereClause = this.paramEncode((i < params.length) ? params[i] : "");
i++;
}
// Parse the sort stuff
var sortClause = null;
var sortAscending = true;
if ((i < params.length) && params[i] == "sortBy") {
i++;
if (i >= params.length) {
this.handleError(place, "sortClause missing behind 'sortBy'.");
return;
}
sortClause = this.paramEncode(params[i]);
i++;
if ((i < params.length) && (params[i] == "ascending" || params[i] == "descending")) {
sortAscending = params[i] == "ascending";
i++;
}
}
// Parse the script
var scriptText = null;
if ((i < params.length) && params[i] == "script") {
i++;
scriptText = this.paramEncode((i < params.length) ? params[i] : "");
i++;
}
// Parse the action.
// When we are already at the end use the default action
var actionName = "addToList";
if (i < params.length) {
if (!config.macros.forEachTiddler.actions[params[i]]) {
this.handleError(place, "Unknown action '"+params[i]+"'.");
return;
} else {
actionName = params[i];
i++;
}
}
// Get the action parameter
// (the parsing is done inside the individual action implementation.)
var actionParameter = params.slice(i);
// --- Processing ------------------------------------------
try {
this.performMacro({
place: place,
inTiddler: tiddler,
whereClause: whereClause,
sortClause: sortClause,
sortAscending: sortAscending,
actionName: actionName,
actionParameter: actionParameter,
scriptText: scriptText,
tiddlyWikiPath: tiddlyWikiPath});
} catch (e) {
this.handleError(place, e);
}
};
// Returns an object with properties "tiddlers" and "context".
// tiddlers holds the (sorted) tiddlers selected by the parameter,
// context the context of the execution of the macro.
//
// The action is not yet performed.
//
// @parameter see performMacro
//
config.macros.forEachTiddler.getTiddlersAndContext = function(parameter) {
var context = config.macros.forEachTiddler.createContext(parameter.place, parameter.whereClause, parameter.sortClause, parameter.sortAscending, parameter.actionName, parameter.actionParameter, parameter.scriptText, parameter.tiddlyWikiPath, parameter.inTiddler);
var tiddlyWiki = parameter.tiddlyWikiPath ? this.loadTiddlyWiki(parameter.tiddlyWikiPath) : store;
context["tiddlyWiki"] = tiddlyWiki;
// Get the tiddlers, as defined by the whereClause
var tiddlers = this.findTiddlers(parameter.whereClause, context, tiddlyWiki);
context["tiddlers"] = tiddlers;
// Sort the tiddlers, when sorting is required.
if (parameter.sortClause) {
this.sortTiddlers(tiddlers, parameter.sortClause, parameter.sortAscending, context);
}
return {tiddlers: tiddlers, context: context};
};
// Returns the (sorted) tiddlers selected by the parameter.
//
// The action is not yet performed.
//
// @parameter see performMacro
//
config.macros.forEachTiddler.getTiddlers = function(parameter) {
return this.getTiddlersAndContext(parameter).tiddlers;
};
// Performs the macros with the given parameter.
//
// @param parameter holds the parameter of the macro as separate properties.
// The following properties are supported:
//
// place
// whereClause
// sortClause
// sortAscending
// actionName
// actionParameter
// scriptText
// tiddlyWikiPath
//
// All properties are optional.
// For most actions the place property must be defined.
//
config.macros.forEachTiddler.performMacro = function(parameter) {
var tiddlersAndContext = this.getTiddlersAndContext(parameter);
// Perform the action
var actionName = parameter.actionName ? parameter.actionName : "addToList";
var action = config.macros.forEachTiddler.actions[actionName];
if (!action) {
this.handleError(parameter.place, "Unknown action '"+actionName+"'.");
return;
}
var actionHandler = action.handler;
actionHandler(parameter.place, tiddlersAndContext.tiddlers, parameter.actionParameter, tiddlersAndContext.context);
};
// ---------------------------------------------------------------------------
// The actions
// ---------------------------------------------------------------------------
// Internal.
//
// --- The addToList Action -----------------------------------------------
//
config.macros.forEachTiddler.actions.addToList.handler = function(place, tiddlers, parameter, context) {
// Parse the parameter
var p = 0;
// Check for extra parameters
if (parameter.length > p) {
config.macros.forEachTiddler.createExtraParameterErrorElement(place, "addToList", parameter, p);
return;
}
// Perform the action.
var list = document.createElement("ul");
place.appendChild(list);
for (var i = 0; i < tiddlers.length; i++) {
var tiddler = tiddlers[i];
var listItem = document.createElement("li");
list.appendChild(listItem);
createTiddlyLink(listItem, tiddler.title, true);
}
};
abego.parseNamedParameter = function(name, parameter, i) {
var beginExpression = null;
if ((i < parameter.length) && parameter[i] == name) {
i++;
if (i >= parameter.length) {
throw "Missing text behind '%0'".format([name]);
}
return config.macros.forEachTiddler.paramEncode(parameter[i]);
}
return null;
}
// Internal.
//
// --- The write Action ---------------------------------------------------
//
config.macros.forEachTiddler.actions.write.handler = function(place, tiddlers, parameter, context) {
// Parse the parameter
var p = 0;
if (p >= parameter.length) {
this.handleError(place, "Missing expression behind 'write'.");
return;
}
var textExpression = config.macros.forEachTiddler.paramEncode(parameter[p]);
p++;
// Parse the "begin" option
var beginExpression = abego.parseNamedParameter("begin", parameter, p);
if (beginExpression !== null)
p += 2;
var endExpression = abego.parseNamedParameter("end", parameter, p);
if (endExpression !== null)
p += 2;
var noneExpression = abego.parseNamedParameter("none", parameter, p);
if (noneExpression !== null)
p += 2;
// Parse the "toFile" option
var filename = null;
var lineSeparator = undefined;
if ((p < parameter.length) && parameter[p] == "toFile") {
p++;
if (p >= parameter.length) {
this.handleError(place, "Filename expected behind 'toFile' of 'write' action.");
return;
}
filename = config.macros.forEachTiddler.getLocalPath(config.macros.forEachTiddler.paramEncode(parameter[p]));
p++;
if ((p < parameter.length) && parameter[p] == "withLineSeparator") {
p++;
if (p >= parameter.length) {
this.handleError(place, "Line separator text expected behind 'withLineSeparator' of 'write' action.");
return;
}
lineSeparator = config.macros.forEachTiddler.paramEncode(parameter[p]);
p++;
}
}
// Check for extra parameters
if (parameter.length > p) {
config.macros.forEachTiddler.createExtraParameterErrorElement(place, "write", parameter, p);
return;
}
// Perform the action.
var func = config.macros.forEachTiddler.getEvalTiddlerFunction(textExpression, context);
var count = tiddlers.length;
var text = "";
if (count > 0 && beginExpression)
text += config.macros.forEachTiddler.getEvalTiddlerFunction(beginExpression, context)(undefined, context, count, undefined);
for (var i = 0; i < count; i++) {
var tiddler = tiddlers[i];
text += func(tiddler, context, count, i);
}
if (count > 0 && endExpression)
text += config.macros.forEachTiddler.getEvalTiddlerFunction(endExpression, context)(undefined, context, count, undefined);
if (count == 0 && noneExpression)
text += config.macros.forEachTiddler.getEvalTiddlerFunction(noneExpression, context)(undefined, context, count, undefined);
if (filename) {
if (lineSeparator !== undefined) {
lineSeparator = lineSeparator.replace(/\\n/mg, "\n").replace(/\\r/mg, "\r");
text = text.replace(/\n/mg,lineSeparator);
}
saveFile(filename, convertUnicodeToUTF8(text));
} else {
var wrapper = createTiddlyElement(place, "span");
wikify(text, wrapper, null/* highlightRegExp */, context.inTiddler);
}
};
// ---------------------------------------------------------------------------
// Helpers
// ---------------------------------------------------------------------------
// Internal.
//
config.macros.forEachTiddler.createContext = function(placeParam, whereClauseParam, sortClauseParam, sortAscendingParam, actionNameParam, actionParameterParam, scriptText, tiddlyWikiPathParam, inTiddlerParam) {
return {
place : placeParam,
whereClause : whereClauseParam,
sortClause : sortClauseParam,
sortAscending : sortAscendingParam,
script : scriptText,
actionName : actionNameParam,
actionParameter : actionParameterParam,
tiddlyWikiPath : tiddlyWikiPathParam,
inTiddler : inTiddlerParam, // the tiddler containing the <<forEachTiddler ...>> macro call.
viewerTiddler : config.macros.forEachTiddler.getContainingTiddler(placeParam) // the tiddler showing the forEachTiddler result
};
};
// Internal.
//
// Returns a TiddlyWiki with the tiddlers loaded from the TiddlyWiki of
// the given path.
//
config.macros.forEachTiddler.loadTiddlyWiki = function(path, idPrefix) {
if (!idPrefix) {
idPrefix = "store";
}
var lenPrefix = idPrefix.length;
// Read the content of the given file
var content = loadFile(this.getLocalPath(path));
if(content === null) {
throw "TiddlyWiki '"+path+"' not found.";
}
var tiddlyWiki = new TiddlyWiki();
// Starting with TW 2.2 there is a helper function to import the tiddlers
if (tiddlyWiki.importTiddlyWiki) {
if (!tiddlyWiki.importTiddlyWiki(content))
throw "File '"+path+"' is not a TiddlyWiki.";
tiddlyWiki.dirty = false;
return tiddlyWiki;
}
// The legacy code, for TW < 2.2
// Locate the storeArea div's
var posOpeningDiv = content.indexOf(startSaveArea);
var posClosingDiv = content.lastIndexOf(endSaveArea);
if((posOpeningDiv == -1) || (posClosingDiv == -1)) {
throw "File '"+path+"' is not a TiddlyWiki.";
}
var storageText = content.substr(posOpeningDiv + startSaveArea.length, posClosingDiv);
// Create a "div" element that contains the storage text
var myStorageDiv = document.createElement("div");
myStorageDiv.innerHTML = storageText;
myStorageDiv.normalize();
// Create all tiddlers in a new TiddlyWiki
// (following code is modified copy of TiddlyWiki.prototype.loadFromDiv)
var store = myStorageDiv.childNodes;
for(var t = 0; t < store.length; t++) {
var e = store[t];
var title = null;
if(e.getAttribute)
title = e.getAttribute("tiddler");
if(!title && e.id && e.id.substr(0,lenPrefix) == idPrefix)
title = e.id.substr(lenPrefix);
if(title && title !== "") {
var tiddler = tiddlyWiki.createTiddler(title);
tiddler.loadFromDiv(e,title);
}
}
tiddlyWiki.dirty = false;
return tiddlyWiki;
};
// Internal.
//
// Returns a function that has a function body returning the given javaScriptExpression.
// The function has the parameters:
//
// (tiddler, context, count, index)
//
config.macros.forEachTiddler.getEvalTiddlerFunction = function (javaScriptExpression, context) {
var script = context["script"];
var functionText = "var theFunction = function(tiddler, context, count, index) { return "+javaScriptExpression+"}";
var fullText = (script ? script+";" : "")+functionText+";theFunction;";
return eval(fullText);
};
// Internal.
//
config.macros.forEachTiddler.findTiddlers = function(whereClause, context, tiddlyWiki) {
var result = [];
var func = config.macros.forEachTiddler.getEvalTiddlerFunction(whereClause, context);
tiddlyWiki.forEachTiddler(function(title,tiddler) {
if (func(tiddler, context, undefined, undefined)) {
result.push(tiddler);
}
});
return result;
};
// Internal.
//
config.macros.forEachTiddler.createExtraParameterErrorElement = function(place, actionName, parameter, firstUnusedIndex) {
var message = "Extra parameter behind '"+actionName+"':";
for (var i = firstUnusedIndex; i < parameter.length; i++) {
message += " "+parameter[i];
}
this.handleError(place, message);
};
// Internal.
//
config.macros.forEachTiddler.sortAscending = function(tiddlerA, tiddlerB) {
var result =
(tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue)
? 0
: (tiddlerA.forEachTiddlerSortValue < tiddlerB.forEachTiddlerSortValue)
? -1
: +1;
return result;
};
// Internal.
//
config.macros.forEachTiddler.sortDescending = function(tiddlerA, tiddlerB) {
var result =
(tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue)
? 0
: (tiddlerA.forEachTiddlerSortValue < tiddlerB.forEachTiddlerSortValue)
? +1
: -1;
return result;
};
// Internal.
//
config.macros.forEachTiddler.sortTiddlers = function(tiddlers, sortClause, ascending, context) {
// To avoid evaluating the sortClause whenever two items are compared
// we pre-calculate the sortValue for every item in the array and store it in a
// temporary property ("forEachTiddlerSortValue") of the tiddlers.
var func = config.macros.forEachTiddler.getEvalTiddlerFunction(sortClause, context);
var count = tiddlers.length;
var i;
for (i = 0; i < count; i++) {
var tiddler = tiddlers[i];
tiddler.forEachTiddlerSortValue = func(tiddler,context, undefined, undefined);
}
// Do the sorting
tiddlers.sort(ascending ? this.sortAscending : this.sortDescending);
// Delete the temporary property that holds the sortValue.
for (i = 0; i < tiddlers.length; i++) {
delete tiddlers[i].forEachTiddlerSortValue;
}
};
// Internal.
//
config.macros.forEachTiddler.trace = function(message) {
displayMessage(message);
};
// Internal.
//
config.macros.forEachTiddler.traceMacroCall = function(place,macroName,params) {
var message ="<<"+macroName;
for (var i = 0; i < params.length; i++) {
message += " "+params[i];
}
message += ">>";
displayMessage(message);
};
// Internal.
//
// Creates an element that holds an error message
//
config.macros.forEachTiddler.createErrorElement = function(place, exception) {
var message = (exception.description) ? exception.description : exception.toString();
return createTiddlyElement(place,"span",null,"forEachTiddlerError","<<forEachTiddler ...>>: "+message);
};
// Internal.
//
// @param place [may be null]
//
config.macros.forEachTiddler.handleError = function(place, exception) {
if (place) {
this.createErrorElement(place, exception);
} else {
throw exception;
}
};
// Internal.
//
// Encodes the given string.
//
// Replaces
// "$))" to ">>"
// "$)" to ">"
//
config.macros.forEachTiddler.paramEncode = function(s) {
var reGTGT = new RegExp("\\$\\)\\)","mg");
var reGT = new RegExp("\\$\\)","mg");
return s.replace(reGTGT, ">>").replace(reGT, ">");
};
// Internal.
//
// Returns the given original path (that is a file path, starting with "file:")
// as a path to a local file, in the systems native file format.
//
// Location information in the originalPath (i.e. the "#" and stuff following)
// is stripped.
//
config.macros.forEachTiddler.getLocalPath = function(originalPath) {
// Remove any location part of the URL
var hashPos = originalPath.indexOf("#");
if(hashPos != -1)
originalPath = originalPath.substr(0,hashPos);
// Convert to a native file format assuming
// "file:///x:/path/path/path..." - pc local file --> "x:\path\path\path..."
// "file://///server/share/path/path/path..." - FireFox pc network file --> "\\server\share\path\path\path..."
// "file:///path/path/path..." - mac/unix local file --> "/path/path/path..."
// "file://server/share/path/path/path..." - pc network file --> "\\server\share\path\path\path..."
var localPath;
if(originalPath.charAt(9) == ":") // pc local file
localPath = unescape(originalPath.substr(8)).replace(new RegExp("/","g"),"\\");
else if(originalPath.indexOf("file://///") === 0) // FireFox pc network file
localPath = "\\\\" + unescape(originalPath.substr(10)).replace(new RegExp("/","g"),"\\");
else if(originalPath.indexOf("file:///") === 0) // mac/unix local file
localPath = unescape(originalPath.substr(7));
else if(originalPath.indexOf("file:/") === 0) // mac/unix local file
localPath = unescape(originalPath.substr(5));
else // pc network file
localPath = "\\\\" + unescape(originalPath.substr(7)).replace(new RegExp("/","g"),"\\");
return localPath;
};
// ---------------------------------------------------------------------------
// Stylesheet Extensions (may be overridden by local StyleSheet)
// ---------------------------------------------------------------------------
//
setStylesheet(
".forEachTiddlerError{color: #ffffff;background-color: #880000;}",
"forEachTiddler");
//============================================================================
// End of forEachTiddler Macro
//============================================================================
//============================================================================
// String.startsWith Function
//============================================================================
//
// Returns true if the string starts with the given prefix, false otherwise.
//
version.extensions["String.startsWith"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
String.prototype.startsWith = function(prefix) {
var n = prefix.length;
return (this.length >= n) && (this.slice(0, n) == prefix);
};
//============================================================================
// String.endsWith Function
//============================================================================
//
// Returns true if the string ends with the given suffix, false otherwise.
//
version.extensions["String.endsWith"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
String.prototype.endsWith = function(suffix) {
var n = suffix.length;
return (this.length >= n) && (this.right(n) == suffix);
};
//============================================================================
// String.contains Function
//============================================================================
//
// Returns true when the string contains the given substring, false otherwise.
//
version.extensions["String.contains"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
String.prototype.contains = function(substring) {
return this.indexOf(substring) >= 0;
};
//============================================================================
// Array.indexOf Function
//============================================================================
//
// Returns the index of the first occurance of the given item in the array or
// -1 when no such item exists.
//
// @param item [may be null]
//
version.extensions["Array.indexOf"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.indexOf = function(item) {
for (var i = 0; i < this.length; i++) {
if (this[i] == item) {
return i;
}
}
return -1;
};
//============================================================================
// Array.contains Function
//============================================================================
//
// Returns true when the array contains the given item, otherwise false.
//
// @param item [may be null]
//
version.extensions["Array.contains"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.contains = function(item) {
return (this.indexOf(item) >= 0);
};
//============================================================================
// Array.containsAny Function
//============================================================================
//
// Returns true when the array contains at least one of the elements
// of the item. Otherwise (or when items contains no elements) false is returned.
//
version.extensions["Array.containsAny"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.containsAny = function(items) {
for(var i = 0; i < items.length; i++) {
if (this.contains(items[i])) {
return true;
}
}
return false;
};
//============================================================================
// Array.containsAll Function
//============================================================================
//
// Returns true when the array contains all the items, otherwise false.
//
// When items is null false is returned (even if the array contains a null).
//
// @param items [may be null]
//
version.extensions["Array.containsAll"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.containsAll = function(items) {
for(var i = 0; i < items.length; i++) {
if (!this.contains(items[i])) {
return false;
}
}
return true;
};
} // of "install only once"
// Used Globals (for JSLint) ==============
// ... DOM
/*global document */
// ... TiddlyWiki Core
/*global convertUnicodeToUTF8, createTiddlyElement, createTiddlyLink,
displayMessage, endSaveArea, hasClass, loadFile, saveFile,
startSaveArea, store, wikify */
//}}}
/***
!Licence and Copyright
Copyright (c) abego Software ~GmbH, 2005 ([[www.abego-software.de|http://www.abego-software.de]])
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
Neither the name of abego Software nor the names of its contributors may be
used to endorse or promote products derived from this software without specific
prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.
***/
config.macros.getTagCount={
handler:function(place,macroName,params,wikifier,paramString,tiddler)
{
createTiddlyText(place,store.getTaggedTiddlers(params[0]).length);
}
}
<html><iframe src="http://www.giffmex.org/newsblog/?p=297" width="1000" height="780"
style="border: none;"></iframe></html>
''Glossary'' | [[@|Glossary]]
-----
<<forEachTiddler where 'tiddler.tags.contains("glossary")' write '"*[["+tiddler.title+"]]\n"'>>
{{squote{<<newTiddler tag:'Habits and discipline' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Habits and discipline")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
{{squote{<<newTiddler tag:'Happiness and joy' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Happiness and joy")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
{{squote{<<newTiddler tag:'Home organization' tag:'point' label:'New point' title:'pointWhat'>>}}}
*<<tiddler "pointOver is better toliet paper">>
''Insights on home, work and society'' | [[@|HomeWorkSocietyTOC]]
-----
''Home and family''
*[[Sexuality]] (<<getTagCount "Sexuality">>)
*[[Marriage and divorce]] (<<getTagCount "Marriage and divorce">>)
*[[Parenting]] (<<getTagCount "Parenting">>)
''Work, finances and marketplace''
*[[Calling and vocation]] (<<getTagCount "Calling and vocation">>)
*[[Personal finances]] (<<getTagCount "Personal finances">>)
*[[Priorities]] (<<getTagCount "Priorities">>)
*[[Time management]] (<<getTagCount "Time management">>)
*[[Motivation vs procrastination]] (<<getTagCount "Motivation vs procrastination">>)
*[[Travel tips]] (<<getTagCount "Travel tips">>)
''Society, culture and environment''
*[[Discrimination]] (<<getTagCount "Discrimination">>)
*[[Media criticism]] (<<getTagCount "Media criticism">>)
*[[Poverty]] (<<getTagCount "Poverty">>)
*[[Technology]] (<<getTagCount "Technology">>)
*[[War and peace]] (<<getTagCount "War and peace">>)
{{squote{<<newTiddler tag:'Humility over pride' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Humility over pride")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
/***
|Name|InlineJavascriptPlugin|
|Source|http://www.TiddlyTools.com/#InlineJavascriptPlugin|
|Documentation|http://www.TiddlyTools.com/#InlineJavascriptPluginInfo|
|Version|1.9.2|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|Insert Javascript executable code directly into your tiddler content.|
''Call directly into TW core utility routines, define new functions, calculate values, add dynamically-generated TiddlyWiki-formatted output'' into tiddler content, or perform any other programmatic actions each time the tiddler is rendered.
!!!!!Documentation
>see [[InlineJavascriptPluginInfo]]
!!!!!Revisions
<<<
2008.03.03 [1.9.2] corrected declaration of wikifyPlainText() for 'TW 2.1.x compatibility fallback' (fixes Safari "parse error")
2008.02.23 [1.9.1] in onclick function, use string instead of array for 'bufferedHTML' attribute on link element (fixes IE errors)
2008.02.21 [1.9.0] 'onclick' scripts now allow returned text (or document.write() calls) to be wikified into a span that immediately follows the onclick link. Also, added default 'return false' handling if no return value provided (prevents HREF from being triggered -- return TRUE to allow HREF to be processed). Thanks to Xavier Verges for suggestion and preliminary code.
|please see [[InlineJavascriptPluginInfo]] for additional revision details|
2005.11.08 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.inlineJavascript= {major: 1, minor: 9, revision: 2, date: new Date(2008,3,3)};
config.formatters.push( {
name: "inlineJavascript",
match: "\\<script",
lookahead: "\\<script(?: src=\\\"((?:.|\\n)*?)\\\")?(?: label=\\\"((?:.|\\n)*?)\\\")?(?: title=\\\"((?:.|\\n)*?)\\\")?(?: key=\\\"((?:.|\\n)*?)\\\")?( show)?\\>((?:.|\\n)*?)\\</script\\>",
handler: function(w) {
var lookaheadRegExp = new RegExp(this.lookahead,"mg");
lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = lookaheadRegExp.exec(w.source)
if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
var src=lookaheadMatch[1];
var label=lookaheadMatch[2];
var tip=lookaheadMatch[3];
var key=lookaheadMatch[4];
var show=lookaheadMatch[5];
var code=lookaheadMatch[6];
if (src) { // load a script library
// make script tag, set src, add to body to execute, then remove for cleanup
var script = document.createElement("script"); script.src = src;
document.body.appendChild(script); document.body.removeChild(script);
}
if (code) { // there is script code
if (show) // show inline script code in tiddler output
wikify("{{{\n"+lookaheadMatch[0]+"\n}}}\n",w.output);
if (label) { // create a link to an 'onclick' script
// add a link, define click handler, save code in link (pass 'place'), set link attributes
var link=createTiddlyElement(w.output,"a",null,"tiddlyLinkExisting",wikifyPlainText(label));
var fixup=code.replace(/document.write\s*\(/gi,'place.bufferedHTML+=(');
link.code="function _out(place){"+fixup+"\n};_out(this);"
link.tiddler=w.tiddler;
link.onclick=function(){
this.bufferedHTML="";
try{ var r=eval(this.code);
if(this.bufferedHTML.length || (typeof(r)==="string")&&r.length)
var s=this.parentNode.insertBefore(document.createElement("span"),this.nextSibling);
if(this.bufferedHTML.length)
s.innerHTML=this.bufferedHTML;
if((typeof(r)==="string")&&r.length) {
wikify(r,s,null,this.tiddler);
return false;
} else return r!==undefined?r:false;
} catch(e){alert(e.description||e.toString());return false;}
};
link.setAttribute("title",tip||"");
var URIcode='javascript:void(eval(decodeURIComponent(%22(function(){try{';
URIcode+=encodeURIComponent(encodeURIComponent(code.replace(/\n/g,' ')));
URIcode+='}catch(e){alert(e.description||e.toString())}})()%22)))';
link.setAttribute("href",URIcode);
link.style.cursor="pointer";
if (key) link.accessKey=key.substr(0,1); // single character only
}
else { // run inline script code
var fixup=code.replace(/document.write\s*\(/gi,'place.innerHTML+=(');
var code="function _out(place){"+fixup+"\n};_out(w.output);"
try { var out=eval(code); } catch(e) { out=e.description?e.description:e.toString(); }
if (out && out.length) wikify(out,w.output,w.highlightRegExp,w.tiddler);
}
}
w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
}
}
} )
//}}}
// // Backward-compatibility for TW2.1.x and earlier
//{{{
if (typeof(wikifyPlainText)=="undefined") window.wikifyPlainText=function(text,limit,tiddler) {
if(limit > 0) text = text.substr(0,limit);
var wikifier = new Wikifier(text,formatter,null,tiddler);
return wikifier.wikifyPlain();
}
//}}}
''Instructions'' | [[@|InstructionsTOC]]
-----
...my growing collection of various resources from a Christian perspective. Kind of like a Christian blog on steroids.
|bgcolor:#eeffbb;<<tiddler "Ways to browse">>|
|bgcolor:#ddeebb;<<tiddler "Other instructions">>|
|bgcolor:#eeffbb;<<tiddler "About us">>|
{{squote{<<newTiddler tag:'Intellect and learning' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Intellect and learning")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
{{squote{<<newTiddler tag:'Interpersonal insights (general)' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Interpersonal insights (general)")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
''Interpersonal insights'' | [[@|InterpersonalTOC]]
-----
''Interpersonal virtues and vices''
*[[Interpersonal insights (general)]] (<<getTagCount "Interpersonal insights (general)">>)
*[[Discrimination]] (<<getTagCount "Discrimination">>)
*[[Judgmentalism]] (<<getTagCount "Judgmentalism">>)
''Interpersonal skills''
*[[Understanding individuals]] (<<getTagCount "Understanding individuals">>)
*[[Understanding group dynamics]] (<<getTagCount "Understanding group dynamics">>)
*[[Be a better listener]] (<<getTagCount "Be a better listener">>)
{{squote{<<newTiddler tag:'Introduction to philosophy' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Introduction to philosophy")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
{{squote{<<newTiddler tag:'Judgmentalism' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Judgmentalism")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
{{squote{<<newTiddler tag:'Logic' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Logic")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
<link rel="icon" type="image/x-ico" href="http://www.giffmex.org/images/giffmexlogobrown.ico" />
<link rel="shortcut icon" type="image/x-icon" href="http://www.giffmex.org/images/giffmexlogobrown.ico" />
<link href='http://fonts.googleapis.com/css?family=Droid+Sans' rel='stylesheet' type='text/css'>
<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' /><style type="text/css">#contentWrapper {display:none;}</style><div id="SplashScreen" style="border: 3px solid #ccc; display: block; text-align: center; width: 320px; margin: 100px auto; padding: 50px; color:#000; font-size: 28px; font-family:Tahoma; background-color:#eee;"><b>The Random Life Insight Button</b> is loading<blink> ...</blink><br><br><span style="font-size: 14px; color:red;">Requires Javascript.</span></div>
<!--}}}-->
{{squote{<<newTiddler tag:'Marriage and divorce' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Marriage and divorce")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
{{squote{<<newTiddler tag:'Media criticism' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Media criticism")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
{{squote{<<newTiddler tag:'Metaphysics' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Metaphysics")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
{{squote{<<newTiddler tag:'Motivation vs procrastination' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Motivation vs procrastination")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
I’ll find my place
And I’ll get in line
Stop buckin’ the system
Tell my will to resign
I’ll bite my lip
And I’ll swallow my pride
Nothing’s ever gonna change
So it’s useless to fight
I’ll be one of the sheep
And I’ll do it their way
I’ll accept my defeat
I’ll submit and obey
Won’t be nobody’s martyr
Been burned enough before
I’ll just work a little harder
And comply a little more
I can only hope
There’ll come someone else
Someone with a bit more nerve
Someone who’ll ring the bells
Until then you can find me
Where I’m told I belong
If you hoped me the hero
Well I guess you were wrong
<html><iframe src="http://www.giffmex.org/blog/?p=31" width="1000" height="780"
style="border: none;"></iframe></html>
<html><iframe src="http://www.giffmex.org/blog/?p=8" width="1000" height="780"
style="border: none;"></iframe></html>
<html><iframe src="http://www.giffmex.org/blog/?p=119" width="1000" height="780"
style="border: none;"></iframe></html>
[img[http://www.giffmex.org/images/racist%20missionary%20cartoon.jpg]]
[img[http://www.giffmex.org/images/thumbs.jpg]]
<<forEachTiddler where 'tiddler.tags.contains("My cartoons")' write
'"<<tiddler [["+tiddler.title+"]]$))"'>>
[img[http://www.giffmex.org/images/headcount.jpg]]
The following are the principles which guide the formation of this database.
''Free access''
I believe that to facilitate the advancement of the church's mission and the upbuilding of church members, we need to make basic helpful Christian information widely available for free. We should be paying Christian scholars good salaries so they can help the church by giving it access to the information it needs to grow and witness, rather than pay them to write books for which they are paid, again, and to which Christians only have access to if they pay, again. There is plenty of room for publishing for profit. I'm not a Communist. But I believe every Christian should have free access to the basic knowledge on which the health of our spiritual faith depends. This database is meant to be a step toward such a reality.
''Uncluttered progress''
Currently to learn about a Bible passage or theological topic, one has to wade through paragraph after paragraph of dense text. My goal in this database is to present knowledge in short bursts (similar to Twitter posts or Facebook updates). Supporting materials for those who want to know more can be found by clicking links where provided. That way the reader gets just the basics at first, but has access to more information as needed.
''Visual appeal''
When faced with the choice between reading a book and browsing the Internet, the bright colors and excitement of the Internet often wins out (see cartoon below). I have tried to use ample white space and colorful tables to alleviate this problem as much as possible in the present database.
[img[http://scienceblogs.com/clock/upload/2007/01/internet-vs-research-paper.jpg]]
Taken from: http://scienceblogs.com/clock/upload/2007/01/internet-vs-research-paper.jpg
''Open-endedness''
This database is meant to be open-ended. The user should not assume that my lists on any topic contain everything there is to know about the subject. I will add to this database little by little, in random fashion, as the mood hits me. I may add content because I am researching a class, or because I want to free up space on my bookshelf. The user should not assume that lack of notes here means lack of knowledge or lack of interest on my part, but lack of time. But the good news is that as I organize my notes and thoughts, you will be the beneficiary.
Dave Cheong wrote an article on timeboxing that helped me a lot (see the link below). Here is my summary of the most helpful points of his article:
*Timeboxing is the practice of setting a specific amount of time (e.g., 30 minutes) that we will dedicate to an open-ended task, and doing the best we can with it in that amount of time.
*The ''purpose'' of timeboxing is to limit the time allotted to open-ended tasks, tasks with no clear ending point, tasks that could expand to fill as much time as we give them.
*The ''how-to'' of timeboxing:
**"...instead working on something until it is “done” in one sitting, we only work on it for, say, 30 mins. It is either marked as done at the end of this period or we commit to another 30 mins at a later time or another day."
*Some of the ''benefits'' of timeboxing:
**It helps us avoid procrastinating on projects "when things appear complex or daunting initially and we are unsure of how to begin."
**By limiting our time, it forces us to focus on the most important aspects of the project.
**It restrains our perfectionist tendency to keep fiddling with open-ended projects that could always be improved just a little bit more.
**"...it allows us to work on things during the free gaps we have between our commitments and appointments."
**Committing to an unpleasant task is easier if the timeframe is limited.
{{squote{Source: Dave Cheong, "Time Boxing is an Effective Getting Things Done Strategy", {http://www.davecheong.com/2006/07/26/time-boxing-is-an-effective-getting-things-done-strategy/}}}
/***
|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);
}
};
}
//}}}
{{squote{<<newTiddler tag:'point' tag:'New Testament introduction and background' label:'New point' title:'pointWhat'>>}}}
''Geography''
*<<tiddler "pointJerusalem flyover">>
''The study of the NT''
*<<tiddler "pointPseudepigraphy in NT">>
/***
|Name:|NewHerePlugin|
|Description:|Creates the new here and new journal macros|
|Version:|3.0 ($Rev: 3861 $)|
|Date:|$Date: 2008-03-08 10:53:09 +1000 (Sat, 08 Mar 2008) $|
|Source:|http://mptw.tiddlyspot.com/#NewHerePlugin|
|Author:|Simon Baird <simon.baird@gmail.com>, modified by giffmex|
|License|http://mptw.tiddlyspot.com/#TheBSDLicense|
***/
//{{{
merge(config.macros, {
newHere: {
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
wikify("<<newTiddler "+paramString+" tag:[["+tiddler.title+"]]>>",place,null,tiddler);
}
},
newJournalHere: {
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
wikify("<<newJournal "+paramString+" tag:[["+tiddler.title+"]]>>",place,null,tiddler);
}
}
});
//}}}
''Other instructions''
*If at any time you accidentally open an entry in edit mode, don't panic. Just click 'cancel', which will be visible above. Nothing you do will alter the online version in any way.
*Printing an entry with your browser will print only the title and text.
*Download this file by right-clicking [[here|http://www.giffmex.org/nsdb.html]] and saving the target file to a location on your computer.
<!--{{{-->
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='storyMenu' class='storyMenu' refresh='content' force='false' tiddler='Story Menu'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
{{squote{<<newTiddler tag:'Parenting' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Parenting")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
{{squote{<<newTiddler tag:'Paul' tag:'point' label:'New point' title:'pointWhat'>>}}}
*<<tiddler "pointPaul collections">>
*<<tiddler "pointAuthorship Pauline letters">>
*<<tiddler "pointPauls letters chronology">>
*<<tiddler "pointPlaces Paul taught">>
''People index'' | [[@|People]]
-----
<<forEachTiddler where 'tiddler.tags.contains("People")'>>
{{squote{<<newTiddler tag:'Personal finances' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Personal finances")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
{{squote{<<newTiddler tag:'Personal organization' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Personal organization")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
''Philosophy and the mind'' | [[@|PhilTOC]]
-----
*[[Intellect and learning]] (<<getTagCount "Intellect and learning">>)
*[[Introduction to philosophy]] (<<getTagCount "Introduction to philosophy">>)
*[[Aesthetics]] (<<getTagCount "Aesthetics">>)
*[[Epistemology]] (<<getTagCount "Epistemology">>)
*[[Ethics]] (<<getTagCount "Ethics">>)
*[[Logic]] (<<getTagCount "Logic">>)
*[[Metaphysics]] (<<getTagCount "Metaphysics">>)
*[[Philosophical anthropology]] (<<getTagCount "Philosophical anthropology">>)
*[[Worldviews]] (<<getTagCount "Worldviews">>)
{{squote{<<newTiddler tag:'Philosophical anthropology' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Philosophical anthropology")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
{{squote{<<newTiddler tag:'Physical health' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Physical health")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
{{squote{<<newTiddler tag:'Poverty' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Poverty")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
{{squote{<<newTiddler tag:'Prayer' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Prayer")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
{{squote{<<newTiddler tag:'Priorities' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Priorities")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
''New index of indexes''
*Tag 'slimindex' so bullets will be snug
*Ask self if this is an outer index or a point index? Add getTagCount appropriately
''New point index''
*Tag 'index'
*Grab this code: {{squote{<<newTiddler tag:'TOPIC' tag:'point' label:'New point' title:'pointWhat'>>}}}
*Replace TOPIC with the appropriate topic
''New point''
*Click 'new point'
*Give title after 'point'
*Add text, squote on the same line
*Wrap any Bible verses with bibliawrap
*Copy title and close
*In index, paste title where it belongs
*Wrap with pointwrap and save
*Create any links and tag as entry
/***
|Name|QuickEditPlugin|
|Source|http://www.TiddlyTools.com/#QuickEditPlugin|
|Documentation|http://www.TiddlyTools.com/#QuickEditPlugin|
|Version|2.4.3|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|Support functions for ~QuickEdit package: styles, utility functions, and 'toggleQuickEdit' command|
!!!!!Revisions
<<<
2009.06.11 [2.4.3] added keyup() function to abbreviate listbox handling for CR and ESC
2009.05.07 [2.4.2] added processed() function to abbreviate event handler code
2008.09.07 [2.4.1] added removeCookie() function for compatibility with [[CookieManagerPlugin]]
2008.05.17 [2.4.0] copied code from StickyPopupPlugin to remove dependency
2008.05.12 [2.3.0] added "toggleQuickEdit" command handler (replaces inline script command)
2008.01.11 [2.2.0] converted from inline script
2007.03.29 [1.0.0] initial release (as inline script)
<<<
!!!!!Code
***/
//{{{
version.extensions.QuickEditPlugin= {major: 2, minor: 4, revision: 3, date: new Date(2009,6,11)};
// SET STYLESHEET
setStylesheet("\
.quickEdit a { border:2px outset ButtonFace; padding:0px 3px !important; \
-moz-border-radius:.5em; -webkit-border-radius:.5em; \
-moz-appearance:button !important; -webkit-appearance:push-button !important; \
background-color:ButtonFace; color:ButtonText !important; \
line-height:200%; font-weight:normal; } \
.quickEdit a:hover { border: 2px inset ButtonFace; background-color:ButtonFace; }\
", "quickEditStyles");
// REMOVE COOKIE
if (window.removeCookie===undefined) {
window.removeCookie=function(name) {
document.cookie = name+'=; expires=Thu, 01-Jan-1970 00:00:01 UTC; path=/;';
}
}
// UTILITY FUNCTIONS
config.quickEdit = {
processed: function(ev) { ev=ev||window.event;
ev.cancelBubble=true;
if(ev.stopPropagation) ev.stopPropagation();
return false;
},
keyup: function(ev){ var k=(ev||window.event).keyCode;
if (k==13) this.onclick();
if (k==27) Popup.remove();
},
getField: function(where) {
var here=story.findContainingTiddler(where); if (!here) return null;
var e=story.getTiddlerField(here.getAttribute("tiddler"),"text");
if (e&&e.getAttribute("edit")=="text") return e;
return null;
},
setSelection: function(where,newtext) {
var e=this.getField(where); if (!e) return false;
e.focus(); replaceSelection(e,newtext);
return false;
},
wrapSelection: function(where,before,after) {
var e=this.getField(where); if (!e) return false;
e.focus(); replaceSelection(e,before+config.quickEdit.getSelection(e)+after);
return false;
},
getSelection: function(e) {
var seltext="";
if (e&&e.setSelectionRange)
seltext=e.value.substr(e.selectionStart,e.selectionEnd-e.selectionStart);
else if (document.selection) {
var range = document.selection.createRange();
if (range.parentElement()==e) seltext=range.text
}
return seltext;
},
promptForFilename: function(msg,path,file) {
if(window.Components) { // moz
try {
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
var nsIFilePicker = window.Components.interfaces.nsIFilePicker;
var picker = Components.classes['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);
picker.init(window, msg, nsIFilePicker.modeOpen);
var thispath = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
thispath.initWithPath(path);
picker.displayDirectory=thispath;
picker.defaultExtension='jpg';
picker.defaultString=file;
picker.appendFilters(nsIFilePicker.filterAll|nsIFilePicker.filterImages);
if (picker.show()!=nsIFilePicker.returnCancel)
var result="file:///"+picker.file.persistentDescriptor.replace(/\\/g,'/');
}
catch(e) { alert('error during local file access: '+e.toString()) }
}
else { // IE
try { // XP only
var s = new ActiveXObject('UserAccounts.CommonDialog');
s.Filter='All files|*.*|JPG files|*.jpg|GIF files|*.gif|PNG files|*.png|';
s.FilterIndex=1; // default to JPG
s.InitialDir=path;
s.FileName=file;
if (s.showOpen()) var result=s.FileName;
}
catch(e) { var result=prompt(msg,path+file); } // fallback for non-XP IE
}
return result;
}
}
//}}}
//{{{
if (config.options.chkShowQuickEdit===undefined) config.options.chkShowQuickEdit=false;
config.commands.toggleQuickEdit = {
hideReadOnly: true,
getText: function() { return config.options.chkShowQuickEdit?'\u221Aquickedit':'quickedit'; },
tooltip: 'show QuickEdit toolbar buttons',
handler: function(event,src,title) {
config.options.chkShowQuickEdit=!config.options.chkShowQuickEdit;
config.macros.option.propagateOption("chkShowQuickEdit","checked", config.options.chkShowQuickEdit,"input");
if (config.options.chkShowQuickEdit) saveOptionCookie("chkShowQuickEdit");
else removeCookie("chkShowQuickEdit");
src.innerHTML=config.commands.toggleQuickEdit.getText();
story.forEachTiddler(function(t,e){if (story.isDirty(t)) refreshElements(e);});
return false;
}
};
//}}}
// // COPIED FROM [[StickyPopupPlugin]] TO ELIMINATE PLUGIN DEPENDENCY
//{{{
if (config.options.chkStickyPopups==undefined) config.options.chkStickyPopups=false;
Popup.stickyPopup_onDocumentClick = function(ev)
{
// if click is in a sticky popup, ignore it so popup will remain visible
var e = ev ? ev : window.event; var target = resolveTarget(e);
var p=target; while (p) {
if (hasClass(p,"popup") && (hasClass(p,"sticky")||config.options.chkStickyPopups)) break;
else p=p.parentNode;
}
if (!p) // not in sticky popup (or sticky popups disabled)... use normal click handling
Popup.onDocumentClick(ev);
return true;
};
try{removeEvent(document,"click",Popup.onDocumentClick);}catch(e){};
try{addEvent(document,"click",Popup.stickyPopup_onDocumentClick);}catch(e){};
//}}}
/%
|Name|QuickEditToolbar|
|Source|http://www.TiddlyTools.com/#QuickEditToolbar|
|Version|2.1.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.2|
|Type|script|
|Requires|QuickEditPlugin, InlineJavascriptPlugin|
|Optional|QuickEdit_replace, QuickEdit_split, QuickEdit_link, QuickEdit_macro, QuickEdit_image, QuickEdit_tiddler, QuickEdit_file, QuickEdit_format, QuickEdit_sort|
|Overrides||
|Description|quickly insert TiddlyWiki tiddler links or common formatting sequences directly into tiddler content|
Usage (in EditTemplate): <div macro='tiddler QuickEditToolbar with: show'></div>
where "show" is an OPTIONAL keyword to force the toolbar to be displayed regardless of the current 'toggle' state
%/<<tiddler HideTiddlerTags>>/%
TOOLBAR DEFINITIONS BEGIN HERE...
= = = = = = = = = = = = = = = = =
%/{{hidden quickEdit{
<script>
// note: always show toolbar when directly viewing the tiddler containing the actual toolbar definition!
var here=story.findContainingTiddler(place); if (here) var tid=here.getAttribute("tiddler");
var show="$1"!="$"+"1"||config.options.chkShowQuickEdit||tid=="QuickEditToolbar"
place.style.display=show?"block":"none";
</script>/%
%/<<tiddler QuickEdit_replace>>/%
%/<<tiddler QuickEdit_split>>/%
%/<<tiddler QuickEdit_sort>>/%
%/<<tiddler QuickEdit_tiddler>>/%
%/<<tiddler QuickEdit_file>>/%
%/ /% (SPACER)
%/<<tiddler QuickEdit_format>>/%
%/<<tiddler QuickEdit_align>>/%
%/<<tiddler QuickEdit_color>>/%
%/<<tiddler QuickEdit_font>>/%
%/<<tiddler QuickEdit_css>>/%
%/ /% (SPACER)
%/<<tiddler QuickEdit_link>>/%
%/<<tiddler QuickEdit_macro>>/%
%/<<tiddler QuickEdit_image>>/%
%/<<tiddler QuickEdit_insert>>/%
%/ /% (SPACER)
%/<<tiddler QuickEdit_indent>>/%
%/<<tiddler QuickEdit_iframe>>/%
%/<<tiddler QuickEdit_heb/gk>>/%
%/<<tiddler QuickEdit_custom2>>/%
%/}}}
/%
|Name|QuickEdit_align|
|Source|http://www.TiddlyTools.com/#QuickEdit_align|
|Version|2.2.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.2|
|Type|script|
|Requires|QuickEditPlugin|
|Overrides||
|Description|definition for toolbar button for text alignment|
Usage:
QuickEditToolbar: <<tiddler QuickEdit_align>>
OR
EditTemplate: <span class='toolbar' macro='tiddler QuickEdit_align'></span>
**** ALIGNMENT ****
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink"
title="align text"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
var s=createTiddlyElement(p,'select'); s.button=this;
s.options[0]=new Option('select text alignment...','');
s.onchange=function(){
config.quickEdit.wrapSelection(this.button,'{{'+this.value+'{','}}}');
Popup.remove(); return false;
};
s.options[s.length]=new Option('left','left');
s.options[s.length-1].title='{{left{...}}}';
s.options[s.length]=new Option('center','center');
s.options[s.length-1].title='{{center{...}}}';
s.options[s.length]=new Option('right','right');
s.options[s.length-1].title='{{right{...}}}';
s.options[s.length]=new Option('justify','justify');
s.options[s.length-1].title='{{justify{...}}}';
s.options[s.length]=new Option('float left','float left');
s.options[s.length-1].title='{{floatleft{...}}}';
s.options[s.length]=new Option('float right','float right');
s.options[s.length-1].title='{{floatright{...}}}';
Popup.show(p,false);
event.cancelBubble=true;if(event.stopPropagation)event.stopPropagation();return false;"
>align</a></html>
/%
|Name|QuickEdit_color|
|Source|http://www.TiddlyTools.com/#QuickEdit_color|
|Version|2.2.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.2|
|Type|script|
|Requires|QuickEditPlugin|
|Overrides||
|Description|definition of toolbar button for "color" command|
Usage:
QuickEditToolbar: <<tiddler QuickEdit_color>>
OR
EditTemplate: <span class='toolbar' macro='tiddler QuickEdit_color'></span>
**** COLOR ****
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink"
title="text/background color - @@color:#RGB;background-color:#RGB;...@@"
onclick="var p=Popup.create(this,null,'popup sticky smallform'); if (!p) return false;
p.style.padding='2px';
function hex(d) { return '0123456789ABCDEF'.substr(d,1); }
var fg=createTiddlyElement(p,'select'); fg.button=this;
fg.style.width='12em';
fg.options[0]=new Option('text color...','');
fg.options[1]=new Option('\xa0 or enter a value','_ask');
fg.options[2]=new Option('\xa0 or use default color','');
for (var r=0;r<16;r+=3) for (var g=0;g<16;g+=3) for (var b=0;b<16;b+=3) {
var label=hex(r)+hex(g)+hex(b);
fg.options[fg.length]=new Option(label,'#'+label);
fg.options[fg.length-1].style.color='#'+label;
}
fg.onchange=function(){ var val=this.value;
if (val=='_ask') { val=prompt('Enter a CSS color value');
if (!val||!val.length) return false; }
this.options[0].value=val; this.options[0].text=val.length?'text: '+val:'text color...';
var bg=this.nextSibling;
for (var i=3;i<bg.options.length;i++) bg.options[i].style.color=val;
var preview=this.nextSibling.nextSibling.nextSibling;
var t=config.quickEdit.getSelection(config.quickEdit.getField(this.button));
t=t.replace(/^@@(color\:.+;)?(background-color\:.+;)?/,'').replace(/@@$/,'');
if (!t.length) t='~AaBbCcDdEeFfGgHhIiJj 1234567890';
var fg=this.value; if (fg.length) fg='color:'+fg+';';
var bg=this.nextSibling.value; if (bg.length) bg='background-color:'+bg+';';
if (fg.length||bg.length) t='@@'+fg+bg+t+'@@';
removeChildren(preview); wikify(t,preview);
this.selectedIndex=0; return false;
};
var bg=createTiddlyElement(p,'select'); bg.button=this;
bg.style.width='12em';
bg.options[0]=new Option('background color...','');
bg.options[1]=new Option('\xa0 or enter a value','_ask');
bg.options[2]=new Option('\xa0 or use default color','');
for (var r=0;r<16;r+=3) for (var g=0;g<16;g+=3) for (var b=0;b<16;b+=3) {
var label=hex(15-r)+hex(15-g)+hex(15-b);
bg.options[bg.length]=new Option(label,'#'+label);
bg.options[bg.length-1].style.backgroundColor='#'+label;
}
bg.onchange=function(){ var val=this.value;
if (val=='_ask') { val=prompt('Enter a CSS color value');
if (!val||!val.length) return false; }
this.options[0].value=val;
this.options[0].text=val.length?'background: '+val:'background color...';
var fg=this.previousSibling;
for (var i=3;i<fg.options.length;i++) fg.options[i].style.backgroundColor=val;
var preview=this.nextSibling.nextSibling;
var t=config.quickEdit.getSelection(config.quickEdit.getField(this.button));
t=t.replace(/^@@(color\:.+;)?(background-color\:.+;)?/,'').replace(/@@$/,'');
if (!t.length) t='~AaBbCcDdEeFfGgHhIiJj 1234567890';
var fg=this.previousSibling.value; if (fg.length) fg='color:'+fg+';';
var bg=this.value; if (bg.length) bg='background-color:'+bg+';';
if (fg.length||bg.length) t='@@'+fg+bg+t+'@@';
removeChildren(preview); wikify(t,preview);
this.selectedIndex=0; return false;
};
var b=createTiddlyElement(p,'input',null,null,null,{type:'button'}); b.button=this;
b.value='ok'; b.style.width='4em';
b.onclick=function() {
var fg=this.previousSibling.previousSibling.value; if (fg.length) fg='color:'+fg+';';
var bg=this.previousSibling.value; if (bg.length) bg='background-color:'+bg+';';
var t=config.quickEdit.getSelection(config.quickEdit.getField(this.button));
t=t.replace(/^@@(color\:.+;)?(background-color\:.+;)?/,'').replace(/@@$/,'');
if (fg.length||bg.length) config.quickEdit.setSelection(this.button,'@@'+fg+bg+t+'@@');
Popup.remove(); return false;
};
var preview=createTiddlyElement(p,'div',null,'viewer'); var s=preview.style;
s.border='1px solid'; s.margin='2px'; s.width='24em'; s.padding='3px'; s.MozBorderRadius='3px';
s.overflow='hidden'; s.textAlign='center'; s.whiteSpace='normal';
var t=config.quickEdit.getSelection(config.quickEdit.getField(this));
wikify(t.length?t:'~AaBbCcDdEeFfGgHhIiJj 1234567890',preview);
Popup.show(p,false);
event.cancelBubble=true;if(event.stopPropagation)event.stopPropagation();return false;"
>color</a></html>
/%
|Name|QuickEdit_custom|
|Source|http://www.TiddlyTools.com/#QuickEdit_custom, adapted by Dave Gifford, since I needed two custom lists!|
|Version|2.3.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.2|
|Type|script|
|Requires|QuickEditPlugin|
|Overrides||
|Description|provides a droplist of custom-defined formats|
Usage:
in QuickEditToolbar: <<tiddler QuickEdit_custom2>>
OR
in EditTemplate: <span class='toolbar' macro='tiddler QuickEdit_custom2'></span>
!help
Reminders:
Custom format definitions are stored as an "HR-separated list" in a tiddler named [[QuickEdit_custom2List]].
The first line of each list item is the text 'label' to show in the droplist, followed by one or more lines of wiki content to be inserted into the tiddler source.
To embed the tiddler editor's current selected text within the formatted output, use "$1" (without quotes) to mark the position(s) where the selection should be inserted.
!end help
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1"
title="custom defined formats"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
var s=createTiddlyElement(p,'select'); s.button=this;
s.options[0]=new Option('select a custom format...','');
var items=store.getTiddlerText('QuickEdit_custom2List','').split('\n----\n');
for (var i=0; i<items.length; i++) {
if (!items[i].length) continue; var lines=items[i].split('\n');
var label=lines.shift(); var val=lines.join('\n');
s.options[s.length]=new Option(label,val); s.options[s.length-1].title=val;
}
s.options[s.length]=new Option('[Edit custom formats...]','_edit');
s.options[s.length-1].title='add/change custom format definitions...';
s.size=Math.min(s.length,15);
s.onclick=function(){ if (!this.value.length) return;
if (this.value=='_edit') {
alert(store.getTiddlerText('QuickEdit_iframe##help'));
story.displayTiddler(story.findContainingTiddler(this.button),
'QuickEdit_indent',DEFAULT_EDIT_TEMPLATE);
} else {
var e=config.quickEdit.getField(this.button); if (!e) return false;
e.focus(); var txt=config.quickEdit.getSelection(e);
replaceSelection(e,this.value.replace(/\$\x31/g,txt));
}
Popup.remove(); return false;
};
s.onkeyup=function(ev){
var k=(ev||window.event).keyCode; if (k==13) this.onclick(); if (k==27) Popup.remove();
};
Popup.show(p,false);
s.focus();
return config.quickEdit.processed(event);"
>code</a></html>
bibliawrap
[[$1|http://biblia.com/bible/esv/BOOK%20XX.XX]]
----
pointwrap
*<<tiddler "$1">>
/%
|Name|QuickEdit_format|
|Source|http://www.TiddlyTools.com/#QuickEdit_format|
|Version|2.2.0|
|Author|Eric Shulman - ELS Design Studios (*This version has been slightly modified by Dave Gifford*)|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.2|
|Type|script|
|Requires|QuickEditPlugin|
|Overrides||
|Description|definition for toolbar button for text formatting|
Usage:
QuickEditToolbar: <<tiddler QuickEdit_format>>
OR
EditTemplate: <span class='toolbar' macro='tiddler QuickEdit_format'></span>
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" title="''bold''" accesskey="B"
onclick="config.quickEdit.wrapSelection(this,'\x27\x27','\x27\x27'); return false;"
> B </a></html>/%
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" title="//italics//" accesskey="I"
onclick="config.quickEdit.wrapSelection(this,'//','//'); return false;"
> I </a></html>/%
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" title="__underline__" accesskey="U"
onclick="config.quickEdit.wrapSelection(this,'__','__'); return false;"
> U </a></html>/%
%/ /% SPACER
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink"
title="format text"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
var s=createTiddlyElement(p,'select'); s.button=this;
s.options[0]=new Option('select text format...','');
s.onchange=function(){
var parts=this.value.split(',');
config.quickEdit.wrapSelection(this.button,parts[0],parts[1]);
Popup.remove(); return false;
};
s.options[s.length]=new Option('superscript','^^,^^');
s.options[s.length-1].title='^^superscript^^';
s.options[s.length]=new Option('subscript','~~,~~');
s.options[s.length-1].title='~~subcript~~';
s.options[s.length]=new Option('blockquote','\n\<\<\<\n,\n\<\<\<\n');
s.options[s.length-1].title='indented blockquote - \<\<\<';
s.options[s.length]=new Option('monospaced','{{{,}}}');
s.options[s.length-1].title='inline monospaced text - {{{...}}}';
s.options[s.length]=new Option('pre','\n{{{\n,\n}}}\n');
s.options[s.length-1].title='multi-line monospaced text box - {{{...}}}';
s.options[s.length]=new Option('heading 1','\n!,\n');
s.options[s.length-1].title='H1 heading - !';
s.options[s.length]=new Option('heading 2','\n!!,\n');
s.options[s.length-1].title='H2 heading - !';
s.options[s.length]=new Option('heading 3','\n!!!,\n');
s.options[s.length-1].title='H3 heading - !';
s.options[s.length]=new Option('heading 4','\n!!!!,\n');
s.options[s.length-1].title='H4 heading - !';
s.options[s.length]=new Option('heading 5','\n!!!!!,\n');
s.options[s.length-1].title='H5 heading - !';
s.options[s.length]=new Option('comment','/%,%/');
s.options[s.length-1].title='comment (hidden content) - /%...%/';
s.options[s.length]=new Option('HTML','<html>,<\x2fhtml>');
s.options[s.length-1].title='HTML syntax - <html>...<\x2fhtml>';
Popup.show(p,false);
event.cancelBubble=true;if(event.stopPropagation)event.stopPropagation();return false;"
>format</a></html>
/%
|Name|QuickEdit_custom|
|Source|http://www.TiddlyTools.com/#QuickEdit_custom|
|Version|2.3.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.2|
|Type|script|
|Requires|QuickEditPlugin|
|Overrides||
|Description|provides a droplist of custom-defined formats|
Usage:
in QuickEditToolbar: <<tiddler QuickEdit_custom>>
OR
in EditTemplate: <span class='toolbar' macro='tiddler QuickEdit_custom'></span>
!help
Reminders:
Custom format definitions are stored as an "HR-separated list" in a tiddler named [[QuickEdit_customList]].
The first line of each list item is the text 'label' to show in the droplist, followed by one or more lines of wiki content to be inserted into the tiddler source.
To embed the tiddler editor's current selected text within the formatted output, use "$1" (without quotes) to mark the position(s) where the selection should be inserted.
!end help
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1"
title="custom defined formats"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
var s=createTiddlyElement(p,'select'); s.button=this;
s.options[0]=new Option('select a custom format...','');
var items=store.getTiddlerText('QuickEdit_iframeList','').split('\n----\n');
for (var i=0; i<items.length; i++) {
if (!items[i].length) continue; var lines=items[i].split('\n');
var label=lines.shift(); var val=lines.join('\n');
s.options[s.length]=new Option(label,val); s.options[s.length-1].title=val;
}
s.options[s.length]=new Option('[Edit custom formats...]','_edit');
s.options[s.length-1].title='add/change custom format definitions...';
s.size=Math.min(s.length,15);
s.onclick=function(){ if (!this.value.length) return;
if (this.value=='_edit') {
alert(store.getTiddlerText('QuickEdit_iframe##help'));
story.displayTiddler(story.findContainingTiddler(this.button),
'QuickEdit_indent',DEFAULT_EDIT_TEMPLATE);
} else {
var e=config.quickEdit.getField(this.button); if (!e) return false;
e.focus(); var txt=config.quickEdit.getSelection(e);
replaceSelection(e,this.value.replace(/\$\x31/g,txt));
}
Popup.remove(); return false;
};
s.onkeyup=function(ev){
var k=(ev||window.event).keyCode; if (k==13) this.onclick(); if (k==27) Popup.remove();
};
Popup.show(p,false);
s.focus();
return config.quickEdit.processed(event);"
>iframe</a></html>
IFrame
<html><iframe src="$1" width="1000" height="780"
style="border: none;"></iframe></html>
/%
|Name|QuickEdit_custom|
|Source|http://www.TiddlyTools.com/#QuickEdit_custom|
|Version|2.3.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.2|
|Type|script|
|Requires|QuickEditPlugin|
|Overrides||
|Description|provides a droplist of custom-defined formats|
Usage:
in QuickEditToolbar: <<tiddler QuickEdit_custom>>
OR
in EditTemplate: <span class='toolbar' macro='tiddler QuickEdit_custom'></span>
!help
Reminders:
Custom format definitions are stored as an "HR-separated list" in a tiddler named [[QuickEdit_customList]].
The first line of each list item is the text 'label' to show in the droplist, followed by one or more lines of wiki content to be inserted into the tiddler source.
To embed the tiddler editor's current selected text within the formatted output, use "$1" (without quotes) to mark the position(s) where the selection should be inserted.
!end help
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1"
title="custom defined formats"
onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';
var s=createTiddlyElement(p,'select'); s.button=this;
s.options[0]=new Option('select a custom format...','');
var items=store.getTiddlerText('QuickEdit_indentList','').split('\n----\n');
for (var i=0; i<items.length; i++) {
if (!items[i].length) continue; var lines=items[i].split('\n');
var label=lines.shift(); var val=lines.join('\n');
s.options[s.length]=new Option(label,val); s.options[s.length-1].title=val;
}
s.options[s.length]=new Option('[Edit custom formats...]','_edit');
s.options[s.length-1].title='add/change custom format definitions...';
s.size=Math.min(s.length,15);
s.onclick=function(){ if (!this.value.length) return;
if (this.value=='_edit') {
alert(store.getTiddlerText('QuickEdit_indent##help'));
story.displayTiddler(story.findContainingTiddler(this.button),
'QuickEdit_indent',DEFAULT_EDIT_TEMPLATE);
} else {
var e=config.quickEdit.getField(this.button); if (!e) return false;
e.focus(); var txt=config.quickEdit.getSelection(e);
replaceSelection(e,this.value.replace(/\$\x31/g,txt));
}
Popup.remove(); return false;
};
s.onkeyup=function(ev){
var k=(ev||window.event).keyCode; if (k==13) this.onclick(); if (k==27) Popup.remove();
};
Popup.show(p,false);
s.focus();
return config.quickEdit.processed(event);"
>indent</a></html>
indent1
@@margin-left: 2em;display:block;$1@@
----
indent2
@@margin-left: 4em;display:block;$1@@
----
indent3
@@margin-left: 6em;display:block;$1@@
----
indent4
@@margin-left: 8em;display:block;$1@@
----
indent5
@@margin-left: 10em;display:block;$1@@
----
/***
|Name:|QuickOpenTagPlugin|
|Description:|Changes tag links to make it easier to open tags as tiddlers|
|Version:|3.0.1a|
|Date:|27-Jun-2011|
|Source:|http://mptw.tiddlyspot.com/#QuickOpenTagPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
***/
//{{{
config.quickOpenTag = {
dropdownChar: (document.all ? "\u25bc" : "\u25be"), // the little one doesn't work in IE?
createTagButton: function(place,tag,excludeTiddler) {
// little hack so we can do this: <<tag PrettyTagName|RealTagName>>
var splitTag = tag.split("|");
var pretty = tag;
if (splitTag.length == 2) {
tag = splitTag[1];
pretty = splitTag[0];
}
var sp = createTiddlyElement(place,"span",null,"quickopentag");
createTiddlyText(createTiddlyLink(sp,tag,false),pretty);
var theTag = createTiddlyButton(sp,config.quickOpenTag.dropdownChar,
config.views.wikified.tag.tooltip.format([tag]),onClickTag);
theTag.setAttribute("tag",tag);
if (excludeTiddler)
theTag.setAttribute("tiddler",excludeTiddler);
return(theTag);
},
miniTagHandler: function(place,macroName,params,wikifier,paramString,tiddler) {
var tagged = store.getTaggedTiddlers(tiddler.title);
if (tagged.length > 0) {
var theTag = createTiddlyButton(place,config.quickOpenTag.dropdownChar,
config.views.wikified.tag.tooltip.format([tiddler.title]),onClickTag);
theTag.setAttribute("tag",tiddler.title);
theTag.className = "miniTag";
}
},
allTagsHandler: function(place,macroName,params) {
var tags = store.getTags(params[0]);
var filter = params[1]; // new feature
var ul = createTiddlyElement(place,"ul");
if(tags.length == 0)
createTiddlyElement(ul,"li",null,"listTitle",this.noTags);
for(var t=0; t<tags.length; t++) {
var title = tags[t][0];
if (!filter || (title.match(new RegExp('^'+filter)))) {
var info = getTiddlyLinkInfo(title);
var theListItem =createTiddlyElement(ul,"li");
var theLink = createTiddlyLink(theListItem,tags[t][0],true);
var theCount = " (" + tags[t][1] + ")";
theLink.appendChild(document.createTextNode(theCount));
var theDropDownBtn = createTiddlyButton(theListItem," " +
config.quickOpenTag.dropdownChar,this.tooltip.format([tags[t][0]]),onClickTag);
theDropDownBtn.setAttribute("tag",tags[t][0]);
}
}
},
// todo fix these up a bit
styles: [
"/*{{{*/",
"/* created by QuickOpenTagPlugin */",
".tagglyTagged .quickopentag, .tagged .quickopentag ",
" { margin-right:1.2em; border:1px solid #eee; padding:2px; padding-right:0px; padding-left:1px; }",
".quickopentag .tiddlyLink { padding:2px; padding-left:3px; }",
".quickopentag a.button { padding:1px; padding-left:2px; padding-right:2px;}",
"/* extra specificity to make it work right */",
"#displayArea .viewer .quickopentag a.button, ",
"#displayArea .viewer .quickopentag a.tiddyLink, ",
"#mainMenu .quickopentag a.tiddyLink, ",
"#mainMenu .quickopentag a.tiddyLink ",
" { border:0px solid black; }",
"#displayArea .viewer .quickopentag a.button, ",
"#mainMenu .quickopentag a.button ",
" { margin-left:0px; padding-left:2px; }",
"#displayArea .viewer .quickopentag a.tiddlyLink, ",
"#mainMenu .quickopentag a.tiddlyLink ",
" { margin-right:0px; padding-right:0px; padding-left:0px; margin-left:0px; }",
"a.miniTag {font-size:150%;} ",
"#mainMenu .quickopentag a.button ",
" /* looks better in right justified main menus */",
" { margin-left:0px; padding-left:2px; margin-right:0px; padding-right:0px; }",
"#topMenu .quickopentag { padding:0px; margin:0px; border:0px; }",
"#topMenu .quickopentag .tiddlyLink { padding-right:1px; margin-right:0px; }",
"#topMenu .quickopentag .button { padding-left:1px; margin-left:0px; border:0px; }",
"/*}}}*/",
""].join("\n"),
init: function() {
// we fully replace these builtins. can't hijack them easily
window.createTagButton = this.createTagButton;
config.macros.allTags.handler = this.allTagsHandler;
config.macros.miniTag = { handler: this.miniTagHandler };
config.shadowTiddlers["QuickOpenTagStyles"] = this.styles;
store.addNotification("QuickOpenTagStyles",refreshStyles);
}
}
config.quickOpenTag.init();
//}}}
/***
|''Name''|RandomTiddlerExpanded|
|''Description''|Generate a random tiddler|
|''Author''|Brent Bartlett (brent dot bartlett at gmail dot com)|
|''Version''|2.01|
|''Date''|2011-07-28 (Thermidor 10)|
|''Status''|@@stable@@|
|''Source''|http://starjelly.net/portfolio/javascript.php|
|''License''|[[GNU GPL 3.0|http://www.gnu.org/copyleft/gpl.html]]|
|''CoreVersion''|2.6.2|
|''Browser''|Tested on Firefox 5 |
!Usage
{{{-<term>}}} – Exclude tiddlers with the tag {{{<term>}}}; e.g. {{{-excludeTag}}}.
{{{+<term>}}} – Include tiddlers with the tag {{{<term>}}}. Note that this automatically excludes ALL other tiddlers!
For example, if you wanted only recipes, but only those without meat, assuming the tags ''recipes'' and ''meat'': {{{<<randomTiddler +recipes -meat>>}}}
(Parameters may be added in any order; {{{-meat +recipes}}} would work, too.)
With no parameters, it will return //any// random tiddler. (Including system tiddlers. If you want to exclude these, use the parameter {{{-systemConfig}}}.)
Thanks to the original RandomTiddler plug-in for pointing me in the right direction.
***/
//{{{
( function( $ )
{
var macro = config.macros.randomTiddler = {
locale: {
label: "Random life insight",
tooltip: "display a random tiddler"
},
handler: function( place, macroName, params, wikifier, paramString, tiddler )
{
var btn = createTiddlyButton( place, this.locale.label, this.locale.tooltip, function(){} );
btn.onclick = function()
{
story.closeAllTiddlers();
var addAll = true;
var tid = [];
var excludeTags = [];
var tiddlerArray = [];
function displayRandomTiddler()
{
if( !params[ 0 ] ) //if no parameters, do nothing...
{
}
else
for( var i = 0, ii = params.length; i < ii; i++ )
{
var theTag = params[ i ];
if( theTag[ 0 ] == "+" )
{
addAll = false;
tiddlerArray.push( store.getTaggedTiddlers( theTag.slice( 1, theTag.length ) ) );
}
else if( theTag[ 0 ] == "-" )
excludeTags.push( theTag.slice( 1, theTag.length ) );
}
if( addAll )
{
var tiddlers = store.getTiddlers();
var j = Math.floor( Math.random() * tiddlers.length );
tid = tiddlers[ j ];
}
else
{
var k = Math.floor( Math.random() * tiddlerArray.length );
var m = Math.floor( Math.random() * tiddlerArray[ k ].length );
tid = tiddlerArray[ k ][ m ];
}
for( var s = 0, ss = excludeTags.length; s < ss; s++ )
if( tid.tags.contains( excludeTags[ s ] ) )
displayRandomTiddler();
story.displayTiddler( null, tid );
}
displayRandomTiddler();
}
},
};
})( jQuery );
//}}}
''Most recent entries'' | [[@|RecentTOC]]
-----
As of this update, there are now {{red{<<getTagCount point>>}}} life insights and {{red{<<getTagCount entry>>}}} fuller entries. Here are the most recent additions:
<<forEachTiddler where 'tiddler.tags.containsAny(["point","entry"])' sortBy 'tiddler.modified' descending write '(index < 200) ? "{{teenygray{("+tiddler.modified.formatString("MM-DD-YYYY")+")}}} - [["+tiddler.title+"]]\n" : ""'>>
/***
|Name:|RenameTagsPlugin|
|Description:|Allows you to easily rename or delete tags across multiple tiddlers|
|Version:|3.0a|
|Date:|27-Jun-2011|
|Source:|http://mptw.tiddlyspot.com/#RenameTagsPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License|http://mptw.tiddlyspot.com/#TheBSDLicense|
Rename a tag and you will be prompted to rename it in all its tagged tiddlers.
***/
//{{{
config.renameTags = {
prompts: {
rename: "Rename the tag '%0' to '%1' in %2 tidder%3?",
remove: "Remove the tag '%0' from %1 tidder%2?"
},
removeTag: function(tag,tiddlers) {
store.suspendNotifications();
for (var i=0;i<tiddlers.length;i++) {
store.setTiddlerTag(tiddlers[i].title,false,tag);
}
store.resumeNotifications();
store.notifyAll();
},
renameTag: function(oldTag,newTag,tiddlers) {
store.suspendNotifications();
for (var i=0;i<tiddlers.length;i++) {
store.setTiddlerTag(tiddlers[i].title,false,oldTag); // remove old
store.setTiddlerTag(tiddlers[i].title,true,newTag); // add new
}
store.resumeNotifications();
store.notifyAll();
},
storeMethods: {
saveTiddler_orig_renameTags: TiddlyWiki.prototype.saveTiddler,
saveTiddler: function(title,newTitle,newBody,modifier,modified,tags,fields,clearChangeCount,created,creator) {
if (title != newTitle) {
var tagged = this.getTaggedTiddlers(title);
if (tagged.length > 0) {
// then we are renaming a tag
if (confirm(config.renameTags.prompts.rename.format([title,newTitle,tagged.length,tagged.length>1?"s":""])))
config.renameTags.renameTag(title,newTitle,tagged);
if (!this.tiddlerExists(title) && newBody == "")
// dont create unwanted tiddler
return null;
}
}
return this.saveTiddler_orig_renameTags(title,newTitle,newBody,modifier,modified,tags,fields,clearChangeCount,created,creator);
},
removeTiddler_orig_renameTags: TiddlyWiki.prototype.removeTiddler,
removeTiddler: function(title) {
var tagged = this.getTaggedTiddlers(title);
if (tagged.length > 0)
if (confirm(config.renameTags.prompts.remove.format([title,tagged.length,tagged.length>1?"s":""])))
config.renameTags.removeTag(title,tagged);
return this.removeTiddler_orig_renameTags(title);
}
},
init: function() {
merge(TiddlyWiki.prototype,this.storeMethods);
}
}
config.renameTags.init();
//}}}
{{squote{<<newTiddler tag:'Sadness and grief' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Sadness and grief")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
/***
|Name|SearchOptionsPlugin|
|Source|http://www.TiddlyTools.com/#SearchOptionsPlugin|
|Documentation|http://www.TiddlyTools.com/#SearchOptionsPluginInfo|
|Version|2.6.1|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides|Story.prototype.search, TiddlyWiki.prototype.search, config.macros.search.onKeyPress|
|Description|extend core search function with additional user-configurable options|
Extend core search function with additional user-configurable options including generating a ''list of matching tiddlers'' instead of immediately displaying all matches.
!!!!!Documentation
>see [[SearchOptionsPluginInfo]]
!!!!!Configuration
<<<
<<option chkSearchTitles>> Search in titles
<<option chkSearchText>> Search in tiddler text
<<option chkSearchTags>> Search in tags
<<option chkSearchFields>> Search in data fields
<<option chkSearchShadows>> Search shadow tiddlers
<<option chkSearchTitlesFirst>> Show title matches first
<<option chkSearchByDate>> Sort matching tiddlers by date
<<option chkSearchList>> Show list of matches in [[SearchResults]]
<<option chkSearchIncremental>> Incremental (key-by-key) searching
<<<
!!!!!Revisions
<<<
2007.02.17 [2.6.1] added redefinition of config.macros.search.onKeyPress() to restore check to bypass key-by-key searching (i.e., when chkSearchIncremental==false), which had been unintentionally removed with v2.6.0
|please see [[SearchOptionsPluginInfo]] for additional revision details|
2005.10.18 [1.0.0] Initial Release
<<<
!!!!!Code
***/
//{{{
version.extensions.searchOptions = {major: 2, minor: 6, revision: 1, date: new Date(2007,2,17)};
if (config.options.chkSearchTitles===undefined) config.options.chkSearchTitles=true;
if (config.options.chkSearchText===undefined) config.options.chkSearchText=true;
if (config.options.chkSearchTags===undefined) config.options.chkSearchTags=true;
if (config.options.chkSearchFields===undefined) config.options.chkSearchFields=true;
if (config.options.chkSearchTitlesFirst===undefined) config.options.chkSearchTitlesFirst=false;
if (config.options.chkSearchList===undefined) config.options.chkSearchList=false;
if (config.options.chkSearchByDate===undefined) config.options.chkSearchByDate=false;
if (config.options.chkSearchIncremental===undefined) config.options.chkSearchIncremental=true;
if (config.options.chkSearchShadows===undefined) config.options.chkSearchShadows=false;
if (config.optionsDesc) {
config.optionsDesc.chkSearchTitles="Search in tiddler titles";
config.optionsDesc.chkSearchText="Search in tiddler text";
config.optionsDesc.chkSearchTags="Search in tiddler tags";
config.optionsDesc.chkSearchFields="Search in tiddler data fields";
config.optionsDesc.chkSearchShadows="Search in shadow tiddlers";
config.optionsDesc.chkSearchTitlesFirst="Search results show title matches first";
config.optionsDesc.chkSearchList="Search results show list of matching tiddlers";
config.optionsDesc.chkSearchByDate="Search results sorted by modification date ";
config.optionsDesc.chkSearchIncremental="Incremental searching";
} else {
config.shadowTiddlers.AdvancedOptions += "\n<<option chkSearchTitles>> Search in tiddler titles"
+"\n<<option chkSearchText>> Search in tiddler text"
+"\n<<option chkSearchTags>> Search in tiddler tags"
+"\n<<option chkSearchFields>> Search in tiddler data fields"
+"\n<<option chkSearchShadows>> Search in shadow tiddlers"
+"\n<<option chkSearchTitlesFirst>> Search results show title matches first"
+"\n<<option chkSearchList>> Search results show list of matching tiddlers"
+"\n<<option chkSearchByDate>> Search results sorted by modification date"
+"\n<<option chkSearchIncremental>> Incremental searching";
}
if (config.macros.search.reportTitle==undefined)
config.macros.search.reportTitle="SearchResults";
config.macros.search.onKeyPress = function(e)
{
if(!e) var e = window.event;
switch(e.keyCode)
{
case 13: // Ctrl-Enter
case 10: // Ctrl-Enter on IE PC
config.macros.search.doSearch(this);
break;
case 27: // Escape
this.value = "";
clearMessage();
break;
}
if (config.options.chkSearchIncremental) {
if(this.value.length > 2)
{
if(this.value != this.getAttribute("lastSearchText"))
{
if(config.macros.search.timeout)
clearTimeout(config.macros.search.timeout);
var txt = this;
config.macros.search.timeout = setTimeout(function() {config.macros.search.doSearch(txt);},500);
}
}
else
{
if(config.macros.search.timeout)
clearTimeout(config.macros.search.timeout);
}
}
}
//}}}
//{{{
Story.prototype.search = function(text,useCaseSensitive,useRegExp)
{
highlightHack = new RegExp(useRegExp ? text : text.escapeRegExp(),useCaseSensitive ? "mg" : "img");
var matches = store.search(highlightHack,config.options.chkSearchByDate?"modified":"title","excludeSearch");
if (config.options.chkSearchByDate) matches=matches.reverse(); // most recent changes first
var q = useRegExp ? "/" : "'";
clearMessage();
if (!matches.length) {
if (config.options.chkSearchList) discardSearchResults();
displayMessage(config.macros.search.failureMsg.format([q+text+q]));
} else {
if (config.options.chkSearchList)
reportSearchResults(text,matches);
else {
var titles = []; for(var t=0; t<matches.length; t++) titles.push(matches[t].title);
this.closeAllTiddlers(); story.displayTiddlers(null,titles);
displayMessage(config.macros.search.successMsg.format([matches.length, q+text+q]));
}
}
highlightHack = null;
}
TiddlyWiki.prototype.search = function(searchRegExp,sortField,excludeTag)
{
var candidates = this.reverseLookup("tags",excludeTag,false,sortField);
// scan for matching titles first...
var results = [];
if (config.options.chkSearchTitles) {
for(var t=0; t<candidates.length; t++)
if(candidates[t].title.search(searchRegExp)!=-1)
results.push(candidates[t]);
if (config.options.chkSearchShadows)
for (var t in config.shadowTiddlers)
if ((t.search(searchRegExp)!=-1) && !store.tiddlerExists(t))
results.push((new Tiddler()).assign(t,config.shadowTiddlers[t]));
}
// then scan for matching text, tags, or field data
for(var t=0; t<candidates.length; t++) {
if (config.options.chkSearchText && candidates[t].text.search(searchRegExp)!=-1)
results.pushUnique(candidates[t]);
if (config.options.chkSearchTags && candidates[t].tags.join(" ").search(searchRegExp)!=-1)
results.pushUnique(candidates[t]);
if (config.options.chkSearchFields && store.forEachField!=undefined) // requires TW2.1 or above
store.forEachField(candidates[t],
function(tid,field,val) { if (val.search(searchRegExp)!=-1) results.pushUnique(candidates[t]); },
true); // extended fields only
}
// then check for matching text in shadows
if (config.options.chkSearchShadows)
for (var t in config.shadowTiddlers)
if ((config.shadowTiddlers[t].search(searchRegExp)!=-1) && !store.tiddlerExists(t))
results.pushUnique((new Tiddler()).assign(t,config.shadowTiddlers[t]));
// if not 'titles first', or sorting by modification date, re-sort results to so titles, text, tag and field matches are mixed together
if(!sortField) sortField = "title";
var bySortField=function (a,b) {if(a[sortField] == b[sortField]) return(0); else return (a[sortField] < b[sortField]) ? -1 : +1; }
if (!config.options.chkSearchTitlesFirst || config.options.chkSearchByDate) results.sort(bySortField);
return results;
}
// REPORT GENERATOR
if (!window.reportSearchResults) window.reportSearchResults=function(text,matches)
{
var title=config.macros.search.reportTitle
var q = config.options.chkRegExpSearch ? "/" : "'";
var body="\n";
// summary: nn tiddlers found matching '...', options used
body+="''"+config.macros.search.successMsg.format([matches.length,q+"{{{"+text+"}}}"+q])+"''\n";
body+="^^//searched in:// ";
body+=(config.options.chkSearchTitles?"''titles'' ":"");
body+=(config.options.chkSearchText?"''text'' ":"");
body+=(config.options.chkSearchTags?"''tags'' ":"");
body+=(config.options.chkSearchFields?"''fields'' ":"");
body+=(config.options.chkSearchShadows?"''shadows'' ":"");
if (config.options.chkCaseSensitiveSearch||config.options.chkRegExpSearch) {
body+=" //with options:// ";
body+=(config.options.chkCaseSensitiveSearch?"''case sensitive'' ":"");
body+=(config.options.chkRegExpSearch?"''text patterns'' ":"");
}
body+="^^";
// numbered list of links to matching tiddlers
body+="\n<<<";
for(var t=0;t<matches.length;t++) {
var date=config.options.chkSearchByDate?(matches[t].modified.formatString('YYYY.0MM.0DD 0hh:0mm')+" "):"";
body+="\n# "+date+"[["+matches[t].title+"]]";
}
body+="\n<<<\n";
// open all matches button
body+="<html><input type=\"button\" href=\"javascript:;\" ";
body+="onclick=\"story.displayTiddlers(null,["
for(var t=0;t<matches.length;t++)
body+="'"+matches[t].title.replace(/\'/mg,"\\'")+"'"+((t<matches.length-1)?", ":"");
body+="],1);\" ";
body+="accesskey=\"O\" ";
body+="value=\"open all matching tiddlers\"></html> ";
// discard search results button
body+="<html><input type=\"button\" href=\"javascript:;\" ";
body+="onclick=\"story.closeTiddler('"+title+"'); store.deleteTiddler('"+title+"'); store.notify('"+title+"',true);\" ";
body+="value=\"discard "+title+"\"></html>";
// search again
body+="\n\n----\n";
body+="<<search \""+text+"\">>\n";
body+="<<option chkSearchTitles>>titles ";
body+="<<option chkSearchText>>text ";
body+="<<option chkSearchTags>>tags";
body+="<<option chkSearchFields>>fields";
body+="<<option chkSearchShadows>>shadows";
body+="<<option chkCaseSensitiveSearch>>case-sensitive ";
body+="<<option chkRegExpSearch>>text patterns";
body+="<<option chkSearchByDate>>sort by date";
// create/update the tiddler
var tiddler=store.getTiddler(title); if (!tiddler) tiddler=new Tiddler();
tiddler.set(title,body,config.options.txtUserName,(new Date()),"excludeLists excludeSearch temporary");
store.addTiddler(tiddler); story.closeTiddler(title);
// use alternate "search again" label in <<search>> macro
var oldprompt=config.macros.search.label;
config.macros.search.label="search again";
// render/refresh tiddler
story.displayTiddler(null,title,1);
store.notify(title,true);
// restore standard search label
config.macros.search.label=oldprompt;
}
if (!window.discardSearchResults) window.discardSearchResults=function()
{
// remove the tiddler
story.closeTiddler(config.macros.search.reportTitle);
store.deleteTiddler(config.macros.search.reportTitle);
}
//}}}
''9 tiddlers found matching /{{{styles}}}/''
^^//searched in:// ''titles'' ''text'' ''tags'' ''fields'' //with options:// ''text patterns'' ^^
<<<
# [[ForEachTiddlerPlugin]]
# [[MarkupPostHead]]
# [[My cartoon on worship styles]]
# [[NestedSlidersPlugin]]
# [[QuickEditPlugin]]
# [[QuickOpenTagPlugin]]
# [[StyleSheet]]
# [[TagCloudPlugin]]
# [[pointMy cartoon on worship]]
<<<
<html><input type="button" href="javascript:;" onclick="story.displayTiddlers(null,['ForEachTiddlerPlugin', 'MarkupPostHead', 'My cartoon on worship styles', 'NestedSlidersPlugin', 'QuickEditPlugin', 'QuickOpenTagPlugin', 'StyleSheet', 'TagCloudPlugin', 'pointMy cartoon on worship'],1);" accesskey="O" value="open all matching tiddlers"></html> <html><input type="button" href="javascript:;" onclick="story.closeTiddler('SearchResults'); store.deleteTiddler('SearchResults'); store.notify('SearchResults',true);" value="discard SearchResults"></html>
----
<<search "styles">>
<<option chkSearchTitles>>titles <<option chkSearchText>>text <<option chkSearchTags>>tags<<option chkSearchFields>>fields<<option chkSearchShadows>>shadows<<option chkCaseSensitiveSearch>>case-sensitive <<option chkRegExpSearch>>text patterns<<option chkSearchByDate>>sort by date
{{squote{<<newTiddler tag:'Sexuality' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Sexuality")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
<<search>>[[Progress chart]][[Procedure]][[Biblio info]]<<closeAll>><<permaview>><<newTiddler>><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel "options »" "Change TiddlyWiki advanced options">>
<<tabs txtMainTab "More" "More lists" TabMore "Timeline" "Timeline" TabTimeline "All" "All tiddlers" TabAll "Tags" "All tags" TabTags>>
Open http://www.flickr.com/photos/giffmex/sets/72157627180627492/show/ to see the slideshow.
Open http://www.flickr.com/photos/giffmex/sets/72057594070076726/show/ to view the slideshow.
Open http://www.flickr.com/photos/giffmex/sets/72057594070112342/show/ to view the slideshow
Open http://www.flickr.com/photos/giffmex/sets/72157602876320627/show/ to view the slideshow
Open http://www.flickr.com/photos/giffmex/sets/72157601916063132/show/ to view the slideshow
Open http://www.flickr.com/photos/giffmex/sets/72157625838046738/show/ to view the slideshow.
Open http://www.flickr.com/photos/giffmex/sets/72057594070076462/show/ to view the slideshow.
''Insights on spirituality'' | [[@|SpiritualityTOC]]
-----
*[[Church life and participation]] (<<getTagCount "Church life and participation">>)
*[[Evangelism]] (<<getTagCount "Evangelism">>)
*[[Prayer]] (<<getTagCount "Prayer">>)
*[[Worship]] (<<getTagCount "Worship">>)
/***
''Inspired by [[TiddlyPom|http://www.warwick.ac.uk/~tuspam/tiddlypom.html]]''
|Name|SplashScreenPlugin|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/#SplashScreenPlugin|
|Version|0.21 |
|Requires|~TW2.08+|
!Description:
Provides a simple splash screen that is visible while the TW is loading.
!Installation
Copy the source text of this tiddler to your TW in a new tiddler, tag it with systemConfig and save and reload. The SplashScreen will now be installed and will be visible the next time you reload your TW.
!Customizing
Once the SplashScreen has been installed and you have reloaded your TW, the splash screen html will be present in the MarkupPreHead tiddler. You can edit it and customize to your needs.
!History
* 20-07-06 : version 0.21, modified to hide contentWrapper while SplashScreen is displayed.
* 26-06-06 : version 0.2, first release
!Code
***/
//{{{
var old_lewcid_splash_restart=restart;
restart = function()
{ if (document.getElementById("SplashScreen"))
document.getElementById("SplashScreen").style.display = "none";
if (document.getElementById("contentWrapper"))
document.getElementById("contentWrapper").style.display = "block";
old_lewcid_splash_restart();
if (splashScreenInstall)
{if(config.options.chkAutoSave)
{saveChanges();}
displayMessage("TW SplashScreen has been installed, please save and refresh your TW.");
}
}
var oldText = store.getTiddlerText("MarkupPreHead");
if (oldText.indexOf("SplashScreen")==-1)
{var siteTitle = store.getTiddlerText("SiteTitle");
var splasher='\n\n<style type="text/css">#contentWrapper {display:none;}</style><div id="SplashScreen" style="border: 3px solid #ccc; display: block; text-align: center; width: 320px; margin: 100px auto; padding: 50px; color:#000; font-size: 28px; font-family:Tahoma; background-color:#eee;"><b>'+siteTitle +'</b> is loading<blink> ...</blink><br><br><span style="font-size: 14px; color:red;">Requires Javascript.</span></div>';
if (! store.tiddlerExists("MarkupPreHead"))
{var myTiddler = store.createTiddler("MarkupPreHead");}
else
{var myTiddler = store.getTiddler("MarkupPreHead");}
myTiddler.set(myTiddler.title,oldText+splasher,config.options.txtUserName,null,null);
store.setDirty(true);
var splashScreenInstall = true;
}
//}}}
{{floatcenter{<html><a href="javascript:void(0)" onclick="story.closeAllTiddlers();story.displayTiddlers(null,store.getTiddlerText('DefaultTiddlers').readBracketedList())">home</a></html> - <<randomTiddler +point>> - <<search>>}}}{{floatright{<<tiddler ToggleRightSidebar>>}}}
[[JqueryTreeviewCSS-T]]
/*{{{*/
div[tags~="point"] .viewer {font-family:'Droid Sans', sans-serif; font-size: 1.4em; margin-top: 2em;width:30em;}
div[tags~="index"] .viewer {font-family:'Droid Sans', sans-serif; font-size: 1em; margin-top: 2em;}
div[tags~="slimindex"] .viewer li {padding-top: 0em; padding-bottom: 0em;}
.tagCloud span{height: 3.5em; margin: 10px; padding: 10px; width: 300px;}
.tagCloud1{font-size: 90%; font-weight: bold; padding-left: 10px; color: #550088;}
.tagCloud2{font-size: 110%; font-weight: bold; padding-left: 10px; color: #3355ff;}
.tagCloud3{font-size: 130%; font-weight: bold; padding-left: 10px; color: #33bb00;}
.tagCloud4{font-size: 150%; font-weight: bold; padding-left: 10px; color: #ff9900;}
.tagCloud5{font-size: 170%; font-weight: bold; padding-left: 10px; color: #ff9933;}
.tagCloud6{font-size: 190%; font-weight: bold; padding-left: 10px; color: #ff3300;}
.tiddler .tagged .listTitle{display:none}
.tagged {float:left;}
.tagged { list-style: none; margin: 0; padding: 0; }
.tagged li {display: inline;}
/*TiddlyWiki stuff that remains the same regardless of ColorPalette used*/
.button:hover {background:#fe8;}
#messageArea {background:#fe8;}
.popup li a:hover {background:#fe8;}
.annotation {background:#fe8;}
.highlight, .marked {background:#fe8;}
#backstageArea a:hover {background:#fe8;}
.viewer pre {border:1px solid #fe8; background:#ffc;}
.warning {background:#ffc;}
.popup li a:active {background:#ffc;}
#messageArea .button {background:#ffc;}
.wizard .button {color:[[ColorPalette::Foreground]]; background:#fe8; border: 1px solid;
border-color:#ffc [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] #ffc;}
.viewer {padding: 1em;}
#tiddlerDisplay .tabContents {padding-left: 2em; padding-right: 2em;}
.resize img {width: 1000px; }
.floatleft {float:left; }
.floatright {float:right; }
.storyMenu {text-align:center; margin-top: 10px; }
.floatcenter {text-align: center; margin-top: 10px; background-color:#eeeeee;}
.externalLink {text-decoration:none; font-weight: bold;}
.viewer ul {list-style-image:url(http://www.giffmex.org/images/goldbullet.jpeg);}
div[tags~="literary"] a.externalLink{color:#008822;}
div[tags~="literary"] a.externalLink:hover{color:#008822;}
div[tags~="themes"] a.externalLink{color:#aa4411;}
div[tags~="themes"] a.externalLink:hover{color:#aa4411;}
div[tags~="canonical"] a.externalLink{color:#770099;}
div[tags~="canonical"] a.externalLink:hover{color:#770099;}
/*FONT STUFF*/
body {font-family: Droid Sans, sans-serif; font-size: 16pt;}
.tiddlyLinkExisting {font-weight:normal;}
.tiddlyLinkNonExisting {font-style:normal; color:#bbbbbb;}
h1,h2,h3,h4,h5 {color: black; background: white; font-family: Cambria, Verdana; border-bottom: none;}
h2 {color: black; background:#eeeeee; font-family: Cambria, Verdana; border-bottom: none;}
.editor a {color:#dddddd;}
#editor a {color:#dddddd;}
.nowrap { white-space:nowrap;}
.bluey {font-weight: bold; color:[[ColorPalette::SecondaryPale]] font-size: 1.3em;}
.popup li .tagger a{display:inline}
.fontResizer {color:[[ColorPalette::SecondaryPale]]}
.indentgray {margin-left:3em; color:#888888; display:block;}
.bluebkg {background-color: #cccccc;}
.lessindent {margin-left: 1em;}
.bpn h1{background:#cccccc;}
.squote {color: #777777; font-size:12pt;}
.red {color: red; font-weight: bold;}
.boldSlider .button{border:none; font-weight: bold; color: black;}
.italicSlider .button{border:none; font-weight: normal; color: black;}
.plainSlider .button{border:none; font-weight: normal; color: black;}
.white {color: white;}
.small {font-size: .75em;}
.green {color:green;font-weight:bold;}
.blue {color:blue;font-weight:bold;}
.greek {font-family: Gentium; font-size: 16pt;}
.orange {color:#ee4400;}
.dkgrn {color:#339933;}
.purple {color:#990099;}
.dkblue {color:#1100cc;}
.dkgray {color:#777777;}
.burgu {color:#880011;}
.teenygray {color:#888888;font-size:0.8em;}
.floatrightblue {float: right; vertical-align:top; width: 200px; position: relative;}
.gkindent {font-family: Gentium; font-size: 16pt; margin-left: 2em; display:block;}
.greek {font-family: Gentium; font-size: 16pt;}
.hebrewNoAlign{font-family: Gentium; font-size: 20pt;}
.superbig {font-size: 20pt;}
.toolbar a {color:[[ColorPalette::SecondaryLight]];}
.selected .toolbar a {color:[[ColorPalette::SecondaryLight]];}
.selected .toolbar a:hover {color:[[ColorPalette::SecondaryLight]];}
/*MOVE TOOLBAR TO THE LEFT*/
.toolbar {text-align:center; font-size:.9em;}
/* SHORTENS THE HEIGHT OF THE HEADER */
.headerShadow {padding: 1em 0em .4em 1em;}
.headerForeground {padding: 1em 0em .4em 1em;}
.siteTitle {font-size:1.5em;}
.siteSubtitle {font-size:1em;}
/*MAINMENU*/
#mainMenu {width: 0em; max-height: 680px; text-align: left; font-size: 1em; overflow: auto; }
#displayArea {margin: 0em 15em 0em 0em;}
/*TABLE HEADER*/
.viewer th {padding-left: 15px; padding-right: 15px; vertical-align:top;}
.viewer td {padding-left: 15px; padding-right: 15px; vertical-align:top;}
.viewer th {color: #000; background-color: #cccccc; }
/*TIDDLER TOPMARGIN AND BUTTON BORDER*/
a.button{border: 0;}
.viewer { margin-top: .1em; }
.viewer {line-height: 1.7em;}
/*MENUBOXES*/
.menuboxwhite { display:block; padding: 1em; border:1px solid; background:white;}
.menuboxgray { display:block; padding: 1em; border:1px solid; background:#eeeeee;}
/*TIDDLER TITLE COLOR MATCH BOTTOM OF HEADER*/
.title {color:[[ColorPalette::PrimaryMid]];}
/*UNORDERED and ORDERED LISTS TWEAK*/
.viewer li {padding-top: 0.5em; padding-bottom: 0.5em;}
.viewer .tiddlyLinkExisting {font-weight:normal; color: #1177ff; border-color: white; text-align: left; vertical-align: top; }
/*LINELESS BLOCKQUOTES*/
.viewer blockquote {border-left: 0px; margin-top:0em; margin-bottom:0em; }
.siteTitle table {border: none; margin:none;}
/*INVISIBLE TABLE*/
.viewer .invisiblecomm table {border-color: white;}
.viewer .invisiblecomm table td { font-size: 1em; font-family: Verdana; border-color: white; padding: 10px 20px 10px 0px; text-align: left; vertical-align: top; padding: 20px;}
.viewer .invisiblecomm table th { color:[[ColorPalette::SecondaryLight]]; background-color: white; border-color: white; font-family: Verdana; font-size: 1.2em; font-weight: bold; padding: 10px 20px 10px 0px; text-align: left; vertical-align: top;}
.viewer .invisiblecomm table tr.leftColumn { background-color: #bbbbbb; }
.invisiblelist li {padding-top:0.25em;padding-bottom:0.25em;}
.invisiblelist .tiddlyLinkExisting {font-weight:normal; color: #1177ff; border-color: white; text-align: left; vertical-align: top;}
/*TOPMENU*/
#topMenu {padding-left: 1em; background-color: [[ColorPalette::PrimaryPale]]; color: #110077; font-family: Trebuchet MS, Verdana; font-size: 13pt; line-height: 1em;}
#topMenu table td {margin: 10px;}
#topMenu .purple a {color:[[ColorPalette::SecondaryPale]]}
/*Vertical tabs*/
.vTabs .tabset {font-family:'Droid Sans'; font-size:.8em; float:left; display:block; padding-left: 10px; padding-right: 5px; padding-top: 3px; padding-bottom: 3px;margin-top:.5em;min-width:120px; border:none;}
.vTabs .tabset .tab {display:block; text-align:left; padding-left: 10px; padding-right: 5px; padding-top: 3px; padding-bottom: 3px; margin:0 1px 1px 0; border:none;}
.vTabs .tabContents {border:none; margin-left:175px;max-width:88%;padding-left: 1em;}
.vTabs .tabContents .tabContents {border:none; background:transparent;}
/*TABS - see also stylesheettiddlersbar*/
.tabSelected{color:[[ColorPalette::PrimaryDark]];
background:#cccccc;
border-left:1px solid [[ColorPalette::TertiaryLight]];
border-top:1px solid [[ColorPalette::TertiaryLight]];
border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:#cccccc;}
.tabContents {background:white; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}
.viewer .tabContents {padding-top: none;padding-bottom: 2em;}
.tocTabs .tabset {float:left; text-align:left; display:inline; padding-left: none; padding-right: none; padding-top: none; padding-bottom: none;margin-top: none; margin-bottom: none;margin-right: none;}
.tocTabs .tabset .tab {text-align:left; vertical-align:top;display:inline; padding-left: none; padding-right: none; padding-top:none; padding-bottom: none; margin: 0 0 0 0; margin-bottom:35px;border:none;margin-right: 5px;}
.tocTabs .tabContents {font-size:.8em;font-family:Arial;border:none; margin-left: none; margin-top: none; padding-left: none; margin-right: none; padding-right: none;}
.tocTabs .tabContents .tabContents {border:none; background:transparent;margin-right: none;padding-right:none; padding-top: 30px; margin-top: 30px;}
/* TAB COLOR FIX */
.tabUnselected {color:#777777;}
.tiddler [firsttag='empty']:hover{background:blue !important;color:green;}
.tocTabs .tabset {float:left; text-align:left; display:inline; padding-left: none; padding-right: none; padding-top: none; padding-bottom: none;margin-top: none; margin-bottom: none;margin-right: none;}
.tocTabs .tabset .tab {text-align:left; vertical-align:top;display:inline; padding-left: none; padding-right: none; padding-top:none; padding-bottom: none; margin: 0 0 0 0; margin-bottom:35px;border:none;margin-right: 5px;}
.tocTabs .tabContents {font-size:.8em;font-family:Arial;border:none; margin-left: none; margin-top: none; padding-left: none; margin-right: none; padding-right: none;}
.tocTabs .tabContents .tabContents {border:none; background:transparent;margin-right: none;padding-right:none; padding-top: 30px; margin-top: 30px;}
/*TEXT BOXES*/
.textbox { display:block; padding:1em; border:1px solid; background:#eeeeee; color:#000; }
.menubox2 { display:block; padding: .25em; border:none; margin: 0; background:[[ColorPalette::TertiaryDark]]; [[ColorPalette::SecondaryDark]]; text-align: center; font-size: 1.6em;}
.menubox3 { display:block; padding:.25em; border:none; margin: 0; background:[[ColorPalette::TertiaryDark]]; [[ColorPalette::SecondaryDark]]; text-align: center; font-size: 2.5em;}
/* GIFFMEX TWEAKS TO STYLESHEETPRINT (so that nothing but tiddler title and text are printed) */
@media print {#mainMenu {display: none ! important;}}
@media print {#topMenu {display: none ! important;}}
@media print {#sidebar {display: none ! important;}}
@media print {#messageArea {display: none ! important;}}
@media print {#toolbar {display: none ! important;}}
@media print {.header {display: none ! important;}}
@media print {.tiddler .subtitle {display: none ! important;}}
@media print {.tiddler .toolbar {display; none ! important; }}
@media print {.tiddler .tagging {display; none ! important; }}
@media print {.tiddler .tagged {display; none ! important; }}
@media print {#displayArea {margin: 1em 1em 0em 1em; font-size: 12pt;}}
@media print {.pageBreak {page-break-before: always;}}
@media print {#tiddlersBar {display: none ! important;}}
@media print {#storyMenu {display: none ! important;}}
@media print {.tiddler .TiddlerNotes {display: none ! important;}}
/*}}}*/
!!!StyleSheetTiddlersBar
/*{{{*/
.button {border:1px; color:#777777;}
.tab {white-space:nowrap;}
{padding : 0.45em 0.5em 0.0em 1.0em;margin-left:0em;margin-right:0em}
{margin-bottom:0px;}
.tabSelected .button:hover {font-size:0.95em; color:[[ColorPalette::SecondaryPale]]; background: #ccc; padding : 0px 0px 0px 2px;}
.tabUnselected .button:hover {font-size:0.95em;color:[[ColorPalette::SecondaryPale]]; background: #ccc; padding : 0px 0px 0px 2px;}
.tabUnselected .button {font-size:0.95em; padding : 0px 0px 0px 2px;}
.tabSelected .button {font-size:0.95em; font-weight:bold; padding : 0px 0px 0px 2px;}
.tabSelected {background-color:#ccc;font-weight:bold;border: 0px #c06 solid;border-bottom:0px; font-size:0.95em;}
.tabUnselected {
background-color:[[ColorPalette::TertiaryPale]];
border:0px #eee solid; border-bottom:0px;font-size:0.95em; }
.tabUnselected .tabButton {font-size:0.75em;color:#333;background:transparent; padding : 0px 2px 0px 2px; margin: 0 0 0 1px;}
.tabSelected .tabButton {font-size:0.75em;color:#000;font-weight:bold;background:transparent;padding : 0px 2px 0px 2px; margin: 0 0 0 1px;}
.tabSelected .tabButton:hover {font-weight:bold; color: #f00;background: #fff;}
.tabUnselected .tabButton:hover {color: #f00;background: #fff;}
.tiddler, .tabContents {border-top:0px #fa0 solid;margin-left:0.5em;margin-right:0.5em;}
#tiddlersBar {background:#abf;line-height: 1.2em;}
#tiddlersBar {background:#fff;}
/*}}}*/
{{squote{<<newTiddler tag:'Substance abuse' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Substance abuse")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
<<tabs txtMoreTab "Shadowed" "Shadowed tiddlers" TabMoreShadowed "Missing" "Missing tiddlers" TabMoreMissing "Orphans" "Orphaned tiddlers" TabMoreOrphans>>
/***
|Name|TagCloudPlugin|
|Source|http://www.TiddlyTools.com/#TagCloudPlugin|
|Version|1.2.0|
|Author|Eric Shulman|
|Original Author|Clint Checketts|
|License|unknown|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|present a 'cloud' of tags using proportional font display|
!Usage
<<<
{{{<<tagCloud>>}}}
> show all tags in the document
{{{<<tagCloud tag tag tag...>>}}}
> show all tags except those listed as parameters
{{{<<tagCloud =tagvalue>>}}}
> show only tags that are themselves tagged with the indicated tag value (i.e., ~TagglyTagging usage)
<<<
!Examples
<<<
{{{<<tagCloud>>}}}
<<tagCloud>>
----
{{{<<tagCloud =package>>}}}
<<tagCloud =package>>
<<<
!Revisions
<<<
2008.09.05 [1.2.0] ELS: added '=tagname' parameter to include only tags that are themselves tagged with the specified value (i.e., ~TagglyTagging usage)
2008.07.03 [1.1.0] ELS: added 'segments' property to macro object. Extensive code cleanup
<<<
!Code
***/
//{{{
version.extensions.tagCloud = {major: 1, minor: 2 , revision: 0, date: new Date(2008,9,5)};
//Created by Clint Checketts, contributions by Jonny Leroy and Eric Shulman
config.shadowTiddlers.TagCloud="<<tagCloud>>";
setStylesheet("\
.tagCloud span{height: 3.5em;margin: 3px;}\
.tagCloud1{font-size: 80%;}\
.tagCloud2{font-size: 100%;}\
.tagCloud3{font-size: 120%;}\
.tagCloud4{font-size: 150%;}\
.tagCloud5{font-size: 180%;}\
.tagCloud6{font-size: 200%;}\
",
"tagCloudsStyles");
config.macros.tagCloud = {
noTags: "No tag cloud created because there are no tags.",
tooltip: "%1 tiddlers tagged with '%0'",
segments: 5,
handler: function(place,macroName,params) {
var tags=store.getTags();
if (params.length) {
if (params[0].substr(0,1)=="=") {
// include only specifically tagged tags
var tagged=store.getTaggedTiddlers(params[0].substr(1));
for (var t=0; t<tagged.length; t++)
tagged[t]=tagged[t].title;
for (var t=0; t<tags.length; t++)
if (!tagged.contains(tags[t][0])) tags[t][0]="";
} else {
// include all tags except those listed as params
for (var t=0; t<tags.length; t++)
if (params.contains(tags[t][0])) tags[t][0]="";
}
}
// get maximum number of tags to calculate tagCloud segment sizes
var mostTags=0;
for (var t=0; t<tags.length; t++) if (tags[t][0].length > 0)
if (tags[t][1]>mostTags) mostTags=tags[t][1];
var tagSegment=mostTags/config.macros.tagCloud.segments;
// output
var tagCloudWrapper = createTiddlyElement(place,"div",null,"tagCloud",null);
if(!tags.length)
createTiddlyElement(tagCloudWrapper,"span",null,null,this.noTags);
else for (var t=0; t<tags.length; t++) if (tags[t][0].length > 0){
tagCloudWrapper.appendChild(document.createTextNode(" --"));
var theTag = createTiddlyButton(tagCloudWrapper,
tags[t][0],this.tooltip.format(tags[t]),onClickTag,
"tagCloudtag tagCloud" + (Math.round(tags[t][1]/tagSegment)+1));
theTag.setAttribute("tag",tags[t][0]);
}
}
};
//}}}
Here is a tag cloud to see what topics have the most entries and, if desired, use this as an alternate way to access the entries.
<<tagCloud excludeLists systemConfig index slimindex point entry excludeSearch script temporary unf structure>>
/***
|Name|TaggedTemplateTweak|
|Source|http://www.TiddlyTools.com/#TaggedTemplateTweak|
|Documentation|http://www.TiddlyTools.com/#TaggedTemplateTweakInfo|
|Version|1.6.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|use alternative ViewTemplate/EditTemplate for specific tiddlers|
This plugin extends the core function, story.chooseTemplateForTiddler(), so that any given tiddler can be viewed and/or edited using alternatives to the standard tiddler templates.
!!!!!Documentation
>see [[TaggedTemplateTweakInfo]]
!!!!!Revisions
<<<
2009.09.02 [1.6.1] apply field-based template (if any) *before* tag-based template
| please see [[TaggedTemplateTweakInfo]] for previous revision details |
2007.06.11 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.TaggedTemplateTweak= {major: 1, minor: 6, revision: 1, date: new Date(2009,9,2)};
if (!config.options.txtTemplateTweakFieldname)
config.options.txtTemplateTweakFieldname='template';
Story.prototype.taggedTemplate_chooseTemplateForTiddler = Story.prototype.chooseTemplateForTiddler
Story.prototype.chooseTemplateForTiddler = function(title,template)
{
// get core template and split into theme and template name
var coreTemplate=this.taggedTemplate_chooseTemplateForTiddler.apply(this,arguments);
var theme=""; var template=coreTemplate;
var parts=template.split(config.textPrimitives.sectionSeparator);
if (parts[1]) { theme=parts[0]; template=parts[1]; }
else theme=config.options.txtTheme||""; // if theme is not specified
theme+=config.textPrimitives.sectionSeparator;
// look for template using title as prefix
if (!store.getTaggedTiddlers(title).length) { // if tiddler is not a tag
if (store.getTiddlerText(theme+title+template))
{ return theme+title+template; } // theme##TitleTemplate
if (store.getTiddlerText(title+template))
{ return title+template; } // TitleTemplate
}
// look for templates using custom field value as prefix
var v=store.getValue(title,config.options.txtTemplateTweakFieldname);
if (store.getTiddlerText(theme+v+template))
{ return theme+v+template; } // theme##valueTemplate
if (store.getTiddlerText(v+template))
{ return v+template; } // valueTemplate
// look for template using tags as prefix
var tiddler=store.getTiddler(title);
if (!tiddler) return coreTemplate; // tiddler doesn't exist... use core result
for (i=0; i<tiddler.tags.length; i++) {
var t=tiddler.tags[i]+template; // add tag prefix to template
var c=t.substr(0,1).toUpperCase()+t.substr(1); // capitalized for WikiWord title
if (store.getTiddlerText(theme+t)) { return theme+t; } // theme##tagTemplate
if (store.getTiddlerText(theme+c)) { return theme+c; } // theme##TagTemplate
if (store.getTiddlerText(t)) { return t; } // tagTemplate
if (store.getTiddlerText(c)) { return c; } // TagTemplate
}
// no match... use core result
return coreTemplate;
}
//}}}
{{squote{<<newTiddler tag:'Technology' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Technology")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
|!Mk 10.11-12|!Mt 5.31-32|!Mt 19.9|!Lk 16.18|
|Anyone who divorces his wife|anyone who divorces his wife|anyone who divorces his wife,|Anyone who divorces his wife|
||except for marital unfaithfulness,|except for marital unfaithfulness,||
|and marries another woman||and marries another woman|and marries another woman|
|commits adultery against her.||commits adultery.|commits adultery,|
|And if she divorces her husband and marries another man, she commits adultery.|causes her to become an adulteress,|||
||and anyone who marries the divorced woman commits adultery.||and the man who marries a divorced woman commits adultery.|
|bgcolor:#eeffbb;''Acquisition virtues''<br>(passion for the truth)<br>*Inquisitiveness<br>*Teachableness<br>*Persistence<br>*Humility|bgcolor:#ddeebb;''Application virtues''<br>(passion for holiness)<br>*Will to do what one knows<br>*Love<br>*Fortitude<br>*Integrity<br>*Humility|
|bgcolor:#ddeebb;''Maintenance virtues''<br>(passion for consistency)<br>*Perseverance<br>*Courage<br>*Constancy<br>*Tenacity<br>*Patience<br>*Humility|bgcolor:#eeffbb;''Communication virtues''<br>(compassion for others)<br>*Clarity of expression<br>*Orderliness of presentation<br>*Aptness of illustration<br>*Humility|
{{squote{Source: James W. Sire, //Habits of the mind: intellectual life as a Christian calling.// (Downer's Grove, IL: ~InterVarsity Press, 2000), 110.}}}
/***
|''Name:''|TiddlersBarPluginMG|
|''Description:''|A bar to switch between tiddlers through tabs (like browser tabs bar).|
|''Version:''|1.2.5|
|''Date:''|Jan 18,2008|
|''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|
!Modification
2008.09.06 - Morris Gray (Added http://tw.lewcid.org/#OpenTopPlugin code to this plugin to overcome jumping to the top when invoking any popup. Deleted the offending code)
!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='none' 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.
<<option txtPreviousTabKey>> previous tab access key.
<<option txtNextTabKey>> next tab access key.
!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 : "do nothing";
config.options.txtPreviousTabKey = config.options.txtPreviousTabKey ? config.options.txtPreviousTabKey : "";
config.options.txtNextTabKey = config.options.txtNextTabKey ? config.options.txtNextTabKey : "";
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,
previousKey : config.options.txtPreviousTabKey,
nextKey : config.options.txtNextTabKey,
tabsAnimationSource : null, //use document.getElementById("tiddlerDisplay") if you need animation on tab switching.
handler: function(place,macroName,params) {
var previous = null;
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);
if (previous && config.macros.tiddlersBar.previousKey) previous.setAttribute("accessKey",config.macros.tiddlersBar.nextKey);
previous = "active";
}
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);
if (previous=="active" && config.macros.tiddlersBar.nextKey) btn.setAttribute("accessKey",config.macros.tiddlersBar.previousKey);
previous=btn;
}
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(config.macros.tiddlersBar.tabsAnimationSource,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);
}
var coreRefreshPageTemplate = coreRefreshPageTemplate ? coreRefreshPageTemplate : refreshPageTemplate;
refreshPageTemplate = function(title) {
coreRefreshPageTemplate(title);
if (config.macros.tiddlersBar) config.macros.tiddlersBar.refresh(document.getElementById("tiddlersBar"));
}
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.refreshers.none = function(){return true;}
config.shadowTiddlers.PageTemplate=config.shadowTiddlers.PageTemplate.replace(/<div id='tiddlerDisplay'><\/div>/m,"<div id='tiddlersBar' refresh='none' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div>\n<div id='tiddlerDisplay'></div>");
//}}}
{{squote{<<newTiddler tag:'Time management' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Time management")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
{{squote{<<newTiddler tag:'point' tag:'Titus' label:'New point' title:'pointWhat'>>}}}
*<<tiddler "pointTitus 3.1-2 clauses">>
{{squote{<<newTiddler tag:'point' tag:'Titus' label:'New point' title:'pointWhat'>>}}}
*<<tiddler "pointTitus 3.3 diagram">>
*<<tiddler "pointTitus 3.4-7 diagram">>
/%
|Name|ToggleRightSidebar|
|Source|http://www.TiddlyTools.com/#ToggleRightSidebar|
|Version|2.0.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|script|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|show/hide right sidebar (MainMenu)|
Usage: <<tiddler ToggleRightSidebar with: "label">>
Config settings:
config.options.chkShowRightSidebar (false)
config.options.txtToggleRightSideBarLabelShow (►)
config.options.txtToggleRightSideBarLabelHide (◄)
%/<script label="$1" title="show/hide right sidebar content">
var co=config.options;
if (co.chkShowRightSidebar=='undefined') co.chkShowRightSidebar=true;
co.chkShowRightSidebar=!co.chkShowRightSidebar;
var sb=document.getElementById('sidebar'); if (!sb) return;
sb.style.display=co.chkShowRightSidebar?'block':'none';
document.getElementById('displayArea').style.marginRight=co.chkShowRightSidebar?'':'1em';
saveOptionCookie('chkShowRightSidebar');
var labelShow=co.txtToggleRightSideBarLabelShow||(config.browser.isSafari?'◀':'◄');
var labelHide=co.txtToggleRightSideBarLabelHide||'►';
if (typeof(place)!='undefined' && '$1'=='$'+'1') {
place.innerHTML=co.chkShowRightSidebar?labelHide:labelShow;
place.title=(co.chkShowRightSidebar?'hide':'show')+' right sidebar';
}
var sm=document.getElementById('storyMenu'); if (sm) config.refreshers.content(sm);
</script><script>
var co=config.options;
if (co.chkShowRightSidebar=='undefined') co.chkShowRightSidebar=true;
var sb=document.getElementById('sidebar'); if (!sb) return;
sb.style.display=co.chkShowRightSidebar?'block':'none';
document.getElementById('displayArea').style.marginRight=co.chkShowRightSidebar?'':'1em';
if ('$1'=='$'+'1') {
var labelShow=co.txtToggleRightSideBarLabelShow||(config.browser.isSafari?'◀':'◄');
var labelHide=co.txtToggleRightSideBarLabelHide||'►';
place.lastChild.innerHTML=co.chkShowRightSidebar?labelHide:labelShow;
place.lastChild.title=(co.chkShowRightSidebar?'hide':'show')+' right sidebar';
}
</script>
|~ViewToolbar|closeTiddler +editTiddler > fields syncing permalink references jump|
|~EditToolbar|+saveTiddler -cancelTiddler deleteTiddler|
{{squote{<<newTiddler tag:'Travel tips' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Travel tips")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
Many Christians need to renew their commitment to evangelism. Other Christians are zealous to tell others about Jesus, leading many unbelievers to ask why this is so important to them. This list is an attempt to address both groups.
*Our love for God and our desire to see others worship him
*The joy God brings to our lives elicits our joyful testimony to others
*Our allegiance and obedience to the Lord, who gave us the Great Commission (Matthew 28.18-20)
*The responsibility we have before God for our fellow human beings (Ezekiel 3.18-19)
*The reality of hell
*Our loving concern for people who are lost without Christ
*The limited time before Christ’s return, which adds urgency to our witness
*Our desire that others experience the rich grace that we ourselves enjoy
*Jesus lives in us by his Spirit, and his love compels and constrains us
*The privilege of watching God himself work in people’s lives because of our witness to them
*The promise of reward from God
*Our desire to make the world a better place, which causes us to call people back to their role in caring for the world
{{squote{I originally posted this at http://www.giffmex.org/blog/?p=325}}}
{{squote{<<newTiddler tag:'Understanding group dynamics' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Understanding group dynamics")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
{{squote{<<newTiddler tag:'Understanding individuals' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Understanding individuals")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div></div>
<img src="http://www.giffmex.org/images/giffmexlogobrown.jpg" height='35px' alt="."/> </span><span class='title' macro='view title'></span>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
<html><iframe src="http://www.giffmex.org/blog/?p=132" width="1000" height="780"
style="border: none;"></iframe></html>
{{squote{<<newTiddler tag:'War and peace' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("War and peace")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
''Ways to browse''
*Browse through the index.
*Click the 'random' button for a while.
*See the topics with the most notes in 'Tag cloud'
*See what's new in 'Recent entries'.
*Use the search window.
*Click 'home' to start over.
*//But: don't use your browser's back and forward buttons to navigate, or you will leave the page.//
Do you like the ''~NoteStorm'' Christian database? If so, here's how you can help me:
*[[Give us your feedback]]
*[[Visit the rest of our site|http://www.giffmex.org]]
*[[Learn about the missions agency we belong to, CRWM|http://www.crcna.org/pages/crwm.cfm]]
*[[Donate to CRWM|http://www.crcna.org/pages/crwm_donate_online.cfm]] (In the dropdowns there, choose 'Missionaries - Latin America', then 'Gifford, David')
*[[Buy me a Kindle book at my Amazon wishlist|https://www.amazon.com/gp/registry/wishlist/1OTJM9IE7SPVS/ref=wl_web/]]
* ~PayPal for our site:<html><form action="https://www.paypal.com/cgi-bin/webscr" method="post"> <input name="cmd" type="hidden" value="_s-xclick" /> <input alt="PayPal - The safer, easier way to pay online!" name="submit" src="https://www.paypal.com/en_US/i/btn/btn_donate_LG.gif" type="image" /><img src="https://www.paypal.com/en_US/i/scr/pixel.gif" border="0" alt="" width="1" height="1" />
<input name="encrypted" type="hidden" value="-----BEGIN PKCS7-----MIIHRwYJKoZIhvcNAQcEoIIHODCCBzQCAQExggEwMIIBLAIBADCBlDCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb20CAQAwDQYJKoZIhvcNAQEBBQAEgYCDOphPrfxixGLSFLAVYRgOAIIMNkhG/fVpBpfPkFZ+/otUKEu2UHrY0szrTCsf73EmPs1hEqXAevosf4f3wmMQGaQ/+dxpooMXJJjv4Y2b74SuehERvjBeBrIOJ6eVVJyTRqTYVACX48cdtp9K8u/qFPEf389dSFw79O0qSSw2YDELMAkGBSsOAwIaBQAwgcQGCSqGSIb3DQEHATAUBggqhkiG9w0DBwQIvazyO9DMtDGAgaCV7RZqlbC45beBnYKwrZ/t12EFK0DQViCLvSD1OMX0VNiCuXK2lxtlpTzi0ZujHXrRjPZg6zZc5dMsL//Ervy+zUBl6jpsQg5UxqponKYcNnWXjErastgJdYP3Yy5l95L1MwsHnxzhvANg3cIuYhVOsvDNxc933cEdwMSBKI2Q9Kg6oixC49A6FTYW/Xgp2xfdINr7ema6Vgk9V3pge1xjoIIDhzCCA4MwggLsoAMCAQICAQAwDQYJKoZIhvcNAQEFBQAwgY4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLUGF5UGFsIEluYy4xEzARBgNVBAsUCmxpdmVfY2VydHMxETAPBgNVBAMUCGxpdmVfYXBpMRwwGgYJKoZIhvcNAQkBFg1yZUBwYXlwYWwuY29tMB4XDTA0MDIxMzEwMTMxNVoXDTM1MDIxMzEwMTMxNVowgY4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLUGF5UGFsIEluYy4xEzARBgNVBAsUCmxpdmVfY2VydHMxETAPBgNVBAMUCGxpdmVfYXBpMRwwGgYJKoZIhvcNAQkBFg1yZUBwYXlwYWwuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDBR07d/ETMS1ycjtkpkvjXZe9k+6CieLuLsPumsJ7QC1odNz3sJiCbs2wC0nLE0uLGaEtXynIgRqIddYCHx88pb5HTXv4SZeuv0Rqq4+axW9PLAAATU8w04qqjaSXgbGLP3NmohqM6bV9kZZwZLR/klDaQGo1u9uDb9lr4Yn+rBQIDAQABo4HuMIHrMB0GA1UdDgQWBBSWn3y7xm8XvVk/UtcKG+wQ1mSUazCBuwYDVR0jBIGzMIGwgBSWn3y7xm8XvVk/UtcKG+wQ1mSUa6GBlKSBkTCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb22CAQAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQCBXzpWmoBa5e9fo6ujionW1hUhPkOBakTr3YCDjbYfvJEiv/2P+IobhOGJr85+XHhN0v4gUkEDI8r2/rNk1m0GA8HKddvTjyGw/XqXa+LSTlDYkqI8OwR8GEYj4efEtcRpRYBxV8KxAW93YDWzFGvruKnnLbDAF6VR5w/cCMn5hzGCAZowggGWAgEBMIGUMIGOMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC1BheVBhbCBJbmMuMRMwEQYDVQQLFApsaXZlX2NlcnRzMREwDwYDVQQDFAhsaXZlX2FwaTEcMBoGCSqGSIb3DQEJARYNcmVAcGF5cGFsLmNvbQIBADAJBgUrDgMCGgUAoF0wGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMDgwMzIzMTU0MDU4WjAjBgkqhkiG9w0BCQQxFgQUN7zDTYDrAL6cj3fOJ2lKbzKgmcIwDQYJKoZIhvcNAQEBBQAEgYAsUnYV6vvQecisJkhmmfNmG2xemtFm7FfXCJZe+5sNDBiIgy/By44dLPor/j3KAmFsH27u4ORRVGgaYkG0/0Ga7ch1AZaMNCnrXQ8Yw6//ltBN+DPl7RWQ3hbgcPwbVarqkNM67LQ/Scfb22CKMAnKt4vjIeaWAnPySHVsYcqcpg==-----END PKCS7-----" /></form></html>
{{vTabs{<<tabs txtTOC
"Welcome" "Welcome" "WelcomeTOC"
"Instructions" "Instructions" "InstructionsTOC"
"Recent additions" "Most recent additions and changes" "RecentTOC"
"Tag cloud" "Tag cloud" "TagcloudTOC"
"Character and inspiration" "Character and inspiration" "CharacterTOC"
"Philosophy/The mind" "Philosophy/The mind" "PhilTOC"
"Body and emotions" "Body and emotions" "BodyEmotionsTOC"
"Interpersonal" "Interpersonal" "InterpersonalTOC"
"Spirituality" "Spirituality" "SpiritualityTOC"
"Home / Work / Society" "Home / Work / Society" "HomeWorkSocietyTOC"
"Miscellaneous" "Miscellaneous" "AcademicTOC">>
}}}
{{white{pp
pp
}}}{{superbig{
*Click the 'Random life insight' button above to get a random insight on thinking and living, from a Christian perspective. There are currently {{red{<<getTagCount point>>}}} life insights and {{red{<<getTagCount entry>>}}} longer entries.
*Click the home button to see the indexes, further tips, and more about us. It's that simple.
*See [[here|http:www.giffmex.org/randombibleinsight.html]] for our other random button file, with insights on the Bible, biblical interpretation, and theology.
}}}
Random life insight button
{{squote{<<newTiddler tag:'Words of inspiration' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Words of inspiration")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
{{squote{<<newTiddler tag:'Worldviews' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Worldviews")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
{{squote{<<newTiddler tag:'Worship' tag:'point' label:'New point' title:'pointWhat'>>}}}
<<forEachTiddler where 'tiddler.tags.contains("Worship")' write '"*<<tiddler [["+tiddler.title+"]]$)) [[View large|"+tiddler.title+"]]\n"'>>
See my list of [[19 reasons to resist temptation and do the right thing]].
"...one of the biggest problems in many poverty-alleviation efforts is that their design and implementation exacerbates the poverty of being of the economically rich - their god-complexes - and the poverty of being of the economically poor - their feelings of inferiority and shame." {{squote{Source: Steve Corbett and Brian Fikkert, //When Helping Hurts.// (Chicago: Moody Publishers, 2009), 65.}}}
An elderly woman told her pastor how good she thought his sermon was. In false modesty he replied, "Don't thank me, it was the Lord." To which the woman replied, "I didn't say it was THAT good!" {{squote{Source: Dr. Richard Little, //Kiss Your Church// (2002), 28}}}
When trying to learn and retain new information, it is far more effective to expose yourself to it briefly and repeatedly over time than it is to cram before a test.
“Anger is an acid that can do more harm to the vessel in which it is stored than to anything on which it is poured.” {{squote{Attributed to Mark Twain.}}}
"Where your talents and the needs of the world cross lies your calling." - attributed to Aristotle
Bad habits are like a soft bed -- easy to get into but hard to get out of. {{squote{Source unknown.}}}
We need to be develop the virtue of seeing and attending to, not only the people around us, but the people our society has never paid attention to. The chronically poor and abject become invisible to people of relative privilege. Christopher Philips calls it "blindness of the affluent". {{squote{Christopher Phillips, Six Questions of Socrates, 202-203}}}
"All that is required for evil to conquer is for good people to do nothing." - attributed to Edmund Burke.
War doesn’t make death more frequent. 100% of us die. It doesn’t make death more painful—most war deaths are quicker than illnesses or old age. While it makes some die earlier, it doesn’t matter at the time of death how many years we have behind us. It doesn’t decrease our chances of dying at peace with God—preparation for war breeds preparation for death. What war does is force us to remember death and take notice of it. THAT is what we hate about war. {{squote{(Attributed to C. S. Lewis)}}}
''Checkmate'' is Persian for 'The king (sheik) is dead.'
"There but for the grace of God goes God." {{squote{Sir Winston Churchill}}}
''Circumcision'' means 'cutting around' (like circle + incision)
How should we live? What should be the deciding factor(s) in our ethical decision-making? There are four main theories regarding normative ethics or metaethics. [[See my summary here|A classification of ethical theories]].
"Most of us spend many hours each week watching celebrated athletes playing in enormous stadiums. Instead of making music, we listen to platinum records cut by millionaire musicians. Instead of making art, we go to admire paintings that brought in the highest bids at the latest auction. We do not run risks acting on our beliefs, but occupy hours each day watching actors who pretend to have adventures, engaged in mock-meaningful action....This vicarious participation is able to mask, at least temporarily, the underlying emptiness of wasted time. But it is a very pale substitute for attention invested in real challenges. The flow experience that results from the use of skills leads to growth; passive entertainment leads nowhere. Collectively we are wasting each year the equivalent of millions of years of human consciousness. The energy that could be used to focus on complex goals, to provide enjoyable growth, is squandered on patterns of stimulation that only mimic reality." {{squote{Source: Mihaly Csikszentmihalyi, Excerpt from "Flow: The Psychology of Optimal Experience." found at http://tempeturleymusings.blogspot.com/2009/11/flow-free-time.html}}}
I liked [[this chart|http://img.gawkerassets.com/img/17jz8rwdhfmudjpg/original.jpg]] on identifying cues and rewards in the quest to change habits. Especially helpful for me were these questions from the chart to help you identify the cue or trigger: "What time is it? Where are you? Who else is around? What did you just do? What emotions are you feeling?" One or more of these questions will help you see what triggers the undesirable habit. Then you determine the need or reward that the habit is addressing, and replace it with a new routine that will address the need but not be a drain on your life.
"Quality of life is determined by how you deal with your moments, not which moments happen and which don’t." {{squote{http://www.seetheperfection.com/book/2012/2/19/9-insights-on-life.html}}}
I really liked [[this post|http://www.vagabondish.com/clever-uses-digital-camera-traveling/]] on creative uses for digital cameras. Don't miss the tips in the comment section, too.
Here is a chart I did up comparing [[The Gospel texts on divorce]].
"Don't cry because it's over, smile because it happened." {{squote{Source: attributed to Dr. Seuss.}}}
''Ecstasy, ecstatic'' means literally to stand outside oneself (without ceasing to be oneself).
John Dickson emphasizes that the Lordship of Christ is the primary motivation for evangelism. Christ's Lordship is the motivation mentioned in both [[the Great Commission|http://biblia.com/bible/esv/Matthew%2028.18-20]] ("all authority has been given to me") and [[1 Peter 3.15|http://biblia.com/bible/esv/1%20Peter%203.15]] ("set apart Christ as Lord"). Christians submit to Christ's authority over them by witnessing, and by witnessing they call others to submit to his authority. Some view evangelism as an invitation to one method of personal fulfillment among many, but evangelism at its heart is a claim that Christ has authority over each person. {{squote{John Dickson, //The Best Kept Secret of Christian Mission.// (Grand Rapids: Zondervan, 2010), 28-31.}}}
For those who use the Getting Things Done system, I recommend downloading a ~TiddlyWiki for organizing tasks. Two really good ones are [[msGTD|http://mgsd.tiddlyspot.com/#mGSD]] and [[tbGTD|http://tbgtd.tiddlyspot.com/#desk]]. I fiddled with my own version a few years ago. Check it out here: [[TiddlyDu3|http://www.giffmex.org/tiddlydu3.html]].
See [[this external link|http://www.inspiration4everyone.com/stories/i_asked_god.html]] for a nice piece called "I asked God to take away my pride", about shedding wrong attitudes about life.
The word ''gossip'' has its roots in God. godsibb "godparent," from God + sibb "relative" (sibling). It is chatting with family and friends. Later it came to be used for idle, hurtful talk. {{squote{Source: Max Warren, //I Believe in the Great Commission.// (Grand Rapids, MI: Eerdmans, 1976)}}}
I really enjoyed [[Jodi's travel tips|http://www.legalnomads.com/2012/04/tips-world-travel.html]] at her blog, Legal Nomads.
"There is many a man who says he has no time, who proclaims his day to be full, but the fullness is the result of careless packing. I confess, as a minister, that the men to whom I most hopefully look for additional service are the busiest men. They are always willing to squeeze another item into their bulging portmanteau....But, even though our plea were legitimate, if our time were crowded, if the portmanteau were packed, if we cannot find a corner of the day for meditation in the school of Christ, then we must take something out and make room for it." {{squote{John Henry Jowett, //Sharing His Suffering.// (London, 1911, From AGES software)}}}
The words ‘happiness’ and ‘joy’ are often used interchangeably, and most people think they know what these words mean, until they are asked to define them. There are actually several different things that people call happiness: the physical sensation of pleasure; the state of ecstasy; a temporary, emotional reaction to an agreeable experience (“delight”); a positive attitude that lasts longer than delight and can often continue in spite of adverse circumstances (“a good mood”); a longer-lasting, more subtle acceptance of one’s condition (“contentment” or "satisfaction"); a state of well-being that is true of someone regardless of their emotional state (“blessedness”, "flourishing" or “eudaimonea”).
The Bible is far from being a joyless book: it has a rich vocabulary for the idea of happiness or joy, and it uses some of them fairly frequently. The Hebrew words are transliterated as simha, gil and hedad. The Greek words include agalliasis, asmenos, gelos, euphrosyne, eudaimoneo, hedeos, hilaros, makarios, skirtao and chara, and terms that come from the same word stems. {{squote{Sources: Dictionary of Later New Testament and Developments, “Joy”; New Dictionary of Biblical Theology, “Joy”.}}}
“Happy” (blessed) is the first word of the book of Psalms. {{squote{Source: Dictionary of Scripture and Ethics, “Happiness”.}}}
Of the four Gospels, Luke has almost double the number of references to joy (36 references) than the closest runner-up, John (20 references). Luke's second volume, the book of Acts, also has a large number of references to joy. In contrast, Mark is a ‘joyless’ Gospel, in one sense: it has only three references to joy, and two of them are negative references (people who receive the word with joy but who later fall away). {{squote{Source: Dictionary of Jesus and the Gospels, “Joy”.}}}
Jesus' Farewell Discourse to his disciples in John 13-17 contains a comparatively large number of references to joy:
*''14.28:'' "If you loved me, you would have rejoiced, because I am going to the Father, for the Father is greater than I."
*''15.11:'' "These things I have spoken to you, that my joy may be in you, and that your joy may be full."
*''16.20:'' "Truly, truly, I say to you, you will weep and lament, but the world will rejoice. You will be sorrowful, but your sorrow will turn into joy."
*''16.21:'' "When a woman is giving birth, she has sorrow because her hour has come, but when she has delivered the baby, she no longer remembers the anguish, for joy that a human being has been born into the world."
*''16.22:'' "So also you have sorrow now, but I will see you again, and your hearts will rejoice, and no one will take your joy from you."
*''16.24:'' "Ask, and you will receive, that your joy may be full."
*''17.13:'' "But now I am coming to you, and these things I speak in the world, that they may have my joy fulfilled in themselves."
{{squote{Source: Dictionary of Jesus and the Gospels, "Joy". Scripture references from the English Standard Version.}}}
The Bible commands us to rejoice and to delight in the Lord. "It's such an odd command, isn't it? You will be happy or else...." {{squote{Source: Rob Bell, Velvet Elvis, 35.}}}
Jesus and the writers of the New Testament repeatedly insist that Christians should rejoice in the trials they face (particularly persecution), not only in spite of them but precisely because of them (Mt. 5.10-12, Rom 5.3, Jas 1.2-3, 1 Peter 1.6-8). And the apostles practiced what they preached. For example, we see Paul and Silas singing in their Philippian prison cells in Acts 16.25. And Paul's most joy-filled letter, Phillipians, was written from prison. In that letter Paul commands the Philippians more than once to "rejoice in the Lord" (3.1, 4.4) and himself rejoices in the Lord (4.10) and expresses his deep contentment no matter what circumstance he is in (4.11-13).
In Galatians 5.22, joy is considered a character quality, a fruit that the Holy Spirit produces in our lives. And it is second on the list of the fruit of the Spirit, right after love. {{squote{Source: Dictionary of Paul and his Letters, “Joy”.}}}
At least since the time of Ecclesiastes, thinkers have noticed that when one makes happiness the goal of one’s life, one comes up empty. Happiness is not something to strive after but something simply to welcome and celebrate when it enters our lives.
*"Happiness is like a butterfly. The more you chase it, the more it eludes you. But if you turn your attention to other things, It comes and sits softly on your shoulder." {{squote{Source: Attributed to Henry David Thoreau on numerous quotable quotes pages.}}}
*John Stuart Mill: “Those only are happy who have their minds fixed on some object other than their own happiness.” {{squote{(quoted in Breakfast with Socrates)}}}
Here is something for personal reflection that Plato considered centuries ago: If you could spend your life doing nothing but feeling the pleasure of scratching an itch non-stop, would you be happy? Plato comes to a negative conclusion, that what we want is for the itching to stop, even though scratching it brings pleasure. But how many people would prefer to hang on to the 'itches' in their lives (addictions, obsessions, etc), rather than be cured?
One famous Reformed confession of the 16th century placed joy at the very heart of the meaning of life. //The Westminster Larger Confession// says that “Man’s chief and highest end is to glorify God, and fully to enjoy him forever”.
Philosophers such as Aristotle, Boethius and Thomas Aquinas have shown the weaknesses of many things people seek after to find happiness (money, power, fame, pleasure. etc). See my blog post summarizing their findings here: [[False sources of ultimate happiness|http://www.giffmex.org/blog/?p=162]].
Many of the greatest joys in life are moments of relief from suffering: the scratch of an itch, warmth after being out in the cold, triumph after many failures. And the longer we are prosperous the less joy it gives us, because we become too accustomed to it. Which raises the question: is the experience of happiness dependent upon adversity? Would a situation where there is no adversity (i.e., heaven) eventually become boring and joyless?
Philosophers have come to contradictory conclusions regarding happiness and how to achieve it:
*Various ancient philosophers saw happiness as a sort of tranquility or rest: when a person governs their many conflicting desires and goals so that they work together in harmony, and the person is at peace and no longer agitated by them.
*Aristotle, on the other hand, said that happiness is the result not of rest but of activity, of realizing one’s potential as a human being. “Nietzsche, in Beyond Good and Evil...: Searching for rest is desiring to be tranquilized or numbed. But there is a thrill and exhilaration that comes from the unease of conflicting aims and the rising to the challenge, even using the tension from the conflict as a motivator. A strong person will welcome the results of frustration and dissatisfaction.” {{squote{Source for the entire point as well as the quote: A Brief History of Happiness, Nicholas White, page number for the quote is not known.}}}
Hedonism and Epicureanism are two ancient philosophies that taught that pleasure should be the ultimate goal of one's life. But hedonism focused more on maximizing one's experience of pleasure, whereas Epicureanism, at least in its original form, focused also on minimizing displeasure and pain. So a Hedonist might seek after the pleasures of sexual orgies and drinking parties, but an Epicurean would seek after the simple pleasures of friendship and gardening, because loose sexuality and heavy drinking agitate the soul and often bring painful consequences.
Utilitarianism is a philosophy that says that people should live so as to bring about the greatest amount of happiness for the greatest amount of people. A criticism of utilitarianism is that one cannot often know or compare ahead of time how much happiness each potential action will bring about, so it is not a helpful guide for everyday decision-making. Another criticism is that different kinds of happinesses are hard to compare. "How do you compare pleasures from different domains? How many hot showers give as much pleasure as a concert? Is the pleasure of hearing a funny joke greater than that provided by a sunny day?" {{squote{The quote is from Nicholas White, A Brief History of Happness, page number unknown.}}}
Happiness comes not from having much to live on, but having much to live for. {{squote{(Attributed to Tyrone Edwards, source unknown)}}}
The United States Declaration of Independence says that the pursuit of happiness is an inalienable right of all people. But should we as human beings //pursue// happiness?
According to one article on happiness, pursuing happiness as an end “tends to weaken bonds between people and denigrate social and corporate concerns. This sets people over against each other in competition for the resources of individually pursued happiness.” {{squote{Source: Dictionary of Pastoral Care and Counseling "Happiness", 494}}}
“Happiness comes to those who have mercy on the poor (Prov. 14.21). Generosity breeds contentment. To have the kind of compassion which compels one to respond to the needs of those who are dispossessed and who cannot give anything in return is to taste the quality of life that God himself possesses.” {{squote{Source: Evangelical Dictionary of Theology, "Happiness", p. 493}}}
There is an entire area of study called ‘Happiness economics’ which attempts to research, measure and promote happiness on a societal level.
"Judging a person does not define who they are. It defines who //you// are." {{squote{Source: found all over the Internets.}}}
"...our identity [as church bodies] has too often been shaped by the position of others rather than by the center of biblical revelation." "Instead of defining what we are not, we must focus on what we are. We can draw a circle and define ourselves by the perimeter (by exclusion) or by the centerpoint (by declaration). In both there are exclusions, since those not consistent with our centerpoint are naturally and automatically excluded. But the difference is where we place our energy." {{squote{Kevin W. Mannoia, "What are we for?" article in Christianity Today, May 21, 2001, p. 82.}}}
“I've learned that people will forget what you said, people will forget what you did, but people will never forget how you made them feel.” {{squote{Maya Angelou. Source: http://thinkexist.com/quotes/maya_angelou/}}}
“In the end, it’s not going to matter how many breaths you took, but how many moments took your breath away.“ - Shing Xiong {{squote{Source: http://zze.st/wisdom-in-words-best-motivational-quotes/}}}
[[This article|http://messymiddle.com/2012/05/10/an-open-letter-to-pastors-a-non-mom-speaks-about-mothers-day/]] really impacted me about how non-mothers feel when churches have mothers stand up, etc, on Mother's Day.
See my cartoon on racism [[here|My cartoon on racism]].
See [[here|My cartoon on worship styles]] for my cartoon on worship styles.
See my cartoon on evangelism [[here|My evangelism cartoon]].
See here for my poem on defeatism, [[My Place]].
When feeling overwhelmed by a task or project, break it down into manageable components, or at least ask yourself, "What is the next concrete action step I need to move this forward?" {{squote{Inspired by David Allen's Getting Things Done (Penguin, 2002)}}}
Here is proof that over is better than under when it comes to toilet paper. ([[external link|http://currentconfig.com/2005/02/22/essential-life-lesson-1-over-is-right-under-is-wrong/]])
Ethics asks important questions about human living:
*Is there an objective standard for right and wrong?
*How do we tell right from wrong? What is the best way to decide on the morality of an action?
*What brings true human happiness?
If you are not a Christian and you can't understand why Christians feel so strongly about evangelism, or if you are a Christian and your evangelistic fervor is dim, read my list of [[Twelve reasons Christians try to persuade other people to become Christians]].
Travel blogger Jodi from Legal Nomads recommends packing a [[safety whistle|http://www.legalnomads.com/2010/12/my-safety-whistle-worth-its-weight-in-gold.html]] for international travel.
''Siesta'' means sexta, sixth hour, when the Romans napped at midday because it was hot. It is not quite the same as the English word 'nap', which refers to any brief sleep after eating. {{squote{Source: Algarabia magazine}}}
James W. Sire has a nice chart outlining the virtues one needs to be an intellectual. See it [[here|The intellectual virtues (Sire)]].
"A good argument starts from true premises and/or facts, makes no logical mistakes (fallacies), marshals a great body of evidence, answers objections, clarifies the issues and draws valid (therefore true) conclusions. This is actually a very tall order, especially when an argument deals with profound theological or philosophical issues. Errors can be made at every point. Not all our premises are likely to be, strictly speaking, true. They may be ill-formed, fuzzy, close-but-no-cigar premises. Our facts may not be facts but misunderstandings. Our logic may be flawed." {{squote{James W. Sire, //Why Good Arguments Fail.// (Downer's Grove, IL: ~InterVarsity Press, 2006), 19.}}}
Click the external link to see an infographic on [[Why sitting is killing you|http://guyswithbrain.com/wp-content/uploads/2011/06/The-Truth-About-Sitting-Down-infographic.png]].
To get rid of a stuffy nose, alternate between pressing your tongue against the roof of your mouth, and pressing between your eyebrows with one finger for 20 seconds. Your vomer bone will bend, and within about 20 seconds, your sinuses will begin to drain. {{squote{Source: somewhere on the Internets.}}}
The word ''testify'' derives from a time when men were required to swear on their testicles.
Research suggests that "...students who read a passage, then took a test asking them to recall what they had read, retained about 50 percent more of the information a week later than students who used two other methods. One of those methods — repeatedly studying the material — is familiar to legions of students who cram before exams. The other — having students draw detailed diagrams documenting what they are learning — is prized by many teachers because it forces students to make connections among facts." {{squote{Source: http://www.nytimes.com/2011/01/21/science/21memory.html?_r=1}}}
“The miracle of your mind isn’t that you can see the world as it is. It’s that you can see the world as it isn’t.” {{squote{Kathryn Schulz}}}
Timeboxing is setting a specific amount of time that we will dedicate to an open-ended task, and doing the best we can with it in that amount of time. See my summary of the method and benefits of this helpful time management technique [[here|My summary of Dave Cheong on timeboxing]].
"Today is the tomorrow that we worried about yesterday." {{squote{Source unknown.}}}
John Ortberg differentiates between 'trying' to do something and 'training' to do something. We fail to reach many goals because we think we can reach them by simply trying harder. In contrast, training and discipline are a matter of doing now those things within our reach that will help us do things later that we can't currently do now. He uses the illustration of athletes who train little by little for the Olympics, and applies this to the ongoing disciplines of the Christian life. {{squote{Source: John Ortberg, //The Life You've Always Wanted//. (Grand Rapids: Zondervan, 2002). Idea taken from the Spanish version, pages 45-49.}}}
Just as we can't tell which corn seeds will grow and which won't, so we shouldn't presume that such-and-such a person is hopeless. {{squote{Source: Summary of devotional by Pedro Vasquez in Sam and Helen Hofman, //Light From Tzeltal Lamps.// (Grand Rapids: Words of Hope, 2001), 99}}}
Understanding is about 'standing under' what is to be learned. Learning requires humility. {{squote{Source: //John Piper, Think: the life of the mind and the love of God.// (Wheaton, IL: Crossway, 2010)}}}
''Vacation'' means 'emptying', whereas holiday means 'holy day.'
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div></div>
<div class='tagged' macro='tags' 'Topic:'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
Modern neuroscience shows that as we repeat actions, we actually change the physical structure of our brains. Firing patterns between neurons get strengthened each time an action is repeated. This supports ancient theories on virtue that say that we form ruts or tracks in our soul each time we engage in habits both good and bad. Just like the wheels of a carriage are hard to steer out of a deep track in a dirt road, so bad habits are hard to break once they are formed. On the positive side, though, good habits are also reinforced by repetition. {{squote{Source: John Medina, //Brain Rules.// (Seattle: Pear Press, 2008)}}}
We miss the flavor of arete if we translate it merely as virtue. "Arete simply means excellence. Thus the hero of the Odyssey is a great fighter, a wily schemer, a ready speaker, a man of stout heart and broad wisdom...an excellent all-rounder." {{squote{Christopher Phillips, Six Questions of Socrates (NY: W. W. Norton, 2004), 30}}}
"[In ancient Greece] Each recognized that one could not attain personal excellence at the expense of others, but only by paving the way for them to attain it as well. There was no private self as there is today, only a self that was part of the whole, part of an excellent citizenry and society." {{squote{Christopher Phillips, Six Questions of Socrates, 31}}}
"Virtue," Eleftheria says, "is questioning convictions, with the intent of discovering a higher purpose in life, and then pursuing that purpose, so you can become more excellent, and in the process, inspire your society to become more excellent." {{squote{Christopher Phillips, Six Questions of Socrates (NY: W. W. Norton, 2004), 13}}} "Virtue is choosing a way of life that's so excellent, you'd rather sacrifice your life than sacrifice your way of life." {{squote{(ibid, 15)}}}
"[Voltaire said], 'Every man is guilty of all the good he didn't do.' How many of us in a position to do so devote even a fraction of our lives to doing what we can to make the world a place with less preventable suffering and cruelty?" {{squote{Christopher Phillips, Six Questions of Socrates, 202}}}
There is an inherent tension between what we want to do in life, what we are good at doing, and what we need to do to survive. Bud Caddell captures this tension and offers advice in [[this simple but wise graphic|Bud Caddell on what to do]].
''Five reasons we are losing our ability to listen'' (semi-paraphrased from the embedded video below)
#Since we have ways to record messages (writing, audio and video), our incentive to listen accurately has diminished. We can always double-check for accuracy later.
#The world is so noisy that we seek refuge from the noise in our own personal bubbles.
#We are more impatient. "We don't want oratory anymore, we want soundbites."
#Two-way conversation is being replaced by "personal broadcasting" (texting, blogging).
#We are becoming de-sensitized to the quiet, the subtle, the understated. Even the media has to scream or shock to get and keep our attention.
<html><object width="526" height="374">
<param name="movie" value="http://video.ted.com/assets/player/swf/EmbedPlayer.swf"></param>
<param name="allowFullScreen" value="true" />
<param name="allowScriptAccess" value="always"/>
<param name="wmode" value="transparent"></param>
<param name="bgColor" value="#ffffff"></param>
<param name="flashvars" value="vu=http://video.ted.com/talk/stream/2011G/Blank/JulianTreasure_2011G-320k.mp4&su=http://images.ted.com/images/ted/tedindex/embed-posters/JulianTreasure_2011G-embed.jpg&vw=512&vh=288&ap=0&ti=1200&lang=&introDuration=15330&adDuration=4000&postAdDuration=830&adKeys=talk=julian_treasure_5_ways_to_listen_better;year=2011;theme=how_the_mind_works;event=TEDGlobal+2011;tag=arts;tag=culture;tag=sound;&preAdTag=tconf.ted/embed;tile=1;sz=512x288;" />
<embed src="http://video.ted.com/assets/player/swf/EmbedPlayer.swf" pluginspace="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" wmode="transparent" bgColor="#ffffff" width="526" height="374" allowFullScreen="true" allowScriptAccess="always" flashvars="vu=http://video.ted.com/talk/stream/2011G/Blank/JulianTreasure_2011G-320k.mp4&su=http://images.ted.com/images/ted/tedindex/embed-posters/JulianTreasure_2011G-embed.jpg&vw=512&vh=288&ap=0&ti=1200&lang=&introDuration=15330&adDuration=4000&postAdDuration=830&adKeys=talk=julian_treasure_5_ways_to_listen_better;year=2011;theme=how_the_mind_works;event=TEDGlobal+2011;tag=arts;tag=culture;tag=sound;&preAdTag=tconf.ted/embed;tile=1;sz=512x288;"></embed>
</object><br></html>
Wikipedia has a nice chart of emotions [[here|http://upload.wikimedia.org/wikipedia/commons/thumb/c/ce/Plutchik-wheel.svg/591px-Plutchik-wheel.svg.png]]
I really liked [[this post|http://zenhabits.net/simple-work/]] on causes behind procrastination, and a simple plan that addresses those causes. I still think the Getting Things Done has some elements that one needs to complement this simple plan, but its simplicity is great.
//{{{
config.options.chkHttpReadOnly = false;
config.options.chkAutoSave = true;
config.options.chkSaveBackups = false;
config.options.chkAnimate = false;
config.options.chkShowRightSidebar = false;
config.options.chkShowLeftSidebar = true;
if (window.location.protocol!="file:") showBackstage=false;
config.options.chkSearchTitles=true;
config.options.chkSearchText=true;
config.options.chkSearchTags=true;
config.options.chkSearchFields=true;
config.options.chkSearchTitlesFirst=false;
config.options.chkSearchList=true;
config.options.chkSearchByDate=false;
config.options.chkSearchIncremental=true;
config.options.chkSearchShadows=false;
config.options.chkShowQuickEdit=true;
//}}}