2013-08-18 21:52:13 +10:00
/*global Favcount:true*/
2014-08-07 11:47:45 -04:00
var DiscourseResolver = require ( 'discourse/ember/resolver' ) . default ;
2015-05-11 13:16:44 -04:00
// Allow us to import Ember
define ( 'ember' , [ 'exports' ] , function ( _ _exports _ _ ) {
2015-08-11 17:34:02 -04:00
_ _exports _ _ . default = Ember ;
2015-05-11 13:16:44 -04:00
} ) ;
2013-12-30 12:42:05 -05:00
window . Discourse = Ember . Application . createWithMixins ( Discourse . Ajax , {
2013-02-22 15:41:12 -05:00
rootElement : '#main' ,
2015-02-12 12:27:51 -05:00
_docTitle : document . title ,
2013-02-20 13:15:50 -05:00
2013-03-14 13:01:52 +01:00
getURL : function ( url ) {
2015-07-15 23:00:11 +02:00
if ( ! url ) return url ;
2015-02-18 12:30:41 -05:00
2015-07-15 23:00:11 +02:00
// if it's a non relative URL, return it.
2015-10-21 13:13:19 -04:00
if ( url !== '/' && ! /^\/[^\/]/ . test ( url ) ) return url ;
2013-05-07 13:30:12 -04:00
2015-09-06 20:20:59 -07:00
if ( url . indexOf ( Discourse . BaseUri ) !== - 1 ) return url ;
if ( url [ 0 ] !== "/" ) url = "/" + url ;
2015-03-09 11:45:36 +11:00
2015-09-06 20:20:59 -07:00
return Discourse . BaseUri + url ;
2013-03-14 13:01:52 +01:00
} ,
2015-01-29 22:53:48 +01:00
getURLWithCDN : function ( url ) {
url = this . getURL ( url ) ;
2015-07-15 23:00:11 +02:00
// only relative urls
2015-07-15 19:24:23 +02:00
if ( Discourse . CDN && /^\/[^\/]/ . test ( url ) ) {
2015-05-27 12:59:51 +10:00
url = Discourse . CDN + url ;
} else if ( Discourse . S3CDN ) {
url = url . replace ( Discourse . S3BaseUrl , Discourse . S3CDN ) ;
}
2015-01-29 22:53:48 +01:00
return url ;
} ,
2014-08-07 11:47:45 -04:00
Resolver : DiscourseResolver ,
2013-06-03 16:12:24 -04:00
2014-10-09 14:37:23 -04:00
_titleChanged : function ( ) {
var title = this . get ( '_docTitle' ) || Discourse . SiteSettings . title ;
2014-06-17 11:32:59 +10:00
// if we change this we can trigger changes on document.title
// only set if changed.
if ( $ ( 'title' ) . text ( ) !== title ) {
$ ( 'title' ) . text ( title ) ;
}
2013-06-03 10:38:57 +10:00
var notifyCount = this . get ( 'notifyCount' ) ;
2013-08-08 12:42:08 -04:00
if ( notifyCount > 0 && ! Discourse . User . currentProp ( 'dynamic_favicon' ) ) {
2013-06-03 10:38:57 +10:00
title = "(" + notifyCount + ") " + title ;
2013-02-22 15:41:12 -05:00
}
2014-01-09 10:26:53 +11:00
2015-02-12 12:27:51 -05:00
document . title = title ;
2014-10-09 14:37:23 -04:00
} . observes ( '_docTitle' , 'hasFocus' , 'notifyCount' ) ,
2013-02-20 13:15:50 -05:00
2013-06-07 17:15:49 -07:00
faviconChanged : function ( ) {
2013-08-08 12:42:08 -04:00
if ( Discourse . User . currentProp ( 'dynamic_favicon' ) ) {
2015-08-25 11:54:23 +10:00
var url = Discourse . SiteSettings . favicon _url ;
if ( /^http/ . test ( url ) ) {
url = Discourse . getURL ( "/favicon/proxied?" + encodeURIComponent ( url ) ) ;
}
new Favcount ( url ) . set (
2013-08-18 11:26:03 -07:00
this . get ( 'notifyCount' )
2013-06-07 17:15:49 -07:00
) ;
}
} . observes ( 'notifyCount' ) ,
2013-02-26 14:54:43 -05:00
// The classes of buttons to show on a post
postButtons : function ( ) {
return Discourse . SiteSettings . post _menu . split ( "|" ) . map ( function ( i ) {
2015-08-11 17:34:02 -04:00
return i . replace ( /\+/ , '' ) . capitalize ( ) ;
2013-02-26 14:54:43 -05:00
} ) ;
2014-02-12 20:02:34 -08:00
} . property ( ) ,
2013-02-26 14:54:43 -05:00
2013-06-03 10:38:57 +10:00
notifyTitle : function ( count ) {
this . set ( 'notifyCount' , count ) ;
2013-02-22 15:41:12 -05:00
} ,
2013-02-20 13:15:50 -05:00
2015-09-21 08:28:45 +10:00
notifyBackgroundCountIncrement : function ( ) {
if ( ! this . get ( 'hasFocus' ) ) {
this . set ( 'backgroundNotify' , true ) ;
this . set ( 'notifyCount' , ( this . get ( 'notifyCount' ) || 0 ) + 1 ) ;
}
} ,
resetBackgroundNotifyCount : function ( ) {
if ( this . get ( 'hasFocus' ) && this . get ( 'backgroundNotify' ) ) {
this . set ( 'notifyCount' , 0 ) ;
}
this . set ( 'backgroundNotify' , false ) ;
} . observes ( 'hasFocus' ) ,
2013-02-22 15:41:12 -05:00
authenticationComplete : function ( options ) {
2013-05-30 14:12:33 -04:00
// TODO, how to dispatch this to the controller without the container?
var loginController = Discourse . _ _container _ _ . lookup ( 'controller:login' ) ;
return loginController . authenticationComplete ( options ) ;
2013-02-22 15:41:12 -05:00
} ,
2013-02-26 14:54:43 -05:00
2013-04-01 16:28:26 -04:00
/ * *
2013-12-03 14:22:32 -05:00
Start up the Discourse application by running all the initializers we ' ve defined .
2013-04-01 16:28:26 -04:00
@ method start
* * /
2013-02-22 15:41:12 -05:00
start : function ( ) {
2014-05-15 17:01:01 -04:00
2014-06-17 11:01:48 +10:00
$ ( 'noscript' ) . remove ( ) ;
2014-05-28 15:32:42 -04:00
Ember . keys ( requirejs . _eak _seen ) . forEach ( function ( key ) {
2015-08-11 17:34:02 -04:00
if ( /\/pre\-initializers\// . test ( key ) ) {
2014-05-28 15:32:42 -04:00
var module = require ( key , null , null , true ) ;
if ( ! module ) { throw new Error ( key + ' must export an initializer.' ) ; }
Discourse . initializer ( module . default ) ;
}
2014-05-15 17:01:01 -04:00
} ) ;
2015-08-11 17:34:02 -04:00
Ember . keys ( requirejs . _eak _seen ) . forEach ( function ( key ) {
if ( /\/initializers\// . test ( key ) ) {
var module = require ( key , null , null , true ) ;
if ( ! module ) { throw new Error ( key + ' must export an initializer.' ) ; }
var init = module . default ;
var oldInitialize = init . initialize ;
init . initialize = function ( app ) {
2015-08-18 11:10:50 -04:00
oldInitialize . call ( this , app . container , Discourse ) ;
2015-08-11 17:34:02 -04:00
} ;
Discourse . instanceInitializer ( init ) ;
}
} ) ;
2014-01-14 16:59:08 +11:00
} ,
2014-01-15 12:07:42 +11:00
requiresRefresh : function ( ) {
var desired = Discourse . get ( "desiredAssetVersion" ) ;
return desired && Discourse . get ( "currentAssetVersion" ) !== desired ;
} . property ( "currentAssetVersion" , "desiredAssetVersion" ) ,
2015-08-11 17:34:02 -04:00
assetVersion : Ember . computed ( {
get : function ( ) {
return this . get ( "currentAssetVersion" ) ;
} ,
set : function ( key , val ) {
if ( val ) {
if ( this . get ( "currentAssetVersion" ) ) {
this . set ( "desiredAssetVersion" , val ) ;
} else {
this . set ( "currentAssetVersion" , val ) ;
}
2014-01-14 16:59:08 +11:00
}
2015-08-11 17:34:02 -04:00
return this . get ( "currentAssetVersion" ) ;
2014-01-14 16:59:08 +11:00
}
2015-08-11 17:34:02 -04:00
} )
2013-02-22 15:41:12 -05:00
} ) ;
2015-02-26 15:54:39 -05:00
2016-01-04 15:18:09 -05:00
function RemovedObject ( name ) {
this . _removedName = name ;
2015-08-11 14:07:08 -04:00
}
2016-01-04 15:18:09 -05:00
function methodMissing ( ) {
console . warn ( "The " + this . _removedName + " object has been removed from Discourse " +
"and your plugin needs to be updated." ) ;
} ;
2016-02-12 16:57:24 -05:00
Discourse . RemovedObject = RemovedObject ;
[ 'reopen' , 'registerButton' , 'on' , 'off' ] . forEach ( function ( m ) { RemovedObject . prototype [ m ] = methodMissing ; } ) ;
2016-01-04 15:18:09 -05:00
[ 'discourse/views/post' , 'discourse/components/post-menu' ] . forEach ( function ( moduleName ) {
define ( moduleName , [ ] , function ( ) { return new RemovedObject ( moduleName ) ; } ) ;
} ) ;