2008-08-27 02:38:35 +01:00
/ *
* Laconica - a distributed open - source microblogging tool
* Copyright ( C ) 2008 , Controlez - Vous , Inc .
*
* 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/>.
* /
2008-06-24 18:46:13 +01:00
$ ( document ) . ready ( function ( ) {
2008-11-15 03:35:49 +00:00
// count character on keyup
function counter ( event ) {
var maxLength = 140 ;
2009-01-16 17:02:46 +00:00
var currentLength = $ ( "#notice_data-text" ) . val ( ) . length ;
2008-11-15 03:35:49 +00:00
var remaining = maxLength - currentLength ;
2009-01-16 18:14:20 +00:00
var counter = $ ( "#notice_text-count" ) ;
2008-11-15 03:35:49 +00:00
counter . text ( remaining ) ;
2009-01-21 16:47:23 +00:00
2008-11-15 03:35:49 +00:00
if ( remaining <= 0 ) {
2009-01-16 18:14:20 +00:00
$ ( "#form_notice" ) . addClass ( "warning" ) ;
2008-11-15 03:35:49 +00:00
} else {
2009-01-16 18:14:20 +00:00
$ ( "#form_notice" ) . removeClass ( "warning" ) ;
2008-11-15 03:35:49 +00:00
}
}
2008-06-24 18:46:13 +01:00
2008-11-15 03:35:49 +00:00
function submitonreturn ( event ) {
if ( event . keyCode == 13 ) {
2009-01-16 17:02:46 +00:00
$ ( "#form_notice" ) . submit ( ) ;
2008-11-15 03:35:49 +00:00
event . preventDefault ( ) ;
event . stopPropagation ( ) ;
return false ;
}
return true ;
}
2008-09-18 16:04:38 +01:00
2009-01-16 17:02:46 +00:00
if ( $ ( "#notice_data-text" ) . length ) {
$ ( "#notice_data-text" ) . bind ( "keyup" , counter ) ;
$ ( "#notice_data-text" ) . bind ( "keydown" , submitonreturn ) ;
2009-01-21 16:47:23 +00:00
2008-11-15 03:35:49 +00:00
// run once in case there's something in there
counter ( ) ;
2009-01-21 16:47:23 +00:00
2008-11-15 03:35:49 +00:00
// set the focus
2009-01-16 17:02:46 +00:00
$ ( "#notice_data-text" ) . focus ( ) ;
2008-11-15 03:35:49 +00:00
}
2008-09-18 16:04:38 +01:00
2008-11-15 03:35:49 +00:00
// XXX: refactor this code
2008-09-18 16:04:38 +01:00
2008-11-15 03:35:49 +00:00
var favoptions = { dataType : 'xml' ,
2008-11-23 21:34:58 +00:00
success : function ( xml ) { var new _form = document . _importNode ( $ ( 'form' , xml ) . get ( 0 ) , true ) ;
2008-11-15 03:35:49 +00:00
var dis = new _form . id ;
var fav = dis . replace ( 'disfavor' , 'favor' ) ;
$ ( 'form#' + fav ) . replaceWith ( new _form ) ;
$ ( 'form#' + dis ) . ajaxForm ( disoptions ) . each ( addAjaxHidden ) ;
}
} ;
2008-09-18 16:04:38 +01:00
2008-11-15 03:35:49 +00:00
var disoptions = { dataType : 'xml' ,
success : function ( xml ) { var new _form = document . _importNode ( $ ( 'form' , xml ) . get ( 0 ) , true ) ;
var fav = new _form . id ;
var dis = fav . replace ( 'favor' , 'disfavor' ) ;
$ ( 'form#' + dis ) . replaceWith ( new _form ) ;
$ ( 'form#' + fav ) . ajaxForm ( favoptions ) . each ( addAjaxHidden ) ;
}
} ;
2008-09-18 04:20:48 +01:00
2009-01-21 16:47:23 +00:00
var joinoptions = { dataType : 'xml' ,
success : function ( xml ) { var new _form = document . _importNode ( $ ( 'form' , xml ) . get ( 0 ) , true ) ;
var leave = new _form . id ;
var join = leave . replace ( 'leave' , 'join' ) ;
$ ( 'form#' + join ) . replaceWith ( new _form ) ;
$ ( 'form#' + leave ) . ajaxForm ( leaveoptions ) . each ( addAjaxHidden ) ;
}
} ;
var leaveoptions = { dataType : 'xml' ,
success : function ( xml ) { var new _form = document . _importNode ( $ ( 'form' , xml ) . get ( 0 ) , true ) ;
var join = new _form . id ;
var leave = join . replace ( 'join' , 'leave' ) ;
$ ( 'form#' + leave ) . replaceWith ( new _form ) ;
$ ( 'form#' + join ) . ajaxForm ( joinoptions ) . each ( addAjaxHidden ) ;
}
} ;
2008-11-15 03:35:49 +00:00
function addAjaxHidden ( ) {
var ajax = document . createElement ( 'input' ) ;
ajax . setAttribute ( 'type' , 'hidden' ) ;
ajax . setAttribute ( 'name' , 'ajax' ) ;
ajax . setAttribute ( 'value' , 1 ) ;
this . appendChild ( ajax ) ;
}
2008-09-18 04:20:48 +01:00
2009-01-18 03:12:39 +00:00
$ ( "form.form_favor" ) . ajaxForm ( favoptions ) ;
$ ( "form.form_disfavor" ) . ajaxForm ( disoptions ) ;
2009-01-21 16:47:23 +00:00
$ ( "form.form_group_join" ) . ajaxForm ( joinoptions ) ;
$ ( "form.form_group_leave" ) . ajaxForm ( leaveoptions ) ;
2009-01-18 03:12:39 +00:00
$ ( "form.form_favor" ) . each ( addAjaxHidden ) ;
$ ( "form.form_disfavor" ) . each ( addAjaxHidden ) ;
2009-01-21 16:47:23 +00:00
$ ( "form.form_group_join" ) . each ( addAjaxHidden ) ;
$ ( "form.form_group_leave" ) . each ( addAjaxHidden ) ;
2008-11-16 02:27:35 +00:00
2009-01-22 06:33:38 +00:00
$ ( "#form_user_nudge" ) . ajaxForm ( { dataType : 'xml' ,
beforeSubmit : function ( xml ) { $ ( "#form_user_nudge input[type=submit]" ) . attr ( "disabled" , "disabled" ) ;
$ ( "#form_user_nudge input[type=submit]" ) . addClass ( "disabled" ) ;
} ,
success : function ( xml ) { $ ( "#form_user_nudge" ) . replaceWith ( document . _importNode ( $ ( "#nudge_response" , xml ) . get ( 0 ) , true ) ) ;
$ ( "#form_user_nudge input[type=submit]" ) . removeAttr ( "disabled" ) ;
$ ( "#form_user_nudge input[type=submit]" ) . removeClass ( "disabled" ) ;
}
} ) ;
$ ( "#form_user_nudge" ) . each ( addAjaxHidden ) ;
2008-11-20 23:26:55 +00:00
var Subscribe = { dataType : 'xml' ,
2009-01-21 04:08:05 +00:00
beforeSubmit : function ( formData , jqForm , options ) { $ ( ".form_user_subscribe input[type=submit]" ) . attr ( "disabled" , "disabled" ) ;
$ ( ".form_user_subscribe input[type=submit]" ) . addClass ( "disabled" ) ;
2008-12-08 05:12:12 +00:00
} ,
2008-11-20 23:26:55 +00:00
success : function ( xml ) { var form _unsubscribe = document . _importNode ( $ ( 'form' , xml ) . get ( 0 ) , true ) ;
var form _unsubscribe _id = form _unsubscribe . id ;
var form _subscribe _id = form _unsubscribe _id . replace ( 'unsubscribe' , 'subscribe' ) ;
$ ( "form#" + form _subscribe _id ) . replaceWith ( form _unsubscribe ) ;
$ ( "form#" + form _unsubscribe _id ) . ajaxForm ( UnSubscribe ) . each ( addAjaxHidden ) ;
2008-11-26 18:23:17 +00:00
$ ( "dd.subscribers" ) . text ( parseInt ( $ ( "dd.subscribers" ) . text ( ) ) + 1 ) ;
2009-01-21 04:08:05 +00:00
$ ( ".form_user_subscribe input[type=submit]" ) . removeAttr ( "disabled" ) ;
$ ( ".form_user_subscribe input[type=submit]" ) . removeClass ( "disabled" ) ;
2008-11-20 23:26:55 +00:00
}
} ;
var UnSubscribe = { dataType : 'xml' ,
2009-01-21 04:08:05 +00:00
beforeSubmit : function ( formData , jqForm , options ) { $ ( ".form_user_unsubscribe input[type=submit]" ) . attr ( "disabled" , "disabled" ) ;
$ ( ".form_user_unsubscribe input[type=submit]" ) . addClass ( "disabled" ) ;
2008-12-08 05:12:12 +00:00
} ,
2008-11-20 23:26:55 +00:00
success : function ( xml ) { var form _subscribe = document . _importNode ( $ ( 'form' , xml ) . get ( 0 ) , true ) ;
var form _subscribe _id = form _subscribe . id ;
var form _unsubscribe _id = form _subscribe _id . replace ( 'subscribe' , 'unsubscribe' ) ;
$ ( "form#" + form _unsubscribe _id ) . replaceWith ( form _subscribe ) ;
$ ( "form#" + form _subscribe _id ) . ajaxForm ( Subscribe ) . each ( addAjaxHidden ) ;
$ ( "#profile_send_a_new_message" ) . remove ( ) ;
$ ( "#profile_nudge" ) . remove ( ) ;
2008-11-26 18:23:17 +00:00
$ ( "dd.subscribers" ) . text ( parseInt ( $ ( "dd.subscribers" ) . text ( ) ) - 1 ) ;
2009-01-21 04:08:05 +00:00
$ ( ".form_user_unsubscribe input[type=submit]" ) . removeAttr ( "disabled" ) ;
$ ( ".form_user_unsubscribe input[type=submit]" ) . removeClass ( "disabled" ) ;
2008-11-20 23:26:55 +00:00
}
} ;
2009-01-21 04:08:05 +00:00
$ ( ".form_user_subscribe" ) . ajaxForm ( Subscribe ) ;
$ ( ".form_user_unsubscribe" ) . ajaxForm ( UnSubscribe ) ;
$ ( ".form_user_subscribe" ) . each ( addAjaxHidden ) ;
$ ( ".form_user_unsubscribe" ) . each ( addAjaxHidden ) ;
2008-11-23 01:55:59 +00:00
var PostNotice = { dataType : 'xml' ,
2009-01-16 17:02:46 +00:00
beforeSubmit : function ( formData , jqForm , options ) { if ( $ ( "#notice_data-text" ) . get ( 0 ) . value . length == 0 ) {
$ ( "#form_notice" ) . addClass ( "warning" ) ;
2008-11-23 01:55:59 +00:00
return false ;
}
2009-03-25 22:53:21 +00:00
$ ( "#form_notice" ) . addClass ( "processing" ) ;
2009-01-16 17:02:46 +00:00
$ ( "#notice_action-submit" ) . attr ( "disabled" , "disabled" ) ;
$ ( "#notice_action-submit" ) . addClass ( "disabled" ) ;
2008-11-23 01:55:59 +00:00
return true ;
} ,
2009-05-01 18:00:36 +01:00
timeout : '60000' ,
2009-04-23 22:35:21 +01:00
error : function ( xhr , textStatus , errorThrown ) { $ ( "#form_notice" ) . removeClass ( "processing" ) ;
$ ( "#notice_action-submit" ) . removeAttr ( "disabled" ) ;
$ ( "#notice_action-submit" ) . removeClass ( "disabled" ) ;
2009-05-01 18:00:36 +01:00
if ( textStatus == "timeout" ) {
alert ( "Sorry! We had trouble sending your notice. The servers are overloaded. Please try again, and contact the site administrator if this problem persists" ) ;
2009-04-23 22:35:21 +01:00
}
else {
2009-05-01 18:00:36 +01:00
if ( $ ( ".error" , xhr . responseXML ) . length > 0 ) {
$ ( '#form_notice' ) . append ( document . _importNode ( $ ( ".error" , xhr . responseXML ) . get ( 0 ) , true ) ) ;
}
else {
alert ( "Sorry! We had trouble sending your notice (" + xhr . status + " " + xhr . statusText + "). Please report the problem to the site administrator if this happens again." ) ;
}
2009-04-23 22:35:21 +01:00
}
} ,
2009-04-16 22:57:42 +01:00
success : function ( xml ) { if ( $ ( "#error" , xml ) . length > 0 ) {
2008-12-16 07:18:18 +00:00
var result = document . _importNode ( $ ( "p" , xml ) . get ( 0 ) , true ) ;
result = result . textContent || result . innerHTML ;
alert ( result ) ;
2008-12-11 22:58:08 +00:00
}
2008-11-23 01:55:59 +00:00
else {
2009-04-16 22:57:42 +01:00
if ( $ ( "#command_result" , xml ) . length > 0 ) {
var result = document . _importNode ( $ ( "p" , xml ) . get ( 0 ) , true ) ;
result = result . textContent || result . innerHTML ;
alert ( result ) ;
}
else {
2009-04-27 02:16:09 +01:00
li = $ ( "li" , xml ) . get ( 0 ) ;
if ( $ ( "#" + li . id ) . length == 0 ) {
$ ( "#notices_primary .notices" ) . prepend ( document . _importNode ( li , true ) ) ;
$ ( "#notices_primary .notice:first" ) . css ( { display : "none" } ) ;
$ ( "#notices_primary .notice:first" ) . fadeIn ( 2500 ) ;
NoticeReply ( ) ;
}
2009-04-16 22:57:42 +01:00
}
2009-01-16 17:02:46 +00:00
$ ( "#notice_data-text" ) . val ( "" ) ;
2009-04-17 21:14:06 +01:00
counter ( ) ;
2008-11-23 01:55:59 +00:00
}
2009-03-25 22:53:21 +00:00
$ ( "#form_notice" ) . removeClass ( "processing" ) ;
2009-01-16 17:02:46 +00:00
$ ( "#notice_action-submit" ) . removeAttr ( "disabled" ) ;
$ ( "#notice_action-submit" ) . removeClass ( "disabled" ) ;
2008-11-23 01:55:59 +00:00
}
2008-12-16 07:18:18 +00:00
} ;
2009-04-23 03:22:00 +01:00
$ ( "#form_notice" ) . ajaxForm ( PostNotice ) ;
$ ( "#form_notice" ) . each ( addAjaxHidden ) ;
2009-01-23 02:43:18 +00:00
NoticeHover ( ) ;
2009-01-23 02:49:48 +00:00
NoticeReply ( ) ;
2009-05-27 20:43:43 +01:00
NoticeAttachments ( ) ;
2009-01-23 02:43:18 +00:00
} ) ;
2009-05-24 02:38:11 +01:00
2009-01-23 02:43:18 +00:00
function NoticeHover ( ) {
2009-05-24 02:38:11 +01:00
function mouseHandler ( e ) {
$ ( e . target ) . closest ( 'li.hentry' ) [ ( e . type === 'mouseover' ) ? 'addClass' : 'removeClass' ] ( 'hover' ) ;
} ;
$ ( '#content .notices' ) . mouseover ( mouseHandler ) ;
$ ( '#content .notices' ) . mouseout ( mouseHandler ) ;
2009-01-23 02:43:18 +00:00
}
2008-06-24 18:46:13 +01:00
2009-05-24 02:38:11 +01:00
2009-01-23 02:49:48 +00:00
function NoticeReply ( ) {
2009-01-28 15:25:50 +00:00
if ( $ ( '#notice_data-text' ) . length > 0 ) {
$ ( '#content .notice' ) . each ( function ( ) {
2009-05-22 17:19:14 +01:00
var notice = $ ( this ) [ 0 ] ;
$ ( $ ( '.notice_reply' , notice ) [ 0 ] ) . click ( function ( ) {
var nickname = ( $ ( '.author .nickname' , notice ) . length > 0 ) ? $ ( $ ( '.author .nickname' , notice ) [ 0 ] ) : $ ( '.author .nickname' ) ;
NoticeReplySet ( nickname . text ( ) , $ ( $ ( '.notice_id' , notice ) [ 0 ] ) . text ( ) ) ;
2009-01-28 15:25:50 +00:00
return false ;
} ) ;
2009-01-23 02:49:48 +00:00
} ) ;
2009-01-28 15:25:50 +00:00
}
2009-01-23 02:49:48 +00:00
}
function NoticeReplySet ( nick , id ) {
2008-11-15 03:35:49 +00:00
rgx _username = /^[0-9a-zA-Z\-_.]*$/ ;
if ( nick . match ( rgx _username ) ) {
replyto = "@" + nick + " " ;
2009-01-16 17:02:46 +00:00
if ( $ ( "#notice_data-text" ) . length ) {
$ ( "#notice_data-text" ) . val ( replyto ) ;
2009-01-17 03:03:53 +00:00
$ ( "#form_notice input#notice_in-reply-to" ) . val ( id ) ;
2009-01-16 17:02:46 +00:00
$ ( "#notice_data-text" ) . focus ( ) ;
2008-11-15 03:35:49 +00:00
return false ;
}
}
return true ;
2008-11-17 17:31:44 +00:00
}
2009-05-27 20:43:43 +01:00
function NoticeAttachments ( ) {
$ . fn . jOverlay . options = {
method : 'GET' ,
data : '' ,
url : '' ,
color : '#000' ,
opacity : '0.6' ,
zIndex : 9999 ,
center : true ,
imgLoading : $ ( 'address .url' ) [ 0 ] . href + 'theme/base/images/illustrations/illu_progress_loading-01.gif' ,
bgClickToClose : true ,
success : function ( ) {
$ ( '#jOverlayContent' ) . append ( '<button>×</button>' ) ;
$ ( '#jOverlayContent button' ) . click ( $ . closeOverlay ) ;
} ,
timeout : 0
} ;
$ ( 'a.attachment' ) . click ( function ( ) {
$ ( ) . jOverlay ( { url : $ ( 'address .url' ) [ 0 ] . href + '/attachment/' + ( $ ( this ) . attr ( 'id' ) . substring ( 'attachment' . length + 1 ) ) + '/ajax' } ) ;
return false ;
} ) ;
$ ( "body:not(#shownotice) a.thumbnail" ) . hover (
function ( ) {
var anchor = $ ( this ) ;
$ ( "a.thumbnail" ) . children ( 'img' ) . remove ( ) ;
anchor . closest ( ".entry-title" ) . addClass ( 'ov' ) ;
setTimeout ( function ( ) {
$ . get ( $ ( 'address .url' ) [ 0 ] . href + '/attachment/' + ( anchor . attr ( 'id' ) . substring ( 'attachment' . length + 1 ) ) + '/thumbnail' , null , function ( data ) {
anchor . append ( data ) ;
} ) ;
} , 500 ) ;
setTimeout ( function ( ) {
anchor . children ( 'img' ) . remove ( ) ;
anchor . closest ( ".entry-title" ) . removeClass ( 'ov' ) ;
} , 3000 ) ;
} ,
function ( ) {
$ ( "a.thumbnail" ) . children ( 'img' ) . remove ( ) ;
$ ( this ) . closest ( ".entry-title" ) . removeClass ( 'ov' ) ;
}
) ;
}