Merge branch 'testing'

This commit is contained in:
Evan Prodromou 2011-02-08 13:39:41 -05:00
commit 91485718c4
25 changed files with 103 additions and 41 deletions

17
README
View File

@ -1572,6 +1572,23 @@ proxy_user: Username to use for authenticating to the HTTP proxy. Default null.
proxy_password: Password to use for authenticating to the HTTP proxy. Default null. proxy_password: Password to use for authenticating to the HTTP proxy. Default null.
proxy_auth_scheme: Scheme to use for authenticating to the HTTP proxy. Default null. proxy_auth_scheme: Scheme to use for authenticating to the HTTP proxy. Default null.
plugins
-------
default: associative array mapping plugin name to array of arguments. To disable
a default plugin, unset its value in this array.
locale_path: path for finding plugin locale files. In the plugin's directory
by default.
server: Server to find static files for a plugin when the page is plain old HTTP.
Defaults to site/server (same as pages). Use this to move plugin CSS and
JS files to a CDN.
sslserver: Server to find static files for a plugin when the page is HTTPS. Defaults
to site/server (same as pages). Use this to move plugin CSS and JS files
to a CDN.
path: Path to the plugin files. defaults to site/path + '/plugins/'. Expects that
each plugin will have a subdirectory at plugins/NameOfPlugin. Change this
if you're using a CDN.
Plugins Plugins
======= =======

View File

@ -314,6 +314,9 @@ $default =
'RSSCloud' => null, 'RSSCloud' => null,
'OpenID' => null), 'OpenID' => null),
'locale_path' => false, // Set to a path to use *instead of* each plugin's own locale subdirectories 'locale_path' => false, // Set to a path to use *instead of* each plugin's own locale subdirectories
'server' => null,
'sslserver' => null,
'path' => null,
), ),
'admin' => 'admin' =>
array('panels' => array('design', 'site', 'user', 'paths', 'access', 'sessions', 'sitenotice', 'license')), array('panels' => array('design', 'site', 'user', 'paths', 'access', 'sessions', 'sitenotice', 'license')),

View File

@ -111,10 +111,15 @@ class Plugin
$this->log(LOG_DEBUG, $msg); $this->log(LOG_DEBUG, $msg);
} }
function onPluginVersion(&$versions) function name()
{ {
$cls = get_class($this); $cls = get_class($this);
$name = mb_substr($cls, 0, -6); return mb_substr($cls, 0, -6);
}
function onPluginVersion(&$versions)
{
$name = $this->name();
$versions[] = array('name' => $name, $versions[] = array('name' => $name,
// TRANS: Displayed as version information for a plugin if no version information was found. // TRANS: Displayed as version information for a plugin if no version information was found.
@ -122,4 +127,38 @@ class Plugin
return true; return true;
} }
function path($relative)
{
return self::staticPath($this->name(), $relative);
}
static function staticPath($plugin, $relative)
{
$isHTTPS = StatusNet::isHTTPS();
if ($isHTTPS) {
$server = common_config('plugins', 'sslserver');
} else {
$server = common_config('plugins', 'server');
}
if (is_null($server)) {
if ($isHTTPS) {
$server = common_config('site', 'sslserver');
} else {
$server = common_config('site', 'server');
}
}
$path = common_config('plugins', 'path');
if (is_null($path)) {
$path = common_config('site', 'path') . '/plugins/';
}
$protocol = ($isHTTPS) ? 'https' : 'http';
return $protocol.'://'.$server.$path.$plugin.'/'.$relative;
}
} }

View File

@ -51,15 +51,15 @@ class AutocompletePlugin extends Plugin
function onEndShowScripts($action){ function onEndShowScripts($action){
if (common_logged_in()) { if (common_logged_in()) {
$action->script('plugins/Autocomplete/jquery-autocomplete/jquery.autocomplete.pack.js'); $action->script($this->path('jquery-autocomplete/jquery.autocomplete.pack.js'));
$action->script('plugins/Autocomplete/Autocomplete.js'); $action->script($this->path('Autocomplete.js'));
} }
} }
function onEndShowStatusNetStyles($action) function onEndShowStatusNetStyles($action)
{ {
if (common_logged_in()) { if (common_logged_in()) {
$action->cssLink('plugins/Autocomplete/jquery-autocomplete/jquery.autocomplete.css'); $action->cssLink($this->path('jquery-autocomplete/jquery.autocomplete.css'));
} }
} }

View File

@ -65,7 +65,7 @@ class BlankAdPlugin extends UAPPlugin
$action->element('img', $action->element('img',
array('width' => 300, array('width' => 300,
'height' => 250, 'height' => 250,
'src' => common_path('plugins/BlankAd/redpixel.png')), 'src' => $this->path('redpixel.png')),
''); '');
} }
@ -81,7 +81,7 @@ class BlankAdPlugin extends UAPPlugin
$action->element('img', $action->element('img',
array('width' => 180, array('width' => 180,
'height' => 150, 'height' => 150,
'src' => common_path('plugins/BlankAd/redpixel.png')), 'src' => $this->path('redpixel.png')),
''); '');
} }
@ -97,7 +97,7 @@ class BlankAdPlugin extends UAPPlugin
$action->element('img', $action->element('img',
array('width' => 160, array('width' => 160,
'height' => 600, 'height' => 600,
'src' => common_path('plugins/BlankAd/redpixel.png')), 'src' => $this->path('redpixel.png')),
''); '');
} }
@ -113,7 +113,7 @@ class BlankAdPlugin extends UAPPlugin
$action->element('img', $action->element('img',
array('width' => 728, array('width' => 728,
'height' => 90, 'height' => 90,
'src' => common_path('plugins/BlankAd/redpixel.png')), 'src' => $this->path('redpixel.png')),
''); '');
} }

View File

@ -149,7 +149,7 @@ class BookmarkPlugin extends Plugin
function onEndShowStyles($action) function onEndShowStyles($action)
{ {
$action->cssLink('plugins/Bookmark/bookmark.css'); $action->cssLink($this->path('bookmark.css'));
return true; return true;
} }

View File

@ -107,6 +107,6 @@ class BookmarkpopupAction extends NewbookmarkAction
function showScripts() function showScripts()
{ {
parent::showScripts(); parent::showScripts();
$this->script(common_path('plugins/Bookmark/bookmarkpopup.js')); $this->script(Plugin::staticPath('Bookmark', 'bookmarkpopup.js'));
} }
} }

View File

@ -53,7 +53,7 @@ class ClientSideShortenPlugin extends Plugin
function onEndShowScripts($action){ function onEndShowScripts($action){
$action->inlineScript('var Notice_maxContent = ' . Notice::maxContent()); $action->inlineScript('var Notice_maxContent = ' . Notice::maxContent());
if (common_logged_in()) { if (common_logged_in()) {
$action->script('plugins/ClientSideShorten/shorten.js'); $action->script($this->path('shorten.js'));
} }
} }

View File

@ -129,7 +129,7 @@ class DirectionDetectorPlugin extends Plugin {
*/ */
function onEndShowScripts($action){ function onEndShowScripts($action){
if (common_logged_in()) { if (common_logged_in()) {
$action->script('plugins/DirectionDetector/jquery.DirectionDetector.js'); $action->script($this->path('jquery.DirectionDetector.js'));
} }
} }

View File

@ -89,10 +89,7 @@ class FacebookloginAction extends Action
); );
$attrs = array( $attrs = array(
'src' => common_path( 'src' => Plugin::staticPath('FacebookBridge', 'images/login-button.png'),
'plugins/FacebookBridge/images/login-button.png',
true
),
'alt' => 'Login with Facebook', 'alt' => 'Login with Facebook',
'title' => 'Login with Facebook' 'title' => 'Login with Facebook'
); );

View File

@ -40,8 +40,8 @@ class InfiniteScrollPlugin extends Plugin
function onEndShowScripts($action) function onEndShowScripts($action)
{ {
$action->script('plugins/InfiniteScroll/jquery.infinitescroll.js'); $action->script($this->path('jquery.infinitescroll.js'));
$action->script('plugins/InfiniteScroll/infinitescroll.js'); $action->script($this->path('infinitescroll.js'));
} }
function onPluginVersion(&$versions) function onPluginVersion(&$versions)

View File

@ -51,7 +51,7 @@ class LinkPreviewPlugin extends Plugin
{ {
$user = common_current_user(); $user = common_current_user();
if ($user && common_config('attachments', 'process_links')) { if ($user && common_config('attachments', 'process_links')) {
$action->script('plugins/LinkPreview/linkpreview.min.js'); $action->script($this->path('linkpreview.min.js'));
$data = json_encode(array( $data = json_encode(array(
'api' => common_local_url('oembedproxy'), 'api' => common_local_url('oembedproxy'),
'width' => common_config('attachments', 'thumbwidth'), 'width' => common_config('attachments', 'thumbwidth'),

View File

@ -129,7 +129,7 @@ class MapstractionPlugin extends Plugin
break; break;
case 'openlayers': case 'openlayers':
// Use our included stripped & minified OpenLayers. // Use our included stripped & minified OpenLayers.
$action->script(common_path('plugins/Mapstraction/OpenLayers/OpenLayers.js')); $action->script($this->path('OpenLayers/OpenLayers.js'));
break; break;
case 'yahoo': case 'yahoo':
$action->script(sprintf('http://api.maps.yahoo.com/ajaxymap?v=3.8&appid=%s', $action->script(sprintf('http://api.maps.yahoo.com/ajaxymap?v=3.8&appid=%s',
@ -145,13 +145,13 @@ class MapstractionPlugin extends Plugin
// //
// Note that OpenLayers.js needs to be separate, or it won't // Note that OpenLayers.js needs to be separate, or it won't
// be able to find its UI images and styles. // be able to find its UI images and styles.
$action->script(common_path('plugins/Mapstraction/usermap-mxn-openlayers.min.js')); $action->script($this->path('usermap-mxn-openlayers.min.js'));
} else { } else {
$action->script(sprintf('%s?(%s)', $action->script(sprintf('%s?(%s)',
common_path('plugins/Mapstraction/js/mxn.js'), $this->path('js/mxn.js'),
$this->provider)); $this->provider));
$action->script(common_path('plugins/Mapstraction/usermap.js')); $action->script($this->path('usermap.js'));
} }
$action->inlineScript(sprintf('var _provider = "%s";', $this->provider)); $action->inlineScript(sprintf('var _provider = "%s";', $this->provider));

View File

@ -89,7 +89,7 @@ class MeteorPlugin extends RealtimePlugin
{ {
$scripts = parent::_getScripts(); $scripts = parent::_getScripts();
$scripts[] = 'http://'.$this->webserver.(($this->webport == 80) ? '':':'.$this->webport).'/meteor.js'; $scripts[] = 'http://'.$this->webserver.(($this->webport == 80) ? '':':'.$this->webport).'/meteor.js';
$scripts[] = common_path('plugins/Meteor/meteorupdater.min.js'); $scripts[] = $this->path('meteorupdater.min.js');
return $scripts; return $scripts;
} }

View File

@ -241,13 +241,13 @@ class MobileProfilePlugin extends WAP20Plugin
if (file_exists(Theme::file('css/mp-screen.css'))) { if (file_exists(Theme::file('css/mp-screen.css'))) {
$action->cssLink('css/mp-screen.css', null, 'screen'); $action->cssLink('css/mp-screen.css', null, 'screen');
} else { } else {
$action->cssLink('plugins/MobileProfile/mp-screen.css',null,'screen'); $action->cssLink($this->path('mp-screen.css'),null,'screen');
} }
if (file_exists(Theme::file('css/mp-handheld.css'))) { if (file_exists(Theme::file('css/mp-handheld.css'))) {
$action->cssLink('css/mp-handheld.css', null, 'handheld'); $action->cssLink('css/mp-handheld.css', null, 'handheld');
} else { } else {
$action->cssLink('plugins/MobileProfile/mp-handheld.css',null,'handheld'); $action->cssLink($this->path('mp-handheld.css'),null,'handheld');
} }
// Allow other plugins to load their styles. // Allow other plugins to load their styles.

View File

@ -51,13 +51,13 @@ class ModPlusPlugin extends Plugin
{ {
$user = common_current_user(); $user = common_current_user();
if ($user) { if ($user) {
$action->script('plugins/ModPlus/modplus.js'); $action->script($this->path('modplus.js'));
} }
return true; return true;
} }
function onEndShowStatusNetStyles($action) { function onEndShowStatusNetStyles($action) {
$action->cssLink('plugins/ModPlus/modplus.css'); $action->cssLink($this->path('modplus.css'));
return true; return true;
} }

View File

@ -331,7 +331,7 @@ class NewMenuPlugin extends Plugin
array('default', 'identica', 'h4ck3r'))) && array('default', 'identica', 'h4ck3r'))) &&
($action instanceof AccountSettingsAction || ($action instanceof AccountSettingsAction ||
$action instanceof ConnectSettingsAction)) { $action instanceof ConnectSettingsAction)) {
$action->cssLink(common_path('plugins/NewMenu/newmenu.css')); $action->cssLink($this->path('newmenu.css'));
} }
return true; return true;
} }

View File

@ -419,12 +419,12 @@ class OStatusPlugin extends Plugin
} }
function onEndShowStatusNetStyles($action) { function onEndShowStatusNetStyles($action) {
$action->cssLink('plugins/OStatus/theme/base/css/ostatus.css'); $action->cssLink($this->path('theme/base/css/ostatus.css'));
return true; return true;
} }
function onEndShowStatusNetScripts($action) { function onEndShowStatusNetScripts($action) {
$action->script('plugins/OStatus/js/ostatus.js'); $action->script($this->path('js/ostatus.js'));
return true; return true;
} }

View File

@ -1112,7 +1112,8 @@ class Ostatus_profile extends Memcached_DataObject
return $url; return $url;
} }
} }
return common_path('plugins/OStatus/images/96px-Feed-icon.svg.png');
return Plugin::staticPath('OStatus', 'images/96px-Feed-icon.svg.png');
} }
/** /**

View File

@ -116,8 +116,9 @@ class RealtimePlugin extends Plugin
function onEndShowStatusNetStyles($action) function onEndShowStatusNetStyles($action)
{ {
$action->cssLink('plugins/Realtime/realtimeupdate.css', $action->cssLink(Plugin::staticPath('Realtime', 'realtimeupdate.css'),
null, 'screen, projection, tv'); null,
'screen, projection, tv');
return true; return true;
} }
@ -322,7 +323,7 @@ class RealtimePlugin extends Plugin
function _getScripts() function _getScripts()
{ {
return array('plugins/Realtime/realtimeupdate.min.js'); return array(Plugin::staticPath('Realtime', 'realtimeupdate.min.js'));
} }
/** /**

View File

@ -33,7 +33,7 @@ class ShareNoticePlugin extends Plugin
); );
function onEndShowStatusNetStyles($action) { function onEndShowStatusNetStyles($action) {
$action->cssLink('plugins/ShareNotice/css/sharenotice.css'); $action->cssLink($this->path('css/sharenotice.css'));
return true; return true;
} }

View File

@ -41,7 +41,7 @@ class TabFocusPlugin extends Plugin
function onEndShowScripts($action) function onEndShowScripts($action)
{ {
$action->script('plugins/TabFocus/tabfocus.js'); $action->script($this->path('tabfocus.js'));
} }
function onPluginVersion(&$versions) function onPluginVersion(&$versions)

View File

@ -39,6 +39,10 @@ if (!defined('STATUSNET')) {
* *
* Converts the notice form in browser to a rich-text editor. * Converts the notice form in browser to a rich-text editor.
* *
* FIXME: this plugin DOES NOT load its static files from the configured
* plugin server if one exists. There are cross-server permissions errors
* if you try to do that (something about window.tinymce).
*
* @category WYSIWYG * @category WYSIWYG
* @package StatusNet * @package StatusNet
* @author Evan Prodromou <evan@status.net> * @author Evan Prodromou <evan@status.net>

View File

@ -83,7 +83,7 @@ class TwitterloginAction extends Action
$this->elementStart('a', array('href' => common_local_url('twitterauthorization', $this->elementStart('a', array('href' => common_local_url('twitterauthorization',
null, null,
array('signin' => true)))); array('signin' => true))));
$this->element('img', array('src' => common_path('plugins/TwitterBridge/Sign-in-with-Twitter-lighter.png'), $this->element('img', array('src' => Plugin::staticPath('TwitterBridge', 'Sign-in-with-Twitter-lighter.png'),
'alt' => _m('Sign in with Twitter'))); 'alt' => _m('Sign in with Twitter')));
$this->elementEnd('a'); $this->elementEnd('a');
} }

View File

@ -176,12 +176,12 @@ class YammeradminpanelAction extends AdminPanelAction
function showStylesheets() function showStylesheets()
{ {
parent::showStylesheets(); parent::showStylesheets();
$this->cssLink('plugins/YammerImport/css/admin.css', null, 'screen, projection, tv'); $this->cssLink(Plugin::staticPath('YammerImport', 'css/admin.css'), null, 'screen, projection, tv');
} }
function showScripts() function showScripts()
{ {
parent::showScripts(); parent::showScripts();
$this->script('plugins/YammerImport/js/yammer-admin.js'); $this->script(Plugin::staticPath('YammerImport', 'js/yammer-admin.js'));
} }
} }