Index: typo3/template.php =================================================================== --- typo3/template.php (revision 9758) +++ typo3/template.php (revision ) @@ -2130,11 +2130,73 @@ return $pageInfo; } + /** + * Makes a collapseable section. See reports module for an example + * + * @param string $title + * @param string $html + * @param string $id + * @param string $saveStatePointer + * @return string + */ + public function collapsesableSection($title, $html, $id, $saveStatePointer = '') { + $hasSave = $saveStatePointer ? TRUE : FALSE; + $collapsedStyle = $collapsedClass = ''; + if ($hasSave) { + /** @var $settings extDirect_DataProvider_BackendUserSettings */ + $settings = t3lib_div::makeInstance('extDirect_DataProvider_BackendUserSettings'); + $value = $settings->get($saveStatePointer . '.' . $id); + if ($value) { + $collapsedStyle = ' style="display: none"'; + $collapsedClass = ' collapsed'; + } else { + $collapsedStyle = ''; + $collapsedClass = ' expanded'; + } + } + $this->pageRenderer->loadExtJS(); + $this->pageRenderer->addExtOnReadyCode(' + Ext.select("h2.section-header").each(function(element){ + element.on("click", function(event, tag) { + var state = 0, + el = Ext.fly(tag), + div = el.next("div"), + saveKey = el.getAttribute("rel"); + if (el.hasClass("collapsed")) { + el.removeClass("collapsed").addClass("expanded"); + div.slideIn("t", { + easing: "easeIn", + duration: .5 + }); + } else { + el.removeClass("expanded").addClass("collapsed"); + div.slideOut("t", { + easing: "easeOut", + duration: .5, + remove: false, + useDisplay: true + }); + state = 1; + } + if (saveKey) { + try { + top.TYPO3.BackendUserSettings.ExtDirect.set(saveKey + "." + tag.id, state, function(response) {}); + } catch(e) {} + } + }); + }); + '); + return ' +

' . $title . '

+ ' . $html . ' + '; + } + - } +} // ****************************** Index: t3lib/core_autoload.php =================================================================== --- t3lib/core_autoload.php (revision 9741) +++ t3lib/core_autoload.php (revision ) @@ -135,7 +135,7 @@ 't3lib_tceformsinlinehook' => PATH_t3lib . 'interfaces/interface.t3lib_tceformsinlinehook.php', 't3lib_tcemain_checkmodifyaccesslisthook' => PATH_t3lib . 'interfaces/interface.t3lib_tcemain_checkmodifyaccesslisthook.php', 't3lib_tcemain_processuploadhook' => PATH_t3lib . 'interfaces/interface.t3lib_tcemain_processuploadhook.php', - 't3lib_mail_mboxtransport' => PATH_t3lib . 'mail/class.t3lib_mail_mboxtransport.php', + 't3lib_mail_mboxtransport' => PATH_t3lib . 'mail/class.t3lib_mail_mboxtransport.php', 't3lib_mail_message' => PATH_t3lib . 'mail/class.t3lib_mail_message.php', 't3lib_mail_mailer' => PATH_t3lib . 'mail/class.t3lib_mail_mailer.php', 'tx_t3lib_mail_hooks' => PATH_t3lib . 'mail/class.tx_t3lib_mail_hooks.php', @@ -189,6 +189,7 @@ 't3lib_tree_tca_databasetreedataprovider' => PATH_t3lib . 'tree/tca/class.t3lib_tree_tca_databasetreedataprovider.php', 't3lib_tree_tca_dataproviderfactory' => PATH_t3lib . 'tree/tca/class.t3lib_tree_tca_dataproviderfactory.php', 't3lib_tree_tca_tcatree' => PATH_t3lib . 'tree/tca/class.t3lib_tree_tca_tcatree.php', + 'extdirect_dataprovider_backendusersettings' => PATH_t3lib . 'extjs/dataprovider/class.extdirect_dataprovider_beusersettings.php', ); $tslibClasses = require(PATH_typo3 . 'sysext/cms/ext_autoload.php'); Index: typo3/sysext/reports/reports/class.tx_reports_reports_status.php =================================================================== --- typo3/sysext/reports/reports/class.tx_reports_reports_status.php (revision 9758) +++ typo3/sysext/reports/reports/class.tx_reports_reports_status.php (revision ) @@ -164,14 +164,6 @@ $providerState = $this->sortStatuses($providerStatus); $id = str_replace(' ', '-', $provider); - if (isset($GLOBALS['BE_USER']->uc['reports']['states'][$id]) && $GLOBALS['BE_USER']->uc['reports']['states'][$id]) { - $collapsedStyle = 'style="display: none"'; - $collapsedClass = 'collapsed'; - } else { - $collapsedStyle = ''; - $collapsedClass = 'expanded'; - } - $classes = array( tx_reports_reports_status_Status::NOTICE => 'notice', tx_reports_reports_status_Status::INFO => 'information', @@ -199,8 +191,7 @@ if ($sectionSeverity > 0) { $headerIcon = $icon[$sectionSeverity]; } - $content .= '

' . $headerIcon . $provider . '

-
' . $messages . '
'; + $content .= $GLOBALS['TBE_TEMPLATE']->collapsesableSection($headerIcon . $provider, $messages, $id, 'reports.states'); } return $content; @@ -282,20 +273,7 @@ return $statuses; } - /** - * Saves the section toggle state in the backend user's uc. - * - * @param array Array of parameters from the AJAX interface, currently unused - * @param TYPO3AJAX Object of type TYPO3AJAX - */ - public function saveCollapseState(array $params, TYPO3AJAX $ajaxObj) { - $item = t3lib_div::_POST('item'); - $state = (bool)t3lib_div::_POST('state'); - - $GLOBALS['BE_USER']->uc['reports']['states'][$item] = $state; - $GLOBALS['BE_USER']->writeUC(); - } +} -} if (defined('TYPO3_MODE') && isset($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/reports/reports/class.tx_reports_reports_status.php'])) { Index: typo3/sysext/reports/mod/index.php =================================================================== --- typo3/sysext/reports/mod/index.php (revision 9758) +++ typo3/sysext/reports/mod/index.php (revision ) @@ -55,7 +55,6 @@ t3lib_extMgm::extPath('reports') . 'mod/mod_template.html' ); $this->doc->backPath = $GLOBALS['BACK_PATH']; - $this->doc->getPageRenderer()->loadScriptaculous('effects'); $this->doc->addStyleSheet( 'tx_reports', '../' . t3lib_extMgm::siteRelPath('reports') . 'mod/mod_styles.css' @@ -111,29 +110,6 @@ function jumpToUrl(URL) { document.location = URL; } - var state; - Event.observe(document, "dom:loaded", function(){ - $$("h2.section-header").invoke("observe", "click", function(event){ - var item = Event.element(event); - // possible icon inside h2 - if (item.hasClassName("t3-icon")) { - item = item.up("h2"); - } - if (item.hasClassName("expanded")) { - item.removeClassName("expanded").addClassName("collapsed"); - Effect.BlindUp(item.next("div"), {duration : 0.5}); - state = 1; - } else { - item.removeClassName("collapsed").addClassName("expanded"); - Effect.BlindDown(item.next("div"), {duration : 0.5}); - state = 0; - } - event.stop(); - new Ajax.Request("ajax.php", { - parameters : "ajaxID=Reports::saveCollapseState&item=" + item.id + "&state=" + state - }); - }); - }); '; $this->doc->postCode='