Move Queue over from alac.js

Move Queue over from alac.js

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

--- src/misc/queue.coffee
+++ src/misc/queue.coffee
@@ -0,0 +1,77 @@
+class Queue
+    constructor: (@name) ->
+        @highwaterMark = 256
+        @lowwaterMark = 64
+
+        @finished = false
+        @buffering = true
+
+        @onHighwaterMark = null
+        @onLowwaterMark = null
+
+        @buffers = []
+
+        @inputs = {
+            contents:
+                send: (buffer) => this.enqueueBuffer(buffer)
+                mode: "Passive"
+
+        }
+
+        @outputs = {
+            contents:
+                receive: () => this.dequeueBuffer()
+                mode: "Pull"
+
+        }
+
+        this.reset()
+
+    enqueueBuffer: (buffer) ->
+        @buffers.push(buffer)
+
+        console.log(@buffers.length) if @buffers.length % 64 == 0
+
+        if @buffering
+            if @buffers.length >= @highwaterMark || buffer.final
+                @onHighwaterMark(@buffers.length) if @onHighwaterMark
+
+                @buffering = false
+
+
+        return this
+
+    dequeueBuffer: () ->
+        result = @buffers.shift()
+
+        unless @buffering
+            if @buffers.length < @lowwaterMark
+                @onLowwaterMark(@buffers.length) if @onLowwaterMark
+
+
+        return result
+
+    start: () ->
+        @status = "Started"
+
+        return this
+
+    pause: () ->
+        @status = "Paused"
+
+        return this
+
+    reset: () ->
+        @status = "Paused"
+
+        return this
+
+    finished: () ->
+        @status = "Finished"
+
+        return this
+
+
+window.Aurora = {} unless window.Aurora
+
+window.Aurora.Queue = Queue


add stfuwsc

add stfuwsc

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/tachikomapocket/Tomohiro-_-Tomochan.git/'


New CoffeeScript example

New CoffeeScript example

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

--- coffeescript/types_and_type_errors.coffee
+++ coffeescript/types_and_type_errors.coffee
@@ -0,0 +1,7 @@
+assert = require 'assert'
+assert 4.toFixed(2) is '4.00'
+assert true.toString() is 'true'
+assert 'abcde'.length is 5
+assert [5,3,9,4,6].indexOf(3) is 1
+assert.throws((-> null.toString()), TypeError)
+assert.throws((-> undefined.toString()), TypeError)


fix(build):zeroclipboard path fix

fix(build):zeroclipboard path fix

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


testing orchestrator url

testing orchestrator url

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


event upload interval is back to 5 seconds

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


Hotfix for CLA submissions permissions

Hotfix for CLA submissions permissions

--- server/routes/db.coffee
+++ server/routes/db.coffee
@@ -6,6 +6,7 @@
 module.exports.setup = (app) ->
   # This is hacky and should probably get moved somewhere else, I dunno
   app.get '/db/cla.submissions', (req, res) ->
+    return errors.unauthorized(res, "You must be an admin to view that information") unless req.user?.isAdmin()
     res.setHeader('Content-Type', 'application/json')
     collection = mongoose.connection.db.collection 'cla.submissions', (err, collection) ->
       return log.error "Couldn't fetch CLA submissions because #{err}" if err


Dhcp server management library.

Dhcp server management library.

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

--- lib/dhcp.coffee
+++ lib/dhcp.coffee
@@ -0,0 +1,141 @@
+parse = require './parse.coffee'
+command = require './command.coffee'
+
+###
+	* Lists available dhcp servers.
+	*
+	* @param {function(?err, result)} callback
+###
+exports.list_servers = (callback) ->
+	command.exec 'list', 'dhcpservers', (err, code, output) ->
+		return callback err if err
+		return callback new Error "cannot list dhcp servers" if code > 0
+		return callback null, parse.linebreak_list(output) if callback
+
+###
+	* Adds hostonly dhcp server. The server is not enables by default.
+	*
+	* @param {string} network
+	* @param {string} ip
+	* @param {string} netmask
+	* @param {function(?err)} callback
+###
+exports.add_hostonly_server = (network, ip, netmask, callback) ->
+	command.exec 'dhcpserver', 'add', '--ifname', network, '--ip', ip, '--netmask', netmask, (err, code, output) ->
+		return callback err if err
+		return callback new Error "cannot add hostonly dhcp server on #{network}" if code > 0
+		return do callback if callback
+
+###
+	* Removes hostonly dhcp server.
+	*
+	* @param {string} network
+	* @param {function(?err)} callback
+###
+exports.remove_hostonly_server = (network, callback) ->
+	command.exec 'dhcpserver', 'remove', '--ifname', network, (err, code, output) ->
+		return callback err if err
+		return callback new Error "cannot remove hostonly dhcp server on #{network}" if code > 0
+		return do callback if callback
+
+###
+	* Modifies hostonly dhcp server
+	*
+	* @param {string} network
+	* @param {string} ip
+	* @param {string} netmask
+	* @param {function(?err)} callback
+###
+exports.modify_hostonly_server = (network, ip, netmask, callback) ->
+	command.exec 'dhcpserver', 'modify', '--ifname', network, '--ip', ip, '--netmask', netmask, (err, code, output) ->
+		return callback err if err
+		return callback new Error "cannot modify hostonly dhcp server on #{network}" if code > 0
+		return do callback if callback
+
+###
+	* Enables hostonly dhcp server.
+	*
+	* @param {string} network
+	* @param {function(?err)} callback
+###
+exports.enable_hostonly_server = (network, enable, callback) ->
+	command.exec 'dhcpserver', 'modify', '--ifname', network, '--enable', (err, code, output) ->
+		return callback err if err
+		return callback new Error "cannot enable hostonly dhcp server on #{network}" if code > 0
+		return do callback if callback
+
+###
+	* Disables hostonly dhcp server.
+	*
+	* @param {string} network
+	* @param {function(?err)} callback
+###
+exports.disable_hostonly_server = (network, enable, callback) ->
+	command.exec 'dhcpserver', 'modify', '--ifname', network, '--disable', (err, code, output) ->
+		return callback err if err
+		return callback new Error "cannot disable hostonly dhcp server on #{network}" if code > 0
+		return do callback if callback
+
+###
+	* Adds internal dhcp server. The server is not enabled by default.
+	*
+	* @param {string} network
+	* @param {string} ip
+	* @param {string} netmask
+	* @param {function(?err)} callback
+###
+exports.add_internal_server = (network, ip, netmask, callback) ->
+	command.exec 'dhcpserver', 'add', '--netname', network, '--ip', ip, '--netmask', netmask, (err, code, output) ->
+		return callback err if err
+		return callback new Error "cannot add internal dhcp server on #{network}" if code > 0
+		return do callback if callback
+
+###
+	* Removes internal dhcp server.
+	*
+	* @param {string} network
+	* @param {function(?err)} callback
+###
+exports.remove_internal_server = (network, callback) ->
+	command.exec 'dhcpserver', 'remove', '--network', network, (err, code, output) ->
+		return callback err if err
+		return callback new Error "cannot remove internal dhcp server on #{network}" if code > 0
+		return do callback if callback
+
+###
+	* Modifies internal dhcp server.
+	*
+	* @param {string} network
+	* @param {string} ip
+	* @param {string} netmask
+	* @param {function(?err)} callback
+###
+exports.modify_internal_server = (network, ip, netmask, callback) ->
+	command.exec 'dhcpserver', 'modify', '--ifname', network, '--ip', ip, '--netmask', netmask, (err, code, output) ->
+		return callback err if err
+		return callback new Error "cannot modify internal dhcp server on #{network}" if code > 0
+		return do callback if callback
+
+###
+	* Enables internal dhcp server.
+	*
+	* @param {string} network
+	* @param {function(?err)} callback
+###
+exports.enable_internal_server = (network, enable, callback) ->
+	command.exec 'dhcpserver', 'modify', '--network', network, '--enable', (err, code, output) ->
+		return callback err if err
+		return callback new Error "cannot enable internal dhcp server on #{network}" if code > 0
+		return do callback if callback
+
+###
+	* Disables internal dhcp server.
+	*
+	* @param {string} network
+	* @param {function(?err)} callback
+###
+exports.disable_internal_server = (network, enable, callback) ->
+	command.exec 'dhcpserver', 'modify', '--network', network, '--disable', (err, code, output) ->
+		return callback err if err
+		return callback new Error "cannot disable internal dhcp server on #{network}" if code > 0
+		return do callback if callback


Remove log lines

Remove log lines

--- spec/editor-spec.coffee
+++ spec/editor-spec.coffee
@@ -140,7 +140,6 @@
       expect(editor.lineElementForScreenRow(40).text()).toBe "hello3"

       editor.edit(editSession)
-      console.log editor.scrollTop(), editSession.getCursorScreenPosition()
       { firstRenderedScreenRow, lastRenderedScreenRow } = editor
       expect(editor.lineElementForScreenRow(firstRenderedScreenRow).text()).toBe buffer.lineForRow(firstRenderedScreenRow)
       expect(editor.lineElementForScreenRow(lastRenderedScreenRow).text()).toBe buffer.lineForRow(editor.lastRenderedScreenRow)
@@ -917,7 +916,6 @@
           expect(editor.getCursorView().position()).toEqual {top: 3 * editor.lineHeight, left: 178}
           editor.setCursorBufferPosition([3, Infinity])
           expect(editor.getCursorView().position()).toEqual {top: 3 * editor.lineHeight, left: 353}
-          console.log Editor.CHARACTER_WIDTH_CACHE

       describe "autoscrolling", ->


Fix spec

Fix spec

--- spec/editor-spec.coffee
+++ spec/editor-spec.coffee
@@ -2857,7 +2857,7 @@

             atom.config.set("editor.autoIndent", false)
             editor.indent()
-            expect(editor.lineForBufferRow(2)).toBe "   "
+            expect(editor.lineForBufferRow(2)).toBe "  "

       describe "when editor.autoIndent is true", ->
         beforeEach ->


Clear menu template to avoid separator duplication

--- spec/spec-helper.coffee
+++ spec/spec-helper.coffee
@@ -111,6 +111,7 @@
   keymap.bindingSets = bindingSetsToRestore
   keymap.bindingSetsByFirstKeystroke = bindingSetsByFirstKeystrokeToRestore
   atom.deactivatePackages()
+  atom.menu.template = []

   window.rootView?.remove?()
   atom.rootView?.remove?() if atom.rootView isnt window.rootView


Added Intervention datatype

Added Intervention datatype

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

--- app/assets/javascripts/datatypes/intervention.js.coffee
+++ app/assets/javascripts/datatypes/intervention.js.coffee
@@ -0,0 +1,190 @@
+###
+@namespace scoping into the CQL_QDM namespace
+###
+@CQL_QDM ||= {}
+
+
+###
+Data elements that meet criteria using this datatype should document an
+unexpected or dangerous reaction to the intervention indicated by the QDM
+category and its corresponding value set.
+###
+class CQL_QDM.InterventionAdverseEvent
+  constructor: (@entry) ->
+    @_reaction = @entry.reaction
+    @_startDatetime = @entry.start_time
+    @_stopDatetime = @entry.end_time
+
+  ###
+  @returns {Code}
+  ###
+  reaction: ->
+    cql.Code(@_reaction.code, @_reaction.code_system)
+
+  ###
+  @returns {Date}
+  ###
+  startDatetime: ->
+    cql.DateTime.fromDate(moment.utc(@_startDatetime, 'X').toDate())
+
+  ###
+  @returns {Date}
+  ###
+  stopDatetime: ->
+    cql.DateTime.fromDate(moment.utc(@_stopDatetime, 'X').toDate())
+
+
+###
+Data elements that meet criteria using this datatype should document a reaction
+in specific patients representing a low threshold to the normal reported or
+expected reactions of intervention indicated by the QDM category and its
+corresponding value set.
+###
+class CQL_QDM.InterventionIntolerance
+  constructor: (@entry) ->
+    @_reaction = @entry.reaction
+    @_startDatetime = @entry.start_time
+    @_stopDatetime = @entry.end_time
+
+  ###
+  @returns {Code}
+  ###
+  reaction: ->
+    cql.Code(@_reaction.code, @_reaction.code_system)
+
+  ###
+  @returns {Date}
+  ###
+  startDatetime: ->
+    cql.DateTime.fromDate(moment.utc(@_startDatetime, 'X').toDate())
+
+  ###
+  @returns {Date}
+  ###
+  stopDatetime: ->
+    cql.DateTime.fromDate(moment.utc(@_stopDatetime, 'X').toDate())
+
+
+###
+Data elements that meet criteria using this datatype should document a request
+to perform the intervention indicated by the QDM category and its corresponding
+value set.
+###
+class CQL_QDM.InterventionOrder
+  constructor: (@entry) ->
+    @_negationRationale = @entry.negationRationale
+    @_reason = @entry.reason
+    @_startDatetime = @entry.start_time
+    @_stopDatetime = @entry.end_time
+
+  ###
+  @returns {Code}
+  ###
+  negationRationale: ->
+    cql.Code(@_negationRationale.code, @_negationRationale.code_system)
+
+  ###
+  @returns {Code}
+  ###
+  reason: ->
+    cql.Code(@_reason.code, @_reason.code_system)
+
+  ###
+  @returns {Date}
+  ###
+  startDatetime: ->
+    cql.DateTime.fromDate(moment.utc(@_startDatetime, 'X').toDate())
+
+  ###
+  @returns {Date}
+  ###
+  stopDatetime: ->
+    cql.DateTime.fromDate(moment.utc(@_stopDatetime, 'X').toDate())
+
+
+###
+Data elements that meet criteria using this datatype should document the
+completion of the intervention indicated by the QDM category and its
+corresponding value set.
+###
+class CQL_QDM.InterventionPerformed
+  constructor: (@entry) ->
+    @_negationRationale = @entry.negationRationale
+    @_reason = @entry.reason
+    @_result = @entry.result
+    @_startDatetime = @entry.start_time
+    @_status = @entry.status
+    @_stopDatetime = @entry.end_time
+
+  ###
+  @returns {Code}
+  ###
+  negationRationale: ->
+    cql.Code(@_negationRationale.code, @_negationRationale.code_system)
+
+  ###
+  @returns {Code}
+  ###
+  reason: ->
+    cql.Code(@_reason.code, @_reason.code_system)
+
+  ###
+  @returns {Code}
+  ###
+  result: ->
+    cql.Code(@_result.code, @_result.code_system)
+
+  ###
+  @returns {Date}
+  ###
+  startDatetime: ->
+    cql.DateTime.fromDate(moment.utc(@_startDatetime, 'X').toDate())
+
+  ###
+  @returns {Code}
+  ###
+  status: ->
+    cql.Code(@_status.code, @_status.code_system)
+
+  ###
+  @returns {Date}
+  ###
+  stopDatetime: ->
+    cql.DateTime.fromDate(moment.utc(@_stopDatetime, 'X').toDate())
+
+
+###
+Data elements that meet criteria using this datatype should document a
+recommendation for the intervention indicated by the QDM category and its
+corresponding value set.
+###
+class CQL_QDM.InterventionRecommended
+  constructor: (@entry) ->
+    @_negationRationale = @entry.negationRationale
+    @_reason = @entry.reason
+    @_startDatetime = @entry.start_time
+    @_stopDatetime = @entry.end_time
+
+  ###
+  @returns {Code}
+  ###
+  negationRationale: ->
+    cql.Code(@_negationRationale.code, @_negationRationale.code_system)
+
+  ###
+  @returns {Code}
+  ###
+  reason: ->
+    cql.Code(@_reason.code, @_reason.code_system)
+
+  ###
+  @returns {Date}
+  ###
+  startDatetime: ->
+    cql.DateTime.fromDate(moment.utc(@_startDatetime, 'X').toDate())
+
+  ###
+  @returns {Date}
+  ###
+  stopDatetime: ->
+    cql.DateTime.fromDate(moment.utc(@_stopDatetime, 'X').toDate())


:lipstick:

:lipstick:

--- src/coffee-cache.coffee
+++ src/coffee-cache.coffee
@@ -20,9 +20,8 @@

 convertFilePath = (filePath) ->
   if process.platform is 'win32'
-    encodeURI '/' + path.resolve(filePath).replace(/\\/g, '/')
-  else
-    encodeURI filePath
+    filePath = "/#{path.resolve(filePath).replace(/\\/g, '/')}"
+  encodeURI(filePath)

 compileCoffeeScript = (coffee, filePath, cachePath) ->
   {js, v3SourceMap} = CoffeeScript.compile(coffee, filename: filePath, sourceMap: true)


Add KDView tests

Add KDView tests

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

--- test/core/view.coffee
+++ test/core/view.coffee
@@ -0,0 +1,121 @@
+should = require 'should'
+sinon = require 'sinon'
+shouldSinon = require 'should-sinon'
+KDView = require '../../lib/core/view'
+
+
+describe 'KDView', ->
+  beforeEach ->
+    @sinon = sinon.sandbox.create()
+    @events = {
+      preventDefault: sinon.spy
+      stopPropagation: sinon.spy
+    }
+    @view = new KDView
+
+  afterEach ->
+    @sinon.restore()
+
+  describe 'scroll', ->
+    it 'should return true', ->
+      @view.scroll().should.equal yes
+
+  describe 'load', ->
+    it 'should return true', ->
+      @view.load().should.equal yes
+
+  describe 'error', ->
+    it 'should return true', ->
+      @view.error().should.equal yes
+
+  describe 'keyUp', ->
+    it 'should return true', ->
+      @view.keyUp().should.equal yes
+
+  describe 'keyDown', ->
+    it 'should return true', ->
+      @view.keyDown().should.equal yes
+
+  describe 'keyPress', ->
+    it 'should return true', ->
+      @view.keyPress().should.equal yes
+
+  describe 'dblClick', ->
+    it 'should return true', ->
+      @view.dblClick().should.equal yes
+
+  describe 'click', ->
+    it 'should return true', ->
+      @view.click().should.equal yes
+
+  describe 'contextMenu', ->
+    it 'should return true', ->
+      @view.contextMenu().should.equal yes
+
+  describe 'mouseMove', ->
+    it 'should return true', ->
+      @view.mouseMove().should.equal yes
+
+  describe 'mouseEnter', ->
+    it 'should return true', ->
+      @view.mouseEnter().should.equal yes
+
+  describe 'mouseLeave', ->
+    it 'should return true', ->
+      @view.mouseLeave().should.equal yes
+
+  describe 'mouseUp', ->
+    it 'should return true', ->
+      @view.mouseUp().should.equal yes
+
+  describe 'mouseOver', ->
+    it 'should return true', ->
+      @view.mouseOver().should.equal yes
+
+  describe 'mouseWheel', ->
+    it 'should return true', ->
+      @view.mouseWheel().should.equal yes
+
+  describe 'mouseDown', ->
+    it 'should return true', ->
+      @view.unsetKeyView = @sinon.stub()
+      @view.mouseDown().should.equal yes
+      @view.unsetKeyView.should.be.calledOnce
+
+  describe 'paste', ->
+    it 'should return true', ->
+      @view.paste().should.equal yes
+
+  describe 'dragEnter', ->
+    it 'should stop event', ->
+      @view.dragEnter(@events)
+      @events.stopPropagation.should.be.calledOnce
+      @events.preventDefault.should.be.calledOnce
+
+  describe 'dragOver', ->
+    it 'should stop event', ->
+      @view.dragOver(@events)
+      @events.stopPropagation.should.be.calledOnce
+      @events.preventDefault.should.be.calledOnce
+
+  describe 'dragLeave', ->
+    it 'should stop event', ->
+      @view.dragLeave(@events)
+      @events.stopPropagation.should.be.calledOnce
+      @events.preventDefault.should.be.calledOnce
+
+  describe 'dragEnd', ->
+    it 'should stop event', ->
+      @view.dragEnd(@events)
+      @events.stopPropagation.should.be.calledOnce
+      @events.preventDefault.should.be.calledOnce
+
+  describe 'drop', ->
+    it 'should stop event', ->
+      @view.drop(@events)
+      @events.stopPropagation.should.be.calledOnce
+      @events.preventDefault.should.be.calledOnce
+
+  describe 'submit', ->
+    it 'should return false', ->
+      @view.submit().should.equal no


added test for .innerHTML setter

added test for .innerHTML setter

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

--- test/innerHTML.coffee
+++ test/innerHTML.coffee
@@ -0,0 +1,5 @@
+document = require("../dom").createDocument()
+
+document.body.innerHTML = "

"
+
+console.log document.toString(true, true)


Add turtle SVG

Add turtle SVG

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


add command enlarge and shrink

add command enlarge and shrink

--- src/pane-element.coffee
+++ src/pane-element.coffee
@@ -158,5 +158,7 @@
   'pane:split-down': -> @getModel().splitDown(copyActiveItem: true)
   'pane:close': -> @getModel().close()
   'pane:close-other-items': -> @getModel().destroyInactiveItems()
+  'pane:enlarge': -> @getModel().setFlexScale(@getModel().getFlexScale() * 1.1)
+  'pane:shrink': -> @getModel().setFlexScale(@getModel().getFlexScale() / 1.1)

 module.exports = PaneElement = document.registerElement 'atom-pane', prototype: PaneElement.prototype


MIL-291: Consolidate logic from controller() to link() function

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/crdschurch/crds-angular-ajax-form.git/'


Italian Translate

Italian Translate

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

--- pivot.it.coffee
+++ pivot.it.coffee
@@ -0,0 +1,57 @@
+callWithJQuery = (pivotModule) ->
+  if typeof exports is "object" and typeof module is "object" # CommonJS
+    pivotModule require("jquery")
+  else if typeof define is "function" and define.amd # AMD
+    define ["jquery"], pivotModule
+# Plain browser env
+  else
+    pivotModule jQuery
+
+callWithJQuery ($) ->
+  nf = $.pivotUtilities.numberFormat
+  tpl = $.pivotUtilities.aggregatorTemplates
+
+  frFmt =    nf(thousandsSep: " ", decimalSep: ",")
+  frFmtInt = nf(digitsAfterDecimal: 0, thousandsSep: " ", decimalSep: ",")
+  frFmtPct = nf(digitsAfterDecimal: 1, scaler: 100, suffix: "%", thousandsSep: " ", decimalSep: ",")
+
+  $.pivotUtilities.locales.fr =
+    localeStrings:
+      renderError: "Si è verificato un errore durante la creazione della tabella."
+      computeError: "Si è verificato un errore di calcolo nella tabella."
+      uiRenderError: "Si è verificato un errore durante il disegno di interfaccia della tabella pivot."
+      selectAll: "Seleziona tutto"
+      selectNone: "Deseleziona tutto"
+      tooMany: "(troppi valori da visualizzare)"
+      filterResults: "Filtra i valori"
+      totals: "Totali"
+      vs: "su"
+      by: "da"
+
+    aggregators:
+      "Numero":                             tpl.count(frFmtInt)
+      "Numero di valori unici":             tpl.countUnique(frFmtInt)
+      "Elenco di valori unici":             tpl.listUnique(", ")
+      "Somma":                              tpl.sum(frFmt)
+      "Somma intera":                       tpl.sum(frFmtInt)
+      "Media":                              tpl.average(frFmt)
+      "Minimo":                             tpl.min(frFmt)
+      "Massimo":                            tpl.max(frFmt)
+      "Rapporto":                           tpl.sumOverSum(frFmt)
+      "Limite superiore 80%":               tpl.sumOverSumBound80(true, frFmt)
+      "limite inferiore 80%":               tpl.sumOverSumBound80(false, frFmt)
+      "Somma proporzionale al totale":      tpl.fractionOf(tpl.sum(),   "total", frFmtPct)
+      "Somma proporzionale alla riga":      tpl.fractionOf(tpl.sum(),   "row",   frFmtPct)
+      "Somma proporzionale alla colonna":   tpl.fractionOf(tpl.sum(),   "col",   frFmtPct)
+      "Numero proporzionale al totale":     tpl.fractionOf(tpl.count(), "total", frFmtPct)
+      "Numero proporzionale alla riga":     tpl.fractionOf(tpl.count(), "row",   frFmtPct)
+      "Numero proporzionale alla colonna":  tpl.fractionOf(tpl.count(), "col",   frFmtPct)
+
+    renderers:
+      "Tabella":                           $.pivotUtilities.renderers["Table"]
+      "Tabella con grafico":               $.pivotUtilities.renderers["Table Barchart"]
+      "Mappa di calore":                   $.pivotUtilities.renderers["Heatmap"]
+      "Mappa di calore per righe":         $.pivotUtilities.renderers["Row Heatmap"]
+      "Mappa di calore per colonne":       $.pivotUtilities.renderers["Col Heatmap"]
+
+


Don't capture space-key events when typing, to allow using space characters in the search

--- assets/javascripts/app/shortcuts.coffee
+++ assets/javascripts/app/shortcuts.coffee
@@ -47,8 +47,9 @@
       when 27
         @trigger 'escape'
       when 32
-        @trigger 'pageDown'
-        false
+        if not @lastKeypress or @lastKeypress < Date.now() - 1000
+          @trigger 'pageDown'
+          false
       when 33
         @trigger 'pageUp'
       when 34
@@ -127,3 +128,5 @@
     if event.which is 63 and not event.target.value
       @trigger 'help'
       false
+    else
+      @lastKeypress = Date.now()


Fix stash error

Fix stash 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/aki77/atomatigit.git/'


Bug fix

Bug fix

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


Fixed bug where daily reports were not being generated to the correct channel

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

--- src/scripts/payroll.coffee
+++ src/scripts/payroll.coffee
@@ -0,0 +1,114 @@
+# Description:
+#   Your dog friend is running tasks on a schedule
+#
+# Commands:
+#
+# Notes:
+#
+# Author:
+#   aaronsky
+
+moment = require 'moment'
+schedule = require 'node-schedule'
+
+module.exports = (robot) ->
+  HEADERS = require('../helpers/constants').HEADERS
+  Logger = require('../helpers/logger')(robot)
+  Organization = require('../models/organization').get()
+  # Weeks ‘start’ on Sunday morning.
+
+  dailyReport = (reports) ->
+    PAYROLL = HEADERS.payrollreports
+    response = "DAILY WORK LOG: #{yesterday.format('dddd MMMM D YYYY').toUpperCase()}\n"
+    logBuffer = ''
+    offBuffer = ''
+
+    for report in reports
+      recorded = false
+      if report[PAYROLL.logged] > 0
+        status = "#{report.extra.slack}:\t#{report[PAYROLL.logged]} hours"
+        notes = report.extra.notes?.replace('\n', '; ')
+        if notes
+          status += " \"#{notes}\""
+        projectStr = ''
+        if report.extra.projects? and report.extra.projects?.length > 0
+          for project in report.extra.projects
+            projectStr += "##{project.name} "
+        if projectStr
+          projectStr = projectStr.trim()
+          status += " #{projectStr}"
+        status += "\n"
+        logBuffer += "#{status}"
+        recorded = true
+      if report[PAYROLL.vacation] > 0
+        offBuffer += "#{report.extra.slack}:\t#{report[PAYROLL.vacation]} hours unpaid"
+        recorded = true
+      if report[PAYROLL.sick] > 0
+        offBuffer += "#{report.extra.slack}:\t#{report[PAYROLL.sick]} hours unpaid"
+        recorded = true
+      if report[PAYROLL.unpaid] > 0
+        offBuffer += "#{report.extra.slack}:\t#{report[PAYROLL.unpaid]} hours unpaid"
+        recorded = true
+      if not recorded
+        offBuffer += "#{report.extra.slack}:\t0 hours\n"
+    response += logBuffer
+    if offBuffer.length > 0
+      response += "DAILY OFF-TIME LOG: #{yesterday.format('dddd MMMM D YYYY').toUpperCase()}\n"
+      response += offBuffer
+    return response
+
+  generateDailyReportJob = schedule.scheduleJob '0 6 * * *', ->
+    if not Organization.ready()
+      Logger.warn "Don\'t make scheduled daily report,
+                  Organization isn\'t ready yet"
+      return
+    today = moment({hour: 0, minute: 0, second: 0})
+    yesterday = moment(today).subtract(1, 'days')
+    Organization.generateReport(yesterday, today)
+      .catch((err) ->
+        Logger.errorToSlack "Failed to produce a daily report", err
+      )
+      .done(
+        (reports) ->
+          numberDone = reports.length
+          report = dailyReport reports
+          Logger.logToChannel report,
+                              'bizness-time'
+          Logger.logToChannel "Daily report generated for
+                               #{numberDone} employees",
+                              'ibizan-diagnostics'
+      )
+
+
+  # Ibizan will export a Payroll Report every other Sunday night.
+  generatePayrollReportJob = schedule.scheduleJob '0 17 * * 0', ->
+    if not Organization.ready()
+      Logger.warn "Don\'t make scheduled payroll report,
+                  Organization isn\'t ready yet"
+      return
+    twoWeeksAgo = moment().subtract(2, 'weeks')
+    today = moment()
+    Organization.generateReport(twoWeeksAgo, today, true)
+      .catch((err) ->
+        Logger.errorToSlack "Failed to produce a salary report", err
+      )
+      .done(
+        (reports) ->
+          numberDone = reports.length
+          Logger.logToChannel "Salary report generated for
+                               #{numberDone} employees",
+                              'ibizan-diagnostics'
+      )
+
+  # Users should receive a DM “chime” every other Friday afternoon to
+  # inform them that payroll runs on Monday, and that unaccounted-for
+  # time will not be paid.
+  reminderJob = schedule.scheduleJob '0 13 * * 5', ->
+    if not Organization.ready()
+      Logger.warn "Don\'t run scheduled payroll reminder,
+                  Organization isn\'t ready yet"
+      return
+    for user in Organization.users
+      user.directMessage "As a reminder, payroll will run on Monday.
+                          Unrecorded time will not be paid.",
+                         Logger


add array copy function

add array copy function

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


ensure mixpanel.register is defined

ensure mixpanel.register is defined

--- lib/analytics.coffee
+++ lib/analytics.coffee
@@ -63,7 +63,7 @@
   userType = if sd.CURRENT_USER then "Logged In" else "Logged Out"

   ga?('set', 'dimension1', userType)
-  mixpanel?.register "User Type": userType
+  mixpanel?.register?("User Type": userType)
   snowplow?('setUserId', sd.CURRENT_USER?.id) if sd.CURRENT_USER?

 # This basically just sets some defaults loosely based on the


Adding missing file

Adding missing file

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

--- lib/validator.coffee
+++ lib/validator.coffee
@@ -0,0 +1,183 @@
+uuid = require "node-uuid"
+clone = require "clone"
+
+class Validator
+    constructor: (scopes = {}) ->
+        @scopes = {}
+        @scopes[scopeName] = @createScope scopeOpts for scopeName, scopeOpts of scopes
+
+    validate: (scope, x = {}) ->
+        schema = @scopes[scope]?.val
+        if !schema then throw new Error "Unknown scope"
+
+        if schema.pre then schema.pre x, scope, @
+
+        # Process the values that are there
+        rv = if schema.defaults then clone(schema.defaults) else {}
+        for name, val of x when val != undefined
+            verifier = schema.fields[name] || schema.fields.__default__
+            t = verifier.call verifier, name, val
+            if t != undefined then rv[name] = t
+
+        # Ensure we got everybody
+        for name in schema.req
+            if !rv[name]? then throw new Error "Missing required field: #{name}"
+
+        if schema.post then schema.post rv, scope, @
+
+        return rv
+
+    generate: (scope, x = {}) ->
+        schema = @scopes[scope]?.gen
+        if !schema then throw new Error "Unknown scope"
+
+        if schema.pre then schema.pre x, scope, @
+
+        # Process the values that are there
+        rv = if schema.defaults then clone(schema.defaults) else {}
+        for name, val of x when val != undefined
+            generator = schema.fields[name] || schema.fields.__default__
+            t = generator.call generator, name, val
+            if t != undefined then rv[name] = t
+
+        # Ensure we got everybody
+        for name in schema.gen
+            if !rv[name]? then rv[name] = (schema.fields[name] || schema.fields.__default__).type.generate()
+        for name in schema.req
+            if !rv[name]? then throw new Error "Missing required field: #{name}"
+
+        if schema.post then schema.post rv, scope, @
+
+        return rv
+
+    createScope: (scopeOpts = {}) ->
+        return {
+            val: @createScopePart scopeOpts, scopeOpts.val
+            gen: @createScopePart scopeOpts, scopeOpts.val, true
+        }
+
+    createScopePart: (scopeOpts, partOpts = {}, useExport) ->
+        rv =
+            defaults: partOpts.defaults || scopeOpts.defaults # Default values - true/req, gen (required+generate), opt (optional), never
+            pre: partOpts.pre || scopeOpts.pre # Pre-processing funciton
+            post: partOpts.post || scopeOpts.post # Post-processing funciton
+            req: []
+            gen: []
+            fields: {}
+
+        for name, type of partOpts.fields || scopeOpts.fields || {}
+            req = partOpts.req?[name] || scopeOpts.req?[name]
+            if req == "never" then rv.fields[name] = @generateValidatorFunction name, "never"
+            else
+                if req == true || req == "req" || req == "gen" then rv.req.push name
+                allowed = partOpts.allowedValues?[name] || scopeOpts.allowedValues?[name]
+                disallowed = partOpts.disallowedValues?[name] || scopeOpts.disallowedValues?[name]
+                rv.fields[name] = @generateValidatorFunction name, type, allowed, disallowed, useExport, req == true || req == "req" || req == "gen", useExport && req == "gen"
+                if req == "gen"
+                    if !rv.fields[name].type.generate then throw new Error "No generate method available for #{name}"
+                    rv.gen.push name
+
+        if !rv.fields.__default__
+            allowAny = if partOpts.allowAny? then partOpts.allowAny else scopeOpts.allowAny
+            rv.fields.__default__ = @generateValidatorFunction "__default__", if allowAny then "any" else "never"
+
+        return rv
+
+    generateValidatorFunction: (name, type, allowed, disallowed, useExport) ->
+        if typeof type == "string"
+            type = Validator.Types[type] || Validator.Types[Validator.DefaultType[name]]
+
+        if !type then throw new Error "Unable to locate type for #{name}"
+
+        t = ""
+        if type.verify then t += "if (!this.type.verify(val)) throw new Error('Illegal value for '+name);"
+
+        if useExport
+            if type.export then t += "val = this.type.export(val);"
+        else
+            if type.parse then t += "val = this.type.parse(val);"
+
+        t += "if (val === null || val === undefined) return val;"
+
+        if allowed
+            switch
+                when allowed instanceof RegExp
+                    check = "this.allowed.test(val)"
+                when typeof allowed == "function"
+                    check = "this.allowed(val)"
+                when Array.isArray allowed
+                    check = "this.allowed.indexOf(val) >= 0"
+                else
+                    check = "val === this.allowed"
+
+            t += "if (!(#{check})) throw new Error('Not an allowed value for '+name);"
+
+        if disallowed
+            switch
+                when disallowed instanceof RegExp
+                    check = "this.disallowed.test(val)"
+                when typeof disallowed == "function"
+                    check = "this.disallowed(val)"
+                when Array.isArray disallowed
+                    check = "this.disallowed.indexOf(val) >= 0"
+                else
+                    check = "val === this.disallowed"
+
+            t += "if (#{check}) throw new Error('Disallowed value for '+name);"
+
+        t += "return val;"
+
+        rv = new Function "name", "val", t
+        rv.type = type
+        rv.allowed = allowed
+        rv.disallowed = disallowed
+
+        return rv
+
+Validator.Types =
+    "any": verify: (x) -> return true
+
+    "never": verify: (x) -> return false
+
+    "string":
+        verify: (x) -> return typeof x == "string" && x != ""
+
+    "identifier": # Generates a v1 UUID
+        verify: (x) -> return typeof x == "string" && x != ""
+        generate: () -> return uuid.v1()
+
+    "stringArray": # Exports single string values as a string - Imports single string values as an array
+        verify: (x) -> return (typeof x == "string" && x != "") || Array.isArray(x)
+        parse: (x) -> if typeof x == "string" then [x] else x
+        export: (x) -> if Array.isArray(x) && x.length == 1 then x[0] else x
+
+    "timestamp": # Supports both dates and JWT-style numeric dates (seconds from epoch)
+        verify: (x) -> return typeof x == "number" || (x instanceof Date && !isNaN(x.valueOf()))
+        parse: (x) -> if typeof(x) == "number" then new Date(x * 1000) else x
+        export: (x) -> if typeof(x) == "number" then x else (x.getTime() / 1000)
+        generate: () -> new Date
+
+    "expiration": # If parsing a number, it is a JWT-style numeric date - if exporting from a number, then it is milliseconds till expiration
+        verify: (x) -> return typeof x == "number" || (x instanceof Date && !isNaN(x.valueOf()))
+        parse: (x) -> if typeof(x) == "number" then new Date(x * 1000) else x
+        export: (x) -> if typeof(x) == "number" then ((Date.now()+x)/1000) else (x.valueOf() / 1000)
+
+Validator.DefaultType =
+    # JWT Specificaiton
+    "typ": "string"
+    "alg": "string"
+    "cty": "string"
+    "iss": "string"
+    "sub": "string"
+    "aud": "stringArray"
+    "exp": "expiration"
+    "nbf": "timestamp"
+    "iat": "timestamp"
+    "jti": "identifier"
+    # OIDC 1.0 Core Section 2
+    "auth_time": "timestamp"
+    "acr": "stringArray"
+    "amr": "stringArray"
+    "azp": "string"
+
+module.exports = Validator


Dummy/Debug entrypoint at the moment.

Dummy/Debug entrypoint at the moment.

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

--- src/main.coffee
+++ src/main.coffee
@@ -0,0 +1,8 @@
+window.recipes = new Recipes(recipes)
+window.tags = new Tags(tags)
+window.tagbar = new TagBarView(tags)
+window.tag = new TagView
+
+tagbar.render()
+
+console.log tag.$el


Added  option for options with cursor

Added  option for options with cursor

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


fix:broadcast kbAlertError on general 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/keboola/kbc-ui-db-writer.git/'


Add buffer delegates for getLineCount/getTextInRange

--- src/editor.coffee
+++ src/editor.coffee
@@ -314,6 +314,12 @@
   # {Delegates to: TextBuffer.setText}
   setText: (text) -> @buffer.setText(text)

+   # {Delegates to: TextBuffer.getTextInRange}
+  getTextInRange: (range) -> @buffer.getTextInRange(range)
+
+  # {Delegates to: TextBuffer.getLineCount}
+  getLineCount: -> @buffer.getLineCount()
+
   # Private: Retrieves the current {TextBuffer}.
   getBuffer: -> @buffer


:lipstick:

:lipstick:

--- src/gutter.coffee
+++ src/gutter.coffee
@@ -138,7 +138,7 @@
   ### Internal ###

   updateLineNumbers: (changes, startScreenRow, endScreenRow) ->
-    # Check that we have something already rendered that overlaps the requested range
+    # Check if we have something already rendered that overlaps the requested range
     updateAllLines = not (startScreenRow? and endScreenRow?)
     updateAllLines |= endScreenRow <= @firstScreenRow or startScreenRow >= @lastScreenRow

@@ -151,7 +151,6 @@

     if updateAllLines
       @lineNumbers[0].innerHTML = @buildLineElementsHtml(startScreenRow, endScreenRow)
-
     else
       # When scrolling or adding/removing lines, we just add/remove lines from the ends.
       if startScreenRow < @firstScreenRow
@@ -173,24 +172,22 @@
     anchor = @lineNumbers[0].children[0]
     return appendLineElements(lineElements) unless anchor?
     @lineNumbers[0].insertBefore(lineElements[0], anchor) while lineElements.length > 0
-    null
+    null # defeat coffeescript array return

   appendLineElements: (lineElements) ->
     @lineNumbers[0].appendChild(lineElements[0]) while lineElements.length > 0
-    null
+    null # defeat coffeescript array return

   removeLineElements: (numberOfElements) ->
     children = @getLineNumberElements()

+    # children is a live NodeList, so remove from the desired end {numberOfElements} times
     if numberOfElements < 0
-      while numberOfElements
-        @lineNumbers[0].removeChild(children[children.length-1])
-        numberOfElements++
-
+      @lineNumbers[0].removeChild(children[children.length-1]) while numberOfElements++
     else if numberOfElements > 0
-      while numberOfElements
-        @lineNumbers[0].removeChild(children[0])
-        numberOfElements--
+      @lineNumbers[0].removeChild(children[0]) while numberOfElements--
+
+    null # defeat coffeescript array return

   buildLineElements: (startScreenRow, endScreenRow) ->
     @elementBuilder.innerHTML = @buildLineElementsHtml(startScreenRow, endScreenRow)


test it and write some stubs for the rest of the stuff in love.math

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

--- test/src/math.coffee
+++ test/src/math.coffee
@@ -0,0 +1,50 @@
+describe 'love.math', ->
+  it 'exists', ->
+    expect(Love.MathModule).to.be.a("function")
+
+  describe '.noise', ->
+    noise = null
+    beforeEach ->
+      noise = new Love().math.noise
+
+    describe 'when called with one argument', ->
+      it 'should return the same value for the same input', ->
+        expect(noise(0.1)).to.equal(noise(0.1))
+
+      it 'should return a different value for a different input', ->
+        expect(noise(0.1)).to.not.equal(noise(0.2))
+
+      it 'should return values between -1 and 1', ->
+        for i in [0..10]
+          expect(noise(i)).to.be.above(-1).and.below(1)
+
+      it 'should return similar values for similar inputs', ->
+        expect(Math.abs(noise(0.1) - noise(0.101))).to.be.below(0.1)
+
+    describe 'when called with two arguments', ->
+      it 'should return the same value for the same input'
+      it 'should return a different value for a different input'
+      it 'should return values between -1 and 1'
+      it 'should return similar values for similar inputs'
+
+    describe 'when called with three arguments', ->
+      it 'should return the same value for the same input'
+      it 'should return a different value for a different input'
+      it 'should return values between -1 and 1'
+      it 'should return similar values for similar inputs'
+
+    describe 'when called with four arguments', ->
+      it 'should return the same value for the same input'
+      it 'should return a different value for a different input'
+      it 'should return values between -1 and 1'
+      it 'should return similar values for similar inputs'
+
+  describe '.random', ->
+    describe 'when called with no arguments', ->
+      it 'should return a value between 0 and 1'
+
+    describe 'when called with one argument', ->
+      it 'should return a value between 0 and the argument'
+
+    describe 'when called with two arguments', ->
+      it 'should return a value between the two arguments'


<fix>(MoePlayer): add audio error event handler

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


helpers: added test

helpers: added test

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

--- test/test_helpers.coffee
+++ test/test_helpers.coffee
@@ -0,0 +1,40 @@
+{ indexOf, include, starts, ends, compact, count, merge, extend, flatten, del
+} = require('../lib/helpers').helpers
+
+array = [0..4]
+
+ok indexOf(array, 0) is 0
+ok indexOf(array, 2) is 2
+ok indexOf(array, 4) is 4
+ok indexOf(array, 6) is -1
+
+ok include array, 0
+ok include array, 2
+ok include array, 4
+ok not include array, 6
+
+string = array.join ''
+
+ok starts string, '012'
+ok starts string, '34', 3
+ok not starts string, '42'
+ok not starts string, '42', 6
+
+ok ends string, '234'
+ok ends string, '01', 3
+ok not ends string, '42'
+ok not ends string, '42', 6
+
+object = {}
+merged = merge object, array
+
+ok merged isnt object
+ok merged[3] is 3
+
+ok object is extend object, array
+ok object[3] is 3
+
+ok "#{ flatten [0, [1, 2], 3, [4]] }" is "#{ array }"
+
+ok 1 is del object, 1
+ok 1 not of object


pass launch url to Genymotion

pass launch url to Genymotion

--- src/steroids/emulate/genymotion.coffee
+++ src/steroids/emulate/genymotion.coffee
@@ -228,9 +228,17 @@

       steroidsCli.debug "GENYMOTION", "starting application"

-      cmd = "#{@genymotionBasePath}/tools/adb"
-      args = ["shell", "am", "start", "-n", "#{@applicationPackage}/#{@applicationActivity}"]
-
+      ips = steroidsCli.server.ipAddresses
+      port = steroidsCli.server.port
+      encodedJSONIPs = encodeURIComponent(JSON.stringify(ips))
+      encodedPort = encodeURIComponent(port)
+
+      launchUrl = "appgyver://?ips=#{encodedJSONIPs}&port=#{encodedPort}"
+
+      cmd = "#{@genymotionBasePath}/tools/adb"
+      args = ["shell", "am", "start", "-n", "#{@applicationPackage}/#{@applicationActivity}", "-d", launchUrl]
+
+      steroidsCli.debug "GENYMOTION", "Running #{cmd} with args: #{args}}"
       @startSession = sbawn
         cmd: cmd
         args: args


Adds test utilities

Adds test utilities

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

--- test/utils.coffee
+++ test/utils.coffee
@@ -0,0 +1,7 @@
+jsdom = require('jsdom').jsdom
+
+module.exports =
+  inject: (markup) -> global.document = jsdom markup
+  all: (selector) -> document.querySelectorAll(selector)
+  one: (selector) -> document.querySelectorAll(selector)[0]
+  # body: -> document.body


Added CoffeeScript example

Added CoffeeScript example

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

--- examples/coffee/example.coffee
+++ examples/coffee/example.coffee
@@ -0,0 +1,27 @@
+{check} = require '../../js/checkt'
+
+# Method chaining examples
+check('test')
+  .not.string(-> console.log 'not a string')
+  .else(-> console.log 'Logically, should be a string')
+  .number((v) -> console.log("its a number with value: #{v}"))
+
+check({})
+  .object(-> console.log 'Is an object')
+  .else(-> console.log 'Not an object')
+  .else(-> console.log 'Maybe an object')
+
+# Instead of using method chaing, you can also use
+# a plain object with the type as the key and the value is the callback function
+check {},
+  object: -> console.log 'Is an object'
+  number: -> console.log 'Is a number'
+
+check 8,
+  object: -> console.log 'Is an object'
+  number: -> console.log 'Is a number'
+
+# Multiple keys seperated by a comma also work, just make sure the key is
+# written as a key
+check 'test',
+  'string, number': -> console.log 'Either string or number'


Tweak snippet, to put cursor where I want it

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


ssh errors return output

ssh errors return output


Updated grunt

Updated grunt

New Gruntfile.coffee (grunt v0.4.1 required)

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

--- Gruntfile.coffee
+++ Gruntfile.coffee
@@ -0,0 +1,33 @@
+module.exports = (grunt) ->
+  grunt.initConfig
+    pkg: grunt.file.readJSON "package/component.json"
+
+    meta:
+      file: 'quo'
+      banner: '/* <%= pkg.name %> v<%= pkg.version %> - <%= grunt.template.today("yyyy/m/d") %>\n' +
+              '   <%= pkg.homepage %>\n' +
+              '   Copyright (c) <%= grunt.template.today("yyyy") %> <%= pkg.author.name %>' +
+              ' - Licensed <%= _.pluck(pkg.license, "type").join(", ") %> */\n'
+
+    resources:
+      app: ['src/*.coffee']
+
+    coffee:
+      app: files: 'package/<%= meta.file %>.debug.js': ['<%= resources.app %>']
+
+    uglify:
+      options: compress: false, banner: "<%= meta.banner %>"
+      app: files: 'package/<%= meta.file %>.js': 'package/<%= meta.file %>.debug.js'
+
+    watch:
+      coffee:
+        files: ['<%= resources.app %>']
+        tasks: ["coffee"]
+
+  grunt.loadNpmTasks "grunt-contrib-coffee"
+  grunt.loadNpmTasks "grunt-contrib-uglify"
+  grunt.loadNpmTasks "grunt-contrib-watch"
+
+  # Default task.
+  grunt.registerTask 'default', ["coffee", "uglify"]
+


Borrow ws's tests

Borrow ws's tests

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

--- test/ws.coffee
+++ test/ws.coffee
@@ -0,0 +1,19 @@
+#
+# Tests borrowed from https://github.com/websockets/ws/blob/master/test/Validation.test.js
+#
+assert = require './assert'
+valid8 = require '..'
+
+describe 'isValidUTF8', ->
+  it 'should return true for a valid utf8 string', ->
+    assert valid8 new Buffer 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque gravida mattis rhoncus. Donec iaculis, metus quis varius accumsan, erat mauris condimentum diam, et egestas erat enim ut ligula. Praesent sollicitudin tellus eget dolor euismod euismod. Nullam ac augue nec neque varius luctus. Curabitur elit mi, consequat ultricies adipiscing mollis, scelerisque in erat. Phasellus facilisis fermentum ullamcorper. Nulla et sem eu arcu pharetra pellentesque. Praesent consectetur tempor justo, vel iaculis dui ullamcorper sit amet. Integer tristique viverra ullamcorper. Vivamus laoreet, nulla eget suscipit eleifend, lacus lectus feugiat libero, non fermentum erat nisi at risus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut pulvinar dignissim tellus, eu dignissim lorem vulputate quis. Morbi ut pulvinar augue.'
+
+  it 'should return false for an erroneous string', ->
+    assert not valid8 new Buffer [0xce, 0xba, 0xe1, 0xbd, 0xb9, 0xcf, 0x83, 0xce, 0xbc, 0xce, 0xb5, 0xed, 0xa0, 0x80, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64]
+
+  it 'should return true for valid cases from the autobahn test suite', ->
+    assert valid8 new Buffer '\xf0\x90\x80\x80'
+    assert valid8 new Buffer [0xf0, 0x90, 0x80, 0x80]
+
+  it 'should return false for erroneous autobahn strings', ->
+    assert not valid8 new Buffer [0xce, 0xba, 0xe1, 0xbd]


fixed the failing code from previous commit

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


Define window.supersonic if we do not have any window

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


bug fix

bug fix

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


Don't load the new feed while trying to transition.

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


Disable metrics package

Disable metrics package

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


Add "Visualize Demands" menu item

Add "Visualize Demands" menu item

--- app/coffeescripts/menu-data.coffee
+++ app/coffeescripts/menu-data.coffee
@@ -94,6 +94,10 @@
     event: ((e) -> $a.broker.trigger("map:clear_neighbors:#{e.currentTarget.id}")) }
 ]

+$a.demand_context_menu = [
+  { label: 'Visualize demand', className: 'context_menu_item', event: ((e) -> $a.broker.trigger("demand:show_dialog:#{e.currentTarget.id}")) }
+]
+
 # Node Context Menu
 $a.node_context_menu = [
   {


commit

commit

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


Remove a log

Remove a log

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


statusbar module

statusbar module

error: pathspec 'Modules/StatusBar/StatusBarOverlay.coffee' did not match any file(s) known to git

--- Modules/StatusBar/StatusBarOverlay.coffee
+++ Modules/StatusBar/StatusBarOverlay.coffee
@@ -0,0 +1,14 @@
+#https://github.com/appersonlabs/TitaniumStatusbarOverlay
+
+root.StatusBar.StatusBarOverlay = class StatusBarOverlay
+  constructor: ->
+    @statusBarOverlay = require('mattapp.statusbar')
+
+  flash: (message, duration = 2.5) ->
+    @statusBarOverlay.postMessage(message, duration)
+
+  loadingMessage: (message, duration = 2.5) ->
+    @statusBarOverlay.postMessageInProgress(message, duration)
+
+  finishMessage: (message, duration = 1) ->
+    @statusBarOverlay.postFinishMessage(message, duration)


Added 'mk-MK' to diplomat page

Added 'mk-MK' to diplomat page

--- app/views/contribute/DiplomatView.coffee
+++ app/views/contribute/DiplomatView.coffee
@@ -53,6 +53,7 @@
 require("locale/ms")
 require("locale/ca")
 require("locale/gl")
+require("locale/mk-MK")

 module.exports = class DiplomatView extends ContributeClassView
   id: 'diplomat-view'
@@ -139,3 +140,4 @@
     ms: []             # Bahasa Melayu, Bahasa Malaysia
     ca: ['ArniMcFrag']             # Català, Catalan
     gl: ['mcaeiror']             # Galego, Galician
+    'mk-MK': ['SuperPranx']             # Македонски, Macedonian


new editor

new editor


Fixed #2581: triggering window resize event when loading view unveils, in case window was resized before then and messed up our initial spell view height.

--- app/views/play/level/PlayLevelView.coffee
+++ app/views/play/level/PlayLevelView.coffee
@@ -352,6 +352,7 @@
       @realTimeMultiplayerContinueGame @options.realTimeMultiplayerSessionID
     # TODO: Is it possible to create a Mongoose ObjectId for 'ls', instead of the string returned from get()?
     application.tracker?.trackEvent 'Started Level', category:'Play Level', levelID: @levelID, ls: @session?.get('_id') unless @observing
+    $(window).trigger 'resize'

   playAmbientSound: ->
     return if @destroyed


docs: add modularized signup

docs: add modularized signup

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

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


these listeners should be bound with #once

--- client/Main/kite/oskite.coffee
+++ client/Main/kite/oskite.coffee
@@ -55,8 +55,8 @@
     @fetchState()

     KD.getSingleton('mainController')
-      .on('userIdle', @bound 'stopPollingState')
-      .on('userBack', @bound 'pollState')
+      .once('userIdle', @bound 'stopPollingState')
+      .once('userBack', @bound 'pollState')

     @intervalId = KD.utils.repeat KD.config.osKitePollingMs, @bound 'fetchState'


implemented tab copying

implemented tab copying

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


move code from users.js.coffee to users_gather.js.coffee

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

--- app/assets/javascripts/users_gather.js.coffee
+++ app/assets/javascripts/users_gather.js.coffee
@@ -0,0 +1,74 @@
+$(".users.gather").ready ->
+	alert "I should only show in info page!"
+
+	showMsg = (msg) ->
+		$('#main-content').empty()
+		$('#main-content').append(msg)
+
+	showLoading = ->
+		# replace current page with gif
+		loadingStatus = ''
+		text = 'Please wait... '
+		img = "<img src='/assets/gs-loader.gif' alt='loading..'>"
+		loadingStatus += text
+		loadingStatus += img
+		showMsg(loadingStatus)
+
+	showSuccess = ->
+		# replace current page with success message
+		successMsg = "Done! You're all set. Please feel free to close this window."
+		showMsg(successMsg)
+
+	showError = ->
+		# replace current page with success message
+		errorMsg = 'Uhoh! Something went wrong. Please reload the page and try again. Sorry.'
+		showMsg(errorMsg)
+
+	speed_test = ->
+		$.ajax '/speedtest',
+			method: 'GET'
+
+	update_info = ->
+		$.ajax '/update',
+			method: 'PUT'
+			data:
+				user_id: user_id
+				user_info: user_info
+			error: ->
+				showError()
+			success: ->
+				showSuccess()
+
+	showLoading()
+
+	$window = $(window)
+	plugins = ( "#{plugin.name} #{plugin.description}" for plugin in navigator.plugins )
+	window.plugins = plugins
+	flash_version = flash for flash in plugins when flash.match /Shockwave/
+	user_id = parseInt($('#user_id').text())
+	user_ip_address = $('#user_ip_address').text()
+	audio = Modernizr.audio
+	video = Modernizr.video
+	audio_formats = "ogg: #{audio.ogg}, wav: #{audio.wav}, m4a: #{audio.m4a}"
+	video_formats = "ogg: #{video.ogg}, h264: #{video.h264}, webm: #{video.webm}"
+	cookies = navigator.cookieEnabled
+
+	user_info =
+		screen_resolution: "#{screen.width} x #{screen.height}"
+		window_size: "#{$window.width()} x #{$window.height()}"
+		html5_support: Modernizr.canvas
+		css3_support: Modernizr.borderradius
+		flash_version: flash_version
+		audio_formats: audio_formats
+		video_formats: video_formats
+		cookies: cookies
+		plugins: plugins.join(', ')
+		javascript: true
+
+	start = new Date().getTime()
+	test = speed_test()
+	test.done (data) ->
+		end = new Date().getTime()
+		size = parseInt(test.getResponseHeader('Content-Length'), 10) / 1000
+		user_info.download_speed = Math.round((size / ((end - start) / 1000)) * 10) / 10 + " KB/s";
+		update_info()


client: unify statuses for group payment

--- client/app/lib/util/getGroupStatus.coffee
+++ client/app/lib/util/getGroupStatus.coffee
@@ -12,15 +12,17 @@
     # This state is only possible for members.
     when not group.payment then Status.NEEDS_UPGRADE

-    # This state should never be here.
-    when not group.payment.customer then Status.UNKNOWN
+    # for the people who haven't logged in after we activated new payment
+    # system.
+    when not group.payment.customer then Status.NEEDS_UPGRADE

     # This state is to identify teams without credit cards.
     # With latest changes we are forcing users to enter a cc.
     when not group.payment.customer.hasCard then Status.NEEDS_UPGRADE

-    # This state should never be here.
-    when not group.payment.subscription then Status.UNKNOWN
+    # for the people who haven't logged in after we activated new payment
+    # system.
+    when not group.payment.subscription then Status.NEEDS_UPGRADE

     # This can only happen when a team fails to enter a credit card or we
     # couldn't charge the credit card they entered.


Fixed: app name was 'true' in dev mode

Fixed: app name was 'true' in dev mode

--- server/lib/token.coffee
+++ server/lib/token.coffee
@@ -35,6 +35,7 @@
 ## Check if application can manage docType
 module.exports.checkDocType = (auth, docType, callback) ->
     # Check if application is authenticated
+
     if productionOrTest
         checkToken auth, (err, isAuthenticated, name) =>
             if isAuthenticated
@@ -52,7 +53,9 @@
             else
                 callback null, false, false
     else
-        callback null, true, true
+        checkToken auth, (err, isAuthenticated, name) ->
+            name ?= 'unknown'
+            callback null, name, true

 ## function checkProxy (auth, callback)


Initial commit

Initial commit

root.coffee, CoffeeScript i.e., transcompiles to JavaScript -> root.js
Help: http://coffeescript.org/.

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

--- source/core/coffee/module/root.coffee
+++ source/core/coffee/module/root.coffee
@@ -0,0 +1,18 @@
+#
+# CBBL®
+# Computational Biology and Bioinformatics Laboratory.
+# _______________________________________________________________
+# CoffeeScript, http://coffeescript.org/.
+# The Non-AMD JavaScript - for defining "root" configurations.
+# _______________________________________________________________
+# Architecture and Code Handcrafted by Prabhat Kumar.
+# Architectuur en Code handgemaakt door Prabhat Kumar.
+# @author    : Prabhat Kumar [http://prabhatkumar.org/]
+# @copyright : Sequømics Corporation [http://sequomics.com/]
+# _______________________________________________________________
+# @date      : 10-May-2016
+# @license   : Apache, version 2.0
+# @require   : Node.js®
+# @require   : NPM
+# @require   : Grunt
+# _______________________________________________________________


Allow testing spiking

Allow testing spiking

--- notification-plugin.coffee
+++ notification-plugin.coffee
@@ -125,6 +125,13 @@
         type: "firstException"
         message: "New exception"

+    if config.spike
+      delete config.spike
+      event.trigger =
+        type: "projectSpiking"
+        message: "Project Spiking"
+        rate: 103
+
     @receiveEvent config, event, callback
     return


handles some removal but real rough, lots of holes

--- tests-coffee/unit/even-array-test.coffee
+++ tests-coffee/unit/even-array-test.coffee
@@ -26,32 +26,70 @@
     # do nothing

   arrayDidChange: (observedObj, start, removeCount, addCount) ->
-    for i in [start...(start+addCount)]
-      obj = observedObj[i]
-      if @get('parent').filterFunc(obj,i)
-        @get('parent').pushObject(obj)
+    if addCount > 0
+      res = []
+      for i in [start...(start+addCount)]
+        obj = observedObj[i]
+        if @get('parent').filterFunc(obj,i)
+          res.push(obj)
+
+      if res.length > 0
+        @get('parent').pushObjects(res)
+    else
+      console.debug("#{observedObj} #{start} #{removeCount}")
+
+      i = 0
+      for origIndex in @get('parent.arrayAndIndexes').indexes
+        if origIndex == start
+          @get('parent').removeAt(i)
+        i += 1

 FilteredArray = Ember.Object.extend Ember.MutableArray,
   init: (ops) ->
     @get('all').addArrayObserver(FilteredObserver.create(parent: this))

-  "[]": (->
+  arrayAndIndexes: (->
     c = []
+    indexes = []
     i = 0
     for num in @get('all')
       if @filterFunc(num,i)
         c.push(num)
+        indexes.push(i)
       i += 1
-    Ember.A(c)).property()
-
-  replace: (i,thing,objects) ->
-    for obj in objects
-      @get('[]').pushObject(obj)
-      @arrayContentDidChange(@get('[].length')-1,0,1)
+    {array: c, indexes: indexes}).property()
+
+  "[]": (-> @get('arrayAndIndexes').array).property()
+
+  replace: (i,num_removed,objects) ->
+    console.debug("replace i: #{i} num_removed #{num_removed} objects: #{objects}")
+    if objects.length > 0
+      @get('[]').pushObjects(objects)
+      @arrayContentDidChange(@get('[].length')-objects.length,0,objects.length)
+    else
+      @arrayContentWillChange(i,num_removed,0)
+      n = num_removed
+      while n > 0
+        @get("[]").removeAt(i)
+        n -= 1
+
+      a = @get("[]")
+      console.debug "replace after #{a}"
+
+      @arrayContentDidChange(i,num_removed,0)
+

   objectAt: (i) ->
     @get('[]').objectAt(i)
+
+  removeAt: (i) ->
+    a = @get("[]")
+    console.debug "removeAt #{i} #{a}"
+    res = @._super(i)
+    a = @get("[]")
+    console.debug "after #{i} #{a}"
+    res

   lengthBinding: "[].length"

@@ -127,7 +165,7 @@

 test 'observer updates when multiple pushed at once', ->
   Ember.run -> nums.pushObjects([8,10])
-  equal observer.get('arrayDidChangeCount'),2
+  equal observer.get('arrayDidChangeCount'),1

 test 'make FilteredArray on the fly', ->
@@ -146,7 +184,17 @@
   equal observer.get('arrayDidChangeCount'),1
   equalArray even,[3,4,5,8]

-
+test 'forEach up to date after removal', ->
+  Ember.run -> nums.removeAt(1)
+  equalArray even,[4]
+
+test 'forEach up to date after removal of odd', ->
+  Ember.run -> nums.removeAt(2)
+  equalArray even,[2,4]
+
+test 'forEach up to date after removal of 4', ->
+  Ember.run -> nums.removeAt(3)
+  equalArray even,[2]

 PagedArray = Ember.Object.extend


#20 плагин less

#20 плагин less

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

--- plugins/less.plugin.coffee
+++ plugins/less.plugin.coffee
@@ -0,0 +1,81 @@
+###!
+ * LESS plugin for nBuild
+ * Copyright(c) 2011-2012 vol4ok <admin@vol4ok.net>
+ * MIT Licensed
+###
+
+
+###* Module dependencies ###
+
+require "colors"
+fs     = require 'fs'
+util   = require 'util'
+_      = require 'underscore'
+async  = require 'async'
+less   = require 'less'
+path   = require 'path'
+coffee = require 'coffee-script'
+
+{join, dirname, basename, extname, normalize, relative, existsSync} = path
+
+
+exports.initialize = (builder) -> new LessPlugin(builder)
+
+class LessPlugin
+
+  ###*
+  * @public
+  * @constructor
+  * @param {Array}  targets
+  * @param {Object} [opts]
+  * @param {String} [remove = "no"]
+  * @param {String} [recursive = "no"]
+  ###
+  constructor: (@builder) ->
+    @targets = []
+    @includes = []
+    @outputDir = null
+    @compress = false
+    @builder.registerType('less', @less, this)
+
+  less: (name, options) ->
+    throw "Error: `targets` is required attribute" unless options.targets?
+    throw "Error: `output-dir` is required attribute" unless options["output-dir"]
+
+    @targets   = options.targets
+    @outputDir = options["output-dir"]
+    @includes  = options["include-dirs"] if _.isArray(options["include-dirs"])
+    @compress  = options.compress if options.compress?
+
+    @_mkdirp(@outputDir)
+    @outputDir = fs.realpathSync(@outputDir)
+
+    @includes = _.map @includes, (inc) -> fs.realpathSync(inc)
+
+    @count = 0
+    @builder.lock()
+    async.forEach @targets, _.bind(@_parseLess, this), (err) =>
+      @builder.unlock()
+      console.log "compile: #{@count} files successfully compiled".green
+
+  _parseLess: (infile, callback) ->
+    lss = fs.readFileSync(infile, 'utf-8')
+    outfile = join(@outputDir, "#{basename(infile, extname(infile))}.css")
+    parser = new less.Parser
+      paths: @includes
+      filename: outfile
+    parser.parse lss, (err, tree) =>
+      if err
+        console.error err
+        callback(err)
+        return
+      css = tree.toCSS(compress: @compress)
+      fs.writeFileSync(outfile, css, 'utf-8')
+      @count++
+      console.log "write: #{outfile}".grey if @builder.verbose
+      callback(err)
+
+  _mkdirp: (path, mode = 0755) ->
+    parent = dirname(path)
+    @_mkdirp(parent, mode) unless existsSync(parent)
+    fs.mkdirSync(path, mode) unless existsSync(path)


Bring in module-cache because build needs it

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

--- src/module-cache.coffee
+++ src/module-cache.coffee
@@ -0,0 +1,302 @@
+Module = require 'module'
+path = require 'path'
+semver = require 'semver'
+
+# Extend semver.Range to memoize matched versions for speed
+class Range extends semver.Range
+  constructor: ->
+    super
+    @matchedVersions = new Set()
+    @unmatchedVersions = new Set()
+
+  test: (version) ->
+    return true if @matchedVersions.has(version)
+    return false if @unmatchedVersions.has(version)
+
+    matches = super
+    if matches
+      @matchedVersions.add(version)
+    else
+      @unmatchedVersions.add(version)
+    matches
+
+nativeModules = process.binding('natives')
+
+cache =
+  builtins: {}
+  debug: false
+  dependencies: {}
+  extensions: {}
+  folders: {}
+  ranges: {}
+  registered: false
+  resourcePath: null
+  resourcePathWithTrailingSlash: null
+
+# isAbsolute is inlined from fs-plus so that fs-plus itself can be required
+# from this cache.
+if process.platform is 'win32'
+  isAbsolute = (pathToCheck) ->
+    pathToCheck and (pathToCheck[1] is ':' or (pathToCheck[0] is '\\' and pathToCheck[1] is '\\'))
+else
+  isAbsolute = (pathToCheck) ->
+    pathToCheck and pathToCheck[0] is '/'
+
+isCorePath = (pathToCheck) ->
+  pathToCheck.startsWith(cache.resourcePathWithTrailingSlash)
+
+loadDependencies = (modulePath, rootPath, rootMetadata, moduleCache) ->
+  fs = require 'fs-plus'
+
+  for childPath in fs.listSync(path.join(modulePath, 'node_modules'))
+    continue if path.basename(childPath) is '.bin'
+    continue if rootPath is modulePath and rootMetadata.packageDependencies?.hasOwnProperty(path.basename(childPath))
+
+    childMetadataPath = path.join(childPath, 'package.json')
+    continue unless fs.isFileSync(childMetadataPath)
+
+    childMetadata = JSON.parse(fs.readFileSync(childMetadataPath))
+    if childMetadata?.version
+      try
+        mainPath = require.resolve(childPath)
+
+      if mainPath
+        moduleCache.dependencies.push
+          name: childMetadata.name
+          version: childMetadata.version
+          path: path.relative(rootPath, mainPath)
+
+      loadDependencies(childPath, rootPath, rootMetadata, moduleCache)
+
+  return
+
+loadFolderCompatibility = (modulePath, rootPath, rootMetadata, moduleCache) ->
+  fs = require 'fs-plus'
+
+  metadataPath = path.join(modulePath, 'package.json')
+  return unless fs.isFileSync(metadataPath)
+
+  dependencies = JSON.parse(fs.readFileSync(metadataPath))?.dependencies ? {}
+
+  for name, version of dependencies
+    try
+      new Range(version)
+    catch error
+      delete dependencies[name]
+
+  onDirectory = (childPath) ->
+    path.basename(childPath) isnt 'node_modules'
+
+  extensions = ['.js', '.coffee', '.json', '.node']
+  paths = {}
+  onFile = (childPath) ->
+    if path.extname(childPath) in extensions
+      relativePath = path.relative(rootPath, path.dirname(childPath))
+      paths[relativePath] = true
+  fs.traverseTreeSync(modulePath, onFile, onDirectory)
+
+  paths = Object.keys(paths)
+  if paths.length > 0 and Object.keys(dependencies).length > 0
+    moduleCache.folders.push({paths, dependencies})
+
+  for childPath in fs.listSync(path.join(modulePath, 'node_modules'))
+    continue if path.basename(childPath) is '.bin'
+    continue if rootPath is modulePath and rootMetadata.packageDependencies?.hasOwnProperty(path.basename(childPath))
+
+    loadFolderCompatibility(childPath, rootPath, rootMetadata, moduleCache)
+
+  return
+
+loadExtensions = (modulePath, rootPath, rootMetadata, moduleCache) ->
+  fs = require 'fs-plus'
+  extensions = ['.js', '.coffee', '.json', '.node']
+  nodeModulesPath = path.join(rootPath, 'node_modules')
+
+  onFile = (filePath) ->
+    filePath = path.relative(rootPath, filePath)
+    segments = filePath.split(path.sep)
+    return if 'test' in segments
+    return if 'tests' in segments
+    return if 'spec' in segments
+    return if 'specs' in segments
+    return if segments.length > 1 and not (segments[0] in ['exports', 'lib', 'node_modules', 'src', 'static', 'vendor'])
+
+    extension = path.extname(filePath)
+    if extension in extensions
+      moduleCache.extensions[extension] ?= []
+      moduleCache.extensions[extension].push(filePath)
+
+  onDirectory = (childPath) ->
+    # Don't include extensions from bundled packages
+    # These are generated and stored in the package's own metadata cache
+    if rootMetadata.name is 'atom'
+      parentPath = path.dirname(childPath)
+      if parentPath is nodeModulesPath
+        packageName = path.basename(childPath)
+        return false if rootMetadata.packageDependencies?.hasOwnProperty(packageName)
+
+    true
+
+  fs.traverseTreeSync(rootPath, onFile, onDirectory)
+
+  return
+
+satisfies = (version, rawRange) ->
+  unless parsedRange = cache.ranges[rawRange]
+    parsedRange = new Range(rawRange)
+    cache.ranges[rawRange] = parsedRange
+  parsedRange.test(version)
+
+resolveFilePath = (relativePath, parentModule) ->
+  return unless relativePath
+  return unless parentModule?.filename
+  return unless relativePath[0] is '.' or isAbsolute(relativePath)
+
+  resolvedPath = path.resolve(path.dirname(parentModule.filename), relativePath)
+  return unless isCorePath(resolvedPath)
+
+  extension = path.extname(resolvedPath)
+  if extension
+    return resolvedPath if cache.extensions[extension]?.has(resolvedPath)
+  else
+    for extension, paths of cache.extensions
+      resolvedPathWithExtension = "#{resolvedPath}#{extension}"
+      return resolvedPathWithExtension if paths.has(resolvedPathWithExtension)
+
+  return
+
+resolveModulePath = (relativePath, parentModule) ->
+  return unless relativePath
+  return unless parentModule?.filename
+
+  return if nativeModules.hasOwnProperty(relativePath)
+  return if relativePath[0] is '.'
+  return if isAbsolute(relativePath)
+
+  folderPath = path.dirname(parentModule.filename)
+
+  range = cache.folders[folderPath]?[relativePath]
+  unless range?
+    if builtinPath = cache.builtins[relativePath]
+      return builtinPath
+    else
+      return
+
+  candidates = cache.dependencies[relativePath]
+  return unless candidates?
+
+  for version, resolvedPath of candidates
+    if Module._cache.hasOwnProperty(resolvedPath) or isCorePath(resolvedPath)
+      return resolvedPath if satisfies(version, range)
+
+  return
+
+registerBuiltins = (devMode) ->
+  atomShellRoot = path.join(process.resourcesPath, 'atom')
+
+  commonRoot = path.join(atomShellRoot, 'common', 'api', 'lib')
+
+  rendererRoot = path.join(atomShellRoot, 'renderer', 'api', 'lib')
+  rendererBuiltins = ['ipc', 'remote']
+  for builtin in rendererBuiltins
+    cache.builtins[builtin] = path.join(rendererRoot, "#{builtin}.js")
+
+if cache.debug
+  cache.findPathCount = 0
+  cache.findPathTime = 0
+  cache.loadCount = 0
+  cache.requireTime = 0
+  global.moduleCache = cache
+
+  originalLoad = Module::load
+  Module::load = ->
+    cache.loadCount++
+    originalLoad.apply(this, arguments)
+
+  originalRequire = Module::require
+  Module::require = ->
+    startTime = Date.now()
+    exports = originalRequire.apply(this, arguments)
+    cache.requireTime += Date.now() - startTime
+    exports
+
+  originalFindPath = Module._findPath
+  Module._findPath = (request, paths) ->
+    cacheKey = JSON.stringify({request, paths})
+    cache.findPathCount++ unless Module._pathCache[cacheKey]
+
+    startTime = Date.now()
+    foundPath = originalFindPath.apply(global, arguments)
+    cache.findPathTime += Date.now() - startTime
+    foundPath
+
+exports.create = (modulePath) ->
+  fs = require 'fs-plus'
+
+  modulePath = fs.realpathSync(modulePath)
+  metadataPath = path.join(modulePath, 'package.json')
+  metadata = JSON.parse(fs.readFileSync(metadataPath))
+
+  moduleCache =
+    version: 1
+    dependencies: []
+    extensions: {}
+    folders: []
+
+  loadDependencies(modulePath, modulePath, metadata, moduleCache)
+  loadFolderCompatibility(modulePath, modulePath, metadata, moduleCache)
+  loadExtensions(modulePath, modulePath, metadata, moduleCache)
+
+  metadata._atomModuleCache = moduleCache
+  fs.writeFileSync(metadataPath, JSON.stringify(metadata, null, 2))
+
+  return
+
+exports.register = ({resourcePath, devMode}={}) ->
+  return if cache.registered
+
+  originalResolveFilename = Module._resolveFilename
+  Module._resolveFilename = (relativePath, parentModule) ->
+    resolvedPath = resolveModulePath(relativePath, parentModule)
+    resolvedPath ?= resolveFilePath(relativePath, parentModule)
+    resolvedPath ? originalResolveFilename(relativePath, parentModule)
+
+  cache.registered = true
+  cache.resourcePath = resourcePath
+  cache.resourcePathWithTrailingSlash = "#{resourcePath}#{path.sep}"
+  registerBuiltins(devMode)
+
+  return
+
+exports.add = (directoryPath, metadata) ->
+  # path.join isn't used in this function for speed since path.join calls
+  # path.normalize and all the paths are already normalized here.
+
+  unless metadata?
+    try
+      metadata = require("#{directoryPath}#{path.sep}package.json")
+    catch error
+      return
+
+  cacheToAdd = metadata?._atomModuleCache
+  return unless cacheToAdd?
+
+  for dependency in cacheToAdd.dependencies ? []
+    cache.dependencies[dependency.name] ?= {}
+    cache.dependencies[dependency.name][dependency.version] ?= "#{directoryPath}#{path.sep}#{dependency.path}"
+
+  for entry in cacheToAdd.folders ? []
+    for folderPath in entry.paths
+      if folderPath
+        cache.folders["#{directoryPath}#{path.sep}#{folderPath}"] = entry.dependencies
+      else
+        cache.folders[directoryPath] = entry.dependencies
+
+  for extension, paths of cacheToAdd.extensions
+    cache.extensions[extension] ?= new Set()
+    for filePath in paths
+      cache.extensions[extension].add("#{directoryPath}#{path.sep}#{filePath}")
+
+  return
+
+exports.cache = cache


Remove logging of selector length

Remove logging of selector length

--- src/packages/tabs/lib/tab-bar-view.coffee
+++ src/packages/tabs/lib/tab-bar-view.coffee
@@ -143,7 +143,6 @@
     toPane.focus()

   removeDropTargetClasses: ->
-    console.log rootView.find('.tabs .is-drop-target').length
     rootView.find('.tabs .is-drop-target').removeClass 'is-drop-target'
     rootView.find('.tabs .drop-target-is-after').removeClass 'drop-target-is-after'


examples: add example for async function calls

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

--- examples/async.coffee
+++ examples/async.coffee
@@ -0,0 +1,31 @@
+#!/usr/bin/env coffee
+
+WKTReader = (require "../lib").WKTReader
+
+reader = new WKTReader()
+
+geom = reader.read "POINT(1 1)"
+
+# async call to geom.covers
+geom.covers geom, (error, result) ->
+  if error then console.log error
+  else console.log result
+
+# sync call to geom.covers
+console.log geom.covers geom
+
+# list of functions with async support
+# isSimple
+# isValid
+# isEmpty
+# isRectangle
+# disjoint
+# touches
+# intersects
+# crosses
+# within
+# contains
+# overlaps
+# equals
+# covers
+# coveredBy


init unit tests

init unit tests

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

--- test/unit/coffee/DocArchiveManager.coffee
+++ test/unit/coffee/DocArchiveManager.coffee
@@ -0,0 +1,70 @@
+assert = require("chai").assert
+sinon = require('sinon')
+chai = require('chai')
+should = chai.should()
+expect = chai.expect
+modulePath = "../../../app/js/DocArchiveManager.js"
+SandboxedModule = require('sandboxed-module')
+ObjectId = require("mongojs").ObjectId
+Errors = require "../../../app/js/Errors"
+
+describe "DocArchiveManager", ->
+
+	beforeEach ->
+
+		@settings =
+			filestore:
+				backend: "s3"
+				s3:
+					secret: "secret"
+					key: "this_key"
+				stores:
+					user_files:"sl_user_files"
+
+		@request =
+			put: sinon.stub().callsArgWith(1,  null, statusCode:200)
+
+		@MongoManager =
+			markDocAsArchived: sinon.stub().callsArgWith(2, null)
+			upsertIntoDocCollection: sinon.stub()
+
+		@DocArchiveManager = SandboxedModule.require modulePath, requires:
+			"settings-sharelatex": @settings
+			"./MongoManager": @MongoManager
+			"request": @request
+			"logger-sharelatex":
+				log:->
+				err:->
+
+		@key = "my/key"
+		@bucketName = "my-bucket"
+		@error = "my errror"
+
+		@docs = [{
+			_id: ObjectId()
+			lines: ["one", "two", "three"]
+			rev: 2
+		}, {
+			_id: ObjectId()
+			lines: ["aaa", "bbb", "ccc"]
+			rev: 4
+		}, {
+			_id: ObjectId()
+			lines: ["111", "222", "333"]
+			rev: 6
+		}]
+
+		@project_id = ObjectId().toString()
+		@callback = sinon.stub()
+		@stubbedError = new Error("blew up")
+
+	describe "archiveDoc", ->
+
+		it "should use correct options", (done)->
+			@DocArchiveManager.archiveDoc @project_id, @docs[0], (err)=>
+				opts = @request.put.args[0][0]
+				assert.deepEqual(opts.aws, {key:@settings.filestore.s3.key, secret:@settings.filestore.s3.secret, bucket:@settings.filestore.stores.user_files})
+				opts.json.should.equal @docs[0].lines
+				opts.timeout.should.equal (30*1000)
+				opts.uri.should.equal "https://#{@settings.filestore.stores.user_files}.s3.amazonaws.com/#{@project_id}/#{@docs[0]._id}"
+				done()


Adding initial tests for data service

Adding initial tests for data service

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

--- test/unit/services/dataServiceSpec.coffee
+++ test/unit/services/dataServiceSpec.coffee
@@ -0,0 +1,32 @@
+describe 'dataService', ->
+    rootScope = null
+    httpBackend = null
+
+    beforeEach(module('taiga'))
+    beforeEach(module('taiga.services.data'))
+
+    beforeEach inject ($httpBackend) ->
+        httpBackend = $httpBackend
+        httpBackend.whenGET('http://localhost:8000/api/v1/sites').respond(200, {test: "test"})
+        httpBackend.whenGET('http://localhost:8000/api/v1/userstories?project=1').respond(200, [{order: 3}, {order: 1}])
+
+    describe '$data', ->
+        afterEach ->
+            httpBackend.verifyNoOutstandingExpectation()
+            httpBackend.verifyNoOutstandingRequest()
+
+        it 'should allow to load the site info in the scope.site variable', inject ($data, $rootScope) ->
+            scope = $rootScope.$new()
+            httpBackend.expectGET('http://localhost:8000/api/v1/sites')
+            $data.loadSiteInfo(scope)
+            httpBackend.flush()
+            expect(scope.site).to.be.deep.equal({headers: {}, data: {test: "test"}})
+            scope.site = {}
+
+        it 'should allow to load the userstories of the current project', inject ($data, $rootScope, $model) ->
+            scope = $rootScope.$new()
+            $rootScope.projectId = 1
+            httpBackend.expectGET('http://localhost:8000/api/v1/userstories?project=1')
+            $data.loadUserStories(scope)
+            httpBackend.flush()
+            expect(_.map(scope.userstories, (us) -> us.getAttrs())).to.be.deep.equal([{order: 1}, {order: 3}])


Added synchronizedtime.coffee

Added synchronizedtime.coffee

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

--- synchronizedtime.coffee
+++ synchronizedtime.coffee
@@ -0,0 +1,4 @@
+class SynchronizedTime
+
+  setTime: (t) ->
+    @time = t


Add sample for saving threads to mongodb

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

--- scripts/populate-db.coffee
+++ scripts/populate-db.coffee
@@ -0,0 +1,16 @@
+mongoose = require "mongoose"
+db = mongoose.connect 'mongodb://localhost/mailist-dev'
+Thread  = require '../models/Thread'
+
+message = {
+	subject: 'Friday cakes'
+	,sender: 'rumi.neykova@gmail.com'
+    ,body: 'Eat & Enjoy'}
+
+thread = new Thread
+    labels: ['notice-board']
+
+thread.messages.push message
+thread.save()
+
+console.log 'Ihu'


Tweaked isRecalculable.

Tweaked isRecalculable.

--- server/achievements/Achievement.coffee
+++ server/achievements/Achievement.coffee
@@ -29,7 +29,7 @@
   parameters = @get('function')?.parameters or jsonschema.properties.function.default.parameters
   return utils.functionCreators[kind](parameters) if kind of utils.functionCreators

-AchievementSchema.methods.isRecalculable = -> @get('recalculable') is true
+AchievementSchema.methods.isRecalculable = -> @get('recalculable') isnt false

 AchievementSchema.statics.jsonschema = jsonschema
 AchievementSchema.statics.earnedAchievements = {}


Best Of Your Town item query update

Best Of Your Town item query update

 On branch master

	modified:   nodejs_server/bestofyourtown/items.coffee

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


correct sort order

correct sort order

--- apps/fair/client/for_you.coffee
+++ apps/fair/client/for_you.coffee
@@ -132,7 +132,7 @@
     # We have to fetch sequentially since we use a cursor here
     feedItems.fetchFeedItems
       size: 3
-      sort: '-featured'
+      sort: @sortOrder
       success: (items1) =>
         feedItems.fetchFeedItems
           success: (items2) =>


ide: filepermissionsmodal view

ide: filepermissionsmodal view


GH:E obseerver

GH:E obseerver

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

--- scripts/github-enterprise-observer.coffee
+++ scripts/github-enterprise-observer.coffee
@@ -0,0 +1,5 @@
+# Watches for repo:branch_name and pastes links
+
+module.exports = (robot) ->
+  robot.hear /\bmerlin:(\w)/i, (msg) ->
+    msg.send "https://github.riotgames.com/merlin/merlin/tree/#{msg.match[1]}"


add flatMap perf test

add flatMap perf test

--- performance/PerformanceTest.coffee
+++ performance/PerformanceTest.coffee
@@ -57,6 +57,10 @@
 suite.add 'zip', ->
   f.withGenerator (gen) ->
     f.zip(gen)
+suite.add 'flatMap', ->
+  f.withGenerator (gen) ->
+    gen.stream().flatMap (x) ->
+      gen.stream().take(3)
 suite.add 'Bacon.combineTemplate.sample', ->
   f.withGenerator (gen) ->
     f.combineTemplate(gen, 5, 1)


fix for clearing received array value

fix for clearing received array value

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


Analytics: WIP on finalizing sessions

Analytics: WIP on finalizing sessions

* Add finalize strategies for memory and Redis
* FIXME: Test Redis strategy

--- src/streammachine/master/analytics.coffee
+++ src/streammachine/master/analytics.coffee
@@ -33,7 +33,10 @@

         @log = @opts.log

+        @_timeout_sec = Number(@opts.config.finalize_secs)
+
         if @opts.redis
+
             @redis = @opts.redis.client

         @es = new elasticsearch.Client
@@ -64,6 +67,25 @@
         #    console.log "last session is ", err, res

         # what sessions have we seen since then?
+
+        # -- Redis Session Sweep -- #
+
+        if @redis
+            @log.info "Analytics setting up Redis session sweeper"
+
+            setInterval =>
+                # look for sessions that should be written (score less than now)
+                @redis.zrangebyscore 0, Math.floor( Number(new Date) / 1000), (err,sessions) =>
+                    return @log.error "Error fetching sessions to finalize: #{err}" if err
+
+                    _sFunc = =>
+                        if s = sessions.shift()
+                            @_triggerSession s
+                            _sFunc()
+
+                    _sFunc()
+
+            , 5*1000

     #----------

@@ -129,6 +151,11 @@

                         cb? null

+        # -- update our timer -- #
+
+        @_updateSessionTimerFor obj.client.session_id, (err) =>
+
+
     #----------

     # Given a session id and duration, add the given duration to any
@@ -151,8 +178,62 @@

     #----------

+    _updateSessionTimerFor: (session,cb) ->
+        if @redis
+            # this will set the score, or update it if the session is
+            # already in the set
+            timeout_at = (Number(new Date) / 1000) + @_timeout_sec
+
+            @redis.zadd "session-timeouts", timeout_at, session, (err) =>
+                cb err
+
+        else
+            s = @_ensureMemorySession session
+
+            clearTimeout s.timeout if s.timeout
+
+            s.timeout = setTimeout =>
+                @_triggerSession session
+            , @_timeout_sec * 1000
+
+            cb null
+
+    #----------
+
+    _scrubSessionFor: (session,cb) ->
+        if @redis
+            @redis.zrem "session-timeouts", session, (err) =>
+                return cb err if err
+
+                @redis.del "duration-#{session}", (err) =>
+                    cb err
+
+        else
+           s = @_ensureMemorySession session
+           clearTimeout s.timeout if s.timeout
+           delete @sessions[session]
+
+           cb null
+
+
+    #----------
+
     _ensureMemorySession: (session) ->
-        @sessions[ session ] ||= duration:0, last_seen_at:Number(new Date())
+        @sessions[ session ] ||=
+            duration:0, last_seen_at:Number(new Date()), timeout:null
+
+    #----------
+
+    _triggerSession: (session) ->
+        @_scrubSessionFor session, (err) =>
+            return @log.error "Error cleaning session cache: #{err}" if err
+
+            @_finalizeSession session, (err,obj) =>
+                return @log.error "Error assembling session: #{err}" if err
+
+                if obj
+                    @_storeSession obj, (err) =>
+                        @log.error "Error writing session: #{err}" if err

     #----------


linus torvalds is crying for this

linus torvalds is crying for this

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

--- lib/Default.coffee
+++ lib/Default.coffee
@@ -0,0 +1,35 @@
+'use strict'
+
+module.exports =
+  OUTPUT_TYPE: (type) -> "#{type}\t: "
+  OUTPUT_MESSAGE: (message) -> message
+  PRINT: ->
+    for type of @types
+      @printLine(type, message) for message in @messages[type]
+  LEVEL: 'info'
+  COLOR: false
+  MUTED: 'silent'
+  TYPES:
+    line:
+      color: 'gray'
+    error:
+      level : 0
+      color : 'red'
+    warning:
+      level : 1
+      color : 'yellow'
+    success:
+      level : 2
+      color : 'green'
+    info:
+      level : 3
+      color : 'white'
+    verbose:
+      level : 4
+      color : 'cyan'
+    debug:
+      level : 5
+      color : 'blue'
+    silly:
+      level : 6
+      color : 'magenta'


:art: Move validateResults to helpers

:art: Move validateResults to helpers

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

--- lib/helpers.coffee
+++ lib/helpers.coffee
@@ -0,0 +1,13 @@
+{Range} = require('atom')
+
+Helpers = module.exports =
+  validateResults: (results) ->
+    if (not results) or results.constructor.name isnt 'Array'
+      throw new Error "Got invalid response from Linter, Type: #{typeof results}"
+    for result in results
+      unless result.type
+        throw new Error "Missing type field on Linter Response, Got: #{Object.keys(result)}"
+      result.range = Range.fromObject result.range if result.range?
+      result.class = result.type.toLowerCase().replace(' ', '-')
+      Helpers._validateResults(result.trace) if result.trace
+    results


bettered accelerometer spec

bettered accelerometer spec

(cherry picked from commit ac1f8ef6609c0924fa6e8225a4094077b512c710)

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


do not wait importer to start prepareNextCheck

--- server/lib/konnector_poller.coffee
+++ server/lib/konnector_poller.coffee
@@ -28,6 +28,6 @@
             if err?
                 log.info "An error occurred during fetching -- #{err}"
             log.info "All konnectors fetched."
-            @prepareNextCheck()
+        @prepareNextCheck()

 module.exports = new KonnectorPoller


Fixed a variety of scrolling bugs.

Fixed a variety of scrolling bugs.

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/alpire/picoCTF-web.git/'


Broke app.coffee

Broke app.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/OleManRiver/dredd-example.git/'


webserver: implement and endpoint for fetching permissions and roles

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


corrects exports on local consistecy module

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/AKST/Data-mining.git/'


config/cloud.json API

config/cloud.json API

--- src/steroids/servers/BuildServer.coffee
+++ src/steroids/servers/BuildServer.coffee
@@ -110,7 +110,14 @@
       res.on "close", ()->
         clearInterval id

-
+    @app.get "/__appgyver/cloud_config", (req, res) =>
+      if fs.existsSync Paths.application.configs.cloud
+        cloudConfig = require Paths.application.configs.cloud
+        res.json cloudConfig
+      else
+        error = "Could not find config/cloud.json. Please run $ steroids deploy."
+
+        res.status(404).json {error: error}

     @app.options "/__appgyver/logger", (req, res) =>
       res.header "Access-Control-Allow-Origin", "*"


testing uglifier gem source map creation

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/jrjamespdx/prc-119.git/'


Commented out line 133

Commented out line 133

--- app/views/play/level/tome/tome_view.coffee
+++ app/views/play/level/tome/tome_view.coffee
@@ -130,7 +130,7 @@
         unless method.cloneOf
           skipProtectAPI = @getQueryVariable("skip_protect_api") is "true" or @options.levelID isnt 'brawlwood'
           skipProtectAPI = true  # gah, it's so slow :( and somehow still affects simulation
-          skipProtectAPI = false if @options.levelID is 'dungeon-arena'
+          #skipProtectAPI = false if @options.levelID is 'dungeon-arena'
           skipFlow = @getQueryVariable("skip_flow") is "true" or @options.levelID is 'brawlwood'
           spell = @spells[spellKey] = new Spell programmableMethod: method, spellKey: spellKey, pathComponents: pathPrefixComponents.concat(pathComponents), session: @options.session, supermodel: @supermodel, skipFlow: skipFlow, skipProtectAPI: skipProtectAPI, worker: @worker
     for thangID, spellKeys of @thangSpells


Client: Activity: Feed: Deleted popularMessagesFlagStore reference


Util: Fix coffeescript syntax issue

Util: Fix coffeescript syntax issue