Optionally set a separate Javascript server and path

We have about 10-12 JavaScript pages per Web page. They usually
are based on the same server as the Web pages, but since they're
static files, it makes sense to offload them to a lite server that
handles static files well.

This commit lets you set a separate Javascript server and path for the
default Javascript code in StatusNet.

Squashed commit of the following:

commit 139d1622fdafe5ad00c820224416d9021efc3234
Author: Evan Prodromou <evan@status.net>
Date:   Wed Jan 27 11:30:24 2010 -0500

    modules that call htmloutputter::script() don't prescribe js/ path

commit c6ca3174af73efed55eaed5ff1e2a3bdc77d2d87
Author: Evan Prodromou <evan@status.net>
Date:   Wed Jan 27 11:28:07 2010 -0500

    configurable server and path for javascript files
This commit is contained in:
Evan Prodromou 2010-01-27 11:37:22 -05:00
parent 04a37fa1c7
commit c52951cef5
8 changed files with 47 additions and 18 deletions

View File

@ -416,8 +416,8 @@ class AvatarsettingsAction extends AccountSettingsAction
parent::showScripts(); parent::showScripts();
if ($this->mode == 'crop') { if ($this->mode == 'crop') {
$this->script('js/jcrop/jquery.Jcrop.min.js'); $this->script('jcrop/jquery.Jcrop.min.js');
$this->script('js/jcrop/jquery.Jcrop.go.js'); $this->script('jcrop/jquery.Jcrop.go.js');
} }
$this->autofocus('avatarfile'); $this->autofocus('avatarfile');

View File

@ -302,8 +302,8 @@ class DesignadminpanelAction extends AdminPanelAction
{ {
parent::showScripts(); parent::showScripts();
$this->script('js/farbtastic/farbtastic.js'); $this->script('farbtastic/farbtastic.js');
$this->script('js/userdesign.go.js'); $this->script('userdesign.go.js');
$this->autofocus('design_background-image_file'); $this->autofocus('design_background-image_file');
} }

View File

@ -437,8 +437,8 @@ class GrouplogoAction extends GroupDesignAction
parent::showScripts(); parent::showScripts();
if ($this->mode == 'crop') { if ($this->mode == 'crop') {
$this->script('js/jcrop/jquery.Jcrop.min.js'); $this->script('jcrop/jquery.Jcrop.min.js');
$this->script('js/jcrop/jquery.Jcrop.go.js'); $this->script('jcrop/jquery.Jcrop.go.js');
} }
$this->autofocus('avatarfile'); $this->autofocus('avatarfile');

View File

@ -246,18 +246,18 @@ class Action extends HTMLOutputter // lawsuit
{ {
if (Event::handle('StartShowScripts', array($this))) { if (Event::handle('StartShowScripts', array($this))) {
if (Event::handle('StartShowJQueryScripts', array($this))) { if (Event::handle('StartShowJQueryScripts', array($this))) {
$this->script('js/jquery.min.js'); $this->script('jquery.min.js');
$this->script('js/jquery.form.js'); $this->script('jquery.form.js');
$this->script('js/jquery.cookie.js'); $this->script('jquery.cookie.js');
$this->script('js/json2.js'); $this->script('json2.js');
$this->script('js/jquery.joverlay.min.js'); $this->script('jquery.joverlay.min.js');
Event::handle('EndShowJQueryScripts', array($this)); Event::handle('EndShowJQueryScripts', array($this));
} }
if (Event::handle('StartShowStatusNetScripts', array($this)) && if (Event::handle('StartShowStatusNetScripts', array($this)) &&
Event::handle('StartShowLaconicaScripts', array($this))) { Event::handle('StartShowLaconicaScripts', array($this))) {
$this->script('js/xbImportNode.js'); $this->script('xbImportNode.js');
$this->script('js/util.js'); $this->script('util.js');
$this->script('js/geometa.js'); $this->script('geometa.js');
// Frame-busting code to avoid clickjacking attacks. // Frame-busting code to avoid clickjacking attacks.
$this->element('script', array('type' => 'text/javascript'), $this->element('script', array('type' => 'text/javascript'),
'if (window.top !== window.self) { window.top.location.href = window.self.location.href; }'); 'if (window.top !== window.self) { window.top.location.href = window.self.location.href; }');

View File

@ -120,6 +120,9 @@ $default =
array('server' => null, array('server' => null,
'dir' => null, 'dir' => null,
'path'=> null), 'path'=> null),
'javascript' =>
array('server' => null,
'path'=> null),
'throttle' => 'throttle' =>
array('enabled' => false, // whether to throttle edits; false by default array('enabled' => false, // whether to throttle edits; false by default
'count' => 20, // number of allowed messages in timespan 'count' => 20, // number of allowed messages in timespan

View File

@ -327,8 +327,8 @@ class DesignSettingsAction extends AccountSettingsAction
{ {
parent::showScripts(); parent::showScripts();
$this->script('js/farbtastic/farbtastic.js'); $this->script('farbtastic/farbtastic.js');
$this->script('js/userdesign.go.js'); $this->script('userdesign.go.js');
$this->autofocus('design_background-image_file'); $this->autofocus('design_background-image_file');
} }

View File

@ -351,14 +351,40 @@ class HTMLOutputter extends XMLOutputter
function script($src, $type='text/javascript') function script($src, $type='text/javascript')
{ {
if(Event::handle('StartScriptElement', array($this,&$src,&$type))) { if(Event::handle('StartScriptElement', array($this,&$src,&$type))) {
$url = parse_url($src); $url = parse_url($src);
if( empty($url['scheme']) && empty($url['host']) && empty($url['query']) && empty($url['fragment'])) if( empty($url['scheme']) && empty($url['host']) && empty($url['query']) && empty($url['fragment']))
{ {
$src = common_path($src) . '?version=' . STATUSNET_VERSION; $path = common_config('javascript', 'path');
if (empty($path)) {
$path = common_config('site', 'path') . '/js/';
}
if ($path[strlen($path)-1] != '/') {
$path .= '/';
}
if ($path[0] != '/') {
$path = '/'.$path;
}
$server = common_config('javascript', 'server');
if (empty($server)) {
$server = common_config('site', 'server');
}
// XXX: protocol
$src = 'http://'.$server.$path.$src . '?version=' . STATUSNET_VERSION;
} }
$this->element('script', array('type' => $type, $this->element('script', array('type' => $type,
'src' => $src), 'src' => $src),
' '); ' ');
Event::handle('EndScriptElement', array($this,$src,$type)); Event::handle('EndScriptElement', array($this,$src,$type));
} }
} }

View File

@ -89,7 +89,7 @@ class FacebookAction extends Action
function showScripts() function showScripts()
{ {
$this->script('js/facebookapp.js'); $this->script('facebookapp.js');
} }
/** /**