"; } //display editions through an horizontal line /* fomally done via GnuPlot, cf http://fabien.benetou.fr/Wiki/Visualization#timeline http://www.scholarpedia.org/article/Spike-response_model is probably too complicated for the small resolution */ function DisplayVisualEdits($pagename){ global $ScriptUrl, $PubDir, $FarmD; $processingpath = '/pub/libraries/processing.js'; $processingfile = "/pub/visualization/edits_per_page/$pagename.pjs"; $processinglib = ""; $first_edit = 1212192000; $now = time(); // draw the timeline from the first edit to now() // get the list of edits of the current page // "get inspired" by PrintDiff() in scripts/pagerev.php $canvaswidth = 600-2*10; $canvasheight = 10; $block_width = 4; $block_height = 8; $page = ReadPage($pagename); if (!$page) return; krsort($page); reset($page); // newest first // for each edit $canvas = " void setup() { size($canvaswidth, $canvasheight); PFont font; font = loadFont(\"FFScala-Bold-12.vlw\"); textFont(font); } void mouseMoved() { checkButtons(); } void mouseDragged() { checkButtons(); } void draw() { background(251); fill(0,0,255,20); noStroke(); "; $mousePressed = "void mousePressed() {"; $destination_link = "$ScriptUrl/".strtr($pagename,".","/")."?action=diff#diff"; $mousePressed .= "\t\tif (lastHovered>0) { link(\"$destination_link\"+lastHovered); }\n"; $checkButtons = "void checkButtons() {"; print $processinglib.''; // set to false to de-activate cache (practical for tests) $newest_diff = true; //$newest_diff = false; foreach($page as $k=>$v) { if (!preg_match("/^diff:(\d+):(\d+):?([^:]*)/",$k,$match)) continue; $diff = $match[1]; $diffclass = $match[3]; if ($diffclass=='minor') { $canvas .= "\t\tfill(0,255,0,20);\n"; } else { $canvas .= "\t\tfill(0,0,255,20);\n"; } $buttonname = "over".$diff."Button"; //$bools .= "boolean $buttonname = false;\n"; if (file_exists($FarmD.$processingfile) && $newest_diff) if ( filemtime($FarmD.$processingfile) > $diff) return; $newest_diff = false; // add a sightly transparent tick rectangle with its Unix timestamp link to the diff page // the mouse over a certain edit should change its color // see http://processingjs.org/learning/basic/embeddedlinks // or clicablerects.js via Pomax on :mozilla2/#processing.js (14/05/2011 ~11pm) $x = round ( ($canvaswidth - $block_width) * ( (($now - $first_edit)-($now-$diff)) / ($now - $first_edit))); $y = 1; $checkButtons .= "\t\tif ( mouseX > $x && mouseX < $x+$block_width) lastHovered = $diff; \n"; // if (mouseY > $y && mouseY < $y+$block_height) not really required // others should be set to false else one always jump to the olded diff mouved over $canvas .= "\t\trect($x,$y,$block_width,$block_height);\n"; } $canvas .= "\t\tstroke(0,155);\n"; $canvas .= "\t\tfill(0,0,255,80);\n"; $canvas .= "\t\ttext(\"Edits:\",2,10 );\n"; $canvas .= "\t\tfill(0,0,255,40);\n"; for ($year=2009;$year<2012;$year++){ //each year until now $unixyear = mktime(0,0,0,1,1,$year); $x = round ( ($canvaswidth - $block_width) * ( (($now - $first_edit)-($now-$unixyear)) / ($now - $first_edit))); $y = 0; $canvas .= "line($x,$y,$x,$y+$block_height+2); text(\"$year\",$x+2,$y+10 );\n"; } $canvas = $bools . $canvas ."}" . $mousePressed ."}" .$checkButtons . "}"; // load ProcessinJS $write_result = file_put_contents($FarmD.$processingfile,$canvas); // print resulting canvas $older_gnuplot_version = "