2011-06-09 22:08:59 -04:00
NEWSBLUR . utils = {
2013-03-02 12:48:31 -08:00
service _name : function ( service ) {
switch ( service ) {
case 'twitter' :
return 'Twitter' ;
case 'facebook' :
return 'Facebook' ;
}
} ,
2011-06-16 23:45:41 -04:00
compute _story _score : function ( story ) {
var score = 0 ;
2012-05-24 17:32:01 -07:00
var intelligence = story . get ( 'intelligence' ) ;
2019-01-05 16:00:55 -05:00
if ( ! intelligence ) return score ;
2012-05-24 17:32:01 -07:00
var score _max = Math . max ( intelligence [ 'title' ] ,
intelligence [ 'author' ] ,
intelligence [ 'tags' ] ) ;
var score _min = Math . min ( intelligence [ 'title' ] ,
intelligence [ 'author' ] ,
intelligence [ 'tags' ] ) ;
2011-06-16 23:45:41 -04:00
if ( score _max > 0 ) score = score _max ;
else if ( score _min < 0 ) score = score _min ;
2011-06-09 22:08:59 -04:00
2012-05-24 17:32:01 -07:00
if ( score == 0 ) score = intelligence [ 'feed' ] ;
2011-06-09 22:08:59 -04:00
2011-06-16 23:45:41 -04:00
return score ;
} ,
2012-05-24 17:32:01 -07:00
2012-06-25 11:55:38 -07:00
generate _shadow : _ . memoize ( function ( feed ) {
if ( ! feed ) return '' ;
var color = feed . get ( 'favicon_color' ) ;
if ( ! color ) {
return '0 1px 0 #222' ;
}
2015-09-16 20:24:11 -07:00
var r , g , b ;
2012-06-25 11:55:38 -07:00
if ( feed . is _light ( ) ) {
2015-09-16 20:24:11 -07:00
color = feed . get ( 'favicon_fade' ) ;
2012-06-25 11:55:38 -07:00
} else {
2015-09-16 20:24:11 -07:00
color = feed . get ( 'favicon_border' ) ;
2012-06-25 11:55:38 -07:00
}
2015-09-16 20:24:11 -07:00
r = parseInt ( color . substr ( 0 , 2 ) , 16 ) ;
g = parseInt ( color . substr ( 2 , 2 ) , 16 ) ;
b = parseInt ( color . substr ( 4 , 2 ) , 16 ) ;
return [
'0 1px 0 ' ,
'rgb(' ,
[ r , g , b ] . join ( ',' ) ,
')'
] . join ( '' ) ;
2012-06-25 11:55:38 -07:00
} , function ( feed ) {
return "" + feed . id ;
} ) ,
2012-05-24 17:32:01 -07:00
generate _gradient : _ . memoize ( function ( feed , type ) {
2011-06-16 23:45:41 -04:00
if ( ! feed ) return '' ;
2012-05-21 14:36:54 -07:00
var color = feed . get ( 'favicon_color' ) ;
2015-09-16 20:24:11 -07:00
var colorFade = feed . get ( 'favicon_fade' ) ;
var colorBorder = feed . get ( 'favicon_border' ) ;
2011-06-16 23:45:41 -04:00
if ( ! color ) return '' ;
var r = parseInt ( color . substr ( 0 , 2 ) , 16 ) ;
var g = parseInt ( color . substr ( 2 , 2 ) , 16 ) ;
var b = parseInt ( color . substr ( 4 , 2 ) , 16 ) ;
2015-09-16 20:24:11 -07:00
var rF = parseInt ( colorFade . substr ( 0 , 2 ) , 16 ) ;
var gF = parseInt ( colorFade . substr ( 2 , 2 ) , 16 ) ;
var bF = parseInt ( colorFade . substr ( 4 , 2 ) , 16 ) ;
2012-05-21 14:58:25 -07:00
2012-06-25 11:55:38 -07:00
if ( type == 'border' ) {
2015-09-16 20:24:11 -07:00
r = parseInt ( colorBorder . substr ( 0 , 2 ) , 16 ) ;
g = parseInt ( colorBorder . substr ( 2 , 2 ) , 16 ) ;
b = parseInt ( colorBorder . substr ( 4 , 2 ) , 16 ) ;
2011-06-16 23:45:41 -04:00
return [
2012-05-17 14:42:34 -07:00
( type == 'border' ? '1px solid ' : '' ) + 'rgb(' ,
2011-06-16 23:45:41 -04:00
[
2015-09-16 20:24:11 -07:00
r ,
g ,
b
2011-06-16 23:45:41 -04:00
] . join ( ',' ) ,
')'
] . join ( '' ) ;
} else if ( type == 'webkit' ) {
return [
'-webkit-gradient(' ,
'linear,' ,
'left bottom,' ,
'left top,' ,
'color-stop(0, rgba(' ,
[
r ,
g ,
b ,
255
] . join ( ',' ) ,
')),' ,
'color-stop(1, rgba(' ,
[
2015-09-16 20:24:11 -07:00
rF ,
gF ,
bF ,
2011-06-16 23:45:41 -04:00
255
] . join ( ',' ) ,
')))'
] . join ( '' ) ;
} else if ( type == 'moz' ) {
return [
'-moz-linear-gradient(' ,
'center bottom,' ,
'rgb(' ,
[
r ,
g ,
b
] . join ( ',' ) ,
') 0%,' ,
'rgb(' ,
[
2015-09-16 20:24:11 -07:00
rF ,
gF ,
bF
2011-06-16 23:45:41 -04:00
] . join ( ',' ) ,
') 100%)'
] . join ( '' ) ;
}
2012-05-24 17:32:01 -07:00
} , function ( feed , type ) {
return "" + feed . id + '-' + type ;
} ) ,
2014-04-16 15:31:44 -07:00
attach _loading _gradient : function ( $elem , percentage ) {
$elem . css ( 'background' , '-moz-linear-gradient(left, #b1d2f9 0%, #b1d2f9 ' + percentage + '%, #fcfcfc ' + percentage + '%, #fcfcfc 100%)' ) ; // FF3.6+
$elem . css ( 'background' , '-webkit-gradient(linear, left top, right top, color-stop(0%,#b1d2f9), color-stop(' + percentage + '%,#b1d2f9), color-stop(' + percentage + '%,#fcfcfc), color-stop(100%,#fcfcfc))' ) ; // Chrome,Safari4+
$elem . css ( 'background' , '-webkit-linear-gradient(left, #b1d2f9 0%,#b1d2f9 ' + percentage + '%,#fcfcfc ' + percentage + '%,#fcfcfc 100%)' ) ; // Chrome10+,Safari5.1+
$elem . css ( 'background' , 'linear-gradient(to right, #b1d2f9 0%,#b1d2f9 ' + percentage + '%,#fcfcfc ' + percentage + '%,#fcfcfc 100%)' ) ;
$elem . css ( "filter" , "progid:DXImageTransform.Microsoft.gradient( startColorstr='#b1d2f9', endColorstr='#fcfcfc',GradientType=1 )" ) ;
} ,
2012-02-16 18:36:52 -08:00
is _feed _social : function ( feed _id ) {
return _ . string . include ( feed _id , 'social:' ) ;
} ,
2013-03-19 11:11:17 -07:00
monthNames : [ 'January' , 'February' , 'March' , 'April' , 'May' , 'June' , 'July' , 'August' , 'September' , 'October' , 'November' , 'December' ] ,
shortMonthNames : [ 'Jan' , 'Feb' , 'Mar' , 'Apr' , 'May' , 'Jun' , 'Jul' , 'Aug' , 'Sep' , 'Oct' , 'Nov' , 'Dec' ] ,
dayNames : [ 'Sunday' , 'Monday' , 'Tuesday' , 'Wednesday' , 'Thursday' , 'Friday' , 'Saturday' ] ,
2013-03-04 11:12:10 -08:00
format _date : function ( date ) {
var dayOfWeek = date . getDay ( ) ;
var month = date . getMonth ( ) ;
var year = date . getUTCFullYear ( ) ;
var day = date . getDate ( ) ;
2013-03-19 11:11:17 -07:00
return this . dayNames [ dayOfWeek ] + ", " + this . monthNames [ month ] + " " + day + ", " + year ;
2013-03-04 11:12:10 -08:00
} ,
2013-08-23 13:43:15 -07:00
make _folders : function ( selected _folder _title , options ) {
options = options || { } ;
var folders = NEWSBLUR . assets . get _folders ( ) ;
var $options = $ . make ( 'select' , { className : 'NB-folders' , name : options . name } ) ;
2011-09-04 15:42:13 -07:00
2013-08-23 13:51:08 -07:00
var $option = $ . make ( 'option' , { value : '' } , options . toplevel || "Top Level" ) ;
2011-09-04 15:42:13 -07:00
$options . append ( $option ) ;
2012-05-24 11:54:10 -07:00
$options = this . make _folder _options ( $options , folders , ' ' , selected _folder _title ) ;
2011-09-04 15:42:13 -07:00
return $options ;
} ,
2012-05-24 11:54:10 -07:00
make _folder _options : function ( $options , items , depth , selected _folder _title ) {
2012-05-21 20:08:27 -07:00
var self = this ;
items . each ( function ( item ) {
if ( item . is _folder ( ) ) {
var $option = $ . make ( 'option' , {
value : item . get ( 'folder_title' )
} , depth + ' ' + item . get ( 'folder_title' ) ) ;
$options . append ( $option ) ;
2012-05-24 11:54:10 -07:00
if ( item . get ( 'folder_title' ) == selected _folder _title ) {
$option . attr ( 'selected' , true ) ;
}
$options = self . make _folder _options ( $options , item . folders , depth + ' ' , selected _folder _title ) ;
2011-09-04 15:42:13 -07:00
}
2012-05-21 20:08:27 -07:00
} ) ;
2011-09-04 15:42:13 -07:00
return $options ;
2012-05-09 12:09:23 -07:00
} ,
is _url _iframe _buster : function ( url ) {
2012-09-05 11:32:12 -07:00
// Also change in utils/page_importer.py.
2012-05-14 15:01:30 -07:00
var BROKEN _URLS = [
2012-05-09 12:09:23 -07:00
'nytimes.com' ,
2013-03-02 11:18:12 -08:00
'github.com' ,
2014-10-29 16:16:50 -07:00
'medium.com' ,
2013-01-02 18:37:15 -08:00
'washingtonpost.com' ,
2012-05-09 12:09:23 -07:00
'stackoverflow.com' ,
2012-05-14 15:01:30 -07:00
'stackexchange.com' ,
2012-08-14 11:10:47 -07:00
'twitter.com' ,
2015-08-03 20:09:36 -07:00
'rankexploits' ,
2020-02-27 10:23:23 -05:00
'gamespot.com' ,
'royalroad.com'
2012-05-09 12:09:23 -07:00
] ;
return _ . any ( BROKEN _URLS , function ( broken _url ) {
2012-05-09 12:11:04 -07:00
return _ . string . contains ( url , broken _url ) ;
2012-05-09 12:09:23 -07:00
} ) ;
2013-02-11 16:07:08 -08:00
} ,
calculate _update _interval : function ( update _interval _minutes ) {
if ( ! update _interval _minutes ) return ' ' ;
var interval _start = update _interval _minutes ;
var interval _end = update _interval _minutes * 1.25 ;
var interval = '' ;
if ( interval _start < 60 ) {
interval = interval _start + ' to ' + interval _end + ' minutes' ;
} else {
var interval _start _hours = parseInt ( interval _start / 60 , 10 ) ;
var interval _end _hours = parseInt ( interval _end / 60 , 10 ) ;
var dec _start = interval _start % 60 ;
var dec _end = interval _end % 60 ;
interval = interval _start _hours + ( dec _start >= 30 ? '.5' : '' ) + ' to ' + interval _end _hours + ( dec _end >= 30 || interval _start _hours == interval _end _hours ? '.5' : '' ) + ' hours' ;
}
return interval ;
2013-09-13 15:02:10 -07:00
} ,
days _back _to _timestamp : function ( days _back ) {
2013-12-05 14:25:15 -08:00
if ( days _back > 365 ) {
// It's a timestamp, not the number of days back
return days _back ;
}
2013-09-13 15:02:10 -07:00
days _back = days _back || 0 ;
var now = Math . round ( ( new Date ( ) ) . getTime ( ) / 1000 ) ;
return now - ( days _back * 60 * 60 * 24 ) ;
2011-06-16 23:45:41 -04:00
}
2013-02-11 16:07:08 -08:00
2011-06-09 22:08:59 -04:00
} ;