xoopscube/legacy — pull request #57 by nao-pon (2012-12-26 07:05:07+00:00)
Title: permit break in delegate call chain

delegate call
の実行時に続きに登録された処理をキャンセルできるようにする試みです。

delegate への登録時に reset()
するのではなく実行時に続く処理をキャンセルできるようにすることで、実行時のパラメタから判断して、自己処理するか他に積まれたタスクにするかを選択できるようになります。

具体的には、'Site.TextareaEditor.BBCode.Show'
において、与えられたクラス名から判断して、自己処理するかもしくは、登録済みの規定の動作にするかを分けたいと思っています。

コードでは次のような感じです。

```php
mRoot->mDelegateManager->add('Site.TextareaEditor.BBCode.Show',
array(&$this, 'BBCode_wiki_render'), XCUBE_DELEGATE_PRIORITY_FIRST);
}

function BBCode_wiki_render(&$html, $element) {
if (preg_match('/(?:^| )(?:html|rich|wysiwyg)(?: |$)/',
$element['class'])) {
return;
} else {
$element['class'] = trim(preg_replace('/ +/', '
', str_replace('bbcode', '', $element['class'])));
$html = ''.$element['value'].'';
return XCUBE_DELEGATE_CHAIN_BREAK;
}
}
}
```