Don't re-order frameIds in the background page when manually focusing

--- background_scripts/main.coffee
+++ background_scripts/main.coffee
@@ -303,11 +303,7 @@
   moveTabRight: (count) -> moveTab(null, count)
   nextFrame: (count,frameId) ->
     chrome.tabs.getSelected(null, (tab) ->
-      frames = frameIdsForTab[tab.id]
-      # We can't always track which frame chrome has focussed, but here we learn that it's frameId; so add an
-      # additional offset such that we do indeed start from frameId.
-      count = (count + Math.max 0, frameIdsForTab[tab.id].indexOf frameId) % frames.length
-      frames = frameIdsForTab[tab.id] = [frames[count..]..., frames[0...count]...]
+      frameIdsForTab[tab.id] = cycleToFrame frameIdsForTab[tab.id], frameId, count
       chrome.tabs.sendMessage(tab.id, { name: "focusFrame", frameId: frames[0], highlight: true }))
   mainFrame: ->
     chrome.tabs.getSelected null, (tab) ->
@@ -613,13 +609,19 @@
   tabId = sender.tab.id
   # Cycle frameIdsForTab to the focused frame.  However, also ensure that we don't inadvertently register a
   # frame which wasn't previously registered (such as a frameset).
-  if frameIdsForTab[tabId]? and request.frameId in frameIdsForTab[tabId]
-    frameIdsForTab[tabId] =
-      [request.frameId, (frameIdsForTab[tabId].filter (id) -> id != request.frameId)...]
+  if frameIdsForTab[tabId]?
+    frameIdsForTab[tabId] = cycleToFrame frameIdsForTab[tabId], request.frameId
   # Inform all frames that a frame has received the focus.
   chrome.tabs.sendMessage sender.tab.id,
     name: "frameFocused"
     focusFrameId: request.frameId
+
+# Rotate through frames to the frame count places after frameId.
+cycleToFrame = (frames, frameId, count = 0) ->
+  # We can't always track which frame chrome has focussed, but here we learn that it's frameId; so add an
+  # additional offset such that we do indeed start from frameId.
+  count = (count + Math.max 0, frames.indexOf frameId) % frames.length
+  [frames[count..]..., frames[0...count]...]

 # Send a message to all frames in the current tab.
 sendMessageToFrames = (request, sender) ->


only accept wunderlist webhook urls

only accept wunderlist webhook urls

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/6wunderkinder/bugsnag-notification-plugins.git/'


CMS: removing H1, adding H4, H5, and H6 to TinyMCE

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


Cleanup of format dropdown, toolbar buttons.


TrollMode: Add api error to social

TrollMode: Add api error to social

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


Adapted tests for the new multiple upload behaviour.

--- test/test.coffee
+++ test/test.coffee
@@ -444,7 +444,7 @@

     describe ".removeFile()", ->
-      it "should abort uploading if file is currently being uploaded", ->
+      it "should abort uploading if file is currently being uploaded", (done) ->
         mockFile = getMockFile()
         dropzone.uploadFile = (file) ->
         dropzone.accept = (file, done) -> done()
@@ -452,26 +452,33 @@
         sinon.stub dropzone, "cancelUpload"

         dropzone.addFile mockFile
-        mockFile.status.should.equal Dropzone.UPLOADING
-        dropzone.getUploadingFiles()[0].should.equal mockFile
-
-        dropzone.cancelUpload.callCount.should.equal 0
-        dropzone.removeFile mockFile
-        dropzone.cancelUpload.callCount.should.equal 1
-
-    describe ".cancelUpload()", ->
-      it "should properly cancel upload if file currently uploading", ->
-          mockFile = getMockFile()
-
-          dropzone.accept = (file, done) -> done()
-
-          dropzone.addFile mockFile
+        setTimeout ->
           mockFile.status.should.equal Dropzone.UPLOADING
           dropzone.getUploadingFiles()[0].should.equal mockFile
-          dropzone.cancelUpload mockFile
-          mockFile.status.should.equal Dropzone.CANCELED
-          dropzone.getUploadingFiles().length.should.equal 0
-          dropzone.getQueuedFiles().length.should.equal 0
+
+          dropzone.cancelUpload.callCount.should.equal 0
+          dropzone.removeFile mockFile
+          dropzone.cancelUpload.callCount.should.equal 1
+          done()
+        , 10
+
+    describe ".cancelUpload()", ->
+      it "should properly cancel upload if file currently uploading", (done) ->
+          mockFile = getMockFile()
+
+          dropzone.accept = (file, done) -> done()
+
+          dropzone.addFile mockFile
+
+          setTimeout ->
+            mockFile.status.should.equal Dropzone.UPLOADING
+            dropzone.getUploadingFiles()[0].should.equal mockFile
+            dropzone.cancelUpload mockFile
+            mockFile.status.should.equal Dropzone.CANCELED
+            dropzone.getUploadingFiles().length.should.equal 0
+            dropzone.getQueuedFiles().length.should.equal 0
+            done()
+          , 10

       it "should properly cancel the upload if file is not yet uploading", ->
           mockFile = getMockFile()
@@ -490,7 +497,7 @@
           dropzone.getQueuedFiles().length.should.equal 0
           dropzone.getUploadingFiles().length.should.equal 0

-      it "should call processQueue()", ->
+      it "should call processQueue()", (done) ->
           mockFile = getMockFile()

           dropzone.accept = (file, done) -> done()
@@ -501,15 +508,20 @@
           sinon.spy dropzone, "processQueue"

           dropzone.addFile mockFile
-          dropzone.processQueue.callCount.should.equal 1
-
-          dropzone.cancelUpload mockFile
-
-          dropzone.processQueue.callCount.should.equal 2
+          setTimeout ->
+            dropzone.processQueue.callCount.should.equal 1
+
+            dropzone.cancelUpload mockFile
+
+            dropzone.processQueue.callCount.should.equal 2
+            done()
+          , 10
+
+      it "should properly cancel all files with the same XHR if uploadMultiple is true"

     describe ".disable()", ->
-      it "should properly cancel all pending uploads", ->
+      it "should properly cancel all pending uploads", (done) ->
           dropzone.accept = (file, done) -> done()

           dropzone.options.parallelUploads = 1
@@ -517,27 +529,31 @@
           dropzone.addFile getMockFile()
           dropzone.addFile getMockFile()

-          dropzone.getUploadingFiles().length.should.equal 1
-          dropzone.getQueuedFiles().length.should.equal 1
-          dropzone.files.length.should.equal 2
-
-          sinon.spy requests[0], "abort"
-
-          requests[0].abort.callCount.should.equal 0
-
-          dropzone.disable()
-
-          requests[0].abort.callCount.should.equal 1
-
-          dropzone.getUploadingFiles().length.should.equal 0
-          dropzone.getQueuedFiles().length.should.equal 0
-          dropzone.files.length.should.equal 2
-
-          dropzone.files[0].status.should.equal Dropzone.CANCELED
-          dropzone.files[1].status.should.equal Dropzone.CANCELED
+          setTimeout ->
+
+            dropzone.getUploadingFiles().length.should.equal 1
+            dropzone.getQueuedFiles().length.should.equal 1
+            dropzone.files.length.should.equal 2
+
+            sinon.spy requests[0], "abort"
+
+            requests[0].abort.callCount.should.equal 0
+
+            dropzone.disable()
+
+            requests[0].abort.callCount.should.equal 1
+
+            dropzone.getUploadingFiles().length.should.equal 0
+            dropzone.getQueuedFiles().length.should.equal 0
+            dropzone.files.length.should.equal 2
+
+            dropzone.files[0].status.should.equal Dropzone.CANCELED
+            dropzone.files[1].status.should.equal Dropzone.CANCELED
+            done()
+          , 10

     describe ".destroy()", ->
-      it "should properly cancel all pending uploads and remove all file references", ->
+      it "should properly cancel all pending uploads and remove all file references", (done) ->
           dropzone.accept = (file, done) -> done()

           dropzone.options.parallelUploads = 1
@@ -545,16 +561,20 @@
           dropzone.addFile getMockFile()
           dropzone.addFile getMockFile()

-          dropzone.getUploadingFiles().length.should.equal 1
-          dropzone.getQueuedFiles().length.should.equal 1
-          dropzone.files.length.should.equal 2
-
-          sinon.spy dropzone, "disable"
-
-          dropzone.destroy()
-
-          dropzone.disable.callCount.should.equal 1
-          element.should.not.have.property "dropzone"
+
+          setTimeout ->
+            dropzone.getUploadingFiles().length.should.equal 1
+            dropzone.getQueuedFiles().length.should.equal 1
+            dropzone.files.length.should.equal 2
+
+            sinon.spy dropzone, "disable"
+
+            dropzone.destroy()
+
+            dropzone.disable.callCount.should.equal 1
+            element.should.not.have.property "dropzone"
+            done()
+          , 10

       it "should be able to create instance of dropzone on the same element after destroy", ->
           dropzone.destroy()
@@ -620,13 +640,13 @@

   describe "helper function", ->
+    element = null
+    dropzone = null
+    beforeEach ->
+      element = Dropzone.createElement """

"""
+      dropzone = new Dropzone element, url: "url"
+
     describe "getExistingFallback()", ->
-      element = null
-      dropzone = null
-      beforeEach ->
-        element = Dropzone.createElement """

"""
-        dropzone = new Dropzone element, url: "url"
-
       it "should return undefined if no fallback", ->
         expect(dropzone.getExistingFallback()).to.equal undefined

@@ -643,6 +663,10 @@
         fallback = Dropzone.createElement """

"""
         element.appendChild fallback
         fallback.should.equal dropzone.getExistingFallback()
+
+    describe "getFallbackForm()", ->
+
+      it "should properly add [] to the file name if uploadMultiple is true"

   describe "file handling", ->


Core: includes added

Core: includes added

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

--- client/Core/includes.coffee
+++ client/Core/includes.coffee
@@ -0,0 +1,32 @@
+module.exports = [
+
+  'libs/bluebird.js',
+  'libs/pistachio.js',
+  'utils.coffee'
+  'KD.extend.coffee'
+  'oauthcontroller.coffee'
+  'kodingrouter.coffee'
+  'jview.coffee'
+  'ApplicationManager.coffee'
+  'AppController.coffee'
+  'maintabview.coffee'
+  'maintabpaneview.coffee'
+  'maincontroller.coffee'
+  'mainview.coffee'
+  'mainviewcontroller.coffee'
+  'topnavigation.coffee'
+  'customlinkview.coffee'
+
+  'kodingappscontroller.coffee'
+
+  # these are generated dependencies
+  # do not delete they're ignored in git
+  # created in compile time.
+  '__generatedapps__.coffee'
+  '__generatedroutes__.coffee'
+
+
+  'styl/resurrection.styl'
+  'styl/resurrection.commons.styl'
+
+]


Added Route class.

Added Route class.

Extracted route specific code into a separate class.

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

--- src/route.coffee
+++ src/route.coffee
@@ -0,0 +1,39 @@
+class Route
+	errors:
+		invalidRouteName: 'Route has no name'
+		invalidRouteUrl: 'Route has an invalid URL'
+
+	parameterRegex: /:([a-z][a-z0-9]+)/ig
+
+	constructor: (data) ->
+		throw errors.invalidRouteName unless data.name
+		throw errors.invalidRouteUrl unless data.url
+
+		name = r.name.trim()
+		url = (if r.url[0] == '/' then r.url else '/' + r.url).trim()
+		regex = '^' + (url.replace /[-\/\\^$*+?.()|[\]{}]/g, '\\$&') + '\\/?(#.*)?(\\?.*)?$'
+		regex = regex.replace @parameterRegex, '([a-z0-9]+)'
+		parameters = r.url.match @parameterRegex
+
+		throw errors.invalidRouteName unless name
+		throw errors.invalidRouteUrl unless url
+
+		@component = name
+		@parameters = if parameters then parameters.map((item) -> item[1 ..]) else []
+		@regex = new RegExp regex, 'i'
+
+	clashesWith: (route) ->
+		route.component == @component or route.regex.toString() == @regex.toString()
+
+	matches: (url) -> @regex.test url
+
+	extractParameters: (url) ->
+		params = {}
+
+		if @parameters.length
+			matches = url.match(route.regex)[1..]
+
+			for index in [0..route.parameters.length - 1]
+				params[route.parameters[index]] = matches[index]
+
+		params


improved target circle

improved target circle

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/leonidas/qa-dashboard.git/'


Added Module as a DI lib class definition example

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

--- coffee/lib/module.coffee
+++ coffee/lib/module.coffee
@@ -0,0 +1,20 @@
+Starter.lib
+
+  .constant 'Module', -> # Inject superclasses and other dependencies here
+    class Module
+      @KEYOWRDS = ['extended', 'included']
+      @extend: (obj) ->
+        for key, value of obj when key not in Module.KEYOWRDS
+          # Assign to this
+          @[key] = value
+
+        obj.extended?.apply(@)
+        this
+
+      @include: (obj) ->
+        for key, value of obj when key not in Module.KEYOWRDS
+          # Assign to prototype
+          @::[key] = value
+
+        obj.included?.apply(@)
+        this


:lipstick: theme-manager-spec

:lipstick: theme-manager-spec

--- spec/theme-manager-spec.coffee
+++ spec/theme-manager-spec.coffee
@@ -52,7 +52,7 @@

       expect(themeManager.getEnabledThemeNames()).toEqual ['atom-dark-ui', 'atom-light-ui']

-  describe "getImportPaths()", ->
+  describe "::getImportPaths()", ->
     it "returns the theme directories before the themes are loaded", ->
       atom.config.set('core.themes', ['theme-with-index-less', 'atom-dark-ui', 'atom-light-ui'])

@@ -129,7 +129,7 @@
       spyOn(console, 'warn')
       expect(-> atom.packages.activatePackage('a-theme-that-will-not-be-found')).toThrow()

-  describe "requireStylesheet(path)", ->
+  describe "::requireStylesheet(path)", ->
     it "synchronously loads css at the given path and installs a style tag for it in the head", ->
       themeManager.onDidChangeStylesheets stylesheetsChangedHandler = jasmine.createSpy("stylesheetsChangedHandler")
       themeManager.onDidAddStylesheet stylesheetAddedHandler = jasmine.createSpy("stylesheetAddedHandler")


Use WebContents.prototype.isLoading instead of defunct .loaded

Fixes cmd-o interaction.

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


Test spec for incorrect overloading

Test spec for incorrect overloading

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

--- test/spec/overload.spec.coffee
+++ test/spec/overload.spec.coffee
@@ -0,0 +1,18 @@
+describe "Overloading functions", ->
+    overloadableFunc = null;
+
+    beforeEach ->
+        overloadableFunc = new Overloadable();
+
+    it "Should not allow for passing incorrect arguments to 'overload' function", ->
+        expect( ->
+            overloadableFunc.overload()
+        ).toThrow()
+
+        expect( ->
+            overloadableFunc.overload([], ->)
+        ).toThrow()
+
+        expect( ->
+            overloadableFunc.overload([null], null)
+        ).toThrow()


CLIO-23420: Additional specs

CLIO-23420: Additional specs

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/seanhealy/lib-themisui.git/'


[Server] created a file for generating fake client to imitate bongo secure method's client

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

--- server/lib/server/client.coffee
+++ server/lib/server/client.coffee
@@ -0,0 +1,68 @@
+bongo = require './bongo'
+
+handleError = (err, callback) ->
+  console.error err
+  return callback err
+
+
+fetchGroupName = (req, callback)->
+  [name, section] = req.params
+  {JName} = bongo.models
+
+  groupName = ""
+  # this means it is not a group or profile feed
+  # and it means it is koding group
+  # it is like Activity -- Develop
+
+  if name[0].toUpperCase() is name[0]
+    return callback null, "koding"
+  else
+    JName.fetchModels "#{name}/#{section}", (err, models)->
+      return callback if err
+      return callback new Error "JName is not found #{name}/#{section}" if not models and model.length < 1
+
+      model = models.first
+      modelName = model.bongo_.constructorName
+      if modelName is 'JGroup'
+        groupName = model.slug
+      else
+        groupName = "koding"
+
+      callback null, groupName
+
+fetchAccount = (username, callback)->
+  bongo.models.JAccount.one {"profile.nickname" : username }, callback
+
+
+generateFakeClient = (req, res, callback)->
+
+  fakeClient = {}
+  {clientId} = req.cookies
+  return callback null, {} unless clientId?
+
+  bongo.models.JSession.fetchSession clientId, (err, session)->
+    return handleError err, callback if err
+    return handleError new Error "Session is not set", callback unless session?
+
+    fetchGroupName req, (err, groupName)->
+      return handleError err, callback if err
+      fetchAccount session.username, (err, account)->
+        return handleError err, callback if err
+
+        # set real client id if it is in the db
+        fakeClient.sessionToken = session.clientId
+
+        # set username into context
+        fakeClient.context = {}
+        fakeClient.context.group = groupName
+        fakeClient.context.user  = session.username
+
+        # create connection property
+        fakeClient.connection = {}
+        fakeClient.connection.delegate  = account
+        fakeClient.connection.groupName = groupName
+
+        return callback null, fakeClient
+
+module.exports = { generateFakeClient }
+


Changed angular/services/AssignmentService > _updateAssignment to handle assignment with an invalid points_threshold state

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/UM-USElab/gradecraft-development.git/'


remove readMeshConfig

remove readMeshConfig

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/crcn-archive/mesh.git/'


Translate the tooltip so that it doesn't extend outside of chart

--- resources/assets/coffee/_classes/changelog-chart.coffee
+++ resources/assets/coffee/_classes/changelog-chart.coffee
@@ -148,6 +148,20 @@
     @tooltipContainer
       .style 'transform', "translate(#{coord}px) translateX(-50%)"

+    tooltipWidth = @tooltip.node().getBoundingClientRect().width / 2
+
+    # shift the main tooltip box when near to the left/right edge
+    # of the chart, so that the tooltip doesn't extend outside of it
+    if coord < tooltipWidth
+      translation = (-coord + tooltipWidth) / tooltipWidth * 50
+    else if @width - coord < tooltipWidth
+      translation = (@width - coord - tooltipWidth) / tooltipWidth * 50
+    else
+      translation = 0
+
+    @tooltip
+      .style 'transform', "translateX(#{translation}%)"
+
   resize: =>
     @setDimensions()
     @setScalesRange()


Started: developing new object system.

Started: developing new object system.

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

--- test/Noun.coffee
+++ test/Noun.coffee
@@ -0,0 +1,130 @@
+_ = require "underscore"
+
+Find_Message_Handler = (noun, k) ->
+  ans = []
+  if _.has noun, k
+    ans = [ noun, noun[k] ]
+  else
+    return [] unless _.isArray noun["Message Handlers"]
+    for v in noun["Message Handlers"]
+      target = v[0]
+      obj    = v[1]
+      if _.has target, k
+        ans = [target, target]
+      else if _.has obj, k
+        ans = [target, obj[k]]
+        break
+      else
+        ans = Find_Message_Handler obj, k
+        break if ans.length isnt 0
+
+
+  ans
+
+Find_Key = (noun, k) ->
+  ans = []
+  if _.has noun, k
+    ans.push noun
+  else
+    return [] unless _.isArray noun["Message Handlers"]
+    for v in ans["Message Handlers"]
+      target = v[0]
+      obj    = v[1]
+
+  ans
+
+Noun_To_Hash = (noun, keys) ->
+  ans =
+    keys:      {}
+    undefined: []
+
+  for k in keys
+    pair = Find_Message_Handler noun, k
+    if pair.length is 0
+      ans["undefined"].push k
+    else
+      ans["keys"][k] = { target: pair[0], func: pair[1] }
+
+  ans
+
+Send_Message = (mess_or_yield_to) ->
+  m = if _.isFunction(mess_or_yield_to)
+    mess = Core.Noun.New()
+    mess_or_yield_to mess
+    mess
+  else
+    mess_or_yield_to
+  m
+  h = m
+  noun = h.original_target
+  handler_pair = Find_Message_Handler noun, h.content
+
+  m.target = handler_pair[0]
+  m.response = handler_pair[1](m)
+  m.is_done = true
+  m.response
+
+
+
+
+
+# Core = {
+  # "Message Handlers": []
+# }
+
+Noun =
+  "New": (mess) ->
+    target = (mess and mess.original_target) or Noun
+    n = {
+      "Message Handlers": [ [ {}, target ]  ]
+    }
+    n
+
+# Core.Message =
+  # "response is": (n) ->
+    # this._response_ = n
+    # this._is_response_ = true
+    # n
+
+  # "_is_response_": false
+
+  # "is response?": () ->
+    # not not this._is_response_
+
+  # "New": (mess) ->
+    # n = Core.Noun.New()
+    # n["Message Handlers"].unshift Core.Message
+    # n["status"] = "last value"
+    # n
+
+
+# Environment = Core.Noun.New()
+# Environment["is an env?"] = true
+
+Vehicle = Noun.New()
+Vehicle["is a vehicle?"] = true
+Car = Send_Message({content: "New", original_target: Vehicle})
+Car["Message Handlers"][0][0].this_is_vehicle_target = true
+Car["is a car?"] = true
+
+
+console.log "-  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - "
+console.log Car
+console.log "-  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - "
+console.log Noun_To_Hash(Car, ['is a vehicle?', "is a car?", "this_is_vehicle_target"])
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+


:lipstick:

:lipstick:

Make `getHash` a little more idiomatic.

--- src/index.coffee
+++ src/index.coffee
@@ -97,17 +97,13 @@

 # Generates a 32bit hash from the SVG path

-getHash = (svgPath) ->
+getHash = (str) ->
   hash = 0
-  i = 0
-  char = ''
-  if svgPath.length == 0
-    return hash
-  while i < svgPath.length
-    char = svgPath.charCodeAt(i)
+  return hash unless str
+  for i in [0...str.length]
+    char = str.charCodeAt(i)
     hash = (hash << 5) - hash + char
     hash = hash & hash
-    i++
   hash

 # Errors


Add ear dropping script

Add ear dropping script

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

--- src/scripts/eardropping.coffee
+++ src/scripts/eardropping.coffee
@@ -0,0 +1,70 @@
+# Description:
+#   Add programmable interface to hubot.  Allow to run a hubot command
+#   whenever something came up in the conversation.
+#
+# Dependencies:
+#   None
+#
+# Configuration:
+#   None
+#
+# Commands:
+#   hubot when you hear <pattern> do <something hubot does> - Setup a ear dropping event
+#   hubot stop ear dropping - Stop all ear dropping
+#   hubot stop ear dropping on <pattern> - Remove a particular ear dropping event
+#   hubot show ear dropping - Show what hubot is ear dropping on
+#
+# Author:
+#   garylin
+
+TextMessage = require('hubot').TextMessage
+
+class EarDropping
+  constructor: (@robot) ->
+    @cache = []
+    @robot.brain.on 'loaded', =>
+      if @robot.brain.data.eardropping
+        @cache = @robot.brain.data.eardropping
+  add: (pattern, action) ->
+    task = {key: pattern, task: action}
+    @cache.push task
+    @robot.brain.data.eardropping = @cache
+  all: -> @cache
+  deleteByPattern: (pattern) ->
+    @cache = @cache.filter (n) -> n.key != pattern
+    @robot.brain.data.eardropping = @cache
+  deleteAll: () ->
+    @cache = []
+    @robot.brain.data.eardropping = @cache
+
+module.exports = (robot) ->
+  earDropping = new EarDropping robot
+
+  robot.respond /when you hear (.+?) do (.+?)$/i, (msg) ->
+    key = msg.match[1]
+    task = msg.match[2]
+    earDropping.add(key, task)
+    msg.send "I am now ear dropping for #{key}. Hehe."
+
+  robot.respond /stop ear *dropping$/i, (msg) ->
+    earDropping.deleteAll()
+    msg.send 'Okay, fine. :(  I am keep my ears shut.'
+
+  robot.respond /stop ear *dropping (for|on) (.+?)$/i, (msg) ->
+    pattern = msg.match[2]
+    earDropping.deleteByPattern(pattern)
+    msg.send "Okay, I will ignore #{pattern}"
+
+  robot.respond /show ear *dropping/i, (msg) ->
+    response = "\n"
+    for task in earDropping.all()
+      response += "#{task.key} -> #{task.task}\n"
+    msg.send response
+
+  robot.hear /(.+)/i, (msg) ->
+    robotHeard = msg.match[1]
+
+    for task in earDropping.all()
+      if new RegExp(task.key, "i").test(robotHeard)
+        if (robot.name != msg.message.user.name && !(new RegExp("^#{robot.name}", "i").test(robotHeard)))
+          robot.receive new TextMessage(msg.message.user, "#{robot.name}: #{task.task}")


making on sub to once sub

making on sub to once sub

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/stormpack-core/stormpack-client-js.git/'


modal.show can be run with no params

modal.show can be run with no params

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


Don't show the share dropdown result if no search result found.

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


some fixes and optimisations in FileGroup

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/prognostikos/uploadcare-widget.git/'


Specs for availability form

Specs for availability form

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


Port invitesifrom tokeninput to new select2

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

--- app/assets/javascripts/app/invites/invite_room.js.coffee
+++ app/assets/javascripts/app/invites/invite_room.js.coffee
@@ -0,0 +1,28 @@
+id = '#invite_members_tokens'
+url = '/users/select'
+
+$(id).select2
+  minimumInputLength: 1
+  width: 'resolve'
+  multiple: true
+  formatSearching: () -> I18n.t('invite_people.users.searching')
+  formatInputTooShort: () -> I18n.t('invite_people.users.hint')
+  tags: true
+  tokenSeparators: [",",";"]
+  ajax:
+    url: url
+    dataType: "json"
+    data: (term, page) ->
+      q: term # search term
+    results: (data, page) -> # parse the results into the format expected by Select2.
+      results: data
+
+id_email = '#invite_email_tokens'
+
+$(id_email).select2
+  minimumInputLength: 1
+  placeholder: I18n.t('invite_people.email.other')
+  width: 'resolve'
+  multiple: true
+  tags: true
+  tokenSeparators: [",",";"," "]


fixing modal bug where it wasnt centering

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/wenchenglai/firehose-ember-shared.git/'


Client: Activity: Created autosizeTextarea common component for chatInputWidget

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


`help` command.

`help` command.

Still todo: properly sort, format, and output commands; figure out how to handle commands with multi-line TomDocs

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


Fix reference to newly namespaced clipboard

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/aha-app/bigquery-log-viewer.git/'


Dir.list only goes one level deep unless you ask it to go deeper

--- src/osx.coffee
+++ src/osx.coffee
@@ -129,10 +129,14 @@
     exists and not isDir.valueOf()

 Dir =
-  list: (path) ->
+  list: (path, recursive) ->
     path = File.expand path
-    _.map OSX.NSFileManager.defaultManager.subpathsAtPath(path), (entry) ->
-      "#{path}/#{entry}"
+    fm = OSX.NSFileManager.defaultManager
+    if recursive
+      paths = fm.subpathsAtPath path
+    else
+      paths = fm.contentsOfDirectoryAtPath_error path, null
+    _.map paths, (entry) -> "#{path}/#{entry}"
   isDir: (path) ->
     isDir = new outArgument
     exists = OSX.NSFileManager.defaultManager.fileExistsAtPath_isDirectory(path, isDir)


Disable hapi appendNext routing behaviour.

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


Create AutoUpdater class

Create AutoUpdater class

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

--- src/browser/auto-updater.coffee
+++ src/browser/auto-updater.coffee
@@ -0,0 +1,2 @@
+module.exports =
+class AutoUpdater


Refactor: Remove unused parameters in camera.spec and extend previous fix to ignored tests

--- test/app/lib/surface/camera.spec.coffee
+++ test/app/lib/surface/camera.spec.coffee
@@ -98,25 +98,25 @@
                 checkCameraPos cam, wop

   it 'works at 90 degrees', ->
-    cam = new Camera { attr: (x) -> 100 }, 100 * Camera.MPP, 100 * Camera.MPP, testLayer, 1, null, Math.PI / 2
+    cam = new Camera { attr: (x) -> 100 }, 100 * Camera.MPP, 100 * Camera.MPP
     expect(cam.x2y).toBeCloseTo 1
     expect(cam.x2z).toBeGreaterThan 9001
     expect(cam.z2y).toBeCloseTo 0

   it 'works at 0 degrees', ->
-    cam = new Camera { attr: (x) -> 100 }, 100 * Camera.MPP, 100 * Camera.MPP, testLayer, 1, null, 0
+    cam = new Camera { attr: (x) -> 100 }, 100 * Camera.MPP, 100 * Camera.MPP
     expect(cam.x2z).toBeGreaterThan 9001
     expect(cam.x2y).toBeCloseTo 1
     expect(cam.z2y).toBeCloseTo 0

   it 'works at 45 degrees', ->
-    cam = new Camera { attr: (x) -> 100 }, 100 * Camera.MPP, 100 * Camera.MPP, testLayer, 1, null, Math.PI / 4
+    cam = new Camera { attr: (x) -> 100 }, 100 * Camera.MPP, 100 * Camera.MPP
     expect(cam.x2y).toBeCloseTo 1
     expect(cam.x2z).toBeGreaterThan 9001
     expect(cam.z2y).toBeCloseTo 0

   xit 'works at default angle of asin(0.75) ~= 48.9 degrees', ->
-    cam = new Camera 100, 100, 100 * Camera.MPP, 100 * Camera.MPP, testLayer, 1
+    cam = new Camera { attr: (x) -> 100 }, 100 * Camera.MPP, 100 * Camera.MPP
     angle = 1 / Math.cos angle
     expect(cam.angle).toBeCloseTo angle
     expect(cam.x2y).toBeCloseTo 1
@@ -124,7 +124,7 @@
     expect(cam.z2y).toBeCloseTo 0

   xit 'works at 2x zoom, 90 degrees', ->
-    cam = new Camera 100, 100, 100 * Camera.MPP, 100 * Camera.MPP, testLayer, 2, null, Math.PI / 2
+    cam = new Camera { attr: (x) -> 100 }, 100 * Camera.MPP, 100 * Camera.MPP
     checkCameraPos cam
     wop = x: 5, y: 2.5, z: 7
     cap = cam.worldToCanvas wop
@@ -144,7 +144,7 @@
     expectPositionsEqual cap, {x: 0, y: 50}

   xit 'works at 2x zoom, 30 degrees', ->
-    cam = new Camera 100, 100, 100 * Camera.MPP, 2 * 100 * Camera.MPP, testLayer, 2, null, Math.PI / 6
+    cam = new Camera { attr: (x) -> 100 }, 100 * Camera.MPP, 2 * 100 * Camera.MPP
     expect(cam.x2y).toBeCloseTo 1
     expect(cam.x2z).toBeGreaterThan 9001
     checkCameraPos cam
@@ -165,15 +165,15 @@
     expectPositionsEqual cap, {x: 50, y: -100}

   it 'works at 2x zoom, 60 degree hFOV', ->
-    cam = new Camera { attr: (x) -> 100 }, 100 * Camera.MPP, 100 * Camera.MPP, testLayer, 2, null, null, 0.01
+    cam = new Camera { attr: (x) -> 100 }, 100 * Camera.MPP, 100 * Camera.MPP
     checkCameraPos cam

   xit 'works at 2x zoom, 60 degree hFOV, 40 degree hFOV', ->
-    cam = new Camera { attr: (x) -> x is 'height' ? 63.041494 : 100 }, 100 * Camera.MPP, 63.041494 * Camera.MPP, testLayer, 2, null, null, Math.PI / 3
+    cam = new Camera { attr: (x) -> x is 'height' ? 63.041494 : 100 }, 100 * Camera.MPP, 63.041494 * Camera.MPP
     checkCameraPos cam

   xit 'works on a surface wider than it is tall, 30 degrees, default viewing upper left corner', ->
-    cam = new Camera 100, 100, 200 * Camera.MPP, 2 * 50 * Camera.MPP, testLayer, 1, {x: 0, y: 0}, Math.PI / 6
+    cam = new Camera { attr: (x) -> 100 }, 200 * Camera.MPP, 2 * 50 * Camera.MPP
     checkCameraPos cam
     expect(cam.zoom).toBeCloseTo 2
     wop = x: 5, y: 4, z: 6 * cam.y2z  # like x: 5, y: 10 out of world width: 20, height: 10


PrivateMessage: Go back in history when private message modal is closed

--- client/Social/Activity/views/privatemessage/modal.coffee
+++ client/Social/Activity/views/privatemessage/modal.coffee
@@ -25,6 +25,7 @@
               callback : (event) =>
                 @getDelegate()._lastMessage = null
                 @destroy()
+                router.back()
           fields           :
             recipient      :
               itemClass    : KDView


client: fix path for sidebarmachinebox again

--- client/app/lib/activity/sidebar/sidebarmachinelist.coffee
+++ client/app/lib/activity/sidebar/sidebarmachinelist.coffee
@@ -1,7 +1,7 @@
 kd = require 'kd'
 KDCustomHTMLView = kd.CustomHTMLView
 CustomLinkView = require 'app/customlinkview'
-SidebarMachineBox = require './sidebarmachinebox'
+SidebarMachineBox = require 'app/activity/sidebar/sidebarmachinebox'

 module.exports = class SidebarMachineList extends KDCustomHTMLView


Environment: Stores: StacksStore: Refactor load method of StacksStore


new rio-images-loaded file

new rio-images-loaded file

error: pathspec 'app/_src/helpers/rio-images-loaded.coffee' did not match any file(s) known to git

--- app/_src/helpers/rio-images-loaded.coffee
+++ app/_src/helpers/rio-images-loaded.coffee
@@ -0,0 +1,37 @@
+class FOURTEEN.RIOImagesLoaded
+
+	DATA_RIO_WIDTH = 'rio-width'
+	DATA_SRC = 'src'
+
+	constructor: (@$images) ->
+		@deffereds = []
+		@mainDeffered = jQuery.Deferred()
+		@numResolved = 0
+		@numImages = @$images.length
+		@init()
+
+	init: () =>
+		for i in [0...@numImages]
+			$image = @$images.eq(i)
+
+			@deffereds.push jQuery.Deferred()
+
+			if $image.data(DATA_RIO_WIDTH) is undefined
+				@addLoadListener @$images.eq(i), i
+			else
+				@resolveDeffered i
+
+
+	addLoadListener: ($image, i) =>
+		$image.one 'load', =>
+			@resolveDeffered i
+
+	resolveDeffered: (index) =>
+		@deffereds[ index ].resolve()
+		@numResolved++
+		if @numResolved is @numImages
+			@mainDeffered.resolve()
+
+	getState: () =>
+		@mainDeffered
+


Workspace: Changed disconnected modal title and content for host.


Refactor Project spec to use factory

Refactor Project spec to use factory

--- spec/javascripts/backbone/models/project_spec.js.coffee
+++ spec/javascripts/backbone/models/project_spec.js.coffee
@@ -1,23 +1,14 @@
 describe "ProjectMonitor.Models.Project", ->
   it "should include child models", ->
-    project = new ProjectMonitor.Models.Project
-      build: { name: 'Project Monitor', aggregate: false, statuses: [true, false, true], last_build: "4d" }
-      tracker: { velocity: 9, variance: 10, delivered: 9, open: 5, velocities: [12, 15, 20, 40, 10] }
-      new_relic: { times: [10, 20, 50, 80, 100, 90, 80, 90, 40, 40] }
-      airbrake: { error_count: 9, last_error: "RuntimeError: Workflow" }
+    project = BackboneFactory.create("complete_project")

     expect(project.get("build")).toBeDefined()
     expect(project.get("tracker")).toBeDefined()
-    expect(project.get("new_relic")).toBeDefined()
-    expect(project.get("airbrake")).toBeDefined()

   it "should not include undefined airbrake model", ->
-    project = new ProjectMonitor.Models.Project
-      build: { name: 'Project Monitor', aggregate: false, statuses: [true, false, true], last_build: "4d" }
-      tracker: { velocity: 9, variance: 10, delivered: 9, open: 5, velocities: [12, 15, 20, 40, 10] }
-      new_relic: { times: [10, 20, 50, 80, 100, 90, 80, 90, 40, 40] }
+    project = BackboneFactory.create("project")

-    expect(project.get("airbrake")).not.toBeDefined()
+    expect(project.get("tracker")).not.toBeDefined()

   describe "#update", ->
     beforeEach ->


client: remove getPlainActivityBody util

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


fixing popover anchor so it works in firefox. fixes mysterioustrousers/firehose-browser#130


JGroupData: for private group meta data

JGroupData: for private group meta data

error: pathspec 'workers/social/lib/social/models/group/groupdata.coffee' did not match any file(s) known to git

--- workers/social/lib/social/models/group/groupdata.coffee
+++ workers/social/lib/social/models/group/groupdata.coffee
@@ -0,0 +1,19 @@
+{ Module } = require 'jraphical'
+
+module.exports = class JGroupData extends Module
+
+  @set
+    indexes       :
+      slug        : 'unique'
+
+    sharedEvents  :
+      static      : []
+      instance    : []
+
+    schema        :
+      slug        :
+        type      : String
+        validate  : require('../name').validateName
+        set       : (value) -> value.toLowerCase()
+
+      data        : Object


Fixing typo

Fixing typo

isSelecting method was calling "view.visiable()" instead of "view.visible()"

--- src/api.coffee
+++ src/api.coffee
@@ -4,7 +4,7 @@
   # @params at[String] the flag
   # @params data [Array] data to storage.
   load: (at, data) -> c.model.load data if c = this.controller(at)
-  isSelecting: () -> this.controller()?.view.visiable()
+  isSelecting: () -> this.controller()?.view.visible()
   setIframe: (iframe, asRoot) -> this.setupRootElement(iframe, asRoot); null;
   run: -> this.dispatch()
   destroy: ->


flux: stores: added loggedinuseremail store


Moved command logic to a cli file, required by the bin commands

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

--- src/cli.coffee
+++ src/cli.coffee
@@ -0,0 +1,41 @@
+FlirtyHost = require '../lib/flirty/host'
+http = require 'http'
+path = require 'path'
+optimist = require 'optimist'
+prompt = require 'prompt'
+
+require 'colors'
+
+schema = {
+  properties:
+    folder:
+      required: true
+      default: "./"
+      description: "Which folder do you want to host?"
+    port:
+      default: 3333
+      required: true
+      description: "What port do you want to host on?"
+    username:
+      description: "Protect content with a username"
+    password:
+      hidden: true
+      description: "Protect content with a password"
+}
+
+exports.run = ->
+  prompt.message = "Flirty Host"
+  prompt.override = optimist.argv
+  prompt.get schema, (err, results)->
+    flirty_opts = {}
+    flirty_opts.username = if results.username.length > 1 then results.username else null
+    flirty_opts.password = if results.password.length > 1 then results.password else null
+
+    dir = path.resolve process.cwd(), results.folder
+
+    app = FlirtyHost dir, flirty_opts
+    http.createServer(app).listen results.port, (err)->
+      console.log "%s hosted on http:localhost: %s", dir.green, results.port.green
+
+
+


check for additional elements for record buttons If using the adapter, some available APIs lead to showing the buttons, but still does not work. So just be more strict and check for all elements we really need, like AudioContext and MediaRecorder

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


Nodejs: metrics: add metricsbase class

Nodejs: metrics: add metricsbase class

error: pathspec 'node_modules_koding/koding-datadog/lib/metricsbase.coffee' did not match any file(s) known to git

--- node_modules_koding/koding-datadog/lib/metricsbase.coffee
+++ node_modules_koding/koding-datadog/lib/metricsbase.coffee
@@ -0,0 +1,89 @@
+{ argv }  = require 'optimist'
+KONFIG    = require('koding-config-manager').load("main.#{argv.c}")
+os        = require 'os'
+DogStatsD = require './dogstatsd'
+Timer     = require './timer'
+
+module.exports = class MetricsBase
+
+  @timer : Timer
+
+
+  @commonTagList : {
+
+    process : [
+      'cwd'
+      'pid'
+      'argv'
+      'title'
+      'getuid'
+      'getgid'
+      'version'
+      'platform'
+      'execPath'
+    ]
+
+    os : [
+      'type'
+      'release'
+      'hostname'
+    ]
+
+  }
+
+
+  @populateCommonTags : (tags) ->
+
+    tags ?= []
+    tags.push "version:#{KONFIG.version}"
+
+    for key, value of @commonTagList
+      for prop in value
+        tagName  = "#{key}.#{prop}"
+        tagValue = ''
+
+        source = switch
+          when key is 'process'  then process
+          when key is 'os'       then os
+
+        tagValue = switch
+          when not source[prop]                   then 0
+          when Array.isArray source[prop]         then source[prop].join()
+          when typeof source[prop] in 'object'    then JSON.stringify source[prop]
+          when typeof source[prop] is 'function'  then source[prop]()
+          else                                         source[prop]
+
+        tagValue = @sanitizeTagValue tagValue
+        tags.push "#{tagName}:#{tagValue}"
+
+    return tags
+
+
+  @sanitizeTagValue : (tagValue) ->
+
+    tagValue = JSON.stringify tagValue  unless typeof tagValue is 'string'
+
+    # Tags must start with a letter, and after that may contain alphanumerics,
+    # underscores, minuses, colons, periods and slashes.
+    tagValue = tagValue.replace /[^A-Za-z0-9:\-_\.\/ ]+/g, ' '
+
+    return tagValue
+
+
+  @sanitizeMetricName :(metricName) ->
+
+    return metricName
+      .replace /[:?]/g,               '_' # replace : and ? with _
+      .replace /[^A-Za-z0-9_\. ]+/g,  ''  # remove invalid characters
+
+
+  @sendMetrics : (metricsList, metricName, tags) ->
+    metricName = @sanitizeMetricName metricName
+
+    dogStatsDClient = DogStatsD.getClient()
+
+    for metricMethod, value of metricsList
+      for metricSuffix, metricValue of metricsList[metricMethod]
+        dogStatsDClient[metricMethod] "#{metricName}.#{metricSuffix}", metricValue, tags
+
+


Add markdow editor on channel edit

Add markdow editor on channel edit

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

--- app/assets/javascripts/neighborly/channels/profiles/edit.js.coffee
+++ app/assets/javascripts/neighborly/channels/profiles/edit.js.coffee
@@ -0,0 +1,9 @@
+Neighborly.Channels ?= {}
+Neighborly.Channels.Profiles ?= {}
+
+Neighborly.Channels.Profiles.Edit =
+  init: Backbone.View.extend
+    el: '.edit-channel-page'
+
+    initialize: ->
+      this.$('#profile_how_it_works').markItUp(Neighborly.markdownSettings)


Added tile definition as comments

Added tile definition as comments

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/4eek/unknown.git/'


document added environment variable HUBOT_SENSU_API_ALLOW_INVALID_CERTS

--- src/sensu.coffee
+++ src/sensu.coffee
@@ -8,6 +8,7 @@
 #   HUBOT_SENSU_API_URL - URL for the sensu api service.  http://sensu.yourdomain.com:4567
 #   HUBOT_SENSU_API_USERNAME - Username for the sensu api basic auth. Not used if blank/unset
 #   HUBOT_SENSU_API_PASSWORD - Password for the sensu api basic auth. Not used if blank/unset
+#   HUBOT_SENSU_API_ALLOW_INVALID_CERTS - Allow self signed and invalid certs. Default:false
 #
 # Commands:
 #   hubot sensu info - show sensu api info


adicionando customização do tooltip

adicionando customização do tooltip

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/AppCivico/votolegal-www.git/'


Use `serve` instead of `server`

Use `serve` instead of `server`

--- app/templates/_Gruntfile.coffee
+++ app/templates/_Gruntfile.coffee
@@ -129,13 +129,19 @@
             'jshint'
         ]

-    grunt.registerTask 'server',
+    grunt.registerTask 'serve',
         'Run presentation locally and start watch process (living document).', [
             'buildIndex'<% if (config.get('useSass')) { %>
             'sass'<% } %>
             'connect:livereload'
             'watch'
         ]
+
+    grunt.registerTask 'server', ->
+        grunt.log.warn
+        'The `server` task has been deprecated.
+         Use `grunt serve` to start a server.'
+        grunt.task.run ['serve']

     grunt.registerTask 'dist',
         'Save presentation files to *dist* directory.', [


Uncomment and header in es-419.coffee

Uncomment and header in es-419.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/VilkkuV/codecombat.git/'


Fixed: events were not timezoned during export to iCal

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


Fix: TentStatus.Helpers.isEntityOnTentHostDomain can handle HTTP.URI or a string for entity

--- assets/javascripts/helpers/url.js.coffee
+++ assets/javascripts/helpers/url.js.coffee
@@ -47,7 +47,7 @@
     TentStatus.config.domain_entity && TentStatus.config.domain_entity.assertEqual(entity)

   isEntityOnTentHostDomain: (entity) ->
-    TentStatus.config.tent_host_domain && entity.match(
+    TentStatus.config.tent_host_domain && entity.toString().match(
       new RegExp(TentStatus.Helpers.escapeRegExChars(TentStatus.config.tent_host_domain))
     )


activity: load custom fonts when activity is being loaded

--- client/activity/lib/index.coffee
+++ client/activity/lib/index.coffee
@@ -6,6 +6,7 @@
 checkFlag       = require 'app/util/checkFlag'
 AppStorage      = require 'app/appstorage'
 AppController   = require 'app/appcontroller'
+KodingAppsController = require 'app/kodingappscontroller'

 require('./routehandler')()

@@ -27,6 +28,8 @@
     {appStorageController} = kd.singletons

     @appStorage = appStorageController.storage 'Activity', '2.0'
+
+    helper.loadFonts()

   post: (options = {}, callback = noop) ->
@@ -133,3 +136,17 @@
     switch e.model.name
       when 'prevwindow' then @getView().openPrev()
       when 'nextwindow' then @getView().openNext()
+
+helper =
+
+  loadFonts: ->
+
+    global.WebFontConfig =
+      google: { families: [ 'Source+Sans+Pro:400,600:latin', 'Oxygen:400,700:latin' ] }
+
+    options =
+      identifier : 'source-sans-pro'
+      url        : '//ajax.googleapis.com/ajax/libs/webfont/1/webfont.js'
+
+    KodingAppsController.appendHeadElement 'script', options
+


Initial Import

Initial Import

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

--- src/scripts/beeradvocate.coffee
+++ src/scripts/beeradvocate.coffee
@@ -0,0 +1,29 @@
+# Description:
+# An alternate to the existing beer script, this will scrape beer advocate for the most recent accessed beer.
+# It returns the name of the beer, a picture of the beer and a link to the beer. Hubot is now full of
+# different options for beer scripts. Removing the ? (optional) after (a|advocate) will force the command
+# to be 'beer advocate me' and thereby allow this script to coexist with other beer scripts peacefully.
+#
+# Dependencies:
+# None
+#
+# Configuration:
+# None
+#
+# Commands:
+# beer me - returns the latest beer discussed on beer advocate with picture
+#
+# Author:
+# whyjustin
+
+module.exports = (robot) ->
+    robot.respond /beer (a|advocate)?( me)?/i, (msg) ->
+        msg.http("http://beeradvocate.com/beer/")
+            .get() (err, res, body) ->
+                if (res.statusCode == 200)
+                    reg = /
(.+?)<\/a><\/h6>/i
+                    results = body.match(reg)
+                    if (results != null && results.length > 3)
+                        msg.send results[3]
+                        msg.send 'http://beeradvocate.com/beer/profile/' + results[1] + '/' + results[2]
+                        msg.send 'http://beeradvocate.com/im/thumb.php?im=beers/' + results[2] + '.jpg'


Stacks: Added firewall rule modal.

Stacks: Added firewall rule modal.


Add simple field type

Add simple field type

error: pathspec 'vendor/assets/javascripts/mercury/regions/simple.js.coffee' did not match any file(s) known to git

--- vendor/assets/javascripts/mercury/regions/simple.js.coffee
+++ vendor/assets/javascripts/mercury/regions/simple.js.coffee
@@ -0,0 +1,308 @@
+# todo:
+# context for the toolbar buttons and groups needs to change so we can do the following:
+# how to handle context for buttons?  if the cursor is within a bold area (**bo|ld**), or selecting it -- it would be
+# nice if we could activate the bold button for instance.
+
+class @Mercury.Regions.Simple extends Mercury.Region
+  @supported: document.getElementById
+  @supportedText: "IE 7+, Chrome 10+, Firefox 4+, Safari 5+, Opera 8+"
+
+  type = 'simple'
+
+  constructor: (@element, @window, @options = {}) ->
+    @type = 'simple'
+    super
+
+
+  build: ->
+    width = '100%'
+    height = @element.height()
+
+    value = @element.text()
+    @element.removeClass(Mercury.config.regions.className)
+    @textarea = jQuery('<textarea>', @document).val(value)
+    @textarea.attr('class', @element.attr('class')).addClass('mercury-textarea')
+    @textarea.css
+      border: 0,
+      background: 'transparent',
+      display: 'block',
+      'overflow-y': 'hidden',
+      width: width,
+      height: height,
+      fontFamily: 'inherit',
+      fontSize: 'inherit',
+      fontWeight: 'inherit',
+      fontStyle: 'inherit',
+    @element.addClass(Mercury.config.regions.className)
+    @element.empty().append(@textarea)
+
+    @container = @element
+    @container.data('region', @)
+    @element = @textarea
+    @resize()
+
+
+  bindEvents: ->
+    Mercury.on 'mode', (event, options) => @togglePreview() if options.mode == 'preview'
+    Mercury.on 'focus:frame', => @focus() if !@previewing && Mercury.region == @
+
+    Mercury.on 'action', (event, options) =>
+      return if @previewing || Mercury.region != @
+      @execCommand(options.action, options) if options.action
+
+    Mercury.on 'unfocus:regions', =>
+      return if @previewing || Mercury.region != @
+      @element.blur()
+      @container.removeClass('focus')
+      Mercury.trigger('region:blurred', {region: @})
+
+    @element.on 'dragenter', (event) =>
+      return if @previewing
+      event.preventDefault()
+      event.originalEvent.dataTransfer.dropEffect = 'copy'
+
+    @element.on 'dragover', (event) =>
+      return if @previewing
+      event.preventDefault()
+      event.originalEvent.dataTransfer.dropEffect = 'copy'
+
+    @element.on 'drop', (event) =>
+      return if @previewing
+
+      # handle dropping snippets
+      if Mercury.snippet
+        event.preventDefault()
+        @focus()
+        Mercury.Snippet.displayOptionsFor(Mercury.snippet)
+
+      # handle any files that were dropped
+      if event.originalEvent.dataTransfer.files.length
+        event.preventDefault()
+        @focus()
+        Mercury.uploader(event.originalEvent.dataTransfer.files[0])
+
+    @element.on 'focus', =>
+      return if @previewing
+      Mercury.region = @
+      @container.addClass('focus')
+      Mercury.trigger('region:focused', {region: @})
+
+    @element.on 'keydown', (event) =>
+      return if @previewing
+      @resize()
+      switch event.keyCode
+        when 90 # undo / redo
+          return unless event.metaKey
+          event.preventDefault()
+          if event.shiftKey then @execCommand('redo') else @execCommand('undo')
+          return
+
+        when 13 # enter or return
+          selection = @selection()
+          text = @element.val()
+          start = text.lastIndexOf('\n', selection.start)
+          end = text.indexOf('\n', selection.end)
+          end = text.length if end < start
+          start = text.lastIndexOf('\n', selection.start - 1) if text[start] == '\n'
+          if text[start + 1] == '-'
+            selection.replace('\n- ', false, true)
+          if /\d/.test(text[start + 1])
+            lineText = text.substring(start, end)
+            if /(\d+)\./.test(lineText)
+              number = parseInt(RegExp.$1)
+              selection.replace("\n#{number += 1}. ", false, true)
+          # Never allow return. Newlines won't survive the
+          # change-over to HTML, so just don't encourage their
+          # use.
+          event.preventDefault()
+
+        when 9 # tab
+          event.preventDefault()
+          @execCommand('insertHTML', {value: '  '})
+
+      if event.metaKey
+        switch event.keyCode
+          when 66 # b
+            @execCommand('bold')
+            event.preventDefault()
+
+          when 73 # i
+            @execCommand('italic')
+            event.preventDefault()
+
+          when 85 # u
+            @execCommand('underline')
+            event.preventDefault()
+
+      @pushHistory(event.keyCode)
+
+    @element.on 'keyup', =>
+      return if @previewing
+      Mercury.changes = true
+      @resize()
+      Mercury.trigger('region:update', {region: @})
+
+    @element.on 'mouseup', =>
+      return if @previewing
+      @focus()
+      Mercury.trigger('region:focused', {region: @})
+
+
+  focus: ->
+    @element.focus()
+
+
+  content: (value = null, filterSnippets = true) ->
+    if value != null
+      if jQuery.type(value) == 'string'
+        @element.val(value)
+      else
+        @element.val(value.html)
+        @selection().select(value.selection.start, value.selection.end)
+    else
+      return @element.val()
+
+
+  contentAndSelection: ->
+    return {html: @content(null, false), selection: @selection().serialize()}
+
+
+  togglePreview: ->
+    if @previewing
+      @previewing = false
+      @element = @container
+      @build()
+      @focus() if Mercury.region == @
+      # @container.addClass(Mercury.config.regions.className).removeClass("#{Mercury.config.regions.className}-preview")
+      # @previewElement.hide()
+      # @element.show()
+    else
+      @previewing = true
+      @container.addClass("#{Mercury.config.regions.className}-preview").removeClass(Mercury.config.regions.className)
+      value = jQuery('

').text(@element.val()).html()
+      @container.html(value)
+      Mercury.trigger('region:blurred', {region: @})
+
+
+  execCommand: (action, options = {}) ->
+    super
+
+    handler.call(@, @selection(), options) if handler = Mercury.Regions.Simple.actions[action]
+    @resize()
+
+
+  pushHistory: (keyCode) ->
+    # when pressing return, delete or backspace it should push to the history
+    # all other times it should store if there's a 1 second pause
+    keyCodes = [13, 46, 8]
+    waitTime = 2.5
+    knownKeyCode = keyCodes.indexOf(keyCode) if keyCode
+
+    # clear any pushes to the history
+    clearTimeout(@historyTimeout)
+
+    # if the key code was return, delete, or backspace store now -- unless it was the same as last time
+    if knownKeyCode >= 0 && knownKeyCode != @lastKnownKeyCode # || !keyCode
+      @history.push(@contentAndSelection())
+    else if keyCode
+      # set a timeout for pushing to the history
+      @historyTimeout = setTimeout(waitTime * 1000, => @history.push(@contentAndSelection()))
+    else
+      # push to the history immediately
+      @history.push(@contentAndSelection())
+
+    @lastKnownKeyCode = knownKeyCode
+
+
+  selection: ->
+    return new Mercury.Regions.Simple.Selection(@element)
+
+
+  resize: ->
+    @element.css({height: @element.get(0).scrollHeight - 100})
+    @element.css({height: @element.get(0).scrollHeight});
+
+
+  snippets: ->
+
+
+  # Actions
+  @actions: {
+
+    undo: -> @content(@history.undo())
+
+    redo: -> @content(@history.redo())
+
+    insertHTML: (selection, options) ->
+      if options.value.get && element = options.value.get(0)
+        options.value = jQuery('
').html(element).html()
+      selection.replace(options.value, false, true)
+
+  }
+
+
+# Helper class for managing selection and getting information from it
+class Mercury.Regions.Simple.Selection
+
+  constructor: (@element) ->
+    @el = @element.get(0)
+    @getDetails()
+
+
+  serialize: ->
+    return {start: @start, end: @end}
+
+
+  getDetails: ->
+    @length = @el.selectionEnd - @el.selectionStart
+    @start = @el.selectionStart
+    @end = @el.selectionEnd
+    @text = @element.val().substr(@start, @length)
+
+
+  replace: (text, select = false, placeCursor = false) ->
+    @getDetails()
+    val = @element.val()
+    savedVal = @element.val()
+    @element.val(val.substr(0, @start) + text + val.substr(@end, val.length))
+    changed = @element.val() != savedVal
+    @select(@start, @start + text.length) if select
+    @select(@start + text.length, @start + text.length) if placeCursor
+    return changed
+
+
+  select: (@start, @end) ->
+    @element.focus()
+    @el.selectionStart = @start
+    @el.selectionEnd = @end
+    @getDetails()
+
+
+  wrap: (left, right) ->
+    @getDetails()
+    @deselectNewLines()
+    @replace(left + @text + right, @text != '')
+    @select(@start + left.length, @start + left.length) if @text == ''
+
+
+  deselectNewLines: ->
+    text = @text
+    length = text.replace(/\n+$/g, '').length
+    @select(@start, @start + length)
+
+
+  placeMarker: ->
+    @wrap('[mercury-marker]', '[mercury-marker]')
+
+
+  removeMarker: ->
+    val = @element.val()
+    start = val.indexOf('[mercury-marker]')
+    return unless start > -1
+    end = val.indexOf('[mercury-marker]', start + 1) - '[mercury-marker]'.length
+    @element.val(@element.val().replace(/\[mercury-marker\]/g, ''))
+    @select(start, end)
+
+
+  textContent: ->
+    return @text


Round out tests

Round out tests

--- apps/artists/test/routes.coffee
+++ apps/artists/test/routes.coffee
@@ -2,9 +2,23 @@

 describe 'Artists routes', ->
   describe '#parseId', ->
-    it 'works on all sorts of valid paths and URLs', ->
+    it 'works on all sorts of valid paths and URLs (1)', ->
       parseId('https://www.artsy.net/artist/alexander-calder').should.equal 'alexander-calder'
+
+    it 'works on all sorts of valid paths and URLs (2)', ->
       parseId('/artist/alexander-calder').should.equal 'alexander-calder'
+
+    it 'works on all sorts of valid paths and URLs (3)', ->
       parseId('artist/alexander-calder').should.equal 'alexander-calder'
+
+    it 'works on all sorts of valid paths and URLs (4)', ->
       parseId('https://www.artsy.net/artist/alexander-calder/').should.equal 'alexander-calder'
+
+    it 'works on all sorts of valid paths and URLs (5)', ->
       parseId('/artist/alexander-calder/').should.equal 'alexander-calder'
+
+    it 'works on all sorts of valid paths and URLs (6)', ->
+      parseId('/artist/alexander-calder-2/').should.equal 'alexander-calder-2'
+
+    it 'works on all sorts of valid paths and URLs (7)', ->
+      parseId('/artist/alexander_calder-2/').should.equal 'alexander_calder-2'


lined up

lined up

--- apps/partner/client/view.coffee
+++ apps/partner/client/view.coffee
@@ -7,11 +7,13 @@
 ContactView = require './contact.coffee'
 CollectionView = require './collection.coffee'
 ShowsView = require './shows.coffee'
+articlesView = require './articles.coffee'
+postsView = require './posts.coffee'

 PostsView = if 'Articles' in (sd.CURRENT_USER?.lab_features or [])
-  require './articles.coffee'
+  articlesView
 else
-  require './posts.coffee'
+  postsView

 ArtistsView = require './artists.coffee'
 OverviewView = require './overview.coffee'


Script to find and print missing translation keys #551

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

--- app/static/locale_compare.coffee
+++ app/static/locale_compare.coffee
@@ -0,0 +1,23 @@
+# for loc in locale-*.json; do coffee locale_compare.coffee $loc>$loc.keys.txt; done
+loc=[]
+walk_keys=(o, callback)->
+    try
+        keys = Object.keys o
+    catch e
+        #console.log e
+        return #non object
+    return if keys.length is 0
+    for key in keys
+        loc.push key
+        callback loc.join '.'
+        walk_keys o[key], callback
+        loc.pop key
+en_keys=[]
+walk_keys (require './locale-en'), (key)->en_keys.push key
+other_locales = ['de','it','ru','zh-CN']
+for other in other_locales
+    other_key={}
+    walk_keys (require './locale-'+other), (key)->other_key[key]=on
+    for en_key in en_keys
+        unless other_key[en_key]
+            console.log other+"\t"+"missing\t",en_key


changed icon

changed icon

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


xsrf for delete methods

xsrf for delete methods

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


Fixing demo for the iterator

Fixing demo for the iterator

Seek is still broken

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

--- demo/iterator.coffee
+++ demo/iterator.coffee
@@ -0,0 +1,82 @@
+DB   = require('../build/default/leveldb.node').DB
+uuid = require('node-uuid')
+td   = require("twisted-deferred")
+
+start = Date.now()
+
+entryCount = 1000
+readCount = 0
+
+defer = td.toDeferred
+DeferredList = td.DeferredList
+
+console.log("Creating test database")
+path = "/tmp/iterator.db"
+db = new DB()
+
+d = defer(db.open.bind(db), path, {create_if_missing: true})
+d.addCallback () ->
+   console.log('!! creating ' + entryCount + ' random key entries')
+   deferreds = []
+   for i in [0 .. entryCount]
+       id = uuid()
+
+       put_d = defer db.put.bind(db), id, JSON.stringify({id: id, name: 'Bob', age: 33})
+       deferreds.push(put_d)
+
+   return DeferredList(deferreds)
+
+d.addCallback () ->
+   console.log('created in ' + (Date.now() - start) + 'ms')
+   console.log('!! iterating db in key order')
+
+   # reset the start counter
+   start = Date.now()
+
+   # iterate over the test database
+   iterator = db.newIterator({})
+
+   iterator.seekToFirst()
+
+
+   while iterator.valid()
+       key = iterator.key().toString('utf8')
+
+       if lastKey && lastKey > key
+           console.log('found sorting error')
+
+       lastKey = key
+       readCount++
+
+       iterator.next()
+
+   console.log('read sequential ' + readCount + ' db contents in ' + (Date.now() - start) + 'ms')
+
+d.addCallback () ->
+   console.log "Seek is broken"
+   return
+   console.log '1'
+   iterator = db.newIterator({})
+   console.log '2'
+
+   for i in [0 .. 100]
+       testUUID = uuid()
+       iterator.seek(new Buffer(testUUID))
+
+       console.log('looking for first key after: ' + testUUID)
+
+       # if we found something the report
+       if (iterator.valid())
+           console.log('FOUND: ' + iterator.key())
+
+
+d.addCallback () ->
+   console.log "success"
+
+d.addErrback (err) ->
+   console.log err.message.stack
+
+d.addBoth () ->
+   db.close()
+   DB.destroyDB(path, {})
+


hack this for now

hack this for now

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


Terminal: Add blinking cursor setting

Terminal: Add blinking cursor setting

--- client/ide/workspace/panes/settings/terminalsettingsview.coffee
+++ client/ide/workspace/panes/settings/terminalsettingsview.coffee
@@ -21,17 +21,22 @@
       size          : "tiny settings-on-off"
       callback      : (state) => @emit 'SettingsChanged', 'visualBell', state

+    @blinkingCursor = new KodingSwitch
+      size          : 'tiny settings-on-off'
+      callback      : (state) => @emit 'SettingsChanged', 'blinkingCursor', state
+
   getStorageInformation: -> { name: 'Terminal', version: '1.0.1' }

   getSettingKeys: ->
-    return [ 'visualBell', 'font', 'theme', 'fontSize', 'scrollback' ]
+    return [ 'visualBell', 'font', 'theme', 'fontSize', 'scrollback', 'blinkingCursor' ]

   defaults:
-    font       : 'ubuntu-mono'
-    theme      : 'green-on-black'
-    fontSize   : 14
-    visualBell : no
-    scrollback : 1000
+    font           : 'ubuntu-mono'
+    theme          : 'green-on-black'
+    fontSize       : 14
+    visualBell     : no
+    scrollback     : 1000
+    blinkingCursor : yes

   pistachio: ->
     """
@@ -41,4 +46,5 @@

Theme       {{> @theme}}

Scrollback  {{> @scrollback}}

Use visual bell                 {{> @visualBell}}

+
Blinking cursor                 {{> @blinkingCursor}}

     """


Bugfixes

Bugfixes

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/goofy-bz/kresus.git/'


add check for email+pwd length on login

add check for email+pwd length on login

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


Correct lint error.

Correct lint error.

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


try fix scrolling bug

try fix scrolling bug

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


proper event attachment for close and create channels

--- app/assets/javascripts/backbone/views/chatarea.js.coffee
+++ app/assets/javascripts/backbone/views/chatarea.js.coffee
@@ -3,12 +3,14 @@
   template: JST['chatarea']
   # className: 'channels'

-  events:
-    "click .ui-icon-close" : "deleteChannel"
-    "click .create_channel": "createChannel"
+  # events:
+  #   "click .close_channel" : "deleteChannel"
+  #   "click .create_channel": "createChannel"

   render: ->
     $('.header .logo').after(@template({channels: @options.channels}))
+    $('.close_channel').click(@deleteChannel);
+    $('.create_channel').click(@createChannel);
     for channel in @options.channels.models
       view = new Kandan.Views.ChannelPane({channel: channel})
       $(@el).append(view.render().el)
@@ -16,6 +18,7 @@
     @

   createChannel: (event)->
+    console.log("createChannel called", event);
     channelName = prompt("What's the channel name?", "New channel")
     channelName = channelName.replace(/^\s+|\s+$/g, '')
     if channelName
@@ -27,6 +30,7 @@
       console.log "create channel: #{channelName}"

   deleteChannel: (event)->
+    console.log("delete channel called");
     channelIndex = $(event.target).parent().prevAll().length
     console.log "request for deletion", channelIndex
     Kandan.Helpers.Channels.deleteChannelByTabIndex(channelIndex) if channelIndex != 0


+ unicode example

+ unicode example

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

--- examples/myNavigator.coffee
+++ examples/myNavigator.coffee
@@ -0,0 +1,74 @@
+levelup = require("levelup")
+levelgraph = require("../")
+tmp = require("tmp")
+tmp.dir (err, dir) ->
+  if err
+    console.log err
+    process.exit 1
+  db = levelgraph(levelup(dir))
+  db.put [
+    subject: "电器"
+    predicate: "动力"
+    object: "电"
+  ,
+    subject: "特斯拉"
+    predicate: "动力"
+    object: "电"
+  ,
+    subject: "大众"
+    predicate: "动力"
+    object: "汽油"
+  ,
+    subject: "大众"
+    predicate: "是"
+    object: "汽车"
+  ,
+    subject: "特斯拉"
+    predicate: "是"
+    object: "汽车"
+  ,
+    subject: "混合动力汽车"
+    predicate: "动力"
+    object: '电'
+  ,
+    subject: "混合动力汽车"
+    predicate: "是"
+    object: "汽车"
+  ,
+    subject: "混合动力汽车"
+    predicate: "动力"
+    object: '汽油'
+  ,
+    subject: "电"
+    predicate: "量"
+    object: "度"
+  ,
+    subject: "电"
+    predicate: "来源"
+    object: "煤"
+  ,
+    subject: "电"
+    predicate: "来源"
+    object: "核能"
+  ,
+    subject: "汽油"
+    predicate: "是"
+    object: "油"
+  ], ->
+    #
+    db.nav("汽车").archIn("是").archOut("动力").bind("电").triples (err, results) ->
+      console.log "nav:", results
+
+    db.search [
+      subject: db.v("x0")
+      predicate: "是"
+      object: "汽车"
+    ,
+      subject: db.v("x0")
+      predicate: "动力"
+      object: "电"
+    ], (err, results) ->
+      console.log "search:",results
+
+
+


Update redactor.coffee

Update redactor.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/zenati/simple_form_extension.git/'


Cleanup and renamed event to match existing events

--- src/dropzone.coffee
+++ src/dropzone.coffee
@@ -102,6 +102,7 @@
     "dragover"
     "dragleave"
     "addedfile"
+    "addedfiles"
     "removedfile"
     "thumbnail"
     "error"
@@ -122,7 +123,6 @@
     "maxfilesexceeded"
     "maxfilesreached"
     "queuecomplete"
-    "filesadded"
   ]

@@ -479,7 +479,7 @@

     queuecomplete: noop

-    filesadded: noop
+    addedfiles: noop

     # This template will be chosen when a new file is dropped.
@@ -631,11 +631,10 @@
         @hiddenFileInput.style.height = "0"
         @hiddenFileInput.style.width = "0"
         document.body.appendChild @hiddenFileInput
-        self = this
         @hiddenFileInput.addEventListener "change", =>
           files = @hiddenFileInput.files
           @addFile file for file in files if files.length
-          self.emit "filesadded", files
+          @emit "addedfiles", files
           setupHiddenFileInput()
       setupHiddenFileInput()

@@ -837,7 +836,7 @@
     @emit "drop", e

     files = e.dataTransfer.files
-    @emit "filesadded", files
+    @emit "addedfiles", files

     # Even if it's a folder, files.length will contain the folders.
     if files.length


Acrescenta o arquivo de config da compilação do SASS

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

--- .save.cson
+++ .save.cson
@@ -0,0 +1,4 @@
+
+# Documento de compilação automática do plugin Save-AutoRun do Atom.
+
+"**/sass/*.scss": "sass ${dir}/style.scss:${dir}/../style.css --no-cache --style expanded --precision 3 --sourcemap=none;"


extracting point class

extracting point class

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

--- src/point.coffee
+++ src/point.coffee
@@ -0,0 +1,202 @@
+###*
+Create a new point with given x and y coordinates. If no arguments are given
+defaults to (0, 0).
+@name Point
+@param {Number} [x]
+@param {Number} [y]
+@constructor
+###
+Point = (x, y) ->
+  ###*
+  The x coordinate of this point.
+  @name x
+  @fieldOf Point#
+  ###
+  x: x || 0
+  ###*
+  The y coordinate of this point.
+  @name y
+  @fieldOf Point#
+  ###
+  y: y || 0
+  ###*
+  Adds a point to this one and returns the new point. You may
+  also use a two argument call like point.add(x, y)
+  to add x and y values without a second point object.
+  @name add
+  @methodOf Point#
+
+  @param {Point} other The point to add this point to.
+  @returns A new point, the sum of both.
+  @type Point
+  ###
+  add: (first, second) ->
+    if second
+      Point(this.x + first, this.y + second)
+    else
+      Point(this.x + first.x, this.y + first.y)
+
+  ###*
+  Subtracts a point to this one and returns the new point.
+  @name subtract
+  @methodOf Point#
+
+  @param {Point} other The point to subtract from this point.
+  @returns A new point, this - other.
+  @type Point
+  ###
+  subtract: (other) ->
+    Point(this.x - other.x, this.y - other.y)
+
+  ###*
+   * Scale this Point (Vector) by a constant amount.
+   * @name scale
+   * @methodOf Point#
+   *
+   * @param {Number} scalar The amount to scale this point by.
+   * @returns A new point, this * scalar.
+   * @type Point
+  ###
+  scale: (scalar) ->
+    Point(this.x * scalar, this.y * scalar)
+
+  ###*
+  Floor the x and y values, returning a new point.
+
+  @name floor
+  @methodOf Point#
+  @returns A new point, with x and y values each floored to the largest previous integer.
+  @type Point
+  ###
+  floor: ->
+    Point(this.x.floor(), this.y.floor())
+
+  ###*
+   * Determine whether this point is equal to another point.
+   * @name equal
+   * @methodOf Point#
+   *
+   * @param {Point} other The point to check for equality.
+   * @returns true if the other point has the same x, y coordinates, false otherwise.
+   * @type Boolean
+  ###
+  equal: (other) ->
+    this.x == other.x && this.y == other.y
+
+  ###*
+  Calculate the magnitude of this Point (Vector).
+  @name magnitude
+  @methodOf Point#
+
+  @returns The magnitude of this point as if it were a vector from (0, 0) -> (x, y).
+  @type Number
+  ###
+  magnitude: ->
+    Point.distance(Point(0, 0), this)
+
+  ###*
+  Returns the direction in radians of this point from the origin.
+  @name direction
+  @methodOf Point#
+
+  @type Number
+  ###
+  direction: ->
+    Math.atan2(this.y, this.x)
+
+  ###*
+  Calculate the dot product of this point and another point (Vector).
+  @name dot
+  @methodOf Point#
+
+  @param {Point} other The point to dot with this point.
+  @returns The dot product of this point dot other as a scalar value.
+  @type Number
+  ###
+  dot: (other) ->
+    this.x * other.x + this.y * other.y
+
+  ###*
+  Calculate the cross product of this point and another point (Vector).
+  Usually cross products are thought of as only applying to three dimensional vectors,
+  but z can be treated as zero. The result of this method is interpreted as the magnitude
+  of the vector result of the cross product between [x1, y1, 0] x [x2, y2, 0]
+  perpendicular to the xy plane.
+  @name cross
+  @methodOf Point#
+
+  @param {Point} other The point to cross with this point.
+  @returns The cross product of this point with the other point as scalar value.
+  @type Number
+  ###
+  cross: (other) ->
+    this.x * other.y - other.x * this.y
+
+  ###*
+  The norm of a vector is the unit vector pointing in the same direction. This method
+  treats the point as though it is a vector from the origin to (x, y).
+  @name norm
+  @methodOf Point#
+
+  @returns The unit vector pointing in the same direction as this vector.
+  @type Point
+  ###
+  norm: (length=1.0) ->
+    this.scale(length/this.length())
+
+  ###*
+  Computed the length of this point as though it were a vector from (0,0) to (x,y)
+  @name length
+  @methodOf Point#
+
+  @returns The length of the vector from the origin to this point.
+  @type Number
+  ###
+  length: ->
+    Math.sqrt(this.dot(this))
+
+  ###*
+  Computed the Euclidean between this point and another point.
+  @name distance
+  @methodOf Point#
+
+  @param {Point} other The point to compute the distance to.
+  @returns The distance between this point and another point.
+  @type Number
+  ###
+  distance: (other) ->
+    Point.distance(this, other)
+
+###*
+ * @param {Point} p1
+ * @param {Point} p2
+ * @type Number
+ * @returns The Euclidean distance between two points.
+###
+Point.distance = (p1, p2) ->
+  Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2))
+
+###*
+ * Construct a point on the unit circle for the given angle.
+ *
+ * @param {Number} angle The angle in radians
+ * @type Point
+ * @returns The point on the unit circle.
+###
+Point.fromAngle = (angle) ->
+  Point(Math.cos(angle), Math.sin(angle))
+
+###*
+ * If you have two dudes, one standing at point p1, and the other
+ * standing at point p2, then this method will return the direction
+ * that the dude standing at p1 will need to face to look at p2.
+ * @param {Point} p1 The starting point.
+ * @param {Point} p2 The ending point.
+ * @returns The direction from p1 to p2 in radians.
+###
+Point.direction = (p1, p2) ->
+  Math.atan2(
+    p2.y - p1.y,
+    p2.x - p1.x
+  )
+


Make TinyMCE more tolerant about HTML elements

STUD-1565

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


Smooth scrolling; note incorrect calibration; MUST BE FIXED!

--- content_scripts/scroller.coffee
+++ content_scripts/scroller.coffee
@@ -139,6 +139,9 @@
     animate = (timestamp) ->
       start ?= timestamp

+      # FIXME(smblott) This calculation is not correctly calibrated:
+      #   - A `j` with smooth scrolling does not take you to the same place as a `j` with jump scrolling.
+      #   - A `j` followed by `k` does not take you back to exactly where you started.
       progress = timestamp - start
       scrollDelta = roundOut(delta * progress) - scrolledAmount
       scrolledAmount += scrollDelta


when an interrupt occurs, jump to the new PC before returning from step(), so that the ui can be updated. we still need to check at the top of the function, too, in case an interrupt happened outside.

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


Delete api_token in render

Delete api_token in render

--- views/env.coffee
+++ views/env.coffee
@@ -135,6 +135,8 @@
     # Important! Clone a copy of proxy objects!
     body = Object.remoteClone body
     postBody = Object.remoteClone postBody
+    # Delete api_token
+    delete postBody.api_token if postBody?.api_token?
     switch path
       # Game datas prefixed by $
       when '/kcsapi/api_start2'
@@ -207,7 +209,6 @@
     window.dispatchEvent event
   locked = false
 proxy.addListener 'game.on.response', (method, path, body, postBody) ->
-  delete postBody.api_token if postBody?.api_token?
   responses.push [method, path, body, postBody]
   resolveResponses() if !locked
 proxy.addListener 'game.start', ->


Fix problem with line groups ordering

Fix problem with line groups ordering

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


enabled sortedTable tests

enabled sortedTable tests

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/genericdave/speedr.js.git/'


Raw "settings" controller

Raw "settings" controller

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


tuika

tuika

error: pathspec 'core/coffee/public/js/url.coffee' did not match any file(s) known to git

--- core/coffee/public/js/url.coffee
+++ core/coffee/public/js/url.coffee
@@ -0,0 +1,25 @@
+class URLParser
+  constructor : (url) ->
+    @url = url
+    slashes = url.split("/")
+    if slashes.length > 0
+      scheme = slashes[0].match(/.+?:/)
+      @scheme = (if scheme? then scheme[0].replace(":", "") else undefined)
+      hostname = url.replace(@scheme + "://", "").match(/^.+?\//)
+      @hostname = (if hostname? then hostname[0].replace(/\//, "") else undefined)
+      unless url.match(/\/$/)
+        @fileName = slashes[slashes.length - 1]
+        @extension = @fileName.replace(/^.+?\./, "")
+        @type = @getType()
+
+  #RFC 2045っぽく
+  getType : () =>
+    switch @extension.toLowerCase()
+      when "jpg", "jpeg", "png", "gif"
+        "image"
+      when "mp3", "ogg", "wav"
+        "audio"
+      when "cmd", "css", "csv", "html", "txt", "xml"
+        "text"
+      when "mpg", "mp4", "wmv"
+        "video"


solve two problems with initial selected area

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/prognostikos/uploadcare-widget.git/'


add english_operators.coffee

add english_operators.coffee

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

--- src/english_operators.coffee
+++ src/english_operators.coffee
@@ -0,0 +1,9 @@
+module.exports = class EnglishOperators
+  rule:
+    name: 'english_operators'
+    description: 'This rule encourages to use english style operators.'
+    level: 'warn'
+    message: 'Use English equivalent operators. i.e)is, isnt, and, or'
+
+  lintLine: (line, lineApi) ->
+    /[&|\||\=]{2}|\!\=/.test(line)


Update recipient format

Update recipient format

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


[BugFix] Drop unneeded interpolation for homepage variables

--- src/desktop/apps/home/client/setup_home_page_modules.coffee
+++ src/desktop/apps/home/client/setup_home_page_modules.coffee
@@ -61,10 +61,10 @@
     metaphysics(
       query: query
       variables:
-        key: "#{module.key}",
-        id: "#{module.params?.id}"
-        related_artist_id: "#{module.params?.related_artist_id}"
-        followed_artist_id: "#{module.params?.followed_artist_id}"
+        key: module.key,
+        id: module.params?.id
+        related_artist_id: module.params?.related_artist_id
+        followed_artist_id: module.params?.followed_artist_id
         timezone: moment.tz.guess()
       req: { user: user }
     ).then ({ home_page: { artwork_module } }) ->


FinderController: Code styling.

FinderController: Code styling.

--- client/finder/filetree/controllers/findercontroller.coffee
+++ client/finder/filetree/controllers/findercontroller.coffee
@@ -180,6 +180,7 @@

   setRecentFile:({path})->
+
     recentFiles = @appStorage.getValue('recentFiles')
     recentFiles = []  unless Array.isArray recentFiles

@@ -191,7 +192,9 @@
     @appStorage.setValue 'recentFiles', recentFiles.slice(0,10), =>
       @emit 'recentfiles.updated', recentFiles

+
   hideDotFiles:(uid)->
+
     return  unless uid
     @setNodesHidden uid, yes
     for own path, node of @treeController.nodes
@@ -200,7 +203,9 @@
         @stopWatching file.path
         @treeController.removeNodeView node

+
   showDotFiles:(uid)->
+
     return  unless uid
     @setNodesHidden uid, no
     for own path, node of @treeController.nodes when node.getData().type is 'machine'
@@ -209,28 +214,38 @@
           @reloadPreviousState uid
         , yes

+
   isNodesHiddenFor:(uid)->
+
     return yes  if @getOption 'hideDotFiles'
     return (@appStorage.getValue('machinesDotFileChoices') or {})[uid]

+
   setNodesHidden:(uid, state)->
+
     prefs = @appStorage.getValue('machinesDotFileChoices') or {}
     prefs[uid] = state
     @appStorage.setValue 'machinesDotFileChoices', prefs

+
   getRecentFolders:->
+
     recentFolders = @appStorage.getValue('recentFolders')
     recentFolders = []  unless Array.isArray recentFolders
     return recentFolders

+
   setRecentFolder:(folderPath, callback)->
+
     recentFolders = @getRecentFolders()
     unless folderPath in recentFolders
       recentFolders.push folderPath
     recentFolders.sort (path)-> if path is folderPath then -1 else 0
     @appStorage.setValue 'recentFolders', recentFolders, callback

+
   unsetRecentFolder:(folderPath, callback)->
+
     recentFolders = @getRecentFolders()
     recentFolders = recentFolders.filter (path)->
       path.indexOf(folderPath) isnt 0
@@ -238,14 +253,18 @@
       if path is folderPath then -1 else 0
     @appStorage.setValue 'recentFolders', recentFolders, callback

+
   expandFolder:(folderPath, callback=noop)->
+
     return  unless folderPath
     for own path, node of @treeController.nodes
       return @treeController.expandFolder node, callback  if path is folderPath
     callback {message:"Folder not exists: #{folderPath}"}

+
   # FIXME THIS ~GG getPathHiearchy needs to be fixed for machine.uid
   expandFolders: (paths, callback=noop)->
+
     if typeof paths is 'string'
       paths = FSHelper.getPathHierarchy paths
     path = paths.pop()
@@ -255,7 +274,9 @@
       then callback null, @treeController.nodes[path]
       else @expandFolders paths, callback

+
   reloadPreviousState:(uid)->
+
     recentFolders = @getRecentFolders()
     if uid
       recentFolders = recentFolders.filter (folder)->
@@ -264,7 +285,9 @@
         recentFolders = ["[#{uid}]/"]
     @expandFolders recentFolders

+
   uploadTo: (path)->
+
     {uploader, uploaderPlaceholder} = @getDelegate()
     uploader.setPath path
     uploaderPlaceholder.show()
@@ -282,9 +305,9 @@
            machineItem.data.machine._id is uid
           return machineItem

+
   # Settings helpers
   #
-
   updateMountState:(uid, state)->

     return  if KD.isGuest()
@@ -297,23 +320,28 @@

   # FS Watcher helpers
   #
-
   registerWatcher:(path, stopWatching)->
+
     @watchers[path] = stop: stopWatching

+
   stopAllWatchers:->
+
     (watcher.stop() for own path, watcher of @watchers)
     @watchers = {}

+
   stopWatching:(pathToStop)->
+
     for own path, watcher of @watchers  when (path.indexOf pathToStop) is 0
       watcher.stop()
       delete @watchers[path]

+
   # Basics
   #
-
   cleanup:->
+
     @treeController.removeAllNodes()
     FSHelper.resetRegistry()
     @stopAllWatchers()


rollbar: log vm turn on failures instead of sending emails

--- client/ide/filetree/itemsubviews/vmtogglebuttonview.coffee
+++ client/ide/filetree/itemsubviews/vmtogglebuttonview.coffee
@@ -26,7 +26,8 @@
         title   : "I cannot turn this machine on, please give it a few seconds."

       @toggle.setDefaultValue no
-      KD.utils.notifyAndEmailVMTurnOnFailureToSysAdmin vm, err.message
+      # KD.utils.notifyAndEmailVMTurnOnFailureToSysAdmin vm, err.message
+      KD.logToExternal "oskite: vm failed to turn on since #{err.message}", {vm}
       return warn err

     if info.state is "RUNNING"


Remove jquery form reset

Remove jquery form reset

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


Removed protocol from userAvatar

Removed protocol from userAvatar

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 FavouriteTopicButtonView

Add FavouriteTopicButtonView

error: pathspec 'core/app/backbone/views/channels/favourite_topic_button_view.coffee' did not match any file(s) known to git

--- core/app/backbone/views/channels/favourite_topic_button_view.coffee
+++ core/app/backbone/views/channels/favourite_topic_button_view.coffee
@@ -0,0 +1,22 @@
+class window.FavouriteTopicButtonView extends ActionButtonView
+  mini: true
+
+  onRender: -> @updateButton()
+
+  initialize: ->
+    @bindTo @model, 'change', @updateButton, @
+    @user = currentUser
+
+  templateHelpers: =>
+    disabled_label: Factlink.Global.t.follow.capitalize()
+    disable_label:  Factlink.Global.t.unfollow.capitalize()
+    enabled_label:  Factlink.Global.t.following.capitalize()
+
+  buttonEnabled: ->
+    @user.favourite_topics.contains @model
+
+  primaryAction: (e) ->
+    @model.favourite()
+
+  secondaryAction: (e) ->
+    @model.unfavourite()


going to use i18ext cookies after all

going to use i18ext cookies after all

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


#357: accessdate now includes timezone info

error: pathspec 'resource/translators/Better' did not match any file(s) known to git
error: pathspec 'BibTeX.coffee' did not match any file(s) known to git


adicionando customização do tooltip

adicionando customização do tooltip

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/AppCivico/votolegal-www.git/'


Debug variable coloration

Debug variable coloration

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/Morgan9195/language-script.git/'


initial boot.coffee - commit.

initial boot.coffee - commit.

boot.coffee to boot or load required JavaScript, written in CoffeeScript.
http://coffeescript.org/

error: pathspec 'code/github/recipes/assets/script/coffee/boot.coffee' did not match any file(s) known to git

--- code/github/recipes/assets/script/coffee/boot.coffee
+++ code/github/recipes/assets/script/coffee/boot.coffee
@@ -0,0 +1 @@
+# BOOT CoffeeScript


Added vendor_id to test snapshot params

Added vendor_id to test snapshot params


Teams: Stacks: Disable autocomplete in stacks editor.

--- client/admin/lib/views/stacks/editors/basestackeditorview.coffee
+++ client/admin/lib/views/stacks/editors/basestackeditorview.coffee
@@ -40,6 +40,7 @@
       ace.setTheme 'github', no
       ace.setTabSize 2, no
       ace.setShowPrintMargin no, no
+      ace.setEnableAutocomplete no, no

       kd.utils.defer =>
         @getEditorSession().setScrollTop 0


re-impl toProperty as lazy

re-impl toProperty as lazy

--- src/Bacon.coffee
+++ src/Bacon.coffee
@@ -758,9 +758,38 @@
     left = this
     withDescription(left, "merge", right, Bacon.mergeAll(this, right))

-  toProperty: (initValue) ->
-    initValue = None if arguments.length == 0
-    withDescription(this, "toProperty", initValue, @scan(initValue, latter))
+  toProperty: (initValue_) ->
+    initValue = if arguments.length == 0 then None else toOption(-> initValue_)
+    disp = @dispatcher
+    new Property(describe(this, "toProperty", initValue),
+      (sink) ->
+        initSent = false
+        unsub = nop
+        reply = Bacon.more
+        sendInit = ->
+          unless initSent
+            initValue.forEach (value) ->
+              initSent = true
+              reply = sink (new Initial(value))
+              if reply == Bacon.noMore
+                unsub()
+                unsub = nop
+        unsub = disp.subscribe (event) ->
+          if event.hasValue()
+            if (initSent and event.isInitial())
+              Bacon.more
+            else
+              sendInit() unless event.isInitial()
+              initSent = true
+              initValue = new Some(event.value)
+              sink event
+          else
+            if event.isEnd()
+              reply = sendInit()
+            sink event unless reply == Bacon.noMore
+        sendInit()
+        unsub
+    )

   toEventStream: -> this