2010-06-08 11:19:41 -04:00
NEWSBLUR . ReaderManageFeed = function ( feed _id , options ) {
var defaults = { } ;
this . options = $ . extend ( { } , defaults , options ) ;
this . model = NEWSBLUR . AssetModel . reader ( ) ;
this . feed _id = feed _id ;
this . google _favicon _url = 'http://www.google.com/s2/favicons?domain_url=' ;
this . counters = {
'classifier' : 0
} ;
this . runner ( ) ;
} ;
NEWSBLUR . ReaderManageFeed . prototype = {
runner : function ( ) {
this . feeds = this . model . get _feeds ( ) ;
if ( ! this . feed _id ) {
// No feed selected, so just choose a random feed.
var feeds _list = [ ] ;
for ( var f in this . feeds ) {
feeds _list . push ( f ) ;
}
this . feed _id = feeds _list [ Math . round ( Math . random ( ) * 1000 % ( feeds _list . length - 1 ) ) ] ;
if ( ! this . feed _id ) this . feed _id = f ;
}
this . feed = this . model . get _feed ( this . feed _id ) ;
if ( this . feed _id ) {
this . make _modal ( ) ;
2010-09-17 12:40:42 -04:00
this . initialize _feed ( ) ;
2010-06-08 11:19:41 -04:00
this . handle _cancel ( ) ;
this . open _modal ( ) ;
this . load _feed _classifier ( ) ;
this . $manage . bind ( 'click' , $ . rescope ( this . handle _click , this ) ) ;
this . $manage . bind ( 'change' , $ . rescope ( this . handle _change , this ) ) ;
this . $manage . bind ( 'keyup' , $ . rescope ( this . handle _keyup , this ) ) ;
}
} ,
initialize _feed : function ( feed _id ) {
2010-09-17 12:40:42 -04:00
if ( feed _id ) this . feed _id = feed _id ;
this . feed = this . model . get _feed ( this . feed _id ) ;
2010-06-08 11:19:41 -04:00
$ ( '.NB-modal-title' , this . $manage ) . html ( this . feed [ 'feed_title' ] ) ;
$ ( 'input[name=feed_id]' , this . $manage ) . val ( this . feed _id ) ;
$ ( 'input[name=rename_title]' , this . $manage ) . val ( this . feed [ 'feed_title' ] ) ;
} ,
make _modal : function ( ) {
var self = this ;
this . $manage = $ . make ( 'div' , { className : 'NB-manage NB-modal' } , [
$ . make ( 'form' , { method : 'post' , className : 'NB-manage-form' } , [
$ . make ( 'div' , { className : 'NB-manage-container' } , [
$ . make ( 'div' , { className : 'NB-modal-loading' } ) ,
$ . make ( 'h2' , { className : 'NB-modal-title' } ) ,
$ . make ( 'div' , { className : 'NB-manage-field' } , [
$ . make ( 'div' , { className : 'NB-fieldset' } , [
$ . make ( 'h5' , [
'What you ' ,
$ . make ( 'span' , { className : 'NB-classifier-like' } , 'like' )
] ) ,
$ . make ( 'div' , { className : 'NB-manage-classifier NB-manage-classifier-likes NB-fieldset-fields' } )
] ) ,
$ . make ( 'div' , { className : 'NB-fieldset' } , [
$ . make ( 'h5' , [
'What you ' ,
$ . make ( 'span' , { className : 'NB-classifier-dislike' } , 'dislike' )
] ) ,
$ . make ( 'div' , { className : 'NB-manage-classifier NB-manage-classifier-dislikes NB-fieldset-fields' } )
] ) ,
$ . make ( 'div' , { className : 'NB-fieldset' } , [
$ . make ( 'h5' , 'Management' ) ,
2010-08-30 18:41:53 -04:00
$ . make ( 'div' , { className : 'NB-manage-management NB-fieldset-fields NB-modal-submit' } , [
2010-06-08 11:19:41 -04:00
$ . make ( 'div' , { className : 'NB-manage-rename' } , [
$ . make ( 'label' , { className : 'NB-manage-rename-label' , 'for' : 'id_rename' } , "Feed Title: " ) ,
$ . make ( 'input' , { name : 'rename_title' , id : 'id_rename' } )
] ) ,
2010-08-30 22:42:44 -04:00
$ . make ( 'input' , { type : 'submit' , value : 'Fetch and refresh this site' , className : 'NB-modal-submit-green NB-modal-submit-retry' } ) ,
2010-06-08 11:19:41 -04:00
$ . make ( 'div' , { className : 'NB-manage-delete' } , [
2010-08-30 22:42:44 -04:00
$ . make ( 'input' , { type : 'submit' , value : 'Delete this site' , className : 'NB-modal-submit-green NB-modal-submit-delete' } ) ,
2010-06-08 11:19:41 -04:00
$ . make ( 'a' , { className : 'NB-delete-confirm' , href : '#' } , "Yes, delete this feed!" ) ,
$ . make ( 'a' , { className : 'NB-delete-cancel' , href : '#' } , "cancel" )
] )
] )
] )
] )
] ) ,
2010-07-30 17:12:20 -04:00
$ . make ( 'div' , { className : 'NB-modal-feed-chooser-container' } , [
2010-06-08 11:19:41 -04:00
this . make _feed _chooser ( )
] ) ,
$ . make ( 'div' , { className : 'NB-modal-submit' } , [
$ . make ( 'input' , { name : 'feed_id' , type : 'hidden' } ) ,
2010-08-30 22:42:44 -04:00
$ . make ( 'input' , { type : 'submit' , disabled : 'true' , className : 'NB-modal-submit-save NB-modal-submit-green NB-disabled' , value : 'Check what you like above...' } ) ,
2010-06-08 11:19:41 -04:00
' or ' ,
$ . make ( 'a' , { href : '#' , className : 'NB-modal-cancel' } , 'cancel' )
] )
] ) . bind ( 'submit' , function ( e ) {
e . preventDefault ( ) ;
self . save ( ) ;
return false ;
} )
] ) ;
} ,
make _feed _chooser : function ( ) {
2010-07-30 17:12:20 -04:00
var $chooser = $ . make ( 'select' , { name : 'feed' , className : 'NB-modal-feed-chooser' } ) ;
2010-06-08 11:19:41 -04:00
for ( var f in this . feeds ) {
var feed = this . feeds [ f ] ;
var $option = $ . make ( 'option' , { value : feed . id } , feed . feed _title ) ;
$option . appendTo ( $chooser ) ;
if ( feed . id == this . feed _id ) {
$option . attr ( 'selected' , true ) ;
}
}
$ ( 'option' , $chooser ) . tsort ( ) ;
return $chooser ;
} ,
make _classifiers : function ( classifiers , score ) {
var $classifiers = $ . make ( 'div' ) ;
var i = this . counters [ 'classifier' ] ;
var opinion = ( score == 1 ? 'like_' : 'dislike_' ) ;
// Tags
var $tags = $ . make ( 'div' , { className : 'NB-classifiers NB-classifier-tags' } ) ;
for ( var t in classifiers . tags ) {
if ( classifiers . tags [ t ] == score ) {
var $tag = this . make _tag ( t , i ++ , opinion ) ;
$tags . append ( $tag ) ;
}
}
// Authors
var $authors = $ . make ( 'div' , { className : 'NB-classifiers NB-classifier-authors' } ) ;
for ( var fa in classifiers . authors ) {
if ( classifiers . authors [ fa ] == score ) {
var $author = this . make _author ( fa , i ++ , opinion ) ;
$authors . append ( $author ) ;
}
}
// Titles
var $titles = $ . make ( 'div' , { className : 'NB-classifiers NB-classifier-titles' } ) ;
for ( var t in classifiers . titles ) {
if ( classifiers . titles [ t ] == score ) {
var $title = this . make _title ( t , i ++ , opinion ) ;
$titles . append ( $title ) ;
}
}
// Publisher
var $publishers = $ . make ( 'div' , { className : 'NB-classifiers NB-classifier-publishers' } ) ;
2010-08-22 18:34:40 -04:00
for ( var feed _id in classifiers . feeds ) {
if ( classifiers . feeds [ feed _id ] == score ) {
var $publisher = this . make _publisher ( feed _id , i ++ , opinion ) ;
2010-06-08 11:19:41 -04:00
$publishers . append ( $publisher ) ;
}
}
$classifiers . append ( $tags ) ;
$classifiers . append ( $authors ) ;
$classifiers . append ( $titles ) ;
$classifiers . append ( $publishers ) ;
if ( ! $ ( '.NB-classifier' , $classifiers ) . length ) {
var $empty _classifier = $ . make ( 'div' , { className : 'NB-classifier-empty' } , [
'No opinions yet. Use the ' ,
$ . make ( 'img' , { src : NEWSBLUR . Globals . MEDIA _URL + 'img/reader/thumbs-down.png' , className : 'NB-dislike' } ) ,
$ . make ( 'img' , { src : NEWSBLUR . Globals . MEDIA _URL + 'img/reader/thumbs-up.png' , className : 'NB-like' } ) ,
' buttons next to stories.'
] ) ;
$classifiers . append ( $empty _classifier ) ;
}
this . counters [ 'classifier' ] = i ;
return $classifiers ;
} ,
make _author : function ( feed _author , i , opinion ) {
var $author = $ . make ( 'span' , { className : 'NB-classifier NB-classifier-author' } , [
$ . make ( 'input' , { type : 'checkbox' , name : opinion + 'author' , value : feed _author , id : 'classifier_author_' + i , checked : 'checked' } ) ,
$ . make ( 'label' , { 'for' : 'classifier_author_' + i } , [
$ . make ( 'b' , 'Author: ' ) ,
$ . make ( 'span' , feed _author )
] )
] ) ;
return $author ;
} ,
make _tag : function ( tag , t , opinion ) {
var $tag = $ . make ( 'span' , { className : 'NB-classifier-tag-container' } , [
$ . make ( 'span' , { className : 'NB-classifier NB-classifier-tag' } , [
$ . make ( 'input' , { type : 'checkbox' , name : opinion + 'tag' , value : tag , id : 'classifier_tag_' + t , checked : 'checked' } ) ,
$ . make ( 'label' , { 'for' : 'classifier_tag_' + t } , [
$ . make ( 'b' , 'Tag: ' ) ,
$ . make ( 'span' , tag )
] )
] )
] ) ;
return $tag ;
} ,
2010-08-22 18:34:40 -04:00
make _publisher : function ( feed _id , i , opinion ) {
var publisher = this . model . get _feed ( feed _id ) ;
2010-06-08 11:19:41 -04:00
var $publisher = $ . make ( 'div' , { className : 'NB-classifier NB-classifier-publisher' } , [
$ . make ( 'input' , { type : 'checkbox' , name : opinion + 'publisher' , value : this . feed _id , id : 'classifier_publisher' , checked : 'checked' } ) ,
$ . make ( 'label' , { 'for' : 'classifier_publisher' } , [
$ . make ( 'img' , { className : 'feed_favicon' , src : this . google _favicon _url + publisher . feed _link } ) ,
$ . make ( 'span' , { className : 'feed_title' } , [
$ . make ( 'b' , 'Publisher: ' ) ,
$ . make ( 'span' , publisher . feed _title )
] )
] )
] ) ;
return $publisher ;
} ,
make _title : function ( title , t , opinion ) {
var $title = $ . make ( 'div' , { className : 'NB-classifier NB-classifier-title' } , [
$ . make ( 'input' , { type : 'checkbox' , name : opinion + 'title' , value : title , id : 'classifier_title_' + t , checked : 'checked' } ) ,
$ . make ( 'label' , { 'for' : 'classifier_title_' + t } , [
$ . make ( 'b' , 'Title: ' ) ,
$ . make ( 'span' , title )
] )
] ) ;
return $title ;
} ,
load _feed _classifier : function ( ) {
var $loading = $ ( '.NB-modal-loading' , this . $manage ) ;
$loading . addClass ( 'NB-active' ) ;
this . model . get _feed _classifier ( this . feed _id , $ . rescope ( this . post _load _feed _classifier , this ) ) ;
} ,
post _load _feed _classifier : function ( e , classifiers ) {
var $loading = $ ( '.NB-modal-loading' , this . $manage ) ;
$loading . removeClass ( 'NB-active' ) ;
var $likes = $ ( '.NB-manage-classifier-likes' ) ;
var $classifiers _likes = this . make _classifiers ( classifiers . payload , 1 ) ;
$likes . empty ( ) . append ( $classifiers _likes ) ;
var $dislikes = $ ( '.NB-manage-classifier-dislikes' ) ;
var $classifiers _dislikes = this . make _classifiers ( classifiers . payload , - 1 ) ;
$dislikes . empty ( ) . append ( $classifiers _dislikes ) ;
$ ( '.NB-classifier' , this . $manage ) . corner ( '14px' ) ;
} ,
open _modal : function ( ) {
var self = this ;
2010-06-30 12:17:22 -04:00
2010-06-08 11:19:41 -04:00
this . $manage . modal ( {
'minWidth' : 600 ,
2010-08-03 23:41:02 -04:00
'maxWidth' : 600 ,
2010-06-08 11:19:41 -04:00
'overlayClose' : true ,
'onOpen' : function ( dialog ) {
2010-06-13 18:57:20 -04:00
dialog . overlay . fadeIn ( 200 , function ( ) {
dialog . container . fadeIn ( 200 ) ;
dialog . data . fadeIn ( 200 ) ;
} ) ;
2010-06-08 11:19:41 -04:00
} ,
'onShow' : function ( dialog ) {
2010-08-03 23:41:02 -04:00
$ ( '#simplemodal-container' ) . corner ( '6px' ) ;
2010-06-08 11:19:41 -04:00
// $('.NB-classifier-tag', self.$manage).corner('4px');
} ,
'onClose' : function ( dialog ) {
dialog . data . hide ( ) . empty ( ) . remove ( ) ;
dialog . container . hide ( ) . empty ( ) . remove ( ) ;
dialog . overlay . fadeOut ( 200 , function ( ) {
dialog . overlay . empty ( ) . remove ( ) ;
$ . modal . close ( ) ;
} ) ;
$ ( '.NB-modal-holder' ) . empty ( ) . remove ( ) ;
}
} ) ;
} ,
handle _cancel : function ( ) {
var $cancel = $ ( '.NB-modal-cancel' , this . $manage ) ;
$cancel . click ( function ( e ) {
e . preventDefault ( ) ;
$ . modal . close ( ) ;
} ) ;
} ,
serialize _classifier : function ( ) {
var checked _data = $ ( 'input' , this . $manage ) . serialize ( ) ;
var $unchecked = $ ( 'input[type=checkbox]:not(:checked)' , this . $manage ) ;
$unchecked . attr ( 'checked' , true ) ;
$unchecked . each ( function ( ) {
$ ( this ) . attr ( 'name' , 'remove_' + $ ( this ) . attr ( 'name' ) ) ;
} ) ;
var unchecked _data = $unchecked . serialize ( ) ;
$unchecked . each ( function ( ) {
$ ( this ) . attr ( 'name' , $ ( this ) . attr ( 'name' ) . replace ( /^remove_/ , '' ) ) ;
} ) ;
$unchecked . attr ( 'checked' , false ) ;
var data = [ checked _data , unchecked _data ] . join ( '&' ) ;
return data ;
} ,
save : function ( ) {
2010-10-10 23:33:56 -04:00
var self = this ;
2010-08-30 22:42:44 -04:00
var $save = $ ( '.NB-modal-submit-save' , this . $manage ) ;
2010-06-08 11:19:41 -04:00
var data = this . serialize _classifier ( ) ;
NEWSBLUR . reader . update _opinions ( this . $manage , this . feed _id ) ;
$save . text ( 'Saving...' ) . addClass ( 'NB-disabled' ) . attr ( 'disabled' , true ) ;
this . model . save _classifier _publisher ( data , function ( ) {
2010-10-10 23:33:56 -04:00
NEWSBLUR . reader . force _feed _refresh ( self . feed _id ) ;
2010-06-08 11:19:41 -04:00
$ . modal . close ( ) ;
} ) ;
} ,
2010-08-30 18:41:53 -04:00
save _retry _feed : function ( ) {
var self = this ;
var $loading = $ ( '.NB-modal-loading' , this . $manage ) ;
$loading . addClass ( 'NB-active' ) ;
$ ( '.NB-modal-submit-retry' , this . $manage ) . addClass ( 'NB-disabled' ) . attr ( 'value' , 'Fetching...' ) ;
this . model . save _exception _retry ( this . feed _id , function ( ) {
2010-10-10 23:33:56 -04:00
NEWSBLUR . reader . force _feed _refresh ( self . feed _id , function ( ) {
2010-08-30 22:42:44 -04:00
if ( NEWSBLUR . reader . active _feed == self . feed _id ) {
2010-10-11 12:07:32 -04:00
NEWSBLUR . reader . open _feed ( self . feed _id , true ) ;
2010-08-30 22:42:44 -04:00
}
$ . modal . close ( ) ;
} , true ) ;
2010-08-30 18:41:53 -04:00
} ) ;
} ,
2010-06-08 11:19:41 -04:00
delete _feed : function ( ) {
var $loading = $ ( '.NB-modal-loading' , this . $manage ) ;
$loading . addClass ( 'NB-active' ) ;
var feed _id = this . feed _id ;
this . model . delete _publisher ( feed _id , function ( ) {
NEWSBLUR . reader . delete _feed ( feed _id ) ;
$ . modal . close ( ) ;
} ) ;
} ,
handle _click : function ( elem , e ) {
var self = this ;
2010-08-30 18:41:53 -04:00
$ . targetIs ( e , { tagSelector : '.NB-modal-submit-delete' } , function ( $t , $p ) {
2010-06-08 11:19:41 -04:00
e . preventDefault ( ) ;
var $confirm = $ ( '.NB-delete-confirm' , self . $manage ) ;
var $cancel = $ ( '.NB-delete-cancel' , self . $manage ) ;
2010-08-30 18:41:53 -04:00
var $delete = $ ( '.NB-modal-submit-delete' , self . $manage ) ;
2010-06-08 11:19:41 -04:00
$delete . animate ( { 'opacity' : 0 } , { 'duration' : 500 } ) ;
$confirm . fadeIn ( 500 ) ;
$cancel . fadeIn ( 500 ) ;
} ) ;
$ . targetIs ( e , { tagSelector : '.NB-delete-cancel' } , function ( $t , $p ) {
e . preventDefault ( ) ;
var $confirm = $ ( '.NB-delete-confirm' , self . $manage ) ;
var $cancel = $ ( '.NB-delete-cancel' , self . $manage ) ;
2010-08-30 18:41:53 -04:00
var $delete = $ ( '.NB-modal-submit-delete' , self . $manage ) ;
2010-06-08 11:19:41 -04:00
$delete . css ( { 'opacity' : 1 } ) ;
$confirm . css ( { 'display' : 'none' } ) ;
$cancel . css ( { 'display' : 'none' } ) ;
} ) ;
$ . targetIs ( e , { tagSelector : '.NB-delete-confirm' } , function ( $t , $p ) {
e . preventDefault ( ) ;
self . delete _feed ( ) ;
} ) ;
$ . targetIs ( e , { tagSelector : 'input' , childOf : '.NB-classifier' } , function ( $t , $p ) {
2010-08-30 22:42:44 -04:00
var $submit = $ ( '.NB-modal-submit-save' , self . $manage ) ;
2010-06-08 11:19:41 -04:00
$submit . removeClass ( "NB-disabled" ) . removeAttr ( 'disabled' ) . attr ( 'value' , 'Save' ) ;
} ) ;
2010-08-30 18:41:53 -04:00
$ . targetIs ( e , { tagSelector : '.NB-modal-submit-retry' } , function ( $t , $p ) {
e . preventDefault ( ) ;
self . save _retry _feed ( ) ;
} ) ;
2010-06-08 11:19:41 -04:00
} ,
handle _change : function ( elem , e ) {
var self = this ;
2010-07-30 17:12:20 -04:00
$ . targetIs ( e , { tagSelector : '.NB-modal-feed-chooser' } , function ( $t , $p ) {
2010-06-08 11:19:41 -04:00
var feed _id = $t . val ( ) ;
self . initialize _feed ( feed _id ) ;
self . load _feed _classifier ( ) ;
} ) ;
2010-08-30 22:42:44 -04:00
$ . targetIs ( e , { tagSelector : 'input[type=checkbox]' , childOf : '.NB-classifier' } , function ( $t , $p ) {
var $submit = $ ( '.NB-modal-submit-save' , self . $manage ) ;
2010-06-08 11:19:41 -04:00
$submit . removeClass ( "NB-disabled" ) . removeAttr ( 'disabled' ) . attr ( 'value' , 'Save' ) ;
} ) ;
} ,
handle _keyup : function ( elem , e ) {
var self = this ;
$ . targetIs ( e , { tagSelector : 'input' , childOf : '.NB-manage-rename' } , function ( $t , $p ) {
if ( $t . val ( ) != self . feed . feed _title ) {
2010-08-30 22:42:44 -04:00
var $submit = $ ( '.NB-modal-submit-save' , self . $manage ) ;
2010-06-08 11:19:41 -04:00
$submit . removeClass ( "NB-disabled" ) . removeAttr ( 'disabled' ) . attr ( 'value' , 'Save' ) ;
}
} ) ;
}
} ;