commit
0cc6728257
@ -0,0 +1,179 @@ |
||||
<?php |
||||
// PIM functions (for PmWiki) |
||||
// consider adding other related scripts here too (e.g. MemoryRecipe, Recalls, GroupStats, ...) |
||||
// http://fabien.benetou.fr/pub/graphformatexporter.php.txt |
||||
// http://fabien.benetou.fr/pub/memorization.php.txt |
||||
// add to a proper local Git repository with web interface |
||||
|
||||
if ($GLOBALS['action'] == 'edit' && ( $GLOBALS['Author'] == 'Fabien' || $GLOBALS['Author'] == 'Utopiah' ) ) LoadPageTemplate($pagename, "$SkinDir/edit.tmpl"); |
||||
|
||||
//display working status |
||||
// see http://fabien.benetou.fr/Tools/Greasemonkey#VirtualBlinders |
||||
function DisplayVisualStatus($pagename){ |
||||
global $PubDir, $PubDirUrl; |
||||
//$content = read($PubDir."currenttask"); |
||||
//case ($content) |
||||
//print "status: <img src=\"".$PubDirUrl."somepath".$icon_status_url."/".$content."\" />"; |
||||
} |
||||
|
||||
//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 = "<script src=\"$processingpath\" type=\"text/javascript\"></script>"; |
||||
$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.'<canvas data-src="'.$processingfile.'" width="'.$canvaswidth.'" height="'.$canvasheight.'"></canvas>'; |
||||
// 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 = "<div><center><img src=\"/pub/visualization/edits_per_page/{$pagename}.png\" alt=\"/pub/visualization/edits_per_page/{$pagename}.png\"/></br>(<a href=\"$ScriptUrl/Wiki/Visualization#timeline\">visualization details</a>).</center></div><hr />"; |
||||
} |
||||
|
||||
|
||||
//display images with transparancy invertionnaly proportional to last time of update |
||||
// http://fabien.benetou.fr/MemoryRecalls/ImprovingPIM#VisualDecayOfInformation |
||||
function DisplayDecay($pagename){ |
||||
|
||||
/* |
||||
consider |
||||
adding threshold |
||||
not keeping it linear (e.g. log) |
||||
but still constantly inscreasing between 0 and 1 |
||||
use a factor when matches (e.g. regex changing $impeding_factor or $first_edit) |
||||
regex would match groupname (e.g. "Person." with fast decay) or pagename or both (e.g. "Math" with slow decay) |
||||
yellowish background, looking like old paper |
||||
...rest got deleted by a dumb rm... |
||||
*/ |
||||
global $ScriptUrl; |
||||
$first_edit = 1212192000; |
||||
$now = time(); |
||||
//load page |
||||
$page = ReadPage($pagename); |
||||
if (!$page) return; |
||||
|
||||
$last_edit = $page["time"]; |
||||
//get last edit |
||||
|
||||
$destination_link = "$ScriptUrl/".strtr($pagename,".","/")."?action=edit"; |
||||
|
||||
//use the previous equation adding 1 - () |
||||
$opacity = round ( 1 - ( (($now - $first_edit)-($now-$last_edit)) / ($now - $first_edit)) , 2 ); |
||||
|
||||
$opacitymsg = "opacity=$opacity"; |
||||
if ($opacity > 0.8) |
||||
$opacitymsg = "<font color=\"red\">".$opacitymsg."</font>"; |
||||
|
||||
//if user if admin |
||||
if ( $GLOBALS['Author'] == 'Fabien' || $GLOBALS['Author'] == 'Utopiah' ) { |
||||
//for 1 to a multiplier of value |
||||
for ($i=0;$i<$opacity*10;$i++){ |
||||
// display another visual problem with a link back to improvingwiki#visualdecay |
||||
print "<div style=\"opacity:$opacity;position:absolute;top:".rand(60,800)."px;left:".rand(100,500)."px;\"><a href=\"$destination_link\">" |
||||
.decbin(rand(0,10000))."</a></div>"; |
||||
} |
||||
// add a good practice msg |
||||
print "<div style=\"opacity:$opacity;position:absolute;top:10px;left:450px;width:300px;background-color:gray;\"> |
||||
$opacitymsg edits should be done to check if |
||||
the informamtion presented is still relevant, |
||||
links are working, |
||||
opinion expressed still correct, etc. |
||||
</div>"; |
||||
} |
||||
|
||||
|
||||
//print img with opacity + warning message |
||||
|
||||
print "<div style=\"opacity:$opacity;\"><a name=\"Decay\"></a>If you can read this text ($opacitymsg) if means the page has not been edited for a long time. Consequently the information it holds might be deprecated or no longer represent the opinion of this author.</div>"; |
||||
|
||||
} |
Loading…
Reference in new issue