diff --git a/actions/designsettings.php b/actions/designsettings.php index 0deb3f6847..8a7c261048 100644 --- a/actions/designsettings.php +++ b/actions/designsettings.php @@ -82,7 +82,16 @@ class DesignsettingsAction extends AccountSettingsAction $this->element('legend', null, _('Change background image')); $this->elementStart('ul', 'form_data'); $this->elementStart('li'); - $this->element('p', null, _('Upload background image')); + $this->element('label', array('for' => 'design_ background-image_file'), + _('Upload file')); + $this->element('input', array('name' => 'design_background-image_file', + 'type' => 'file', + 'id' => 'design_background-image_file')); + $this->element('p', 'form_guide', _('You can upload your personal background image. The maximum file size is 2Mb.')); + $this->element('input', array('name' => 'MAX_FILE_SIZE', + 'type' => 'hidden', + 'id' => 'MAX_FILE_SIZE', + 'value' => ImageFile::maxFileSizeInt())); $this->elementEnd('li'); $this->elementEnd('ul'); $this->elementEnd('fieldset'); @@ -108,15 +117,22 @@ class DesignsettingsAction extends AccountSettingsAction $userSwatch = ($userSwatch) ? json_decode($userSwatch, true) : $defaultSwatch; $s = 0; - $labelSwatch = array('Background color', - 'Content background color', - 'Sidebar background color', - 'Text color', - 'Link color'); + $labelSwatch = array('Background', + 'Content', + 'Sidebar', + 'Text', + 'Links'); foreach($userSwatch as $propertyvalue => $value) { - $foo = array_values($value); //Is this necessary? $value[0] doesn't work because of invalid key + $foo = array_values($value); $this->elementStart('li'); - $this->input("swatch-".$s, $labelSwatch[$s], $foo[0]); + $this->element('label', array('for' => 'swatch-'.$s), _($labelSwatch[$s])); + $this->element('input', array('name' => 'swatch-'.$s, //prefer swatch[$s] ? + 'type' => 'text', + 'id' => 'swatch-'.$s, + 'class' => 'swatch', + 'maxlength' => '7', + 'size' => '7', + 'value' => $foo[0])); $this->elementEnd('li'); $s++; } @@ -125,6 +141,11 @@ class DesignsettingsAction extends AccountSettingsAction $this->elementEnd('fieldset'); $this->submit('save', _('Save')); + $this->element('input', array('id' => 'settings_design_reset', + 'type' => 'reset', + 'value' => 'Reset', + 'class' => 'form_action-secondary')); + /*TODO: Check submitted form values: json_encode(form values) if submitted Swatch == DefaultSwatch, don't store in DB. diff --git a/config.php.sample b/config.php.sample index 826b086a3b..4f438dc5e1 100644 --- a/config.php.sample +++ b/config.php.sample @@ -3,219 +3,206 @@ if (!defined('LACONICA')) { exit(1); } -#If you have downloaded libraries in random little places, you -#can add the paths here +// If you have downloaded libraries in random little places, you +// can add the paths here -#$extra_path = array("/opt/php-openid-2.0.1", "/usr/local/share/php"); -#set_include_path(implode(PATH_SEPARATOR, $extra_path) . PATH_SEPARATOR . get_include_path()); +// $extra_path = array("/opt/php-openid-2.0.1", "/usr/local/share/php"); +// set_include_path(implode(PATH_SEPARATOR, $extra_path) . PATH_SEPARATOR . get_include_path()); -# We get called by common.php, $config is a tree with lots of config -# options -# These are for configuring your URLs +// We get called by common.php, $config is a tree with lots of config +// options +// These are for configuring your URLs $config['site']['name'] = 'Just another Laconica microblog'; $config['site']['server'] = 'localhost'; $config['site']['path'] = 'laconica'; -#$config['site']['fancy'] = false; -#$config['site']['theme'] = 'default'; -#To enable the built-in mobile style sheet, defaults to false. -#$config['site']['mobile'] = true; -#For contact email, defaults to $_SERVER["SERVER_ADMIN"] -#$config['site']['email'] = 'admin@example.net'; -#Brought by... -#$config['site']['broughtby'] = 'Individual or Company'; -#$config['site']['broughtbyurl'] = 'http://example.net/'; -#If you don't want to let users register (say, for a one-person install) -#Crude but effective -- register everybody, then lock down -#$config['site']['closed'] = true; -#Only allow registration for people invited by another user -#$config['site']['inviteonly'] = true; -#Make the site invisible to non-logged-in users -#$config['site']['private'] = true; +// $config['site']['fancy'] = false; +// $config['site']['theme'] = 'default'; +// To enable the built-in mobile style sheet, defaults to false. +// $config['site']['mobile'] = true; +// For contact email, defaults to $_SERVER["SERVER_ADMIN"] +// $config['site']['email'] = 'admin@example.net'; +// Brought by... +// $config['site']['broughtby'] = 'Individual or Company'; +// $config['site']['broughtbyurl'] = 'http://example.net/'; +// If you don't want to let users register (say, for a one-person install) +// Crude but effective -- register everybody, then lock down +// $config['site']['closed'] = true; +// Only allow registration for people invited by another user +// $config['site']['inviteonly'] = true; +// Make the site invisible to non-logged-in users +// $config['site']['private'] = true; -# 'direct' for direct notice links in sections -# 'attachment' for notice attachment links in sections -# left undefined, no link is showed -#$config['site']['notice_link'] = 'attachment'; -#$config['site']['notice_link'] = 'direct'; +// If you want logging sent to a file instead of syslog +// $config['site']['logfile'] = '/tmp/laconica.log'; -# If you want logging sent to a file instead of syslog -#$config['site']['logfile'] = '/tmp/laconica.log'; +// Enables extra log information, for example full details of PEAR DB errors +// $config['site']['logdebug'] = true; -# Enables extra log information, for example full details of PEAR DB errors -#$config['site']['logdebug'] = true; +// To set your own logo, overriding the one in the theme +// $config['site']['logo'] = '/mylogo.png'; -#To set your own logo, overriding the one in the theme -#$config['site']['logo'] = '/mylogo.png'; - -# This is a PEAR DB DSN, see http://pear.php.net/manual/en/package.database.db.intro-dsn.php -# Set it to match your actual database +// This is a PEAR DB DSN, see http://pear.php.net/manual/en/package.database.db.intro-dsn.php +// Set it to match your actual database $config['db']['database'] = 'mysql://laconica:microblog@localhost/laconica'; -#$config['db']['ini_your_db_name'] = $config['db']['schema_location'].'/laconica.ini'; -# *** WARNING *** WARNING *** WARNING *** WARNING *** -# Setting debug to a non-zero value will expose your DATABASE PASSWORD to Web users. -# !!!!!! DO NOT SET THIS ON PRODUCTION SERVERS !!!!!! DB_DataObject's bug, btw, not -# ours. -# *** WARNING *** WARNING *** WARNING *** WARNING *** -#$config['db']['debug'] = 0; -#$config['db']['db_driver'] = 'MDB2'; +// $config['db']['ini_your_db_name'] = $config['db']['schema_location'].'/laconica.ini'; +// *** WARNING *** WARNING *** WARNING *** WARNING *** +// Setting debug to a non-zero value will expose your DATABASE PASSWORD to Web users. +// !!!!!! DO NOT SET THIS ON PRODUCTION SERVERS !!!!!! DB_DataObject's bug, btw, not +// ours. +// *** WARNING *** WARNING *** WARNING *** WARNING *** +// $config['db']['debug'] = 0; +// $config['db']['db_driver'] = 'MDB2'; -#Database type. For mysql, these defaults are fine. For postgresql, set -#'quote_identifiers' to true and 'type' to 'pgsql': -#$config['db']['quote_identifiers'] = false; -#$config['db']['type'] = 'mysql'; +// Database type. For mysql, these defaults are fine. For postgresql, set +// 'quote_identifiers' to true and 'type' to 'pgsql': +// $config['db']['quote_identifiers'] = false; +// $config['db']['type'] = 'mysql'; -#session_set_cookie_params(0, '/'. $config['site']['path'] .'/'); +// session_set_cookie_params(0, '/'. $config['site']['path'] .'/'); -#Standard fancy-url clashes prevented by not allowing nicknames on a blacklist -#Add your own here. Note: empty array by default -#$config['nickname']['blacklist'][] = 'scobleizer'; +// Standard fancy-url clashes prevented by not allowing nicknames on a blacklist +// Add your own here. Note: empty array by default +// $config['nickname']['blacklist'][] = 'scobleizer'; -# sphinx search +// sphinx search $config['sphinx']['enabled'] = false; $config['sphinx']['server'] = 'localhost'; $config['sphinx']['port'] = 3312; -# Users to populate the 'Featured' tab -#$config['nickname']['featured'][] = 'scobleizer'; +// Users to populate the 'Featured' tab +// $config['nickname']['featured'][] = 'scobleizer'; -# xmpp -#$config['xmpp']['enabled'] = false; -#$config['xmpp']['server'] = 'server.example.net'; -#$config['xmpp']['host'] = NULL; # Only set if different from server -#$config['xmpp']['port'] = 5222; -#$config['xmpp']['user'] = 'update'; -#$config['xmpp']['encryption'] = false; -#$config['xmpp']['resource'] = 'uniquename'; -#$config['xmpp']['password'] = 'blahblahblah'; -#$config['xmpp']['public'][] = 'someindexer@example.net'; -#$config['xmpp']['debug'] = false; +// xmpp +// $config['xmpp']['enabled'] = false; +// $config['xmpp']['server'] = 'server.example.net'; +// $config['xmpp']['host'] = NULL; // Only set if different from server +// $config['xmpp']['port'] = 5222; +// $config['xmpp']['user'] = 'update'; +// $config['xmpp']['encryption'] = false; +// $config['xmpp']['resource'] = 'uniquename'; +// $config['xmpp']['password'] = 'blahblahblah'; +// $config['xmpp']['public'][] = 'someindexer@example.net'; +// $config['xmpp']['debug'] = false; -#Default locale info -#$config['site']['timezone'] = 'Pacific/Auckland'; -#$config['site']['language'] = 'en_NZ'; +// Default locale info +// $config['site']['timezone'] = 'Pacific/Auckland'; +// $config['site']['language'] = 'en_NZ'; -#Email info, used for all outbound email -#$config['mail']['notifyfrom'] = 'microblog@example.net'; -#$config['mail']['domain'] = 'microblog.example.net'; -# See http://pear.php.net/manual/en/package.mail.mail.factory.php for options -#$config['mail']['backend'] = 'smtp'; -#$config['mail']['params'] = array( -# 'host' => 'localhost', -# 'port' => 25, -# ); -#For incoming email, if enabled. Defaults to site server name. -#$config['mail']['domain'] = 'incoming.example.net'; +// Email info, used for all outbound email +// $config['mail']['notifyfrom'] = 'microblog@example.net'; +// $config['mail']['domain'] = 'microblog.example.net'; +// See http://pear.php.net/manual/en/package.mail.mail.factory.php for options +// $config['mail']['backend'] = 'smtp'; +// $config['mail']['params'] = array( +// 'host' => 'localhost', +// 'port' => 25, +// ); +// For incoming email, if enabled. Defaults to site server name. +// $config['mail']['domain'] = 'incoming.example.net'; -#exponential decay factor for tags, default 10 days -#raise this if traffic is slow, lower it if it's fast -#$config['tag']['dropoff'] = 86400.0 * 10; +// exponential decay factor for tags, default 10 days +// raise this if traffic is slow, lower it if it's fast +// $config['tag']['dropoff'] = 86400.0 * 10; -#exponential decay factor for popular (most favorited notices) -#default 10 days -- similar to tag dropoff -#$config['popular']['dropoff'] = 86400.0 * 10; +// exponential decay factor for popular (most favorited notices) +// default 10 days -- similar to tag dropoff +// $config['popular']['dropoff'] = 86400.0 * 10; -#optionally show non-local messages in public timeline -#$config['public']['localonly'] = false; +// optionally show non-local messages in public timeline +// $config['public']['localonly'] = false; -#hide certain users from public pages, by ID -#$config['public']['blacklist'][] = 123; -#$config['public']['blacklist'][] = 2307; +// hide certain users from public pages, by ID +// $config['public']['blacklist'][] = 123; +// $config['public']['blacklist'][] = 2307; -#Mark certain notice sources as automatic and thus not -#appropriate for public feed -#$config['public]['autosource'][] = 'twitterfeed'; -#$config['public]['autosource'][] = 'rssdent'; -#$config['public]['autosource'][] = 'Ping.Fm'; -#$config['public]['autosource'][] = 'HelloTxt'; -#$config['public]['autosource'][] = 'Updating.Me'; +// Mark certain notice sources as automatic and thus not +// appropriate for public feed +// $config['public]['autosource'][] = 'twitterfeed'; +// $config['public]['autosource'][] = 'rssdent'; +// $config['public]['autosource'][] = 'Ping.Fm'; +// $config['public]['autosource'][] = 'HelloTxt'; +// $config['public]['autosource'][] = 'Updating.Me'; -#Do notice broadcasts offline -#If you use this, you must run the six offline daemons in the -#background. See the README for details. -#$config['queue']['enabled'] = true; +// Do notice broadcasts offline +// If you use this, you must run the six offline daemons in the +// background. See the README for details. +// $config['queue']['enabled'] = true; -#Queue subsystem -#subsystems: internal (default) or stomp -#using stomp requires an external message queue server -#$config['queue']['subsystem'] = 'stomp'; -#$config['queue']['stomp_server'] = 'tcp://localhost:61613'; -#use different queue_basename for each laconica instance managed by the server -#$config['queue']['queue_basename'] = 'laconica'; +// Queue subsystem +// subsystems: internal (default) or stomp +// using stomp requires an external message queue server +// $config['queue']['subsystem'] = 'stomp'; +// $config['queue']['stomp_server'] = 'tcp://localhost:61613'; +// use different queue_basename for each laconica instance managed by the server +// $config['queue']['queue_basename'] = 'laconica'; -#The following customise the behaviour of the various daemons: -#$config['daemon']['piddir'] = '/var/run'; -#$config['daemon']['user'] = false; -#$config['daemon']['group'] = false; +// The following customise the behaviour of the various daemons: +// $config['daemon']['piddir'] = '/var/run'; +// $config['daemon']['user'] = false; +// $config['daemon']['group'] = false; -#For installations with high traffic, laconica can use MemCached to cache -#frequently requested information. Only enable the following if you have -#MemCached up and running: -#$config['memcached']['enabled'] = false; -#$config['memcached']['server'] = 'localhost'; -#$config['memcached']['port'] = 11211; +// For installations with high traffic, laconica can use MemCached to cache +// frequently requested information. Only enable the following if you have +// MemCached up and running: +// $config['memcached']['enabled'] = false; +// $config['memcached']['server'] = 'localhost'; +// $config['memcached']['port'] = 11211; -# Enable bidirectional Twitter bridge -#$config['twitterbridge']['enabled'] = true; +// Twitter integration source attribute. Note: default is Laconica +// $config['integration']['source'] = 'Laconica'; -#Twitter integration source attribute. Note: default is Laconica -#$config['integration']['source'] = 'Laconica'; +// Edit throttling. Off by default. If turned on, you can only post 20 notices +// every 10 minutes. Admins may want to play with the settings to minimize inconvenience for +// real users without getting uncontrollable floods from spammers or runaway bots. -# Edit throttling. Off by default. If turned on, you can only post 20 notices -# every 10 minutes. Admins may want to play with the settings to minimize inconvenience for -# real users without getting uncontrollable floods from spammers or runaway bots. +// $config['throttle']['enabled'] = true; +// $config['throttle']['count'] = 100; +// $config['throttle']['timespan'] = 3600; -#$config['throttle']['enabled'] = true; -#$config['throttle']['count'] = 100; -#$config['throttle']['timespan'] = 3600; +// List of users banned from posting (nicknames and/or IDs) +// $config['profile']['banned'][] = 'hacker'; +// $config['profile']['banned'][] = 12345; -# List of users banned from posting (nicknames and/or IDs) -#$config['profile']['banned'][] = 'hacker'; -#$config['profile']['banned'][] = 12345; +// Config section for the built-in Facebook application +// $config['facebook']['apikey'] = 'APIKEY'; +// $config['facebook']['secret'] = 'SECRET'; -# Config section for the built-in Facebook application -#$config['facebook']['apikey'] = 'APIKEY'; -#$config['facebook']['secret'] = 'SECRET'; +// Add Google Analytics +// require_once('plugins/GoogleAnalyticsPlugin.php'); +// $ga = new GoogleAnalyticsPlugin('your secret code'); -# Facebook Connect plugin (Needs valid APIKEY above) -#require_once(INSTALLDIR.'/plugins/FBConnect/FBConnectPlugin.php'); -#$fbc = new FBConnectPlugin(); +// Use Templating (template: /tpl/index.php) +// require_once('plugins/TemplatePlugin.php'); +// $tpl = new TemplatePlugin(); -# Add Google Analytics -# require_once('plugins/GoogleAnalyticsPlugin.php'); -# $ga = new GoogleAnalyticsPlugin('your secret code'); +// Don't allow saying the same thing more than once per hour +// $config['site']['dupelimit'] = 3600; +// Don't enforce the dupe limit +// $config['site']['dupelimit'] = -1; -# Use Templating (template: /tpl/index.php) -# require_once('plugins/TemplatePlugin.php'); -# $tpl = new TemplatePlugin(); +// Base string for minting Tag URIs in Atom feeds. Defaults to +// "yourserver,2009". This needs to be configured properly for your Atom +// feeds to validate. See: http://www.faqs.org/rfcs/rfc4151.html and +// http://taguri.org/ Examples: +// $config['integration']['taguri'] = 'example.net,2008'; +// $config['integration']['taguri'] = 'admin@example.net,2009-03-09' -#Don't allow saying the same thing more than once per hour -#$config['site']['dupelimit'] = 3600; -#Don't enforce the dupe limit -#$config['site']['dupelimit'] = -1; +// Don't use SSL +// $config['site']['ssl'] = 'never'; +// Use SSL only for sensitive pages (like login, password change) +// $config['site']['ssl'] = 'sometimes'; +// Use SSL for all pages +// $config['site']['ssl'] = 'always'; -#Base string for minting Tag URIs in Atom feeds. Defaults to -#"yourserver,2009". This needs to be configured properly for your Atom -#feeds to validate. See: http://www.faqs.org/rfcs/rfc4151.html and -#http://taguri.org/ Examples: -#$config['integration']['taguri'] = 'example.net,2008'; -#$config['integration']['taguri'] = 'admin@example.net,2009-03-09' +// Use a different hostname for SSL-encrypted pages +// $config['site']['sslserver'] = 'secure.example.org'; -#Don't use SSL -#$config['site']['ssl'] = 'never'; -#Use SSL only for sensitive pages (like login, password change) -#$config['site']['ssl'] = 'sometimes'; -#Use SSL for all pages -#$config['site']['ssl'] = 'always'; - -#Use a different hostname for SSL-encrypted pages -#$config['site']['sslserver'] = 'secure.example.org'; - -#If you have a lot of status networks on the same server, you can -#store the site data in a database and switch as follows -#Status_network::setupDB('localhost', 'statusnet', 'statuspass', 'statusnet'); -#if (!Status_network::setupSite($_server, $_path)) { -# print "Error\n"; -# exit(1); -#} +// If you have a lot of status networks on the same server, you can +// store the site data in a database and switch as follows +// Status_network::setupDB('localhost', 'statusnet', 'statuspass', 'statusnet'); +// if (!Status_network::setupSite($_server, $_path)) { +// print "Error\n"; +// exit(1); +// } diff --git a/js/farbtastic/farbtastic.go.js b/js/farbtastic/farbtastic.go.js index 64dd7db204..0149eca7d9 100644 --- a/js/farbtastic/farbtastic.go.js +++ b/js/farbtastic/farbtastic.go.js @@ -1,29 +1,30 @@ +/** Init for Farbtastic library and page setup + * + * @package Laconica + * @author Sarven Capadisli + * @copyright 2009 Control Yourself, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + */ $(document).ready(function() { - function UpdateColors(e) { - var S = f.linked; - var C = f.color; - - if (S && S.value && S.value != C) { - UpdateSwatch(S); - - switch (parseInt(f.linked.id.slice(-1))) { - case 1: default: - $('body').css({'background-color':C}); - break; - case 2: - $('#content').css({'background-color':C}); - break; - case 3: - $('#aside_primary').css({'background-color':C}); - break; - case 4: - $('body').css({'color':C}); - break; - case 5: - $('a').css({'color':C}); - break; - } - S.value = C; + function UpdateColors(S) { + C = $(S).val(); + switch (parseInt(S.id.slice(-1))) { + case 0: default: + $('body').css({'background-color':C}); + break; + case 1: + $('#content').css({'background-color':C}); + break; + case 2: + $('#aside_primary').css({'background-color':C}); + break; + case 3: + $('body').css({'color':C}); + break; + case 4: + $('a').css({'color':C}); + break; } } @@ -33,35 +34,52 @@ $(document).ready(function() { } function UpdateSwatch(e) { - $(e).css({ - "background-color": e.value, - "color": f.hsl[2] > 0.5 ? "#000": "#fff" - }); + $(e).css({"background-color": e.value, + "color": f.hsl[2] > 0.5 ? "#000": "#fff"}); } - $('#settings_design_color').append('
'); - $('#color-picker').hide(); + function SynchColors(e) { + var S = f.linked; + var C = f.color; - var f = $.farbtastic('#color-picker', UpdateColors); - var swatches = $('#settings_design_color input'); + if (S && S.value && S.value != C) { + S.value = C; + UpdateSwatch(S); + UpdateColors(S); + } + } - swatches - .each(UpdateColors) + function Init() { + $('#settings_design_color').append('
'); + $('#color-picker').hide(); - .blur(function() { - $(this).val($(this).val().toUpperCase()); - }) + f = $.farbtastic('#color-picker', SynchColors); + swatches = $('#settings_design_color .swatch'); - .focus(function() { - $('#color-picker').show(); - UpdateFarbtastic(this); - }) - - .change(function() { - UpdateFarbtastic(this); - UpdateSwatch(this); - }).change() - - ; + swatches + .each(SynchColors) + .blur(function() { + $(this).val($(this).val().toUpperCase()); + }) + .focus(function() { + $('#color-picker').show(); + UpdateFarbtastic(this); + }) + .change(function() { + UpdateFarbtastic(this); + UpdateSwatch(this); + UpdateColors(this); + }).change(); + } + var f, swatches; + Init(); + $('#form_settings_design').bind('reset', function(){ + setTimeout(function(){ + swatches.each(function(){UpdateColors(this);}); + $('#color-picker').remove(); + swatches.unbind(); + Init(); + },10); + }); }); diff --git a/js/jcrop/jquery.Jcrop.go.js b/js/jcrop/jquery.Jcrop.go.js index a0399d5405..4e1cbfd1e7 100644 --- a/js/jcrop/jquery.Jcrop.go.js +++ b/js/jcrop/jquery.Jcrop.go.js @@ -1,39 +1,48 @@ - $(function(){ - var x = ($('#avatar_crop_x').val()) ? $('#avatar_crop_x').val() : 0; - var y = ($('#avatar_crop_y').val()) ? $('#avatar_crop_y').val() : 0; - var w = ($('#avatar_crop_w').val()) ? $('#avatar_crop_w').val() : $("#avatar_original img").attr("width"); - var h = ($('#avatar_crop_h').val()) ? $('#avatar_crop_h').val() : $("#avatar_original img").attr("height"); +/** Init for Jcrop library and page setup + * + * @package Laconica + * @author Sarven Capadisli + * @copyright 2009 Control Yourself, Inc. + * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 + * @link http://laconi.ca/ + */ - jQuery("#avatar_original img").Jcrop({ - onChange: showPreview, - setSelect: [ x, y, w, h ], - onSelect: updateCoords, - aspectRatio: 1, - boxWidth: 480, - boxHeight: 480, - bgColor: '#000', - bgOpacity: .4 - }); - }); +$(function(){ + var x = ($('#avatar_crop_x').val()) ? $('#avatar_crop_x').val() : 0; + var y = ($('#avatar_crop_y').val()) ? $('#avatar_crop_y').val() : 0; + var w = ($('#avatar_crop_w').val()) ? $('#avatar_crop_w').val() : $("#avatar_original img").attr("width"); + var h = ($('#avatar_crop_h').val()) ? $('#avatar_crop_h').val() : $("#avatar_original img").attr("height"); - function showPreview(coords) { - var rx = 96 / coords.w; - var ry = 96 / coords.h; + jQuery("#avatar_original img").Jcrop({ + onChange: showPreview, + setSelect: [ x, y, w, h ], + onSelect: updateCoords, + aspectRatio: 1, + boxWidth: 480, + boxHeight: 480, + bgColor: '#000', + bgOpacity: .4 + }); +}); - var img_width = $("#avatar_original img").attr("width"); - var img_height = $("#avatar_original img").attr("height"); +function showPreview(coords) { + var rx = 96 / coords.w; + var ry = 96 / coords.h; - $('#avatar_preview img').css({ - width: Math.round(rx *img_width) + 'px', - height: Math.round(ry * img_height) + 'px', - marginLeft: '-' + Math.round(rx * coords.x) + 'px', - marginTop: '-' + Math.round(ry * coords.y) + 'px' - }); - }; + var img_width = $("#avatar_original img").attr("width"); + var img_height = $("#avatar_original img").attr("height"); - function updateCoords(c) { - $('#avatar_crop_x').val(c.x); - $('#avatar_crop_y').val(c.y); - $('#avatar_crop_w').val(c.w); - $('#avatar_crop_h').val(c.h); - }; + $('#avatar_preview img').css({ + width: Math.round(rx *img_width) + 'px', + height: Math.round(ry * img_height) + 'px', + marginLeft: '-' + Math.round(rx * coords.x) + 'px', + marginTop: '-' + Math.round(ry * coords.y) + 'px' + }); +}; + +function updateCoords(c) { + $('#avatar_crop_x').val(c.x); + $('#avatar_crop_y').val(c.y); + $('#avatar_crop_w').val(c.w); + $('#avatar_crop_h').val(c.h); +}; diff --git a/lib/common.php b/lib/common.php index abdc22c0e3..3feba1d8bd 100644 --- a/lib/common.php +++ b/lib/common.php @@ -19,7 +19,7 @@ if (!defined('LACONICA')) { exit(1); } -define('LACONICA_VERSION', '0.7.3'); +define('LACONICA_VERSION', '0.8.0dev'); define('AVATAR_PROFILE_SIZE', 96); define('AVATAR_STREAM_SIZE', 48); diff --git a/plugins/FBConnect/FBConnectPlugin.php b/plugins/FBConnect/FBConnectPlugin.php index 342a624927..191cede765 100644 --- a/plugins/FBConnect/FBConnectPlugin.php +++ b/plugins/FBConnect/FBConnectPlugin.php @@ -120,22 +120,28 @@ class FBConnectPlugin extends Plugin $apikey = common_config('facebook', 'apikey'); $plugin_path = common_path('plugins/FBConnect'); - $url = common_get_returnto(); + $login_url = common_get_returnto(); - if ($url) { + if ($login_url) { // We don't have to return to it again common_set_returnto(null); } else { $url = common_local_url('public'); } + + $logout_url = common_local_url('logout'); $html = sprintf('', $apikey, $plugin_path, $url); + ', $apikey, $plugin_path, $login_url, $logout_url); $action->raw($html); @@ -170,8 +176,8 @@ class FBConnectPlugin extends Plugin $text = _('Logout'); $html = sprintf('', - $logout_url, $title, $logout_url, $text); + 'onclick="FB.Connect.logout(function() { goto_logout() })">%s', + $logout_url, $title, $text); $action->raw($html); @@ -198,7 +204,7 @@ class FBConnectPlugin extends Plugin if (!$user) { $action->elementStart('li'); - $action->element('fb:login-button', array('onlogin' => 'refresh_page()', + $action->element('fb:login-button', array('onlogin' => 'goto_login()', 'length' => 'long')); $action->elementEnd('li'); } diff --git a/scripts/twitterstatusfetcher.php b/scripts/twitterstatusfetcher.php index 9dfadc7606..a61ce1b0d1 100755 --- a/scripts/twitterstatusfetcher.php +++ b/scripts/twitterstatusfetcher.php @@ -214,7 +214,8 @@ class TwitterStatusFetcher extends Daemon return; } - foreach ($timeline as $status) { + // Reverse to preserve order + foreach (array_reverse($timeline) as $status) { // Hacktastic: filter out stuff coming from this Laconica $source = mb_strtolower(common_config('integration', 'source')); diff --git a/theme/base/css/display.css b/theme/base/css/display.css index eda04be77e..8bd0ae1c4f 100644 --- a/theme/base/css/display.css +++ b/theme/base/css/display.css @@ -1161,6 +1161,17 @@ width:400px; margin-right:28px; } +#settings_design_color .form_data li { +width:33%; +} +#settings_design_color .form_data label { +float:none; +} +#settings_design_color .form_data .swatch { +padding:11px; +margin-left:0; +} + .instructions ul { list-style-position:inside; } diff --git a/theme/default/css/display.css b/theme/default/css/display.css index 1fc99eff7d..e4b57ef49c 100644 --- a/theme/default/css/display.css +++ b/theme/default/css/display.css @@ -72,13 +72,6 @@ border-top-color:#D1D9E4; border-top-color:#C3D6DF; } -#content .notice p.entry-content a:visited { -background-color:#fcfcfc; -} -#content .notice p.entry-content .vcard a { -background-color:#fcfffc; -} - #aside_primary { background-color:#CEE1E9; }