]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Merge branch '0.8.x' of git://gitorious.org/laconica/dev into 0.8.x
authorSarven Capadisli <csarven@csarven-laptop.(none)>
Wed, 20 May 2009 23:40:29 +0000 (19:40 -0400)
committerSarven Capadisli <csarven@csarven-laptop.(none)>
Wed, 20 May 2009 23:40:29 +0000 (19:40 -0400)
actions/designsettings.php
config.php.sample
js/farbtastic/farbtastic.go.js
js/jcrop/jquery.Jcrop.go.js
lib/common.php
plugins/FBConnect/FBConnectPlugin.php
scripts/twitterstatusfetcher.php
theme/base/css/display.css
theme/default/css/display.css

index 0deb3f6847b02435744162fe074041d5e1569aef..8a7c261048c0ddd5b2be053da3858fcead1ef76b 100644 (file)
@@ -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.
index 826b086a3bea7e423580b0636f110d069a6844e8..4f438dc5e179bbca9bf7bd71ca6864c7436b463b 100644 (file)
 
 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;
-
-# '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';
-
-# 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';
-
-# 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['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;
+
+// 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;
+
+// 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
 
 $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';
-
-#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'] .'/');
-
-#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
+// $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';
+
+// 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';
+
+// sphinx search
 $config['sphinx']['enabled'] = false;
 $config['sphinx']['server'] = 'localhost';
 $config['sphinx']['port'] = 3312;
 
-# 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;
-
-#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';
-
-#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;
-
-#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;
-
-#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;
-
-#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;
-
-#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';
-
-# 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;
-
-# 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';
-
-# Facebook Connect plugin (Needs valid APIKEY above)
-#require_once(INSTALLDIR.'/plugins/FBConnect/FBConnectPlugin.php');
-#$fbc = new FBConnectPlugin();
-
-# Add Google Analytics
-# require_once('plugins/GoogleAnalyticsPlugin.php');
-# $ga = new GoogleAnalyticsPlugin('your secret code');
-
-# Use Templating (template: /tpl/index.php)
-# require_once('plugins/TemplatePlugin.php');
-# $tpl = new TemplatePlugin();
-
-#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;
-
-#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 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);
-#}
+// 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;
+
+// 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';
+
+// 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;
+
+// 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;
+
+// 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;
+
+// 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;
+
+// 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;
+
+// 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.
+
+// $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;
+
+// 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');
+
+// Use Templating (template: /tpl/index.php)
+// require_once('plugins/TemplatePlugin.php');
+// $tpl = new TemplatePlugin();
+
+// 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;
+
+// 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 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);
+// }
index 64dd7db204665db23e25f8890745587fd68dfd30..0149eca7d9f30f2a82d9500238353476368e916c 100644 (file)
@@ -1,29 +1,30 @@
+/** Init for Farbtastic library and page setup
+ *
+ * @package   Laconica
+ * @author Sarven Capadisli <csarven@controlyourself.ca>
+ * @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('<div id="color-picker"></div>');
-    $('#color-picker').hide();
-
-    var f = $.farbtastic('#color-picker', UpdateColors);
-    var swatches = $('#settings_design_color input');
-
-    swatches
-        .each(UpdateColors)
+    function SynchColors(e) {
+        var S = f.linked;
+        var C = f.color;
 
-        .blur(function() {
-            $(this).val($(this).val().toUpperCase());
-         })
+        if (S && S.value && S.value != C) {
+            S.value = C;
+            UpdateSwatch(S);
+            UpdateColors(S);
+        }
+    }
 
-        .focus(function() {
-            $('#color-picker').show();
-            UpdateFarbtastic(this);
-        })
+    function Init() {
+        $('#settings_design_color').append('<div id="color-picker"></div>');
+        $('#color-picker').hide();
 
-        .change(function() {
-            UpdateFarbtastic(this);
-            UpdateSwatch(this);
-        }).change()
+        f = $.farbtastic('#color-picker', SynchColors);
+        swatches = $('#settings_design_color .swatch');
 
-        ;
+        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);
+    });
 });
index a0399d540510db1638a9f233dbeb5ef18bcc6bc1..4e1cbfd1e705810938e2a5ee07a9cf304d80c688 100644 (file)
@@ -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 <csarven@controlyourself.ca>
+ * @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);
+};
index abdc22c0e324dae9bb522747a4789d150485a89c..3feba1d8bd95dd845045ac506ca700f722097268 100644 (file)
@@ -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);
index 342a624927219eaec9b9268b1b03386af1d23ad1..191cede7655892b3a15744dc9ea43c9e57ea4f64 100644 (file)
@@ -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('<script type="text/javascript">FB.init("%s", "%s/xd_receiver.htm");
 
-                            function refresh_page() {
+                            function goto_login() {
+                                window.location = "%s";
+                            }
+                            
+                            function goto_logout() {
                                 window.location = "%s";
                             }
 
-                         </script>', $apikey, $plugin_path, $url);
+                         </script>', $apikey, $plugin_path, $login_url, $logout_url);
 
 
         $action->raw($html);
@@ -170,8 +176,8 @@ class FBConnectPlugin extends Plugin
              $text = _('Logout');
 
              $html = sprintf('<li id="nav_logout"><a href="%s" title="%s" ' .
-                 'onclick="FB.Connect.logoutAndRedirect(\'%s\')">%s</a></li>',
-                    $logout_url, $title, $logout_url, $text);
+                 'onclick="FB.Connect.logout(function() { goto_logout() })">%s</a></li>',
+                    $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');
         }
index 9dfadc7606ea06fe7234a9cb7ef7ae32cafa710f..a61ce1b0d1622f2d63065d0ce118ca77d97ce3a6 100755 (executable)
@@ -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'));
index eda04be77e4dde4330f35c0ec35fd0d6b377eaf5..8bd0ae1c4ff4c95bc6f32c812ba6c72d84160c46 100644 (file)
@@ -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;
 }
index 1fc99eff7d00ecd45a0f57eb584e48664f42e9e8..e4b57ef49c61661605c4eb665109996aea97986d 100644 (file)
@@ -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;
 }