Saq once wrote the InlineTabsPlugin, don't know if it still works with the 
latest TW version:

DEMO

Note: you can space out the tabs to make editing easier, the linebreaks 
between tabs will be ignored:
{{{
<tabs mytabs>

<tab tab1>
This is my first tab
</tab>

<tab tab2>
This is my second tab
</tab>

<tab tab3>
This is my third tab
with more than one line
</tab>

<tab tab4>
</tab>

</tabs>
}}}

InlineTabsPlugin

//{{{
config.formatters.unshift( {
    name: "inlinetabs",
    match: "\\<tabs",
        lookaheadRegExp: /(?:<tabs (.*)>\n)((?:.|\n)*?)(?:\n<\/tabs>)/mg,
    handler: function(w)
    {
        this.lookaheadRegExp.lastIndex = w.matchStart;
        var lookaheadMatch = this.lookaheadRegExp.exec(w.source)
        if(lookaheadMatch && lookaheadMatch.index == w.matchStart)
            {
             var cookie = lookaheadMatch[1];
               var wrapper = createTiddlyElement(null,"div",null,cookie);
             var tabset = createTiddlyElement(wrapper,"div",null,"tabset");
             tabset.setAttribute("cookie",cookie);
             var validTab = false;
             var firstTab = '';
             var tabregexp = /(?:<tab 
(.*)>)(?:(?:\n)?)((?:.|\n)*?)(?:<\/tab>)/mg;
             while((m = tabregexp.exec(lookaheadMatch[2])) != null)
                 {
                 if (firstTab == '') firstTab = m[1];
                 var tab = 
createTiddlyButton(tabset,m[1],m[1],story.onClickInlineTab,"tab 
tabUnselected");
                 tab.setAttribute("tab",m[1]);
                 tab.setAttribute("content",m[2]);
                 tab.title = m[1];
                 if(config.options[cookie] == m[1])
                     validTab = true;
                 }
             if(!validTab)
                 config.options[cookie] = firstTab;
             w.output.appendChild(wrapper);
             story.switchInlineTab(tabset,config.options[cookie]);
             w.nextMatch = this.lookaheadRegExp.lastIndex;
            }
    }
})

Story.prototype.switchInlineTab = function(tabset,tab)
{
    var cookie = tabset.getAttribute("cookie");
    var theTab = null
    var nodes = tabset.childNodes;
    for(var t=0; t<nodes.length; t++)
    if(nodes[t].getAttribute && nodes[t].getAttribute("tab") == tab)
        {
        theTab = nodes[t];
        theTab.className = "tab tabSelected";
        }
    else
        nodes[t].className = "tab tabUnselected"
    if(theTab)
        {
        if(tabset.nextSibling && tabset.nextSibling.className == 
"tabContents")
            tabset.parentNode.removeChild(tabset.nextSibling);
        var tabContent = createTiddlyElement(null,"div",null,"tabContents");
        tabset.parentNode.insertBefore(tabContent,tabset.nextSibling);
        wikify(theTab.getAttribute("content"),tabContent);
        if(cookie)
            {
            config.options[cookie] = tab;
            saveOptionCookie(cookie);
            }
        }
}
    
Story.prototype.onClickInlineTab = function(e)
{
    story.switchInlineTab(this.parentNode,this.getAttribute("tab"));
    return false;
}
//}}}

-- 
You received this message because you are subscribed to the Google Groups 
"TiddlyWiki" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/tiddlywiki/-/Eczsen5Hs_QJ.
To post to this group, send email to tiddlywiki@googlegroups.com.
To unsubscribe from this group, send email to 
tiddlywiki+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/tiddlywiki?hl=en.

Reply via email to