summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--js/util.js11
-rw-r--r--lib/noticeform.php4
-rw-r--r--plugins/FBConnect/FBC_XDReceiver.php73
-rw-r--r--plugins/FBConnect/FBConnectLogin.php2
-rw-r--r--plugins/FBConnect/FBConnectPlugin.php63
-rw-r--r--plugins/FBConnect/xd_receiver.htm10
-rw-r--r--theme/base/css/display.css15
-rw-r--r--theme/base/images/icons/twotone/green/clip-01.gifbin0 -> 78 bytes
-rw-r--r--theme/biz/css/base.css21
-rw-r--r--theme/biz/css/display.css7
-rw-r--r--theme/default/css/display.css7
-rw-r--r--theme/identica/css/display.css7
12 files changed, 169 insertions, 51 deletions
diff --git a/js/util.js b/js/util.js
index bffbf916f..b712ba8e2 100644
--- a/js/util.js
+++ b/js/util.js
@@ -17,17 +17,6 @@
*/
$(document).ready(function(){
- $('input#notice_data-attach').toggle();
- $('label[for=notice_data-attach]').text('Upload a file as an attachment?');
- $('label[for=notice_data-attach]').click(function () {
- if ('Upload a file as an attachment?' == $(this).text()) {
- $(this).text('Upload: ');
- $('input#notice_data-attach').slideDown('fast');
- } else {
- $('input#notice_data-attach').slideUp('fast', function() {$('label[for=notice_data-attach]').text('Upload a file as an attachment?');});
- }
- });
-
// count character on keyup
function counter(event){
var maxLength = 140;
diff --git a/lib/noticeform.php b/lib/noticeform.php
index 805cd56b1..5d7cf194e 100644
--- a/lib/noticeform.php
+++ b/lib/noticeform.php
@@ -148,11 +148,11 @@ class NoticeForm extends Form
$this->out->element('dd', array('id' => 'notice_text-count'),
'140');
$this->out->elementEnd('dl');
- $this->out->element('br', array('style' => 'clear:both'));
$this->out->element('label', array('for' => 'notice_data-attach'), _('Attach'));
$this->out->element('input', array('id' => 'notice_data-attach',
'type' => 'file',
- 'name' => 'attach'));
+ 'name' => 'attach',
+ 'title' => _('Attach a file')));
if ($this->action) {
$this->out->hidden('notice_return-to', $this->action, 'returnto');
}
diff --git a/plugins/FBConnect/FBC_XDReceiver.php b/plugins/FBConnect/FBC_XDReceiver.php
new file mode 100644
index 000000000..57c98b4f1
--- /dev/null
+++ b/plugins/FBConnect/FBC_XDReceiver.php
@@ -0,0 +1,73 @@
+<?php
+
+if (!defined('LACONICA')) {
+ exit(1);
+}
+
+/*
+ * Generates the cross domain communication channel file
+ * (xd_receiver.html). By generating it we can add some caching
+ * instructions.
+ *
+ * See: http://wiki.developers.facebook.com/index.php/Cross_Domain_Communication_Channel
+ */
+class FBC_XDReceiverAction extends Action
+{
+
+ /**
+ * Do we need to write to the database?
+ *
+ * @return boolean true
+ */
+
+ function isReadonly()
+ {
+ return true;
+ }
+
+ /**
+ * Handle a request
+ *
+ * @param array $args Arguments from $_REQUEST
+ *
+ * @return void
+ */
+
+ function handle($args)
+ {
+ // Parent handling, including cache check
+ parent::handle($args);
+ $this->showPage();
+ }
+
+ function showPage()
+ {
+ // cache the xd_receiver
+ header('Cache-Control: max-age=225065900');
+ header('Expires:');
+ header('Pragma:');
+
+ $this->startXML('html',
+ '-//W3C//DTD XHTML 1.0 Strict//EN',
+ 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd');
+
+ $language = $this->getLanguage();
+
+ $this->elementStart('html', array('xmlns' => 'http://www.w3.org/1999/xhtml',
+ 'xml:lang' => $language,
+ 'lang' => $language));
+ $this->elementStart('head');
+ $this->element('title', null, 'cross domain receiver page');
+ $this->element('script',
+ array('src' =>
+ 'http://static.ak.connect.facebook.com/js/api_lib/v0.4/XdCommReceiver.debug.js',
+ 'type' => 'text/javascript'), '');
+ $this->elementEnd('head');
+ $this->elementStart('body');
+ $this->elementEnd('body');
+
+ $this->elementEnd('html');
+ }
+
+}
+
diff --git a/plugins/FBConnect/FBConnectLogin.php b/plugins/FBConnect/FBConnectLogin.php
index 7989dc854..205086cd8 100644
--- a/plugins/FBConnect/FBConnectLogin.php
+++ b/plugins/FBConnect/FBConnectLogin.php
@@ -58,8 +58,6 @@ class FBConnectLoginAction extends Action
function showContent() {
$this->elementStart('fieldset');
-
-
$this->element('fb:login-button', array('onlogin' => 'goto_login()',
'length' => 'long'));
diff --git a/plugins/FBConnect/FBConnectPlugin.php b/plugins/FBConnect/FBConnectPlugin.php
index c85ef432d..a366985be 100644
--- a/plugins/FBConnect/FBConnectPlugin.php
+++ b/plugins/FBConnect/FBConnectPlugin.php
@@ -39,6 +39,7 @@ require_once INSTALLDIR . '/plugins/FBConnect/FBConnectLogin.php';
require_once INSTALLDIR . '/plugins/FBConnect/FBConnectSettings.php';
require_once INSTALLDIR . '/plugins/FBConnect/FBCLoginGroupNav.php';
require_once INSTALLDIR . '/plugins/FBConnect/FBCSettingsNav.php';
+require_once INSTALLDIR . '/plugins/FBConnect/FBC_XDReceiver.php';
/**
* Plugin to enable Facebook Connect
@@ -62,27 +63,19 @@ class FBConnectPlugin extends Plugin
$m->connect('main/facebookconnect', array('action' => 'FBConnectAuth'));
$m->connect('main/facebooklogin', array('action' => 'FBConnectLogin'));
$m->connect('settings/facebook', array('action' => 'FBConnectSettings'));
+ $m->connect('xd_receiver.html', array('action' => 'FBC_XDReceiver'));
}
// Add in xmlns:fb
function onStartShowHTML($action)
{
- $httpaccept = isset($_SERVER['HTTP_ACCEPT']) ?
- $_SERVER['HTTP_ACCEPT'] : null;
-
- // XXX: allow content negotiation for RDF, RSS, or XRDS
-
- $cp = common_accept_to_prefs($httpaccept);
- $sp = common_accept_to_prefs(PAGE_TYPE_PREFS);
-
- $type = common_negotiate_type($cp, $sp);
-
- if (!$type) {
- throw new ClientException(_('This page is not available in a '.
- 'media type you accept'), 406);
- }
-
- header('Content-Type: '.$type);
+ // XXX: Horrible hack to make Safari, FF2, and Chrome work with
+ // Facebook Connect. These browser cannot use Facebook's
+ // DOM parsing routines unless the mime type of the page is
+ // text/html even though Facebook Connect uses XHTML. This is
+ // A bug in Facebook Connect, and this is a temporary solution
+ // until they fix their JavaScript libs.
+ header('Content-Type: text/html');
$action->extraHeaders();
@@ -101,20 +94,27 @@ class FBConnectPlugin extends Plugin
return false;
}
- function onEndShowLaconicaScripts($action)
- {
- $action->element('script',
- array('type' => 'text/javascript',
- 'src' => 'http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php'),
- ' ');
+ // Note: this script needs to appear in the <body>
+ function onStartShowHeader($action)
+ {
$apikey = common_config('facebook', 'apikey');
$plugin_path = common_path('plugins/FBConnect');
$login_url = common_local_url('FBConnectAuth');
$logout_url = common_local_url('logout');
- $html = sprintf('<script type="text/javascript">FB.init("%s", "%s/xd_receiver.htm");
+ // XXX: Facebook says we don't need this FB_RequireFeatures(),
+ // but we actually do, for IE and Safari. Gar.
+
+ $html = sprintf('<script type="text/javascript">
+ window.onload = function () {
+ FB_RequireFeatures(
+ ["XFBML"],
+ function() {
+ FB.Facebook.init("%s", "../xd_receiver.html");
+ }
+ ); }
function goto_login() {
window.location = "%s";
@@ -123,11 +123,21 @@ class FBConnectPlugin extends Plugin
function goto_logout() {
window.location = "%s";
}
+ </script>', $apikey,
+ $login_url, $logout_url);
- </script>', $apikey, $plugin_path, $login_url, $logout_url);
+ $action->raw($html);
+ }
+ // Note: this script needs to appear as close as possible to </body>
- $action->raw($html);
+ function onEndShowFooter($action)
+ {
+
+ $action->element('script',
+ array('type' => 'text/javascript',
+ 'src' => 'http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php'),
+ '');
}
function onEndShowLaconicaStyles($action)
@@ -143,7 +153,8 @@ class FBConnectPlugin extends Plugin
if ($user) {
- $flink = Foreign_link::getByUserId($user->id, FACEBOOK_CONNECT_SERVICE);
+ $flink = Foreign_link::getByUserId($user->id,
+ FACEBOOK_CONNECT_SERVICE);
$fbuid = 0;
if ($flink) {
diff --git a/plugins/FBConnect/xd_receiver.htm b/plugins/FBConnect/xd_receiver.htm
deleted file mode 100644
index 43fb2c4e4..000000000
--- a/plugins/FBConnect/xd_receiver.htm
+++ /dev/null
@@ -1,10 +0,0 @@
-<!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" >
-<head>
- <title>cross domain receiver page</title>
-</head>
-<body>
- <script src="http://static.ak.connect.facebook.com/js/api_lib/v0.4/XdCommReceiver.debug.js" type="text/javascript"></script>
-</body>
-</html>
diff --git a/theme/base/css/display.css b/theme/base/css/display.css
index 7d495c539..dc275e19f 100644
--- a/theme/base/css/display.css
+++ b/theme/base/css/display.css
@@ -452,6 +452,21 @@ float:left;
font-size:1.3em;
margin-bottom:7px;
}
+#form_notice label[for=notice_data-attach] {
+text-indent:-9999px;
+}
+#form_notice label[for=notice_data-attach],
+#form_notice #notice_data-attach {
+position:absolute;
+top:25px;
+right:49px;
+width:16px;
+height:16px;
+cursor:pointer;
+}
+#form_notice #notice_data-attach {
+text-indent:-279px;
+}
#form_notice #notice_submit label {
display:none;
}
diff --git a/theme/base/images/icons/twotone/green/clip-01.gif b/theme/base/images/icons/twotone/green/clip-01.gif
new file mode 100644
index 000000000..f2dee7e5e
--- /dev/null
+++ b/theme/base/images/icons/twotone/green/clip-01.gif
Binary files differ
diff --git a/theme/biz/css/base.css b/theme/biz/css/base.css
index 0e37a6ee4..696fd0645 100644
--- a/theme/biz/css/base.css
+++ b/theme/biz/css/base.css
@@ -446,6 +446,27 @@ float:left;
font-size:1.3em;
margin-bottom:7px;
}
+#form_notice label {
+display:block;
+float:left;
+font-size:1.3em;
+margin-bottom:7px;
+}
+#form_notice label[for=notice_data-attach] {
+text-indent:-9999px;
+}
+#form_notice label[for=notice_data-attach],
+#form_notice #notice_data-attach {
+position:absolute;
+top:25px;
+right:49px;
+width:16px;
+height:16px;
+cursor:pointer;
+}
+#form_notice #notice_data-attach {
+text-indent:-279px;
+}
#form_notice #notice_submit label {
display:none;
}
diff --git a/theme/biz/css/display.css b/theme/biz/css/display.css
index 14092d964..3af4c06b9 100644
--- a/theme/biz/css/display.css
+++ b/theme/biz/css/display.css
@@ -102,6 +102,13 @@ color:#333;
#form_notice.warning #notice_text-count {
color:#000;
}
+#form_notice label[for=notice_data-attach] {
+background:transparent url(../../base/images/icons/twotone/green/clip-01.gif) no-repeat 0 45%;
+}
+#form_notice #notice_data-attach {
+opacity:0;
+}
+
#form_notice.processing #notice_action-submit {
background:#fff url(../../base/images/icons/icon_processing.gif) no-repeat 47% 47%;
cursor:wait;
diff --git a/theme/default/css/display.css b/theme/default/css/display.css
index e08a4783b..34f6b3b8a 100644
--- a/theme/default/css/display.css
+++ b/theme/default/css/display.css
@@ -82,6 +82,13 @@ color:#333;
#form_notice.warning #notice_text-count {
color:#000;
}
+#form_notice label[for=notice_data-attach] {
+background:transparent url(../../base/images/icons/twotone/green/clip-01.gif) no-repeat 0 45%;
+}
+#form_notice #notice_data-attach {
+opacity:0;
+}
+
#form_notice.processing #notice_action-submit {
background:#fff url(../../base/images/icons/icon_processing.gif) no-repeat 47% 47%;
cursor:wait;
diff --git a/theme/identica/css/display.css b/theme/identica/css/display.css
index 1f1298737..8a03a4d77 100644
--- a/theme/identica/css/display.css
+++ b/theme/identica/css/display.css
@@ -82,6 +82,13 @@ color:#333;
#form_notice.warning #notice_text-count {
color:#000;
}
+#form_notice label[for=notice_data-attach] {
+background:transparent url(../../base/images/icons/twotone/green/clip-01.gif) no-repeat 0 45%;
+}
+#form_notice #notice_data-attach {
+opacity:0;
+}
+
#form_notice.processing #notice_action-submit {
background:#fff url(../../base/images/icons/icon_processing.gif) no-repeat 47% 47%;
cursor:wait;