mirror of
https://github.com/Mibew/mibew.git
synced 2025-01-31 13:24:41 +03:00
Create "additionalCss" HBS helper
This commit is contained in:
parent
bc45a6d3be
commit
9898fb0cbe
@ -203,8 +203,17 @@ class AssetManager implements AssetManagerInterface
|
||||
}
|
||||
|
||||
/**
|
||||
* Triggers "pageAddCSS" event and prepares CSS assets which are returned by
|
||||
* plugins.
|
||||
* Gets additional CSS assets by triggering some events.
|
||||
*
|
||||
* Triggers "pageAddCSS" and passes to the listeners an associative array
|
||||
* with the following keys:
|
||||
* - "request": {@link \Symfony\Component\HttpFoundation\Request}, a
|
||||
* request instance. CSS files will be attached to the requested page.
|
||||
* - "css": array of assets. Each asset can be either a string with
|
||||
* absolute URL of a CSS file or an array with "content" and "type"
|
||||
* items. See {@link \Mibew\Asset\AssetManagerInterface::getCssAssets()}
|
||||
* for details of their meaning. Modify this array to add or remove
|
||||
* additional CSS files.
|
||||
*
|
||||
* @return array Assets list.
|
||||
*/
|
||||
|
@ -26,6 +26,7 @@ use Mibew\Authentication\AuthenticationManagerAwareInterface;
|
||||
use Mibew\Authentication\AuthenticationManagerInterface;
|
||||
use Mibew\Cache\CacheAwareInterface;
|
||||
use Mibew\Handlebars\HandlebarsAwareInterface;
|
||||
use Mibew\Handlebars\Helper\AdditionalCssHelper;
|
||||
use Mibew\Handlebars\Helper\AdditionalJsHelper;
|
||||
use Mibew\Handlebars\Helper\AssetHelper;
|
||||
use Mibew\Handlebars\Helper\CsrfProtectedRouteHelper;
|
||||
@ -131,6 +132,9 @@ abstract class AbstractController implements
|
||||
if ($handlebars->hasHelper('additionalJs')) {
|
||||
$handlebars->getHelper('additionalJs')->setAssetManager($manager);
|
||||
}
|
||||
if ($handlebars->hasHelper('additionalCss')) {
|
||||
$handlebars->getHelper('additionalCss')->setAssetManager($manager);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -291,6 +295,10 @@ abstract class AbstractController implements
|
||||
'additionalJs',
|
||||
new AdditionalJsHelper($this->getAssetManager())
|
||||
);
|
||||
$style->getHandlebars()->addHelper(
|
||||
'additionalCss',
|
||||
new AdditionalCssHelper($this->getAssetManager())
|
||||
);
|
||||
}
|
||||
|
||||
return $style;
|
||||
|
@ -60,14 +60,11 @@ class OperatorChatController extends AbstractController
|
||||
return $this->showErrors(array('Cannot view threads'));
|
||||
}
|
||||
|
||||
$page = array_merge_recursive(
|
||||
setup_chatview_for_operator(
|
||||
$page = setup_chatview_for_operator(
|
||||
$this->getRouter(),
|
||||
$request,
|
||||
$thread,
|
||||
$operator
|
||||
),
|
||||
get_plugins_data($request)
|
||||
);
|
||||
|
||||
// Build js application options
|
||||
|
@ -47,13 +47,10 @@ class UserChatController extends AbstractController
|
||||
throw new NotFoundException('The thread is not found.');
|
||||
}
|
||||
|
||||
$page = array_merge_recursive(
|
||||
setup_chatview_for_user(
|
||||
$page = setup_chatview_for_user(
|
||||
$this->getRouter(),
|
||||
$request,
|
||||
$thread
|
||||
),
|
||||
get_plugins_data($request)
|
||||
);
|
||||
|
||||
// Build js application options
|
||||
@ -148,7 +145,6 @@ class UserChatController extends AbstractController
|
||||
$info,
|
||||
$referrer
|
||||
),
|
||||
get_plugins_data($request),
|
||||
array(
|
||||
'mibewBasePath' => $request->getBasePath(),
|
||||
'mibewBaseUrl' => $request->getBaseUrl(),
|
||||
@ -185,7 +181,6 @@ class UserChatController extends AbstractController
|
||||
$info,
|
||||
$referrer
|
||||
),
|
||||
get_plugins_data($request),
|
||||
array(
|
||||
'mibewBasePath' => $request->getBasePath(),
|
||||
'mibewBaseUrl' => $request->getBaseUrl(),
|
||||
@ -250,10 +245,7 @@ class UserChatController extends AbstractController
|
||||
$thread = Thread::load($invitation_state['threadid']);
|
||||
|
||||
// Prepare page
|
||||
$page = array_merge_recursive(
|
||||
setup_invitation_view($thread),
|
||||
get_plugins_data($request)
|
||||
);
|
||||
$page = setup_invitation_view($thread);
|
||||
|
||||
// Build js application options
|
||||
$page['invitationOptions'] = json_encode($page['invitation']);
|
||||
|
@ -80,8 +80,6 @@ class UsersController extends AbstractController
|
||||
$page['title'] = getlocal("List of visitors waiting");
|
||||
$page['menuid'] = "users";
|
||||
|
||||
// Get additional plugins data
|
||||
$page = array_merge($page, get_plugins_data($request));
|
||||
$page = array_merge($page, prepare_menu($operator));
|
||||
|
||||
return $this->render('users', $page);
|
||||
|
@ -0,0 +1,131 @@
|
||||
<?php
|
||||
/*
|
||||
* This file is a part of Mibew Messenger.
|
||||
*
|
||||
* Copyright 2005-2014 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
namespace Mibew\Handlebars\Helper;
|
||||
|
||||
use Handlebars\Context;
|
||||
use Handlebars\Helper as HelperInterface;
|
||||
use Handlebars\SafeString;
|
||||
use Handlebars\Template;
|
||||
use Mibew\Asset\AssetManagerAwareInterface;
|
||||
use Mibew\Asset\AssetManagerInterface;
|
||||
|
||||
/**
|
||||
* A helper that generates additional CSS list from assets attached to
|
||||
* Asset Manager.
|
||||
*
|
||||
* Example of usage:
|
||||
* <code>
|
||||
* {{additionalCss}}
|
||||
* </code>
|
||||
*/
|
||||
class AdditionalCssHelper implements HelperInterface, AssetManagerAwareInterface
|
||||
{
|
||||
/**
|
||||
* @var AssetManagerInterface|null
|
||||
*/
|
||||
protected $manager = null;
|
||||
|
||||
/**
|
||||
* Class constructor.
|
||||
*
|
||||
* @param AssetUrlGeneratorInterface $manager An instance of Asset Manager.
|
||||
*/
|
||||
public function __construct(AssetManagerInterface $manager)
|
||||
{
|
||||
$this->manager = $manager;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getAssetManager()
|
||||
{
|
||||
return $this->manager;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function setAssetManager(AssetManagerInterface $manager)
|
||||
{
|
||||
$this->manager = $manager;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function execute(Template $template, Context $context, $args, $source)
|
||||
{
|
||||
$generator = $this->getAssetManager()->getUrlGenerator();
|
||||
$buffer = array();
|
||||
|
||||
foreach ($this->getAssetManager()->getCssAssets() as $asset) {
|
||||
switch ($asset['type']) {
|
||||
case AssetManagerInterface::ABSOLUTE_URL:
|
||||
$buffer[] = $this->renderUrl($asset['content']);
|
||||
break;
|
||||
|
||||
case AssetManagerInterface::RELATIVE_URL:
|
||||
$buffer[] = $this->renderUrl($generator->generate($asset['content']));
|
||||
break;
|
||||
|
||||
case AssetManagerInterface::INLINE:
|
||||
$buffer[] = $this->renderContent($asset['content']);
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new \RuntimeException(sprintf(
|
||||
'Unknown asset type "%s"',
|
||||
$asset['type']
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
return new SafeString(implode("\n", $buffer));
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders URL of an asset.
|
||||
*
|
||||
* @param string $url URL of an asset.
|
||||
* @return string HTML markup.
|
||||
*/
|
||||
protected function renderUrl($url)
|
||||
{
|
||||
return sprintf(
|
||||
'<link rel="stylesheet" type="text/css" href="%s" />',
|
||||
safe_htmlspecialchars($url)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders content of an asset.
|
||||
*
|
||||
* @param string $content Content of an asset.
|
||||
* @return string HTML markup.
|
||||
*/
|
||||
protected function renderContent($content)
|
||||
{
|
||||
return sprintf(
|
||||
'<style type="text/css">%s</style>',
|
||||
$content
|
||||
);
|
||||
}
|
||||
}
|
@ -17,9 +17,6 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
use Mibew\EventDispatcher;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
|
||||
function get_popup($href, $js_href, $message, $title, $wnd_name, $options)
|
||||
{
|
||||
if (!$js_href) {
|
||||
@ -33,55 +30,6 @@ function get_popup($href, $js_href, $message, $title, $wnd_name, $options)
|
||||
. "this.newWindow.focus();this.newWindow.opener=window;return false;\">$message</a>";
|
||||
}
|
||||
|
||||
/**
|
||||
* Load additional CSS files, required by plugins, and build HTML code to
|
||||
* include them
|
||||
*
|
||||
* Triggers 'pageAddCSS' and pass listeners associative array with
|
||||
* following keys:
|
||||
* - 'request': {@link \Symfony\Component\HttpFoundation\Request}, a request
|
||||
* instance. CSS files will be attached to the requested page.
|
||||
* - 'css': array, with CSS files paths. Modify this array to add or remove
|
||||
* additional CSS files.
|
||||
*
|
||||
* @param Request $request A Request instance.
|
||||
* @return string HTML block of 'link' tags
|
||||
*/
|
||||
function get_additional_css(Request $request)
|
||||
{
|
||||
// Prepare event arguments array
|
||||
$args = array(
|
||||
'request' => $request,
|
||||
'css' => array(),
|
||||
);
|
||||
|
||||
// Trigger event
|
||||
$dispatcher = EventDispatcher::getInstance();
|
||||
$dispatcher->triggerEvent('pageAddCSS', $args);
|
||||
|
||||
// Build resulting css list
|
||||
$result = array();
|
||||
foreach ($args['css'] as $css) {
|
||||
$result[] = '<link rel="stylesheet" type="text/css" href="' . $css . '">';
|
||||
}
|
||||
|
||||
return implode("\n", $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get additional plugins data for specified page
|
||||
*
|
||||
* @param Request $request A Request instance.
|
||||
* @return array Associative array of plugins data. It contains following keys:
|
||||
* - 'additional_css': contains results of the 'get_additional_css function
|
||||
*/
|
||||
function get_plugins_data(Request $request)
|
||||
{
|
||||
return array(
|
||||
'additional_css' => get_additional_css($request),
|
||||
);
|
||||
}
|
||||
|
||||
function no_field($key)
|
||||
{
|
||||
return getlocal('Please fill "{0}".', array(getlocal($key)));
|
||||
|
@ -4,7 +4,7 @@
|
||||
<link rel="stylesheet" type="text/css" href="{{asset "@CurrentStyle/chat_ie7.css"}}" media="all" />
|
||||
<![endif]-->
|
||||
|
||||
{{{additional_css}}}
|
||||
{{additionalCss}}
|
||||
|
||||
<!-- External libs -->
|
||||
<script type="text/javascript" src="{{asset "js/libs/jquery.min.js"}}"></script>
|
||||
|
@ -5,7 +5,7 @@
|
||||
|
||||
{{#override "head"}}
|
||||
<!-- Plugins CSS files -->
|
||||
{{{additional_css}}}
|
||||
{{additionalCss}}
|
||||
|
||||
<script type="text/javascript" src="{{asset "js/compiled/users_app.js"}}"></script>
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user