自作プラグイン/accordion.inc.php
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
** accordion.inc.php [#yfb9b0c7]
|RIGHT:125|LEFT:360|c
|~サマリ|見出し版の折りたたみプラグイン|
|~リビジョン|1.5|
|~対応バージョン|1.5.x|
|~投稿者|[[K]]|
|~投稿日|&new{2020-12-05 (土) 15:06:10};|
**概要 [#h746ca22]
WIKIWIKIにあるような見出し版折りたたみ(アコーディオン)プ...
[[自作プラグイン/region.inc.php]]を基にして作りました。
**導入する前に [#ffb55e85]
pukiwiki.ini.phpを編集する必要があります。
以下の定数を変更してください。
define('PKWKEXP_DISABLE_MULTILINE_PLUGIN_HACK', 1);
↓
define('PKWKEXP_DISABLE_MULTILINE_PLUGIN_HACK', 0);
**記載方法 [#f3469999]
#accordion(見出し,*,close){{
ここに本文を記載する。h2タグで閉じた状態で表示されます。
}}
#accordion(見出し,**,open){{
ここに本文を記載する。h3タグで開いた状態で表示されます。
}}
#accordion(見出し,***,close){{
ここに本文を記載する。h4タグで閉じた状態で表示されます。
}}
#accordion(見出し,****,open){{
ここに本文を記載する。h5タグで開いた状態で表示されます。
}}
**ダウンロード [#jc7bdd76]
正規作者版(2021/7/6 v1.5):
-https://github.com/PTOM76/PukiWiki-Plugins/releases/...
上記のURLからダウンロードしてPukiWikiのplugin/に入れてく...
**コード [#yd2c7cc8]
以下のコードをコピーしてaccordion.inc.phpという名前で保存...
-accordion.inc.php
<?php
// $Id: accordion.inc.php,v 1.5 2021/07/06 00:00:00 K Ex...
/**
* @link http://pkom.ml/?%E3%83%97%E3%83%A9%E3%82%B0%...
* @author K
* @license http://www.gnu.org/licenses/gpl.ja.html GPL
*/
// region.inc.php(author:xxxxx) https://pukiwiki.osd...
// 七海改修版参考 https://nanami.cute.bz/download/ac...
//-Accordionプラグインの定義
// 見出し(true) or 開くボタン(false) で開閉
define('PLUGIN_ACCORDION_CLICK_HEADER', true);
// falseで<head>に、trueで<body>にスタイルの要素を生成し...
define('PLUGIN_ACCORDION_COMPATIBILITY_STYLE', false);
// スタイルシートの定義
define('PLUGIN_ACCORDION_STYLE',
<<<EOD
.acd_btn {
cursor:pointer;
}
.acd_btn span {
cursor:pointer;
font-family: "MS Pゴシック", "MS PGothic", "ヒラギノ...
padding:1px 4px;
border:gray 1px solid;
color:gray;
EOD);
// false→table,display:inline
// true→div,display:block
define('PLUGIN_ACCORDION_DISPLAY', true);
function plugin_accordion_convert() {
static $builder = 0;
if ($builder == 0) $builder = new AccordionPlugin();
$builder -> setDefaultSettings();
if (func_num_args() >= 3){
$args = func_get_args();
$builder -> setDescription( array_shift($args) );
$builder -> setHeading( array_shift($args) );
foreach( $args as $value ){
if( preg_match("/^open/i", $value) ) {
$builder -> setOpened();
continue;
}
if( preg_match("/^close/i", $value) ) {
$builder -> setClosed();
continue;
}
}
}
$args = func_get_args();
$contents = $args[func_num_args()-1];
$contents = preg_replace("/\r\n|\r/", "\n", $contents);
$contents = explode("\n", $contents);
return $builder -> build()
.convert_html($contents)
.(PLUGIN_ACCORDION_DISPLAY ? '</div>' : '</td></tr></ta...
}
class AccordionPlugin {
private $description;
private $heading;
private $isOpened;
private $scriptVarName;
private $callCount;
private $display;
public function __construct() {
$this -> callCount = 0;
$this -> setDefaultSettings();
}
public function setDefaultSettings() {
$this -> description = "...";
$this -> heading = "h2";
$this -> isOpened = false;
$this -> display = PLUGIN_ACCORDION_DISPLAY ? $display...
}
public function setClosed() { $this -> isOpened = false...
public function setOpened() { $this -> isOpened = true; }
public function setDescription($description) {
$this -> description = convert_html($description);
$this -> description = preg_replace( "/^<p>/i", "", $t...
$this -> description = preg_replace( "/<\/p>$/i", "", ...
}
public function setHeading($heading) {
if ($heading == "1" || !(strcmp($heading,"*"))) $this ...
if ($heading == "2" || !(strcmp($heading,"**"))) $this...
if ($heading == "3" || !(strcmp($heading,"***"))) $thi...
if ($heading == "4" || !(strcmp($heading,"****"))) $th...
}
public function build() {
$this -> callCount++;
$html = array();
if ($this -> callCount <= 1){
$style = "<style>\n" . PLUGIN_ACCORDION_STYLE . "\n</...
if (PLUGIN_ACCORDION_COMPATIBILITY_STYLE) {
array_push($html, $style);
} else {
global $head_tags;
$head_tags[] .= $style;
}
}
array_push( $html, $this -> buildButtonHtml() );
array_push( $html, $this -> buildContentHtml() );
return join($html);
}
private function buildButtonHtml() {
$button = ($this -> isOpened) ? "-" : "+";
$onClick = <<<EOD
onclick="
if(document.getElementById('acd_content{$this -> callC...
document.getElementById('acd_content{$this -> callCou...
document.getElementById('acd_button{$this -> callCoun...
}else{
document.getElementById('acd_content{$this -> callCou...
document.getElementById('acd_button{$this -> callCoun...
}
"
EOD;
$onHeaderClick = "";
$onSpanClick = "";
if (PLUGIN_ACCORDION_CLICK_HEADER) {
$onHeaderClick = $onClick;
} else {
$onSpanClick = $onClick;
EOD;
}
$startTag = PLUGIN_ACCORDION_DISPLAY ? "" : "<table><t...
return <<<EOD
<{$this -> heading} class="acd_btn" $onHeaderClick>
<span id=acd_button{$this -> callCount} $onSpanClick>...
</{$this -> heading}>
{$startTag}
EOD;
}
private function buildContentHtml() {
$startTag = PLUGIN_ACCORDION_DISPLAY ? "div" : "td";
$contentStyle = ($this -> isOpened) ? "display:{$this ...
return <<<EOD
<{$startTag} id=acd_content{$this -> callCount} style=...
EOD;
}
}
**ライセンス [#d3402fb8]
-GPLv3
**コメント [#tf9f2eb1]
- display:blockとdisplay:inlineの箇所をどちらかに統一した...
- +-のところと、*のとこが文字比較になってなかったので修正...
- こちらでも挙動がおかしい問題を修正しました。 -- [[K]] &...
- tableだとなぜか幅を取るため、デフォルトでdiv、blockにし...
#comment
終了行:
** accordion.inc.php [#yfb9b0c7]
|RIGHT:125|LEFT:360|c
|~サマリ|見出し版の折りたたみプラグイン|
|~リビジョン|1.5|
|~対応バージョン|1.5.x|
|~投稿者|[[K]]|
|~投稿日|&new{2020-12-05 (土) 15:06:10};|
**概要 [#h746ca22]
WIKIWIKIにあるような見出し版折りたたみ(アコーディオン)プ...
[[自作プラグイン/region.inc.php]]を基にして作りました。
**導入する前に [#ffb55e85]
pukiwiki.ini.phpを編集する必要があります。
以下の定数を変更してください。
define('PKWKEXP_DISABLE_MULTILINE_PLUGIN_HACK', 1);
↓
define('PKWKEXP_DISABLE_MULTILINE_PLUGIN_HACK', 0);
**記載方法 [#f3469999]
#accordion(見出し,*,close){{
ここに本文を記載する。h2タグで閉じた状態で表示されます。
}}
#accordion(見出し,**,open){{
ここに本文を記載する。h3タグで開いた状態で表示されます。
}}
#accordion(見出し,***,close){{
ここに本文を記載する。h4タグで閉じた状態で表示されます。
}}
#accordion(見出し,****,open){{
ここに本文を記載する。h5タグで開いた状態で表示されます。
}}
**ダウンロード [#jc7bdd76]
正規作者版(2021/7/6 v1.5):
-https://github.com/PTOM76/PukiWiki-Plugins/releases/...
上記のURLからダウンロードしてPukiWikiのplugin/に入れてく...
**コード [#yd2c7cc8]
以下のコードをコピーしてaccordion.inc.phpという名前で保存...
-accordion.inc.php
<?php
// $Id: accordion.inc.php,v 1.5 2021/07/06 00:00:00 K Ex...
/**
* @link http://pkom.ml/?%E3%83%97%E3%83%A9%E3%82%B0%...
* @author K
* @license http://www.gnu.org/licenses/gpl.ja.html GPL
*/
// region.inc.php(author:xxxxx) https://pukiwiki.osd...
// 七海改修版参考 https://nanami.cute.bz/download/ac...
//-Accordionプラグインの定義
// 見出し(true) or 開くボタン(false) で開閉
define('PLUGIN_ACCORDION_CLICK_HEADER', true);
// falseで<head>に、trueで<body>にスタイルの要素を生成し...
define('PLUGIN_ACCORDION_COMPATIBILITY_STYLE', false);
// スタイルシートの定義
define('PLUGIN_ACCORDION_STYLE',
<<<EOD
.acd_btn {
cursor:pointer;
}
.acd_btn span {
cursor:pointer;
font-family: "MS Pゴシック", "MS PGothic", "ヒラギノ...
padding:1px 4px;
border:gray 1px solid;
color:gray;
EOD);
// false→table,display:inline
// true→div,display:block
define('PLUGIN_ACCORDION_DISPLAY', true);
function plugin_accordion_convert() {
static $builder = 0;
if ($builder == 0) $builder = new AccordionPlugin();
$builder -> setDefaultSettings();
if (func_num_args() >= 3){
$args = func_get_args();
$builder -> setDescription( array_shift($args) );
$builder -> setHeading( array_shift($args) );
foreach( $args as $value ){
if( preg_match("/^open/i", $value) ) {
$builder -> setOpened();
continue;
}
if( preg_match("/^close/i", $value) ) {
$builder -> setClosed();
continue;
}
}
}
$args = func_get_args();
$contents = $args[func_num_args()-1];
$contents = preg_replace("/\r\n|\r/", "\n", $contents);
$contents = explode("\n", $contents);
return $builder -> build()
.convert_html($contents)
.(PLUGIN_ACCORDION_DISPLAY ? '</div>' : '</td></tr></ta...
}
class AccordionPlugin {
private $description;
private $heading;
private $isOpened;
private $scriptVarName;
private $callCount;
private $display;
public function __construct() {
$this -> callCount = 0;
$this -> setDefaultSettings();
}
public function setDefaultSettings() {
$this -> description = "...";
$this -> heading = "h2";
$this -> isOpened = false;
$this -> display = PLUGIN_ACCORDION_DISPLAY ? $display...
}
public function setClosed() { $this -> isOpened = false...
public function setOpened() { $this -> isOpened = true; }
public function setDescription($description) {
$this -> description = convert_html($description);
$this -> description = preg_replace( "/^<p>/i", "", $t...
$this -> description = preg_replace( "/<\/p>$/i", "", ...
}
public function setHeading($heading) {
if ($heading == "1" || !(strcmp($heading,"*"))) $this ...
if ($heading == "2" || !(strcmp($heading,"**"))) $this...
if ($heading == "3" || !(strcmp($heading,"***"))) $thi...
if ($heading == "4" || !(strcmp($heading,"****"))) $th...
}
public function build() {
$this -> callCount++;
$html = array();
if ($this -> callCount <= 1){
$style = "<style>\n" . PLUGIN_ACCORDION_STYLE . "\n</...
if (PLUGIN_ACCORDION_COMPATIBILITY_STYLE) {
array_push($html, $style);
} else {
global $head_tags;
$head_tags[] .= $style;
}
}
array_push( $html, $this -> buildButtonHtml() );
array_push( $html, $this -> buildContentHtml() );
return join($html);
}
private function buildButtonHtml() {
$button = ($this -> isOpened) ? "-" : "+";
$onClick = <<<EOD
onclick="
if(document.getElementById('acd_content{$this -> callC...
document.getElementById('acd_content{$this -> callCou...
document.getElementById('acd_button{$this -> callCoun...
}else{
document.getElementById('acd_content{$this -> callCou...
document.getElementById('acd_button{$this -> callCoun...
}
"
EOD;
$onHeaderClick = "";
$onSpanClick = "";
if (PLUGIN_ACCORDION_CLICK_HEADER) {
$onHeaderClick = $onClick;
} else {
$onSpanClick = $onClick;
EOD;
}
$startTag = PLUGIN_ACCORDION_DISPLAY ? "" : "<table><t...
return <<<EOD
<{$this -> heading} class="acd_btn" $onHeaderClick>
<span id=acd_button{$this -> callCount} $onSpanClick>...
</{$this -> heading}>
{$startTag}
EOD;
}
private function buildContentHtml() {
$startTag = PLUGIN_ACCORDION_DISPLAY ? "div" : "td";
$contentStyle = ($this -> isOpened) ? "display:{$this ...
return <<<EOD
<{$startTag} id=acd_content{$this -> callCount} style=...
EOD;
}
}
**ライセンス [#d3402fb8]
-GPLv3
**コメント [#tf9f2eb1]
- display:blockとdisplay:inlineの箇所をどちらかに統一した...
- +-のところと、*のとこが文字比較になってなかったので修正...
- こちらでも挙動がおかしい問題を修正しました。 -- [[K]] &...
- tableだとなぜか幅を取るため、デフォルトでdiv、blockにし...
#comment
ページ名: