2008-08-27 10:38:35 +09: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-25 02:46:13 +09:00
$ ( document ) . ready ( function ( ) {
2008-11-15 12:35:49 +09:00
// count character on keyup
function counter ( event ) {
var maxLength = 140 ;
2009-01-17 02:02:46 +09:00
var currentLength = $ ( "#notice_data-text" ) . val ( ) . length ;
2008-11-15 12:35:49 +09:00
var remaining = maxLength - currentLength ;
2009-01-17 03:14:20 +09:00
var counter = $ ( "#notice_text-count" ) ;
2008-11-15 12:35:49 +09:00
counter . text ( remaining ) ;
2009-01-22 01:47:23 +09:00
2008-11-15 12:35:49 +09:00
if ( remaining <= 0 ) {
2009-01-17 03:14:20 +09:00
$ ( "#form_notice" ) . addClass ( "warning" ) ;
2008-11-15 12:35:49 +09:00
} else {
2009-01-17 03:14:20 +09:00
$ ( "#form_notice" ) . removeClass ( "warning" ) ;
2008-11-15 12:35:49 +09:00
}
}
2008-06-25 02:46:13 +09:00
2008-11-15 12:35:49 +09:00
function submitonreturn ( event ) {
if ( event . keyCode == 13 ) {
2009-01-17 02:02:46 +09:00
$ ( "#form_notice" ) . submit ( ) ;
2008-11-15 12:35:49 +09:00
event . preventDefault ( ) ;
event . stopPropagation ( ) ;
return false ;
}
return true ;
}
2008-09-19 00:04:38 +09:00
2009-01-17 02:02:46 +09:00
if ( $ ( "#notice_data-text" ) . length ) {
$ ( "#notice_data-text" ) . bind ( "keyup" , counter ) ;
$ ( "#notice_data-text" ) . bind ( "keydown" , submitonreturn ) ;
2009-01-22 01:47:23 +09:00
2008-11-15 12:35:49 +09:00
// run once in case there's something in there
counter ( ) ;
2009-01-22 01:47:23 +09:00
2008-11-15 12:35:49 +09:00
// set the focus
2009-01-17 02:02:46 +09:00
$ ( "#notice_data-text" ) . focus ( ) ;
2008-11-15 12:35:49 +09:00
}
2008-09-19 00:04:38 +09:00
2008-11-15 12:35:49 +09:00
// XXX: refactor this code
2008-09-19 00:04:38 +09:00
2008-11-15 12:35:49 +09:00
var favoptions = { dataType : 'xml' ,
2008-11-24 06:34:58 +09:00
success : function ( xml ) { var new _form = document . _importNode ( $ ( 'form' , xml ) . get ( 0 ) , true ) ;
2008-11-15 12:35:49 +09: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-19 00:04:38 +09:00
2008-11-15 12:35:49 +09: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 12:20:48 +09:00
2009-01-22 01:47:23 +09: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 12:35:49 +09: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 12:20:48 +09:00
2009-01-18 12:12:39 +09:00
$ ( "form.form_favor" ) . ajaxForm ( favoptions ) ;
$ ( "form.form_disfavor" ) . ajaxForm ( disoptions ) ;
2009-01-22 01:47:23 +09:00
$ ( "form.form_group_join" ) . ajaxForm ( joinoptions ) ;
$ ( "form.form_group_leave" ) . ajaxForm ( leaveoptions ) ;
2009-01-18 12:12:39 +09:00
$ ( "form.form_favor" ) . each ( addAjaxHidden ) ;
$ ( "form.form_disfavor" ) . each ( addAjaxHidden ) ;
2009-01-22 01:47:23 +09:00
$ ( "form.form_group_join" ) . each ( addAjaxHidden ) ;
$ ( "form.form_group_leave" ) . each ( addAjaxHidden ) ;
2008-11-16 11:27:35 +09:00
2009-01-22 15:33:38 +09: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-21 08:26:55 +09:00
var Subscribe = { dataType : 'xml' ,
2009-01-21 13:08:05 +09: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 14:12:12 +09:00
} ,
2008-11-21 08:26:55 +09: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-27 03:23:17 +09:00
$ ( "dd.subscribers" ) . text ( parseInt ( $ ( "dd.subscribers" ) . text ( ) ) + 1 ) ;
2009-01-21 13:08:05 +09:00
$ ( ".form_user_subscribe input[type=submit]" ) . removeAttr ( "disabled" ) ;
$ ( ".form_user_subscribe input[type=submit]" ) . removeClass ( "disabled" ) ;
2008-11-21 08:26:55 +09:00
}
} ;
var UnSubscribe = { dataType : 'xml' ,
2009-01-21 13:08:05 +09: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 14:12:12 +09:00
} ,
2008-11-21 08:26:55 +09: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-27 03:23:17 +09:00
$ ( "dd.subscribers" ) . text ( parseInt ( $ ( "dd.subscribers" ) . text ( ) ) - 1 ) ;
2009-01-21 13:08:05 +09:00
$ ( ".form_user_unsubscribe input[type=submit]" ) . removeAttr ( "disabled" ) ;
$ ( ".form_user_unsubscribe input[type=submit]" ) . removeClass ( "disabled" ) ;
2008-11-21 08:26:55 +09:00
}
} ;
2009-01-21 13:08:05 +09:00
$ ( ".form_user_subscribe" ) . ajaxForm ( Subscribe ) ;
$ ( ".form_user_unsubscribe" ) . ajaxForm ( UnSubscribe ) ;
$ ( ".form_user_subscribe" ) . each ( addAjaxHidden ) ;
$ ( ".form_user_unsubscribe" ) . each ( addAjaxHidden ) ;
2008-11-23 10:55:59 +09:00
var PostNotice = { dataType : 'xml' ,
2009-01-17 02:02:46 +09:00
beforeSubmit : function ( formData , jqForm , options ) { if ( $ ( "#notice_data-text" ) . get ( 0 ) . value . length == 0 ) {
$ ( "#form_notice" ) . addClass ( "warning" ) ;
2008-11-23 10:55:59 +09:00
return false ;
}
2009-03-26 07:53:21 +09:00
$ ( "#form_notice" ) . addClass ( "processing" ) ;
2009-01-17 02:02:46 +09:00
$ ( "#notice_action-submit" ) . attr ( "disabled" , "disabled" ) ;
$ ( "#notice_action-submit" ) . addClass ( "disabled" ) ;
2008-11-23 10:55:59 +09:00
return true ;
} ,
2009-04-24 06:35:21 +09:00
error : function ( xhr , textStatus , errorThrown ) { $ ( "#form_notice" ) . removeClass ( "processing" ) ;
$ ( "#notice_action-submit" ) . removeAttr ( "disabled" ) ;
$ ( "#notice_action-submit" ) . removeClass ( "disabled" ) ;
2009-04-25 02:22:43 +09:00
if ( $ ( ".error" , xhr . responseXML ) . length > 0 ) {
$ ( '#form_notice' ) . append ( document . _importNode ( $ ( ".error" , xhr . responseXML ) . get ( 0 ) , true ) ) ;
2009-04-24 06:35:21 +09:00
}
else {
2009-04-25 02:22:43 +09:00
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-24 06:35:21 +09:00
}
} ,
2009-04-17 06:57:42 +09:00
success : function ( xml ) { if ( $ ( "#error" , xml ) . length > 0 ) {
2008-12-16 16:18:18 +09:00
var result = document . _importNode ( $ ( "p" , xml ) . get ( 0 ) , true ) ;
result = result . textContent || result . innerHTML ;
alert ( result ) ;
2008-12-12 07:58:08 +09:00
}
2008-11-23 10:55:59 +09:00
else {
2009-04-17 06:57:42 +09: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 10:16:09 +09:00
li = $ ( "li" , xml ) . get ( 0 ) ;
id = li . id ;
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 ) ;
NoticeHover ( ) ;
NoticeReply ( ) ;
}
2009-04-17 06:57:42 +09:00
}
2009-01-17 02:02:46 +09:00
$ ( "#notice_data-text" ) . val ( "" ) ;
2009-04-18 05:14:06 +09:00
counter ( ) ;
2008-11-23 10:55:59 +09:00
}
2009-03-26 07:53:21 +09:00
$ ( "#form_notice" ) . removeClass ( "processing" ) ;
2009-01-17 02:02:46 +09:00
$ ( "#notice_action-submit" ) . removeAttr ( "disabled" ) ;
$ ( "#notice_action-submit" ) . removeClass ( "disabled" ) ;
2008-11-23 10:55:59 +09:00
}
2008-12-16 16:18:18 +09:00
} ;
2009-04-23 11:22:00 +09:00
$ ( "#form_notice" ) . ajaxForm ( PostNotice ) ;
$ ( "#form_notice" ) . each ( addAjaxHidden ) ;
2009-01-23 11:43:18 +09:00
NoticeHover ( ) ;
2009-01-23 11:49:48 +09:00
NoticeReply ( ) ;
2009-01-23 11:43:18 +09:00
} ) ;
function NoticeHover ( ) {
2009-01-23 06:03:59 +09:00
$ ( "#content .notice" ) . hover (
2009-01-17 02:02:46 +09:00
function ( ) {
$ ( this ) . addClass ( 'hover' ) ;
2009-01-22 01:47:23 +09:00
} ,
2009-01-17 02:02:46 +09:00
function ( ) {
$ ( this ) . removeClass ( 'hover' ) ;
}
) ;
2009-01-23 11:43:18 +09:00
}
2008-06-25 02:46:13 +09:00
2009-01-23 11:49:48 +09:00
function NoticeReply ( ) {
2009-01-29 00:25:50 +09:00
if ( $ ( '#notice_data-text' ) . length > 0 ) {
$ ( '#content .notice' ) . each ( function ( ) {
var notice = $ ( this ) ;
$ ( '.notice_reply' , $ ( this ) ) . click ( function ( ) {
var nickname = ( $ ( '.author .nickname' , notice ) . length > 0 ) ? $ ( '.author .nickname' , notice ) : $ ( '.author .nickname' ) ;
NoticeReplySet ( nickname . text ( ) , $ ( '.notice_id' , notice ) . text ( ) ) ;
return false ;
} ) ;
2009-01-23 11:49:48 +09:00
} ) ;
2009-01-29 00:25:50 +09:00
}
2009-01-23 11:49:48 +09:00
}
function NoticeReplySet ( nick , id ) {
2008-11-15 12:35:49 +09:00
rgx _username = /^[0-9a-zA-Z\-_.]*$/ ;
if ( nick . match ( rgx _username ) ) {
replyto = "@" + nick + " " ;
2009-01-17 02:02:46 +09:00
if ( $ ( "#notice_data-text" ) . length ) {
$ ( "#notice_data-text" ) . val ( replyto ) ;
2009-01-17 12:03:53 +09:00
$ ( "#form_notice input#notice_in-reply-to" ) . val ( id ) ;
2009-01-17 02:02:46 +09:00
$ ( "#notice_data-text" ) . focus ( ) ;
2008-11-15 12:35:49 +09:00
return false ;
}
}
return true ;
2008-11-18 02:31:44 +09:00
}