--- a/src/jocondelab/static/jocondelab/js/front-timeline.js Wed Sep 25 12:44:50 2013 +0200
+++ b/src/jocondelab/static/jocondelab/js/front-timeline.js Wed Sep 25 12:47:19 2013 +0200
@@ -6,7 +6,7 @@
zoomLevel = 4,
zoomStep = Math.SQRT2,
minZoomLevel = 1,
- maxZoomLevel = 64,
+ maxZoomLevel = 256,
sliderWidth = 3000,
$slider = $(".timeline-mill-slider"),
$tlcontainer = $(".timeline-container"),
@@ -17,7 +17,8 @@
itemCount = 12,
tlCache = [], tlIdCache = [], currentTerm = null,
startSlide = startYear, endSlide = endYear, userStartSlide = startSlide, userEndSlide = endSlide,
- fromYear, toYear;
+ fromYear, toYear,
+ isRtl = $("html").is("[dir=rtl]");
function tToW(t) {
//return Math.pow(2 / (2-Math.min(1,Math.max(0,t))) - 1,gamma);
@@ -40,28 +41,40 @@
return tToW(yrToT(yr));
}
function deltaXToDeltaW(dx) {
- return dx / (zoomLevel * cWidth);
+ return (isRtl ? -1 : 1) * dx / (zoomLevel * cWidth);
}
function deltaWToDeltaX(dw) {
- return dw * zoomLevel * cWidth;
+ return (isRtl ? -1 : 1) * dw * zoomLevel * cWidth;
}
function wToX(w) {
- return deltaWToDeltaX(w - wCenter + (.5 / zoomLevel));
+ return (isRtl ? cWidth : 0) + deltaWToDeltaX(w - wCenter + (.5 / zoomLevel));
}
function xToW(x) {
- return deltaXToDeltaW(x) + wCenter - (.5 / zoomLevel);
+ return deltaXToDeltaW(x - (isRtl ? cWidth : 0)) + wCenter - (.5 / zoomLevel);
}
function wToMini(w) {
- return cWidth * w;
+ var res = cWidth * w;
+ if (isRtl) {
+ res = cWidth - res;
+ }
+ return res;
}
- function miniToW(m) {
- return m / cWidth;
+ function deltaMiniToDeltaW(m) {
+ return (isRtl ? -1 : 1) * m / cWidth;
}
function wToSlider(w) {
- return zoomLevel * sliderWidth * (w - wCenter + (.5 / zoomLevel));
+ var res = zoomLevel * sliderWidth * (w - wCenter + (.5 / zoomLevel));
+ if (isRtl) {
+ res = sliderWidth - res;
+ }
+ return res;
}
function sliderToW(slidepos) {
- return slidepos / (sliderWidth * zoomLevel) + wCenter - (.5 / zoomLevel);
+ var p = slidepos;
+ if (isRtl) {
+ p = sliderWidth - p;
+ }
+ return p / (sliderWidth * zoomLevel) + wCenter - (.5 / zoomLevel);
}
function yrToMiniX(yr) {
return wToMini(yrToW(yr));
@@ -85,16 +98,23 @@
wLineDist = null;
fromYear = wToYr(wCenter - .5 / zoomLevel);
toYear = wToYr(wCenter + .5 / zoomLevel);
- var yearAtQuarter = wToYr(wCenter - .25 / zoomLevel);
+ var wAtQuarter = (wCenter - .25 /zoomLevel),
+ yearAtQuarter = wToYr(wAtQuarter),
+ posAtQuarter = wToX(wAtQuarter);
for (var i = 0; i < lineDistances.length; i++) {
- if (yrToX(yearAtQuarter + lineDistances[i]) - cWidth / 4 < 50) {
+ var yr = yearAtQuarter + lineDistances[i],
+ x = yrToX(yr),
+ delta = x - posAtQuarter;
+ if (Math.abs(delta) < 50) {
break;
}
wLineDist = lineDistances[i];
}
startSlide = boundValue(userStartSlide);
endSlide = boundValue(userEndSlide);
- $slider.slider("values",[yrToSliderPos(startSlide),yrToSliderPos(endSlide)]);
+ var startPos = yrToSliderPos(startSlide),
+ endPos = yrToSliderPos(endSlide);
+ $slider.slider("values",[Math.min(startPos, endPos),Math.max(startPos, endPos)]);
updateSpans();
}
@@ -111,18 +131,20 @@
var ctx = canvas.getContext("2d");
var xstart = yrToMiniX(fromYear),
- xend = yrToMiniX(toYear);
+ xend = yrToMiniX(toYear),
+ xleft = Math.min(xstart, xend),
+ xright = Math.max(xstart, xend);
ctx.fillStyle = "#f0f2ff";
ctx.strokeStyle = "#3090ff";
ctx.beginPath();
- ctx.moveTo(xstart, 0);
- ctx.lineTo(xend, 0);
- ctx.lineTo(xend, 35);
+ ctx.moveTo(xleft, 0);
+ ctx.lineTo(xright, 0);
+ ctx.lineTo(xright, 35);
ctx.lineTo(cWidth, 70);
ctx.lineTo(cWidth, cHeight);
ctx.lineTo(0, cHeight);
ctx.lineTo(0, 70);
- ctx.lineTo(xstart, 35);
+ ctx.lineTo(xleft, 35);
ctx.closePath();
ctx.stroke();
ctx.fill();
@@ -141,7 +163,7 @@
ctx.moveTo(x,24);
ctx.lineTo(x,30);
ctx.stroke();
- ctx.textAlign = (i ? (i == miniLines.length - 1 ? "right" : "center") : "left" );
+ ctx.textAlign = (i ? (i == miniLines.length - 1 ? (isRtl ? "left" : "right" ) : "center") : (isRtl ? "right" : "left" ) );
ctx.fillText(y || 1, x,20);
}
ctx.textAlign = 'center';
@@ -171,8 +193,8 @@
return itemTpl({
current: (item.dbpedia_uri == currentTerm),
item: item,
- left: l,
- width: (r-l)
+ left: Math.min(l,r),
+ width: Math.abs(r-l)
});
}).value().join("");
$(".timeline-list").html(html);
@@ -233,7 +255,7 @@
Math.min(
1 - halfSpan,
dragmini ?
- (wcStart + miniToW(e.clientX - xstart)) :
+ (wcStart + deltaMiniToDeltaW(e.clientX - xstart)) :
(wcStart + deltaXToDeltaW(xstart - e.clientX))
)
);
@@ -278,8 +300,10 @@
max: sliderWidth,
values: [0, sliderWidth],
slide: function(e, ui) {
- userStartSlide = startSlide = Math.floor(sliderPosToYr(ui.values[0]));
- userEndSlide = endSlide = Math.floor(sliderPosToYr(ui.values[1]));
+ var y0 = Math.floor(sliderPosToYr(ui.values[0])),
+ y1 = Math.floor(sliderPosToYr(ui.values[1]));
+ userStartSlide = startSlide = Math.min(y0,y1);
+ userEndSlide = endSlide = Math.max(y0,y1);
updateSpans();
}
});