From 73cb59a088cd18180483aa823bc6227d203513b8 Mon Sep 17 00:00:00 2001 From: Sacha Greif Date: Mon, 17 Nov 2014 11:01:37 +0900 Subject: [PATCH] Working on IR 1.0 update --- .meteor/packages | 5 +- .meteor/versions | 21 +- client/helpers/config.js | 3 +- lib/config/at_config.js | 6 - lib/helpers.js | 2 +- lib/router.js | 639 +++++++++--------- packages/telescope-daily/versions.json | 24 +- packages/telescope-newsletter/versions.json | 24 +- packages/telescope-notifications/package.js | 4 +- .../telescope-notifications/versions.json | 80 ++- packages/telescope-search/versions.json | 24 +- packages/telescope-tags/versions.json | 24 +- .../telescope-update-prompt/versions.json | 24 +- public/img/default-avatar.png | Bin 0 -> 4377 bytes 14 files changed, 476 insertions(+), 404 deletions(-) create mode 100644 public/img/default-avatar.png diff --git a/.meteor/packages b/.meteor/packages index 4427df842..a8603bcfc 100644 --- a/.meteor/packages +++ b/.meteor/packages @@ -18,7 +18,7 @@ accounts-ui # Atmosphere Packages -iron:router@1.0.1 +iron:router meteorhacks:fast-render meteorhacks:subs-manager @@ -65,8 +65,9 @@ telescope-module-embedly telescope-newsletter telescope-daily telescope-update-prompt -telescope-notifications telescope-kadira +# telescope-notifications + # Accounts Templates useraccounts:unstyled \ No newline at end of file diff --git a/.meteor/versions b/.meteor/versions index dac475e83..0c290836d 100644 --- a/.meteor/versions +++ b/.meteor/versions @@ -39,17 +39,19 @@ html-tools@1.0.2 htmljs@1.0.2 http@1.0.8 id-map@1.0.1 -iron:core@0.3.4 -iron:dynamic-template@0.4.1 -iron:layout@0.4.1 -iron:router@0.9.4 +iron:controller@1.0.0 +iron:core@1.0.0 +iron:dynamic-template@1.0.0 +iron:layout@1.0.0 +iron:location@1.0.1 +iron:middleware-stack@1.0.0 +iron:router@1.0.1 +iron:url@1.0.0 jparker:crypto-core@0.1.0 jparker:crypto-md5@0.1.1 jparker:gravatar@0.3.0 jquery@1.0.1 json@1.0.1 -kestanous:herald-email@0.2.1 -kestanous:herald@0.6.0 launch-screen@1.0.0 less@1.0.11 livedata@1.0.11 @@ -92,12 +94,10 @@ sacha:spin@2.0.4 service-configuration@1.0.2 session@1.0.4 sha@1.0.1 -softwarerero:accounts-t9n@1.0.0 +softwarerero:accounts-t9n@1.0.2 spacebars-compiler@1.0.3 spacebars@1.0.3 spiderable@1.0.5 -splendido:accounts-templates-core@0.11.0 -splendido:accounts-templates-unstyled@0.11.0 srp@1.0.1 standard-app-packages@1.0.3 stylus@1.0.5 @@ -111,7 +111,6 @@ telescope-lib@0.2.9 telescope-module-embedly@0.2.9 telescope-module-share@0.0.0 telescope-newsletter@0.1.0 -telescope-notifications@0.1.0 telescope-rss@0.0.0 telescope-search@0.0.0 telescope-tags@0.0.0 @@ -124,5 +123,7 @@ twitter@1.1.2 ui@1.0.4 underscore@1.0.1 url@1.0.2 +useraccounts:core@1.2.3 +useraccounts:unstyled@1.2.3 webapp-hashing@1.0.1 webapp@1.1.4 diff --git a/client/helpers/config.js b/client/helpers/config.js index 538923b80..e013b930e 100644 --- a/client/helpers/config.js +++ b/client/helpers/config.js @@ -42,5 +42,6 @@ Statuses={ }; Avatar.options = { - emailHashProperty: 'email_hash' + emailHashProperty: 'email_hash', + defaultAvatarUrl: '/img/default-avatar.png', }; diff --git a/lib/config/at_config.js b/lib/config/at_config.js index 729116055..2453e4738 100644 --- a/lib/config/at_config.js +++ b/lib/config/at_config.js @@ -74,10 +74,4 @@ AccountsTemplates.configure({ showAddRemoveServices: false, showPlaceholders: true, */ -}); - - -// Initialization -Meteor.startup(function(){ - AccountsTemplates.init(); }); \ No newline at end of file diff --git a/lib/helpers.js b/lib/helpers.js index d5b59f5f7..eedfced4c 100644 --- a/lib/helpers.js +++ b/lib/helpers.js @@ -6,7 +6,7 @@ getCurrentTemplate = function() { return Router.current().lookupTemplate(); }; getCurrentRoute = function() { - return Router._currentController.path; + return Router.current().url; }; t=function(message){ var d=new Date(); diff --git a/lib/router.js b/lib/router.js index 4d4a2cc24..6aa6f982c 100644 --- a/lib/router.js +++ b/lib/router.js @@ -124,6 +124,11 @@ Router._filters = { } }, + clearSeenErrors: function () { + clearSeenErrors(); + this.next(); + }, + resetScroll: function () { var scrollTo = window.currentScroll || 0; var $body = $('body'); @@ -255,8 +260,8 @@ if(Meteor.isClient){ // Before Hooks - // Router.onBeforeAction(filters.isReady); - Router.onBeforeAction(clearSeenErrors); + Router.onBeforeAction(filters.isReady); + Router.onBeforeAction(filters.clearSeenErrors); Router.onBeforeAction(filters.canView, {except: ['atSignIn', 'atSignUp', 'atForgotPwd', 'atResetPwd', 'signOut']}); Router.onBeforeAction(filters.hasCompletedProfile); Router.onBeforeAction(filters.isLoggedIn, {only: ['post_submit']}); @@ -288,7 +293,7 @@ if(Meteor.isClient){ PostsListController = FastRender.RouteController.extend({ template: getTemplate('posts_list'), - onBeforeAction: function () { + subscriptions: function () { // take the first segment of the path to get the view, unless it's '/' in which case the view default to 'top' // note: most of the time this.params.slug will be empty this._terms = { @@ -302,10 +307,7 @@ PostsListController = FastRender.RouteController.extend({ } this.postsListSub = coreSubscriptions.subscribe('postsList', this._terms); - return [ - this.postsListSub, - coreSubscriptions.subscribe('postsListUsers', this._terms) - ]; + this.postsListUsersSub = coreSubscriptions.subscribe('postsListUsers', this._terms); }, data: function () { this._terms = { @@ -402,6 +404,9 @@ PostsDigestController = FastRender.RouteController.extend({ // Controller for post pages PostPageController = FastRender.RouteController.extend({ + + template: getTemplate('post_page'), + waitOn: function() { this.postSubscription = coreSubscriptions.subscribe('singlePost', this.params._id); this.postUsersSubscription = coreSubscriptions.subscribe('postUsers', this.params._id); @@ -497,322 +502,316 @@ var getDefaultViewController = function () { //--------------------------------------------------------------------------------------------------// Meteor.startup(function () { - Router.map(function() { + // -------------------------------------------- Post Lists -------------------------------------------- // - // -------------------------------------------- Post Lists -------------------------------------------- // - - Router.route('/', { - name: 'posts_default', - controller: getDefaultViewController() - }); - - Router.route('/top/:limit?', { - name: 'posts_top', - controller: PostsTopController - }); - - // New - - Router.route('/new/:limit?', { - name: 'posts_new', - controller: PostsNewController - }); - - // Best - - Router.route('/best/:limit?', { - name: 'posts_best', - controller: PostsBestController - }); - - // Pending - - Router.route('/pending/:limit?', { - name: 'posts_pending', - controller: PostsPendingController - }); - - - - // TODO: enable /category/new, /category/best, etc. views - - - // Digest - - Router.route('/digest/:year/:month/:day', { - name: 'posts_digest', - controller: PostsDigestController - }); - - Router.route('/digest', { - name: 'posts_digest', - controller: PostsDigestController - }); - - // -------------------------------------------- Post -------------------------------------------- // - - - // Post Page - - Router.route('/posts/:_id', { - name: 'post_page', - template: getTemplate('post_page'), - controller: PostPageController - }); - - Router.route('/posts/:_id/comment/:commentId', { - name: 'post_page', - template: getTemplate('post_page'), - controller: PostPageController, - onAfterAction: function () { - // TODO: scroll to comment position - } - }); - - // Post Edit - - Router.route('/posts/:_id/edit', { - name: 'post_edit', - template: getTemplate('post_edit'), - waitOn: function () { - return [ - coreSubscriptions.subscribe('singlePost', this.params._id), - coreSubscriptions.subscribe('allUsersAdmin') - ]; - }, - data: function() { - return { - postId: this.params._id, - post: Posts.findOne(this.params._id) - }; - }, - fastRender: true - }); - - // Post Submit - - Router.route('/submit', { - name: 'post_submit', - template: getTemplate('post_submit'), - }); - - // -------------------------------------------- Comment -------------------------------------------- // - - // Comment Reply - - Router.route('/comments/:_id', { - name: 'comment_reply', - template: getTemplate('comment_reply'), - controller: CommentPageController, - onAfterAction: function() { - window.queueComments = false; - } - }); - - // Comment Edit - - Router.route('/comments/:_id/edit', { - name: 'comment_edit', - template: getTemplate('comment_edit'), - controller: CommentPageController, - onAfterAction: function() { - window.queueComments = false; - } - }); - - // -------------------------------------------- Users -------------------------------------------- // - - // User Logout - - Router.route('/sign-out', { - name: 'signOut', - onBeforeAction: function() { - Meteor.logout(function() { - return Router.go('/'); - }); - } - }); - - // User Profile - - Router.route('/users/:_idOrSlug', { - name: 'user_profile', - template: getTemplate('user_profile'), - controller: UserPageController - }); - - // User Edit - - Router.route('/users/:_idOrSlug/edit', { - name: 'user_edit', - template: getTemplate('user_edit'), - controller: UserPageController - }); - - // Account - - Router.route('/account', { - name: 'account', - template: getTemplate('user_edit'), - controller: AccountController - }); - - // All Users - - Router.route('/all-users/:limit?', { - name: 'all-users', - template: getTemplate('users'), - waitOn: function() { - var limit = parseInt(this.params.limit) || 20; - return coreSubscriptions.subscribe('allUsers', this.params.filterBy, this.params.sortBy, limit); - }, - data: function() { - var limit = parseInt(this.params.limit) || 20, - parameters = getUsersParameters(this.params.filterBy, this.params.sortBy, limit), - filterBy = (typeof this.params.filterBy === 'string') ? this.params.filterBy : 'all', - sortBy = (typeof this.params.sortBy === 'string') ? this.params.sortBy : 'createdAt'; - Session.set('usersLimit', limit); - return { - users: Meteor.users.find(parameters.find, parameters.options), - filterBy: filterBy, - sortBy: sortBy - }; - }, - fastRender: true - }); - - // Unsubscribe (from notifications) - - Router.route('/unsubscribe/:hash', { - name: 'unsubscribe', - template: getTemplate('unsubscribe'), - data: function() { - return { - hash: this.params.hash - }; - } - }); - - // -------------------------------------------- Other -------------------------------------------- // - - - - // Settings - - Router.route('/settings', { - name: 'settings', - template: getTemplate('settings'), - data: function () { - // we only have one set of settings for now - return { - hasSettings: !!Settings.find().count(), - settings: Settings.findOne() - } - } - }); - - // Loading (for testing purposes) - - Router.route('/loading', { - name: 'loading', - template: getTemplate('loading') - }); - - // Toolbox - - Router.route('/toolbox', { - name: 'toolbox', - template: getTemplate('toolbox') - }); - - // -------------------------------------------- Server-Side -------------------------------------------- // - - // Link Out - - Router.route('/out', { - name: 'out', - where: 'server', - action: function(){ - var query = this.request.query; - if(query.url){ - var decodedUrl = decodeURIComponent(query.url); - var post = Posts.findOne({url: decodedUrl}); - if(post){ - Posts.update(post._id, {$inc: {clicks: 1}}); - } - this.response.writeHead(302, {'Location': query.url}); - this.response.end(); - } - } - }); - - // Notification email - - Router.route('/email/notification/:id?', { - name: 'notification', - where: 'server', - action: function() { - var notification = Notifications.findOne(this.params.id); - var notificationContents = buildEmailNotification(notification); - this.response.write(notificationContents.html); - this.response.end(); - } - }); - - // New user email - - Router.route('/email/new-user/:id?', { - name: 'newUser', - where: 'server', - action: function() { - var user = Meteor.users.findOne(this.params.id); - var emailProperties = { - profileUrl: getProfileUrl(user), - username: getUserName(user) - }; - console.log(Handlebars); - - console.log(Handlebars.templates); - - html = getEmailTemplate('emailNewUser')(emailProperties); - this.response.write(buildEmailTemplate(html)); - this.response.end(); - } - }); - - // New post email - - Router.route('/email/new-post/:id?', { - name: 'newPost', - where: 'server', - action: function() { - var post = Posts.findOne(this.params.id); - html = Handlebars.templates[getTemplate('emailNewPost')](getPostProperties(post)); - this.response.write(buildEmailTemplate(html)); - this.response.end(); - } - }); - - // Account approved email - - Router.route('/email/account-approved/:id?', { - name: 'accountApproved', - where: 'server', - action: function() { - var user = Meteor.users.findOne(this.params.id); - var emailProperties = { - profileUrl: getProfileUrl(user), - username: getUserName(user), - siteTitle: getSetting('title'), - siteUrl: getSiteUrl() - }; - html = Handlebars.templates[getTemplate('emailAccountApproved')](emailProperties); - this.response.write(buildEmailTemplate(html)); - this.response.end(); - } - }); + Router.route('/', { + name: 'posts_default', + controller: getDefaultViewController() }); + Router.route('/top/:limit?', { + name: 'posts_top', + controller: PostsTopController + }); + + // New + + Router.route('/new/:limit?', { + name: 'posts_new', + controller: PostsNewController + }); + + // Best + + Router.route('/best/:limit?', { + name: 'posts_best', + controller: PostsBestController + }); + + // Pending + + Router.route('/pending/:limit?', { + name: 'posts_pending', + controller: PostsPendingController + }); + + + + // TODO: enable /category/new, /category/best, etc. views + + + // Digest + + Router.route('/digest/:year/:month/:day', { + name: 'posts_digest', + controller: PostsDigestController + }); + + Router.route('/digest', { + name: 'posts_digest_default', + controller: PostsDigestController + }); + + // -------------------------------------------- Post -------------------------------------------- // + + + // Post Page + + Router.route('/posts/:_id', { + name: 'post_page', + controller: PostPageController + }); + + Router.route('/posts/:_id/comment/:commentId', { + name: 'post_page_comment', + controller: PostPageController, + onAfterAction: function () { + // TODO: scroll to comment position + } + }); + + // Post Edit + + Router.route('/posts/:_id/edit', { + name: 'post_edit', + template: getTemplate('post_edit'), + waitOn: function () { + return [ + coreSubscriptions.subscribe('singlePost', this.params._id), + coreSubscriptions.subscribe('allUsersAdmin') + ]; + }, + data: function() { + return { + postId: this.params._id, + post: Posts.findOne(this.params._id) + }; + }, + fastRender: true + }); + + // Post Submit + + Router.route('/submit', { + name: 'post_submit', + template: getTemplate('post_submit'), + }); + + // -------------------------------------------- Comment -------------------------------------------- // + + // Comment Reply + + Router.route('/comments/:_id', { + name: 'comment_reply', + template: getTemplate('comment_reply'), + controller: CommentPageController, + onAfterAction: function() { + window.queueComments = false; + } + }); + + // Comment Edit + + Router.route('/comments/:_id/edit', { + name: 'comment_edit', + template: getTemplate('comment_edit'), + controller: CommentPageController, + onAfterAction: function() { + window.queueComments = false; + } + }); + + // -------------------------------------------- Users -------------------------------------------- // + + // User Logout + + Router.route('/sign-out', { + name: 'signOut', + onBeforeAction: function() { + Meteor.logout(function() { + return Router.go('/'); + }); + } + }); + + // User Profile + + Router.route('/users/:_idOrSlug', { + name: 'user_profile', + template: getTemplate('user_profile'), + controller: UserPageController + }); + + // User Edit + + Router.route('/users/:_idOrSlug/edit', { + name: 'user_edit', + template: getTemplate('user_edit'), + controller: UserPageController + }); + + // Account + + Router.route('/account', { + name: 'account', + template: getTemplate('user_edit'), + controller: AccountController + }); + + // All Users + + Router.route('/all-users/:limit?', { + name: 'all-users', + template: getTemplate('users'), + waitOn: function() { + var limit = parseInt(this.params.limit) || 20; + return coreSubscriptions.subscribe('allUsers', this.params.filterBy, this.params.sortBy, limit); + }, + data: function() { + var limit = parseInt(this.params.limit) || 20, + parameters = getUsersParameters(this.params.filterBy, this.params.sortBy, limit), + filterBy = (typeof this.params.filterBy === 'string') ? this.params.filterBy : 'all', + sortBy = (typeof this.params.sortBy === 'string') ? this.params.sortBy : 'createdAt'; + Session.set('usersLimit', limit); + return { + users: Meteor.users.find(parameters.find, parameters.options), + filterBy: filterBy, + sortBy: sortBy + }; + }, + fastRender: true + }); + + // Unsubscribe (from notifications) + + Router.route('/unsubscribe/:hash', { + name: 'unsubscribe', + template: getTemplate('unsubscribe'), + data: function() { + return { + hash: this.params.hash + }; + } + }); + + // -------------------------------------------- Other -------------------------------------------- // + + + + // Settings + + Router.route('/settings', { + name: 'settings', + template: getTemplate('settings'), + data: function () { + // we only have one set of settings for now + return { + hasSettings: !!Settings.find().count(), + settings: Settings.findOne() + } + } + }); + + // Loading (for testing purposes) + + Router.route('/loading', { + name: 'loading', + template: getTemplate('loading') + }); + + // Toolbox + + Router.route('/toolbox', { + name: 'toolbox', + template: getTemplate('toolbox') + }); + + // -------------------------------------------- Server-Side -------------------------------------------- // + + // Link Out + + Router.route('/out', { + name: 'out', + where: 'server', + action: function(){ + var query = this.request.query; + if(query.url){ + var decodedUrl = decodeURIComponent(query.url); + var post = Posts.findOne({url: decodedUrl}); + if(post){ + Posts.update(post._id, {$inc: {clicks: 1}}); + } + this.response.writeHead(302, {'Location': query.url}); + this.response.end(); + } + } + }); + + // Notification email + + Router.route('/email/notification/:id?', { + name: 'notification', + where: 'server', + action: function() { + var notification = Notifications.findOne(this.params.id); + var notificationContents = buildEmailNotification(notification); + this.response.write(notificationContents.html); + this.response.end(); + } + }); + + // New user email + + Router.route('/email/new-user/:id?', { + name: 'newUser', + where: 'server', + action: function() { + var user = Meteor.users.findOne(this.params.id); + var emailProperties = { + profileUrl: getProfileUrl(user), + username: getUserName(user) + }; + console.log(Handlebars); + + console.log(Handlebars.templates); + + html = getEmailTemplate('emailNewUser')(emailProperties); + this.response.write(buildEmailTemplate(html)); + this.response.end(); + } + }); + + // New post email + + Router.route('/email/new-post/:id?', { + name: 'newPost', + where: 'server', + action: function() { + var post = Posts.findOne(this.params.id); + html = Handlebars.templates[getTemplate('emailNewPost')](getPostProperties(post)); + this.response.write(buildEmailTemplate(html)); + this.response.end(); + } + }); + + // Account approved email + + Router.route('/email/account-approved/:id?', { + name: 'accountApproved', + where: 'server', + action: function() { + var user = Meteor.users.findOne(this.params.id); + var emailProperties = { + profileUrl: getProfileUrl(user), + username: getUserName(user), + siteTitle: getSetting('title'), + siteUrl: getSiteUrl() + }; + html = Handlebars.templates[getTemplate('emailAccountApproved')](emailProperties); + this.response.write(buildEmailTemplate(html)); + this.response.end(); + } + }); }); // adding common subscriptions that's need to be loaded on all the routes diff --git a/packages/telescope-daily/versions.json b/packages/telescope-daily/versions.json index 890579018..223548942 100644 --- a/packages/telescope-daily/versions.json +++ b/packages/telescope-daily/versions.json @@ -72,21 +72,37 @@ "id-map", "1.0.1" ], + [ + "iron:controller", + "1.0.0" + ], [ "iron:core", - "0.3.4" + "1.0.0" ], [ "iron:dynamic-template", - "0.4.1" + "1.0.0" ], [ "iron:layout", - "0.4.1" + "1.0.0" + ], + [ + "iron:location", + "1.0.1" + ], + [ + "iron:middleware-stack", + "1.0.0" ], [ "iron:router", - "0.9.4" + "1.0.1" + ], + [ + "iron:url", + "1.0.0" ], [ "jquery", diff --git a/packages/telescope-newsletter/versions.json b/packages/telescope-newsletter/versions.json index 9e07ee289..2cdd71afd 100644 --- a/packages/telescope-newsletter/versions.json +++ b/packages/telescope-newsletter/versions.json @@ -76,21 +76,37 @@ "id-map", "1.0.1" ], + [ + "iron:controller", + "1.0.0" + ], [ "iron:core", - "0.3.4" + "1.0.0" ], [ "iron:dynamic-template", - "0.4.1" + "1.0.0" ], [ "iron:layout", - "0.4.1" + "1.0.0" + ], + [ + "iron:location", + "1.0.1" + ], + [ + "iron:middleware-stack", + "1.0.0" ], [ "iron:router", - "0.9.4" + "1.0.1" + ], + [ + "iron:url", + "1.0.0" ], [ "jquery", diff --git a/packages/telescope-notifications/package.js b/packages/telescope-notifications/package.js index 84efcde67..bfc9f26ed 100644 --- a/packages/telescope-notifications/package.js +++ b/packages/telescope-notifications/package.js @@ -10,8 +10,8 @@ Package.onUse(function (api) { 'telescope-lib', 'telescope-base', 'telescope-email', - 'kestanous:herald@0.6.0', - 'kestanous:herald-email@0.2.1' + 'kestanous:herald', + 'kestanous:herald-email' ], ['client', 'server']); api.use([ diff --git a/packages/telescope-notifications/versions.json b/packages/telescope-notifications/versions.json index c033a2869..21c9be561 100644 --- a/packages/telescope-notifications/versions.json +++ b/packages/telescope-notifications/versions.json @@ -1,12 +1,16 @@ { "dependencies": [ + [ + "accounts-base", + "1.1.2" + ], [ "application-configuration", "1.0.3" ], [ - "autoupdate", - "1.1.3" + "artwells:queue", + "0.0.3" ], [ "base64", @@ -52,10 +56,6 @@ "ejson", "1.0.4" ], - [ - "fastclick", - "1.0.1" - ], [ "follower-livedata", "1.0.2" @@ -76,29 +76,41 @@ "htmljs", "1.0.2" ], - [ - "http", - "1.0.8" - ], [ "id-map", "1.0.1" ], + [ + "iron:controller", + "1.0.0" + ], [ "iron:core", - "0.3.4" + "1.0.0" ], [ "iron:dynamic-template", - "0.4.1" + "1.0.0" ], [ "iron:layout", - "0.4.1" + "1.0.0" + ], + [ + "iron:location", + "1.0.1" + ], + [ + "iron:middleware-stack", + "1.0.0" ], [ "iron:router", - "0.9.4" + "1.0.1" + ], + [ + "iron:url", + "1.0.0" ], [ "jquery", @@ -110,20 +122,20 @@ ], [ "kestanous:herald", - "0.6.0" + "1.1.3" ], [ "kestanous:herald-email", - "0.2.1" - ], - [ - "launch-screen", - "1.0.0" + "0.4.2" ], [ "livedata", "1.0.11" ], + [ + "localstorage", + "1.0.1" + ], [ "logging", "1.0.5" @@ -132,10 +144,6 @@ "meteor", "1.1.3" ], - [ - "meteor-platform", - "1.2.0" - ], [ "minifiers", "1.1.2" @@ -144,14 +152,14 @@ "minimongo", "1.0.5" ], - [ - "mobile-status-bar", - "1.0.1" - ], [ "mongo", "1.0.8" ], + [ + "mongo-livedata", + "1.0.6" + ], [ "observe-sequence", "1.0.3" @@ -172,10 +180,6 @@ "reactive-var", "1.0.3" ], - [ - "reload", - "1.1.1" - ], [ "retry", "1.0.1" @@ -185,8 +189,8 @@ "1.0.2" ], [ - "session", - "1.0.4" + "service-configuration", + "1.0.2" ], [ "spacebars", @@ -196,10 +200,6 @@ "spacebars-compiler", "1.0.3" ], - [ - "standard-app-packages", - "1.0.3" - ], [ "telescope-base", "0.0.0" @@ -232,10 +232,6 @@ "underscore", "1.0.1" ], - [ - "url", - "1.0.2" - ], [ "webapp", "1.1.4" diff --git a/packages/telescope-search/versions.json b/packages/telescope-search/versions.json index c588be666..33aaa669e 100644 --- a/packages/telescope-search/versions.json +++ b/packages/telescope-search/versions.json @@ -68,21 +68,37 @@ "id-map", "1.0.1" ], + [ + "iron:controller", + "1.0.0" + ], [ "iron:core", - "0.3.4" + "1.0.0" ], [ "iron:dynamic-template", - "0.4.1" + "1.0.0" ], [ "iron:layout", - "0.4.1" + "1.0.0" + ], + [ + "iron:location", + "1.0.1" + ], + [ + "iron:middleware-stack", + "1.0.0" ], [ "iron:router", - "0.9.4" + "1.0.1" + ], + [ + "iron:url", + "1.0.0" ], [ "jquery", diff --git a/packages/telescope-tags/versions.json b/packages/telescope-tags/versions.json index c588be666..33aaa669e 100644 --- a/packages/telescope-tags/versions.json +++ b/packages/telescope-tags/versions.json @@ -68,21 +68,37 @@ "id-map", "1.0.1" ], + [ + "iron:controller", + "1.0.0" + ], [ "iron:core", - "0.3.4" + "1.0.0" ], [ "iron:dynamic-template", - "0.4.1" + "1.0.0" ], [ "iron:layout", - "0.4.1" + "1.0.0" + ], + [ + "iron:location", + "1.0.1" + ], + [ + "iron:middleware-stack", + "1.0.0" ], [ "iron:router", - "0.9.4" + "1.0.1" + ], + [ + "iron:url", + "1.0.0" ], [ "jquery", diff --git a/packages/telescope-update-prompt/versions.json b/packages/telescope-update-prompt/versions.json index 8e57c51f6..6f12e97d0 100644 --- a/packages/telescope-update-prompt/versions.json +++ b/packages/telescope-update-prompt/versions.json @@ -68,21 +68,37 @@ "id-map", "1.0.1" ], + [ + "iron:controller", + "1.0.0" + ], [ "iron:core", - "0.3.4" + "1.0.0" ], [ "iron:dynamic-template", - "0.4.1" + "1.0.0" ], [ "iron:layout", - "0.4.1" + "1.0.0" + ], + [ + "iron:location", + "1.0.1" + ], + [ + "iron:middleware-stack", + "1.0.0" ], [ "iron:router", - "0.9.4" + "1.0.1" + ], + [ + "iron:url", + "1.0.0" ], [ "jquery", diff --git a/public/img/default-avatar.png b/public/img/default-avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..d38546078e7b93a21cc91280af87a9ecdc3e5674 GIT binary patch literal 4377 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 T$^ACm00000NkvXXu0mjf4#_1M literal 0 HcmV?d00001