From ef9b34b2355303e139e1c0bf46b919be0175f69e Mon Sep 17 00:00:00 2001 From: Sven Fuchs Date: Sun, 23 Sep 2012 02:22:13 +0200 Subject: [PATCH] fix persisting the minimized sidebar status --- AssetFile | 1 - assets/javascripts/app/app.coffee | 10 ----- .../app/controllers/sidebar.coffee | 16 ++++++++ .../app/templates/layouts/sidebar.hbs | 2 +- assets/javascripts/vendor/jquery.cookie.js | 40 ------------------- public/javascripts/application.js | 2 +- public/javascripts/vendor.js | 40 ------------------- 7 files changed, 18 insertions(+), 93 deletions(-) delete mode 100644 assets/javascripts/vendor/jquery.cookie.js diff --git a/AssetFile b/AssetFile index ab0468ae..fd7a758e 100644 --- a/AssetFile +++ b/AssetFile @@ -20,7 +20,6 @@ input 'assets/javascripts' do vendor/ansiparse.js vendor/i18n.js vendor/pusher.js - vendor/jquery.cookie.js vendor/jquery.timeago.js vendor/sc-routes.js ) diff --git a/assets/javascripts/app/app.coffee b/assets/javascripts/app/app.coffee index 79da818e..21c55655 100644 --- a/assets/javascripts/app/app.coffee +++ b/assets/javascripts/app/app.coffee @@ -67,13 +67,3 @@ Travis.reopen controller: @controller view.appendTo(@get('rootElement') || 'body') - toggleSidebar: -> - $('body').toggleClass('maximized') - # TODO gotta force redraws here :/ - element = $('') - $('#top .profile').append(element) - Em.run.later (-> element.remove()), 10 - element = $('') - $('#repository').append(element) - Em.run.later (-> element.remove()), 10 - diff --git a/assets/javascripts/app/controllers/sidebar.coffee b/assets/javascripts/app/controllers/sidebar.coffee index bc1af656..c3e45170 100644 --- a/assets/javascripts/app/controllers/sidebar.coffee +++ b/assets/javascripts/app/controllers/sidebar.coffee @@ -4,12 +4,28 @@ Travis.reopen @tickables = [] Travis.Ticker.create(target: this, interval: Travis.INTERVALS.sponsors) + @toggle() if localStorage?.getItem('travis.maximized') + @connectWorkers(Travis.Worker.find()) @connectQueues(Travis.QUEUES) @connectSponsors('decks', Travis.Sponsor.decks(), 1) @connectSponsors('links', Travis.Sponsor.links(), 6) + persist: -> + localStorage?.setItem('travis.maximized', @isMinimized()) + + isMinimized: -> + return $('body').hasClass('maximized'); + + toggle: -> + $('body').toggleClass('maximized') + @persist() + # TODO gotta force redraws here :/ + element = $('') + $('#top .profile').append(element) + Em.run.later (-> element.remove()), 10 + connectSponsors: (name, sponsors, perPage) -> controller = Travis.SponsorsController.create(perPage: perPage, content: sponsors) viewClass = Em.View.extend(templateName: "sponsors/#{name}") diff --git a/assets/javascripts/app/templates/layouts/sidebar.hbs b/assets/javascripts/app/templates/layouts/sidebar.hbs index 8ac8421a..28fec4d7 100644 --- a/assets/javascripts/app/templates/layouts/sidebar.hbs +++ b/assets/javascripts/app/templates/layouts/sidebar.hbs @@ -2,7 +2,7 @@ {{t layouts.application.fork_me}} -
+
 
diff --git a/assets/javascripts/vendor/jquery.cookie.js b/assets/javascripts/vendor/jquery.cookie.js deleted file mode 100644 index dca4d2ef..00000000 --- a/assets/javascripts/vendor/jquery.cookie.js +++ /dev/null @@ -1,40 +0,0 @@ -/** - * jQuery Cookie plugin - * - * Copyright (c) 2010 Klaus Hartl (stilbuero.de) - * Dual licensed under the MIT and GPL licenses: - * http://www.opensource.org/licenses/mit-license.php - * http://www.gnu.org/licenses/gpl.html - * - */ -jQuery.cookie = function (key, value, options) { - // key and at least value given, set cookie... - if (arguments.length > 1 && String(value) !== "[object Object]") { - options = jQuery.extend({}, options); - - if (value === null || value === undefined) { - options.expires = -1; - } - - if (typeof options.expires === 'number') { - var days = options.expires, t = options.expires = new Date(); - t.setDate(t.getDate() + days); - } - - value = String(value); - return (document.cookie = [ - encodeURIComponent(key), '=', - options.raw ? value : encodeURIComponent(value), - options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE - options.path ? '; path=' + options.path : '', - options.domain ? '; domain=' + options.domain : '', - options.secure ? '; secure' : '' - ].join('')); - } - - // key and possibly options given, get cookie... - options = value || {}; - var result, decode = options.raw ? function (s) { return s; } : decodeURIComponent; - return (result = new RegExp('(?:^|; )' + encodeURIComponent(key) + '=([^;]*)').exec(document.cookie)) ? decode(result[1]) : null; -}; - diff --git a/public/javascripts/application.js b/public/javascripts/application.js index 52e9a0e6..0fa89eac 100644 --- a/public/javascripts/application.js +++ b/public/javascripts/application.js @@ -1 +1 @@ -minispade.register('templates', "(function() {Ember.TEMPLATES['builds/list']=Ember.Handlebars.compile(\"{{#if builds.isLoaded}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n {{#each build in builds}}\\n {{#view Travis.BuildsItemView contextBinding=\\\"build\\\"}}\\n \\n \\n \\n \\n \\n \\n \\n {{/view}}\\n {{/each}}\\n \\n
{{t builds.name}}{{t builds.commit}}{{t builds.message}}{{t builds.duration}}{{t builds.finished_at}}
\\n \\n \\n {{number}}\\n \\n \\n \\n {{formatCommit commit}}\\n \\n \\n {{{formatMessage commit.message short=\\\"true\\\"}}}\\n \\n {{formatDuration duration}}\\n \\n {{formatTime finishedAt}}\\n
\\n\\n

\\n \\n

\\n{{else}}\\n
Loading
\\n{{/if}}\\n\");Ember.TEMPLATES['builds/show']=Ember.Handlebars.compile(\"{{#with view}}\\n {{#if build.isLoaded}}\\n
\\n
\\n
\\n
{{t builds.name}}
\\n
\\n \\n \\n {{build.number}}\\n \\n
\\n
{{t builds.finished_at}}
\\n
{{formatTime build.finishedAt}}
\\n
{{t builds.duration}}
\\n
{{formatDuration build.duration}}
\\n
\\n\\n
\\n
{{t builds.commit}}
\\n
{{formatCommit build.commit}}
\\n {{#if commit.compareUrl}}\\n
{{t builds.compare}}
\\n
{{pathFrom build.commit.compareUrl}}
\\n {{/if}}\\n {{#if commit.authorName}}\\n
{{t builds.author}}
\\n
{{build.commit.authorName}}
\\n {{/if}}\\n {{#if commit.committerName}}\\n
{{t builds.committer}}
\\n
{{build.commit.committerName}}
\\n {{/if}}\\n
\\n\\n
{{t builds.message}}
\\n
{{{formatMessage build.commit.message}}}
\\n\\n {{#unless isMatrix}}\\n
{{t builds.config}}
\\n
{{formatConfig build.config}}
\\n {{/unless}}\\n
\\n
\\n\\n {{#if build.isMatrix}}\\n {{view Travis.JobsView jobsBinding=\\\"build.requiredJobs\\\" required=\\\"true\\\"}}\\n {{view Travis.JobsView jobsBinding=\\\"build.allowedFailureJobs\\\"}}\\n {{else}}\\n {{view Travis.LogView contextBinding=\\\"build.jobs.firstObject\\\"}}\\n {{/if}}\\n {{else}}\\n
\\n Loading\\n
\\n {{/if}}\\n{{/with}}\\n\");Ember.TEMPLATES['jobs/list']=Ember.Handlebars.compile(\"{{#if view.jobs.length}}\\n {{#if view.required}}\\n \\n \\n {{else}}\\n
\\n {{t jobs.build_matrix}}\\n
\\n \\n {{/if}}\\n \\n \\n {{#each key in view.build.configKeys}}\\n \\n {{/each}}\\n \\n \\n \\n {{#each job in view.jobs}}\\n {{#view Travis.JobsItemView contextBinding=\\\"job\\\"}}\\n \\n \\n \\n {{#each value in configValues}}\\n \\n {{/each}}\\n {{/view}}\\n {{/each}}\\n \\n
\\n {{t jobs.allowed_failures}}\\n \\n
{{key}}
\\n \\n \\n {{number}}\\n \\n \\n {{formatDuration duration}}\\n \\n {{formatTime finishedAt}}\\n {{value}}
\\n\\n {{#unless view.required}}\\n
\\n

{{t \\\"jobs.allowed_failures\\\"}}

\\n

\\n Allowed Failures are items in your build matrix that are allowed to\\n fail without causing the entire build to be shown as failed.\\n

\\n

\\n You can define allowed failures in the build matrix as follows:\\n

\\n
matrix:\\n  allow_failures:\\n    - rvm: ruby-head
\\n

\\n This lets you add in experimental and preparatory builds to test against versions or\\n configurations that you are not ready to officially support.\\n

\\n
\\n {{/unless}}\\n{{/if}}\\n\");Ember.TEMPLATES['jobs/log']=Ember.Handlebars.compile(\"{{view.logSubscriber}}\\n\\n{{#if log.isLoaded}}\\n
\\n    \\n    \\n  {{{formatLog log.body}}}
\\n\\n {{#if sponsor.name}}\\n

\\n {{t builds.messages.sponsored_by}}\\n {{sponsor.name}}\\n

\\n {{/if}}\\n\\n To top\\n{{else}}\\n
\\n Loading\\n
\\n{{/if}}\\n\");Ember.TEMPLATES['jobs/show']=Ember.Handlebars.compile(\"{{#with view}}\\n {{#if job.isLoaded}}\\n
\\n
\\n
\\n
Job
\\n
{{job.number}}
\\n
{{t jobs.finished_at}}
\\n
{{formatTime job.finishedAt}}
\\n
{{t jobs.duration}}
\\n
{{formatDuration job.duration}}
\\n
\\n\\n
\\n
{{t jobs.commit}}
\\n
{{formatCommit commit}}
\\n {{#if commit.compareUrl}}\\n
{{t jobs.compare}}
\\n
{{pathFrom commit.compareUrl}}
\\n {{/if}}\\n {{#if commit.authorName}}\\n
{{t jobs.author}}
\\n
{{commit.authorName}}
\\n {{/if}}\\n {{#if commit.committerName}}\\n
{{t jobs.committer}}
\\n
{{commit.committerName}}
\\n {{/if}}\\n
\\n\\n
{{t jobs.message}}
\\n
{{formatMessage commit.message}}
\\n
{{t jobs.config}}
\\n
{{formatConfig job.config}}
\\n
\\n\\n {{view Travis.LogView contextBinding=\\\"job\\\"}}}\\n
\\n {{else}}\\n
\\n Loading\\n
\\n {{/if}}\\n{{/with}}\\n\");Ember.TEMPLATES['layouts/home']=Ember.Handlebars.compile(\"
\\n {{outlet top}}\\n
\\n\\n
\\n {{outlet left}}\\n
\\n\\n
\\n {{outlet main}}\\n
\\n\\n
\\n {{outlet right}}\\n
\\n\");Ember.TEMPLATES['layouts/profile']=Ember.Handlebars.compile(\"
\\n {{outlet top}}\\n
\\n\\n
\\n {{outlet left}}\\n
\\n\\n
\\n {{outlet main}}\\n
\\n\\n
\\n
\\n
 \\n
\\n\\n
\\n

Getting started?

\\n

\\n Please read our guide.\\n It will only take a few minutes :)\\n

\\n

\\n You can find detailled docs on our about site.\\n

\\n

\\n If you need help please don't hesitate to join\\n #travis on irc.freenode.net\\n or our mailinglist.\\n

\\n
\\n
\\n\");Ember.TEMPLATES['layouts/sidebar']=Ember.Handlebars.compile(\"\\n {{t layouts.application.fork_me}}\\n\\n\\n
\\n
 \\n
\\n\\n{{outlet decks}}\\n{{outlet workers}}\\n{{outlet queues}}\\n{{outlet links}}\\n\\n
\\n

{{t layouts.about.join}}

\\n \\n
\\n\");Ember.TEMPLATES['layouts/simple']=Ember.Handlebars.compile(\"
\\n {{outlet top}}\\n
\\n\\n
\\n {{outlet main}}\\n
\\n\\n\");Ember.TEMPLATES['layouts/top']=Ember.Handlebars.compile(\"\\n

Travis

\\n
\\n\\n\\n\");Ember.TEMPLATES['profile/accounts']=Ember.Handlebars.compile(\"
\\n
\\n\\n\\n\\n
\\n {{#collection Travis.AccountsListView contentBinding=\\\"controller\\\"}}\\n {{view.name}}\\n

\\n Repositories:\\n {{view.content.reposCount}}\\n

\\n {{/collection}}\\n
\\n\");Ember.TEMPLATES['profile/show']=Ember.Handlebars.compile(\"

{{account.name}}

\\n\\n{{view Travis.ProfileTabsView}}\\n\\n
\\n {{outlet pane}}\\n
\\n\\n\\n\");Ember.TEMPLATES['profile/tabs']=Ember.Handlebars.compile(\"\\n\");Ember.TEMPLATES['profile/tabs/hooks']=Ember.Handlebars.compile(\"

\\n {{{t profiles.show.message.your_repos}}}\\n

\\n\\n{{#if hooks.isLoaded}}\\n {{#if user.isSyncing}}\\n

\\n Please wait while we sync from GitHub\\n

\\n {{else}}\\n

\\n Last synchronized from GitHub: {{formatTime user.syncedAt}}\\n \\n

\\n\\n \\n {{/if}}\\n{{else}}\\n

\\n Loading\\n

\\n{{/if}}\\n\\n\\n\");Ember.TEMPLATES['profile/tabs/user']=Ember.Handlebars.compile(\"\\n\\n
\\n
\\n {{t profiles.show.github}}:\\n
\\n
\\n {{user.login}}\\n
\\n
\\n {{t profiles.show.email}}:\\n
\\n
\\n {{user.email}}\\n
\\n
\\n {{t profiles.show.token}}:\\n
\\n
\\n {{user.token}}\\n
\\n
\\n\\n
\\n {{view Ember.Select\\n contentBinding=\\\"view.locales\\\"\\n selectionBinding=\\\"user.locale\\\"\\n optionLabelPath=\\\"content.name\\\"\\n optionValuePath=\\\"content.key\\\"}}\\n\\n \\n
\\n\\n\\n\");Ember.TEMPLATES['queues/list']=Ember.Handlebars.compile(\"\\n\");Ember.TEMPLATES['repos/list']=Ember.Handlebars.compile(\"
\\n {{view Ember.TextField valueBinding=\\\"controller.search\\\"}}\\n
\\n\\n{{view Travis.ReposListTabsView}}\\n\\n\\n\\n
\\n {{#collection Travis.RepositoriesListView contentBinding=\\\"controller\\\"}}\\n {{#with view.repository}}\\n
\\n \\n {{slug}}\\n
\\n {{lastBuildNumber}}\\n\\n

\\n {{t repositories.duration}}:\\n {{formatDuration lastBuildDuration}},\\n {{t repositories.finished_at}}:\\n {{formatTime lastBuildFinishedAt}}\\n

\\n\\n \\n\\n {{#if description}}\\n
\\n

{{description}}

\\n
\\n {{/if}}\\n {{/with}}\\n {{/collection}}\\n
\\n\");Ember.TEMPLATES['repos/list/tabs']=Ember.Handlebars.compile(\"\\n\\n\");Ember.TEMPLATES['repos/show']=Ember.Handlebars.compile(\"
\\n {{#if view.repository.isLoaded}}\\n {{#with view.repository}}\\n

\\n {{slug}}\\n

\\n\\n

{{description}}

\\n\\n \\n\\n {{view Travis.RepoShowTabsView}}\\n {{view Travis.RepoShowToolsView}}\\n {{/with}}\\n\\n {{else}}\\n Loading\\n {{/if}}\\n\\n
\\n {{outlet pane}}\\n
\\n
\\n\\n\");Ember.TEMPLATES['repos/show/tabs']=Ember.Handlebars.compile(\"\\n\");Ember.TEMPLATES['repos/show/tools']=Ember.Handlebars.compile(\"
\\n \\n
\\n

\\n \\n {{#if view.branches.isLoaded}}\\n {{view Ember.Select contentBinding=\\\"view.branches\\\" selectionBinding=\\\"view.branch\\\" optionLabelPath=\\\"content.commit.branch\\\" optionValuePath=\\\"content.commit.branch\\\"}}\\n {{else}}\\n \\n {{/if}}\\n

\\n

\\n \\n \\n

\\n

\\n \\n \\n

\\n

\\n \\n \\n

\\n

\\n \\n \\n

\\n
\\n
\\n\");Ember.TEMPLATES['sponsors/decks']=Ember.Handlebars.compile(\"

{{t layouts.application.sponsers}}

\\n\\n\\n\\n

\\n \\n {{{t layouts.application.sponsors_link}}}\\n \\n

\\n\");Ember.TEMPLATES['sponsors/links']=Ember.Handlebars.compile(\"
\\n

{{t layouts.application.sponsers}}

\\n\\n
    \\n {{#each controller}}\\n
  • \\n {{{link}}}\\n
  • \\n {{/each}}\\n
\\n\\n

\\n \\n {{{t layouts.application.sponsors_link}}}\\n \\n

\\n
\\n\\n\");Ember.TEMPLATES['stats/show']=Ember.Handlebars.compile(\"
\\n
\\n\");Ember.TEMPLATES['workers/list']=Ember.Handlebars.compile(\"{{#view Travis.WorkersView}}\\n

\\n {{t workers}}\\n \\n

\\n \\n{{/view}}\\n\");\n})();\n//@ sourceURL=templates");minispade.register('app', "(function() {(function() {\nminispade.require('travis');\nminispade.require('auth');\nminispade.require('controllers');\nminispade.require('helpers');\nminispade.require('models');\nminispade.require('pusher');\nminispade.require('routes');\nminispade.require('store');\nminispade.require('tailing');\nminispade.require('templates');\nminispade.require('views');\nminispade.require('config/locales');\nminispade.require('data/sponsors');\n\n Travis.reopen({\n App: Em.Application.extend({\n currentUserBinding: 'auth.user',\n accessTokenBinding: 'auth.user.accessToken',\n authStateBinding: 'auth.state',\n init: function() {\n this._super();\n this.connect();\n this.store = Travis.Store.create();\n this.store.loadMany(Travis.Sponsor, Travis.SPONSORS);\n this.set('auth', Travis.Auth.create({\n store: this.store,\n endpoint: Travis.config.api_endpoint\n }));\n this.routes = new Travis.Routes();\n this.pusher = new Travis.Pusher();\n return this.tailing = new Travis.Tailing();\n },\n signIn: function() {\n return this.get('auth').signIn();\n },\n signOut: function() {\n this.get('auth').signOut();\n return this.routes.route('');\n },\n render: function(name, action, params) {\n var layout;\n layout = this.connectLayout(name);\n layout.activate(action, params || {});\n return $('body').attr('id', name);\n },\n receive: function() {\n return this.store.receive.apply(this.store, arguments);\n },\n connectLayout: function(name) {\n var viewClass;\n if (this.get('layout.name') !== name) {\n name = $.camelize(name);\n viewClass = Travis[\"\" + name + \"Layout\"];\n this.layout = Travis[\"\" + name + \"Controller\"].create({\n parent: this.controller\n });\n this.controller.connectOutlet({\n outletName: 'layout',\n controller: this.layout,\n viewClass: viewClass\n });\n }\n return this.layout;\n },\n connect: function() {\n var view;\n this.controller = Em.Controller.create();\n view = Em.View.create({\n template: Em.Handlebars.compile('{{outlet layout}}'),\n controller: this.controller\n });\n return view.appendTo(this.get('rootElement') || 'body');\n },\n toggleSidebar: function() {\n var element;\n $('body').toggleClass('maximized');\n element = $('');\n $('#top .profile').append(element);\n Em.run.later((function() {\n return element.remove();\n }), 10);\n element = $('');\n $('#repository').append(element);\n return Em.run.later((function() {\n return element.remove();\n }), 10);\n }\n })\n });\n\n}).call(this);\n\n})();\n//@ sourceURL=app");minispade.register('auth', "(function() {(function() {\n\n this.Travis.Auth = Ember.Object.extend({\n iframe: $('