hypweb.net
XOOPSマニア  最新情報のRSS(サイト全体)
[ 自宅サーバーWebRing |ID=54 前後5表示乱移動サイト一覧 ]

19年7月21日(Sun) 16時45分
Counter: 18544, today: 1, yesterday: 0

[code][/code]の表示を改造 Fixed link

説明 Fixed link

XOOPSコードの[code][/code]は、プログラム(スクリプト)コードなどを入力したまま表示するものですが、標準では

  • コピーした場合に改行がなくなる。
  • " の前に余分な \ が付いてしまう。
    などの問題があります。

そこで、それを解決して、さらに見やすく便利にしてみました。

  • 画面からはみ出すような長い行または、長文の場合は、スクロールバーを表示する。
  • 画面に表示されたままの体裁でコピーできる。
  • IE系ブラウザでJavaScriptがONでしかもIEの設定で「スクリプトによる張り付けを許可する」(IEの規定値)にしている場合に、下部に表示される COPY ボタンでコピーできる。

とこんな感じです。

XOOPSファイル変更箇所 Fixed link

XOOPS_ROOT_URL/include/xoops.js Fixed link

以下の Function を追加

function h_xoops_make_copy_button(arg)
{
	if(navigator.userAgent.indexOf('MSIE') >=0 && navigator.userAgent.indexOf('Windows')>=0){
		document.write ("<input class=\"copyButton\" type=\"button\" value=\"COPY\" onclick=\"h_xoops_doCopy('" + arg + "')\"><br />");
	}
}

function h_xoops_doCopy(arg)
{
	var doc = document.body.createTextRange();
	doc.moveToElementText(document.all(arg));
	doc.execCommand("copy");
	alert('クリップボードにコピーしました。');
}
日本語を直接書いているので EUC-JP で保存してください。

XOOPS_ROOT_PATH/class/module.textsanitizer.php Fixed link

変更箇所が多いので、diff 形式です。
ついでにURLリンクのマークアップにWiki書式の

[[表示名:URL]]
[[表示名>URL]]

も使用できるようにしてあります。
さらに、ついでに [c(olor)] [s(ize)] [f(ont)] [e(mail)] の ( ) の中は省略できるようにしてあります。

diff内容 2004/3/17 23:04:15差し替えました。 Fixed link
*** /xoops206j/class/module.textsanitizer.php	Fri Aug 15 11:53:02 2003
--- /xoops/class/module.textsanitizer.php	Wed Mar 17 23:04:15 2004
***************
*** 129,137 ****
  	 **/
  	function &makeClickable(&$text)
  	{
! 		$patterns = array("/(^|[^]_a-z0-9-=\"'\/])([a-z]+?):\/\/([^, \r\n\"\(\)'<>]+)/i", "/(^|[^]_a-z0-9-=\"'\/])www\.([a-z0-9\-]+)\.([^, \r\n\"\(\)'<>]+)/i", "/(^|[^]_a-z0-9-=\"'\/])ftp\.([a-z0-9\-]+)\.([^, \r\n\"\(\)'<>]+)/i", "/(^|[^]_a-z0-9-=\"'\/:\.])([a-z0-9\-_\.]+?)@([^, \r\n\"\(\)'<>\[\]]+)/i");
! 		$replacements = array("\\1<a href=\"\\2://\\3\" target=\"_blank\">\\2://\\3</a>", "\\1<a href=\"http://www.\\2.\\3\" target=\"_blank\">www.\\2.\\3</a>", "\\1<a href=\"ftp://ftp.\\2.\\3\" target=\"_blank\">ftp.\\2.\\3</a>", "\\1<a href=\"mailto:\\2@\\3\">\\2@\\3</a>");
! 		return preg_replace($patterns, $replacements, $text);
  	}
  
  	/**
--- 129,160 ----
  	 **/
  	function &makeClickable(&$text)
  	{
! 		$patterns = array(
! 			"/(^|[^\]_a-z0-9-=\"'\/])(\[\[((?:(?!\]\]).)+)(&gt;|>|:))((?:https?|ftp|news):\/\/[!~*'();\/?:\@&=+\$,%#\w.-]+)(\]\])/i",
! 			"/(^|[^]_a-z0-9-=\"'\/])([a-z]+?):\/\/([^, \r\n\"\(\)'<>]+)/i",
! 			"/(^|[^]_a-z0-9-=\"'\/])www\.([a-z0-9\-]+)\.([^, \r\n\"\(\)'<>]+)/i",
! 			"/(^|[^]_a-z0-9-=\"'\/])ftp\.([a-z0-9\-]+)\.([^, \r\n\"\(\)'<>]+)/i",
! 			"/(^|[^]_a-z0-9-=\"'\/:\.])([a-z0-9\-_\.]+?)@([^, \r\n\"\(\)'<>\[\]]+)/i"
! 		);
! 		$replacements = array(
! 			"\\1<a href='\\5' target='_blank'>\\3</a>",
! 			"\\1<a href=\"\\2://\\3\" target=\"_blank\">\\2://\\3</a>",
! 			"\\1<a href=\"http://www.\\2.\\3\" target=\"_blank\">www.\\2.\\3</a>",
! 			"\\1<a href=\"ftp://ftp.\\2.\\3\" target=\"_blank\">ftp.\\2.\\3</a>",
! 			"\\1<a href=\"mailto:\\2@\\3\">\\2@\\3</a>"
! 		);
! 		$texts = preg_split("/\[code].*\[\/code\]/sU",$text);
! 		preg_match_all("/\[code].*\[\/code\]/sU",$text,$match,PREG_PATTERN_ORDER);
! 		$match[0][] = "";
! 		$ret = "";
! 		$i=0;
! 		foreach($texts as $block)
! 		{
! 			$ret .= preg_replace($patterns, $replacements, $block).$match[0][$i];
! 			$i++;
! 		}
! 		return $ret;
! 		//return preg_replace($patterns, $replacements, $text);
  	}
  
  	/**
***************
*** 147,153 ****
  		$patterns = array();
  		$replacements = array();
  		$patterns[] = "/\[code](.*)\[\/code\]/esU";
! 		$replacements[] = "'<div class=\"xoopsCode\"><code><pre>'.wordwrap(MyTextSanitizer::htmlSpecialChars('\\1'), 100).'</pre></code></div>'";
  		// RMV: added new markup for intrasite url (allows easier site moves)
  		// TODO: automatically convert other URLs to this format if XOOPS_URL matches??
  		$patterns[] = "/\[siteurl=(['\"]?)([^\"'<>]*)\\1](.*)\[\/siteurl\]/sU";
--- 170,177 ----
  		$patterns = array();
  		$replacements = array();
  		$patterns[] = "/\[code](.*)\[\/code\]/esU";
! 		//$replacements[] = "'<div class=\"xoopsCode\"><code><pre>'.wordwrap(MyTextSanitizer::htmlSpecialChars('\\1'), 100).'</pre></code></div>'";
! 		$replacements[] = "'<div class=\"xoopsCode\"><code><pre>'.trim(MyTextSanitizer::htmlSpecialChars('\\1',true),'\r\n').'</pre></code></div>'";
  		// RMV: added new markup for intrasite url (allows easier site moves)
  		// TODO: automatically convert other URLs to this format if XOOPS_URL matches??
  		$patterns[] = "/\[siteurl=(['\"]?)([^\"'<>]*)\\1](.*)\[\/siteurl\]/sU";
***************
*** 158,170 ****
  		$replacements[] = '<a href="\\2" target="_blank">\\3</a>';
  		$patterns[] = "/\[url=(['\"]?)([^\"'<>]*)\\1](.*)\[\/url\]/sU";
  		$replacements[] = '<a href="http://\\2" target="_blank">\\3</a>';
! 		$patterns[] = "/\[color=(['\"]?)([a-zA-Z0-9]*)\\1](.*)\[\/color\]/sU";
  		$replacements[] = '<span style="color: #\\2;">\\3</span>';
! 		$patterns[] = "/\[size=(['\"]?)([a-z0-9-]*)\\1](.*)\[\/size\]/sU";
  		$replacements[] = '<span style="font-size: \\2;">\\3</span>';
! 		$patterns[] = "/\[font=(['\"]?)([^;<>\*\(\)\"']*)\\1](.*)\[\/font\]/sU";
  		$replacements[] = '<span style="font-family: \\2;">\\3</span>';
! 		$patterns[] = "/\[email]([^;<>\*\(\)\"']*)\[\/email\]/sU";
  		$replacements[] = '<a href="mailto:\\1">\\1</a>';
  		$patterns[] = "/\[b](.*)\[\/b\]/sU";
  		$replacements[] = '<b>\\1</b>';
--- 182,194 ----
  		$replacements[] = '<a href="\\2" target="_blank">\\3</a>';
  		$patterns[] = "/\[url=(['\"]?)([^\"'<>]*)\\1](.*)\[\/url\]/sU";
  		$replacements[] = '<a href="http://\\2" target="_blank">\\3</a>';
! 		$patterns[] = "/\[c(?:olor)?=(['\"]?)([a-zA-Z0-9]*)\\1](.*)\[\/c(?:olor)?\]/sU";
  		$replacements[] = '<span style="color: #\\2;">\\3</span>';
! 		$patterns[] = "/\[s(?:ize)?=(['\"]?)([a-z0-9-]*)\\1](.*)\[\/s(?:ize)?\]/sU";
  		$replacements[] = '<span style="font-size: \\2;">\\3</span>';
! 		$patterns[] = "/\[f(?:ont)?=(['\"]?)([^;<>\*\(\)\"']*)\\1](.*)\[\/f(?:ont)?\]/sU";
  		$replacements[] = '<span style="font-family: \\2;">\\3</span>';
! 		$patterns[] = "/\[e(?mail)?]([^;<>\*\(\)\"']*)\[\/e(?:mail)?\]/sU";
  		$replacements[] = '<a href="mailto:\\1">\\1</a>';
  		$patterns[] = "/\[b](.*)\[\/b\]/sU";
  		$replacements[] = '<b>\\1</b>';
***************
*** 186,196 ****
  			$replacements[] = '<a href="'.XOOPS_URL.'/image.php?id=\\4" target="_blank">\\4</a>';
  			$replacements[] = '<a href="'.XOOPS_URL.'/image.php?id=\\2" target="_blank">\\3</a>';
  		} else {
! 			$replacements[] = '<img src="\\3" align="\\2" alt="" />';
  			$replacements[] = '<img src="\\1" alt="" />';
  			$replacements[] = '<img src="'.XOOPS_URL.'/image.php?id=\\4" align="\\2" alt="\\4" />';
  			$replacements[] = '<img src="'.XOOPS_URL.'/image.php?id=\\2" alt="\\3" />';
  		}
  		$patterns[] = "/\[quote]/sU";
  		$replacements[] = _QUOTEC.'<div class="xoopsQuote"><blockquote>';
  		//$replacements[] = 'Quote: <div class="xoopsQuote"><blockquote>';
--- 210,223 ----
  			$replacements[] = '<a href="'.XOOPS_URL.'/image.php?id=\\4" target="_blank">\\4</a>';
  			$replacements[] = '<a href="'.XOOPS_URL.'/image.php?id=\\2" target="_blank">\\3</a>';
  		} else {
! 			//$replacements[] = '<img src="\\3" align="\\2" alt="" />';
! 			$replacements[] = '<img src="\\3" style="float:\\2;" alt="" />';
  			$replacements[] = '<img src="\\1" alt="" />';
  			$replacements[] = '<img src="'.XOOPS_URL.'/image.php?id=\\4" align="\\2" alt="\\4" />';
  			$replacements[] = '<img src="'.XOOPS_URL.'/image.php?id=\\2" alt="\\3" />';
  		}
+ 		$patterns[] = "/\[clear]/i";
+ 		$replacements[] = '<div style="clear:both;"></div>';
  		$patterns[] = "/\[quote]/sU";
  		$replacements[] = _QUOTEC.'<div class="xoopsQuote"><blockquote>';
  		//$replacements[] = 'Quote: <div class="xoopsQuote"><blockquote>';
***************
*** 212,218 ****
  	 */
  	function &nl2Br($text)
  	{
! 		return preg_replace("/(\015\012)|(\015)|(\012)/","<br />",$text);
  	}
  
  	/**
--- 239,275 ----
  	 */
  	function &nl2Br($text)
  	{
! 		static $count = 0;
! 		$match = array();
! 		$texts = preg_split("/<div class=\"xoopsCode\"><code><pre>.*<\/pre><\/code><\/div>/sU",$text);
! 		if (preg_match_all("/<div class=\"xoopsCode\"><code><pre>.*<\/pre><\/code><\/div>/sU",$text,$match,PREG_PATTERN_ORDER))
! 			$count ++;
! 		
! 		$match[0][] = "";
! 		$ret = "";
! 		$i=0;
! 		foreach($texts as $block)
! 		{
! 			$match[0][$i] = preg_replace("/(\015\012)|(\015)|(\012)/","\n",$match[0][$i]);
! 			$c_line = count(explode("\n",$match[0][$i])) * 14 + 32; //Set 'line-height:14px;' on css.
! 			if (!empty($match[0][$i]))
! 			{
! 				if ($c_line < 420)
! 					$match[0][$i] = str_replace("<div class=\"xoopsCode\">","<div class=\"xoopsCode\" style=\"height:".$c_line."px;\">",$match[0][$i]);
! 				else
! 					$match[0][$i] = str_replace("<div class=\"xoopsCode\">","<div class=\"xoopsCode\" style=\"height:420px;\">",$match[0][$i]);
! 				
! 				$j_script = "<script type=\"text/javascript\"><!--\nh_xoops_make_copy_button('code_area".$count."_".$i."');\n--></script>";
! 				$bef = array("<pre>","</div>");
! 				$aft = array("<pre id=\"code_area".$count."_".$i."\">", "</div>".$j_script);
! 				$match[0][$i] = str_replace($bef,$aft,$match[0][$i]);
! 			}
! 			else
! 				$match[0][$i] = "";
! 			$ret .= preg_replace("/(\015\012)|(\015)|(\012)/","<br />\n",$block).$match[0][$i];
! 			$i++;
! 		}
! 		return $ret;
  	}
  
  	/**
***************
*** 250,257 ****
      *
      * @return	string
  	*/
! 	function &htmlSpecialChars($text)
  	{
  		//return preg_replace("/&amp;/i", '&', htmlspecialchars($text, ENT_QUOTES));
  		return preg_replace(array("/&amp;/i", "/&nbsp;/i"), array('&', '&amp;nbsp;'), htmlspecialchars($text, ENT_QUOTES));
  	}
--- 307,316 ----
      *
      * @return	string
  	*/
! 	function &htmlSpecialChars($text,$strip=false)
  	{
+ 		//if ($strip) $text = stripslashes($text);
+ 		if ($strip) $text = str_replace("\'","'",$text);
  		//return preg_replace("/&amp;/i", '&', htmlspecialchars($text, ENT_QUOTES));
  		return preg_replace(array("/&amp;/i", "/&nbsp;/i"), array('&', '&amp;nbsp;'), htmlspecialchars($text, ENT_QUOTES));
  	}

テーマでのスタイルシートの参考定義 Fixed link

/* COPY button for Code area */
input.copyButton {
	border: 1px solid #5E5D63; 
	color: #000000; 
	font-family: verdana, tahoma, arial, helvetica, sans-serif; 
	font-size: 10px; 
	text-align:center;
	background-color:EEF8FD;
}

/* Code and Quote Definition */
div.xoopsCode {
	font-size:12px;
	line-height:14px;
	border: blue 1px dotted;
	color:#000;
	background-color:#FFFFDD;
	padding:10px 0px 0px 10px;
	margin: 5px 0px 0px 0px;
	width: 650px;
	overflow: auto;
}

コメント Fixed link

  • \" が " に変換されてしまうバグがあったので、XOOPS_ROOT_PATH/class/module.textsanitizer.php のDIFF内容を差し替えました。 -- nao-pon 2004-03-17 (水) 23:18:57

Name:
付箋機能(wema) メニュー 
付箋の編集
文字色: 背景色:
お名前:  線接続id:

id.1:
通りすがりさん : 09/07/26 19:02

付箋?


Attach file: filefusen.dat 253 download [Information]
Reload   Diff Source Attach Attach List   Wiki Top Page List Search Resent Chenges Backup   Help   RSS feed
Page name:XOOPS/[code]を見やすく便利に [ Sended pings(0) ]
Author:nao-pon - 2009/07/26 19:02:47 JST(3646d)
Last edit:nao-pon - 2009/07/26 19:02:47 JST(3646d)
Editers:登録ユーザー
Back Link:通りすがりさん(859d) 通りすがりさん(2965d) nao-pon(4121d) XOOPS(4789d) nao-pon(5035d) 日本語(5992d)

ページコメント
The comments are owned by the poster. We aren't responsible for their content.

Track Back [ Track Back(0) ]
Track Back URL: https://xoops.hypweb.net/wiki/tb/661

このページのTopへ
ログイン
ユーザ名:

パスワード:

オートログイン

Basic 認証

Register now! | Lost Password?



メインメニュー
最新のページ
ブックマーク
Please log in to use it.
[Login]
新着トラックバック
サイト内 Wiki
☆ 検索 ☆



高度な検索(サイト内)
FireFox検索プラグイン
オンライン状況
合計 42 人がオンライン中 :-)
(Wiki [自由帳] : 2 人)

登録ユーザ: 0 & ゲスト: 42

もっと...
サイト情報
管理人

nao-pon
 

登録ユーザ数: 4610


Web Services by Yahoo! JAPAN
楽天ウェブサービスセンター
Amazon.co.jpアソシエイト
現在ページのQRコード
現在ページのQRコード
[携帯対応]
参照元情報