lilalo

annotate l3pre.php @ 150:822b36252d7f

Вывод больших фрагментов текста не теряется.

Большие фрагменты текста теперь не вырезаются бесследно.
Там, откуда они вырезаются, вставляются ссылки,
по которым можно посмотреть полную версию вывода.
Испытано на больших фрагментах текста,
содержащих до 5000 строк (фрагменты более 5000 строк по умолчанию
обрезаются административно; допустимые размеры задаются в l3config.pm).
Исправлены ошибки, из-за которых большие фрагменты
обрабатывались некорректно.
author igor@chub.in
date Tue Jun 23 01:15:02 2009 +0300 (2009-06-23)
parents 51a232faeb27
children
rev   line source
igor@142 1 <?
igor@150 2 $wgHooks['ParserAfterTidy'][] = 'wfLiLaLoParserAfterTidy';
igor@142 3 $wgExtensionFunctions[] = "wfLiLaLoExtension";
igor@142 4
igor@150 5 /*
igor@150 6
igor@150 7 More on this technic:
igor@150 8 http://www.mediawiki.org/wiki/Manual:Tag_extensions#How_can_I_avoid_modification_of_my_extension.27s_HTML_output.3F
igor@150 9
igor@150 10
igor@150 11 HTML tooltips from:
igor@150 12 http://www.walterzorn.com/tooltip/tooltip_e.htm#download
igor@150 13
igor@150 14 Also:
igor@150 15 http://sixrevisions.com/tutorials/javascript_tutorial/create_lightweight_javascript_tooltip/
igor@150 16
igor@150 17 */
igor@150 18
igor@142 19 function wfLiLaLoExtension() {
igor@142 20 global $wgParser;
igor@142 21 $wgParser->setHook( "lilalo", "renderLiLaLoPRE" );
igor@150 22 global $wgOut;
igor@150 23 $wgOut->addHTML('<script src="/js/wz_tooltip.js"></script>');
igor@142 24 }
igor@142 25
igor@150 26 $markerList = array();
igor@150 27
igor@142 28 function renderLiLaLoPRE( $input ) {
igor@150 29 global $markerList;
igor@143 30 preg_match('/[^\n]*l3: local_session_id=([0-9-]*)[^\n]*[\n]/', $input, $matches);
igor@143 31 $session_id=$matches[1];
igor@150 32 if ($session_id) {
igor@143 33 preg_match('/([0-9]*)-([0-9]*)/', $session_id, $matches);
igor@143 34 $session_start_time = intval($matches[2]);
igor@143 35 $hour=intval(date('G', $session_start_time));
igor@143 36 $min=intval(date('i', $session_start_time));
igor@143 37 $sec=intval(date('s', $session_start_time));
igor@143 38 $input = preg_replace('/[^\n]*l3: local_session_id=([0-9-]*)[^\n]*[\n]/', '', $input);
igor@143 39 $input = preg_replace('/((..):(..):(...)(#[^\n]*))/e',
igor@143 40 '\'$2:$3:$4<b><a href="http://xgu.ru/l3?page='.$session_id.'&id='
igor@143 41 .'\'.strval($session_start_time+3600*(intval("$2")-$hour)+60*(intval("$3")-$min)+1*(intval("$4")-$sec)).\''
igor@143 42 .'">$5</a></b>\'',
igor@143 43 $input);
igor@143 44 # .strval($session_start_time+3600*(intval($2)-$hour)+60*(intval($3)-$min)+(intval($4)-$sec))
igor@150 45 $time_prefix="$hour:$min:$sec ";
igor@150 46 }
igor@150 47 else
igor@150 48 {
igor@150 49 $tip_text='<table><tr><td>-n</td><td>show numerical addresses instead of trying to determine symbolic host names.<br/> This is useful if you are trying to determine why the route to your nameserver has vanished.</td></tr></table>';
igor@150 50 #$tip_text='<dv>1</dv>';
igor@150 51 $tip=" onmouseover=\"Tip('".$tip_text."')\" onmouseout=\"UnTip()\"";
igor@150 52 $input = preg_replace('/(%#.*)/', '<span style="font-weight:bold"'.$tip.'>$1</span>', $input);
igor@150 53 }
igor@150 54 $output = "<pre>$time_prefix$input</pre>";
igor@150 55 $markercount = count($markerList);
igor@150 56 $marker = "xx-lilalo-marker".$markercount."-xx";
igor@150 57 $markerList[$markercount] = $output;
igor@150 58 return $marker;
igor@150 59
igor@142 60 }
igor@142 61
igor@150 62 function wfLiLaLoParserAfterTidy(&$parser, &$text) {
igor@150 63 // find markers in $text
igor@150 64 // replace markers with actual output
igor@150 65 global $markerList;
igor@150 66 $keys = array();
igor@150 67 $marker_count = count($markerList);
igor@150 68
igor@150 69 for ($i = 0; $i < $marker_count; $i++) {
igor@150 70 $keys[$i] = 'xx-lilalo-marker' . $i . '-xx';
igor@150 71 }
igor@150 72
igor@150 73 $text = str_replace($keys, $markerList, $text);
igor@150 74 #$text = $marker_count;
igor@150 75 return true;
igor@150 76 }
igor@142 77 ?>