Hello! I'm trying to write a plugin to show a progress bar. The idea is that the progress bar gets totally inlined with the tiddler text, showing up exactly where it was called, without affecting the line height. My code is fully functional, but it renders distorted bars(see attachment)!
Also, the progress bars are not being rendered where they should, which is on the same line as the sentences.
Here is the test tiddlers contents:
My bar: <<progressbar 28 120>>
First bar with values swapped <<progressbar 120 -28>>
Another bar:-<<progressbar 50 100>>
Only values:-<<progressbar 3 10 true false>>
Only percentage: <<progressbar 16 44 false true>>
Totaly clean: <<progressbar 24 44 false false>>
And here is my code
//{{{
//Thanks to Tobias Beer and Jremy Ruston
version.extensions.ProgressBarMacro = { major: 0, minor: 1, revision: 0, date: new Date(2010, 09, 21),
source: "
http://simonbaird.com/mptw/#HelloWorldMacro"
};
config.macros.progressbar = {};
config.macros.progressbar.defaultContainerDivStyle =
{"width": "200px", "border": "1px solid #0044bb", "margin": "0px 0.5em 0px 0.5em",
"padding": "1px", "background": "white", "position": "absolute", "float": "none", "display": "inline-block", "height": "12px"};
config.macros.progressbar.defaultContainerSpanStyle =
{"width": "200px", "text-align": "center", "display": "inline-block", "line-height": "12px"};
config.macros.progressbar.defaultBarStyle =
{"background-color": "#0e7ef5", "height": "10px", "float":"left", "position": "inline-block"};
config.macros.progressbar.init = function() {
if (!config.macros.progressbar.containerDivStyle){
config.macros.progressbar.containerDivStyle = config.macros.progressbar.defaultContainerDivStyle;
}
if (!config.macros.progressbar.containerSpanStyle){
config.macros.progressbar.containerSpanStyle = config.macros.progressbar.defaultContainerSpanStyle;
}
if (!config.macros.progressbar.barStyle){
config.macros.progressbar.barStyle = config.macros.progressbar.defaultBarStyle;
}
config.macros.progressbar.defaultShowVal = true;
config.macros.progressbar.defaultShowPct = true;
};
config.macros.progressbar.buildCaption = function (curr, maxv, pct, showVal, showPct){
var valCaption = curr + " / " + maxv;
var pctCaption = pct + "%";
var finalCaption = "" ;
if (showVal == true && showPct == true)
finalCaption = valCaption + " (" + pctCaption + ")";
else if (showVal == true)
finalCaption = valCaption;
else if (showPct == true)
finalCaption = pctCaption;
else
finalCaption = '\u00A0'; //add &nbps; to prevente caption from being empty
return finalCaption;
}
config.macros.progressbar.handler = function (place, macroName, params, wikifier, paramString, tiddler) {
var curr = Math.abs(params[0]);
var maxv = Math.abs(params[1]);
var showVal = config.macros.progressbar.defaultShowVal;
if (params.length> 2) showVal = eval(params[2]);
var showPct = config.macros.progressbar.defaultShowPct;
if (params.length> 3) showPct = eval(params[3]);
if (curr > maxv) {
var temp = curr;
curr = maxv;
maxv = temp;
}
var pct = Math.round((curr/maxv)*100);
var caption = config.macros.progressbar.buildCaption(curr, maxv, pct, showVal, showPct);
var wrapperDiv = createTiddlyElement(place,"div");
jQuery(wrapperDiv).css (config.macros.progressbar.containerDivStyle);
var wrapperSpan = createTiddlyElement(wrapperDiv,"span",null,null,caption);
jQuery(wrapperSpan).css (config.macros.progressbar.containerSpanStyle);
var progressDiv = createTiddlyElement(wrapperSpan,"div");
jQuery(progressDiv).css (config.macros.progressbar.barStyle);
jQuery(progressDiv).css ({'width': (pct + "%")});
};
//}}}
Anyone have any idea how I can fix those bars and make them look good?
Best regards
--
Rafael da Silva Carrasco
Mestrando em Ciência da ComputaçãoUniversidade Federal de Viçosa
Facebook
LinkedIn