Fix typos in git.spec.coffee

Fix typos in git.spec.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/jviotti/gitwrap.git/'


Comply to groups and options object;

Comply to groups and options 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/jerone/flex-toolbar.git/'


Possibly fixed a server test in accordance with real private properties.

--- test/server/functional/user.spec.coffee
+++ test/server/functional/user.spec.coffee
@@ -79,7 +79,8 @@
       request.get url, (err, res, body) ->
         expect(res.statusCode).toBe(200)
         user = JSON.parse(body)
-        expect(user.email).toBe('normal@jo.com')
+        expect(user.name).toBe('Joe')  # Anyone should be served the username.
+        expect(user.email).toBeUndefined()  # Shouldn't be available to just anyone.
         expect(user.passwordHash).toBeUndefined()
         done()


[macros] fix ,s (and ,s → ,:)

[macros] fix ,s (and ,s → ,:)

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/'


init file test passed

init file test passed

error: pathspec 'bin/src/init-files/spec/user.coffee' did not match any file(s) known to git

--- bin/src/init-files/spec/user.coffee
+++ bin/src/init-files/spec/user.coffee
@@ -0,0 +1,113 @@
+data =
+  name: 'MR Hello'
+  email: 'xxx@qq.com'
+  role: 'member'
+
+module.exports = [{
+  name: "获取用户列表"
+  uri: '/users'
+  expects:
+    Status: 200
+    JSONLength: 2
+    JSONTypes: ['*', {
+      id: Number
+      name: String
+      email: String
+    }]
+}, {
+  name: "获取指定用户"
+  uri: '/users/1'
+  expects:
+    Status: 200
+    JSON: {
+      id: 1
+      name: 'Redstone Zhao'
+      email: '13740080@qq.com'
+      role: 'admin'
+    }
+}, {
+  name: "修改指定用户"
+  uri: '/users/1'
+  verb: 'patch'
+  data:
+    name: 'Redstone Zhao.'
+  expects:
+    Status: 200
+    JSON: {
+      name: 'Redstone Zhao.'
+      email: '13740080@qq.com'
+      role: 'admin'
+    }
+}, {
+  name: "获取修改后的指定用户"
+  uri: '/users/1'
+  expects:
+    Status: 200
+    JSON: {
+      id: 1
+      name: 'Redstone Zhao.'
+      email: '13740080@qq.com'
+      role: 'admin'
+    }
+}, {
+  name: "添加一个用户"
+  uri: '/users'
+  verb: 'post'
+  data: data
+  expects:
+    Status: 201
+    JSON: data
+}, {
+  name: "获取刚才添加的用户"
+  uri: '/users/3'
+  expects:
+    Status: 200
+    JSON: data
+}, {
+  name: "再次获取用户列表, 长度为3"
+  uri: '/users'
+  expects:
+    Status: 200
+    JSONLength: 3
+    JSONTypes: ['*', {
+      id: Number
+      name: String
+      email: String
+    }]
+}, {
+  name: "删除刚才添加的用户"
+  uri: '/users/3'
+  verb: 'delete'
+  expects:
+    Status: 204
+}, {
+  name: "试图获取已删除的用户会得到404错误"
+  uri: '/users/3'
+  expects:
+    Status: 404
+}, {
+  name: "资源user开启了回收站功能，再次添加同样的用户，之前被删除的用户会还原"
+  uri: '/users'
+  verb: 'post'
+  data: data
+  expects:
+    Status: 201
+    JSON: data
+}, {
+  name: "已恢复的用户可以正常获取"
+  uri: '/users/3'
+  expects:
+    Status: 200
+    JSON: data
+}, {
+  name: "再次获取用户列表, 长度为3"
+  uri: '/users'
+  expects:
+    Status: 200
+    JSONLength: 3
+    JSONTypes: ['*', {
+      id: Number
+      name: String
+      email: String
+    }]
+}]


fix videomsg button always shown while typing

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/'


Use path.extname

Use path.extname

--- build/tasks/create-installer.coffee
+++ build/tasks/create-installer.coffee
@@ -28,7 +28,7 @@
     spawn {cmd, args}, (error, result, code) ->
       return done(error) if error?

-      pkgs = pkg for pkg in fs.readdirSync(buildDir) when pkg.match /.nupkg$/i
+      pkgs = pkg for pkg in fs.readdirSync(buildDir) when path.extname(pkg) is '.nupkg'

       releasesDir = path.join(buildDir, 'Releases')


app/util: add camilize string util

app/util: add camilize string util

error: pathspec 'client/app/lib/util/camilizeString.coffee' did not match any file(s) known to git

--- client/app/lib/util/camilizeString.coffee
+++ client/app/lib/util/camilizeString.coffee
@@ -0,0 +1,7 @@
+
+module.exports = (str) ->
+  str.replace '-', ' '
+  .replace /(?:^\w|[A-Z]|\b\w|\s)/g, (match, index) ->
+    return ''  if +match is 0
+
+    return if index is 0 then match.toLowerCase() else match.toUpperCase()


client/webpack: add makeAppAliases util

client/webpack: add makeAppAliases util

Signed-off-by: Umut Sirin <4055abbc0e40a1254e715b952ccd414607e0b365@gmail.com>

error: pathspec 'client/webpack/util/makeAppAliases.coffee' did not match any file(s) known to git

--- client/webpack/util/makeAppAliases.coffee
+++ client/webpack/util/makeAppAliases.coffee
@@ -0,0 +1,16 @@
+path = require 'path'
+{ CLIENT_PATH, APP_MAIN_FOLDER } = require '../constants'
+getAppManifests = require './getAppManifests'
+
+# This lets us omit the `lib` folders from require paths.
+#
+# No need to write
+#    require '../../../home/lib/routehandler'
+# We can just write
+#    require 'home/routehandler'
+module.exports = makeAppAliases = ->
+
+  getAppManifests().reduce (res, manifest) ->
+    res[manifest.name] = path.join CLIENT_PATH, manifest.name, APP_MAIN_FOLDER
+    return res
+  , {}


Don't bring along json page refactors.

Don't bring along json page refactors.

--- desktop/components/json_page/index.coffee
+++ desktop/components/json_page/index.coffee
@@ -1,11 +1,11 @@
 Q = require 'bluebird-q'
 knox = require 'knox'
 request = require 'superagent'
-{ S3_KEY, S3_SECRET, S3_BUCKET } = require '../../config'
+{ S3_KEY, S3_SECRET, APPLICATION_NAME } = require '../../config'

 module.exports = class JSONPage
   constructor: ({ @name, @paths, @bucket }) ->
-    @bucket ?= S3_BUCKET
+    @bucket ?= APPLICATION_NAME
     throw new Error 'Requires a `name`' unless @name?

   path: ->


Update

Update

--- src/daemon/runner.coffee
+++ src/daemon/runner.coffee
@@ -19,9 +19,9 @@
   #   static options

-  nodemon: 'node_modules/.bin/nodemon'
+  nodemon: "#{__dirname}/../../node_modules/.bin/nodemon"

-  static: 'node_modules/.bin/static'
+  static: "#{__dirname}/../../node_modules/.bin/static"

   containsKaton: (path) ->
     test '-e', "#{path}/.katon"
@@ -36,12 +36,12 @@
     cat "#{path}/.katon"

   getCommandLine: (path) ->
-    if containsKaton path
-      readKaton path
-    else if containsPackage path
-      pkg = readPackage path
+    if @containsKaton path
+      @readKaton path
+    else if @containsPackage path
+      pkg = @readPackage path
       if pkg.main?
-        nodemon
+        @nodemon
       else
         pkg.scripts?.start
     else
@@ -51,6 +51,24 @@
     [command, options...] = commandLine.split(' ')
     command: command
     options: options
+
+  start: (path, port) ->
+    console.log __dirname
+    commandLine = @getCommandLine path
+    console.log commandLine
+    commandLineObject = @commandLineToObject commandLine
+    console.log commandLineObject
+    foreverOptions =
+      command: commandLineObject.command
+      options: commandLineObject.options
+      sourceDir: path
+      max: 1
+      silent: false
+      outFile: "#{path}/katon.logs"
+      env:
+        PORT: port
+    console.log foreverOptions
+    @forever.start '', foreverOptions

   # start: (path, port) ->


Removed a log.

Removed a log.

--- app/lib/LevelLoader.coffee
+++ app/lib/LevelLoader.coffee
@@ -98,7 +98,6 @@
     @sessionDependenciesRegistered ?= {}
     heroConfig = session.get('heroConfig')
     heroConfig ?= me.get('heroConfig') if session is @session and not @headless
-    console.error @level.get('name'), session.get('team'), session.get('creatorName'), 'had hero', heroConfig.thangType
     heroConfig ?= {inventory: {}, thangType: '529ffbf1cf1818f2be000001'}  # If all else fails, assign Tharin as the hero.
     session.set 'heroConfig', heroConfig unless _.isEqual heroConfig, session.get('heroConfig')
     url = "/db/thang.type/#{heroConfig.thangType}/version"


data scaffold can be used from cli or connect screen to produce coffee and js

--- src/steroids/generators/DataModule.coffee
+++ src/steroids/generators/DataModule.coffee
@@ -9,6 +9,7 @@
   constructor: (@options) ->
     @resourceName = @options.name || 'myResource'
     @moduleName = "#{@resourceName.toLowerCase()}"
+    @scriptExt = @options.otherOptions.scriptExt || null

   @usageParams: ->
     "<resourceName>"
@@ -35,6 +36,7 @@
     """

   generate: ->
+
     return new Promise (resolve, reject) =>
       path = require "path"
       paths = require "../paths"
@@ -44,49 +46,55 @@

       intendedModulePath = path.join paths.application.appDir, @moduleName

-      inquirer = require "inquirer"
+      # TODO: should structure differently
+      if @scriptExt != null
+        @do_generation(resolve)

-      if fs.existsSync intendedModulePath
-        reject new Error "Scaffold already exists for resource #{@resourceName}."
+      else
+        inquirer = require "inquirer"
+
+        if fs.existsSync intendedModulePath
+          reject new Error "Scaffold already exists for resource #{@resourceName}."
+          return
+
+        scriptExtPrompt =
+          type: "list"
+          name: "scriptExt"
+          message: "Do you want your scaffold to be generated with CoffeeScript or JavaScript files?"
+          choices: [
+            { name: "CoffeeScript", value: "coffee" }
+            { name: "JavaScript", value: "js"}
+          ]
+          default: "coffee"
+
+        promptList = [
+          scriptExtPrompt
+        ]
+
+        inquirer.prompt promptList, (answers) =>
+          @scriptExt = answers.scriptExt
+
+          @do_generation(resolve)
+
+  do_generation: (resolve) ->
+    #TODO: should be Resource.forName but Resource cannot require Provider if Provider requires Resource
+    Provider.resourceForName(@resourceName).then (resource)=>
+
+      @fields = resource.getFieldNamesSync()
+
+      if @fields.length == 0
+        reject new Error "No fields defined for resource #{@resourceName}."
         return

-      scriptExtPrompt =
-        type: "list"
-        name: "scriptExt"
-        message: "Do you want your scaffold to be generated with CoffeeScript or JavaScript files?"
-        choices: [
-          { name: "CoffeeScript", value: "coffee" }
-          { name: "JavaScript", value: "js"}
-        ]
-        default: "coffee"
+      steroidsCli.debug "DataModuleGenerator", "Generating scaffold with name: #{@resourceName} modulename: #{@modulename} and fields: #{JSON.stringify(@fields)}"

-      promptList = [
-        scriptExtPrompt
-      ]
-
-      #inquirer.prompt promptList, (answers) =>
-      #  @scriptExt = answers.scriptExt
-
-      @scriptExt = 'coffee'
-      #TODO: should be Resource.forName but Resource cannot require Provider if Provider requires Resource
-      Provider.resourceForName(@resourceName).then (resource)=>
-
-        @fields = resource.getFieldNamesSync()
-
-        if @fields.length == 0
-          reject new Error "No fields defined for resource #{@resourceName}."
-          return
-
-        steroidsCli.debug "DataModuleGenerator", "Generating scaffold with name: #{@resourceName} modulename: #{@modulename} and fields: #{JSON.stringify(@fields)}"
-
-        steroidsGenerators.dataModule {
-          @moduleName
-          @resourceName
-          @scriptExt
-          @fields
-        }, ->
-          steroidsCli.debug "DataModuleGenerator", "Generated Scaffold for #{@resourceName}"
-          resolve()
-
+      steroidsGenerators.dataModule {
+        @moduleName
+        @resourceName
+        @scriptExt
+        @fields
+      }, ->
+        steroidsCli.debug "DataModuleGenerator", "Generated Scaffold for #{@resourceName}"
+        resolve()

 module.exports = DataModuleGenerator


Hull is fully exposed if debug: true

Hull is fully exposed if debug: true

--- src/hull.coffee
+++ src/hull.coffee
@@ -60,5 +60,5 @@
             _h[i] = window.Hull[i];
         window.Hull = _h

-      cb(_h) if cb
+      cb(window.Hull) if cb
     return hull


Implement `TextEditor.prototype.getRowsPerPage`

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/kevinrenaers/atom.git/'


Fully functional once more

Fully functional once more

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/DogFoodBurrito/aviary.git/'


Fixed cannot use some commands problem

Fixed cannot use some commands problem

--- lib/toolbar-button-view.coffee
+++ lib/toolbar-button-view.coffee
@@ -1,4 +1,4 @@
-{View} = require 'atom-space-pen-views'
+{View, $} = require 'atom-space-pen-views'

 module.exports =
 class ToolbarButtonView extends View
@@ -14,9 +14,17 @@
       @addClass iconset

     @on 'click', =>
+
+      @previouslyFocusedElement = $(document.activeElement);
+
+      if @previouslyFocusedElement[0] and @previouslyFocusedElement[0] isnt document.body
+        @eventElement = @previouslyFocusedElement[0]
+      else
+        @eventElement = atom.views.getView(atom.workspace)
+
       if !@hasClass('disabled')
         if typeof(callback) == 'string'
-          atom.workspaceView.trigger callback
+          atom.commands.dispatch @eventElement, callback
         else
           callback()


Don't break on infinite loops

Don't break on infinite loops

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/nathan/lemma.git/'


add some basic prototype extensions

add some basic prototype extensions

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

--- lib/assets/javascripts/extensions.coffee
+++ lib/assets/javascripts/extensions.coffee
@@ -0,0 +1,16 @@
+Array.prototype.min = ->
+  return Math.min.apply(null,this)
+Array.prototype.max = ->
+  return Math.max.apply(null,this)
+Array.prototype.sum = ->
+  total = 0
+  for i in this
+    total += parseFloat(i) if i
+  total
+Array.prototype.includes = (entry)->
+  this.indexOf(entry) > -1
+Array.prototype.drop = (entry)->
+  this.splice(this.indexOf(entry),1)
+String.prototype.titleize = ->
+  return this.replace(/\_/g,' ').replace(/\b[a-z]/g, (letter)->
+    return letter[0].toUpperCase())


Create linked-list.coffee

Create linked-list.coffee

error: pathspec 'linked-list/linked-list.coffee' did not match any file(s) known to git

--- linked-list/linked-list.coffee
+++ linked-list/linked-list.coffee
@@ -0,0 +1,41 @@
+LinkedList = (value) ->
+  @value = value
+  @prev = this
+  @next = this
+
+LinkedList::appendNode = (value) ->
+  node = new LinkedList(value)
+  node.prev = this
+  node.next = @next
+
+  # Fix the linked list references
+  @next = @next.prev = node
+  node
+
+LinkedList::prependNode = (value) ->
+  node = new LinkedList(value)
+  node.prev = @prev
+  node.next = this
+
+  # Fix the linked list references
+  @prev = @prev.next = node
+  node
+
+LinkedList::removeNode = ->
+  # Create a reference around the node to be removed
+  @prev.next = @next
+  @next.prev = @prev
+
+  # Remove existing references to the current list
+  @next = @prev = this
+  this
+
+LinkedList::containsNode = (value) ->
+  return true  if @value is value
+  node = @next
+
+  # Loop through the connections until we hit ourselves again
+  while node isnt this
+    return true  if node.value is value
+    node = node.next
+  false


Create update_news.coffee

Create update_news.coffee

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

--- update_news.coffee
+++ update_news.coffee
@@ -0,0 +1,30 @@
+httpGet = (theUrl) ->
+	xmlHttp = null;
+
+	xmlHttp = new XMLHttpRequest();
+	xmlHttp.open( "GET", theUrl, false );
+	xmlHttp.send( null );
+	xmlHttp.responseText;
+
+url = "api.php"
+jsonArr = JSON.parse(httpGet(url));
+check = jsonArr.length
+feed = document.getElementById("feedForm");
+for_feed = "";
+for_temp = "";
+for i in jsonArr
+	for_feed += '
';
+	for_feed += '
' + i['title'];
+	for_feed += '
' + i['title_time'] + '
';
+	for_feed += '
';
+	for_feed += '
';
+	for_feed += '
';
+	for_feed += i['news_item']
+	for_feed += '

' + i['place']
+	for_feed += i['_when']
+	for_feed += '
';
+
+	for_feed += for_temp;
+	for_temp = for_feed;
+	for_feed = "";
+feed.innerHTML=for_temp;


refactor old test code

refactor old test code

--- utils/graph/graph_decorator_test.coffee
+++ utils/graph/graph_decorator_test.coffee
@@ -1,7 +1,7 @@
 GraphDecorator = require '../../server/lib/server/graph/graph_decorator'
 async          = require 'async'
 _              = require 'underscore'
-{decorateAll, generateUniqueRandomKey}  = require '../../server/lib/server/graph/fetch'
+FetchAllActivityParallel = require '../../server/lib/server/graph/fetch'

 fetchSingles = (callback)->
   rawResponse = require('fs').readFileSync './fixtures/single_activities.sample', 'utf8'
@@ -10,7 +10,7 @@
     callback null, decoratedResponse

 fetchMemberFollows = (callback)->
-  rawResponse = require('fs').readFileSync './fixtures/member_follows_bucket.sample', 'utf8'
+  rawResponse = require('fs').readFileSync './member_follows_bucket.sample', 'utf8'
   rawResponse = JSON.parse rawResponse
   GraphDecorator.decorateFollows rawResponse, (decoratedResponse)->
     callback null, decoratedResponse
@@ -33,55 +33,6 @@
   GraphDecorator.decorateMembers rawResponse, (decoratedResponse)->
     callback null, decoratedResponse

-randomIdToOriginal = {}
-decorateAll = (err, decoratedObjects)->
-  cacheObjects    = {}
-  overviewObjects = []
-  newMemberBucketIndex = null
-
-  for objects in decoratedObjects
-    for key, value of objects when key isnt "overview"
-      randomId = generateUniqueRandomKey()
-      randomIdToOriginal[key] = randomId
-      cacheObjects[randomId] = value
-
-    for activity in objects.overview
-      ids = []
-      for originalId in activity.ids
-        ids.push randomIdToOriginal[originalId]
-
-      activity.ids = ids
-
-    overviewObjects.push objects.overview
-
-  overview = _.flatten(overviewObjects)
-
-  return {}  if overview.length is 0
-
-  overview = _.sortBy(overview, (activity)-> activity.createdAt.first)
-
-  for activity, index in overview when activity.type is "CNewMemberBucketActivity"
-    newMemberBucketIndex = index
-
-  response            = {}
-  response.activities = cacheObjects
-  response.overview   = overview
-  response._id        = "1"
-  response.isFull     = true
-  response.from       = overview.first.createdAt.last
-  response.to         = overview.last.createdAt.first
-  response.newMemberBucketIndex = newMemberBucketIndex  if newMemberBucketIndex?
-
-  return response
-
-cachedIds = {}
-generateUniqueRandomKey =->
-  randomId = Math.floor(Math.random()*1000)
-  if cachedIds[randomId]
-    generateUniqueRandomKey()
-  else
-    cachedIds[randomId] = true
-    return randomId
-
-async.parallel [fetchMembers], (err, results)->
-  console.log JSON.stringify(decorateAll(err, results), null, 3)
+async.parallel [fetchMemberFollows], (err, results)->
+  f = new FetchAllActivityParallel Date.now(), {}
+  console.log JSON.stringify(f.decorateAll(err, results), null, 3)


Spacing fix on free agents report

Spacing fix on free agents report

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/usermindinc/hubot-jira-reporter.git/'


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

--- src/scripts/party_gifs.coffee
+++ src/scripts/party_gifs.coffee
@@ -0,0 +1,35 @@
+# Description:
+#   party_gifs.coffee - Make a GIF on the fly from search terms.
+#
+# Dependencies:
+#   None
+#
+# Configuration:
+#   None
+#
+# Commands:
+#   hubot gif me <query> - Create a gif using images from the web.
+#   hubot pty me <query> - Alias for 'gif'.
+#
+# Notes:
+#   GIFs created by the gifs.pty.io API.
+#   Images come from the Google Image API.
+#
+# Author:
+#   dzello
+
+module.exports = (robot) ->
+  robot.respond /(gif|pty)( me)? (.*)/i, (msg) ->
+    gifMe(msg, msg.match[3])
+
+gifMe = (msg, query) ->
+  url = "http://gifs.pty.io/#{encodeURIComponent(query)}.gif"
+  msg.http(url)
+    .head() (err, res, body) ->
+      if res.statusCode == 404
+        msg.send "Couldn't find any images."
+      else if err or res.statusCode > 404
+        msg.send "An error occurred creating that GIF."
+      else
+        msg.send url
+


Adding working-on script!

Adding working-on script!

error: pathspec 'scripts/working-on.coffee' did not match any file(s) known to git

--- scripts/working-on.coffee
+++ scripts/working-on.coffee
@@ -0,0 +1,61 @@
+# Description:
+#   Tell Hubot what you're working on so he can give out status updates when asked
+#
+# Dependencies:
+#   None
+#
+# Configuration:
+#   None
+#
+# Commands:
+#   hubot i am working on <anything> - Set what you're working on
+#   hubot what is everyone working on? - Find out what everyone is working on
+#
+# Author:
+#   beezee
+
+module.exports = (robot) ->
+
+  robot.respond /(?:what\'s|what is|whats) @?([\w .\-]+) working on(?:\?)?$/i, (msg) ->
+    name = msg.match[1].trim()
+
+    if name is "you"
+      msg.send "I dunno, robot things I guess."
+    else if name.toLowerCase() is robot.name.toLowerCase()
+      msg.send "World domination!"
+    else if name.match(/(everybody|everyone)/i)
+      messageText = '';
+      users = robot.brain.users()
+      for k, u of users
+          if u.workingon
+              messageText += "#{u.name} is working on #{u.workingon}\n"
+          else
+              messageText += ""
+      if messageText.trim() is "" then messageText = "Nobody told me a thing."
+      msg.send messageText
+    else
+      users = robot.brain.usersForFuzzyName(name)
+      if users.length is 1
+        user = users[0]
+        user.workingon = user.workingon or [ ]
+        if user.workingon.length > 0
+          msg.send "#{name} is working on #{user.workingon}."
+        else
+          msg.send "#{name} is slacking off."
+      else if users.length > 1
+        msg.send getAmbiguousUserText users
+      else
+        msg.send "#{name}? Who's that?"
+
+  robot.respond /(?:i\'m|i am|im) working on (.*)/i, (msg) ->
+    name = msg.message.user.name
+    user = robot.brain.userForName name
+
+    if typeof user is 'object'
+      user.workingon = msg.match[1]
+      msg.send "Okay #{user.name}, got it."
+    else if typeof user.length > 1
+      msg.send "I found #{user.length} people named #{name}"
+    else
+      msg.send "I have never met #{name}"
+


Removes debug console.logs

Removes debug console.logs


use bundle test directory

use bundle test directory

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/stratuseditor/stratus.git/'


updated variable names [deploy: production]

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/domjtalbot/Portfolio.git/'


Adding scrollview back for testing

Adding scrollview back for testing

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/nahberry/tudu-list.git/'


fixed erroneous location for initial tab

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/kitchensink.git/'


fix (Grunt) api-reference dir path

fix (Grunt) api-reference dir path

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/'


clear levels of banned users

clear levels of banned users

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/'


Tests for UniquePacket

Tests for UniquePacket

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

--- test/UniquePacket.coffee
+++ test/UniquePacket.coffee
@@ -0,0 +1,46 @@
+uniquepacket = require "../src/components/UniquePacket"
+socket = require "../src/lib/InternalSocket"
+
+setupComponent = ->
+    c = uniquepacket.getComponent()
+    ins = socket.createSocket()
+    out = socket.createSocket()
+    c.inPorts.in.attach ins
+    c.outPorts.out.attach out
+    return [c, ins, out]
+
+exports["test all unique"] = (test) ->
+    [c, ins, out] = setupComponent()
+
+    expects = [
+      'one'
+      'two'
+      'three'
+    ]
+
+    tried = 0
+    out.on "data", (data) ->
+        test.equal data, expects[tried]
+        tried++
+        test.done() if tried is expects.length
+
+    ins.send val for val in expects
+
+exports["test two unique"] = (test) ->
+    [c, ins, out] = setupComponent()
+
+    trys = [
+      'one'
+      'one'
+      'two'
+    ]
+    expects = [
+      'one'
+      'two'
+    ]
+
+    out.on "data", (data) ->
+        test.equal data, expects.shift()
+        test.done() if expects.length is 0
+
+    ins.send val for val in trys


bugfix: select sheet to edit over sheetid

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-ex-gdrive.git/'


Add the most important script in existence

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

--- scripts/robot_roll_call.coffee
+++ scripts/robot_roll_call.coffee
@@ -0,0 +1,22 @@
+# Robot Roll Call
+#
+# robot roll call - does what it says
+#
+
+robots = [
+  "http://i.imgur.com/6PcNC.jpg", # robot roll call
+  "http://i.imgur.com/9UmSw.jpg", # cambot
+  "http://i.imgur.com/1CrLw.jpg", # gypsy
+  "http://i.imgur.com/SNpTp.jpg", # tom servo
+  "http://i.imgur.com/HVXpw.jpg", # croooow!
+]
+
+module.exports = (robot) ->
+  robot.hear /robot roll call/i, (msg) ->
+    sendRobot(0,0,msg);
+
+sendRobot = (index,timeout,msg) ->
+  msg.send robots[index];
+  index++;
+  if index < robots.length
+    setTimeout (-> sendRobot index, timeout, msg), 750;


Corrected number of practice trials and removed incorrect touch-disable logic

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/'


Began to update the data model to more accurately refelct the task requirements


debug binary tests

debug binary tests

--- test/binary_tests.coffee
+++ test/binary_tests.coffee
@@ -92,6 +92,6 @@
             @response.statusCode.should.equal 404

         it "And binary of data should be deleted", (done) ->
-            @client.get '/data/321/', (err, res, body) =>
+            @client.get 'data/321/', (err, res, body) =>
                 should.not.exist body.binary["test.png"]
                 done()


sending all events to particles

sending all events to particles

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

--- test/timed_events.coffee
+++ test/timed_events.coffee
@@ -0,0 +1,10 @@
+module "TimedEvents"
+
+test "testing for equality", ->
+  one = 1
+
+  # Test for equality of two objects
+  equals one, 1
+
+# Clear out the module
+module()


allow admins to write whatever docs to tabcat-data DB


add good-night script

add good-night script

error: pathspec 'scripts/good-night.coffee' did not match any file(s) known to git

--- scripts/good-night.coffee
+++ scripts/good-night.coffee
@@ -0,0 +1,41 @@
+# Description:
+#   GOOD Night
+#
+# Dependencies:
+#   None
+#
+# Configuration:
+#   None
+#
+# Commands:
+#   good night
+#
+# Author:
+#   noahhendrix
+
+ways_to_say_good_night = [
+  "Good night, baby.",
+  "Night hot stuff.",
+  "Like I'm going to let you get any sleep",
+  "LOOK...the moon is calling you, SEE...the stars are shining for you, HEAR... my heart saying good night.",
+  "Sleep tight, don't let the bed bugs bite",
+  "May you never urinate the sweet sweet sounds of 70's disco funk",
+  "So long, and thanks for all the fish.",
+  "Finally",
+  "À voir!",
+  "Don't let the back door hit ya where the good Lord split ya",
+  "May your feet never fall off and grow back as cactuses",
+  "TTYL",
+  "C U L8R",
+  "Fine, then go!",
+  "Cheers",
+  "Uh, I can hear the voices calling me...see ya",
+  "In a while, crocodile",
+  "SHOO! SHOO!",
+  "No more of you.",
+  "Avada Kedavra"
+]
+
+module.exports = (robot) ->
+  robot.hear /(good night|bye|nighty night|снов|ночи|спокойной)/i, (msg) ->
+    msg.send msg.random ways_to_say_good_night


Make it work for now.

Make it work for now.

--- client/app/MainApp/login/loginview.coffee
+++ client/app/MainApp/login/loginview.coffee
@@ -190,6 +190,11 @@
           duration  : 2000
         @loginForm.reset()

+        @hideView()
+
+        if KD.config.profileEntryPoint? or KD.config.groupEntryPoint?
+          $('#group-landing').css 'opacity', 0
+
   doRequest:(formData)->

     KD.remote.api.JInvitationRequest.create formData, (err, result)=>


Revert the re-initialize fix from client side, since we fixed this issue in oskite.

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/'


Client: Activity: Updated docs.

Client: Activity: Updated docs.

--- client/app/lib/socialapicontroller.coffee
+++ client/app/lib/socialapicontroller.coffee
@@ -269,7 +269,7 @@

     channel = options.channel

-    # if we find the channel in cache, replace item with it
+    # since this is already an instance event, we will use find that channel instance and update it.
     cacheItem = socialapi.retrieveCachedItem channel.typeConstant, channel.id

     cacheItem.purpose = channel.purpose


ChatSettingsPane: Use toggleButtons method.


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/'


Reworking code, found a huge flaw. -_-

Reworking code, found a huge flaw. -_-

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/'


Create HubotMad.coffee

Create HubotMad.coffee

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

--- scripts/HubotMad.coffee
+++ scripts/HubotMad.coffee
@@ -0,0 +1,20 @@
+# Description:
+#  Mad
+#
+# Dependencies:
+#   None
+#
+# Configuration:
+#   None
+#
+# Commands:
+#   Mad - Recite Mad
+#
+# Author:
+#   lcsaph
+
+Mad = "凸(｀0´)凸"
+
+
+module.exports = (robot) ->
+  robot.respond / (mad)


Modified in browser at pixie.strd6.com

Modified in browser at pixie.strd6.com

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

--- test/clamp_bounds.coffee
+++ test/clamp_bounds.coffee
@@ -0,0 +1,17 @@
+module "ClampBounds"
+
+test "should clamp", ->
+  one = 1
+
+  # Test for equality of two objects
+  equals one, 1
+
+test "testing boolean values", ->
+  someFunction = ->
+    return true
+
+  # Test if someFunction returns true
+  ok someFunction()
+
+# Clear out the module
+module()


Fix formatting

Fix formatting

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/'


Create CoffeeScripts snippets file

Create CoffeeScripts snippets file

/bin/sh: 1: Syntax error: "(" unexpected


Fixed a bug where projection in /db/campaign/.../levels wasn't working correctly anymore if project wasn't included.

--- server/campaigns/campaign_handler.coffee
+++ server/campaigns/campaign_handler.coffee
@@ -39,7 +39,7 @@

   getRelatedLevels: (req, res, campaign, projection) ->
     extraProjectionProps = []
-    if projection
+    unless _.isEmpty(projection)
       # Make sure that permissions and version are fetched, but not sent back if they didn't ask for them.
       extraProjectionProps.push 'permissions' unless projection.permissions
       extraProjectionProps.push 'version' unless projection.version


Update asset.coffee

Update asset.coffee

--- src/fs_utils/asset.coffee
+++ src/fs_utils/asset.coffee
@@ -14,7 +14,7 @@
 getAssetDirectory = (path, convention) ->
   split = path.split(common.sep)
   # Creates thing like this
-  # 'app/', 'app/assets/', 'app/assets/thing/', 'app/assets/thing/thing2.html'
+  # 'app/', 'app/assets/', 'app/assets/thing/', 'app/assets/thing/thing2.html/'
   split
     .map (part, index) ->
       split.slice(0, index).concat([part, '']).join(common.sep)


adding date formatting specs

adding date formatting specs

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

--- spec/date_formatting_spec.coffee
+++ spec/date_formatting_spec.coffee
@@ -0,0 +1,32 @@
+Formatter = require "../Resources/ui/DateFormatting"
+Event = require "../Resources/model/Event"
+
+describe 'date formatting', ->
+	beforeEach ->
+		@event = new Event
+			date: new Date "4/7/2013"
+			today: new Date "4/5/2013"
+
+	it 'should format numbers using commas', ->
+		expect(Formatter.formatNumber(123456)).toEqual "123,456"
+
+	it 'should format days away', ->
+		expect(Formatter.daysAwayText(@event)).toEqual "2 days away"
+		@event.today = new Date "4/6/2013"
+		expect(Formatter.daysAwayText(@event)).toEqual "1 day away"
+		@event.today = new Date "4/8/2013"
+		expect(Formatter.daysAwayText(@event)).toEqual "1 day ago"
+		@event.today = new Date "4/9/2013"
+		expect(Formatter.daysAwayText(@event)).toEqual "2 days ago"
+
+	it 'should format hours', ->
+		expect(Formatter.hoursAwayText(@event)).toEqual "48 hours away"
+
+	it 'should format minutes', ->
+		expect(Formatter.minutesAwayText(@event)).toEqual "2,880 minutes away"
+
+	it 'should format seconds', ->
+		expect(Formatter.secondsAwayText(@event)).toEqual "172,800 seconds away"
+
+	it 'should format date text properly', ->
+		expect(Formatter.dateText(@event)).toEqual "4/7/2013"


Fix /?hour_of_code=true redirect

Fix /?hour_of_code=true redirect

--- app/core/Router.coffee
+++ app/core/Router.coffee
@@ -23,6 +23,7 @@
       if window.serverConfig.picoCTF
         return @routeDirectly 'play/CampaignView', ['picoctf'], {}
       if utils.getQueryVariable 'hour_of_code'
+        delete window.alreadyLoadedView
         return @navigate "/play?hour_of_code=true", {trigger: true, replace: true}
       unless me.isAnonymous() or me.isStudent() or me.isTeacher() or me.isAdmin() or me.hasSubscription()
         delete window.alreadyLoadedView


Make required path lowercase

Make required path lowercase

--- src/app/text-mate-theme.coffee
+++ src/app/text-mate-theme.coffee
@@ -1,6 +1,6 @@
 _ = require 'underscore'
 fs = require 'fs'
-Theme = require 'Theme'
+Theme = require 'theme'

 module.exports =
 class TextMateTheme extends Theme


Added a slider JQueryUI binding

Added a slider JQueryUI binding

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/threehv/kolo.git/'


feat(renderers.cson): Add renderers snippets

error: pathspec 'snippets/renderers.cson' did not match any file(s) known to git

--- snippets/renderers.cson
+++ snippets/renderers.cson
@@ -0,0 +1,61 @@
+'.source.js':
+
+  # -------------------------------------------------
+  # Renderers
+  # -------------------------------------------------
+
+  'THREE.CanvasRenderer':
+    'prefix': 'canvasrenderer'
+    'body': 'new THREE.CanvasRenderer(${1:parameters})${0}'
+
+  'THREE.WebGLRenderer':
+    'prefix': 'webglrenderer'
+    'body': 'new THREE.WebGLRenderer(${1:parameters})${0}'
+
+  'THREE.WebGLRenderTarget':
+    'prefix': 'webglrendertarget'
+    'body': 'new THREE.WebGLRenderTarget(${1:width}, ${2:height}, ${3:options})${0}'
+
+  'THREE.WebGLRenderTargetCube':
+    'prefix': 'webglrendertargetcube'
+    'body': 'new THREE.WebGLRenderTargetCube(${1:width}, ${2:height}, ${3:options})${0}'
+
+  # -------------------------------------------------
+  # Shaders
+  # -------------------------------------------------
+
+  'THREE.ShaderChunk':
+    'prefix': 'shaderchunk'
+    'body': 'new THREE.ShaderChunk()${0}'
+
+  'THREE.ShaderLib':
+    'prefix': 'shaderlib'
+    'body': 'new THREE.ShaderLib[\'${1:shader\'}]${0}'
+
+  'THREE.UniformsLib':
+    'prefix': 'uniformslib'
+    'body': 'new THREE.UniformsLib[\'${1:shader\'}]${0}'
+
+  'THREE.UniformsUtils':
+    'prefix': 'uniformsutils'
+    'body': 'new THREE.UniformUtils.${0}'
+
+  # -------------------------------------------------
+  # WebGL
+  # -------------------------------------------------
+
+  'THREE.LensFlarePlugin':
+    'prefix': 'lensflareplugin'
+    'body': 'new THREE.LensFlarePlugin()${0}'
+
+  'THREE.SpritePlugin':
+    'prefix': 'spriteplugin'
+    'body': 'new THREE.SpritePlugin()${0}'
+
+  'THREE.ShadowMapPlugin':
+    'prefix': 'shadowmapplugin'
+    'body': 'new THREE.ShadowMapPlugin()${0}'
+
+  # -------------------------------------------------
+  # WebGL Plugins
+  # -------------------------------------------------


Character (js) class

Character (js) class

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/manudwarf/srd.git/'


minor

minor


more extensions to the help language, and drafting the new command


[codegen] Allow emitting to a file

[codegen] Allow emitting to a file

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/'


Add specs with invalid objects

Add specs with invalid objects

--- spec/config-spec.coffee
+++ spec/config-spec.coffee
@@ -1313,6 +1313,10 @@
           expect(atom.config.get('foo.bar.aColor')).toEqual {red: 100, green: 255, blue: 2, alpha: .5}
           atom.config.set('foo.bar.aColor', {red: 255})
           expect(atom.config.get('foo.bar.aColor')).toEqual {red: 255, green: 0, blue: 0, alpha: 1}
+          atom.config.set('foo.bar.aColor', {red: 1000})
+          expect(atom.config.get('foo.bar.aColor')).toEqual {red: 255, green: 0, blue: 0, alpha: 1}
+          atom.config.set('foo.bar.aColor', {red: 'dark'})
+          expect(atom.config.get('foo.bar.aColor')).toEqual {red: 0, green: 0, blue: 0, alpha: 1}

         it 'reverts back to the default value when undefined is passed to set', ->
           atom.config.set('foo.bar.aColor', 'rgb(255,255,255)')


Spy on node's fs

Spy on node's fs

--- spec/config-spec.coffee
+++ spec/config-spec.coffee
@@ -76,8 +76,10 @@
       expect(config.getPositiveInt('editor.preferredLineLength', 80)).toBe 80

   describe ".save()", ->
-    beforeEach ->
-      spyOn(fs, 'writeFileSync')
+    nodeFs = require 'fs'
+
+    beforeEach ->
+      spyOn(nodeFs, 'writeFileSync')
       jasmine.unspy config, 'save'

     describe "when ~/.atom/config.json exists", ->
@@ -88,11 +90,11 @@
         config.set("x.y.z", 3)
         config.setDefaults("a.b", e: 4, f: 5)

-        fs.writeFileSync.reset()
+        nodeFs.writeFileSync.reset()
         config.save()

-        expect(fs.writeFileSync.argsForCall[0][0]).toBe(path.join(config.configDirPath, "config.json"))
-        writtenConfig = JSON.parse(fs.writeFileSync.argsForCall[0][1])
+        expect(nodeFs.writeFileSync.argsForCall[0][0]).toBe(path.join(config.configDirPath, "config.json"))
+        writtenConfig = JSON.parse(nodeFs.writeFileSync.argsForCall[0][1])
         expect(writtenConfig).toEqual config.settings

     describe "when ~/.atom/config.json doesn't exist", ->
@@ -103,12 +105,12 @@
         config.set("x.y.z", 3)
         config.setDefaults("a.b", e: 4, f: 5)

-        fs.writeFileSync.reset()
+        nodeFs.writeFileSync.reset()
         config.save()

-        expect(fs.writeFileSync.argsForCall[0][0]).toBe(path.join(config.configDirPath, "config.cson"))
+        expect(nodeFs.writeFileSync.argsForCall[0][0]).toBe(path.join(config.configDirPath, "config.cson"))
         CoffeeScript = require 'coffee-script'
-        writtenConfig = CoffeeScript.eval(fs.writeFileSync.argsForCall[0][1], bare: true)
+        writtenConfig = CoffeeScript.eval(nodeFs.writeFileSync.argsForCall[0][1], bare: true)
         expect(writtenConfig).toEqual config.settings

   describe ".setDefaults(keyPath, defaults)", ->


handle double click and triple click selection.

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/robey/carrot16.git/'


add validateemailhandlerhelper.coffee

add validateemailhandlerhelper.coffee


[➠] Added variables to Booster.

[➠] Added variables to Booster.

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/bitcoveries/booster.git/'


Make html save action send the correct data type

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/'


see issue #18

see issue #18

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/CaryLandholt/kristile.com.git/'


Remove # which is interpreted as a tag

Remove # which is interpreted as a tag

This spec was not running because of it since
jasmine-tagged is configured to filter tags by
process.platform

--- spec/context-menu-manager-spec.coffee
+++ spec/context-menu-manager-spec.coffee
@@ -105,7 +105,7 @@
           expect(menu[2].command).toEqual 'dev-command'
           expect(menu[3]).toBeUndefined()

-  describe "#executeBuildHandlers", ->
+  describe "executeBuildHandlers", ->
     menuTemplate = [
         label: 'label'
         executeAtBuild: ->
@@ -119,4 +119,3 @@

       expect(buildFn).toHaveBeenCalled()
       expect(buildFn.mostRecentCall.args[0]).toBe event
-


Add component lifecycle snippet

Add component lifecycle snippet

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/nawatts/dotfiles.git/'


Add base/Component class.

Add base/Component class.

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/'


增加添加同级节点的操作

增加添加同级节点的操作

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/ben7th/mindivy.git/'


Remove unused prototype properties

Remove unused prototype properties

--- src/text-editor-component.coffee
+++ src/text-editor-component.coffee
@@ -21,17 +21,15 @@
   displayName: 'TextEditorComponent'
   mixins: [SubscriberMixin]

-  visible: false
   pendingScrollTop: null
   pendingScrollLeft: null
-  selectOnMouseMove: false
   updateRequested: false
   updatesPaused: false
   updateRequestedWhilePaused: false
+  heightAndWidthMeasurementRequested: false
   cursorMoved: false
   selectionChanged: false
   scrollSensitivity: 0.4
-  heightAndWidthMeasurementRequested: false
   inputEnabled: true
   domPollingInterval: 100
   domPollingIntervalId: null


[add] [coins] Added 'pay' to coin.command

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/'


Create generate-cli-docs.coffee

Create generate-cli-docs.coffee

error: pathspec 'docs/_extensions/generate-cli-docs.coffee' did not match any file(s) known to git

--- docs/_extensions/generate-cli-docs.coffee
+++ docs/_extensions/generate-cli-docs.coffee
@@ -0,0 +1,45 @@
+# Generates CLI docs for Dredd.
+#
+# Purpose:
+#   Thanks to this we can be sure the CLI docs are always up-to-date.
+#
+# Usage:
+#
+#   $ cat document-template.md | coffee generate-cli-docs.coffee > document.md
+
+
+fs = require('fs')
+path = require('path')
+ect = require('ect')
+clone = require('clone')
+
+options = require('../../src/options')
+
+
+# Turn options into a sorted array
+data = {options: []}
+
+for own name, attributes of options
+  option = clone(attributes)
+  option.description = option.description.trim()
+  option.name = name
+  data.options.push(option)
+
+data.options.sort((o1, o2) ->
+  switch
+    when o1.name < o2.name then -1
+    when o1.name > o2.name then 1
+    else 0
+)
+
+
+# Process stdin
+source = ''
+process.stdin.on('data', (buffer) ->
+  source += buffer.toString()
+)
+process.stdin.on('end', ->
+  renderer = ect({root: {source}})
+  rendered = renderer.render('source', data)
+  process.stdout.write(rendered)
+)


+ src/defineProperty.coffee

+ src/defineProperty.coffee

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

--- src/defineProperty.coffee
+++ src/defineProperty.coffee
@@ -0,0 +1,30 @@
+isObject        = (o)-> o and typeof o is 'object'
+defineProperty  = Object.defineProperty
+if !defineProperty
+  defineProperty = (obj, key, descriptor)->
+    value = descriptor.value if descriptor
+    obj[key] = value
+    return
+
+
+module.exports  = (object, key, value, aOptions)->
+  writable = true
+  descriptor =
+    configurable: true
+    enumerable: false
+  if aOptions
+    descriptor.enumerable = aOptions.enumerable is true
+    descriptor.configurable = aOptions.configurable isnt false
+    if aOptions.get
+      isAccessor = true
+      descriptor.get = aOptions.get
+    if aOptions.set
+      isAccessor = true
+      descriptor.set = aOptions.set
+    writable = aOptions.writable isnt false
+    value = aOptions.value if value is undefined
+  if not isAccessor
+    descriptor.writable = writable
+    descriptor.value = value
+  defineProperty object, key, descriptor
+


Don't preload when player hasn't finished typing this or self.

--- app/views/play/level/tome/SpellView.coffee
+++ app/views/play/level/tome/SpellView.coffee
@@ -476,8 +476,9 @@
     currentLine = _.string.rtrim(@aceDoc.$lines[cursorPosition.row].replace(/[ \t]*\/\/[^"']*/g, ''))  # trim // unless inside "
     endOfLine = cursorPosition.column >= currentLine.length  # just typed a semicolon or brace, for example
     beginningOfLine = not currentLine.substr(0, cursorPosition.column).trim().length  # uncommenting code, for example
+    incompleteThis = /^(s|se|sel|self|t|th|thi|this)$/.test currentLine.trim()
     #console.log 'finished?', valid, endOfLine, beginningOfLine, cursorPosition, currentLine.length, aether, new Date() - 0, currentLine
-    if valid and (endOfLine or beginningOfLine)
+    if valid and (endOfLine or beginningOfLine) and not incompleteThis
       if @autocastDelay > 60000
         @preload()
       else


Add tests for show view helpers.

Add tests for show view helpers.

error: pathspec 'apps/show/test/helpers/view_helpers.coffee' did not match any file(s) known to git

--- apps/show/test/helpers/view_helpers.coffee
+++ apps/show/test/helpers/view_helpers.coffee
@@ -0,0 +1,22 @@
+ViewHelpers = require '../../helpers/view_helpers'
+{ fabricate } = require 'antigravity'
+
+describe 'ViewHelpers', ->
+  describe 'sailthruTags', ->
+    it 'formats sailthru tags properly', ->
+      artist = fabricate 'artist', id: 'artist-id'
+      partner = fabricate 'partner', id: 'partner-id'
+      location = fabricate 'location', city: 'New York', country: 'US'
+      show = fabricate 'show', partner: partner, artists: [artist], location: location
+      ViewHelpers.sailthruTags(show).should.eql(
+        ['artist-id', 'partner-id', 'gallery-show', 'new-york', 'us']
+      )
+
+    it 'ignores blank fields', ->
+      artist = fabricate 'artist', id: 'artist-id'
+      partner = fabricate 'partner', id: 'partner-id'
+      location = fabricate 'location', city: null, country: 'US'
+      show = fabricate 'show', partner: partner, artists: [artist], location: location
+      ViewHelpers.sailthruTags(show).should.eql(
+        ['artist-id', 'partner-id', 'gallery-show', 'us']
+      )


Rube Goldberg loading overlay for Centili

--- resources/assets/lib/store-centili.coffee
+++ resources/assets/lib/store-centili.coffee
@@ -18,6 +18,34 @@

 export class StoreCentili
   widget = '#c-mobile-payment-widget'
+
+  ####################################################
+  # This junk is stupid hack for a loading overlay
+  # while the Centili script loads EVEN MORE SCRIPTS
+  ####################################################
+  clicked = false
+  observer = new MutationObserver (mutations) ->
+    mutations.forEach (mutation) ->
+      $nodes = $(mutation.addedNodes)
+      console.log($nodes)
+      frame = $.grep $nodes, (elem) ->
+        elem.id == 'fancybox-frame'
+
+      content = $.grep $nodes, (elem) ->
+        elem.id == 'fancybox-content'
+
+      frame.length && window.LoadingOverlay.hide()
+      if content.length && clicked
+        # Queue up a click event
+        Timeout.set 0, ->
+          window.centiliJQuery(widget).trigger('click')
+
+  $(document).on 'turbolinks:load', ->
+    if document.querySelector(widget)
+      observer.observe document.body, childList: true, subtree: true
+  ####################################################
+  # End stupid
+  ####################################################

   @promiseInit: ->
     # Load Centili scripts and css async.
@@ -44,4 +72,8 @@
       document.body.appendChild(link)

   @fakeClick: ->
-    window.centiliJQuery && window.centiliJQuery(widget).trigger('click')
+    window.LoadingOverlay.show()
+    window.LoadingOverlay.show.flush()
+    if window.centiliJQuery
+      window.centiliJQuery(widget).trigger('click')
+      clicked = true


only click the plus

only click the plus

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/stevelacy/portal.git/'


Don't reuse windows when --wait flag is set

--- src/atom-application.coffee
+++ src/atom-application.coffee
@@ -193,7 +193,9 @@
     @openPath(pathToOpen, pidToKillWhenClosed) for pathToOpen in pathsToOpen

   openPath: (pathToOpen, pidToKillWhenClosed) ->
-    if openedWindow = @windowForPath(pathToOpen)
+    existingWindow = @windowForPath(pathToOpen) unless pidToKillWhenClosed
+    if existingWindow
+      openedWindow = existingWindow
       openedWindow.focus()
       openedWindow.sendCommand('window:open-path', pathToOpen)
     else


Fixes unexecutable commands on win32 in BP

Signed-off-by: Luca Moser <9b3d2b0af2c9411a8a60206f2922b47c0a6fdae6@gmail.com>

--- src/buffered-process.coffee
+++ src/buffered-process.coffee
@@ -55,7 +55,10 @@
             "\"#{arg.replace(/"/g, '\\"')}\""
       else
         cmdArgs = []
-      cmdArgs.unshift("\"#{command}\"")
+      if /\s/.test(command)
+        cmdArgs.unshift("\"#{command}\"")
+      else
+        cmdArgs.unshift(command)
       cmdArgs = ['/s', '/c', "\"#{cmdArgs.join(' ')}\""]
       cmdOptions = _.clone(options)
       cmdOptions.windowsVerbatimArguments = true


removed unused variables

removed unused variables

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/'


error handling in app

error handling in app

[#101110662]

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/review.git/'


Resize sidebar on initial page refresh.

Resize sidebar on initial page refresh.

--- app/assets/javascripts/application.js.coffee
+++ app/assets/javascripts/application.js.coffee
@@ -269,11 +269,19 @@
         '

')
     checkBootstrapBreakpoints()

-  $(window).on "resize", (e) ->
+  fitSidebarForSize = ->
     oldBootstrapBreakpoint = bootstrapBreakpoint
     checkBootstrapBreakpoints()
     if bootstrapBreakpoint != oldBootstrapBreakpoint
-      $(document).trigger('breakpoint:change',[bootstrapBreakpoint])
+      $(document).trigger('breakpoint:change', [bootstrapBreakpoint])
+
+  checkInitialSidebarSize = ->
+    if bootstrapBreakpoint is "xs" or "sm"
+      $(document).trigger('breakpoint:change', [bootstrapBreakpoint])
+
+  $(window).on "resize", (e) ->
+    fitSidebarForSize()

   setBootstrapBreakpoints()
+  checkInitialSidebarSize()
   new Aside()


Call wrapper.draw() function for age chart

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/Margatroid/Anilytics.git/'


Do not trigger keyup event if we are persisting state

Triggering keyup will re-render the dropdown which is not needed when option persistWhenHide is true

--- app/assets/javascripts/gl_dropdown.js.coffee
+++ app/assets/javascripts/gl_dropdown.js.coffee
@@ -317,12 +317,17 @@
   hidden: (e) =>
     @removeArrayKeyEvent()

+    $input = @dropdown.find(".dropdown-input-field")
+
     if @options.filterable
-      @dropdown
-        .find(".dropdown-input-field")
+      $input
         .blur()
         .val("")
-        .trigger("keyup")
+
+    # Triggering 'keyup' will re-render the dropdown which is not always required
+    # specially if we want to keep the state of the dropdown needed for bulk-assignment
+    if not @options.persistWhenHide
+      $input.trigger("keyup")

     if @dropdown.find(".dropdown-toggle-page").length
       $('.dropdown-menu', @dropdown).removeClass PAGE_TWO_CLASS


Remove hardcoded version

Remove hardcoded version

--- server/startup/serverRunning.coffee
+++ server/startup/serverRunning.coffee
@@ -15,7 +15,7 @@
 	Meteor.setTimeout ->
 		msg = [
 			"Rocket.Chat Version: #{RocketChat.Info.version}"
-			"     NodeJS Version: #{'7.6.2'} - #{process.arch}"
+			"     NodeJS Version: #{process.versions.node} - #{process.arch}"
 			"           Platform: #{process.platform}"
 			"       Process Port: #{process.env.PORT}"
 			"           Site URL: #{RocketChat.settings.get('Site_Url')}"
@@ -30,7 +30,7 @@

 		msg = msg.join('\n')

-		if semver.satisfies('7.6.2', desiredNodeVersionMajor)
+		if semver.satisfies(process.versions.node, desiredNodeVersionMajor)
 			SystemLogger.startup_box msg, 'SERVER RUNNING'
 		else
 			msg += [


Use native DOM APIs to remove pane item views

--- src/pane-element.coffee
+++ src/pane-element.coffee
@@ -111,16 +111,9 @@
     itemView.style.display = 'none'

   itemRemoved: ({item, index, destroyed}) ->
-    if item instanceof $
-      viewToRemove = item
-    else
-      viewToRemove = @model.getView(item).__spacePenView
-
-    if viewToRemove?
-      if destroyed
-        viewToRemove.remove()
-      else
-        viewToRemove.detach()
+    if viewToRemove = @model.getView(item)
+      callRemoveHooks(viewToRemove)
+      viewToRemove.remove()

   paneDestroyed: ->
     @subscriptions.dispose()


Adding script to retrieve latest headlines from Google News.

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

--- src/scripts/news.coffee
+++ src/scripts/news.coffee
@@ -0,0 +1,43 @@
+# Returns the latest news headlines from Google
+#
+# news - Get the latest headlines
+# news <topic> - Get the latest headlines for a specific topic
+
+module.exports = (robot) ->
+  robot.respond /news(?: me| on)?\s?(.*)/, (msg) ->
+    query msg, (response, err) ->
+      return msg.send err if err
+
+      strings = []
+
+      topic = msg.match[1]
+
+      if (topic != "")
+        strings.push "Here's the latest news on \"#{topic}\":\n"
+      else
+        strings.push "Here's the latest news headlines:\n"
+
+      for story in response.responseData.results
+        strings.push story.titleNoFormatting.replace("'", "'").replace(""", "\"")
+        strings.push story.unescapedUrl + "\n"
+
+      msg.send strings.join "\n"
+
+  query = (msg, cb) ->
+    if (msg.match[1] != "")
+      msg.http("https://ajax.googleapis.com/ajax/services/search/news?v=1.0&rsz=5")
+        .query(q: msg.match[1])
+        .get() (err, res, body) ->
+          complete cb, body, err
+    else
+      msg.http("https://ajax.googleapis.com/ajax/services/search/news?v=1.0&rsz=5&topic=h")
+        .get() (err, res, body) ->
+          complete cb, body, err
+
+  complete = (cb, body, err) ->
+    try
+      response = JSON.parse body
+    catch err
+      err = "Sorry, but I could not fetch the latest headlines."
+    cb(response, err)
+


Tests: Enable tests on parallel sets.

Tests: Enable tests on parallel sets.

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/'


Resample background colors whenever stylesheets change

This prevents a flicker that occurred on theme changes when we just
detected this via polling. I'm going to leave the polling as a catch-all
in case the editor is styled inline in some way.

--- src/editor-component.coffee
+++ src/editor-component.coffee
@@ -679,6 +679,7 @@

   onStylesheetsChanged: (stylesheet) ->
     @refreshScrollbars() if @containsScrollbarSelector(stylesheet)
+    @sampleBackgroundColors()
     @remeasureCharacterWidthsIfVisibleAfterNextUpdate = true
     @requestUpdate() if @visible


add username field

add username field


Remove console output for every request

Remove console output for every 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/sebastianpopp/d-teamwork.git/'


Improve EditorStates class in index.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/will-hart/marp.git/'


test recipe;

test recipe;

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

--- test/test-recipe.coffee
+++ test/test-recipe.coffee
@@ -0,0 +1,5 @@
+rime = require '../app.nw/rime'
+
+exports.testRecipeValidation = (test) ->
+  test.done()
+


Adding rules script with lagbot's regex magic

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

--- scripts/rules.coffee
+++ scripts/rules.coffee
@@ -0,0 +1,42 @@
+# Description:
+#   Fetch all rules or a single room for a user
+#
+# Commands:
+#   hubot rules - Reply with a link to the rules
+#   hubot rules <key> - to reply with a specific rule
+#   hubot rules <key> to <nick> - to send a rule to a user - 'all' for link
+
+RULES_URL = "http://goo.gl/Tl77U2"
+RULES =
+  research:  "Do your research before hand. Your question may be answerable with a quick Google search or by simply experimenting. If it's a concept you're confused about, first check out our docs. If you're using a method in Laravel, you can look it up in the API docs."
+  explain:   "If you've tried Googling, explain what terms you've tried to use so people can better help you. Saying that something \"doesn't work\" is completely useless to the people who are trying to help you. Please show all available information you have that indicates to you that something doesn't work."
+  paste:     "Anything more than 2 lines goes in a paste. Spamming the channel with walls of text is not welcome. Clearly explain what is happening on http://help.laravel.io to better explain yourself, or just a simple paste or gist if you are just creating a simple example."
+  nopb:      "Do not use any paste service that is not http://laravel.io/bin or http://gist.github.com to post code. Pastebin, for example has a tiny font and it has ads on it which cause the page to load slowly. Other paste services generally look like crap."
+  english:   "Remember that using English is preferable, as the majority of people in the channel speak it. Asking in other languages may give you a response, but English is best."
+  polite:    "Treat people in a considerate manner, as they are volunteering *their* time to help *you*. If you're being annoying you may be muted by one of the channel ops."
+  eccentric: "Do not use excessive punctuation. This includes question marks (?), exclamation marks (!) and ellipsis (...)."
+  begging:   "Do not beg / plead with people to help you. This includes asking questions like \"Any ideas?\" after posting your original question."
+  repeating: "Do not repeat your question every few minutes expecting somebody to answer it. If you do not get a reply after the first few tries at least 5-10 minutes apart, perhaps posting your question on StackOverflow would help you. Linking to the question in the channel after you've posted it is OK."
+  pm:        "Do not PM members of the channel without first asking if that is OK."
+  ops:       "Do not PM room operators with Laravel related questions.  It is OK to PM an op if you have Laravel.io account issues, or are being trolled or harassed by other room members."
+  all:       "Please review our room rules: #{RULES_URL}"
+
+specificRule = (rule) ->
+  return RULES[rule] if ruleExists(rule)
+  "I'm sorry, I couldn't find a rule for #{rule}"
+
+ruleExists = (rule) ->
+  RULES[rule]?
+
+module.exports = (robot) ->
+  robot.respond /rules?\s?(\w+)?( to (([^\s!]+)+))?/i, (msg) ->
+    rule = msg.match[1] || 'all'
+    user = msg.match[4]
+
+    msg.reply "I'm sorry, I couldn't find a rule for #{rule}" if rule and !ruleExists(rule)
+
+    response = ""
+    response += "#{user}: " if user
+    response += specificRule(rule)
+
+    msg.send response


modify config.coffee

modify config.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/neophylon/sbadmin.git/'


[master] bucket

[master] bucket

error: pathspec 'utils/token-bucket.coffee' did not match any file(s) known to git

--- utils/token-bucket.coffee
+++ utils/token-bucket.coffee
@@ -0,0 +1,22 @@
+class TokenBucket
+  constructor: (@speed, @threshold) ->
+    @speed = parseInt @speed
+    @threshold = parseInt @threshold
+    if not @speed
+      throw new TypeError('speed required as an int')
+    if not @threshold
+      throw new TypeError('threshold required as an int')
+    @lastTime = (new Date()).getTime()
+    @currentVolume = 0
+
+  get: ->
+    currentTime = (new Date()).getTime()
+    @currentVolume = Math.min @speed * @threshold, @currentVolume + currentTime - @lastTime
+    @lastTime = currentTime
+    if @currentVolume < @speed
+      false
+    else
+      @currentVolume -= @speed
+      true
+
+module.exports = TokenBucket


prevent view leaks elsewhere from affecting tests against start

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/'


improving robustness

improving robustness

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/'


built balancer test

built balancer test


JVM: make fetchDefaultVM_ function static

--- workers/social/lib/social/models/vm.coffee
+++ workers/social/lib/social/models/vm.coffee
@@ -22,7 +22,7 @@

   handleError = (err)-> console.error err  if err

-  VMDefaultDiskSize = 4096
+  VMDefaultDiskSize = @VMDefaultDiskSize = 4096
   @set
     softDelete          : yes
     indexes             :
@@ -129,7 +129,7 @@
       }
       return callback null

-  fetchDefaultVmHelper = (client, callback)->
+  @fetchDefaultVm_ = (client, callback)->
     {delegate} = client.connection
     delegate.fetchUser (err, user) ->
       return callback err  if err
@@ -146,7 +146,7 @@

   @resetDefaultVMLimits = secure (client, callback)->
-    fetchDefaultVmHelper client, (err, vm)->
+    @fetchDefaultVm_ client, (err, vm)->
       return callback err  if err
       return callback new Error "VM not found" unless vm
       vm.update {$set: diskSizeInMB: VMDefaultDiskSize}, (err) ->
@@ -449,7 +449,7 @@
       callback null, vm.region

   @fetchDefaultVm = secure (client, callback)->
-    fetchDefaultVmHelper client, (err, vm)->
+    @fetchDefaultVm_ client, (err, vm)->
       return callback err  if err
       callback null, vm?.hostnameAlias


Added a coffeescript version of the grunt file.

error: pathspec 'Sample.Gruntfile.coffee' did not match any file(s) known to git

--- Sample.Gruntfile.coffee
+++ Sample.Gruntfile.coffee
@@ -0,0 +1,20 @@
+module.exports = (grunt) ->
+	require("load-grunt-tasks")(grunt)
+
+	grunt.initConfig(
+		pkg: grunt.file.readJSON("package.json")
+
+		concat:
+			main:
+				src: ["src/**/*.js"]
+				dest: "dist/<%= pkg.name %>-<%= pkg.version %>.js"
+
+		uglify:
+			main:
+				src: ["<%= concat.main.dest %>"]
+				dest: "dist/<%= pkg.name %>-<%= pkg.version %>.min.js"
+
+	)
+
+	grunt.registerTask("build", ["concat", "uglify"])
+	grunt.registerTask("default", "build")


RealtimeController: provide NodeNotificationClient if needed

Currently ::subscribeNotification was returning a PubNubChannel which
is a simple wrapper that emits `message` over it, with this change RTC
will return NodeNotificationClient if PubNub is not supported by the
current environment. And since it’s providing the same flow with PNC, it
will work as is.

--- client/app/lib/realtimecontroller.coffee
+++ client/app/lib/realtimecontroller.coffee
@@ -26,9 +26,7 @@
     @eventCache = {}
     @initLocalStorage()

-    { pubnub } = globals.config
-
-    if pubnub.enabled and pubnub.subscribekey
+    if @isPubNubEnabled()
       @initPubNub()
     else
       @initNodeNotification()
@@ -42,6 +40,12 @@
     # this is used for preventing datadog
     unless @localStorage.getValue 'ForbiddenChannels'
       @localStorage.setValue 'ForbiddenChannels', {}
+
+
+  isPubNubEnabled: ->
+
+    { pubnub } = globals.config
+    return pubnub.enabled and pubnub.subscribekey

   initPubNub: ->
@@ -207,16 +211,24 @@
   subscribeNotification: (callback) ->

     { nickname } = whoami().profile
-    { environment } = globals.config
-    channelName = "notification-#{environment}-#{nickname}"
-    options = { channelName }
-    options.authenticate =
-      endPoint : '/api/gatekeeper/subscribe/notification'
-      data     : { id: whoami().socialApiId }
-
-    options.pbInstance = @pbNotification
-
-    @subscribePubNub options, callback
+
+    if @isPubNubEnabled()
+
+      { environment } = globals.config
+      channelName = "notification-#{environment}-#{nickname}"
+      options = { channelName }
+      options.authenticate =
+        endPoint : '/api/gatekeeper/subscribe/notification'
+        data     : { id: whoami().socialApiId }
+
+      options.pbInstance = @pbNotification
+
+      @subscribePubNub options, callback
+
+    else
+
+      callback null, @nodeNotificationClient
+

   subscribePubNub: (options = {}, callback) ->
@@ -414,4 +426,5 @@

   initNodeNotification: ->

-    (new NodeNotificationClient).connect()
+    @nodeNotificationClient = new NodeNotificationClient
+    @nodeNotificationClient.connect()


Enhances github-issues, allowing you to tell Hubot things like
`show 5 of my backend issues about node`.

Grammar is expanded to allow:

 * 'me' is optional: `show issues for github/hubot-scripts`.

 * Default repository name allows `from repo` to be possibly omitted:
   `show issues`.

 * Specify assignee like `show david's issues` or `show my issues`.
   The script will look for HUBOT_GITHUB_USER_DAVID to resolve the GitHub
   username for 'david'; otherwise, 'david' will be used. This allows you to
   map chat handles to GitHub accounts.

 * Specify a tag like `show ui issues` to see only issues labeled 'ui'.

 * Specify a simple query string like `show issues about cats`. This
   will only show issues whose titles or bodies mention 'cats'.

 * Specify a limit like `show 10 issues` or `show 3 of david's issues`.

--- src/scripts/github-issues.coffee
+++ src/scripts/github-issues.coffee
@@ -7,12 +7,33 @@
 # HUBOT_GITHUB_USER is optional, but if you set it, you can ask `show me issues
 # for hubot` instead of `show me issues for github/hubot`.
 #
+# HUBOT_GITHUB_REPO is optional, but if you set it, you can ask `show me issues`
+# instead of `show me issues for github/hubot`.
+#
 # show me issues for <user/repo> -- Shows open issues for that project.
+
+_  = require("underscore")
+_s = require("underscore.string")
+
+get_username = (name) ->
+  name = name.replace("@", "").replace("'s", "")
+  resolve = (n) -> process.env["HUBOT_GITHUB_USER_#{n.replace(/\s/g, '_').toUpperCase()}"]
+  # Try resolving the name to a GitHub username using full, then first name:
+  resolved = resolve(name) or resolve(_s.words(name)[0])
+  if resolved? then resolved else name
+
+get_repo = (repo) ->
+  repo = process.env.HUBOT_GITHUB_REPO unless repo?
+  repo = repo.replace "for ", ""
+  "#{process.env.HUBOT_GITHUB_USER}/#{repo}" unless ~repo.indexOf("/")
+
 module.exports = (robot) ->
-  robot.respond /show\s+(me\s+)?issues\s+(for\s+)?(.*)/i, (msg)->
+  robot.respond /show (me)?\s*(\d+|\d+ of)?\s*(@?\w+'s|my)?\s*(\S+)?\s*issues\s*(for \S+)?\s*(about .+)?/i, (msg) ->
     oauth_token = process.env.HUBOT_GITHUB_TOKEN
-    repo = msg.match[3].toLowerCase()
-    repo = "#{process.env.HUBOT_GITHUB_USER}/#{repo}" unless ~repo.indexOf("/")
+    [limit, assignee, issue_label, repo, query] = msg.match[2..]
+
+    repo = get_repo repo
+
     msg.http("https://api.github.com/repos/#{repo}/issues")
       .headers(Authorization: "token #{oauth_token}", Accept: "application/json")
       .query(state: "open", sort: "created")
@@ -20,12 +41,30 @@
         if err
           msg.send "GitHub says: #{err}"
           return
+
         issues = JSON.parse(body)
+
+        if assignee?
+          assignee = msg.message.user.name if assignee is "my"
+          assignee = get_username assignee
+          issues = _.filter issues, (i) -> i.assignee? and i.assignee.login is assignee
+
+        if issue_label?
+          issues = _.filter issues, (i) -> _.any(i.labels, (l) -> l.name is issue_label)
+
+        if query?
+          query = query.replace "about ", ""
+          issues = _.filter issues, (i) ->
+                    _.any [i.body, i.title], (text) -> _s.include text.toLowerCase(), query
+
+        if limit?
+        	limit = parseInt limit.replace " of", ""
+        	issues = _.first issues, limit
+
         if issues.length == 0
-            msg.send "Achievement unlocked: issues zero!"
+            msg.send "No issues found."
         else
           for issue in issues
             labels = ("##{label.name}" for label in issue.labels).join(" ")
             assignee = if issue.assignee then " (#{issue.assignee.login})" else ""
             msg.send "[#{issue.number}] #{issue.title} #{labels}#{assignee} = #{issue.html_url}"
-


GroupsController: Pass stackTemplate object instead of id


client: remove formatBlockquotes util

client: remove formatBlockquotes util

Signed-off-by: Umut Sirin <4055abbc0e40a1254e715b952ccd414607e0b365@gmail.com>

--- client/app/lib/util/formatBlockquotes.coffee
+++ client/app/lib/util/formatBlockquotes.coffee
@@ -1,18 +0,0 @@
-hljs = require 'highlight.js'
-Encoder = require 'htmlencode'
-
-module.exports = (text = '') ->
-
-  parts = text.split '```'
-  for part, index in parts
-    blockquote = index %% 2 is 1
-
-    if blockquote
-      if match = part.match /^\w+/
-        [lang] = match
-        if not hljs.getLanguage(lang) or not part.match /^\w+\s*\n/
-          part = "\n#{part}"
-
-      parts[index] = "\n```#{Encoder.htmlDecode part}\n```\n"
-
-  parts.join ''


files for ibid

files for ibid

error: pathspec 'components/connect/client/connect_results_view.coffee' did not match any file(s) known to git

--- components/connect/client/connect_results_view.coffee
+++ components/connect/client/connect_results_view.coffee
@@ -0,0 +1,18 @@
+Backbone = require "backbone"
+$ = require 'jquery'
+Backbone.$ = $
+sd = require("sharify").data
+mediator = require '../../../lib/mediator.coffee'
+UserBlocks = require '../../../collections/user_blocks.coffee'
+
+connectResultsTemplate = -> require('../templates/connect_results.jade') arguments...
+
+module.exports = class ConnectResultsView extends Backbone.View
+
+  initialize: ->
+
+    super
+
+  render: =>
+    @$el.html connectResultsTemplate()
+    @renderChannels()


another tester for filippo

another tester for filippo

error: pathspec 'dev/dec.iced' did not match any file(s) known to git

--- dev/dec.iced
+++ dev/dec.iced
@@ -0,0 +1,9 @@
+{Decryptor} = require '../lib/dec'
+
+key = new Buffer process.argv[2], 'hex'
+data = new Buffer process.argv[3], 'hex'
+
+dec = new Decryptor { key }
+await dec.run { data }, defer err, pt
+if err? then console.error err
+else console.log pt.toString('utf8')


Remove old View class tests and update class 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/JoshuaToenyes/stout-client.git/'


fixed typo 'siltent'

fixed typo 'siltent'

--- src/cli/util/shell.coffee
+++ src/cli/util/shell.coffee
@@ -16,7 +16,7 @@
   rm file
   emitter.emit 'debug', "rm #{file}"

-module.exports.exec = (command, options = siltent: true) ->
+module.exports.exec = (command, options = silent: true) ->
   res = exec command, options
   emitter.emit 'debug', command
   if res.code > 0


Filtering packets by property value (or regexp)

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

--- src/components/FilterPropertyValue.coffee
+++ src/components/FilterPropertyValue.coffee
@@ -0,0 +1,60 @@
+noflo = require "noflo"
+
+class FilterPropertyValue extends noflo.Component
+    constructor: ->
+        @accepts = {}
+        @regexps = {}
+
+        @inPorts =
+            accept: new noflo.ArrayPort()
+            regexp: new noflo.ArrayPort()
+            in: new noflo.Port()
+        @outPorts =
+            out: new noflo.Port()
+
+        @inPorts.accept.on "data", (data) =>
+            @prepareAccept data
+        @inPorts.regexp.on "data", (data) =>
+            @prepareRegExp data
+
+        @inPorts.in.on "begingroup", (group) =>
+            @outPorts.out.beginGroup group
+        @inPorts.in.on "data", (data) =>
+            @filterData data
+        @inPorts.in.on "endgroup", =>
+            @outPorts.out.endGroup()
+        @inPorts.in.on "disconnect", =>
+            @outPorts.out.disconnect()
+
+    prepareAccept: (map) ->
+        if typeof map is "object"
+            @accepts = map
+            return
+
+        mapParts = map.split "="
+        @accepts[mapParts[0]] = mapParts[1]
+
+    prepareRegExp: (map) ->
+        mapParts = map.split "="
+        @regexps[mapParts[0]] = mapParts[1]
+
+    filterData: (object) ->
+        newData = {}
+        match = false
+        for property, value of object
+            if @accepts[property] and @accepts[property] isnt value
+                continue
+
+            if @regexps[property]
+                regexp = new RegExp @regexps[property]
+                unless regexp.exec value
+                    continue
+
+            newData[property] = value
+            match = true
+            continue
+
+        return unless match
+        @outPorts.out.send newData
+
+exports.getComponent = -> new FilterPropertyValue


Keyboard class

Keyboard class

error: pathspec 'src/public/scripts/models/keyboard.coffee' did not match any file(s) known to git

--- src/public/scripts/models/keyboard.coffee
+++ src/public/scripts/models/keyboard.coffee
@@ -0,0 +1,37 @@
+define [], ( ) ->
+	class Keyboard
+		@Keys:
+			BACKSPACE:		8
+			TAB:			9
+			RETURN:			13
+			SHIFT:			16
+			CONTROL:		17
+			PAUSE:			19
+			CAPSLOCK:		20
+			ESCAPE:			27
+			SPACE:			32
+			PAGEUP:			33
+			PAGEDOWN:		34
+			END:			35
+			HOME:			36
+			LEFT:			37
+			UP:				38
+			RIGHT:			39
+			DOWN:			40
+			INSERT:			45
+			DELETE:			46
+			NUMLOCK:		144
+			NUM_MULTIPLY:	106
+			NUM_PLUS:		107
+			NUM_ENTER:		108
+			NUM_MINUS:		109
+			NUM_DECIMAL:	110
+			NUM_DIVIDE:		111
+
+		alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+		numbers = '0123456789'
+
+		@Keys[letter] = (alphabet + numbers).charCodeAt(i) for i, letter of alphabet + numbers
+
+		# NumPad numbers start 48 higher than "normal" numbers
+		@Keys["NUM_#{letter}"] = numbers.charCodeAt(i) + 48 for i, letter of numbers


usage removed, examples added

usage removed, examples added


(fix CLI) interact: Re-write to use the new parser

--- Paws/Source/interactive.coffee
+++ Paws/Source/interactive.coffee
@@ -107,16 +107,13 @@
       # We generate a wrapper-Expression for the input, turning it into:
       #
       #     _INTERACTIVE_INSPECT (expr)
-      if code instanceof parser.Expression
-         inspector = new parser.Expression new Label '_INTERACTIVE_INSPECT'
-         superexpr = new parser.Expression code
-         inspector.append superexpr
-         expr = inspector
+      if code instanceof parse.Expression
+         expr = parse.Sequence.from [new Label '_INTERACTIVE_INSPECT', code]
       else
-         expr = parser.parse '_INTERACTIVE_INSPECT ['+code+']'
+         expr = parse '_INTERACTIVE_INSPECT ['+code+']'

-      Paws.info "-- Generated expression to evaluate: " +
-         expr.with(context: yes, tag: no).toString()
+     #Paws.info "-- Generated expression to evaluate: " +
+     #   expr.with(context: yes, tag: no).toString()

       # Now, we put both those in the queue, giving the first responsibility for the mutex. This
       # prevents the resumer from realizing until the interact-line has become complete(), and thus
@@ -125,8 +122,8 @@
       execution.locals = @shared_locals
       execution.rename '<interact: interactive input>'

-      @here.stage execution, null, new reactor.Mask @mutex
-      @here.stage @generateResumer(), null, new reactor.Mask @mutex
+      @here.stage execution, undefined, new reactor.Mask @mutex
+      @here.stage @generateResumer(), undefined, new reactor.Mask @mutex

       return execution


Create flyover-00.coffee

Create flyover-00.coffee

after http://media-cache-ak0.pinimg.com/736x/f7/7c/35/f77c3591a5cc847041af1f266207020d.jpg?x

error: pathspec 'flyover-00.coffee' did not match any file(s) known to git

--- flyover-00.coffee
+++ flyover-00.coffee
@@ -0,0 +1,61 @@
+# http://jsbin.com/nuhozo/7/edit?js,output
+
+WIDTH = 500
+HEIGHT = 500
+MID = [WIDTH/2, HEIGHT/2]
+COUNT = 7
+SPACING = WIDTH / (COUNT + 1)
+SIZE = 20
+SIZE_HALF = SIZE / 2
+Z_OFFSET = -0.333333
+
+scrollX = 0
+scrollY = 0
+
+canvas = document.createElement 'canvas'
+document.body.appendChild canvas
+canvas.style.maxWidth = '100%'
+context = canvas.getContext '2d'
+canvas.width = WIDTH
+canvas.height = HEIGHT
+
+
+draw = () ->
+  context.fillStyle = 'white'
+  context.fillRect(0, 0, WIDTH, HEIGHT)
+  context.fillStyle = 'rgba(255, 255, 255, 0.5)'
+
+  for x in [-1...COUNT+2]
+    for y in [-1...COUNT+2]
+      posX = x * SPACING + scrollX
+      posY = y * SPACING + scrollY
+      topX = posX + (MID[0] - posX) * Z_OFFSET
+      topY = posY + (MID[1] - posY) * Z_OFFSET
+
+      # bottom
+      context.strokeRect(posX - SIZE_HALF, posY - SIZE_HALF, SIZE, SIZE)
+
+      # sides
+      context.beginPath()
+      context.moveTo(posX - SIZE_HALF, posY - SIZE_HALF)
+      context.lineTo(topX - SIZE_HALF, topY - SIZE_HALF)
+      context.moveTo(posX - SIZE_HALF, posY + SIZE_HALF)
+      context.lineTo(topX - SIZE_HALF, topY + SIZE_HALF)
+      context.moveTo(posX + SIZE_HALF, posY + SIZE_HALF)
+      context.lineTo(topX + SIZE_HALF, topY + SIZE_HALF)
+      context.moveTo(posX + SIZE_HALF, posY - SIZE_HALF)
+      context.lineTo(topX + SIZE_HALF, topY - SIZE_HALF)
+      context.closePath()
+      context.stroke()
+
+      # top
+      #context.fillRect(topX - SIZE_HALF, topY - SIZE_HALF, SIZE, SIZE)
+      context.strokeRect(topX - SIZE_HALF, topY - SIZE_HALF, SIZE, SIZE)
+
+animate = () ->
+  requestAnimationFrame(animate)
+  scrollX = (Date.now() / 50) % SPACING
+  scrollY = (Date.now() / 50) % SPACING
+  draw()
+
+animate()


Adding skeleton Legend code, which will be defined as a chart plugin

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

--- src/plugins/legend.coffee
+++ src/plugins/legend.coffee
@@ -0,0 +1,12 @@
+###
+Draws a chart legend using HTML.
+It acts as a plugin to a main chart instance.
+###
+
+@ForestD3.Legend = class Legend
+    constructor: (domContainer)->
+        @container = d3.select(domContainer).classed('forest-d3 legend', true)
+
+    dataApi: (api)->
+
+    render: ->


[✚] Added `index` route.

[✚] Added `index` route.

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

--- app/routes/index.coffee
+++ app/routes/index.coffee
@@ -0,0 +1,6 @@
+`import Ember from 'ember'`
+
+IndexRoute = Ember.Route.extend
+  title: 'Hello World!'
+
+`export default IndexRoute`


Change image resize to 100%

Change image resize to 100%

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/chapelaria/readerly.git/'


Show extendedName and unlockLevelName in i18n-thang editor only if it needs to show

--- app/views/i18n/I18NEditThangTypeView.coffee
+++ app/views/i18n/I18NEditThangTypeView.coffee
@@ -13,5 +13,7 @@
       name = @model.get('name')
       @wrapRow('Name', ['name'], name, i18n[lang]?.name, [])
       @wrapRow('Description', ['description'], @model.get('description'), i18n[lang]?.description, [], 'markdown')
-      @wrapRow('Extended Hero Name', ['extendedName'], @model.get('extendedName'), i18n[lang]?.extendedName, [])
-      @wrapRow('Unlock Level Name', ['unlockLevelName'], @model.get('unlockLevelName'), i18n[lang]?.unlockLevelName, [])
+      if extendedName = @model.get('extendedName')
+        @wrapRow('Extended Hero Name', ['extendedName'], extendedName, i18n[lang]?.extendedName, [])
+      if unlockLevelName = @model.get('unlockLevelName')
+        @wrapRow('Unlock Level Name', ['unlockLevelName'], unlockLevelName, i18n[lang]?.unlockLevelName, [])


Add empty app JS file

Add empty app JS file

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


fixed problem with old files hanging around

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/airtonix/gastropod.git/'


init datepickers

init datepickers

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

--- app/assets/javascripts/components.coffee
+++ app/assets/javascripts/components.coffee
@@ -0,0 +1,2 @@
+$ ->
+  $('.datepicker').datepicker({format: 'dd-mm-yyyy'});


rails_apps_composer: add analytics

rails_apps_composer: add 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,44 @@
+# thanks to Jonathon Wolfe at http://reed.github.io/turbolinks-compatibility/google_analytics.html
+
+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-80080770-1'
+
+GoogleAnalytics.load()


Ads: Add some legacy targeting params and remove seemingly unused `adZone` one.

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/'


add gulpfile

add gulpfile

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/wakamsha/angularjs-demo_todo.git/'


Fix instance variable assignment

Fix instance variable assignment

--- assets/javascripts/views/content/type_page.coffee
+++ assets/javascripts/views/content/type_page.coffee
@@ -8,7 +8,6 @@
     return

   render: (@type) ->
-    @type = type
     @html @tmpl('typePage', @type)
     return


Cafeinated version of reconnecting websocket

with support for different socket backends such as sockjs

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

--- src/client/reconnecting_websocket.coffee
+++ src/client/reconnecting_websocket.coffee
@@ -0,0 +1,140 @@
+# MIT License:
+#
+# Copyright (c) 2010-2012, Joe Walnes
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+###
+This behaves like a WebSocket in every way, except if it fails to connect,
+or it gets disconnected, it will repeatedly poll until it succesfully connects
+again.
+
+It is API compatible, so when you have:
+ws = new WebSocket('ws://....');
+you can replace with:
+ws = new ReconnectingWebSocket('ws://....');
+
+The event stream will typically look like:
+onopen
+onmessage
+onmessage
+onclose // lost connection
+onopen  // sometime later...
+onmessage
+onmessage
+etc...
+
+It is API compatible with the standard WebSocket API.
+
+Contributors:
+- Joe Walnes
+- Didier Colens
+
+###
+class ReconnectingWebSocket
+  constructor: (url, protocols, Socket) ->
+    if protocols? and typeof protocols is 'function'
+      Socket = protocols
+      protocols = undefined
+    else if typeof Socket isnt 'function'
+      Socket = WebSocket
+
+    # These can be altered by calling code.
+    @debug = @debugAll
+    @reconnectInterval = 1000
+    @timeoutInterval = 2000
+
+    forcedClose = false
+    timedOut = false
+
+    @url = url
+    @protocols = protocols
+    @readyState = Socket.CONNECTING
+    @URL = url # Public API
+
+    @onopen = (event) ->
+    @onclose = (event) ->
+    @onconnecting = (event) ->
+    @onmessage = (event) ->
+    @onerror = (event) ->
+
+    connect = (reconnectAttempt) =>
+      @ws = new Socket(url)
+      console.debug "ReconnectingWebSocket", "attempt-connect", url  if @debug
+      localWs = @ws
+      timeout = setTimeout(->
+        console.debug "ReconnectingWebSocket", "connection-timeout", url  if @debug
+        timedOut = true
+        localWs.close()
+        timedOut = false
+      , @timeoutInterval)
+
+      @ws.onopen = (event) ->
+        clearTimeout timeout
+        console.debug "ReconnectingWebSocket", "onopen", url  if @debug
+        @readyState = Socket.OPEN
+        reconnectAttempt = false
+        @onopen event
+
+      @ws.onclose = (event) ->
+        clearTimeout timeout
+        @ws = null
+        if forcedClose
+          @readyState = Socket.CLOSED
+          @onclose event
+        else
+          @readyState = Socket.CONNECTING
+          @onconnecting event
+          if not reconnectAttempt and not timedOut
+            console.debug "ReconnectingWebSocket", "onclose", url  if @debug
+            @onclose event
+          setTimeout (-> connect true ), @reconnectInterval
+
+      @ws.onmessage = (event) ->
+        console.debug "ReconnectingWebSocket", "onmessage", url, event.data  if @debug
+        @onmessage event
+
+      @ws.onerror = (event) ->
+        console.debug "ReconnectingWebSocket", "onerror", url, event  if @debug
+        @onerror event
+
+    connect url
+
+  send: (data) ->
+    if @ws
+      console.debug "ReconnectingWebSocket", "send", url, data  if @debug
+      @ws.send data
+    else
+      throw "INVALID_STATE_ERR : Pausing to reconnect websocket"
+
+  close: ->
+    if @ws
+      forcedClose = true
+      @ws.close()
+
+  ###
+  Setting this to true is the equivalent of setting all instances of ReconnectingWebSocket.debug to true.
+  ###
+  debugAll: false
+  ###
+  Additional public API method to refresh the connection if still open (close, re-open).
+  For example, if the app suspects bad data / missed heart beats, it can try to refresh.
+  ###
+  refresh: ->
+    @ws.close()  if @ws


[driver] Convert to optimist

[driver] Convert to optimist

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/'