2008-08-27 10:38:35 +09:00
/ *
2009-08-26 07:40:12 +09:00
* StatusNet - a distributed open - source microblogging tool
* Copyright ( C ) 2008 , StatusNet , Inc .
2008-08-27 10:38:35 +09:00
*
* 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/>.
2009-10-30 23:49:47 +09:00
*
* @ category UI interaction
* @ package StatusNet
* @ author Sarven Capadisli < csarven @ status . net >
* @ author Evan Prodromou < evan @ status . net >
* @ copyright 2009 StatusNet , Inc .
* @ license http : //www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @ link http : //status.net/
2008-08-27 10:38:35 +09:00
* /
2009-10-30 20:40:08 +09:00
var SN = { // StatusNet
C : { // Config
2009-10-30 23:59:17 +09:00
I : { // Init
2009-10-30 23:43:41 +09:00
CounterBlackout : false ,
MaxLength : 140 ,
2009-10-30 21:15:11 +09:00
PatternUsername : /^[0-9a-zA-Z\-_.]*$/ ,
HTTP20x30x : [ 200 , 201 , 202 , 203 , 204 , 205 , 206 , 300 , 301 , 302 , 303 , 304 , 305 , 306 , 307 ]
} ,
2009-10-31 00:21:03 +09:00
2009-10-30 20:40:08 +09:00
S : { // Selector
Disabled : 'disabled' ,
Warning : 'warning' ,
Error : 'error' ,
2009-10-30 22:16:38 +09:00
Success : 'success' ,
2009-10-30 21:15:11 +09:00
Processing : 'processing' ,
2009-11-01 02:01:19 +09:00
CommandResult : 'command_result' ,
2009-10-30 21:15:11 +09:00
FormNotice : 'form_notice' ,
NoticeDataText : 'notice_data-text' ,
NoticeTextCount : 'notice_text-count' ,
NoticeInReplyTo : 'notice_in-reply-to' ,
NoticeDataAttach : 'notice_data-attach' ,
2009-10-30 22:16:38 +09:00
NoticeDataAttachSelected : 'notice_data-attach_selected' ,
2009-11-20 05:17:18 +09:00
NoticeActionSubmit : 'notice_action-submit' ,
NoticeLat : 'notice_data-lat' ,
NoticeLon : 'notice_data-lon' ,
NoticeLocationId : 'notice_data-location_id' ,
2009-12-30 06:17:17 +09:00
NoticeLocationNs : 'notice_data-location_ns' ,
2010-01-08 22:58:23 +09:00
NoticeGeoName : 'notice_data-geo_name' ,
2010-01-03 09:33:41 +09:00
NoticeDataGeo : 'notice_data-geo' ,
2010-01-09 01:43:03 +09:00
NoticeDataGeoCookie : 'notice_data-geo_cookie' ,
2010-01-03 09:33:41 +09:00
NoticeDataGeoSelected : 'notice_data-geo_selected'
2009-10-30 20:40:08 +09:00
}
} ,
U : { // Utils
2009-11-01 02:55:13 +09:00
FormNoticeEnhancements : function ( form ) {
form _id = form . attr ( 'id' ) ;
2009-12-10 22:16:07 +09:00
if ( jQuery . data ( form [ 0 ] , 'ElementData' ) === undefined ) {
MaxLength = $ ( '#' + form _id + ' #' + SN . C . S . NoticeTextCount ) . text ( ) ;
if ( typeof ( MaxLength ) == 'undefined' ) {
MaxLength = SN . C . I . MaxLength ;
}
jQuery . data ( form [ 0 ] , 'ElementData' , { MaxLength : MaxLength } ) ;
SN . U . Counter ( form ) ;
NDT = $ ( '#' + form _id + ' #' + SN . C . S . NoticeDataText ) ;
NDT . bind ( 'keyup' , function ( e ) {
2009-11-01 02:55:13 +09:00
SN . U . Counter ( form ) ;
} ) ;
2009-12-10 22:16:07 +09:00
NDT . bind ( 'keydown' , function ( e ) {
SN . U . SubmitOnReturn ( e , form ) ;
} ) ;
}
2009-12-10 22:52:05 +09:00
else {
$ ( '#' + form _id + ' #' + SN . C . S . NoticeTextCount ) . text ( jQuery . data ( form [ 0 ] , 'ElementData' ) . MaxLength ) ;
}
2009-11-01 02:55:13 +09:00
2009-12-10 22:16:07 +09:00
if ( $ ( 'body' ) [ 0 ] . id != 'conversation' ) {
2009-11-01 02:55:13 +09:00
$ ( '#' + form _id + ' textarea' ) . focus ( ) ;
}
} ,
2009-10-30 22:31:57 +09:00
SubmitOnReturn : function ( event , el ) {
if ( event . keyCode == 13 || event . keyCode == 10 ) {
el . submit ( ) ;
event . preventDefault ( ) ;
event . stopPropagation ( ) ;
2009-11-03 01:55:47 +09:00
$ ( '#' + el [ 0 ] . id + ' #' + SN . C . S . NoticeDataText ) . blur ( ) ;
$ ( 'body' ) . focus ( ) ;
2009-10-30 22:31:57 +09:00
return false ;
}
return true ;
} ,
2009-11-01 02:55:13 +09:00
Counter : function ( form ) {
SN . C . I . FormNoticeCurrent = form ;
form _id = form . attr ( 'id' ) ;
2009-10-30 23:43:41 +09:00
2009-12-10 22:16:07 +09:00
var MaxLength = jQuery . data ( form [ 0 ] , 'ElementData' ) . MaxLength ;
if ( MaxLength <= 0 ) {
2009-10-30 23:43:41 +09:00
return ;
}
2009-12-10 22:16:07 +09:00
var remaining = MaxLength - $ ( '#' + form _id + ' #' + SN . C . S . NoticeDataText ) . val ( ) . length ;
2009-11-01 02:55:13 +09:00
var counter = $ ( '#' + form _id + ' #' + SN . C . S . NoticeTextCount ) ;
2009-10-30 23:43:41 +09:00
if ( remaining . toString ( ) != counter . text ( ) ) {
2009-11-03 02:06:52 +09:00
if ( ! SN . C . I . CounterBlackout || remaining === 0 ) {
2009-10-30 23:43:41 +09:00
if ( counter . text ( ) != String ( remaining ) ) {
counter . text ( remaining ) ;
}
if ( remaining < 0 ) {
2009-11-01 02:55:13 +09:00
form . addClass ( SN . C . S . Warning ) ;
2009-10-30 23:43:41 +09:00
} else {
2009-11-01 02:55:13 +09:00
form . removeClass ( SN . C . S . Warning ) ;
2009-10-30 23:43:41 +09:00
}
// Skip updates for the next 500ms.
// On slower hardware, updating on every keypress is unpleasant.
if ( ! SN . C . I . CounterBlackout ) {
SN . C . I . CounterBlackout = true ;
2009-11-01 02:55:13 +09:00
SN . C . I . FormNoticeCurrent = form ;
window . setTimeout ( "SN.U.ClearCounterBlackout(SN.C.I.FormNoticeCurrent);" , 500 ) ;
2009-10-30 23:43:41 +09:00
}
}
}
} ,
2009-11-01 02:55:13 +09:00
ClearCounterBlackout : function ( form ) {
2009-10-30 23:43:41 +09:00
// Allow keyup events to poke the counter again
SN . C . I . CounterBlackout = false ;
// Check if the string changed since we last looked
2009-11-01 02:55:13 +09:00
SN . U . Counter ( form ) ;
2009-10-30 23:43:41 +09:00
} ,
2010-02-01 07:37:22 +09:00
FormXHR : function ( form ) {
$ . ajax ( {
type : 'POST' ,
dataType : 'xml' ,
url : form . attr ( 'action' ) ,
data : form . serialize ( ) + '&ajax=1' ,
beforeSend : function ( xhr ) {
form
. addClass ( SN . C . S . Processing )
. find ( '.submit' )
. addClass ( SN . C . S . Disabled )
. attr ( SN . C . S . Disabled , SN . C . S . Disabled ) ;
} ,
error : function ( xhr , textStatus , errorThrown ) {
alert ( errorThrown || textStatus ) ;
} ,
success : function ( data , textStatus ) {
if ( typeof ( $ ( 'form' , data ) [ 0 ] ) != 'undefined' ) {
form _new = document . _importNode ( $ ( 'form' , data ) [ 0 ] , true ) ;
form . replaceWith ( form _new ) ;
}
else {
form . replaceWith ( document . _importNode ( $ ( 'p' , data ) [ 0 ] , true ) ) ;
}
}
} ) ;
2009-10-30 21:15:11 +09:00
} ,
2009-11-01 02:01:19 +09:00
FormNoticeXHR : function ( form ) {
2010-01-30 23:28:31 +09:00
SN . C . I . NoticeDataGeo = { } ;
2009-11-01 02:01:19 +09:00
form _id = form . attr ( 'id' ) ;
form . append ( '<input type="hidden" name="ajax" value="1"/>' ) ;
form . ajaxForm ( {
2009-10-31 00:21:03 +09:00
dataType : 'xml' ,
2009-10-31 06:11:56 +09:00
timeout : '60000' ,
2010-01-05 10:15:08 +09:00
beforeSend : function ( formData ) {
2010-01-30 23:03:01 +09:00
if ( form . find ( '#' + SN . C . S . NoticeDataText ) [ 0 ] . value . length === 0 ) {
2009-11-01 02:01:19 +09:00
form . addClass ( SN . C . S . Warning ) ;
2009-10-30 21:15:11 +09:00
return false ;
}
2010-01-30 23:19:13 +09:00
form
. addClass ( SN . C . S . Processing )
. find ( '#' + SN . C . S . NoticeActionSubmit )
. addClass ( SN . C . S . Disabled )
. attr ( SN . C . S . Disabled , SN . C . S . Disabled ) ;
2010-01-05 10:15:08 +09:00
2010-01-30 23:28:31 +09:00
SN . C . I . NoticeDataGeo . NLat = $ ( '#' + SN . C . S . NoticeLat ) . val ( ) ;
SN . C . I . NoticeDataGeo . NLon = $ ( '#' + SN . C . S . NoticeLon ) . val ( ) ;
SN . C . I . NoticeDataGeo . NLNS = $ ( '#' + SN . C . S . NoticeLocationNs ) . val ( ) ;
SN . C . I . NoticeDataGeo . NLID = $ ( '#' + SN . C . S . NoticeLocationId ) . val ( ) ;
SN . C . I . NoticeDataGeo . NDG = $ ( '#' + SN . C . S . NoticeDataGeo ) . attr ( 'checked' ) ;
2010-01-09 01:43:03 +09:00
cookieValue = $ . cookie ( SN . C . S . NoticeDataGeoCookie ) ;
if ( cookieValue !== null && cookieValue != 'disabled' ) {
cookieValue = JSON . parse ( cookieValue ) ;
2010-01-30 23:28:31 +09:00
SN . C . I . NoticeDataGeo . NLat = $ ( '#' + SN . C . S . NoticeLat ) . val ( cookieValue . NLat ) . val ( ) ;
SN . C . I . NoticeDataGeo . NLon = $ ( '#' + SN . C . S . NoticeLon ) . val ( cookieValue . NLon ) . val ( ) ;
2010-01-22 09:27:08 +09:00
if ( $ ( '#' + SN . C . S . NoticeLocationNs ) . val ( cookieValue . NLNS ) ) {
2010-01-30 23:28:31 +09:00
SN . C . I . NoticeDataGeo . NLNS = $ ( '#' + SN . C . S . NoticeLocationNs ) . val ( cookieValue . NLNS ) . val ( ) ;
SN . C . I . NoticeDataGeo . NLID = $ ( '#' + SN . C . S . NoticeLocationId ) . val ( cookieValue . NLID ) . val ( ) ;
2010-01-22 09:27:08 +09:00
}
2010-01-09 01:43:03 +09:00
}
if ( cookieValue == 'disabled' ) {
2010-01-30 23:28:31 +09:00
SN . C . I . NoticeDataGeo . NDG = $ ( '#' + SN . C . S . NoticeDataGeo ) . attr ( 'checked' , false ) . attr ( 'checked' ) ;
2010-01-09 01:43:03 +09:00
}
else {
2010-01-30 23:28:31 +09:00
SN . C . I . NoticeDataGeo . NDG = $ ( '#' + SN . C . S . NoticeDataGeo ) . attr ( 'checked' , true ) . attr ( 'checked' ) ;
2010-01-09 01:43:03 +09:00
}
2010-01-05 10:15:08 +09:00
2009-10-30 21:15:11 +09:00
return true ;
} ,
error : function ( xhr , textStatus , errorThrown ) {
2010-01-30 23:19:13 +09:00
form
. removeClass ( SN . C . S . Processing )
. find ( '#' + SN . C . S . NoticeActionSubmit )
. removeClass ( SN . C . S . Disabled )
. removeAttr ( SN . C . S . Disabled , SN . C . S . Disabled ) ;
2010-01-30 23:03:01 +09:00
form . find ( '.form_response' ) . remove ( ) ;
2009-10-30 21:15:11 +09:00
if ( textStatus == 'timeout' ) {
2009-12-07 19:26:29 +09:00
form . append ( '<p class="form_response error">Sorry! We had trouble sending your notice. The servers are overloaded. Please try again, and contact the site administrator if this problem persists.</p>' ) ;
2009-10-30 21:15:11 +09:00
}
else {
if ( $ ( '.' + SN . C . S . Error , xhr . responseXML ) . length > 0 ) {
2009-11-01 02:01:19 +09:00
form . append ( document . _importNode ( $ ( '.' + SN . C . S . Error , xhr . responseXML ) [ 0 ] , true ) ) ;
2009-10-30 21:15:11 +09:00
}
else {
2009-12-07 18:55:12 +09:00
if ( parseInt ( xhr . status ) === 0 || jQuery . inArray ( parseInt ( xhr . status ) , SN . C . I . HTTP20x30x ) >= 0 ) {
2010-01-30 23:19:13 +09:00
form
. resetForm ( )
. find ( '#' + SN . C . S . NoticeDataAttachSelected ) . remove ( ) ;
2010-01-30 23:03:01 +09:00
SN . U . FormNoticeEnhancements ( form ) ;
2009-10-30 21:15:11 +09:00
}
else {
2009-12-07 19:26:29 +09:00
form . append ( '<p class="form_response error">(Sorry! We had trouble sending your notice (' + xhr . status + ' ' + xhr . statusText + '). Please report the problem to the site administrator if this happens again.</p>' ) ;
2009-10-30 21:15:11 +09:00
}
}
}
} ,
success : function ( data , textStatus ) {
2010-01-30 23:03:01 +09:00
form . find ( '.form_response' ) . remove ( ) ;
2009-11-03 02:06:52 +09:00
var result ;
2009-10-30 21:15:11 +09:00
if ( $ ( '#' + SN . C . S . Error , data ) . length > 0 ) {
2009-12-09 07:31:23 +09:00
result = document . _importNode ( $ ( 'p' , data ) [ 0 ] , true ) ;
2009-12-01 00:25:06 +09:00
result = result . textContent || result . innerHTML ;
2009-12-07 19:26:29 +09:00
form . append ( '<p class="form_response error">' + result + '</p>' ) ;
2009-10-30 21:15:11 +09:00
}
else {
if ( $ ( 'body' ) [ 0 ] . id == 'bookmarklet' ) {
self . close ( ) ;
}
2009-11-01 02:01:19 +09:00
2009-12-03 07:25:38 +09:00
if ( $ ( '#' + SN . C . S . CommandResult , data ) . length > 0 ) {
result = document . _importNode ( $ ( 'p' , data ) [ 0 ] , true ) ;
result = result . textContent || result . innerHTML ;
2009-12-07 19:26:29 +09:00
form . append ( '<p class="form_response success">' + result + '</p>' ) ;
2009-12-03 07:25:38 +09:00
}
else {
2009-12-03 07:41:58 +09:00
var notices = $ ( '#notices_primary .notices' ) ;
if ( notices . length > 0 ) {
var notice = document . _importNode ( $ ( 'li' , data ) [ 0 ] , true ) ;
if ( $ ( '#' + notice . id ) . length === 0 ) {
var notice _irt _value = $ ( '#' + SN . C . S . NoticeInReplyTo ) . val ( ) ;
var notice _irt = '#notices_primary #notice-' + notice _irt _value ;
if ( $ ( 'body' ) [ 0 ] . id == 'conversation' ) {
if ( notice _irt _value . length > 0 && $ ( notice _irt + ' .notices' ) . length < 1 ) {
$ ( notice _irt ) . append ( '<ul class="notices"></ul>' ) ;
}
$ ( $ ( notice _irt + ' .notices' ) [ 0 ] ) . append ( notice ) ;
2009-10-30 21:15:11 +09:00
}
2009-12-03 07:41:58 +09:00
else {
notices . prepend ( notice ) ;
}
2010-01-30 23:19:13 +09:00
$ ( '#' + notice . id )
. css ( { display : 'none' } )
. fadeIn ( 2500 ) ;
2009-12-03 07:41:58 +09:00
SN . U . NoticeWithAttachment ( $ ( '#' + notice . id ) ) ;
SN . U . NoticeReplyTo ( $ ( '#' + notice . id ) ) ;
2009-12-03 07:25:38 +09:00
}
2009-12-03 07:41:58 +09:00
}
else {
result = document . _importNode ( $ ( 'title' , data ) [ 0 ] , true ) ;
result _title = result . textContent || result . innerHTML ;
2009-12-07 19:26:29 +09:00
form . append ( '<p class="form_response success">' + result _title + '</p>' ) ;
2009-12-03 07:41:58 +09:00
}
2009-10-30 21:15:11 +09:00
}
2010-01-30 23:03:01 +09:00
form . resetForm ( ) ;
form . find ( '#' + SN . C . S . NoticeInReplyTo ) . val ( '' ) ;
form . find ( '#' + SN . C . S . NoticeDataAttachSelected ) . remove ( ) ;
SN . U . FormNoticeEnhancements ( form ) ;
2009-10-30 21:15:11 +09:00
}
} ,
complete : function ( xhr , textStatus ) {
2010-01-30 23:19:13 +09:00
form
. removeClass ( SN . C . S . Processing )
. find ( '#' + SN . C . S . NoticeActionSubmit )
. removeAttr ( SN . C . S . Disabled )
. removeClass ( SN . C . S . Disabled ) ;
2010-01-05 10:15:08 +09:00
2010-01-30 23:28:31 +09:00
$ ( '#' + SN . C . S . NoticeLat ) . val ( SN . C . I . NoticeDataGeo . NLat ) ;
$ ( '#' + SN . C . S . NoticeLon ) . val ( SN . C . I . NoticeDataGeo . NLon ) ;
2010-01-22 09:27:08 +09:00
if ( $ ( '#' + SN . C . S . NoticeLocationNs ) ) {
2010-01-30 23:28:31 +09:00
$ ( '#' + SN . C . S . NoticeLocationNs ) . val ( SN . C . I . NoticeDataGeo . NLNS ) ;
$ ( '#' + SN . C . S . NoticeLocationId ) . val ( SN . C . I . NoticeDataGeo . NLID ) ;
2010-01-22 09:27:08 +09:00
}
2010-01-30 23:28:31 +09:00
$ ( '#' + SN . C . S . NoticeDataGeo ) . attr ( 'checked' , SN . C . I . NoticeDataGeo . NDG ) ;
2009-10-30 21:15:11 +09:00
}
} ) ;
2009-10-30 21:56:01 +09:00
} ,
NoticeReply : function ( ) {
if ( $ ( '#' + SN . C . S . NoticeDataText ) . length > 0 && $ ( '#content .notice_reply' ) . length > 0 ) {
2009-11-29 00:44:16 +09:00
$ ( '#content .notice' ) . each ( function ( ) { SN . U . NoticeReplyTo ( $ ( this ) ) ; } ) ;
}
} ,
NoticeReplyTo : function ( notice _item ) {
var notice = notice _item [ 0 ] ;
var notice _reply = $ ( '.notice_reply' , notice ) [ 0 ] ;
2009-11-29 00:57:32 +09:00
2009-11-29 00:44:16 +09:00
if ( jQuery . data ( notice _reply , "ElementData" ) === undefined ) {
jQuery . data ( notice _reply , "ElementData" , { Bind : 'submit' } ) ;
$ ( notice _reply ) . bind ( 'click' , function ( ) {
var nickname = ( $ ( '.author .nickname' , notice ) . length > 0 ) ? $ ( $ ( '.author .nickname' , notice ) [ 0 ] ) : $ ( '.author .nickname.uid' ) ;
SN . U . NoticeReplySet ( nickname . text ( ) , $ ( $ ( '.notice_id' , notice ) [ 0 ] ) . text ( ) ) ;
return false ;
2009-10-30 21:56:01 +09:00
} ) ;
}
} ,
2009-10-30 21:56:53 +09:00
NoticeReplySet : function ( nick , id ) {
2009-10-30 21:56:01 +09:00
if ( nick . match ( SN . C . I . PatternUsername ) ) {
var text = $ ( '#' + SN . C . S . NoticeDataText ) ;
2009-11-28 02:11:49 +09:00
if ( text . length > 0 ) {
2009-10-30 21:56:01 +09:00
replyto = '@' + nick + ' ' ;
text . val ( replyto + text . val ( ) . replace ( RegExp ( replyto , 'i' ) , '' ) ) ;
2009-11-28 02:11:49 +09:00
$ ( '#' + SN . C . S . FormNotice + ' #' + SN . C . S . NoticeInReplyTo ) . val ( id ) ;
2009-11-28 02:35:58 +09:00
text [ 0 ] . focus ( ) ;
if ( text [ 0 ] . setSelectionRange ) {
var len = text . val ( ) . length ;
2009-11-02 22:28:14 +09:00
text [ 0 ] . setSelectionRange ( len , len ) ;
2009-10-30 21:56:01 +09:00
}
}
}
2009-10-30 22:02:51 +09:00
} ,
2009-11-14 05:56:55 +09:00
NoticeFavor : function ( ) {
2010-02-01 07:37:22 +09:00
$ ( '.form_favor' ) . live ( 'click' , function ( ) { SN . U . FormXHR ( $ ( this ) ) ; return false ; } ) ;
$ ( '.form_disfavor' ) . live ( 'click' , function ( ) { SN . U . FormXHR ( $ ( this ) ) ; return false ; } ) ;
2009-11-14 05:56:55 +09:00
} ,
2009-12-12 00:12:34 +09:00
NoticeRepeat : function ( ) {
2010-02-01 07:37:22 +09:00
$ ( '.form_repeat' ) . live ( 'click' , function ( ) {
2009-12-24 05:42:37 +09:00
SN . U . FormXHR ( $ ( this ) ) ;
SN . U . NoticeRepeatConfirmation ( $ ( this ) ) ;
2010-02-01 07:37:22 +09:00
return false ;
2009-12-24 05:42:37 +09:00
} ) ;
} ,
NoticeRepeatConfirmation : function ( form ) {
function NRC ( ) {
form . closest ( '.notice-options' ) . addClass ( 'opaque' ) ;
form . addClass ( 'dialogbox' ) ;
form . append ( '<button class="close">×</button>' ) ;
form . find ( 'button.close' ) . click ( function ( ) {
$ ( this ) . remove ( ) ;
form . closest ( '.notice-options' ) . removeClass ( 'opaque' ) ;
form . removeClass ( 'dialogbox' ) ;
form . find ( '.submit_dialogbox' ) . remove ( ) ;
form . find ( '.submit' ) . show ( ) ;
return false ;
} ) ;
} ;
form . find ( '.submit' ) . bind ( 'click' , function ( e ) {
e . preventDefault ( ) ;
var submit = form . find ( '.submit' ) . clone ( ) ;
submit . addClass ( 'submit_dialogbox' ) ;
2009-12-24 05:59:31 +09:00
submit . removeClass ( 'submit' ) ;
2009-12-24 05:42:37 +09:00
form . append ( submit ) ;
$ ( this ) . hide ( ) ;
NRC ( ) ;
} ) ;
2009-12-12 00:10:53 +09:00
} ,
2009-10-30 22:02:51 +09:00
NoticeAttachments : function ( ) {
2009-12-09 07:31:23 +09:00
$ ( '.notice a.attachment' ) . each ( function ( ) {
2009-11-30 04:05:39 +09:00
SN . U . NoticeWithAttachment ( $ ( this ) . closest ( '.notice' ) ) ;
} ) ;
} ,
NoticeWithAttachment : function ( notice ) {
2009-11-30 04:18:17 +09:00
if ( $ ( '.attachment' , notice ) . length === 0 ) {
return ;
}
2009-11-30 04:05:39 +09:00
var notice _id = notice . attr ( 'id' ) ;
2009-10-30 22:02:51 +09:00
$ . fn . jOverlay . options = {
method : 'GET' ,
data : '' ,
url : '' ,
color : '#000' ,
opacity : '0.6' ,
2009-11-27 01:02:19 +09:00
zIndex : 9999 ,
2009-10-30 22:02:51 +09:00
center : false ,
imgLoading : $ ( 'address .url' ) [ 0 ] . href + 'theme/base/images/illustrations/illu_progress_loading-01.gif' ,
bgClickToClose : true ,
success : function ( ) {
2009-11-02 04:53:25 +09:00
$ ( '#jOverlayContent' ) . append ( '<button class="close">×</button>' ) ;
2009-10-30 22:02:51 +09:00
$ ( '#jOverlayContent button' ) . click ( $ . closeOverlay ) ;
} ,
timeout : 0 ,
autoHide : true ,
css : { 'max-width' : '542px' , 'top' : '5%' , 'left' : '32.5%' }
} ;
2009-11-30 04:05:39 +09:00
$ ( '#' + notice _id + ' a.attachment' ) . click ( function ( ) {
2009-10-30 22:02:51 +09:00
$ ( ) . jOverlay ( { url : $ ( 'address .url' ) [ 0 ] . href + 'attachment/' + ( $ ( this ) . attr ( 'id' ) . substring ( 'attachment' . length + 1 ) ) + '/ajax' } ) ;
return false ;
} ) ;
var t ;
2009-11-30 04:05:39 +09:00
$ ( "body:not(#shownotice) #" + notice _id + " a.thumbnail" ) . hover (
2009-10-30 22:02:51 +09:00
function ( ) {
var anchor = $ ( this ) ;
$ ( "a.thumbnail" ) . children ( 'img' ) . hide ( ) ;
anchor . closest ( ".entry-title" ) . addClass ( 'ov' ) ;
2009-11-03 02:06:52 +09:00
if ( anchor . children ( 'img' ) . length === 0 ) {
2009-10-30 22:02:51 +09:00
t = setTimeout ( function ( ) {
$ . get ( $ ( 'address .url' ) [ 0 ] . href + 'attachment/' + ( anchor . attr ( 'id' ) . substring ( 'attachment' . length + 1 ) ) + '/thumbnail' , null , function ( data ) {
anchor . append ( data ) ;
} ) ;
} , 500 ) ;
}
else {
anchor . children ( 'img' ) . show ( ) ;
}
} ,
function ( ) {
clearTimeout ( t ) ;
$ ( "a.thumbnail" ) . children ( 'img' ) . hide ( ) ;
$ ( this ) . closest ( ".entry-title" ) . removeClass ( 'ov' ) ;
}
) ;
2009-10-30 22:16:38 +09:00
} ,
NoticeDataAttach : function ( ) {
NDA = $ ( '#' + SN . C . S . NoticeDataAttach ) ;
NDA . change ( function ( ) {
2009-11-02 04:53:25 +09:00
S = '<div id="' + SN . C . S . NoticeDataAttachSelected + '" class="' + SN . C . S . Success + '"><code>' + $ ( this ) . val ( ) + '</code> <button class="close">×</button></div>' ;
2009-10-30 22:16:38 +09:00
NDAS = $ ( '#' + SN . C . S . NoticeDataAttachSelected ) ;
2009-11-03 02:06:52 +09:00
if ( NDAS . length > 0 ) {
NDAS . replaceWith ( S ) ;
}
else {
$ ( '#' + SN . C . S . FormNotice ) . append ( S ) ;
}
2009-10-30 22:16:38 +09:00
$ ( '#' + SN . C . S . NoticeDataAttachSelected + ' button' ) . click ( function ( ) {
$ ( '#' + SN . C . S . NoticeDataAttachSelected ) . remove ( ) ;
NDA . val ( '' ) ;
2010-01-03 11:00:12 +09:00
return false ;
2009-10-30 22:16:38 +09:00
} ) ;
} ) ;
2009-11-01 00:14:38 +09:00
} ,
2009-11-20 05:17:18 +09:00
NoticeLocationAttach : function ( ) {
2010-01-05 08:36:22 +09:00
var NLat = $ ( '#' + SN . C . S . NoticeLat ) . val ( ) ;
var NLon = $ ( '#' + SN . C . S . NoticeLon ) . val ( ) ;
2010-01-05 10:15:08 +09:00
var NLNS = $ ( '#' + SN . C . S . NoticeLocationNs ) . val ( ) ;
var NLID = $ ( '#' + SN . C . S . NoticeLocationId ) . val ( ) ;
2010-01-08 22:58:23 +09:00
var NLN = $ ( '#' + SN . C . S . NoticeGeoName ) . text ( ) ;
2010-01-08 22:36:52 +09:00
var NDGe = $ ( '#' + SN . C . S . NoticeDataGeo ) ;
2010-01-05 08:36:22 +09:00
2010-01-04 22:44:32 +09:00
function removeNoticeDataGeo ( ) {
2010-01-14 10:48:57 +09:00
$ ( 'label[for=' + SN . C . S . NoticeDataGeo + ']' )
. attr ( 'title' , jQuery . trim ( $ ( 'label[for=' + SN . C . S . NoticeDataGeo + ']' ) . text ( ) ) )
. removeClass ( 'checked' ) ;
2010-01-08 22:36:52 +09:00
2010-01-04 22:44:32 +09:00
$ ( '#' + SN . C . S . NoticeLat ) . val ( '' ) ;
$ ( '#' + SN . C . S . NoticeLon ) . val ( '' ) ;
$ ( '#' + SN . C . S . NoticeLocationNs ) . val ( '' ) ;
$ ( '#' + SN . C . S . NoticeLocationId ) . val ( '' ) ;
2010-01-08 22:36:52 +09:00
$ ( '#' + SN . C . S . NoticeDataGeo ) . attr ( 'checked' , false ) ;
2010-01-26 09:58:10 +09:00
$ . cookie ( SN . C . S . NoticeDataGeoCookie , 'disabled' , { path : '/' , expires : SN . U . GetFullYear ( 2029 , 0 , 1 ) } ) ;
2010-01-04 22:44:32 +09:00
}
2010-01-18 21:55:14 +09:00
function getJSONgeocodeURL ( geocodeURL , data ) {
2010-01-05 08:36:22 +09:00
$ . getJSON ( geocodeURL , data , function ( location ) {
2010-01-08 22:36:52 +09:00
var lns , lid ;
2010-01-05 08:36:22 +09:00
if ( typeof ( location . location _ns ) != 'undefined' ) {
$ ( '#' + SN . C . S . NoticeLocationNs ) . val ( location . location _ns ) ;
2010-01-08 22:36:52 +09:00
lns = location . location _ns ;
2010-01-05 08:36:22 +09:00
}
if ( typeof ( location . location _id ) != 'undefined' ) {
$ ( '#' + SN . C . S . NoticeLocationId ) . val ( location . location _id ) ;
2010-01-08 22:36:52 +09:00
lid = location . location _id ;
2010-01-05 08:36:22 +09:00
}
if ( typeof ( location . name ) == 'undefined' ) {
2010-01-18 21:55:14 +09:00
NLN _text = data . lat + ';' + data . lon ;
2010-01-05 08:36:22 +09:00
}
else {
NLN _text = location . name ;
}
2010-01-14 10:48:57 +09:00
$ ( 'label[for=' + SN . C . S . NoticeDataGeo + ']' )
. attr ( 'title' , NoticeDataGeo _text . ShareDisable + ' (' + NLN _text + ')' ) ;
2010-01-08 22:36:52 +09:00
$ ( '#' + SN . C . S . NoticeLat ) . val ( data . lat ) ;
$ ( '#' + SN . C . S . NoticeLon ) . val ( data . lon ) ;
$ ( '#' + SN . C . S . NoticeLocationNs ) . val ( lns ) ;
$ ( '#' + SN . C . S . NoticeLocationId ) . val ( lid ) ;
$ ( '#' + SN . C . S . NoticeDataGeo ) . attr ( 'checked' , true ) ;
var cookieValue = {
2010-01-17 04:44:37 +09:00
NLat : data . lat ,
NLon : data . lon ,
NLNS : lns ,
NLID : lid ,
NLN : NLN _text ,
NLNU : location . url ,
NDG : true
2010-01-08 22:36:52 +09:00
} ;
2010-01-25 23:55:04 +09:00
2010-01-26 09:58:10 +09:00
$ . cookie ( SN . C . S . NoticeDataGeoCookie , JSON . stringify ( cookieValue ) , { path : '/' , expires : SN . U . GetFullYear ( 2029 , 0 , 1 ) } ) ;
2010-01-05 08:36:22 +09:00
} ) ;
}
2010-01-05 09:37:53 +09:00
2010-01-08 22:36:52 +09:00
if ( NDGe . length > 0 ) {
2010-01-09 01:43:03 +09:00
if ( $ . cookie ( SN . C . S . NoticeDataGeoCookie ) == 'disabled' ) {
2010-01-08 22:36:52 +09:00
NDGe . attr ( 'checked' , false ) ;
}
else {
NDGe . attr ( 'checked' , true ) ;
}
2010-01-05 10:31:34 +09:00
2010-01-08 22:58:23 +09:00
var NGW = $ ( '#notice_data-geo_wrap' ) ;
var geocodeURL = NGW . attr ( 'title' ) ;
NGW . removeAttr ( 'title' ) ;
2010-01-01 03:27:05 +09:00
2010-01-14 10:48:57 +09:00
$ ( 'label[for=' + SN . C . S . NoticeDataGeo + ']' )
. attr ( 'title' , jQuery . trim ( $ ( 'label[for=' + SN . C . S . NoticeDataGeo + ']' ) . text ( ) ) ) ;
2010-01-01 03:08:21 +09:00
2010-01-08 22:36:52 +09:00
NDGe . change ( function ( ) {
2010-01-09 01:43:03 +09:00
if ( $ ( '#' + SN . C . S . NoticeDataGeo ) . attr ( 'checked' ) === true || $ . cookie ( SN . C . S . NoticeDataGeoCookie ) === null ) {
2010-01-14 10:48:57 +09:00
$ ( 'label[for=' + SN . C . S . NoticeDataGeo + ']' )
. attr ( 'title' , NoticeDataGeo _text . ShareDisable )
. addClass ( 'checked' ) ;
2010-01-03 10:48:41 +09:00
2010-01-09 01:43:03 +09:00
if ( $ . cookie ( SN . C . S . NoticeDataGeoCookie ) === null || $ . cookie ( SN . C . S . NoticeDataGeoCookie ) == 'disabled' ) {
2010-01-08 22:36:52 +09:00
if ( navigator . geolocation ) {
navigator . geolocation . getCurrentPosition (
function ( position ) {
$ ( '#' + SN . C . S . NoticeLat ) . val ( position . coords . latitude ) ;
$ ( '#' + SN . C . S . NoticeLon ) . val ( position . coords . longitude ) ;
var data = {
2010-01-17 04:44:37 +09:00
lat : position . coords . latitude ,
lon : position . coords . longitude ,
token : $ ( '#token' ) . val ( )
2010-01-08 22:36:52 +09:00
} ;
2010-01-18 21:55:14 +09:00
getJSONgeocodeURL ( geocodeURL , data ) ;
2010-01-08 22:36:52 +09:00
} ,
function ( error ) {
2010-01-14 00:36:42 +09:00
switch ( error . code ) {
case error . PERMISSION _DENIED :
removeNoticeDataGeo ( ) ;
break ;
case error . TIMEOUT :
2010-01-14 00:51:32 +09:00
$ ( '#' + SN . C . S . NoticeDataGeo ) . attr ( 'checked' , false ) ;
2010-01-14 00:36:42 +09:00
break ;
2010-01-08 22:36:52 +09:00
}
2010-01-14 00:36:42 +09:00
} ,
{
2010-01-14 00:50:45 +09:00
timeout : 10000
2010-01-08 22:36:52 +09:00
}
) ;
}
else {
if ( NLat . length > 0 && NLon . length > 0 ) {
2010-01-04 18:52:35 +09:00
var data = {
2010-01-18 21:55:14 +09:00
lat : NLat ,
lon : NLon ,
token : $ ( '#token' ) . val ( )
2010-01-04 18:52:35 +09:00
} ;
2010-01-18 21:55:14 +09:00
getJSONgeocodeURL ( geocodeURL , data ) ;
2010-01-04 18:52:35 +09:00
}
2010-01-08 22:36:52 +09:00
else {
removeNoticeDataGeo ( ) ;
$ ( '#' + SN . C . S . NoticeDataGeo ) . remove ( ) ;
$ ( 'label[for=' + SN . C . S . NoticeDataGeo + ']' ) . remove ( ) ;
}
}
2010-01-01 01:25:51 +09:00
}
else {
2010-01-09 01:43:03 +09:00
var cookieValue = JSON . parse ( $ . cookie ( SN . C . S . NoticeDataGeoCookie ) ) ;
2010-01-08 23:23:37 +09:00
2010-01-08 22:36:52 +09:00
$ ( '#' + SN . C . S . NoticeLat ) . val ( cookieValue . NLat ) ;
$ ( '#' + SN . C . S . NoticeLon ) . val ( cookieValue . NLon ) ;
$ ( '#' + SN . C . S . NoticeLocationNs ) . val ( cookieValue . NLNS ) ;
$ ( '#' + SN . C . S . NoticeLocationId ) . val ( cookieValue . NLID ) ;
$ ( '#' + SN . C . S . NoticeDataGeo ) . attr ( 'checked' , cookieValue . NDG ) ;
2010-01-14 10:48:57 +09:00
$ ( 'label[for=' + SN . C . S . NoticeDataGeo + ']' )
. attr ( 'title' , NoticeDataGeo _text . ShareDisable + ' (' + cookieValue . NLN + ')' )
. addClass ( 'checked' ) ;
2009-12-30 06:17:17 +09:00
}
2010-01-05 08:36:22 +09:00
}
else {
removeNoticeDataGeo ( ) ;
}
} ) . change ( ) ;
2009-12-30 06:17:17 +09:00
}
2009-11-20 05:17:18 +09:00
} ,
2009-11-01 00:14:38 +09:00
NewDirectMessage : function ( ) {
NDM = $ ( '.entity_send-a-message a' ) ;
NDM . attr ( { 'href' : NDM . attr ( 'href' ) + '&ajax=1' } ) ;
2009-11-27 22:42:30 +09:00
NDM . bind ( 'click' , function ( ) {
2009-11-01 00:14:38 +09:00
var NDMF = $ ( '.entity_send-a-message form' ) ;
2009-11-03 02:06:52 +09:00
if ( NDMF . length === 0 ) {
2010-02-01 23:13:54 +09:00
$ ( this ) . addClass ( SN . C . S . Processing ) ;
2009-11-01 00:14:38 +09:00
$ . get ( NDM . attr ( 'href' ) , null , function ( data ) {
2009-11-02 22:28:14 +09:00
$ ( '.entity_send-a-message' ) . append ( document . _importNode ( $ ( 'form' , data ) [ 0 ] , true ) ) ;
2009-11-01 02:01:19 +09:00
NDMF = $ ( '.entity_send-a-message .form_notice' ) ;
2009-11-03 02:56:55 +09:00
SN . U . FormNoticeXHR ( NDMF ) ;
2009-11-01 02:55:13 +09:00
SN . U . FormNoticeEnhancements ( NDMF ) ;
2009-11-02 04:53:25 +09:00
NDMF . append ( '<button class="close">×</button>' ) ;
2009-11-01 00:14:38 +09:00
$ ( '.entity_send-a-message button' ) . click ( function ( ) {
NDMF . hide ( ) ;
return false ;
} ) ;
2010-02-01 23:13:54 +09:00
NDM . removeClass ( SN . C . S . Processing ) ;
2009-11-01 00:14:38 +09:00
} ) ;
}
else {
NDMF . show ( ) ;
$ ( '.entity_send-a-message textarea' ) . focus ( ) ;
}
return false ;
} ) ;
2010-01-25 23:55:04 +09:00
} ,
2010-01-26 09:58:10 +09:00
GetFullYear : function ( year , month , day ) {
2010-01-25 23:55:04 +09:00
var date = new Date ( ) ;
2010-01-26 09:58:10 +09:00
date . setFullYear ( year , month , day ) ;
2010-01-25 23:55:04 +09:00
return date ;
2009-10-30 20:40:08 +09:00
}
2009-11-12 03:20:58 +09:00
} ,
2009-11-03 02:06:52 +09:00
2009-11-12 03:20:58 +09:00
Init : {
2009-11-12 03:47:14 +09:00
NoticeForm : function ( ) {
2009-11-12 03:20:58 +09:00
if ( $ ( 'body.user_in' ) . length > 0 ) {
2010-01-08 22:36:52 +09:00
SN . U . NoticeLocationAttach ( ) ;
2009-11-12 03:20:58 +09:00
$ ( '.' + SN . C . S . FormNotice ) . each ( function ( ) {
SN . U . FormNoticeXHR ( $ ( this ) ) ;
SN . U . FormNoticeEnhancements ( $ ( this ) ) ;
} ) ;
2009-11-03 02:06:52 +09:00
2009-11-12 03:47:14 +09:00
SN . U . NoticeDataAttach ( ) ;
}
} ,
Notices : function ( ) {
if ( $ ( 'body.user_in' ) . length > 0 ) {
2009-11-14 05:56:55 +09:00
SN . U . NoticeFavor ( ) ;
2009-12-12 00:12:34 +09:00
SN . U . NoticeRepeat ( ) ;
2009-11-12 03:20:58 +09:00
SN . U . NoticeReply ( ) ;
2009-11-12 03:47:14 +09:00
}
2009-11-03 02:06:52 +09:00
2009-11-12 03:47:14 +09:00
SN . U . NoticeAttachments ( ) ;
} ,
EntityActions : function ( ) {
if ( $ ( 'body.user_in' ) . length > 0 ) {
2010-02-01 07:37:22 +09:00
$ ( '.form_user_subscribe' ) . live ( 'click' , function ( ) { SN . U . FormXHR ( $ ( this ) ) ; return false ; } ) ;
$ ( '.form_user_unsubscribe' ) . live ( 'click' , function ( ) { SN . U . FormXHR ( $ ( this ) ) ; return false ; } ) ;
$ ( '.form_group_join' ) . live ( 'click' , function ( ) { SN . U . FormXHR ( $ ( this ) ) ; return false ; } ) ;
$ ( '.form_group_leave' ) . live ( 'click' , function ( ) { SN . U . FormXHR ( $ ( this ) ) ; return false ; } ) ;
$ ( '.form_user_nudge' ) . live ( 'click' , function ( ) { SN . U . FormXHR ( $ ( this ) ) ; return false ; } ) ;
2009-12-10 22:29:27 +09:00
SN . U . NewDirectMessage ( ) ;
2009-11-12 03:20:58 +09:00
}
}
2009-11-03 02:06:52 +09:00
}
2009-11-12 03:20:58 +09:00
} ;
2009-11-03 02:06:52 +09:00
2009-11-12 03:20:58 +09:00
$ ( document ) . ready ( function ( ) {
2009-11-12 03:47:14 +09:00
if ( $ ( '.' + SN . C . S . FormNotice ) . length > 0 ) {
SN . Init . NoticeForm ( ) ;
}
if ( $ ( '#content .notices' ) . length > 0 ) {
2009-11-12 03:20:58 +09:00
SN . Init . Notices ( ) ;
}
2009-11-12 03:47:14 +09:00
if ( $ ( '#content .entity_actions' ) . length > 0 ) {
SN . Init . EntityActions ( ) ;
}
2009-11-03 02:06:52 +09:00
} ) ;