Merge branch '0.8.x' into twitter-oauth
|
@ -382,13 +382,7 @@ class AvatarsettingsAction extends AccountSettingsAction
|
||||||
function showStylesheets()
|
function showStylesheets()
|
||||||
{
|
{
|
||||||
parent::showStylesheets();
|
parent::showStylesheets();
|
||||||
$jcropStyle =
|
$this->cssLink('css/jquery.Jcrop.css','base','screen, projection, tv');
|
||||||
common_path('theme/base/css/jquery.Jcrop.css?version='.LACONICA_VERSION);
|
|
||||||
|
|
||||||
$this->element('link', array('rel' => 'stylesheet',
|
|
||||||
'type' => 'text/css',
|
|
||||||
'href' => $jcropStyle,
|
|
||||||
'media' => 'screen, projection, tv'));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -402,13 +396,8 @@ class AvatarsettingsAction extends AccountSettingsAction
|
||||||
parent::showScripts();
|
parent::showScripts();
|
||||||
|
|
||||||
if ($this->mode == 'crop') {
|
if ($this->mode == 'crop') {
|
||||||
$jcropPack = common_path('js/jcrop/jquery.Jcrop.pack.js');
|
$this->script('js/jcrop/jquery.Jcrop.pack.js');
|
||||||
$jcropGo = common_path('js/jcrop/jquery.Jcrop.go.js');
|
$this->script('js/jcrop/jquery.Jcrop.go.js');
|
||||||
|
|
||||||
$this->element('script', array('type' => 'text/javascript',
|
|
||||||
'src' => $jcropPack));
|
|
||||||
$this->element('script', array('type' => 'text/javascript',
|
|
||||||
'src' => $jcropGo));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -217,7 +217,7 @@ class FinishopenidloginAction extends Action
|
||||||
|
|
||||||
if (!Validate::string($nickname, array('min_length' => 1,
|
if (!Validate::string($nickname, array('min_length' => 1,
|
||||||
'max_length' => 64,
|
'max_length' => 64,
|
||||||
'format' => VALIDATE_NUM . VALIDATE_ALPHA_LOWER))) {
|
'format' => NICKNAME_FMT))) {
|
||||||
$this->showForm(_('Nickname must have only lowercase letters and numbers and no spaces.'));
|
$this->showForm(_('Nickname must have only lowercase letters and numbers and no spaces.'));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -389,7 +389,7 @@ class FinishopenidloginAction extends Action
|
||||||
{
|
{
|
||||||
if (!Validate::string($str, array('min_length' => 1,
|
if (!Validate::string($str, array('min_length' => 1,
|
||||||
'max_length' => 64,
|
'max_length' => 64,
|
||||||
'format' => VALIDATE_NUM . VALIDATE_ALPHA_LOWER))) {
|
'format' => NICKNAME_FMT))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!User::allowed_nickname($str)) {
|
if (!User::allowed_nickname($str)) {
|
||||||
|
|
|
@ -428,13 +428,7 @@ class GrouplogoAction extends GroupDesignAction
|
||||||
function showStylesheets()
|
function showStylesheets()
|
||||||
{
|
{
|
||||||
parent::showStylesheets();
|
parent::showStylesheets();
|
||||||
$jcropStyle =
|
$this->cssLink('css/jquery.Jcrop.css','base','screen, projection, tv');
|
||||||
common_path('theme/base/css/jquery.Jcrop.css?version='.LACONICA_VERSION);
|
|
||||||
|
|
||||||
$this->element('link', array('rel' => 'stylesheet',
|
|
||||||
'type' => 'text/css',
|
|
||||||
'href' => $jcropStyle,
|
|
||||||
'media' => 'screen, projection, tv'));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -448,13 +442,8 @@ class GrouplogoAction extends GroupDesignAction
|
||||||
parent::showScripts();
|
parent::showScripts();
|
||||||
|
|
||||||
if ($this->mode == 'crop') {
|
if ($this->mode == 'crop') {
|
||||||
$jcropPack = common_path('js/jcrop/jquery.Jcrop.pack.js');
|
$this->script('js/jcrop/jquery.Jcrop.pack.js');
|
||||||
$jcropGo = common_path('js/jcrop/jquery.Jcrop.go.js');
|
$this->script('js/jcrop/jquery.Jcrop.go.js');
|
||||||
|
|
||||||
$this->element('script', array('type' => 'text/javascript',
|
|
||||||
'src' => $jcropPack));
|
|
||||||
$this->element('script', array('type' => 'text/javascript',
|
|
||||||
'src' => $jcropGo));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -189,7 +189,7 @@ class ProfilesettingsAction extends AccountSettingsAction
|
||||||
// Some validation
|
// Some validation
|
||||||
if (!Validate::string($nickname, array('min_length' => 1,
|
if (!Validate::string($nickname, array('min_length' => 1,
|
||||||
'max_length' => 64,
|
'max_length' => 64,
|
||||||
'format' => VALIDATE_NUM . VALIDATE_ALPHA_LOWER))) {
|
'format' => NICKNAME_FMT))) {
|
||||||
$this->showForm(_('Nickname must have only lowercase letters and numbers and no spaces.'));
|
$this->showForm(_('Nickname must have only lowercase letters and numbers and no spaces.'));
|
||||||
return;
|
return;
|
||||||
} else if (!User::allowed_nickname($nickname)) {
|
} else if (!User::allowed_nickname($nickname)) {
|
||||||
|
|
|
@ -449,7 +449,8 @@ class TwitapistatusesAction extends TwitterapiAction
|
||||||
function friends($args, $apidata)
|
function friends($args, $apidata)
|
||||||
{
|
{
|
||||||
parent::handle($args);
|
parent::handle($args);
|
||||||
return $this->subscriptions($apidata, 'subscribed', 'subscriber');
|
$includeStatuses=! (boolean) $args['lite'];
|
||||||
|
return $this->subscriptions($apidata, 'subscribed', 'subscriber', false, $includeStatuses);
|
||||||
}
|
}
|
||||||
|
|
||||||
function friendsIDs($args, $apidata)
|
function friendsIDs($args, $apidata)
|
||||||
|
@ -461,7 +462,8 @@ class TwitapistatusesAction extends TwitterapiAction
|
||||||
function followers($args, $apidata)
|
function followers($args, $apidata)
|
||||||
{
|
{
|
||||||
parent::handle($args);
|
parent::handle($args);
|
||||||
return $this->subscriptions($apidata, 'subscriber', 'subscribed');
|
$includeStatuses=! (boolean) $args['lite'];
|
||||||
|
return $this->subscriptions($apidata, 'subscriber', 'subscribed', false, $includeStatuses);
|
||||||
}
|
}
|
||||||
|
|
||||||
function followersIDs($args, $apidata)
|
function followersIDs($args, $apidata)
|
||||||
|
@ -470,7 +472,7 @@ class TwitapistatusesAction extends TwitterapiAction
|
||||||
return $this->subscriptions($apidata, 'subscriber', 'subscribed', true);
|
return $this->subscriptions($apidata, 'subscriber', 'subscribed', true);
|
||||||
}
|
}
|
||||||
|
|
||||||
function subscriptions($apidata, $other_attr, $user_attr, $onlyIDs=false)
|
function subscriptions($apidata, $other_attr, $user_attr, $onlyIDs=false, $includeStatuses=true)
|
||||||
{
|
{
|
||||||
$this->auth_user = $apidata['user'];
|
$this->auth_user = $apidata['user'];
|
||||||
$user = $this->get_user($apidata['api_arg'], $apidata);
|
$user = $this->get_user($apidata['api_arg'], $apidata);
|
||||||
|
@ -526,26 +528,26 @@ class TwitapistatusesAction extends TwitterapiAction
|
||||||
if ($onlyIDs) {
|
if ($onlyIDs) {
|
||||||
$this->showIDs($others, $type);
|
$this->showIDs($others, $type);
|
||||||
} else {
|
} else {
|
||||||
$this->show_profiles($others, $type);
|
$this->show_profiles($others, $type, $includeStatuses);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->end_document($type);
|
$this->end_document($type);
|
||||||
}
|
}
|
||||||
|
|
||||||
function show_profiles($profiles, $type)
|
function show_profiles($profiles, $type, $includeStatuses)
|
||||||
{
|
{
|
||||||
switch ($type) {
|
switch ($type) {
|
||||||
case 'xml':
|
case 'xml':
|
||||||
$this->elementStart('users', array('type' => 'array'));
|
$this->elementStart('users', array('type' => 'array'));
|
||||||
foreach ($profiles as $profile) {
|
foreach ($profiles as $profile) {
|
||||||
$this->show_profile($profile);
|
$this->show_profile($profile,$type,null,$includeStatuses);
|
||||||
}
|
}
|
||||||
$this->elementEnd('users');
|
$this->elementEnd('users');
|
||||||
break;
|
break;
|
||||||
case 'json':
|
case 'json':
|
||||||
$arrays = array();
|
$arrays = array();
|
||||||
foreach ($profiles as $profile) {
|
foreach ($profiles as $profile) {
|
||||||
$arrays[] = $this->twitter_user_array($profile, true);
|
$arrays[] = $this->twitter_user_array($profile, $includeStatuses);
|
||||||
}
|
}
|
||||||
print json_encode($arrays);
|
print json_encode($arrays);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -79,7 +79,7 @@ class UpdateprofileAction extends Action
|
||||||
$nickname = $req->get_parameter('omb_listenee_nickname');
|
$nickname = $req->get_parameter('omb_listenee_nickname');
|
||||||
if ($nickname && !Validate::string($nickname, array('min_length' => 1,
|
if ($nickname && !Validate::string($nickname, array('min_length' => 1,
|
||||||
'max_length' => 64,
|
'max_length' => 64,
|
||||||
'format' => VALIDATE_NUM . VALIDATE_ALPHA_LOWER))) {
|
'format' => NICKNAME_FMT))) {
|
||||||
$this->clientError(_('Nickname must have only lowercase letters and numbers and no spaces.'));
|
$this->clientError(_('Nickname must have only lowercase letters and numbers and no spaces.'));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -481,7 +481,7 @@ class UserauthorizationAction extends Action
|
||||||
$nickname = $_GET['omb_listenee_nickname'];
|
$nickname = $_GET['omb_listenee_nickname'];
|
||||||
if (!Validate::string($nickname, array('min_length' => 1,
|
if (!Validate::string($nickname, array('min_length' => 1,
|
||||||
'max_length' => 64,
|
'max_length' => 64,
|
||||||
'format' => VALIDATE_NUM . VALIDATE_ALPHA_LOWER))) {
|
'format' => NICKNAME_FMT))) {
|
||||||
throw new OAuthException('Nickname must have only letters and numbers and no spaces.');
|
throw new OAuthException('Nickname must have only letters and numbers and no spaces.');
|
||||||
}
|
}
|
||||||
$profile = $_GET['omb_listenee_profile'];
|
$profile = $_GET['omb_listenee_profile'];
|
||||||
|
|
|
@ -22,6 +22,8 @@ VALUES
|
||||||
('IdentiFox','IdentiFox','http://www.bitbucket.org/uncryptic/identifox/', now()),
|
('IdentiFox','IdentiFox','http://www.bitbucket.org/uncryptic/identifox/', now()),
|
||||||
('identitwitch','IdentiTwitch','http://richfish.org/identitwitch/', now()),
|
('identitwitch','IdentiTwitch','http://richfish.org/identitwitch/', now()),
|
||||||
('LaTwit','LaTwit','http://latwit.mac65.com/', now()),
|
('LaTwit','LaTwit','http://latwit.mac65.com/', now()),
|
||||||
|
('LiveTweeter', 'LiveTweeter', 'http://addons.songbirdnest.com/addon/1204', now()),
|
||||||
|
('livetweeter', 'livetweeter', 'http://addons.songbirdnest.com/addon/1204', now()),
|
||||||
('maisha', 'Maisha', 'http://maisha.grango.org/', now()),
|
('maisha', 'Maisha', 'http://maisha.grango.org/', now()),
|
||||||
('mbpidgin','mbpidgin','http://code.google.com/p/microblog-purple/', now()),
|
('mbpidgin','mbpidgin','http://code.google.com/p/microblog-purple/', now()),
|
||||||
('Mobidentica', 'Mobidentica', 'http://www.substanceofcode.com/software/mobidentica/', now()),
|
('Mobidentica', 'Mobidentica', 'http://www.substanceofcode.com/software/mobidentica/', now()),
|
||||||
|
@ -34,6 +36,7 @@ VALUES
|
||||||
('pocketwit','PockeTwit','http://code.google.com/p/pocketwit/', now()),
|
('pocketwit','PockeTwit','http://code.google.com/p/pocketwit/', now()),
|
||||||
('posty','Posty','http://spreadingfunkyness.com/posty/', now()),
|
('posty','Posty','http://spreadingfunkyness.com/posty/', now()),
|
||||||
('qtwitter','qTwitter','http://qtwitter.ayoy.net/', now()),
|
('qtwitter','qTwitter','http://qtwitter.ayoy.net/', now()),
|
||||||
|
('qwit', 'Qwit', 'http://code.google.com/p/qwit/', now()),
|
||||||
('royalewithcheese','Royale With Cheese','http://p.hellyeah.org/', now()),
|
('royalewithcheese','Royale With Cheese','http://p.hellyeah.org/', now()),
|
||||||
('rssdent','rssdent','http://github.com/zcopley/rssdent/tree/master', now()),
|
('rssdent','rssdent','http://github.com/zcopley/rssdent/tree/master', now()),
|
||||||
('rygh.no','rygh.no','http://rygh.no/', now()),
|
('rygh.no','rygh.no','http://rygh.no/', now()),
|
||||||
|
|
|
@ -383,9 +383,7 @@ function runDbScript($filename, $conn, $type='mysql')
|
||||||
|
|
||||||
?>
|
?>
|
||||||
<?php echo"<?"; ?> xml version="1.0" encoding="UTF-8" <?php echo "?>"; ?>
|
<?php echo"<?"; ?> xml version="1.0" encoding="UTF-8" <?php echo "?>"; ?>
|
||||||
<!DOCTYPE html
|
<!DOCTYPE html>
|
||||||
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
|
||||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en_US" lang="en_US">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en_US" lang="en_US">
|
||||||
<head>
|
<head>
|
||||||
<title>Install Laconica</title>
|
<title>Install Laconica</title>
|
||||||
|
|
|
@ -193,21 +193,12 @@ class Action extends HTMLOutputter // lawsuit
|
||||||
if (Event::handle('StartShowStyles', array($this))) {
|
if (Event::handle('StartShowStyles', array($this))) {
|
||||||
|
|
||||||
if (Event::handle('StartShowLaconicaStyles', array($this))) {
|
if (Event::handle('StartShowLaconicaStyles', array($this))) {
|
||||||
$this->element('link', array('rel' => 'stylesheet',
|
$this->cssLink('css/display.css',null,'screen, projection, tv');
|
||||||
'type' => 'text/css',
|
|
||||||
'href' => theme_path('css/display.css', null) . '?version=' . LACONICA_VERSION,
|
|
||||||
'media' => 'screen, projection, tv'));
|
|
||||||
if (common_config('site', 'mobile')) {
|
if (common_config('site', 'mobile')) {
|
||||||
$this->element('link', array('rel' => 'stylesheet',
|
// TODO: "handheld" CSS for other mobile devices
|
||||||
'type' => 'text/css',
|
$this->cssLink('css/mobile.css','base','only screen and (max-device-width: 480px)'); // Mobile WebKit
|
||||||
'href' => theme_path('css/mobile.css', 'base') . '?version=' . LACONICA_VERSION,
|
|
||||||
// TODO: "handheld" CSS for other mobile devices
|
|
||||||
'media' => 'only screen and (max-device-width: 480px)')); // Mobile WebKit
|
|
||||||
}
|
}
|
||||||
$this->element('link', array('rel' => 'stylesheet',
|
$this->cssLink('css/print.css','base','print');
|
||||||
'type' => 'text/css',
|
|
||||||
'href' => theme_path('css/print.css', 'base') . '?version=' . LACONICA_VERSION,
|
|
||||||
'media' => 'print'));
|
|
||||||
Event::handle('EndShowLaconicaStyles', array($this));
|
Event::handle('EndShowLaconicaStyles', array($this));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -253,26 +244,14 @@ 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->element('script', array('type' => 'text/javascript',
|
$this->script('js/jquery.min.js');
|
||||||
'src' => common_path('js/jquery.min.js')),
|
$this->script('js/jquery.form.js');
|
||||||
' ');
|
$this->script('js/jquery.joverlay.min.js');
|
||||||
$this->element('script', array('type' => 'text/javascript',
|
|
||||||
'src' => common_path('js/jquery.form.js')),
|
|
||||||
' ');
|
|
||||||
|
|
||||||
$this->element('script', array('type' => 'text/javascript',
|
|
||||||
'src' => common_path('js/jquery.joverlay.min.js')),
|
|
||||||
' ');
|
|
||||||
|
|
||||||
Event::handle('EndShowJQueryScripts', array($this));
|
Event::handle('EndShowJQueryScripts', array($this));
|
||||||
}
|
}
|
||||||
if (Event::handle('StartShowLaconicaScripts', array($this))) {
|
if (Event::handle('StartShowLaconicaScripts', array($this))) {
|
||||||
$this->element('script', array('type' => 'text/javascript',
|
$this->script('js/xbImportNode.js');
|
||||||
'src' => common_path('js/xbImportNode.js')),
|
$this->script('js/util.js');
|
||||||
' ');
|
|
||||||
$this->element('script', array('type' => 'text/javascript',
|
|
||||||
'src' => common_path('js/util.js?version='.LACONICA_VERSION)),
|
|
||||||
' ');
|
|
||||||
// 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; }');
|
||||||
|
|
|
@ -311,13 +311,7 @@ class DesignSettingsAction extends AccountSettingsAction
|
||||||
function showStylesheets()
|
function showStylesheets()
|
||||||
{
|
{
|
||||||
parent::showStylesheets();
|
parent::showStylesheets();
|
||||||
$farbtasticStyle =
|
$this->cssLink('css/farbtastic.css','base','screen, projection, tv');
|
||||||
common_path('theme/base/css/farbtastic.css?version='.LACONICA_VERSION);
|
|
||||||
|
|
||||||
$this->element('link', array('rel' => 'stylesheet',
|
|
||||||
'type' => 'text/css',
|
|
||||||
'href' => $farbtasticStyle,
|
|
||||||
'media' => 'screen, projection, tv'));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -330,13 +324,8 @@ class DesignSettingsAction extends AccountSettingsAction
|
||||||
{
|
{
|
||||||
parent::showScripts();
|
parent::showScripts();
|
||||||
|
|
||||||
$farbtasticPack = common_path('js/farbtastic/farbtastic.js');
|
$this->script('js/farbtastic/farbtastic.js');
|
||||||
$userDesignGo = common_path('js/userdesign.go.js');
|
$this->script('js/farbtastic/farbtastic.go.js');
|
||||||
|
|
||||||
$this->element('script', array('type' => 'text/javascript',
|
|
||||||
'src' => $farbtasticPack));
|
|
||||||
$this->element('script', array('type' => 'text/javascript',
|
|
||||||
'src' => $userDesignGo));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -95,34 +95,13 @@ class FacebookAction extends Action
|
||||||
|
|
||||||
function showStylesheets()
|
function showStylesheets()
|
||||||
{
|
{
|
||||||
// Add a timestamp to the file so Facebook cache wont ignore our changes
|
$this->cssLink('css/display.css', 'base');
|
||||||
$ts = filemtime(INSTALLDIR.'/theme/base/css/display.css');
|
$this->cssLink('css/facebookapp.css', 'base');
|
||||||
|
|
||||||
$this->element('link', array('rel' => 'stylesheet',
|
|
||||||
'type' => 'text/css',
|
|
||||||
'href' => theme_path('css/display.css', 'base') . '?ts=' . $ts));
|
|
||||||
|
|
||||||
$theme = common_config('site', 'theme');
|
|
||||||
|
|
||||||
$ts = filemtime(INSTALLDIR. '/theme/' . $theme .'/css/display.css');
|
|
||||||
|
|
||||||
$this->element('link', array('rel' => 'stylesheet',
|
|
||||||
'type' => 'text/css',
|
|
||||||
'href' => theme_path('css/display.css', null) . '?ts=' . $ts));
|
|
||||||
|
|
||||||
$ts = filemtime(INSTALLDIR.'/theme/base/css/facebookapp.css');
|
|
||||||
|
|
||||||
$this->element('link', array('rel' => 'stylesheet',
|
|
||||||
'type' => 'text/css',
|
|
||||||
'href' => theme_path('css/facebookapp.css', 'base') . '?ts=' . $ts));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function showScripts()
|
function showScripts()
|
||||||
{
|
{
|
||||||
// Add a timestamp to the file so Facebook cache wont ignore our changes
|
$this->script('js/facebookapp.js');
|
||||||
$ts = filemtime(INSTALLDIR.'/js/facebookapp.js');
|
|
||||||
|
|
||||||
$this->element('script', array('src' => common_path('js/facebookapp.js') . '?ts=' . $ts));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -109,10 +109,11 @@ class HTMLOutputter extends XMLOutputter
|
||||||
header('Content-Type: '.$type);
|
header('Content-Type: '.$type);
|
||||||
|
|
||||||
$this->extraHeaders();
|
$this->extraHeaders();
|
||||||
|
if( ! substr($type,0,strlen('text/html'))=='text/html' ){
|
||||||
$this->startXML('html',
|
// Browsers don't like it when <?xml it output for non-xhtml documents
|
||||||
'-//W3C//DTD XHTML 1.0 Strict//EN',
|
$this->xw->startDocument('1.0', 'UTF-8');
|
||||||
'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd');
|
}
|
||||||
|
$this->xw->writeDTD('html', $public, $system);
|
||||||
|
|
||||||
$language = $this->getLanguage();
|
$language = $this->getLanguage();
|
||||||
|
|
||||||
|
@ -338,6 +339,55 @@ class HTMLOutputter extends XMLOutputter
|
||||||
'title' => $title));
|
'title' => $title));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* output a script (almost always javascript) tag
|
||||||
|
*
|
||||||
|
* @param string $src relative or absolute script path
|
||||||
|
* @param string $type 'type' attribute value of the tag
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
function script($src, $type='text/javascript')
|
||||||
|
{
|
||||||
|
$url = parse_url($src);
|
||||||
|
if(! ($url->scheme || $url->host || $url->query || $url->fragment))
|
||||||
|
{
|
||||||
|
$src = common_path($src) . '?version=' . LACONICA_VERSION;
|
||||||
|
}
|
||||||
|
$this->element('script', array('type' => $type,
|
||||||
|
'src' => $src),
|
||||||
|
' ');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* output a css link
|
||||||
|
*
|
||||||
|
* @param string $src relative path within the theme directory, or an absolute path
|
||||||
|
* @param string $theme 'theme' that contains the stylesheet
|
||||||
|
* @param string media 'media' attribute of the tag
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
function cssLink($src,$theme=null,$media=null)
|
||||||
|
{
|
||||||
|
if (!$theme) {
|
||||||
|
$theme = common_config('site', 'theme');
|
||||||
|
}
|
||||||
|
$url = parse_url($src);
|
||||||
|
if(! ($url->scheme || $url->host || $url->query || $url->fragment))
|
||||||
|
{
|
||||||
|
if(file_exists(theme_file($src,$theme))){
|
||||||
|
$src = theme_path($src, $theme) . '?version=' . LACONICA_VERSION;
|
||||||
|
}else{
|
||||||
|
$src = common_path($src);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$this->element('link', array('rel' => 'stylesheet',
|
||||||
|
'type' => 'text/css',
|
||||||
|
'href' => $src,
|
||||||
|
'media' => $media));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* output an HTML textarea and associated elements
|
* output an HTML textarea and associated elements
|
||||||
*
|
*
|
||||||
|
|
|
@ -844,9 +844,9 @@ class TwitterapiAction extends Action
|
||||||
$this->endXML();
|
$this->endXML();
|
||||||
}
|
}
|
||||||
|
|
||||||
function show_profile($profile, $content_type='xml', $notice=null)
|
function show_profile($profile, $content_type='xml', $notice=null, $includeStatuses=true)
|
||||||
{
|
{
|
||||||
$profile_array = $this->twitter_user_array($profile, true);
|
$profile_array = $this->twitter_user_array($profile, $includeStatuses);
|
||||||
switch ($content_type) {
|
switch ($content_type) {
|
||||||
case 'xml':
|
case 'xml':
|
||||||
$this->show_twitter_xml_user($profile_array);
|
$this->show_twitter_xml_user($profile_array);
|
||||||
|
|
19
plugins/Autocomplete/Autocomplete.js
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
$(document).ready(function(){
|
||||||
|
$.getJSON($('address .url')[0].href+'/api/statuses/friends.json?user_id=' + current_user['id'] + '&lite=true&callback=?',
|
||||||
|
function(friends){
|
||||||
|
$('#notice_data-text').autocomplete(friends, {
|
||||||
|
multiple: true,
|
||||||
|
multipleSeparator: " ",
|
||||||
|
formatItem: function(row, i, max){
|
||||||
|
return '@' + row.screen_name + ' (' + row.name + ')';
|
||||||
|
},
|
||||||
|
formatMatch: function(row, i, max){
|
||||||
|
return '@' + row.screen_name;
|
||||||
|
},
|
||||||
|
formatResult: function(row){
|
||||||
|
return '@' + row.screen_name;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
63
plugins/Autocomplete/AutocompletePlugin.php
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Laconica, the distributed open-source microblogging tool
|
||||||
|
*
|
||||||
|
* Plugin to enable nickname completion in the enter status box
|
||||||
|
*
|
||||||
|
* PHP version 5
|
||||||
|
*
|
||||||
|
* LICENCE: This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* @category Plugin
|
||||||
|
* @package Laconica
|
||||||
|
* @author Craig Andrews <candrews@integralblue.com>
|
||||||
|
* @copyright 2009 Craig Andrews http://candrews.integralblue.com
|
||||||
|
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
|
||||||
|
* @link http://laconi.ca/
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (!defined('LACONICA')) {
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
class AutocompletePlugin extends Plugin
|
||||||
|
{
|
||||||
|
function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
function onEndShowScripts($action){
|
||||||
|
if (common_logged_in()) {
|
||||||
|
$current_user = common_current_user();
|
||||||
|
$js_string = <<<EOT
|
||||||
|
<script type="text/javascript">
|
||||||
|
var current_user = { id: '$current_user->id' };
|
||||||
|
</script>
|
||||||
|
EOT;
|
||||||
|
$action->raw($js_string);
|
||||||
|
$action->script('plugins/Autocomplete/jquery-autocomplete/jquery.autocomplete.pack.js');
|
||||||
|
$action->script('plugins/Autocomplete/Autocomplete.js');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function onEndShowLaconicaStyles($action)
|
||||||
|
{
|
||||||
|
if (common_logged_in()) {
|
||||||
|
$action->cssLink('plugins/Autocomplete/jquery-autocomplete/jquery.autocomplete.css');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
?>
|
20
plugins/Autocomplete/jquery-autocomplete/changelog.txt
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
1.0.2
|
||||||
|
-----
|
||||||
|
* Fixed missing semicolon
|
||||||
|
|
||||||
|
1.0.1
|
||||||
|
-----
|
||||||
|
* Fixed element creation (<ul> to <ul/> and <li> to </li>)
|
||||||
|
* Fixed ac_even class (was ac_event)
|
||||||
|
* Fixed bgiframe usage: now its really optional
|
||||||
|
* Removed the blur-on-return workaround, added a less obtrusive one only for Opera
|
||||||
|
* Fixed hold cursor keys: Opera needs keypress, everyone else keydown to scroll through result list when holding cursor key
|
||||||
|
* Updated package to jQuery 1.2.5, removing dimensions
|
||||||
|
* Fixed multiple-mustMatch: Remove only the last term when no match is found
|
||||||
|
* Fixed multiple without mustMatch: Don't select the last active when no match is found (on tab/return)
|
||||||
|
* Fixed multiple cursor position: Put cursor at end of input after selecting a value
|
||||||
|
|
||||||
|
1.0
|
||||||
|
---
|
||||||
|
|
||||||
|
* First release.
|
BIN
plugins/Autocomplete/jquery-autocomplete/demo/bg.gif
Normal file
After Width: | Height: | Size: 1.1 KiB |
23
plugins/Autocomplete/jquery-autocomplete/demo/emails.php
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
<?php
|
||||||
|
$q = strtolower($_GET["q"]);
|
||||||
|
if (!$q) return;
|
||||||
|
$items = array(
|
||||||
|
"Peter Pan"=>"peter@pan.de",
|
||||||
|
"Molly"=>"molly@yahoo.com",
|
||||||
|
"Forneria Marconi"=>"live@japan.jp",
|
||||||
|
"Master Sync"=>"205bw@samsung.com",
|
||||||
|
"Dr. Tech de Log"=>"g15@logitech.com",
|
||||||
|
"Don Corleone"=>"don@vegas.com",
|
||||||
|
"Mc Chick"=>"info@donalds.org",
|
||||||
|
"Donnie Darko"=>"dd@timeshift.info",
|
||||||
|
"Quake The Net"=>"webmaster@quakenet.org",
|
||||||
|
"Dr. Write"=>"write@writable.com"
|
||||||
|
);
|
||||||
|
|
||||||
|
echo "[";
|
||||||
|
foreach ($items as $key=>$value) {
|
||||||
|
if (strpos(strtolower($key), $q) !== false) {
|
||||||
|
echo "{ name: \"$key\", to: \"$value\" }, ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
echo "]";
|
23
plugins/Autocomplete/jquery-autocomplete/demo/emails.phps
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
<?php
|
||||||
|
$q = strtolower($_GET["q"]);
|
||||||
|
if (!$q) return;
|
||||||
|
$items = array(
|
||||||
|
"Peter Pan"=>"peter@pan.de",
|
||||||
|
"Molly"=>"molly@yahoo.com",
|
||||||
|
"Forneria Marconi"=>"live@japan.jp",
|
||||||
|
"Master Sync"=>"205bw@samsung.com",
|
||||||
|
"Dr. Tech de Log"=>"g15@logitech.com",
|
||||||
|
"Don Corleone"=>"don@vegas.com",
|
||||||
|
"Mc Chick"=>"info@donalds.org",
|
||||||
|
"Donnie Darko"=>"dd@timeshift.info",
|
||||||
|
"Quake The Net"=>"webmaster@quakenet.org",
|
||||||
|
"Dr. Write"=>"write@writable.com"
|
||||||
|
);
|
||||||
|
|
||||||
|
echo "[";
|
||||||
|
foreach ($items as $key=>$value) {
|
||||||
|
if (strpos(strtolower($key), $q) !== false) {
|
||||||
|
echo "{ name: \"$key\", to: \"$value\" }, ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
echo "]";
|
9
plugins/Autocomplete/jquery-autocomplete/demo/images.php
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
<?php
|
||||||
|
$term = $_REQUEST['q'];
|
||||||
|
$images = array_slice(scandir("images"), 2);
|
||||||
|
foreach($images as $value) {
|
||||||
|
if( strpos(strtolower($value), $term) === 0 ) {
|
||||||
|
echo $value . "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
After Width: | Height: | Size: 4.8 KiB |
After Width: | Height: | Size: 5.7 KiB |
After Width: | Height: | Size: 5.9 KiB |
After Width: | Height: | Size: 3.4 KiB |
After Width: | Height: | Size: 5.9 KiB |
After Width: | Height: | Size: 4.1 KiB |
BIN
plugins/Autocomplete/jquery-autocomplete/demo/images/Bled.jpg
Normal file
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 6.6 KiB |
After Width: | Height: | Size: 6.0 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 5.3 KiB |
After Width: | Height: | Size: 5.4 KiB |
After Width: | Height: | Size: 5.1 KiB |
After Width: | Height: | Size: 4.8 KiB |
After Width: | Height: | Size: 6.0 KiB |
After Width: | Height: | Size: 4.8 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 6.3 KiB |
After Width: | Height: | Size: 6.3 KiB |
BIN
plugins/Autocomplete/jquery-autocomplete/demo/images/Gent.jpg
Normal file
After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 4.8 KiB |
After Width: | Height: | Size: 3.8 KiB |
After Width: | Height: | Size: 5.3 KiB |
After Width: | Height: | Size: 3.7 KiB |
BIN
plugins/Autocomplete/jquery-autocomplete/demo/images/Gnesen.jpg
Normal file
After Width: | Height: | Size: 5.6 KiB |
After Width: | Height: | Size: 4.6 KiB |
After Width: | Height: | Size: 5.6 KiB |
After Width: | Height: | Size: 6.6 KiB |
After Width: | Height: | Size: 6.6 KiB |
After Width: | Height: | Size: 5.7 KiB |
After Width: | Height: | Size: 5.3 KiB |
After Width: | Height: | Size: 5.5 KiB |
After Width: | Height: | Size: 5.3 KiB |
After Width: | Height: | Size: 6.1 KiB |
After Width: | Height: | Size: 5.3 KiB |
After Width: | Height: | Size: 6.1 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 6.0 KiB |
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 5.7 KiB |
BIN
plugins/Autocomplete/jquery-autocomplete/demo/images/LeMans.jpg
Normal file
After Width: | Height: | Size: 6.4 KiB |
BIN
plugins/Autocomplete/jquery-autocomplete/demo/images/Lednice.jpg
Normal file
After Width: | Height: | Size: 5.3 KiB |
After Width: | Height: | Size: 6.6 KiB |
After Width: | Height: | Size: 3.9 KiB |
After Width: | Height: | Size: 2.3 KiB |
BIN
plugins/Autocomplete/jquery-autocomplete/demo/images/Lemmer.jpg
Normal file
After Width: | Height: | Size: 4.5 KiB |
After Width: | Height: | Size: 4.9 KiB |
After Width: | Height: | Size: 6.3 KiB |
BIN
plugins/Autocomplete/jquery-autocomplete/demo/images/Leuven.jpg
Normal file
After Width: | Height: | Size: 6.7 KiB |
After Width: | Height: | Size: 5.7 KiB |
After Width: | Height: | Size: 6.5 KiB |
After Width: | Height: | Size: 4.4 KiB |
BIN
plugins/Autocomplete/jquery-autocomplete/demo/images/Lyon.jpg
Normal file
After Width: | Height: | Size: 6.5 KiB |
After Width: | Height: | Size: 3.7 KiB |
After Width: | Height: | Size: 5.6 KiB |
After Width: | Height: | Size: 4.0 KiB |
After Width: | Height: | Size: 4.8 KiB |
After Width: | Height: | Size: 4.9 KiB |
After Width: | Height: | Size: 5.4 KiB |
After Width: | Height: | Size: 6.2 KiB |
After Width: | Height: | Size: 4.0 KiB |
After Width: | Height: | Size: 5.4 KiB |
After Width: | Height: | Size: 3.4 KiB |
After Width: | Height: | Size: 5.3 KiB |
After Width: | Height: | Size: 5.6 KiB |
After Width: | Height: | Size: 4.4 KiB |
After Width: | Height: | Size: 7.6 KiB |
BIN
plugins/Autocomplete/jquery-autocomplete/demo/images/Olomouc.jpg
Normal file
After Width: | Height: | Size: 5.5 KiB |
After Width: | Height: | Size: 5.6 KiB |
After Width: | Height: | Size: 5.3 KiB |
After Width: | Height: | Size: 5.6 KiB |
After Width: | Height: | Size: 5.3 KiB |
After Width: | Height: | Size: 4.6 KiB |
After Width: | Height: | Size: 7.0 KiB |
After Width: | Height: | Size: 5.4 KiB |
BIN
plugins/Autocomplete/jquery-autocomplete/demo/images/Posen.jpg
Normal file
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 4.0 KiB |