Adds Google analytics.

Adds Google analytics.

--- app/assets/javascripts/google_analytics.js.coffee
+++ app/assets/javascripts/google_analytics.js.coffee
@@ -0,0 +1,43 @@
+class @GoogleAnalytics
+
+  @load: ->
+    # Google Analytics depends on a global _gaq array. window is the global scope.
+    window._gaq = []
+    window._gaq.push ["_setAccount", GoogleAnalytics.analyticsId()]
+
+    # Create a script element and insert it in the DOM
+    ga = document.createElement("script")
+    ga.type = "text/javascript"
+    ga.async = true
+    ga.src = ((if "https:" is document.location.protocol then "https://ssl" else "http://www")) + ".google-analytics.com/ga.js"
+    firstScript = document.getElementsByTagName("script")[0]
+    firstScript.parentNode.insertBefore ga, firstScript
+
+    # If Turbolinks is supported, set up a callback to track pageviews on page:change.
+    # If it isn't supported, just track the pageview now.
+    if typeof Turbolinks isnt 'undefined' and Turbolinks.supported
+      document.addEventListener "page:change", (->
+        GoogleAnalytics.trackPageview()
+      ), true
+    else
+      GoogleAnalytics.trackPageview()
+
+  @trackPageview: (url) ->
+    unless GoogleAnalytics.isLocalRequest()
+      if url
+        window._gaq.push ["_trackPageview", url]
+      else
+        window._gaq.push ["_trackPageview"]
+      window._gaq.push ["_trackPageLoadTime"]
+
+  @isLocalRequest: ->
+    GoogleAnalytics.documentDomainIncludes "local"
+
+  @documentDomainIncludes: (str) ->
+    document.domain.indexOf(str) isnt -1
+
+  @analyticsId: ->
+    # your google analytics ID(s) here...
+    "ENV['GOOGLE_ANALYTICS']"
+
+GoogleAnalytics.load()


Really Really Stop test suite from crashing when this one fails.

--- test/server/functional/prepaid.spec.coffee
+++ test/server/functional/prepaid.spec.coffee
@@ -52,6 +52,7 @@
             request.post {uri: url, json: redeemer }, (err, res, body) ->
               expect(body.redeemers?.length).toBe(1)
               expect(res.statusCode).toBe(200)
+              return done() unless res.statusCode is 200
               prepaid = Prepaid.findById body._id, (err, prepaid) ->
                 expect(err).toBeNull()
                 expect(prepaid.get('redeemers').length).toBe(1)


added todos controller

added todos controller

error: pathspec 'app/assets/javascripts/dashit/controllers/todos.js.coffee' did not match any file(s) known to git

--- app/assets/javascripts/dashit/controllers/todos.js.coffee
+++ app/assets/javascripts/dashit/controllers/todos.js.coffee
@@ -0,0 +1,5 @@
+DashIt.todosController = Ember.ResourceController.extend
+  resourceType: DashIt.Todo
+
+  _resourceUrl: ->
+    return @get("project")._resourceUrl() + "/todos"


updates

updates

--- src/businesscat.coffee
+++ src/businesscat.coffee
@@ -1,11 +1,25 @@
 # Description:
 #   Business cat is summoned when business jargon is used
 #
+# Dependencies:
+#   None
+#
+# Configuration:
+#   None
+#
 # Commands:
-#   [business jargon] - Returns an image of business cat (* see jargon array for list of trigger phrases)
+#   business jargon - summons business cat
+#
+# Notes
+#   See jargon array for list of trigger phrases
 #
 # Author:
-#   Morgan Wigmanich (okize)
+#   Morgan Wigmanich <okize123@gmail.com> (https://github.com/okize)
+
+module.exports = (robot) ->
+
+  robot.hear regex, (msg) ->
+    msg.send msg.random images

 jargon = [
   'action items',
@@ -77,8 +91,4 @@
   'http://i3.kym-cdn.com/photos/images/original/000/100/100/Something-a-boss-does-Something-a-cat-does.jpg'
 ]

-regex = new RegExp jargon.join('|'), 'ig'
-
-module.exports = (robot) ->
-  robot.hear regex, (msg) ->
-    msg.send msg.random images
+regex = new RegExp jargon.join('|'), 'ig'


Add pathfinding classes wireframe

Add pathfinding classes wireframe

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/ipelekhan/isolines.git/'


Provider: Marathon: add config and enable provider as in beta mode

--- client/app/lib/providers/config.coffee
+++ client/app/lib/providers/config.coffee
@@ -251,6 +251,39 @@
           { title: 'Premium Locally redundant storage (P_LRS)',  value: 'Premium_LRS' }
         ]

+  marathon                 :
+    name                   : 'Marathon'
+    link                   : 'https://mesosphere.github.io/marathon/'
+    title                  : 'Marathon Credential'
+    color                  : '#B52025'
+    supported              : yes
+    enabled                : 'beta'
+    defaultTemplate        : require './templates/marathon'
+    description            : 'A container orchestration platform for Mesos and DC/OS'
+    advancedFields         : [
+      'request_timeout',
+      'deployment_timeout'
+    ]
+    credentialFields       :
+      url                  :
+        label              : 'URL'
+        placeholder        : 'url of marathon application'
+      basic_auth_user      :
+        label              : 'Basic Auth User'
+        placeholder        : 'basic auth user for marathon'
+        required           : no
+      basic_auth_password  :
+        label              : 'Basic Auth Password'
+        type               : 'password'
+        placeholder        : 'basic auth password for marathon'
+        required           : no
+      request_timeout      :
+        label              : 'Req. Timeout'
+        placeholder        : 'request timeout value in seconds'
+      deployment_timeout   :
+        label              : 'Deploy Timeout'
+        placeholder        : 'deploy timeout value in seconds'
+
   rackspace                :
     name                   : 'Rackspace'
     link                   : 'http://www.rackspace.com'


let me in

let me in

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/jencka/2001-A-SPACE-SACRIFICE.git/'


Uses GitHub Releases API to download atom-shell.

--- tasks/update-atom-shell-task.coffee
+++ tasks/update-atom-shell-task.coffee
@@ -5,6 +5,46 @@

 module.exports = (grunt) ->
   {spawn, mkdir, rm, cp} = require('./task-helpers')(grunt)
+
+  accessToken = null
+  getTokenFromKeychain = ->
+    accessToken ?= process.env['ATOM_ACCESS_TOKEN']
+
+  callAtomShellReposApi = (path, callback) ->
+    options =
+      url: "https://api.github.com/repos/atom/atom-shell#{path}"
+      proxy: process.env.http_proxy || process.env.https_proxy
+      headers:
+        authorization: "token #{getTokenFromKeychain()}"
+        accept: 'application/vnd.github.manifold-preview'
+    request options, (error, response, body) ->
+      body = JSON.parse(body) if not error?
+      callback(error, response, body)
+
+  findReleaseIdFromAtomShellVersion = (version, callback) ->
+    callAtomShellReposApi '/releases', (error, response, data) ->
+      if error?
+        grunt.log.error('Cannot get releases of atom-shell')
+        callback(error)
+      else
+        for release in data when release.tag_name is version
+          callback(null, release.id)
+          return
+        grunt.log.error("There is no #{version} release of atom-shell")
+        callback(false)
+
+  getAtomShellDownloadUrl = (version, releaseId, callback) ->
+    callAtomShellReposApi "/releases/#{releaseId}/assets", (error, response, data) ->
+      if error?
+        grunt.log.error("Cannot get assets of atom-shell's #{version} release")
+        callback(error)
+      else
+        filename = "atom-shell-#{version}-#{process.platform}.zip"
+        for asset in data when asset.name is filename and asset.state is 'uploaded'
+          callback(null, asset.url)
+          return
+        grunt.log.error("Cannot get url of atom-shell's release asset")
+        callback(false)

   getAtomShellVersion = ->
     versionPath = path.join('atom-shell', 'version')
@@ -18,14 +58,25 @@
   isAtomShellVersionCached = (version) ->
     grunt.file.isFile(getCachePath(version), 'version')

-  downloadAtomShell = (version, callback) ->
+  downloadAtomShell = (version, url, callback) ->
     options =
-      url: "https://gh-contractor-zcbenz.s3.amazonaws.com/atom-shell/#{version}/atom-shell-#{version}-darwin.zip"
+      url: url
+      followRedirect: false
       proxy: process.env.http_proxy || process.env.https_proxy
+
+    # Only set headers for GitHub host, the url could also be a S3 link and
+    # setting headers for it would make the request fail.
+    if require('url').parse(url).hostname is 'api.github.com'
+      options.headers =
+        authorization: "token #{getTokenFromKeychain()}"
+        accept: 'application/octet-stream'

     inputStream = request(options)
     inputStream.on 'response', (response) ->
-      if response.statusCode is 200
+      if response.statusCode is 302
+        # Manually handle redirection so headers would not be sent for S3.
+        downloadAtomShell(version, response.headers.location, callback)
+      else if response.statusCode is 200
         grunt.log.writeln("Downloading atom-shell version #{version.cyan}")
         cacheDirectory = getCachePath(version)
         rm(cacheDirectory)
@@ -40,6 +91,17 @@
         else
           grunt.log.error("atom-shell #{version.cyan} request failed")
         callback(false)
+
+  downloadAtomShellOfVersion = (version, callback) ->
+    findReleaseIdFromAtomShellVersion version, (error, releaseId) ->
+      if error?
+        callback(error)
+      else
+        getAtomShellDownloadUrl version, releaseId, (error, url) ->
+          if error?
+            callback(error)
+          else
+            downloadAtomShell version, url, callback

   unzipAtomShell = (zipPath, callback) ->
     grunt.log.writeln('Unzipping atom-shell')
@@ -74,7 +136,7 @@
           installAtomShell(atomShellVersion)
           rebuildNativeModules(currentAtomShellVersion, done)
         else
-          downloadAtomShell atomShellVersion, (error, zipPath) ->
+          downloadAtomShellOfVersion atomShellVersion, (error, zipPath) ->
             if zipPath?
               unzipAtomShell zipPath, (error) ->
                 if error?


create pickOneDropdown (based on pickOne)

error: pathspec 'app/assets/javascripts/components/core-tools/pick-one-dropdown.cjsx' did not match any file(s) known to git

--- app/assets/javascripts/components/core-tools/pick-one-dropdown.cjsx
+++ app/assets/javascripts/components/core-tools/pick-one-dropdown.cjsx
@@ -0,0 +1,87 @@
+React = require 'react'
+GenericTask = require './generic'
+# Markdown = require '../../components/markdown'
+
+NOOP = Function.prototype
+
+# Summary = React.createClass
+#   displayName: 'SingleChoiceSummary'
+
+#   getDefaultProps: ->
+#     task: null
+#     annotation: null
+#     expanded: false
+
+#   getInitialState: ->
+#     expanded: @props.expanded
+
+#   render: ->
+#

+#

+#         {@props.task.question}
+#         {if @state.expanded
+#           <button type="button" className="toggle-more" onClick={@setState.bind this, expanded: false, null}>Less</button>
+#         else
+#           <button type="button" className="toggle-more" onClick={@setState.bind this, expanded: true, null}>More</button>}
+#

+#

+#         {if @state.expanded
+#           for answer, i in @props.task.answers
+#             answer._key ?= Math.random()
+#

+#               {if i is @props.annotation.value
+#
+#               else
+#                 }
+#               {@props.task.answers[i].label}
+#

+#         else if @props.annotation.value?
+#

+#
+#             {@props.task.answers[@props.annotation.value].label}
+#

+#         else
+#
No answer
}
+#

+#

+
+module.exports = React.createClass
+  displayName: 'SingleChoiceTask'
+
+  statics:
+    # Summary: Summary # don't use Summary (yet?)
+
+    getDefaultAnnotation: ->
+      value: null
+
+  getDefaultProps: ->
+    task: null
+    annotation: null
+    onChange: NOOP
+
+  render: ->
+    answers = for k, answer of @props.task.tool_config.options
+
+      answer._key ?= Math.random()
+      checked = k is @props.annotation.value
+
+      classes = ['minor-button']
+      classes.push 'active' if checked
+      classes = classes.join ' '
+
+
+        <input type="radio" name="input0" value={k} checked={checked} onChange={@handleChange.bind this, k} />
+        {answer.label}
+
+
+    <GenericTask ref="inputs" question={@props.task.instruction} help={@props.task.help} answers={answers} />
+
+  handleChange: (index, e) ->
+    if e.target.checked
+      checked = $(@refs.inputs.getDOMNode()).find('input[type=radio]:checked')
+      @props.onChange({
+        value: checked.val()
+      })
+      @forceUpdate() # update the radiobuttons after selection
+
+window.React = React


RemoteApi: processHookRequests: reply pong to ping requests for hooks

--- workers/social/lib/social/remoteapi.coffee
+++ workers/social/lib/social/remoteapi.coffee
@@ -34,6 +34,19 @@
     res.status(200)
       .send { ok: true, data }
       .end()
+
+
+processHookRequests = (req, res) ->
+
+  # TODO update this to use a dynamically generated list of hook req. ~ GG
+  # this is currently GitHub only, we can remove this step from here
+  # and move it to the Hooks implementation at some point if we need.
+  if /^GitHub-/.test req.get 'user-agent'
+    if req.get('X-GitHub-Event') is 'ping'
+      (sendResponse res) null, { pong: true }
+      return yes
+
+  return no

 processPayload = (payload, callback) ->
@@ -170,6 +183,8 @@
         sendApiError res, err
         return

+      return  if processHookRequests req, res
+
       context         = getContextFromSession session
       constructorName = getConstructorName model, Models


Add usersWithRole to the Auth class in auth.coffee

This allows scripts to list out all users with a specific role by calling robot.auth.usersWithRole

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/sharabash/hubot.git/'


Getting a view from an object

Getting a view from an object

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/AppGyver/supersonic.git/'


Close problem on success.

Close problem on success.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/cganas/picoCTF-web.git/'


Added a Zappa implementation. Anything shorter?

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/JoakimMisund/extreme_startup_servers.git/'


add tests for Apollos.user

add tests for Apollos.user

error: pathspec 'tests/mocha/apollos/lib/user.coffee' did not match any file(s) known to git

--- tests/mocha/apollos/lib/user.coffee
+++ tests/mocha/apollos/lib/user.coffee
@@ -0,0 +1,34 @@
+MochaWeb?.testOnly ->
+
+  assert = chai.assert
+
+  describe 'Apollos', ->
+    describe 'user', ->
+
+      beforeEach ->
+        Meteor.flush()
+
+      it 'should be defined', ->
+        assert typeof Apollos.user is 'function'
+      it 'should return object', ->
+        assert typeof Apollos.user() is 'object'
+
+      describe 'when not signed in', ->
+
+        it 'should have no keys', ->
+          assert.equal Object.keys(Apollos.user()).length, 0
+
+      describe 'when signed in', ->
+
+        before ->
+          Apollos.user.create 'apollos.user@newspring.cc', 'testPassword'
+          @user = Meteor.users.findOne 'emails.address': 'apollos.user@newspring.cc'
+
+        it 'should have id', ->
+          assert typeof @user._id is 'string'
+          assert @user._id.length > 0
+
+        it 'should have emails', ->
+          assert typeof @user.emails is 'array'
+          assert.equals @user.emails[0].address, 'apollos.user@newspring.cc'
+          assert.equals @user.emails[0].verified, false


Fix typo

Fix typo

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/Hiroto-K/MP3-Downloader.git/'


More refactoring of timeline

More refactoring of timeline

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/damianb/crimson.git/'


added class dnode.cluster.Director  to orcestrate multiple contexts in different processes

error: pathspec 'modules/dnode/platforms/node/lib/cluster/Director.coffee' did not match any file(s) known to git

--- modules/dnode/platforms/node/lib/cluster/Director.coffee
+++ modules/dnode/platforms/node/lib/cluster/Director.coffee
@@ -0,0 +1,151 @@
+
+spawn = require('child_process').spawn
+
+module.exports =
+
+    ##
+    ##
+    ##
+    class Director extends floyd.Context
+
+
+        ##
+        ##
+        ##
+        configure: (config)->
+
+            @_processes = {}
+
+            config.data ?= {}
+            config.data.workers_dir ?= 'workers'
+
+            if !floyd.tools.files.exists config.data.workers_dir
+                floyd.tools.files.mkdir config.data.workers_dir
+                floyd.tools.files.chown config.data.workers_dir, floyd.system.UID, floyd.system.GID
+                floyd.tools.files.chmod config.data.workers_dir, '2755'
+
+            if !(socket = config.data?.socket)
+                socket = floyd.tools.files.tmp 'dnode.cluster.Director-'+config.id, 'sock'
+
+            if floyd.tools.files.exists socket
+                floyd.tools.files.rm socket
+
+            floyd.system.GID = floyd.system.UID = 0
+
+            super new floyd.Config
+
+                data:
+                    socket: socket
+
+                children: [
+
+                    id: 'bridge'
+
+                    type: 'dnode.Bridge'
+
+                    data:
+                        ports: [socket]
+
+                ]
+
+            , config
+
+
+
+        ##
+        ##
+        ##
+        _createChild: (child, next)->
+
+            if !child.isWorker
+                super child, next
+
+            else
+                child.id ?= @__ctxID()
+
+                ##
+                child = new floyd.Config
+                    _spawned: 0
+
+                    type: 'dnode.Bridge'
+
+                    data:
+                        gateways: [
+                            path: @data.socket
+                        ]
+
+                        logger:
+                            level: @data.find 'logger.level'
+
+                    system:
+                        appdir: floyd.system.appdir+'/'+@data.workers_dir+'/'+child.id
+                        tempdir: floyd.system.appdir+'/'+@data.workers_dir+'/'+child.id+'/.floyd/tmp'
+
+                    ORIGIN: @ID
+
+                , child
+
+                ##
+                @logger.info 'spawning child %s.%s', @ID, child.id
+                @_spawnChild child, next
+
+
+        ##
+        ##
+        ##
+        _spawnChild: (child, next)->
+            child._spawned++
+
+            files = floyd.tools.files
+            ##
+            if !files.exists child.system.appdir
+                files.mkdir child.system.appdir
+
+
+            if !files.exists child.system.tempdir
+                files.mkdir child.system.tempdir
+
+            ##
+            name = child.system.appdir+'/.app.js'
+            model = floyd.tools.objects.serialize child, 4
+
+            files.write name, '// generated file... do not edit!\nrequire("floyd").init('+model+')'
+
+            ##
+            proc = @_processes[child.id] = spawn 'node', [child.system.appdir+'/.app'],
+                cwd: child.system.appdir
+
+            proc.stdout.pipe process.stdout
+
+            proc.stderr.pipe process.stderr
+
+            proc.on 'close', ()=>
+                if @_status.indexOf('shutdown') is -1
+                    if child._spawned < 100
+                        @logger.info 're-spawning child %s.%s (%s)', @ID, child.id, child._spawned
+                        @_spawnChild child
+                    else
+                        @logger.warning 'respawning FAILED for %s.%s (%s)', @ID, child.id, child._spawned
+
+            ##
+            next?()
+
+
+
+        ##
+        ##
+        ##
+        stop: (done)->
+            super (err)=>
+                return done(err) if err
+
+                @_process @_processes,
+                    each: (id, child, next)=>
+                        child.on 'close', ()->
+                            next()
+
+                        child.kill()
+
+                    done: done
+
+


fs-plust -> fs-plus

fs-plust -> fs-plus

--- src/module-cache.coffee
+++ src/module-cache.coffee
@@ -14,7 +14,7 @@
   registered: false
   resourcePath: null

-# isAbsolute is inlined from fs-plus so that fs-plust itself can be required
+# isAbsolute is inlined from fs-plus so that fs-plus itself can be required
 # from this cache.
 if process.platform is 'win32'
   isAbsolute = (pathToCheck) ->


Remove the leftover console.log

Remove the leftover console.log

--- packages/rocketchat-importer/client/admin/adminImportPrepare.coffee
+++ packages/rocketchat-importer/client/admin/adminImportPrepare.coffee
@@ -32,7 +32,6 @@

 		for blob in files
 			template.preparing.set true
-			console.log blob.type, importer.fileTypeRegex
 			if not importer.fileTypeRegex.test blob.type
 				toastr.error t('Invalid_Import_File_Type')
 				template.preparing.set false


add notification class for helping user enable mix-blend-mode

error: pathspec 'src/notification.coffee' did not match any file(s) known to git

--- src/notification.coffee
+++ src/notification.coffee
@@ -0,0 +1,12 @@
+class MixBlendModeNotification
+  constructor: ->
+    chrome.notifications.create '',
+      type: 'basic',
+      title: 'Melatonin',
+      message: 'Hey! If you activate Chrome\'s experimental web features you\'ll get better contrast for reading or viewing images with Melatonin!',
+      iconUrl: './thin256.png'
+      (id) -> chrome.notifications.onClicked.addListener (_id) ->
+        if _id is id
+          chrome.tabs.create url: "chrome://flags/#enable-experimental-web-platform-features"
+
+module.exports = MixBlendModeNotification


Adding an incomplete asteroids example.

Adding an incomplete asteroids example.

error: pathspec 'examples/asteroids.coffee' did not match any file(s) known to git

--- examples/asteroids.coffee
+++ examples/asteroids.coffee
@@ -0,0 +1,119 @@
+#
+# A version of Asteroids written in Wolf.
+#
+
+
+# The ship piloted by the player.
+class Ship extends wolf.Rectangle
+
+    @key : 'Ship'
+
+    constructor : (opts = {}) ->
+        opts.height ?= 20
+        opts.width ?= 20
+        opts.direction ?= new wolf.Vector(0, -1)
+        opts.speed ?= 0.1
+        opts.orientation ?= 90
+        super(opts)
+
+
+    # Return a bullet fired by the ship.
+    shootBullet : () ->
+        bullet = new Bullet(
+            x: @x,
+            y: @y - @height,
+            direction: @direction.copy()
+        )
+
+    # Apply the shift's thrusters.
+    thrust : () ->
+        impulse = @direction.scale(0.5)
+        @applyImpulse(impulse)
+
+    # Jump to a random point on screen.
+    jumpIntoHyperspace : (xmax, ymax) ->
+        x = Math.random() * xmax
+        y = Math.random() * ymax
+
+# Asteroids floating around space.
+class Asteroid extends wolf.Circle
+
+    @key : 'Asteroid'
+
+    constructor : (opts = {}) ->
+        defaults =
+            x: wolf.random(0, 800)
+            y: wolf.random(0, 600)
+            radius: 10
+            speed: 0.2
+            direction: new wolf.Vector(wolf.random(-1, 1), wolf.random(-1, 1))
+            dragCoefficient: 0
+
+        opts = wolf.defaults(opts, defaults)
+        super(opts)
+
+# Enemy ships trying to kill you.
+class EnemyShip extends Ship
+
+    @key : 'EnemyShip'
+
+    constructor : (opts = {}) ->
+        opts.height = 20
+        opts.width = 20
+        super(opts)
+
+# Bullets kill things!
+class Bullet extends wolf.Circle
+
+    @key : 'Bullet'
+
+    constructor : (opts={}) ->
+        opts.radius = 5
+        opts.speed = 1.5
+        opts.dragCoefficient = 0
+        super(opts)
+
+#
+# Create the engine.
+#
+
+engine = new wolf.Engine("example")
+engine.environment.gravitationalConstant = 0 # Since this an overhead 2d game.
+
+# Create the plane.
+ship = new Ship({x: 200, y:200, speed:0.05, direction: new wolf.Vector(0, -1)})
+
+# Create some asteroids.
+asteroids = (new Asteroid() for i in [1..10])
+
+# Add them to the engine.
+engine.add(ship)
+#(engine.add(a) for a in asteroids)
+
+
+# Attach behaviours.
+$(document).keydown (event) ->
+
+    behaviours =
+        38 : () ->
+            ship.thrust()
+        #32 : shoot
+        #81 : toggle
+        #80 : report
+
+    key = event.which || event.keyCode
+    console.log(key)
+
+    callback = behaviours[key]
+    callback() if callback
+
+# Export start and stop to global scope.
+this.asteroids =
+
+    engine: engine
+
+    run : () ->
+        engine.start()
+        engine.toggle()
+
+


Change verbiage in spec names

Change verbiage in spec names

--- spec/text-editor-component-spec.coffee
+++ spec/text-editor-component-spec.coffee
@@ -1262,7 +1262,7 @@
         expect(overlay.style.left).toBe position.left + 'px'
         expect(overlay.style.top).toBe position.top + editor.getLineHeightInPixels() + 'px'

-    describe "positioning the overlay when near the edge of the window", ->
+    describe "positioning the overlay when near the edge of the editor", ->
       [itemWidth, itemHeight] = []
       beforeEach ->
         itemWidth = 4 * editor.getDefaultCharWidth()
@@ -1319,7 +1319,7 @@
         expect(overlay.style.left).toBe position.left + 'px'
         expect(overlay.style.top).toBe position.top - itemHeight + 'px'

-      describe "when editor position is not 0", ->
+      describe "when editor scroll position is not 0", ->
         it "flips horizontally when near the right edge", ->
           editor.setScrollLeft(2 * editor.getDefaultCharWidth())
           marker = editor.displayBuffer.markBufferRange([[0, 28], [0, 28]], invalidate: 'never')


update

update

--- def/menu_darwin.cson
+++ def/menu_darwin.cson
@@ -57,9 +57,9 @@
 		value: "編集"
 		submenu:
 			Undo:
-				value: "↩ 取り消す"
+				value: "取り消す"
 			Redo:
-				value: "↪ やり直す"
+				value: "やり直す"
 			Cut:
 				value: "カット"
 			Copy:
@@ -192,8 +192,12 @@
 				value: "次の一致も選択"
 			"Select All":
 				value: "一致をすべて選択"
+			"Toggle Find in Buffer":
+				value: "検索パネル切替"
 			"Find in Project":
-				value: "プロジェクト内で検索"
+				value: "プロジェクト内で検索…"
+			"Toggle Find in Project":
+				value: "プロジェクト内で検索パネル切替"
 			"Find Next":
 				value: "次を検索"
 			"Find Previous":
@@ -230,6 +234,16 @@
 						value: "次のペインにフォーカス"
 					"Focus Previous Pane":
 						value: "前のペインにフォーカス"
+					"Focus Pane Above":
+						value: "ペインにフォーカス ↑"
+					"Focus Pane Below":
+						value: "ペインにフォーカス ↓"
+					"Focus Pane On Left":
+						value: "ペインにフォーカス ←"
+					"Focus Pane On Right":
+						value: "ペインにフォーカス →"
+					"Close Pane":
+						value: "ペインを閉じる"
 			Developer:
 				value: "開発"
 				submenu:


add policy to check if authenticated user is admin

error: pathspec 'api/policies/isAdmin.coffee' did not match any file(s) known to git

--- api/policies/isAdmin.coffee
+++ api/policies/isAdmin.coffee
@@ -0,0 +1,13 @@
+assert = require 'assert'
+
+[
+  'ADMIN'
+].map (name) ->
+  assert name of process.env, "process.env.#{name} not yet defined"
+
+# check if authenticated user is admin or the same user to be updated
+module.exports = (req, res, next) ->
+  if req.user.email in process.env.ADMIN.split ','
+    return next()
+
+  res.forbidden()


Move most test logic into waitsForPromise in git-repository-provider-spec.coffee

--- spec/git-repository-provider-spec.coffee
+++ spec/git-repository-provider-spec.coffee
@@ -8,17 +8,13 @@

     describe "when specified a Directory with a Git repository", ->
       it "returns a Promise that resolves to a GitRepository", ->
-        provider = new GitRepositoryProvider atom.project
-        theResult = null
-
         waitsForPromise ->
+          provider = new GitRepositoryProvider atom.project
           directory = new Directory path.join(__dirname, 'fixtures/git/master.git')
-          provider.repositoryForDirectory(directory).then (result) -> theResult = result
-
-        runs ->
-          expect(theResult).toBeInstanceOf GitRepository
-          expect(provider.pathToRepository[theResult.getPath()]).toBeTruthy()
-          expect(theResult.statusTask).toBeTruthy()
+          provider.repositoryForDirectory(directory).then (result) ->
+            expect(result).toBeInstanceOf GitRepository
+            expect(provider.pathToRepository[result.getPath()]).toBeTruthy()
+            expect(result.statusTask).toBeTruthy()

       it "returns the same GitRepository for different Directory objects in the same repo", ->
         provider = new GitRepositoryProvider atom.project
@@ -38,13 +34,9 @@
           expect(firstRepo).toBe secondRepo

     describe "when specified a Directory without a Git repository", ->
-      provider = new GitRepositoryProvider atom.project
-      theResult = 'dummy_value'
-
       it "returns a Promise that resolves to null", ->
         waitsForPromise ->
+          provider = new GitRepositoryProvider atom.project
           directory = new Directory '/tmp'
-          provider.repositoryForDirectory(directory).then (result) -> theResult = result
-
-      runs ->
-        expect(theResult).toBe null
+          provider.repositoryForDirectory(directory).then (result) ->
+            expect(result).toBe null


Added a basic stub implementation

Added a basic stub implementation

error: pathspec 'src/timer-track.coffee' did not match any file(s) known to git

--- src/timer-track.coffee
+++ src/timer-track.coffee
@@ -0,0 +1,13 @@
+## Main class
+
+class TimerTrack
+
+  queue: []
+
+  play: () ->
+    console.log "Playing"
+
+
+## Export the class
+
+module.exports = TimerTrack


Change GoogleUniversalAnalyticsAdapter to make possible sending events in non-default trackers.

--- app/assets/javascripts/ga_events.js.coffee
+++ app/assets/javascripts/ga_events.js.coffee
@@ -61,8 +61,15 @@
     window.dataLayer.push data

 class GaEvents.GoogleUniversalAnalyticsAdapter
+  constructor: (@tracker_name = "") ->
+
   push: (h) ->
-    window.ga "send", "event", h.category, h.action, h.label, h.value,
+    method_call_name = "send"
+
+    if @tracker_name.length > 0
+      method_call_name = "#{@tracker_name}.send"
+
+    window.ga method_call_name, "event", h.category, h.action, h.label, h.value,
               {"nonInteraction": true}

 class GaEvents.GoogleAnalyticsAdapter


Added responsive classes to the cookie-compliance bar

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/lonelyplanet/rizzo.git/'


coffee port of the markov word generator

error: pathspec 'app/assets/javascripts/conlang.js.coffee' did not match any file(s) known to git

--- app/assets/javascripts/conlang.js.coffee
+++ app/assets/javascripts/conlang.js.coffee
@@ -0,0 +1,117 @@
+
+
+# Models the list of characters in the chain. The characters each have
+# a corresponding int value, which is the proportion of those
+# characters which follow the key pattern.
+class CharList
+
+  constructor: ->
+    @chars = {}
+
+  # add a single character
+  add: (char) =>
+    @chars[char] ||= 0
+    @chars[char] += 1
+
+  chars:
+    @chars
+
+  # sum up all the character values
+  total: =>
+    (val for char,val of @chars).reduce (t, s) -> t + s
+
+  # select a character based on a random value compared with the
+  # character probability factor
+  #
+  # for example, assuming a structure of
+  # a: 22
+  # d: 5
+  # e: 45
+  # ..etc
+  #
+  # c = new Charlist
+  # ... create structure as above ...
+  # c.choice(25)
+  # > 'd'
+  #
+  choice: (selection = Math.floor(Math.random() * this.total)) =>
+    chars = []
+    chars.push [char, sum + count] for char, count of @chars
+    ((selection > position) for char, position in chars).index true
+
+
+# The histogram of letter probabilities. It is keyed by tuples, the
+# length of which is defined by the lookback parameter.
+class Chain
+
+  constructor: (lookback = 2) ->
+    @lookback = lookback
+    @store = {}
+    @key = []
+
+  add: (string) =>
+    @key = []
+    @key.push new StartWord() for i in [@lookback..0]
+    console.log @key
+    @addChar char for char in string
+    @store[@key] || = new CharList()
+    @store[@key].add(new EndWord)
+
+  addChar: (char) =>
+    #console.log char
+    @store[@key] ||= new CharList
+    @store[@key].add char
+    #console.log @store[@key]
+    @key.push(char)
+    @key.shift()
+    #console.log @key
+
+# Markov chain representation using a Markov Chain implementation to
+# make fantasy words from list of corpora.
+class MarkovChain
+
+  constructor: (corpora, dictionary, lookback = 2) ->
+    @content = ""
+    @loadCorpora corpora
+    $.get dictionary, {}, (data) => @dictionary = data
+    @lookback = lookback
+    @words = {}
+    @chain = new Chain(@lookback)
+    @makeWords()
+
+  # loads the corpora as a series of
+  loadCorpora: (corpora) =>
+    $.get(corpus, {}, (data) -> @content += data)  for corpus in corpora
+
+  makeWords: =>
+    (english, madeUp) ->  @words[english] = madeUp for english, madeUp in [].push [word, @makeWord()] for word of @dictionary
+    @words
+
+  makeWord: =>
+    word = ""
+
+      key = []
+    key.push new StartWord for i in [lookback..0]
+    while true
+      char = @chain[key].choice()
+      if typeof char == 'EndWord'
+        break
+      word += char
+      key.push char
+      key.shift()
+    return word
+
+
+# Stub class to provide a start of word marker
+class StartWord
+# nop
+
+# Stub class to provide an end of word marker
+class EndWord
+#nop
+
+
+$ ->
+  window.CharList = CharList
+  window.Chain = Chain
+  window.MarkovChain = MarkovChain


Test: Add a simple test for runtime/webinterface

error: pathspec 'spec/runtime.coffee' did not match any file(s) known to git

--- spec/runtime.coffee
+++ spec/runtime.coffee
@@ -0,0 +1,39 @@
+
+chai = require 'chai' unless chai
+path = require 'path'
+http = require 'http'
+
+Runtime = require('../src/runtime').Runtime
+
+describe 'Runtime', ->
+  runtime = null
+
+  beforeEach (done) ->
+    options =
+      broker: 'direct://broker111'
+      port: 3333
+      ide: 'http://localhost'
+      host: 'localhost'
+    runtime = new Runtime options
+    runtime.start (err, url) ->
+      console.log 'runime startd', url
+      chai.expect(err).to.be.a 'null'
+      done()
+  afterEach (done) ->
+    runtime.stop () ->
+      runtime = null
+      done()
+
+  describe 'starting runtime', ->
+    it 'should provide HTTP webpage', (done) ->
+      @timeout 20000
+      http.get 'http://localhost:3333/', (res) ->
+        body = ""
+        chai.expect(res.statusCode).to.equal 200
+        res.on 'data', (chunk) ->
+          body += chunk.toString()
+        res.on 'end', () ->
+          chai.expect(body).to.contain 'flowhub_url'
+          done()
+
+


Call serializeForPersistence instead of serialize

--- src/atom.coffee
+++ src/atom.coffee
@@ -273,7 +273,7 @@
     if windowStatePath = @getWindowStatePath()
       windowState.saveSync(windowStatePath)
     else
-      @getCurrentWindow().loadSettings.windowState = JSON.stringify(windowState.serialize())
+      @getCurrentWindow().loadSettings.windowState = JSON.stringify(windowState.serializeForPersistence())

   getWindowState: (keyPath) ->
     @windowState ?= @loadWindowState()


Log bson id not slug to snowplow for inquiry submit

--- apps/artwork/components/contact/view.coffee
+++ apps/artwork/components/contact/view.coffee
@@ -99,7 +99,7 @@
           label: analytics.modelNameAndIdToLabel('artwork', @model.id)
         changed = if @inquiry.get('message') is defaultMessage(@model) then 'Did not change' else 'Changed'
         analytics.track.funnel "#{changed} default message"
-        analytics.snowplowStruct 'inquiry', 'submit', @model.id, 'artwork', '0.0',
+        analytics.snowplowStruct 'inquiry', 'submit', @model._id, 'artwork', '0.0',
           { inquiry: { inquiry_id: @inquiry.id }, user: { email: @inquiry.email }}

   hoveredSubmit: ->


Don't truncate if the truncated text will end up longer than the original

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/Snitzle/hummingbird.git/'


Adds helper for throttling on rAF

Adds helper for throttling on rAF

error: pathspec 'components/util/tick.coffee' did not match any file(s) known to git

--- components/util/tick.coffee
+++ components/util/tick.coffee
@@ -0,0 +1,13 @@
+raf = window.requestAnimationFrame or
+  window.webkitRequestAnimationFrame or
+  window.mozRequestAnimationFrame or
+  window.oRequestAnimationFrame or
+  window.msRequestAnimationFrame
+
+module.exports = (callback) ->
+  ->
+    return if wait
+    wait = true
+    raf =>
+      callback arguments...
+      wait = false


MachineSettingsCommonView: Added class to use in domain and vm sharing section.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/andrewjcasal/koding.git/'


oauth: add utils

oauth: add utils


Fix test

Fix test

--- components/artwork_item/test/artwork.coffee
+++ components/artwork_item/test/artwork.coffee
@@ -68,8 +68,9 @@
       @artwork.related().artists = new Artists [@artist, @artist2]
       @artist.set 'public', true
       $ = cheerio.load render('artwork')({ artwork: @artwork })
-      $('.artwork-item-artist').text().should.equal 'Pablo Picasso, Kana'
       $('.artwork-item-artist a').should.have.lengthOf 2
+      $('.artwork-item-artist a').first().text().should.equal 'Pablo Picasso'
+      $('.artwork-item-artist a').last().text().should.equal 'Kana'

     it 'links to the artist if it\'s public', ->
       @artist.set 'public', true


TabToOpen: more tidy up pre-PR (additional comments).

--- background_scripts/completion.coffee
+++ background_scripts/completion.coffee
@@ -22,14 +22,17 @@
     @title = ""
     # Extra data which will be available to the relevancy function.
     @relevancyData = null
-    # If @autoSelect is truthy, then this suggestion is automatically pre-selected in the vomnibar.  There may
-    # be at most one such suggestion.
+    # If @autoSelect is truthy, then this suggestion is automatically pre-selected in the vomnibar.  This only
+    # affects the suggestion in slot 0 in the vomnibar.
     @autoSelect = false
-    # If @highlightTerms is true, then we highlight matched terms in the title and URL.
+    # If @highlightTerms is true, then we highlight matched terms in the title and URL.  Otherwise we don't.
     @highlightTerms = true
-    # If @insertText is a string, then the indicated text is inserted into the vomnibar input when the
-    # suggestion is selected.
+    # @insertText is text to insert into the vomnibar input when the suggestion is selected.
     @insertText = null
+
+    # Other options set by individual completers include:
+    # - tabId (TabCompleter)
+    # - isSearchSuggestion, customSearchMode (SearchEngineCompleter)

     extend this, @options

@@ -539,6 +542,8 @@
       unless suggestion.isSearchSuggestion or suggestion.insertText
         for engine in engines
           if suggestion.insertText = Utils.extractQuery engine.searchUrl, suggestion.url
+            # suggestion.customSearchMode informs the vomnibar that, if the users edits the text from this
+            # suggestion, then custom search-engine mode should be activated.
             suggestion.customSearchMode = engine.keyword
             suggestion.title = suggestion.insertText
             console.log suggestion.insertText, engine unless engine.description


fix: prevent problem when initializing before BODY exists

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/fczbkk/element-collector.git/'


Forgotten file

Forgotten file

error: pathspec 'server/metrics/graphite.coffee' did not match any file(s) known to git

--- server/metrics/graphite.coffee
+++ server/metrics/graphite.coffee
@@ -0,0 +1,19 @@
+graphite = require('graphite')
+import logger from '../log'
+
+client = graphite.createClient('plaintext://ije.algoprog.ru:2003/')
+
+instance_number = process.env["INSTANCE_NUMBER"] || "0"
+enabled = process.env["GRAPHITE"]
+
+export default send = (metrics) ->
+    if not enabled
+        return
+
+    metrics["instance"] = +instance_number
+
+    prefix = "algoprog.#{instance_number}"
+    metricsWithPrefix = {}
+    for key, value of metrics
+        metricsWithPrefix["#{prefix}.#{key}"] = value
+    client.write(metricsWithPrefix, (err) -> if err? then logger.error("Can't send metrics to graphite: #{err}"))


add tests

add tests

error: pathspec 'test/route_test.coffee' did not match any file(s) known to git

--- test/route_test.coffee
+++ test/route_test.coffee
@@ -0,0 +1,56 @@
+should = require('chai').Should()
+Client = require('request-json').JsonClient
+{CozyProxy} = require '../proxy.coffee'
+http = require('http')
+
+client = new Client("http://localhost:4444/")
+router = new CozyProxy()
+
+describe "/routes", ->
+
+    before ->
+        router.start 4444
+        router.routes["/apps/app1"] = 8001
+        router.routes["/apps/app2"] = 8002
+        router.routes["/apps/app3"] = 8003
+
+    after ->
+        router.stop()
+
+    describe "GET /routes Return available routes.", ->
+
+        it "When I request for routes", (done) ->
+            client.get "routes/", (error, response, body) =>
+                response.statusCode.should.equal 200
+                @body = body
+                done()
+
+        it "Then I got 3 routes", ->
+            nbRoutes = 0
+            nbRoutes++ for route of @body
+            nbRoutes.should.equal 3
+
+describe "Proxying", ->
+
+    before ->
+        router.start 4444
+        router.routes["myapp"] = 4445
+        @server = http.createServer (req, res) ->
+          res.writeHead 200, 'Content-Type': 'application/json'
+          res.end(JSON.stringify msg:"ok")
+        @server.listen(4445, 'localhost')
+
+    after ->
+        router.stop()
+        @server.close
+
+    describe "Proxy success", ->
+        it "When I send a request to an existing route", (done) ->
+            client.get "apps/myapp/", (error, response, body) =>
+                response.statusCode.should.equal 200
+                @body = body
+                done()
+
+        it "Then I got a response from target server", ->
+            should.exist @body.msg
+            @body.msg.should.equal "ok"


fix: delete configuration handle async request

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/keboola/kbc-ui-wrapper.git/'


Remove status checking of the indexer, refs #228

--- server/lib/status_checker.coffee
+++ server/lib/status_checker.coffee
@@ -5,8 +5,6 @@

 couchdbHost    = process.env.COUCH_HOST or 'localhost'
 couchdbPort    = process.env.COUCH_PORT or '5984'
-indexerHost    = process.env.INDEXER_HOST or 'localhost'
-indexerPort    = process.env.INDEXER_PORT or '9102'
 proxyHost      = process.env.PROXY_HOST or 'localhost'
 proxyPort      = process.env.PROXY_PORT or '9104'
 controllerHost = process.env.CONTROLLER_HOST or 'localhost'
@@ -19,7 +17,6 @@
 couchUrl      = "http://#{couchdbHost}:#{couchdbPort}/"
 controllerUrl = "http://#{controllerHost}:#{controllerPort}/"
 dataSystemUrl = "http://#{dataSystemHost}:#{dataSystemPort}/"
-indexerUrl    = "http://#{indexerHost}:#{indexerPort}/"
 homeUrl       = "http://#{homeHost}:#{homePort}/"
 proxyUrl      = "http://#{proxyHost}:#{proxyPort}/"

@@ -34,7 +31,6 @@
         couchdb: false
         datasystem: false
         controller: false
-        indexer: false
         home: false
         registered: false

@@ -50,7 +46,6 @@
             @getChecker "couchdb", couchUrl
             @getChecker "controller", controllerUrl, "drones/running"
             @getChecker "datasystem", dataSystemUrl
-            @getChecker "indexer", indexerUrl
             @getChecker "home", homeUrl
             @getChecker "proxy", proxyUrl, "routes"
         ], =>


Move local functions to private methods

Move local functions to private methods

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/fuzzy-ai/microservice-client.git/'


Use semicolons instead of commas for sets when calling the API

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/MicrosmartSA/ubiquity-ui.git/'


Refactor rubric JS so that we don't have to keep duplicating this code.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/bmedx/modulestore.git/'


Fix error message

Fix error message


can now place random stars that are not too close or too far

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/UCSFMemoryAndAging/tabcat.git/'


Don't pass invalid "name" init property.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/JoshuaToenyes/stout-core.git/'


minus whitespace

minus whitespace

error: pathspec 'app/assets/javascripts/record_attachments.js.coffee' did not match any file(s) known to git

--- app/assets/javascripts/record_attachments.js.coffee
+++ app/assets/javascripts/record_attachments.js.coffee
@@ -0,0 +1,3 @@
+# make sure DOM is loaded
+jQuery ->
+  $("#new_record").fileupload()


Sped up CoordinateDisplay hover based on Russ's feedback.

--- app/lib/surface/CoordinateDisplay.coffee
+++ app/lib/surface/CoordinateDisplay.coffee
@@ -12,7 +12,7 @@
     @camera = options.camera
     console.error "CoordinateDisplay needs camera." unless @camera
     @build()
-    @show = _.debounce @show, 250
+    @show = _.debounce @show, 125
     Backbone.Mediator.subscribe(channel, @[func], @) for channel, func of @subscriptions

   destroy: ->


[parser] remove uselessness

[parser] remove uselessness

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/demhydraz/cafe.git/'


case of tag category and name can be changed on rename tag form.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/kristenhazard/epm-catalog.git/'


Remove debug messages

Remove debug messages


remove errant console.log()

remove errant console.log()

 On branch master

	modified:   nodejs_server/bestofyourtown/publish.coffee

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/FireworksProject/platform.y.git/'


bug fix

bug fix

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/bubblegroup/bubblebot.git/'


Fix error handler

Fix error handler

--- server/controllers/authentication.coffee
+++ server/controllers/authentication.coffee
@@ -111,7 +111,7 @@
                     res.send 204

-module.exports.resetPasswordIndex = (req, res) ->
+module.exports.resetPasswordIndex = (req, res, next) ->
     getEnv (err, env) ->
         if err
             next new Error err


set the proper indentation

set the proper indentation

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/evercam/evercam-dashboard.git/'


activity: add a special view to toggle to see participants


Don't warn about missing misc System.

Don't warn about missing misc System.

--- app/views/editor/component/ThangComponentsEditView.coffee
+++ app/views/editor/component/ThangComponentsEditView.coffee
@@ -343,7 +343,7 @@
     componentSystems = (c.get('system') for c in componentModels when c)

     for system in componentSystems
-      if system not in extantSystems
+      if system isnt 'misc' and system not in extantSystems
         s = "Component requires system <strong>#{system}</strong> which is currently not included in this level."
         noty({
           text: s,


Simple script to print all assignments and hits

error: pathspec 'turk/viewAllHITs.coffee' did not match any file(s) known to git

--- turk/viewAllHITs.coffee
+++ turk/viewAllHITs.coffee
@@ -0,0 +1,41 @@
+###
+View all available assignments for all HITs in account
+
+###
+
+async = require 'async'
+libxml = require 'libxmljs'
+crowdy = require './crowdyturk'
+argv = require('yargs')
+        .boolean('p').alias('p', 'production')
+        .describe('production', 'Run on production.')
+        .help('h').alias('h', 'help')
+        .argv
+
+mturk = crowdy.mturk(argv.production)
+asArr = crowdy.asArr
+
+main = () ->
+  crowdy.getHITs(getAssignments, {print:true, status:'all'}, (err) ->
+    if err then return console.error err
+    console.log("Done reviewing HITs")
+  )
+
+getAssignments = (hit, cb) ->
+  mturk.GetAssignmentsForHIT({ "HITId": hit.HITId }, (err, result) ->
+    if not result.Assignment then return cb(null)
+    if err then return cb(err)
+
+    assignments = asArr(result.Assignment)
+    async.forEach(assignments, reviewAssignment, cb)
+  )
+
+reviewAssignment = (assignment, cb) ->
+  assignment = crowdy.parseAssignment(assignment)
+  # Show Assignment
+  delete assignment.Answer # Delete answer for easier inspection
+  console.log assignment
+
+  cb(null)
+
+main()


UpdateCustomVariable: collection of helpers on top of one helper for custom credential creating and setting to stack template

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/andrewjcasal/koding.git/'


replace isMounted with mounted

replace isMounted with mounted

--- client/component-lab/Notification/NotificationView.coffee
+++ client/component-lab/Notification/NotificationView.coffee
@@ -20,7 +20,7 @@
       super props
       @style = { zIndex: 100 + @props.index }
       @notificationTimer = null
-      @isMounted = no
+      @mounted = no
       @removeCount = 0
       @state =
         removed : no
@@ -29,7 +29,7 @@
     hideNotification: ->

       @notificationTimer.clear()  if @notificationTimer
-      @setState { removed : yes }  if @isMounted
+      @setState { removed : yes }  if @mounted
       @removeNotification()

@@ -61,7 +61,7 @@
       transitionEvent = getVendorTransition()
       element = ReactDOM.findDOMNode this
       notification = @props.notification
-      @isMounted = yes
+      @mounted = yes
       if transitionEvent
         element.addEventListener transitionEvent, @onTransitionEnd
         if @autoDismissible notification
@@ -106,7 +106,7 @@
       element = ReactDOM.findDOMNode this
       transitionEvent = getVendorTransition()
       element.removeEventListener transitionEvent, @onTransitionEnd
-      @isMounted = no
+      @mounted = no

     render: ->


Improve error reporting.

Improve error reporting.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/philbooth/GitHubReminder.git/'


added header-controller test

added header-controller test

error: pathspec 'test/unit/controller/header/header-controller-spec.coffee' did not match any file(s) known to git

--- test/unit/controller/header/header-controller-spec.coffee
+++ test/unit/controller/header/header-controller-spec.coffee
@@ -0,0 +1,24 @@
+define [
+  'config'
+  'angular'
+  'controller/header/header-controller'
+], (cfg, A) ->
+  describe 'Header controller', () ->
+    $scope = null
+    createController = null
+
+    beforeEach module cfg.ngApp
+
+    beforeEach inject ($injector) ->
+      $controller = $injector.get '$controller'
+      $rootScope = $injector.get '$rootScope'
+      $scope = $rootScope.$new()
+
+      createController = () ->
+        $controller 'headerController',
+          $scope: $scope
+
+    it 'should add the menu partial', () ->
+      controller = createController()
+
+      expect($scope.menuPartial).toBeDefined()


client: utils: updated getFullname util

client: utils: updated getFullname util

--- client/app/lib/util/getFullnameFromAccount.coffee
+++ client/app/lib/util/getFullnameFromAccount.coffee
@@ -1,12 +1,13 @@
 htmlencode = require 'htmlencode'
 whoami = require './whoami'

-module.exports = (account, justName=no) ->
-  account or= whoami()
-  if account.type is 'unregistered'
-    name = "a guest"
-  else if justName
-    name = account.profile.firstName
+module.exports = (account=whoami(), justName=no) ->
+
+  name = if account.type is 'unregistered'
+    "a guest"
+  else if justName or not account.profile.lastName
+    account.profile.firstName
   else
-    name = "#{account.profile.firstName} #{account.profile.lastName}"
+    "#{account.profile.firstName} #{account.profile.lastName}"
+
   return htmlencode.htmlEncode name.trim() or 'a Koding user'


ProvidersParser: ignore koding provider on credentials


set presence status according to NG publications

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/VoiSmart/Rocket.Chat.git/'


whops

whops


Added batch actions and autonaming

Added batch actions and autonaming

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/danseethaler/userlite-snippets.git/'


commit

commit

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/Romaboy/awesomeadmin.git/'


more text encoding tests

more text encoding tests

--- app/assets/javascripts/encounter.coffee
+++ app/assets/javascripts/encounter.coffee
@@ -3,7 +3,7 @@
 ###*
 An Encounter is an interaction, regardless of the setting, between a patient and a
 practitioner who is vested with primary responsibility for diagnosing, evaluating,
-or treating the patient’s condition. It may include visits, appointments, as well
+or treating the patient's condition. It may include visits, appointments, as well
 as non face-to-face interactions. It is also a contact between a patient and a
 practitioner who has primary responsibility for assessing and treating the
 patient at a given contact, exercising independent judgment.


fix jquery

fix jquery

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/netguru/reminders.git/'


Change assertion to not use jquery

Change assertion to not use jquery

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/lonelyplanet/rizzo.git/'


bug fix

bug fix


Use underscore-plus

Use underscore-plus

--- src/selection.coffee
+++ src/selection.coffee
@@ -1,6 +1,6 @@
 {Range} = require 'telepath'
 {Emitter} = require 'emissary'
-{pick} = require 'underscore'
+{pick} = require 'underscore-plus'

 # Public: Represents a selection in the {EditSession}.
 module.exports =


now default grunt task watches for changes in coffeescript source files for the server and runs specs

--- Gruntfile.coffee
+++ Gruntfile.coffee
@@ -10,6 +10,10 @@
       stylus:
         files: ['src/views/stylesheets/app.styl']
         tasks: ['stylus:compile']
+
+      spec:
+        files: ['src/**/*.coffee','!src/views/**/*.coffee']
+        tasks: ['spec:default']

     coffee:
       server:
@@ -49,6 +53,6 @@
   grunt.loadNpmTasks 'grunt-contrib-copy'
   grunt.loadNpmTasks 'grunt-jasmine-bundle'

-  grunt.registerTask 'default', ['build', 'watch']
+  grunt.registerTask 'default', ['spec:default', 'build', 'watch']

   grunt.registerTask 'build', ['coffee', 'stylus', 'copy']


sync s3 instead of upload

sync s3 instead of upload

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/evanderkoogh/bizin21century.git/'


Simplified grunt task

Simplified grunt task

--- Gruntfile.coffee
+++ Gruntfile.coffee
@@ -35,8 +35,7 @@
           level: "ignore"

       test:
-        files:
-          src: ["Gruntfile.coffee"]
+        src: ["Gruntfile.coffee"]

     recess:
       options:
@@ -47,7 +46,7 @@

     watch:
       coffee:
-        files: ["<%= coffeelint.test.files.src %>"]
+        files: ["<%= coffeelint.test.src %>"]
         tasks: ["coffeelint"]

       less:


watch on SAPI console templates

watch on SAPI console templates

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/keboola/kbc-ui-storage.git/'


adding custom display names

adding custom display names

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/Mikuia/Mikuia.git/'


Atom config

Atom config

fatal: remote error: upload-pack: not our ref f50fae2879d1e453ccf456c1cca61f480a8dadc9
fatal: the remote end hung up unexpectedly


better error handling for replication

better error handling for replication


add application.coffee

add application.coffee

error: pathspec 'app/scripts/application.coffee' did not match any file(s) known to git


Uncommented some headers from last merge

--- app/locale/es-ES.coffee
+++ app/locale/es-ES.coffee
@@ -356,7 +356,7 @@
     multiplayer_caption: "Juega con amigos!"
     auth_caption: "Salvar tu progreso."

-#  leaderboard:
+  leaderboard:
 #    leaderboard: "Leaderboard"
 #    view_other_solutions: "View Other Solutions"
     scores: "Puntuaciones"
@@ -575,7 +575,7 @@
 #    retrostyle_title: "Illustration"
 #    retrostyle_blurb: "RetroStyle Games"

-#  teachers:
+  teachers:
 #    title: "CodeCombat: Info for Teachers"
 #    intro_1: "CodeCombat is an online game that teaches programming. Students write code in real programming languages."
 #    intro_2: "No experience required!"


Update pt-PT.coffee

Update pt-PT.coffee

--- app/locale/pt-PT.coffee
+++ app/locale/pt-PT.coffee
@@ -344,7 +344,7 @@
   leaderboard:
     leaderboard: "Tabela de Classificação"
     view_other_solutions: "Ver Outras Soluções"
-#    scores: "Scores"
+    scores: "Pontuações"
     top_solutions: "Melhores Soluções"
     day: "Hoje"
     week: "Esta Semana"
@@ -381,15 +381,15 @@
     recovered: "Recuperada a compra de gemas anterior. Por favor atualiza a página."

   subscribe:
-#    comparison_blurb: "Sharpen your skills with a CodeCombat subscription!"
-#    feature1: "60+ basic levels across 4 worlds"
-#    feature2: "7 powerful new heroes with unique skills!"
-#    feature3: "30+ bonus levels"
-#    feature4: "3500 bonus gems every month!"
-#    feature5: "Video tutorials"
-#    feature6: "Premium email support"
-#    free: "Free"
-#    month: "month"
+    comparison_blurb: "Aperfeiçoa as tuas habilidades com uma subscrição do CodeCombat!"
+    feature1: "60+ níveis básicos dispersos por 4 mundos"
+    feature2: "7 heróis novos e poderosos com habilidades únicas!"
+    feature3: "30+ níveis de bónus"
+    feature4: "3500 gemas de bónus por mês!"
+    feature5: "Tutoriais em vídeo"
+    feature6: "Apoio por e-mail superior"
+    free: "Grátis"
+    month: "mês"
     subscribe_title: "Subscrever"
     unsubscribe: "Cancelar Subscrição"
     confirm_unsubscribe: "Confirmar Cancelamento da Subscrição"
@@ -403,20 +403,20 @@
     heroes: "Heróis mais poderosos!"
     gems: "3500 gemas de bónus todos os meses!"
     items: "Mais de 250 itens de bónus!"
-#    parent_button: "Ask your parent"
-#    parent_email_description: "We'll email them so they can buy you a CodeCombat subscription."
-#    parent_email_input_invalid: "Email address invalid."
-#    parent_email_input_label: "Parent email address"
-#    parent_email_input_placeholder: "Enter parent email"
-#    parent_email_send: "Send Email"
-#    parent_email_sent: "Email sent!"
-#    parent_email_title: "What's your parent's email?"
+    parent_button: "Pergunta ao teu educador"
+    parent_email_description: "Vamos mandar-lhe um e-mail para que ele possa comprar-te uma subscrição do CodeCombat."
+    parent_email_input_invalid: "Endereço de e-mail inválido."
+    parent_email_input_label: "Endereço de e-mail do educador"
+    parent_email_input_placeholder: "Introduz o e-mail do educador"
+    parent_email_send: "Enviar E-mail"
+    parent_email_sent: "E-mail enviado!"
+    parent_email_title: "Qual é o e-mail do teu educador?"
     parents: "Para Educadores"
     parents_title: "O teu educando vai aprender a programar."
     parents_blurb1: "Com o CodeCombat, o teu educando aprende ao escrever código real. Começa por aprender comandos simples e progride para tópicos mais avançados."
     parents_blurb2: "Por $9.99 USD/mês, recebe novos desafios todas as semanas e suporte pessoal, via e-mail, de programadores profissionais."
     parents_blurb3: "Sem Risco: 100% de garantia de devolução do dinheiro, com anulação fácil de 1 clique."
-    subscribe_button: "Subscrever Agora"
+    subscribe_button: "Subscrever"
     stripe_description: "Subscrição Mensal"
     subscription_required_to_play: "Precisas de uma subscrição para jogares este nível."
     unlock_help_videos: "Subscreve-te para desbloqueares todos os tutoriais em vídeo."


kpis v2 service create & show working with api v2

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/xaun/impac-angular.git/'


Make DomUtils.isSelected behave correctly for all editable elements

--- lib/dom_utils.coffee
+++ lib/dom_utils.coffee
@@ -167,20 +167,21 @@
       node = node.parentNode
     false

-  # True if element contains the active selection range, or if the element does not support its selection
-  # being accessed.
+  # True if the current element is editable and contains the active selection range.
   isSelected: (element) ->
     if element.isContentEditable
       node = document.getSelection().anchorNode
       node and @isDOMDescendant element, node
     else
-      try
-        element.selectionStart != element.selectionEnd
-      catch
-        # This input element doesn't support selectionStart/selectionEnd.
-        # NOTE(mrmr1993): We choose true here because it does the right thing everywhere in the code. I am
-        # not certain that this is necessarily what we should do.
-        true
+      selection = document.getSelection()
+      if selection.type == "Range" and selection.isCollapsed
+	# The selection is inside the Shadow DOM of a node. We can check the node it registers as being
+	# before, since this represents the node whose Shadow DOM it's inside.
+        containerNode = selection.anchorNode.childNodes[selection.anchorOffset]
+
+        element == containerNode # True if the selection is inside the Shadow DOM of our element.
+      else
+        false

   simulateSelect: (element) ->
     # If element is already active, then we don't move the selection.  However, we also won't get a new focus


add tracking with google analytics

add tracking with google analytics

error: pathspec 'app/assets/javascripts/google_analytics.js.coffee' did not match any file(s) known to git

--- app/assets/javascripts/google_analytics.js.coffee
+++ app/assets/javascripts/google_analytics.js.coffee
@@ -0,0 +1,42 @@
+class @GoogleAnalytics
+
+  @load: ->
+    # Google Analytics depends on a global _gaq array. window is the global scope.
+    window._gaq = []
+    window._gaq.push ["_setAccount", GoogleAnalytics.analyticsId()]
+
+    # Create a script element and insert it in the DOM
+    ga = document.createElement("script")
+    ga.type = "text/javascript"
+    ga.async = true
+    ga.src = ((if "https:" is document.location.protocol then "https://ssl" else "http://www")) + ".google-analytics.com/ga.js"
+    firstScript = document.getElementsByTagName("script")[0]
+    firstScript.parentNode.insertBefore ga, firstScript
+
+    # If Turbolinks is supported, set up a callback to track pageviews on page:change.
+    # If it isn't supported, just track the pageview now.
+    if typeof Turbolinks isnt 'undefined' and Turbolinks.supported
+      document.addEventListener "page:change", (->
+        GoogleAnalytics.trackPageview()
+      ), true
+    else
+      GoogleAnalytics.trackPageview()
+
+  @trackPageview: (url) ->
+    unless GoogleAnalytics.isLocalRequest()
+      if url
+        window._gaq.push ["_trackPageview", url]
+      else
+        window._gaq.push ["_trackPageview"]
+      window._gaq.push ["_trackPageLoadTime"]
+
+  @isLocalRequest: ->
+    GoogleAnalytics.documentDomainIncludes "local"
+
+  @documentDomainIncludes: (str) ->
+    document.domain.indexOf(str) isnt -1
+
+  @analyticsId: ->
+    'UA-47724303-1'
+
+GoogleAnalytics.load()


Make edit link on issuable sidebar works

Signed-off-by: Dmitriy Zaporozhets <be23d75b156792e5acab51b196a2deb155d35d6a@gmail.com>

--- app/assets/javascripts/issuable_context.js.coffee
+++ app/assets/javascripts/issuable_context.js.coffee
@@ -5,9 +5,9 @@
     new UsersSelect()
     $('select.select2').select2({width: 'resolve', dropdownAutoWidth: true})

-    $(".context .inline-update").on "change", "select", ->
+    $(".issuable-sidebar .inline-update").on "change", "select", ->
       $(this).submit()
-    $(".context .inline-update").on "change", ".js-assignee", ->
+    $(".issuable-sidebar .inline-update").on "change", ".js-assignee", ->
       $(this).submit()

     $('.issuable-details').waitForImages ->
@@ -21,3 +21,9 @@
           @top = ($('.issuable-affix').offset().top - 70)
         bottom: ->
           @bottom = $('.footer').outerHeight(true)
+
+    $(".edit-link").click (e) ->
+      block = $(@).parents('.block')
+      block.find('.selectbox').show()
+      block.find('.value').hide()
+      block.find('.js-select2').select2("open")


Fixed cast options clicking.

Fixed cast options clicking.

--- app/views/play/level/tome/cast_button_view.coffee
+++ app/views/play/level/tome/cast_button_view.coffee
@@ -11,7 +11,6 @@
     'tome:cast-spells': 'onCastSpells'
     'god:world-load-progress-changed': 'onWorldLoadProgressChanged'
     'god:new-world-created': 'onNewWorld'
-    'click .cast-options a': 'onCastOptionsClick'

   constructor: (options) ->
     super options
@@ -31,6 +30,7 @@
     @castButtonGroup = $('.cast-button-group', @$el)
     @castOptions = $('.autocast-delays', @$el)
     @castButton.on 'click', @onCastButtonClick
+    @castOptions.find('a').on 'click', @onCastOptionsClick
     # TODO: use a User setting instead of localStorage
     delay = localStorage.getItem 'autocastDelay'
     delay ?= 5000
@@ -42,7 +42,8 @@
   onCastButtonClick: (e) ->
     Backbone.Mediator.publish 'tome:manual-cast', {}

-  onCastOptionsClick: (e) ->
+  onCastOptionsClick: (e) =>
+    console.log 'cast options click', $(e.target)
     Backbone.Mediator.publish 'focus-editor'
     @castButtonGroup.removeClass 'open'
     @setAutocastDelay $(e.target).attr 'data-delay'
@@ -89,3 +90,5 @@
   destroy: ->
     super()
     @castButton.off 'click', @onCastButtonClick
+    @castOptions.find('a').off 'click', @onCastOptionsClick
+    @onCastOptionsClick = null


Unlocked archives

Unlocked archives

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/GregDesplaces/classe-1914.git/'


Fixed the spell list tab entry view popover to not popover when using the dropdown.

--- app/views/play/level/tome/spell_list_tab_entry_view.coffee
+++ app/views/play/level/tome/spell_list_tab_entry_view.coffee
@@ -61,7 +61,7 @@
     return unless found
     doc.owner = 'this'
     doc.shortName = doc.shorterName = doc.title = "this.#{doc.name}();"
-    @$el.popover(
+    @$el.find('code').popover(
       animation: true
       html: true
       placement: 'bottom'


Fix embedding of images

Fix embedding of images

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/clochix/cozy-emails.git/'


Fixed busted item crash.

Fixed busted item crash.

--- app/lib/surface/LankBoss.coffee
+++ app/lib/surface/LankBoss.coffee
@@ -224,8 +224,8 @@
         item = @world.getThangByID itemID
         unless item.equipped
           console.log thang.id, 'equipping', item, 'in', thang.slot, 'Surface-side, but it cannot equip?' unless item.equip
-          item.equip()
-          itemsJustEquipped.push item
+          item.equip?()
+          itemsJustEquipped.push item if item.equip
     return itemsJustEquipped

   cacheObstacles: (updatedObstacles=null) ->


Can now create groups.

Can now create groups.

error: pathspec 'app/routes/groups/create.coffee' did not match any file(s) known to git

--- app/routes/groups/create.coffee
+++ app/routes/groups/create.coffee
@@ -0,0 +1,5 @@
+GroupsCreateRoute = Ember.Route.extend
+  model: ->
+    @store.createRecord 'group'
+
+`export default GroupsCreateRoute`


Update task-panel.cjsx

Update task-panel.cjsx

--- views/components/main/parts/task-panel.cjsx
+++ views/components/main/parts/task-panel.cjsx
@@ -16,7 +16,7 @@
     when 2
       return '#e73939'
     when 3
-      return '#87DA61'
+      return '#87da61'
     when 4
       return '#32bab8'
     when 5


Code cleanup

Code cleanup

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/enrmarc/f.git/'


moar images

moar images

--- src/businesscat.coffee
+++ src/businesscat.coffee
@@ -88,49 +88,49 @@
 ]

 images = [
-  'http://imgur.com/PaGjotI',
-  'http://imgur.com/HNp4TtH',
-  'http://imgur.com/tMYclqT',
-  'http://imgur.com/DgG3CJD',
-  'http://imgur.com/UKjObcM',
-  'http://imgur.com/iorRW0P',
-  'http://imgur.com/DgmFNr3',
-  'http://imgur.com/w0wuthi',
-  'http://imgur.com/9a8GfA1',
-  'http://imgur.com/BDroxfl',
-  'http://imgur.com/xTBxH96',
-  'http://imgur.com/ncvO5Nl',
-  'http://imgur.com/9dNlOik',
-  'http://imgur.com/gE8hR2x',
-  'http://imgur.com/e4BsPLu',
-  'http://imgur.com/L1A2Esf',
-  'http://imgur.com/9T3rKvL',
-  'http://imgur.com/DHrSBHy',
-  'http://imgur.com/aP3pDrD',
-  'http://imgur.com/F3w78c4',
-  'http://imgur.com/0C5hbEn',
-  'http://imgur.com/l54I3pu',
-  'http://imgur.com/ret6i1P',
-  'http://imgur.com/CRqMjBp',
-  'http://imgur.com/8WsH50B',
-  'http://imgur.com/vARRxc7',
-  'http://imgur.com/srAssQa',
-  'http://imgur.com/GJj4MmB',
-  'http://imgur.com/TyGdG1m',
-  'http://imgur.com/SW8mlDE',
-  'http://imgur.com/74SCEZx',
-  'http://imgur.com/aPrc9au',
-  'http://imgur.com/3cCagym',
-  'http://imgur.com/Ar6w6qD',
-  'http://imgur.com/CS0SHo9',
-  'http://imgur.com/T8lJliS',
-  'http://imgur.com/AEmIduX',
-  'http://imgur.com/BFLs06k',
-  'http://imgur.com/9KDeH5Y',
-  'http://imgur.com/cvu5T4Q',
-  'http://imgur.com/X6XF5OW',
-  'http://imgur.com/QyCmPGg',
-  'http://imgur.com/69xwU1q'
+  'http://imgur.com/PaGjotI.jpg',
+  'http://imgur.com/HNp4TtH.jpg',
+  'http://imgur.com/tMYclqT.jpg',
+  'http://imgur.com/DgG3CJD.jpg',
+  'http://imgur.com/UKjObcM.jpg',
+  'http://imgur.com/iorRW0P.jpg',
+  'http://imgur.com/DgmFNr3.jpg',
+  'http://imgur.com/w0wuthi.jpg',
+  'http://imgur.com/9a8GfA1.jpg',
+  'http://imgur.com/BDroxfl.jpg',
+  'http://imgur.com/xTBxH96.jpg',
+  'http://imgur.com/ncvO5Nl.jpg',
+  'http://imgur.com/9dNlOik.jpg',
+  'http://imgur.com/gE8hR2x.jpg',
+  'http://imgur.com/e4BsPLu.jpg',
+  'http://imgur.com/L1A2Esf.jpg',
+  'http://imgur.com/9T3rKvL.jpg',
+  'http://imgur.com/DHrSBHy.jpg',
+  'http://imgur.com/aP3pDrD.jpg',
+  'http://imgur.com/F3w78c4.jpg',
+  'http://imgur.com/0C5hbEn.jpg',
+  'http://imgur.com/l54I3pu.jpg',
+  'http://imgur.com/ret6i1P.jpg',
+  'http://imgur.com/CRqMjBp.jpg',
+  'http://imgur.com/8WsH50B.jpg',
+  'http://imgur.com/vARRxc7.jpg',
+  'http://imgur.com/srAssQa.jpg',
+  'http://imgur.com/GJj4MmB.jpg',
+  'http://imgur.com/TyGdG1m.jpg',
+  'http://imgur.com/SW8mlDE.jpg',
+  'http://imgur.com/74SCEZx.jpg',
+  'http://imgur.com/aPrc9au.jpg',
+  'http://imgur.com/3cCagym.jpg',
+  'http://imgur.com/Ar6w6qD.jpg',
+  'http://imgur.com/CS0SHo9.jpg',
+  'http://imgur.com/T8lJliS.jpg',
+  'http://imgur.com/AEmIduX.jpg',
+  'http://imgur.com/BFLs06k.jpg',
+  'http://imgur.com/9KDeH5Y.jpg',
+  'http://imgur.com/cvu5T4Q.jpg',
+  'http://imgur.com/X6XF5OW.jpg',
+  'http://imgur.com/QyCmPGg.jpg',
+  'http://imgur.com/69xwU1q.jpg'
 ]

 regex = new RegExp jargon.join('|'), 'ig'


Fixed MathJax rendering in problem hint TNL-2857

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/bmedx/modulestore.git/'


Make 'Explanation' CAPA header translatable.

CAPA <explanation> nodes get transformed into a HTML <div> block
that contains the word 'Explanation'.

This patch makes it translatable.


Adding final browsers.

Adding final browsers.

--- build/tasks/karma.coffee
+++ build/tasks/karma.coffee
@@ -4,21 +4,19 @@
   require "karma-sauce-launcher"

   sauceLabs =
-    #sl_chrome:
-    #  base: "SauceLabs"
-    #  platform: "Windows 7"
-    #  browserName: "chrome"
+    sl_chrome:
+      base: "SauceLabs"
+      browserName: "chrome"

-    #sl_firefox:
-    #  base: "SauceLabs"
-    #  browserName: "firefox"
-    #  version: "26"
+    sl_firefox:
+      base: "SauceLabs"
+      browserName: "firefox"

-    sl_ie_8:
+    sl_ie_7:
       base: "SauceLabs"
       platform: "Windows XP"
       browserName: "internet explorer"
-      version: "8"
+      version: "7"

   @config "karma",
     options:
@@ -80,5 +78,5 @@
         ]

         sauceLabs:
-          testName: "Combyne Unit Tests"
+          testName: "Combyne Browser Tests"
           takeScreenshots: false


Fixed issue where 'content-type' does not exist in response.header

If the response.header does not exist and does not contain
'content-type', then a default 'content-type' of 'text/plain' will be
used.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/Postmedia/connect-esi.git/'


Cleanup

Cleanup

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/kevgo/modularity-framework.git/'


RemoteAPI: use body as is if it's provided as an Array

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/andrewjcasal/koding.git/'


Add watch

Add watch

--- src/runner.coffee
+++ src/runner.coffee
@@ -8,12 +8,14 @@

   start: (path, port) ->
     console.log "Starting #{path} port: #{port}"
-    nodePath = process.argv[0]
     cd path
     try
-      @forever.start [nodePath, 'app.js'],
+      @forever.start ['npm', 'start'],
         max: 1
         silent: false
+        watch: true
+        watchDirectory: path
+        watchIgnoreDotFiles: true
         env:
           PORT: port
     catch error


First hack at a Zappa server using socket.io to trade position information with clients.

error: pathspec 'prod/src/coffee-script/node/server.coffee' did not match any file(s) known to git

--- prod/src/coffee-script/node/server.coffee
+++ prod/src/coffee-script/node/server.coffee
@@ -0,0 +1,107 @@
+using 'util'
+
+# Can't figure out how else to use project-local module with Zappa.
+def mongoose: require "#{process.cwd()}/node_modules/mongoose"
+
+get '/': ->
+    # Define the mongoose schema.
+    Camera = new mongoose.Schema
+        name: String
+        url: String
+        loc:
+            x: Number
+            y: Number
+
+    # Geospatial indexing!
+    Camera.index loc: '2d'
+
+    # Create the mongoose model.
+    mongoose.model 'Camera', Camera
+    CameraModel = mongoose.model 'Camera'
+
+    # Connect to mongodb.
+    mongoose.connect 'mongodb://localhost/cams'
+
+    # Count those cameras!
+    CameraModel.count {}, (err, @count) =>
+        # mongoose.disconnect()
+        render 'default'
+
+# Socket.io connections
+at connection: ->
+    send 'welcome', text: 'Hello!'
+
+# Default client-side code to include.
+client ->
+    # Wait for jQuery $(document).ready
+    $ ->
+        socket = new io.Socket()
+
+        socket.on 'connect', ->
+            $('div[data-role="content"]').append $('<p>').text 'Connected'
+
+        socket.on 'disconnect', ->
+            $('div[data-role="content"]').append $('<p>').text 'Disconnected'
+
+        socket.on 'message', (raw) ->
+            msg = JSON.parse raw
+            console.log msg
+            if msg.welcome
+                $('div[data-role="content"]')
+                    .append $('<p>').text "#{msg.welcome.text}"
+            if msg.currentPosition
+                $('div[data-role="content"]')
+                    .append $('<p>').text """It looks like you're at
+(#{msg.currentPosition.position.coords.latitude}, #{msg.currentPosition.position.coords.longitude}), give or take #{msg.currentPosition.position.coords.accuracy} feet."""
+
+        socket.connect()
+
+        if navigator.geolocation
+            navigator.geolocation.getCurrentPosition (position) ->
+                socket.send JSON.stringify currentPosition:
+                    position: position
+        else
+            socket.send JSON.stringify error:
+                message: 'Geolocation unsupported.'
+
+# Very simple error handling.
+msg error: -> send 'error', @message
+
+msg currentPosition: ->
+    send 'currentPosition', position: @position
+
+# Default view
+view ->
+    @scripts = [
+         '/socket.io/socket.io'
+        ,'http://code.jquery.com/jquery-1.6.1.min'
+        ,'/default'
+        ,'/js/jquery.tmpl.min'
+        ,'/js/jquery.mobile-1.0a4.1.min'
+    ]
+    h1 "#{@count} cameras available"
+
+# Simple HTML5 jQueryMobile layout
+layout ->
+    doctype 5
+    html ->
+        head ->
+            meta charset: 'utf-8'
+            title 'traPHIcam.com'
+            meta
+                name:'viewport'
+                content: 'width=device-width, minimum-scale=1, maximum-scale=1'
+            for s in @scripts
+                script src: "#{s}.js"
+            # Google's JavaScript loader is goofy and doesn't work with the
+            # @scripts array I've setup so it must be specified here for now.
+            script src:'http://maps.google.com/maps/api/js?libraries=geometry&sensor=true'
+            link
+                rel: 'stylesheet'
+                href: '/css/jquery.mobile-1.0a4.1.min.css'
+        body ->
+            div 'data-role': 'page', ->
+                div 'data-role': 'header', ->
+                    h1 'traPHIcam.com'
+                div 'data-role': 'content', ->
+                    @content


added kapi-scroll.coffee

added kapi-scroll.coffee

error: pathspec 'src/kapi-scroll.coffee' did not match any file(s) known to git

--- src/kapi-scroll.coffee
+++ src/kapi-scroll.coffee
@@ -0,0 +1,70 @@
+define [
+  'angular'
+  'rekapi'
+  'animation-frame'
+], (angular, Rekapi, AnimationFrame) ->
+  angular.module('gilbox.kapiScroll', [])
+    .factory 'rekapi', ($document) -> new Rekapi($document[0].body)
+    .directive 'kapiScroll', (rekapi, $window) ->
+      (scope, element, attr) ->
+        actor = rekapi.addActor({ context: element[0] })
+        y = 0
+        scrollY = 0
+        animationFrame = new AnimationFrame()
+        updating = false
+
+        update = ->
+          d = scrollY - y
+          ad = Math.abs(d)
+          if ad < 1.5
+            updating = false
+            y = scrollY
+            rekapi.update(y)
+          else
+            updating = true
+            y += if ad>8 then d*0.25 else (if d > 0 then 1 else -1) # ease the scroll
+            rekapi.update(parseInt(y))
+            animationFrame.request(update)
+
+        scope.$watch attr.kapiScroll, (data) ->
+          return unless data
+
+          # element ease property
+          elmEase = data.ease || 'linear';
+          delete data.ease
+
+          # setup the rekapi keyframes
+          for scrollY, keyFrame of data
+
+            # keyframe ease property
+            # (will override or fallback to element ease property)
+            ease = {}
+            kfEase = elmEase
+            if keyFrame.ease?
+              if angular.isObject(keyFrame.ease)
+                ease = keyFrame.ease
+              else
+                kfEase = keyFrame.ease
+              delete keyFrame.ease
+
+            # comprehension of array-notation for easing
+            # (will override or fall back to keyframe ease propery as needed)
+            for prop, val of keyFrame
+              val = [val, kfEase] if not angular.isArray(val)
+              o = {}
+              o[prop] = val[1]
+              angular.extend(ease, o)
+              keyFrame[prop] = val[0]
+
+            actor.keyframe(scrollY, keyFrame, ease)
+
+          y = scrollY = $window.scrollY
+          update()
+        , true  # deep watch
+
+        # respond to scroll event
+        angular.element($window).on 'scroll', ->
+          scrollY = $window.scrollY
+          update() if !updating # debounced update
+
+        scope.$on '$destroy', -> rekapi.removeActor(actor)


Correct model name resolution in Model.$boot().

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/RobotSnacks/stout-orm.git/'


added test for page error factory

added test for page error factory

error: pathspec 'test/unit/factory/page-error-factory-spec.coffee' did not match any file(s) known to git

--- test/unit/factory/page-error-factory-spec.coffee
+++ test/unit/factory/page-error-factory-spec.coffee
@@ -0,0 +1,23 @@
+define [
+  'config'
+  'angular'
+  'factory/page-error-factory'
+], (cfg, A) ->
+  describe 'Page error factory', () ->
+    $location = null
+    factory = null
+
+    beforeEach module cfg.ngApp
+
+    beforeEach inject ($injector) ->
+      $location = $injector.get '$location'
+      factory = $injector.get 'pageErrorFactory'
+
+    it 'should change the $location according to an error code', () ->
+      factory.show500()
+
+      expect($location.path()).toBe '/error/500'
+
+      factory.showError(404)
+
+      expect($location.path()).toBe '/error/404'


Add  jquery scrollbar options module

Add  jquery scrollbar options module


Expose the autofocus helper for all step views

--- apps/personalize/client/views/step.coffee
+++ apps/personalize/client/views/step.coffee
@@ -1,5 +1,6 @@
 Backbone  = require 'backbone'
 track     = require('../../../../lib/analytics.coffee').track
+device    = require '../../../../components/util/device.coffee'

 module.exports = class StepView extends Backbone.View
   className: 'personalize-frame'
@@ -7,8 +8,10 @@
   initialize: (options) ->
     { @state, @user } = options

+  autofocus: ->
+    device.autofocus()
+
   advance: (e) ->
-    track.funnel "Finishing Personalize #{@state.currentStepLabel()}", { label: "User:#{@user.id}" }
-
     e?.preventDefault()
+    track.funnel "Finishing Personalize #{@state.currentStepLabel()}", label: "User:#{@user.id}"
     @state.trigger 'transition:next'


Revert "gave up on trying to get common.js to work with kanso, got encounter view up and running"

This reverts commit d59650bcad357f94629fb070816ab14f71c4fe21.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/UCSFMemoryAndAging/tabcat.git/'


Fix ridiculous link parsing error.

Fix ridiculous link parsing error.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/philbooth/GitHubReminder.git/'


cell class.

cell class.

error: pathspec 'source/assets/javascripts/cell.js.coffee' did not match any file(s) known to git

--- source/assets/javascripts/cell.js.coffee
+++ source/assets/javascripts/cell.js.coffee
@@ -0,0 +1,43 @@
+window.Cell = class @Cell
+  constructor: (@row, @column) ->
+    @links = {}
+
+  link: (cell, bidi = true) ->
+    @links[cell] = true
+    cell.link(self, false) if bidi
+    @
+
+  unlink: (cell, bidi = true) ->
+    @links.delete(cell)
+    cell.unlink(self, false) if bidi
+    @
+
+  isLinked: (cell) ->
+    @links[cell]
+
+  getLinks: ->
+    @links.keys
+
+  neighbors: ->
+    list = []
+    list.push(@north) if @north
+    list.push(@south) if @south
+    list.push(@east)  if @east
+    list.push(@west)  if @west
+    list
+
+  toString: ->
+    "[#{@row}, #{@column}]"
+
+  distances: ->
+    distances = new Distances(@)
+    frontier = [@]
+    while frontier.any?
+      new_frontier = []
+      for cell in frontier
+        for linked in cell.getLinks()
+          next if distances[linked]
+          distances[linked] = distances[cell] + 1
+          new_frontier.push(linked)
+      frontier = new_frontier
+    distances


Move variable assignment

Move variable assignment

--- src/text-buffer.coffee
+++ src/text-buffer.coffee
@@ -70,11 +70,13 @@
     @updateCachedDiskContentsSync()
     @reload() unless @useSerializedText and @state.get('diskContentsDigest') == @file?.getDigest()
     @text.clearUndoStack()
+    @loaded = true

   load: ->
     @updateCachedDiskContents().then =>
       @reload() unless @useSerializedText and @state.get('diskContentsDigest') == @file?.getDigest()
       @text.clearUndoStack()
+      @loaded = true
       this

   ### Internal ###
@@ -159,13 +161,11 @@

   # Private: Rereads the contents of the file, and stores them in the cache.
   updateCachedDiskContentsSync: ->
-    @loaded = true
     @cachedDiskContents = @file?.readSync() ? ""

   # Private: Rereads the contents of the file, and stores them in the cache.
   updateCachedDiskContents: ->
     Q(@file?.read() ? "").then (contents) =>
-      @loaded = true
       @cachedDiskContents = contents

   # Gets the file's basename--that is, the file without any directory information.