Adds teamMediumComments

Adds teamMediumComments

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

--- src/collections/teamMediumComments.coffee
+++ src/collections/teamMediumComments.coffee
@@ -0,0 +1,24 @@
+exports.loadTeamMediumComments = (params, callback) ->
+  if @isId params
+    params = teamId: params
+  else unless params and typeof params is 'object'
+    throw new TSArgsError 'teamsnap.loadTeamMediumComments', 'must provide a
+    teamId or query parameters'
+
+  @loadItems 'teamMediumComment', params, callback
+
+
+exports.createTeamMediumComment = (data) ->
+  @createItem data,
+    type: 'teamMediumComment'
+
+
+exports.saveTeamMediumComment = (teamMediumComment, callback) ->
+  unless teamMediumComment
+    throw new TSArgsError 'teamsnap.saveTeamMediaComment', '`teamMediumComment`
+      must be provided'
+  unless @isItem teamMediumComment, 'teamMediumComment'
+    throw new TSArgsError 'teamsnap.saveTeamMediaComment',
+      "`teamMediumComment.type` must be 'teamMediumComment'"
+
+  @saveItem teamMediumComment, callback


apm is back in app folder

apm is back in app folder

--- src/browser/squirrel-update.coffee
+++ src/browser/squirrel-update.coffee
@@ -142,7 +142,7 @@
     atomShCommand = "#!/bin/sh\r\n\"$0/../#{relativeAtomShPath.replace(/\\/g, '/')}\" \"$@\""

     apmCommandPath = path.join(binFolder, 'apm.cmd')
-    relativeApmPath = path.relative(binFolder, path.join(process.resourcesPath, 'apm', 'bin', 'apm.cmd'))
+    relativeApmPath = path.relative(binFolder, path.join(process.resourcesPath, 'app', 'apm', 'bin', 'apm.cmd'))
     apmCommand = "@echo off\r\n\"%~dp0\\#{relativeApmPath}\" %*"

     apmShCommandPath = path.join(binFolder, 'apm')


Add menu item

Add menu item

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

--- menus/timecop.cson
+++ menus/timecop.cson
@@ -0,0 +1,10 @@
+'menu': [
+  'label': 'Packages'
+  'submenu': [
+    'label': 'Timecop'
+    'submenu': [
+      'label': 'Show'
+      'command': 'timecop:view'
+    ]
+  ]
+]


Removed some unnecessary expectations.

Removed some unnecessary expectations.

--- test/app/lib/surface/SpriteBoss.spec.coffee
+++ test/app/lib/surface/SpriteBoss.spec.coffee
@@ -107,8 +107,6 @@
       midRenderExpectations.push([spriteBoss.sprites['FROgre'].imageObject.children[0].paused,true,'animated spriteSheet action'])

       defaultLayer.once 'new-spritesheet', ->
-        expect(spriteBoss.sprites['Ogre 1'].imageObject.children.length).toBeGreaterThan(0)
-#        expect(spriteBoss.sprites['FROgre'].imageObject.children[0].currentFrame).toBeGreaterThan(0)
         done()
 #        showMe() # Uncomment to display this world when you run any of these tests.


Change the style of addListener

Change the style of addListener

--- views/env.coffee
+++ views/env.coffee
@@ -250,8 +250,10 @@
   s += if isDarkTheme then ' dark' else ' light'

+# Global data resolver
+
 handleProxyGameOnRequest = (method, path, body) ->
-  # Important! Clone a copy of proxy objects!
+  # Parse the json object
   body = JSON.parse body
   event = new CustomEvent 'game.request',
     bubbles: true
@@ -261,9 +263,6 @@
       path: path
       body: body
   window.dispatchEvent event
-
-# Global data resolver
-proxy.addListener 'game.on.request', handleProxyGameOnRequest

 start2Version = 0
 initStart2Value = ->
@@ -501,18 +500,15 @@
   locked = false

 handleProxyGameOnResponse = (method, path, body, postBody) ->
-  # Important! Clone a copy of proxy objects!
+  # Parse the json object
   responses.push [method, path, JSON.parse(body), JSON.parse(postBody)]
   resolveResponses() if !locked
-proxy.addListener 'game.on.response', handleProxyGameOnResponse

 handleProxyGameStart = ->
   window.dispatchEvent new Event 'game.start'
-proxy.addListener 'game.start', handleProxyGameStart

 handleProxyGamePayitem = ->
   window.dispatchEvent new Event 'game.payitem'
-proxy.addListener 'game.payitem', handleProxyGamePayitem

 handleProxyNetworkErrorRetry = (counter) ->
   event = new CustomEvent 'network.error.retry',
@@ -521,7 +517,6 @@
     detail:
       counter: counter
   window.dispatchEvent event
-proxy.addListener 'network.error.retry', handleProxyNetworkErrorRetry

 handleProxyNetworkInvalidCode = (code) ->
   event = new CustomEvent 'network.invalid.code',
@@ -530,17 +525,23 @@
     detail:
       code: code
   window.dispatchEvent event
-proxy.addListener 'network.invalid.code', handleProxyNetworkInvalidCode

 handleProxyNetworkError = ->
   window.dispatchEvent new Event 'network.error'
-proxy.addListener 'network.error', handleProxyNetworkError
+
+proxyListener =
+  'game.on.request': handleProxyGameOnRequest
+  'game.on.response': handleProxyGameOnResponse
+  'game.start': handleProxyGameStart
+  'game.payitem': handleProxyGamePayitem
+  'network.error.retry': handleProxyNetworkErrorRetry
+  'network.invalid.code': handleProxyNetworkInvalidCode
+  'network.error': handleProxyNetworkError
+
+window.addEventListener 'load', ->
+  for eventName, handler of proxyListener
+    proxy.addListener eventName, handler

 window.addEventListener 'unload', ->
-  proxy.removeListener 'game.on.request', handleProxyGameOnRequest
-  proxy.removeListener 'game.on.response', handleProxyGameOnResponse
-  proxy.removeListener 'game.start', handleProxyGameStart
-  proxy.removeListener 'game.payitem', handleProxyGamePayitem
-  proxy.removeListener 'network.error.retry', handleProxyNetworkErrorRetry
-  proxy.removeListener 'network.invalid.code', handleProxyNetworkInvalidCode
-  proxy.removeListener 'network.error', handleProxyNetworkError+  for eventName, handler of proxyListener
+    proxy.removeListener eventName, handler


Remove unused import

Remove unused import

--- resources/assets/coffee/react/_components/beatmap-icon.coffee
+++ resources/assets/coffee/react/_components/beatmap-icon.coffee
@@ -16,7 +16,7 @@
 #    along with osu!web.  If not, see <http://www.gnu.org/licenses/>.
 ###

-{div,i} = React.DOM
+{div} = React.DOM
 el = React.createElement

 @BeatmapIcon = React.createClass


Changed how api address is specified.

Changed how api address is specified.

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


Add cssfilters to feature_detect

Add cssfilters to feature_detect

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


Make sure progress indicator value is never larger than 100

--- app/assets/javascripts/player/views/hud_view.js.coffee
+++ app/assets/javascripts/player/views/hud_view.js.coffee
@@ -48,6 +48,7 @@

     if @duration
       progress = Math.round(100 * time / 1000 / @duration)
+      progress = 100.0 if progress > 100.0
       @setProgress progress

   setProgress: (percent) ->


Rewrite DecisionTask to promises

Rewrite DecisionTask to promises

--- lib/Task/DecisionTask.coffee
+++ lib/Task/DecisionTask.coffee
@@ -10,18 +10,23 @@
       events: [Object]
     super
   execute: ->
-    @decisions = []
-    @modifier = {}
-    for event in @events
-      if @[event.eventType]
-        @[event.eventType](event)
-      else
-        throw new errors.EventHandlerNotImplementedError
-          message: "Event handler '#{event.eventType}' not implemented"
-          event: event
-    if not @decisions.length
-      throw new errors.NoDecisionsError
-        event: event
+    new Promise (resolve, reject) =>
+      try
+        @decisions = []
+        @modifier = {}
+        for event in @events
+          if @[event.eventType]
+            @[event.eventType](event)
+          else
+            throw new errors.EventHandlerNotImplementedError
+              message: "Event handler '#{event.eventType}' not implemented"
+              event: event
+        if not @decisions.length
+          throw new errors.NoDecisionsError
+            event: event
+      catch error
+        reject error
+      resolve()
   # default noops, can be implemented by child class if necessary
   DecisionTaskScheduled: (event) ->
   DecisionTaskStarted: (event) ->


Ability to comment blocks of code

Ability to comment blocks of code

error: pathspec 'settings/language-jbase.cson' did not match any file(s) known to git

--- settings/language-jbase.cson
+++ settings/language-jbase.cson
@@ -0,0 +1,3 @@
+'.source.jbase':
+  'editor':
+    'commentStart': '*'


Add authors

Add authors

--- build/Gruntfile.coffee
+++ build/Gruntfile.coffee
@@ -224,6 +224,7 @@
     'create-windows-installer':
       appDirectory: shellAppDir
       outputDirectory: path.join(buildDir, 'installer')
+      authors: 'The Atom Team'
       iconUrl: 'https://raw.githubusercontent.com/atom/atom/master/resources/atom.png'

     shell:


Resource combiner

Resource combiner

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

--- lib/resource-combiner.coffee
+++ lib/resource-combiner.coffee
@@ -0,0 +1,57 @@
+resourceRequest = require './resource-request.coffee'
+virtual = require './virtual-resource.coffee'
+
+resources = {}
+
+# TODO : Implement cache invalidation on a periodic basis here
+exports.combine = ({resources, req, separator, contentType, prefix}) ->
+  id = resources.length + (resources.href for resource in resources).join ':'
+
+  if not resource = resources[id]
+    # Create a new resource and load async
+    resource = resources[id] = {
+      id
+      content: {href: resource.href, complete: false} for resource in resources
+      deferred: []
+    }
+
+    checkComplete = ->
+      # Determine if there are any incomplete operations
+      for content in resource.content
+        if not content.complete
+          return false
+
+      resource.content = (content.data for content in resource.content).join ''
+
+      for deferred in resource.deferred
+        deferred resource.content
+
+    for content in resource.content
+      do (content) ->
+        chunks = []
+        resourceRequest.get(
+          content.href,
+          req,
+          (err, res) ->
+            if err
+              console.log "Unable to load combined resource #{content.href}", err
+              content.data = ''
+              content.complete = true
+            else
+              res.on 'data', (chunk) ->
+                chunks.push chunk
+              res.on 'end', ->
+                content.data = chunks.join('') + (separator ? '')
+                content.complete = true
+                checkComplete()
+        )
+
+    resource.href = virtual.create
+      content: (callback) ->
+        resource.deferred.push callback
+        checkComplete()
+      contentType: contentType
+      prefix: prefix
+
+  # TODO Figure out a better way to map to the virtual middleware
+  '/virtual/' + resource.href


Add domready to feature detect to counter document.body is null


Create view to auto save a checkbox

Create view to auto save a checkbox

error: pathspec 'app/assets/javascripts/views/auto-save-checkbox.coffee' did not match any file(s) known to git

--- app/assets/javascripts/views/auto-save-checkbox.coffee
+++ app/assets/javascripts/views/auto-save-checkbox.coffee
@@ -0,0 +1,14 @@
+Dashboard.AutoSaveCheckboxView = Ember.View.extend
+  template: Ember.Handlebars.compile("{{input type='checkbox' checked=view.attr}}")
+  tagName: 'span'
+
+  attributeBindings: [
+    'attr'
+    'resource'
+  ]
+
+  didInsertElement: ->
+    self = this
+    @$('input').on 'change', ->
+      self.set('attr', $(this).is(':checked'))
+      self.get('resource').save()


Admin: Integrations: Created fake tab view.

--- client/admin/lib/views/integrations/adminintegrationparentview.coffee
+++ client/admin/lib/views/integrations/adminintegrationparentview.coffee
@@ -13,6 +13,8 @@

     @setClass 'integrations'

+    @createFakeTabs()
+

   handleIdentifier: (identifier, action) ->

@@ -26,6 +28,9 @@

   handleAdd: ->

+    @addTab.setClass 'active'
+    @configureTab.unsetClass 'active'
+
     integrationHelpers.find @identifier, (err, data) =>
       return @handleError err  if err

@@ -34,6 +39,9 @@

   handleConfigure: ->
+
+    @addTab.unsetClass 'active'
+    @configureTab.setClass 'active'

     options = { id: @identifier }

@@ -62,3 +70,22 @@
       size       : width : 26
       cssClass   : 'action-container'
       showLoader : yes
+
+
+  createFakeTabs: ->
+
+    { router } = kd.singletons
+
+    @addSubView wrapper = new kd.CustomHTMLView
+      cssClass : 'kdtabhandlecontainer'
+      partial  : '

'
+
+    wrapper.addSubView @addTab = new kd.CustomHTMLView
+      cssClass : 'kdtabhandle all-services'
+      partial  : 'All Services'
+      click    : -> router.handleRoute '/Admin/Integrations/Add'
+
+    wrapper.addSubView @configureTab = new kd.CustomHTMLView
+      cssClass : 'kdtabhandle'
+      partial  : 'Configured Integrations'
+      click    : -> router.handleRoute '/Admin/Integrations/Configure'


Update CommitsTable component

Update CommitsTable component

[#94794346]

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


refactored formatMarkup into reports_edit.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/leonidas/qa-reports.git/'


WIP: Plumbing code paths for comic generation :bath: :wrench:

--- scripts/ayp.coffee
+++ scripts/ayp.coffee
@@ -3,6 +3,7 @@

 Url = require 'url'
 Redis = require 'redis'
+GD = require 'node-gd'

 module.exports = (robot) ->
   buffer = new PantsBuffer()
@@ -20,11 +21,60 @@
   # Ask for what currently serves as "output"
   robot.respond /ayp(\s+(me)?)?\s*$/i, (msg) ->
     buffer.get 6, (err, lines) ->
+      # Build a strip of AYP
+      buildComic lines, (err, image) ->
+        return msg.reply "SOMETHING TERRIBLE HAPPENED: #{err}" if err
+        console.log " => Built image: #{image.width}x#{image.height}"
+        msg.reply "TODO: DO SOMETHING WITH THE RESULT: #{image.width}x#{image.height}"
+
+      # Echo the lines to the channel
       count = 0
       for log in lines
         do (log) ->
           [who, what] = log
           msg.reply "=#{count += 1}> [#{who}] '#{what}'"
+
+# Build a comic and invoke the cb(err, res) with res
+# being the resulting image. `err` will be true if an error
+# is encountered.
+buildComic = (lines, cb) ->
+  buildPanels lines, (err, panels) ->
+    return cb(err, null) if err
+    cb("TODO: Throw the panels on the background with padding", null)
+
+# Turn a set of 6 `lines` into 3 panels
+# using two lines per panel, then invokes `cb`.
+#
+# callback invoked as `cb(err, [image, image, image])`
+# Error will only be set on failure.
+buildPanels = (lines, cb) ->
+  failed = false
+  panels = [null, null, null]
+
+  # Handler for when a panel fails to build.
+  fail = (err) ->
+    cb(err, [])
+    return failed = true
+
+  # Handler for panel completion, store in the list, see if we're done,
+  # invoke callback if we are.
+  finishPanel = (err, n, panel) ->
+    # No one cares if we already lost.
+    return if failed
+    return fail(err) if err
+
+    panels[n] = panel
+    cb(false, panels) if panels.every (p) -> p
+
+  # TODO: There's a loop here, somewhere
+  buildPanel lines[0..1], (err, panel) -> finishPanel(err, 0, panel)
+  buildPanel lines[2..3], (err, panel) -> finishPanel(err, 1, panel)
+  buildPanel lines[4..5], (err, panel) -> finishPanel(err, 2, panel)
+
+# Build a single panel out of (UP TO) two lines of dialog
+# cb invoked as `cb(err, image)`. `err` is only set on failure
+buildPanel = (lines, cb) ->
+  cb("TODO: Build a panel on a transperant background", null)

 # Make any changes required to the name
 filterName = (name) ->


Check the target exists before continuing


add crawler

add crawler

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

--- Crawler/crawler.coffee
+++ Crawler/crawler.coffee
@@ -0,0 +1,10 @@
+http = require("http")
+
+http.get('', (res) ->
+  console.log "Got response: " + res.statusCode
+  res.on "data", (chunk) ->
+    console.log "BODY: " + chunk
+
+).on "error", (e) ->
+  console.log "Got error: " + e.message
+


docs: add create-team-errors fns

docs: add create-team-errors fns

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

error: pathspec 'docs/js/create-team-errors.coffee' did not match any file(s) known to git

--- docs/js/create-team-errors.coffee
+++ docs/js/create-team-errors.coffee
@@ -0,0 +1,44 @@
+---
+---
+
+utils = window.KODING_UTILS ?= {}
+
+do ->
+
+  { makeError } = utils
+
+  getSuggestedTeamNameError = (suggested, original) ->
+    makeError """
+      #{original} is not available.
+      We replaced it with #{suggested} for you.
+    """
+
+  getTeamNameNotAvailableError = ->
+    makeError """
+      Team name is not available. Please try with another one.
+    """
+
+  getTeamNameUserNameError = ->
+    makeError """
+      Your username and team name cannot be the same.
+    """
+
+  getPasswordError = ->
+    makeError [
+      "GivenCredentials does't match!"
+      "Forgot password?"
+    ]
+
+  getEmailError = ->
+    makeError """
+      Email is taken. Please try another one.
+    """
+
+  utils.errors = {
+    getSuggestedTeamNameError
+    getTeamNameNotAvailableError
+    getTeamNameUserNameError
+    getPasswordError
+    getEmailError
+  }
+


Update cron.coffee

Update cron.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/ICTU/self-healer.git/'


Made filename optional for getExtension().

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/urbanetic/meteor-aurin-acs.git/'


Fix renamed variable reference

Fix renamed variable reference

Resolves #752

--- src/fs_utils/generate.coffee
+++ src/fs_utils/generate.coffee
@@ -162,7 +162,7 @@
       newMap.applySourceMap smConsumer
     else
       newMap = map
-    next error, {data: code, code, map: newMap, path}
+    next error, {data: optimizedCode, code: optimizedCode, map: newMap, path}

   optimizeFn.apply optimizer, optimizerArgs


creates expense report controller

creates expense report controller

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

--- app/assets/javascripts/controllers/expense_report_controller.js.coffee
+++ app/assets/javascripts/controllers/expense_report_controller.js.coffee
@@ -0,0 +1,3 @@
+@ExpenseReportController = ($scope, $routeParams, ExpenseReport) ->
+  ExpenseReport.get(user_id: $routeParams.user_id, id: $routeParams.id).then (expenseReport) ->
+    $scope.expenseReport = expenseReport


I guess emails might not be there.

I guess emails might not be there.

--- app/views/modal/employer_signup_modal.coffee
+++ app/views/modal/employer_signup_modal.coffee
@@ -72,6 +72,7 @@
     delete userObject.subscribe
     for key, val of me.attributes when key in ["preferredLanguage", "testGroupNumber", "dateCreated", "wizardColor1", "name", "music", "volume", "emails"]
       userObject[key] ?= val
+    userObject.emails ?= {}
     userObject.emails.employerNotes = {enabled: true}
     res = tv4.validateMultiple userObject, User.schema
     return forms.applyErrorsToForm(@$el, res.errors) unless res.valid


Added countdown-timer module

Added countdown-timer module

error: pathspec 'views/components/main/parts/countdown-timer.cjsx' did not match any file(s) known to git

--- views/components/main/parts/countdown-timer.cjsx
+++ views/components/main/parts/countdown-timer.cjsx
@@ -0,0 +1,71 @@
+{React, resolveTime} = window
+
+
+class Ticker
+  constructor: ->
+    @intervalId = null
+    @callbacks = new Map()
+  tick: () =>
+    now = (new Date()).getTime()
+    @callbacks.forEach (f) -> f(now)
+  start: ->
+    @intervalId = setInterval @tick, 1000
+  stop: ->
+    @callbacks.clear()
+    clearInterval @intervalId
+    @intervalId = null
+  reg: (key, func) ->
+    @callbacks.set key, func
+    @start() if !@intervalId?
+  unreg: (key) ->
+    @callbacks.delete key
+    @stop() if @callbacks.size is 0
+
+ticker = new Ticker()
+
+
+CountdownTimer = React.createClass
+  propTypes:
+    countdownId: React.PropTypes.string.isRequired
+    completeTime: React.PropTypes.number
+    tickCallback: React.PropTypes.func
+    completeCallback: React.PropTypes.func
+  getDefaultProps: ->
+    completeTime: -1
+    tickCallback: null
+    completeCallback: null
+  getInitialState: ->
+    @timeRemaining = -1
+
+    completeTime: @props.completeTime
+  componentDidMount: ->
+    @startTick()
+  componentWillReceiveProps: (nextProps) ->
+    console.log @props.completeTime
+    @stopTick() if nextProps.countdownId isnt @props.countdownId
+    @setState {completeTime: nextProps.completeTime} if nextProps.completeTime isnt @state.completeTime
+  shouldComponentUpdate: (nextProps, nextState) ->
+    nextProps.countdownId isnt @props.countdownId or nextState.completeTime isnt @state.completeTime
+  componentDidUpdate: ->
+    @startTick() # Doesn't matter if it didn't stop
+  componentWillUnmount: ->
+    @stopTick()
+  startTick: ->
+    ticker.reg @props.countdownId, @tick
+  stopTick: ->
+    ticker.unreg @props.countdownId
+  tick: (currentTime) ->
+    if @state.completeTime < 0
+      @timeRemaining = -1
+      @stopTick()
+    else
+      @timeRemaining = Math.max 0, Math.floor((@state.completeTime - currentTime) / 1000)
+      @textLabel.textContent = resolveTime @timeRemaining if @textLabel?
+      @props.tickCallback(@timeRemaining) if @props.tickCallback?
+      if @timeRemaining < 1
+        @stopTick()
+        @props.completeCallback() if @props.completeCallback?
+  render: ->
+     @textLabel = ref}>{resolveTime @timeRemaining}
+
+module.exports = CountdownTimer


Cleanup

Cleanup

--- lib/project-manager-view.coffee
+++ lib/project-manager-view.coffee
@@ -26,14 +26,6 @@
       @attach()

   attach: ->
-    @storeFocusedElement()
-
-    if @previouslyFocusedElement[0] and @previouslyFocusedElement[0] isnt document.body
-      @eventElement = @previouslyFocusedElement
-    else
-      @eventElement = atom.workspaceView
-    @keyBindings = atom.keymap.keyBindingsMatchingElement(@eventElement)
-
     projects = []
     for title, path of atom.config.get('project-manager')
       projects.push({title, path}) if path?


Drop jQuery

Drop jQuery

--- lib/tool-bar-button-view.coffee
+++ lib/tool-bar-button-view.coffee
@@ -1,5 +1,5 @@
 {CompositeDisposable} = require 'atom'
-{$, View} = require 'space-pen'
+{View} = require 'space-pen'

 module.exports = class ToolBarButtonView extends View
   @content: ->
@@ -39,12 +39,11 @@
     @subscriptions.dispose()

   getPreviouslyFocusedElement: () ->
-    if @previouslyFocusedElement[0] and @previouslyFocusedElement[0] isnt document.body
-      @eventElement = @previouslyFocusedElement[0]
+    if @previouslyFocusedElement and @previouslyFocusedElement.nodeName isnt 'BODY'
+      @eventElement = @previouslyFocusedElement
     else
       @eventElement = atom.views.getView(atom.workspace)

   storeFocusedElement: ->
-    activeElement = $(document.activeElement)
-    if !activeElement.hasClass 'tool-bar-btn'
-      @previouslyFocusedElement = activeElement+    if not document.activeElement.classList.contains 'tool-bar-btn'
+      @previouslyFocusedElement = document.activeElement


Fix coffeescript error in video spec file

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


filereading attempt 23

filereading attempt 23

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


Added RemoteButton fot REST calls closes #48

error: pathspec 'wzk/ui/form/RemoteButton.coffee' did not match any file(s) known to git

--- wzk/ui/form/RemoteButton.coffee
+++ wzk/ui/form/RemoteButton.coffee
@@ -0,0 +1,33 @@
+goog.provide 'wzk.ui.form.RemoteButton'
+
+goog.require 'goog.ui.Button'
+
+###*
+  A button that allows an Ajax call.
+###
+class wzk.ui.form.RemoteButton extends goog.ui.Button
+
+  ###*
+    @constructor
+    @extends {goog.ui.Button}
+    @param {goog.ui.ControlContent=} content
+    @param {goog.ui.ButtonRenderer=} renderer
+    @param {goog.dom.DomHelper=} dom
+  ###
+  constructor: (content, renderer, dom) ->
+    super content, renderer, dom
+    @url = null
+    @method = null
+    @addClassName 'remote-button'
+
+  ###*
+    Sends a request on a given model with a given method
+
+    @param {wzk.resource.Client} client
+    @param {string} method
+    @param {Object|null|string=} content
+  ###
+  call: (client, method, content) ->
+    @setEnabled false
+    client.request method, content, ->
+      @setEnabled true


Report songs played and chat from a turntable.fm room.

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

--- src/scripts/turntable.coffee
+++ src/scripts/turntable.coffee
@@ -0,0 +1,40 @@
+# Description
+#   Informs about songs played and chat in a turntable.fm room.
+#
+# Dependencies:
+#   "ttapi": "1.5.0"
+#
+# Configuration:
+#   TT_AUTH - turntable.fm auth
+#   TT_USERID - turntable.fm user id
+#   TT_ROOMID - turntable.fm room id
+#   TT_CHAN - Hubot channel to send messages to
+#
+# Commands:
+#   None
+#
+# Notes:
+#   See https://github.com/alaingilbert/Turntable-API
+#
+# Author:
+#   mmb
+
+module.exports = (robot) ->
+  env = process.env
+
+  if env.TT_AUTH and env.TT_USERID and env.TT_ROOMID and env.TT_CHAN
+    ttapi = require 'ttapi'
+    ttbot = new ttapi env.TT_AUTH, env.TT_USERID, env.TT_ROOMID
+
+    newsong_callback = (data) ->
+      song = data.room.metadata.current_song
+
+      robot.messageRoom env.TT_CHAN,
+        "#{song.djname}@turntable.fm played '#{song.metadata.song}' by '#{song.metadata.artist}'"
+
+    ttbot.on 'newsong', newsong_callback
+
+    speak_callback = (data) ->
+      robot.messageRoom env.TT_CHAN, "#{data.name}@turntable.fm: #{data.text}"
+
+    ttbot.on 'speak', speak_callback


initial version of coordinate swapping (x-y swap)

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

--- src/gg/coord/swap.coffee
+++ src/gg/coord/swap.coffee
@@ -0,0 +1,52 @@
+#<< gg/coord/coord
+
+# The swap coordinate needs to flip the y-scale range because
+# SVG and Canvas orgin is in the upper left.
+class gg.coord.Swap extends gg.coord.Coordinate
+  @ggpackage = "gg.coord.Swap"
+  @aliases = ["swap"]
+
+  compute: (data, params) ->
+    table = data.getTable()
+    scales = @scales data, params
+    xtype = ytype = gg.data.Schema.unknown
+    xtype = table.schema.type('x') if table.has 'x'
+    ytype = table.schema.type('y') if table.has 'y'
+    xScale = scales.scale 'x', xtype
+    xRange = xScale.range()
+    yScale = scales.scale 'y', ytype
+    yRange = yScale.range()
+
+
+
+    # invert to original domain
+    # swap table xs for ys
+    # swap scale x for y
+    # reapply scales
+
+    inverted = scales.invert table, gg.scale.Scale.xys
+    xcols = _.o2map gg.scale.Scale.xs, (x) ->
+      if inverted.has x
+        [x, inverted.getColumn x]
+    ycols = _.o2map gg.scale.Scale.ys, (y) ->
+      if inverted.has y
+        [y, inverted.getColumn y]
+
+    for x, colData of xcols
+      newcol = "y#{x.substr 1}"
+      inverted = inverted.addColumn newcol, colData, xtype, yes
+
+    for y, colData of ycols
+      newcol = "x#{y.substr 1}"
+      inverted = inverted.addColumn newcol, colData, ytype, yes
+
+    # now swap the x and y scales
+    xScale.range [yRange[1], yRange[0]]
+    yScale.range xRange
+    xScale.aes = 'y'
+    yScale.aes = 'x'
+    scales.set xScale
+    scales.set yScale
+
+    table = scales.apply inverted, gg.scale.Scale.xys
+    new gg.data.PairTable table, data.getMD()


add new tests

add new tests

for updated 'who' regex

--- test/badges-test.coffee
+++ test/badges-test.coffee
@@ -37,13 +37,13 @@
   require('../src/badges')(robot)

   it 'registers "have badge" listener', ->
-    expect(@robot.respond).to.have.been.calledWith(/(I|@?\w+) (?:have|has|got|earned)(?: the)? :?([\-\w,\s]+):? badges?/i)
+    expect(@robot.respond).to.have.been.calledWith(/(@?[.\w\-]+) (?:have|has|got|earned)(?: the)? :?([\-\w,\s]+):? badges?/i)

   it 'registers "what badges" listener', ->
-    expect(@robot.respond).to.have.been.calledWith(/wh(?:at|ich) badges? do(?:es)? (I|@?\w+) have/i)
+    expect(@robot.respond).to.have.been.calledWith(/wh(?:at|ich) badges? do(?:es)? (@?[.\w\-]+) have/i)

   it 'registers "do not have" listener', ->
-    expect(@robot.respond).to.have.been.calledWith(/(I|@?\w+) (?:do(?:n't|esn't| not)) have the :?([\-\w]+):? badge/i)
+    expect(@robot.respond).to.have.been.calledWith(/(@?[.\w\-]+) (?:do(?:n't|esn't| not)) have the :?([\-\w]+):? badge/i)

   it 'responds to "I have the founder badge"', ->
     @msg.match = [0, 'I', 'founder']
@@ -119,3 +119,26 @@
     badges = @data.ingressBadges.U123
     expect(@msg.reply).to.have.been.calledWith('removed the :founder: badge')
     expect(badges).not.to.include(':founder:')
+
+  describe 'handles usernames with special characters [@-.]', ->
+    it '(user-2)', ->
+      @msg.match = [0, 'user-2', 'verified']
+      @robot.respond.args[0][1](@msg)
+      badges = @data.ingressBadges.U234
+      expect(badges).to.be.a('array')
+      expect(badges).to.include(':verified:')
+      expect(@msg.send).to.have.been.calledWith('@user-2: congrats on earning the :verified: badge!')
+    it '(user.2)', ->
+      @msg.match = [0, 'user.2', 'verified']
+      @robot.respond.args[0][1](@msg)
+      badges = @data.ingressBadges.U234
+      expect(badges).to.be.a('array')
+      expect(badges).to.include(':verified:')
+      expect(@msg.send).to.have.been.calledWith('@user.2: congrats on earning the :verified: badge!')
+    it '(@user2)', ->
+      @msg.match = [0, '@user2', 'verified']
+      @robot.respond.args[0][1](@msg)
+      badges = @data.ingressBadges.U234
+      expect(badges).to.be.a('array')
+      expect(badges).to.include(':verified:')
+      expect(@msg.send).to.have.been.calledWith('@user2: congrats on earning the :verified: badge!')


include open function

include open 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/drsdrs/dooropener.git/'


Teach hubot to take the blame

Teach hubot to take the blame

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

--- src/scripts/take-the-blame.coffee
+++ src/scripts/take-the-blame.coffee
@@ -0,0 +1,19 @@
+# Description:
+#   Blame hubot for anything
+#
+# Dependencies:
+#   None
+#
+# Configuration:
+#   None
+#
+# Commands:
+#   hubot take the blame - For everything
+#   hubot take the blame for <something> - For <something>
+#
+# Author:
+#   Ben Armston
+
+module.exports = (robot) ->
+  robot.respond /take the blame/i, (msg) ->
+    # Hubot shamefully sits there and silently takes the blame.


Fetch KPI templates from bolts

Fetch KPI templates from bolts

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


Revert "i18n lon-capa problem explanation title"

This reverts commit 3e0342cbb3fdc8b13200b2b784175a4e7d30ca55.


fix key repeat

fix key repeat

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


Fix bug that was stopping autotailer from loading

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


Adding show elements action

Adding show elements action

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


:art: Import emitter-spec from Atom

:art: Import emitter-spec from Atom

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

--- spec/emitter-spec.coffee
+++ spec/emitter-spec.coffee
@@ -0,0 +1,32 @@
+Emitter = require '../dist/Emitter'
+
+describe "Emitter", ->
+  it "invokes the observer when the named event is emitted until disposed", ->
+    emitter = new Emitter
+
+    fooEvents = []
+    barEvents = []
+
+    sub1 = emitter.on 'foo', (value) -> fooEvents.push(['a', value])
+    sub2 = emitter.on 'bar', (value) -> barEvents.push(['b', value])
+
+    emitter.emit 'foo', 1
+    emitter.emit 'foo', 2
+    emitter.emit 'bar', 3
+
+    sub1.dispose()
+
+    emitter.emit 'foo', 4
+    emitter.emit 'bar', 5
+
+    sub2.dispose()
+
+    emitter.emit 'bar', 6
+
+    expect(fooEvents).toEqual [['a', 1], ['a', 2]]
+    expect(barEvents).toEqual [[ 'b', 3],[ 'b', 5]]
+
+  it "throws an exception when subscribing with a callback that isn't a function", ->
+    emitter = new Emitter
+    expect(-> emitter.on('foo', null)).toThrow()
+    expect(-> emitter.on('foo', 'a')).toThrow()


Added ACE3 Function Header and ACE3 Settings Entry snippets

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

--- snippets/language-sqf.cson
+++ snippets/language-sqf.cson
@@ -0,0 +1,36 @@
+'.source.sqf':
+  'ACE3 Function Header':
+    'prefix': 'ace_function_header'
+    'body': """
+      /*
+       * Author: ${1:[Name of Author(s)]}
+       * ${2:[Description]}
+       *
+       * Arguments:
+       * 0: ${3:Argument Name} <${4:TYPE}>
+       *
+       * Return Value:
+       * ${5:Return Name} <${6:TYPE}>
+       *
+       * Example:
+       * [${7:"example"}] call ace_${8:[module]}_fnc_${9:[functionName]}
+       *
+       * Public: ${10:[Yes/No]}
+       */
+      #include "script_component.hpp"
+    """
+    'description': 'Function Header per ACE3 guidelines.'
+    'descriptionMoreURL': 'http://ace3mod.com/wiki/development/coding-guidelines.html#3-1-function-definitions'
+  'ACE3 Settings Entry':
+    'prefix': 'ace_settings_entry'
+    'body': """
+      class GVAR(${1:name}) {
+        displayName = CSTRING(${2:stringDisplayName});
+        description = CSTRING(${3:stringDescription});
+        isClientSettable = ${4:[0/1]};
+        typeName = "${5:[BOOL/SCALAR/STRING/ARRAY/COLOR]]}";
+        value = ${6:[Number]};
+      };
+    """
+    'description': 'ACE_Settings Entry (without SCALAR values)'
+    'descriptionMoreURL': 'http://ace3mod.com/wiki/framework/settings.html'


StacksV2: providersParser to extract providers/credential requirement from given stack template

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

--- client/admin/lib/views/stacksv2/providersparser.coffee
+++ client/admin/lib/views/stacksv2/providersparser.coffee
@@ -0,0 +1,11 @@
+module.exports = providersParser = (content) ->
+
+    providers = {}
+
+    # Find all matches for ${var.PROVIDER_}
+    (content.match /\$\{var\.(.*?)\_/g).forEach (match) ->
+      # Trim prefix/suffix and remove duplicates
+      providers[match[6...-1]] = null
+
+    # Return list of providers
+    return Object.keys providers


Extract a stateForRow method on Highlighter

--- src/app/highlighter.coffee
+++ src/app/highlighter.coffee
@@ -19,9 +19,9 @@
   handleBufferChange: (e) ->
     oldRange = e.oldRange.copy()
     newRange = e.newRange.copy()
-    previousState = @screenLines[oldRange.end.row].state # used in spill detection below
+    previousState = @stateForRow(oldRange.end.row) # used in spill detection below

-    startState = @screenLines[newRange.start.row - 1]?.state or 'start'
+    startState = @stateForRow(newRange.start.row - 1)
     @screenLines[oldRange.start.row..oldRange.end.row] =
       @buildScreenLinesForRows(startState, newRange.start.row, newRange.end.row)

@@ -31,10 +31,10 @@
     # each line until the line's new state matches the previous state. this covers
     # cases like inserting a /* needing to comment out lines below until we see a */
     for row in [newRange.end.row...@buffer.getLastRow()]
-      break if @screenLines[row].state == previousState
+      break if @stateForRow(row) == previousState
       nextRow = row + 1
-      previousState = @screenLines[nextRow].state
-      @screenLines[nextRow] = @buildScreenLineForRow(@screenLines[row].state, nextRow)
+      previousState = @stateForRow(nextRow)
+      @screenLines[nextRow] = @buildScreenLineForRow(@stateForRow(row), nextRow)

     # if highlighting spilled beyond the bounds of the textual change, update
     # the pre and post range to reflect area of highlight changes
@@ -71,6 +71,9 @@
   screenLinesForRows: (startRow, endRow) ->
     @screenLines[startRow..endRow]

+  stateForRow: (row) ->
+    @screenLines[row]?.state ? 'start'
+
   destroy: ->
     @buffer.off ".highlighter#{@id}"


:memo: Add tip about Keybinding Resolver to keymap.cson

--- dot-atom/keymap.cson
+++ dot-atom/keymap.cson
@@ -21,7 +21,12 @@
 # * https://atom.io/docs/latest/using-atom-basic-customization#customizing-key-bindings
 # * https://atom.io/docs/latest/behind-atom-keymaps-in-depth
 #
+# If you're having trouble with your keybindings not working, try the
+# Keybinding Resolver: Cmd+. on OS X and Ctrl+. on other platforms. See the
+# Debugging Guide for more information:
+# * https://atom.io/docs/v1.3.1/hacking-atom-debugging#check-the-keybindings
+#
 # This file uses CoffeeScript Object Notation (CSON).
-# If you are unfamiliar with CSON, you can read more about it in the
+# If you are unfamiliar with CSON, you can read more about it in the
 # Atom Flight Manual:
 # https://atom.io/docs/latest/using-atom-basic-customization#cson


separate a minimap-block

separate a minimap-block

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

--- lib/minimap-block.coffee
+++ lib/minimap-block.coffee
@@ -0,0 +1,117 @@
+{Emitter} = require 'emissary'
+Debug = require './mixins/debug'
+
+###
+  Container-box - Minimap-editor
+###
+module.exports =
+class MinimapBlock
+  Emitter.includeInto(this)
+  Debug.includeInto(this)
+
+  x: 0
+  y: 0
+  width: 0
+  height: 0
+
+  offsetX: 0
+  offsetY: 0
+
+  scrollY: 0
+  scrollX: 0
+
+  scrollWidth: 0
+  scrollHeight: 0
+
+  scaleX: 1
+  scaleY: 1
+
+  box: null
+
+  constructor: () ->
+    @box = new MinimapBox()
+    @on 'scrollX', (x) => @box.setOffsetX x
+    @on 'scrollY', (y) => @box.setOffsetY y
+
+  getBox: -> @box
+
+  resetScrollXY: ->
+    @scrollX = 0
+    @scrollY = 0
+
+  setScale: (x = 0.2, y = 0.16) ->
+    @scaleX = x
+    @scaleY = y
+    @emit 'scale', @scaleX, @scaleY
+    @log 'scale', @scaleX, @scaleY
+
+  resetScale: (x = 1, y = 1) ->
+    @scaleX = x
+    @scaleY = y
+    @emit 'rest-scale', @scaleX, @scaleY
+    @log 'reset-scale', @scaleX, @scaleY
+
+  setX: (@x = 0) ->
+    @emit 'xy', @x, @y
+    @log 'x', @x
+
+  setY: (@y = 0) ->
+    @emit 'xy', @x, @y
+    @log 'y', @y
+
+  setOffsetX: (@offsetX = 0) ->
+    @emit 'offsetX', @offsetX
+    @log 'offsetX', @offsetX
+
+  setOffsetY: (@offsetY = 0) ->
+    @emit 'offsetY', @offsetY
+    @log 'offsetY', @offsetY
+
+###
+  Overlayer-box - Minimap-Overlayer
+###
+class MinimapBox
+  Emitter.includeInto(this)
+  Debug.includeInto(this)
+
+  x: 0
+  y: 0
+
+  offsetX: 0
+  offsetY: 0
+
+  width: 0
+  height: 0
+
+  setWidth: (w = 0) ->
+    @width = w
+    @emit 'width', @width
+    @log 'box width', @width
+
+  setHeight: (h = 0) ->
+    @height = h
+    @emit 'height', @height
+    @log 'box height', @height
+
+  setX: (@x = 0) ->
+    @emit 'x', @offsetX + @x
+    @log 'box x', @offsetX + @x
+
+  setY: (@y = 0) ->
+    @emit 'y', @offsetY + @y
+    @log 'box y', @offsetY + @y
+
+  setOffsetX: (@offsetX = 0) ->
+    @emit 'x', @offsetX + @x
+    @log 'box x', @offsetX + @x
+
+  setOffsetY: (@offsetY = 0) ->
+    @emit 'y', @offsetY + @y
+    @log 'box y', @offsetY + @y
+
+  getCenter: ->
+    {
+      x: @x + @offsetX + @width / 2
+      y: @y + @offsetY + @height / 2
+    }
+


check existence of "path" for browser execution

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


reworking to support multiple ownership (will cause problems, we don't know what all will be replaced, orz)

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


Seriously twitter what the fuck.

Seriously twitter what the fuck.


:bug: Fix regression in indent-guide in React editor

Previously the indent guide was always showing on the whitespace only
lines in the React editor. This is the same behavior as in the old
editor and had the same fix, just ported to `LinesComponent`.

See: 314833bbac33bdb7c45594550d8d10559dd2de9c

Fixes #2274

--- src/lines-component.coffee
+++ src/lines-component.coffee
@@ -189,7 +189,7 @@
     lineIsWhitespaceOnly = firstTrailingWhitespacePosition is 0
     for token in tokens
       innerHTML += @updateScopeStack(scopeStack, token.scopes)
-      hasIndentGuide = not mini and showIndentGuide and token.hasLeadingWhitespace or (token.hasTrailingWhitespace and lineIsWhitespaceOnly)
+      hasIndentGuide = not mini and showIndentGuide and (token.hasLeadingWhitespace or (token.hasTrailingWhitespace and lineIsWhitespaceOnly))
       innerHTML += token.getValueAsHtml({invisibles, hasIndentGuide})

     innerHTML += @popScope(scopeStack) while scopeStack.length > 0


New MoveElement component

New MoveElement component

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

--- src/components/MoveElement.coffee
+++ src/components/MoveElement.coffee
@@ -0,0 +1,30 @@
+if typeof process is 'object' and process.title is 'node'
+  noflo = require "../../lib/NoFlo"
+else
+  noflo = require '/noflo'
+
+class MoveElement extends noflo.Component
+  description: 'Change the coordinates of a DOM element'
+  constructor: ->
+    @element = null
+    @inPorts =
+      element: new noflo.Port 'object'
+      x: new noflo.Port 'number'
+      y: new noflo.Port 'number'
+      z: new noflo.Port 'number'
+
+    @inPorts.element.on 'data', (element) =>
+      @element = element
+    @inPorts.x.on 'data', (x) =>
+      @setPosition 'left', "#{x}px"
+    @inPorts.y.on 'data', (y) =>
+      @setPosition 'top', "#{y}px"
+    @inPorts.z.on 'data', (z) =>
+      @setPosition 'zIndex', z
+
+  setPosition: (attr, value) ->
+    console.log attr, value, @element.style
+    @element.style.position = 'absolute'
+    @element.style[attr] = value
+
+exports.getComponent = -> new MoveElement


Make the TextEditor setters call update()

--- src/text-editor.coffee
+++ src/text-editor.coffee
@@ -123,7 +123,7 @@
     super

     {
-      @softTabs, @firstVisibleScreenRow, @firstVisibleScreenColumn, initialLine, initialColumn, @tabLength,
+      @softTabs, @firstVisibleScreenRow, @firstVisibleScreenColumn, initialLine, initialColumn, tabLength,
       @softWrapped, @decorationManager, @selectionsMarkerLayer, @buffer, suppressCursorCreation,
       @mini, @placeholderText, lineNumberGutterVisible, @largeFileMode, @clipboard,
       @assert, grammar, @showInvisibles, @autoHeight, @scrollPastEnd, @editorWidthInChars,
@@ -147,7 +147,7 @@
     @scrollPastEnd ?= true
     @showInvisibles ?= true
     @softTabs ?= true
-    @tabLength ?= 2
+    tabLength ?= 2
     @backUpBeforeSaving ?= false
     @autoIndent ?= true
     @autoIndentOnPaste ?= true
@@ -156,7 +156,7 @@

     @buffer ?= new TextBuffer
     @tokenizedBuffer ?= new TokenizedBuffer({
-      grammar, @tabLength, @buffer, @largeFileMode, @assert
+      grammar, tabLength, @buffer, @largeFileMode, @assert
     })
     @displayLayer ?= @buffer.addDisplayLayer()
     @displayLayer.setTextDecorationLayer(@tokenizedBuffer)
@@ -188,46 +188,103 @@
       visible: lineNumberGutterVisible

   update: (params) ->
-    {
-      softTabs, tabLength, softWrapped, mini, placeholderText, lineNumberGutterVisible,
-      showInvisibles, editorWidthInChars, scrollPastEnd, autoHeight
-    } = params
-
     resetDisplayLayer = false

-    if softTabs? and softTabs isnt @softTabs
-      @setSoftTabs(softTabs)
-
-    if tabLength? and tabLength isnt @tabLength
-      @setTabLength(tabLength, false)
-      resetDisplayLayer = true
-
-    if softWrapped? and softWrapped isnt @softWrapped
-      @setSoftWrapped(softWrapped, false)
-      resetDisplayLayer = true
-
-    if mini? and mini isnt @mini
-      @setMini(mini)
-
-    if placeholderText? and placeholderText isnt @placeholderText
-      @setPlaceholderText(placeholderText)
-
-    if lineNumberGutterVisible? and lineNumberGutterVisible isnt @lineNumberGutterVisible
-      @setLineNumberGutterVisible(lineNumberGutterVisible)
-
-    if showInvisibles? and showInvisibles isnt @showInvisibles
-      @showInvisibles = showInvisibles
-      resetDisplayLayer = true
-
-    if editorWidthInChars? and editorWidthInChars isnt @editorWidthInChars
-      @setEditorWidthInChars(editorWidthInChars, false)
-      resetDisplayLayer = true
-
-    if scrollPastEnd? and scrollPastEnd isnt @scrollPastEnd
-      @setScrollPastEnd(scrollPastEnd)
-
-    if autoHeight? and autoHeight isnt @autoHeight
-      @setAutoHeight(autoHeight)
+    for param in Object.keys(params)
+      value = params[param]
+
+      switch param
+        when 'softTabs'
+          if value isnt @softTabs
+            @softTabs = value
+
+        when 'atomicSoftTabs'
+          if value isnt @atomicSoftTabs
+            @atomicSoftTabs = value
+            resetDisplayLayer = true
+
+        when 'tabLength'
+          if value isnt @tokenizedBuffer.getTabLength()
+            @tokenizedBuffer.setTabLength(value)
+            resetDisplayLayer = true
+
+        when 'softWrapped'
+          if value isnt @softWrapped
+            @softWrapped = value
+            @emitter.emit 'did-change-soft-wrapped', @isSoftWrapped()
+            resetDisplayLayer = true
+
+        when 'softWrapHangingIndentLength'
+          if value isnt @softWrapHangingIndentLength
+            @softWrapHangingIndentLength = value
+            resetDisplayLayer = true
+
+        when 'softWrapAtPreferredLineLength'
+          if value isnt @softWrapAtPreferredLineLength
+            @softWrapAtPreferredLineLength = value
+            resetDisplayLayer = true
+
+        when 'preferredLineLength'
+          if value isnt @preferredLineLength
+            @preferredLineLength = value
+            resetDisplayLayer = true
+
+        when 'mini'
+          if value isnt @mini
+            @mini = value
+            @emitter.emit 'did-change-mini', value
+            resetDisplayLayer = true
+
+        when 'placeholderText'
+          if value isnt @placeholderText
+            @placeholderText = value
+            @emitter.emit 'did-change-placeholder-text', value
+
+        when 'lineNumberGutterVisible'
+          if value isnt @lineNumberGutterVisible
+            if value
+              @lineNumberGutter.show()
+            else
+              @lineNumberGutter.hide()
+            @emitter.emit 'did-change-line-number-gutter-visible', @lineNumberGutter.isVisible()
+
+        when 'showIndentGuide'
+          if value isnt @showIndentGuide
+            @showIndentGuide = value
+            resetDisplayLayer = true
+
+        when 'showLineNumbers'
+          if value isnt @showLineNumbers
+            @showLineNumbers = value
+            @presenter?.didChangeShowLineNumbers()
+
+        when 'showInvisibles'
+          if value isnt @showInvisibles
+            @showInvisibles = value
+            resetDisplayLayer = true
+
+        when 'invisibles'
+          if value isnt @invisibles
+            @invisibles = value
+            resetDisplayLayer = true
+
+        when 'editorWidthInChars'
+          if value > 0 and value isnt @editorWidthInChars
+            @editorWidthInChars = value
+            resetDisplayLayer = true if @isSoftWrapped()
+
+        when 'scrollPastEnd'
+          if value isnt @scrollPastEnd
+            @scrollPastEnd = value
+            @presenter?.didChangeScrollPastEnd()
+
+        when 'autoHeight'
+          if value isnt @autoHeight
+            @autoHeight = value
+            @editorElement?.didChangeAutoHeight()
+
+        else
+          throw new TypeError("Invalid TextEditor parameter: '#{param}'")

     if resetDisplayLayer
       @resetDisplayLayer()
@@ -615,10 +672,7 @@
   setVisible: (visible) -> @tokenizedBuffer.setVisible(visible)

   setMini: (mini) ->
-    if mini isnt @mini
-      @mini = mini
-      @resetDisplayLayer()
-      @emitter.emit 'did-change-mini', @mini
+    @update({mini})
     @mini

   isMini: -> @mini
@@ -629,14 +683,7 @@
   onDidChangeMini: (callback) ->
     @emitter.on 'did-change-mini', callback

-  setLineNumberGutterVisible: (lineNumberGutterVisible) ->
-    unless lineNumberGutterVisible is @lineNumberGutter.isVisible()
-      if lineNumberGutterVisible
-        @lineNumberGutter.show()
-      else
-        @lineNumberGutter.hide()
-      @emitter.emit 'did-change-line-number-gutter-visible', @lineNumberGutter.isVisible()
-    @lineNumberGutter.isVisible()
+  setLineNumberGutterVisible: (lineNumberGutterVisible) -> @update({lineNumberGutterVisible})

   isLineNumberGutterVisible: -> @lineNumberGutter.isVisible()

@@ -676,12 +723,7 @@
   #
   # * `editorWidthInChars` A {Number} representing the width of the
   # {TextEditorElement} in characters.
-  setEditorWidthInChars: (editorWidthInChars, resetDisplayLayer=true) ->
-    if editorWidthInChars > 0
-      previousWidthInChars = @editorWidthInChars
-      @editorWidthInChars = editorWidthInChars
-      if editorWidthInChars isnt previousWidthInChars and @isSoftWrapped()
-        @resetDisplayLayer() if resetDisplayLayer
+  setEditorWidthInChars: (editorWidthInChars) -> @update({editorWidthInChars})

   # Returns the editor width in characters.
   getEditorWidthInChars: ->
@@ -2744,7 +2786,7 @@
   # Essential: Enable or disable soft tabs for this editor.
   #
   # * `softTabs` A {Boolean}
-  setSoftTabs: (@softTabs) -> @softTabs
+  setSoftTabs: (@softTabs) -> @update({softTabs})

   # Returns a {Boolean} indicating whether atomic soft tabs are enabled for this editor.
   hasAtomicSoftTabs: -> @atomicSoftTabs
@@ -2752,10 +2794,7 @@
   # Enable or disable atomic soft tabs for this editor.
   #
   # * `atomicSoftTabs` A {Boolean}
-  setAtomicSoftTabs: (atomicSoftTabs) ->
-    return if atomicSoftTabs is @atomicSoftTabs
-    @atomicSoftTabs = atomicSoftTabs
-    @resetDisplayLayer()
+  setAtomicSoftTabs: (atomicSoftTabs) -> @update({atomicSoftTabs})

   # Essential: Toggle soft tabs for this editor
   toggleSoftTabs: -> @setSoftTabs(not @getSoftTabs())
@@ -2763,19 +2802,14 @@
   # Essential: Get the on-screen length of tab characters.
   #
   # Returns a {Number}.
-  getTabLength: -> @tabLength
+  getTabLength: -> @tokenizedBuffer.getTabLength()

   # Essential: Set the on-screen length of tab characters. Setting this to a
   # {Number} This will override the `editor.tabLength` setting.
   #
   # * `tabLength` {Number} length of a single tab. Setting to `null` will
   #   fallback to using the `editor.tabLength` config setting
-  setTabLength: (tabLength, resetDisplayLayer=true) ->
-    return if tabLength is @tabLength
-
-    @tabLength = tabLength
-    @tokenizedBuffer.setTabLength(@tabLength)
-    @resetDisplayLayer() if resetDisplayLayer
+  setTabLength: (tabLength) -> @update({tabLength})

   # Returns a {Boolean} indicating whether atomic soft tabs are enabled for this editor.
   doesShowInvisibles: -> @showInvisibles
@@ -2783,10 +2817,7 @@
   # Enable or disable invisible character substitution for this editor.
   #
   # * `showInvisibles` A {Boolean}
-  setShowInvisibles: (showInvisibles) ->
-    return if showInvisibles is @showInvisibles
-    @showInvisibles = showInvisibles
-    @resetDisplayLayer()
+  setShowInvisibles: (showInvisibles) -> @update({showInvisibles})

   # Returns an {Object} representing the current invisible character
   # substitutions for this editor. See {::setInvisibles}.
@@ -2801,24 +2832,15 @@
   # * `invisibles` An {Object} whose keys are names of invisible characters
   #   and whose values are 1-character {Strings}s to display in place of those
   #   invisble characters
-  setInvisibles: (invisibles) ->
-    return if invisibles is @invisibles
-    @invisibles = invisibles
-    @resetDisplayLayer()
+  setInvisibles: (invisibles) -> @update({invisibles})

   doesShowIndentGuide: -> @showIndentGuide

-  setShowIndentGuide: (showIndentGuide) ->
-    return if showIndentGuide is @showIndentGuide
-    @showIndentGuide = showIndentGuide
-    @resetDisplayLayer()
-
-  setSoftWrapIndentLength: (softWrapIndentLength) ->
-    return if softWrapIndentLength is @softWrapIndentLength
-    @softWrapIndentLength = softWrapIndentLength
-    @resetDisplayLayer()
-
-  getSoftWrapIndentLength: -> @softWrapIndentLength
+  setShowIndentGuide: (showIndentGuide) -> @update({showIndentGuide})
+
+  setSoftWrapIndentLength: (softWrapHangingIndentLength) -> @update({softWrapHangingIndentLength})
+
+  getSoftWrapIndentLength: -> @softWrapHangingIndentLength

   # Extended: Determine if the buffer uses hard or soft tabs.
   #
@@ -2869,27 +2891,15 @@
   # * `softWrapped` A {Boolean}
   #
   # Returns a {Boolean}.
-  setSoftWrapped: (softWrapped, resetDisplayLayer=true) ->
-    if softWrapped isnt @softWrapped
-      @softWrapped = softWrapped
-      @resetDisplayLayer() if resetDisplayLayer
-      softWrapped = @isSoftWrapped()
-      @emitter.emit 'did-change-soft-wrapped', softWrapped
-      softWrapped
-    else
-      @isSoftWrapped()
-
-  setSoftWrapAtPreferredLineLength: (softWrapAtPreferredLineLength) ->
-    return if softWrapAtPreferredLineLength is @softWrapAtPreferredLineLength
-    @softWrapAtPreferredLineLength = softWrapAtPreferredLineLength
-    @resetDisplayLayer()
+  setSoftWrapped: (softWrapped) ->
+    @update({softWrapped})
+    @isSoftWrapped()
+
+  setSoftWrapAtPreferredLineLength: (softWrapAtPreferredLineLength) -> @update({softWrapAtPreferredLineLength})

   doesSoftWrapAtPreferredLineLength: -> @softWrapAtPreferredLineLength

-  setPreferredLineLength: (preferredLineLength) ->
-    return if preferredLineLength is @preferredLineLength
-    @preferredLineLength = preferredLineLength
-    @resetDisplayLayer()
+  setPreferredLineLength: (preferredLineLength) -> @update({preferredLineLength})

   getPreferredLineLength: -> @preferredLineLength

@@ -3424,10 +3434,7 @@
   #
   # * `scrollPastEnd` a {Boolean} indicating whether to enable or disable
   #   scrolling past the end.
-  setScrollPastEnd: (scrollPastEnd) ->
-    if scrollPastEnd isnt @scrollPastEnd
-      @scrollPastEnd = scrollPastEnd
-      @presenter?.didChangeScrollPastEnd()
+  setScrollPastEnd: (scrollPastEnd) -> @update({scrollPastEnd})

   # Experimental: Does this editor allow scrolling past the last line?
   #
@@ -3448,10 +3455,7 @@
   # Experimental: Show or hide the line numbers in the editor's gutter.
   #
   # * `showLineNumbers` a {Boolean} indicating whether to show the line numbers.
-  setShowLineNumbers: (showLineNumbers) ->
-    if showLineNumbers isnt @showLineNumbers
-      @showLineNumbers = showLineNumbers
-      @presenter?.didChangeShowLineNumbers()
+  setShowLineNumbers: (showLineNumbers) -> @update({showLineNumbers})

   # Experimental: Are line numbers enabled for this editor?
   #
@@ -3517,17 +3521,13 @@
   # Essential: Retrieves the greyed out placeholder of a mini editor.
   #
   # Returns a {String}.
-  getPlaceholderText: ->
-    @placeholderText
+  getPlaceholderText: -> @placeholderText

   # Essential: Set the greyed out placeholder of a mini editor. Placeholder text
   # will be displayed when the editor has no content.
   #
   # * `placeholderText` {String} text that is displayed when the editor has no content.
-  setPlaceholderText: (placeholderText) ->
-    return if @placeholderText is placeholderText
-    @placeholderText = placeholderText
-    @emitter.emit 'did-change-placeholder-text', @placeholderText
+  setPlaceholderText: (placeholderText) -> @update({placeholderText})

   pixelPositionForBufferPosition: (bufferPosition) ->
     Grim.deprecate("This method is deprecated on the model layer. Use `TextEditorElement::pixelPositionForBufferPosition` instead")
@@ -3589,10 +3589,7 @@

   getAutoHeight: -> @autoHeight

-  setAutoHeight: (autoHeight) ->
-    if autoHeight isnt @autoHeight
-      @autoHeight = autoHeight
-      @editorElement?.didChangeAutoHeight()
+  setAutoHeight: (autoHeight) -> @update({autoHeight})

   setWidth: (width, reentrant=false) ->
     if reentrant


Proxy raw from template to builder.

Proxy raw from template to builder.

--- src/stdlib/template.coffee
+++ src/stdlib/template.coffee
@@ -39,6 +39,9 @@
   subview: (args...) ->
     @builder.subview.apply(@builder, args)

+  raw: (text) ->
+    @builder.raw(text)
+
   bindEvents: (view) ->
     for eventName in this.constructor.events
       selector = "[#{eventName}]"


Add clothes-detail.coffee

Add clothes-detail.coffee

error: pathspec 'public/assets/coffee/clothes-detail.coffee' did not match any file(s) known to git

--- public/assets/coffee/clothes-detail.coffee
+++ public/assets/coffee/clothes-detail.coffee
@@ -0,0 +1,15 @@
+$ ->
+  STATUS = { choose_address: 49 }
+  $('#btn-choose-clothes:not(.disabled)').click (e) ->
+    e.preventDefault()
+    $this = $(@)
+    $this.addClass('disabled')
+    url = $this.prop('href')
+    $.ajax url,
+      type: 'PUT'
+      data: { status_id: STATUS.choose_address, clothes_code: $this.data('clothes-code') }
+      success: (data, textStatus, jqXHR) ->
+        location.href = url
+      error: (jqXHR, textStatus, errorThrown) ->
+      complete: (jqXHR, textStatus) ->
+        $this.removeClass('disabled')


serve app_core.js

serve app_core.js

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


Populate the hotel slug field properly for key and mouse selection


rails_apps_composer: add analytics

rails_apps_composer: add analytics

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

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


chat: many bugs and console.logs introduced (wip)

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


Emit needed to wait for ws and authorization also

Before, emit would send message to broker server even
when the channel had not been subscribed yet.

Write a helper `performTask` to handle all delayness to
ensure the task is executed at the right time.


Add hyperlink and tweak on showing origin channel


Fix: re-add loadUserData to kpis.svc load method

Fixes sso_session not being applied to first kpis load.


Replace deprecated method from BrowserWindow.loadUrl to loadURL

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


Fix unclickable chevron in docs drawer

Fix unclickable chevron in docs drawer

--- app/views/play/level/tome/SpellPaletteView.coffee
+++ app/views/play/level/tome/SpellPaletteView.coffee
@@ -338,8 +338,7 @@
     @render()

   onSectionHeaderClick: (e) ->
-
-    $et = @$(e.target)
+    $et = @$(e.currentTarget)
     target = @$($et.attr('data-panel'))
     isCollapsed = !target.hasClass('in')
     console.log "O", target[0], isCollapsed


hide startchat text displayed to customer

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


animate-on-scroll

animate-on-scroll

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/Bit-Bahia/bitbahia-rails.git/'


add geoname collection

add geoname collection

error: pathspec 'imports/collections/geonames.coffee' did not match any file(s) known to git

--- imports/collections/geonames.coffee
+++ imports/collections/geonames.coffee
@@ -0,0 +1 @@
+module.exports = new Meteor.Collection "geonames"


footer: removed new window targets

footer: removed new window targets


client/socialapi: cacheable works for KodingBot


Remove dead code

Remove dead code

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


- Fallback default app icon if original icon doesnt exists.


'fix' for slug problem. needs further investigation

--- client/app/Applications/Apps.kdapplication/Views/AppsListItemView.coffee
+++ client/app/Applications/Apps.kdapplication/Views/AppsListItemView.coffee
@@ -82,6 +82,6 @@

{a[href="#"]{#(title)}}

{{@utils.shortenText #(body)}}

-      Application Page →
+      Application Page →

     """


CredentialStore: fetchers for both mongo and sneaker

If sneaker is enabled and data not found in sneaker and found in mongo we are syncing sneaker with mongo, so the next time request comes for fetch data that will be coming from sneaker instead. This one is covering the requirements of migration for the existing credentials.

--- workers/social/lib/social/models/computeproviders/credentialstore.coffee
+++ workers/social/lib/social/models/computeproviders/credentialstore.coffee
@@ -57,3 +57,51 @@

   # STORE ENDS ----------------------------------------------------------------

+
+  # FETCH BEGINS --------------------------------------------------------------
+
+  fetchFromSneaker = (client, pathName, callback) ->
+
+    SocialCredential.get client, { pathName }, (err, data) ->
+      return callback err  if err
+      callback null, { meta: data.data, identifier: pathName }
+
+
+  fetchFromMongo = (identifier, callback) ->
+
+    JCredentialData.one { identifier }, (err, data) ->
+      return callback err  if err
+      return callback new KodingError 'No data found'  unless data
+      callback null, data
+
+
+  @fetch = (client, identifier, callback) ->
+
+    if @SNEAKER_SUPPORTED
+
+      fetchFromSneaker client, identifier, (err, data) ->
+
+        if err
+          failedToFetchFromSneaker = yes
+          return callback err  unless /^NoSuchKey/.test err.description
+
+        if data
+          return callback null, data
+
+        fetchFromMongo identifier, (err, data) ->
+          return callback err  if err
+
+          if failedToFetchFromSneaker
+
+            console.log "Data couldn't found on sneaker, uploading..."
+            storeOnSneaker client, data, (err) ->
+              console.log "Data sync with sneaker:", if err
+              then err else 'success'
+
+          callback null, data
+
+    else
+
+      fetchFromMongo identifier, callback
+
+  # FETCH ENDS ----------------------------------------------------------------


Rough draft of working calibration menu

Rough draft of working calibration menu

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/yuvilio/farmbot-web-app.git/'


Removed a log.

Removed a log.

--- test/server/functional/article.spec.coffee
+++ test/server/functional/article.spec.coffee
@@ -33,7 +33,6 @@
     new_article = _.clone(articles[0])
     new_article.body = '...'
     request.post {uri:url, json:new_article}, (err, res, body) ->
-      console.log 'new article?', body
       expect(res.statusCode).toBe(200)
       expect(body.version.major).toBe(0)
       expect(body.version.minor).toBe(1)


add autoload file required by compound

add autoload file required by compound

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

--- config/autoload.coffee
+++ config/autoload.coffee
@@ -0,0 +1,2 @@
+module.exports = (compound) ->
+    [ require('jugglingdb') ]


commenting and safety check

commenting and safety check

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


move routes to coffeescript

move routes to coffeescript

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

--- config/routes.coffee
+++ config/routes.coffee
@@ -0,0 +1,12 @@
+exports.routes = (map) ->
+    map.get('/', 'applications#index')
+    map.get('/api/applications', 'applications#applications')
+
+    map.get('/authenticated', 'passport#isAuthenticated')
+    map.post('/register', 'passport#register')
+    map.post('/login', 'passport#login')
+    map.get('/logout', 'passport#logout')
+
+    map.get('/api/users', 'applications#users')
+    map.get('/clean', 'applications#clean')
+    map.get('/init', 'applications#init')


Make 6to5 first cache segment

Make 6to5 first cache segment

Makes it easier to blow away if needed.

--- src/6to5.coffee
+++ src/6to5.coffee
@@ -90,7 +90,7 @@
   shasum.digest('hex')

 cacheDir = path.join(fs.absolute('~/.atom'), 'compile-cache')
-jsCacheDir = path.join(cacheDir, create6to5VersionAndOptionsDigest(to5.version, defaultOptions), 'js')
+jsCacheDir = path.join(cacheDir, 'js', create6to5VersionAndOptionsDigest(to5.version, defaultOptions))

 getCachePath = (sourceCode) ->
   digest = crypto.createHash('sha1').update(sourceCode, 'utf8').digest('hex')


Set icons for collections in admin panel.

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


Update the ViewModel class to be a component.

Making the ViewModel class a component allows us to boot and register
the class at boot-time, which gives it access to application wide busses
for using providers, services, and messaging.

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


Copy fonts into dist

Copy fonts into dist

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


Use KD.error instead console.error

Use KD.error instead console.error


EditorPane: Much better way to set editorMode, based on extension

--- client/landing/CollaborativeWorkspace/panes/collaborativeeditorpane.coffee
+++ client/landing/CollaborativeWorkspace/panes/collaborativeeditorpane.coffee
@@ -31,7 +31,7 @@
     @firepad.setText content  if @amIHost
     @codeMirrorEditor.scrollTo 0, 0
     @emit "OpenedAFile", file, content
-    @setEditorMode file
+    @setEditorMode file.getExtension()

   save: ->
     file        = @getData()
@@ -67,7 +67,7 @@
         "Ctrl-S"      : @bound "handleSave"

     @setEditorTheme()
-    @setEditorMode()
+    @setEditorMode 'html'

   handleSave: ->
     @save()
@@ -86,13 +86,11 @@
     document.head.appendChild link
     @codeMirrorEditor.setOption "theme", "ambiance"

-  setEditorMode:(file) ->
-    file or= @getOption 'file'
+  setEditorMode:(fileExtension) ->

-    return  unless file
+    return  unless fileExtension

     CodeMirror.modeURL = "#{cdnRoot}/mode/%N/%N.js"
-    fileExtension      = file.getExtension()
     syntaxHandler      = __aceSettings.syntaxAssociations[fileExtension]
     modeName           = null
     corrections        =
@@ -100,6 +98,7 @@
       json             : "javascript"
       js               : "javascript"
       go               : "go"
+      coffee           : "coffeescript"

     if corrections[fileExtension]
       modeName = corrections[fileExtension]


client: remove unsused neo4j facets list

--- client/Social/Members/ContentDisplays/ContentDisplayControllerMember.coffee
+++ client/Social/Members/ContentDisplays/ContentDisplayControllerMember.coffee
@@ -1,15 +1,4 @@
 class ContentDisplayControllerMember extends KDViewController
-
-  neo4jFacets = [
-    "JLink"
-    "JBlogPost"
-    "JTutorial"
-    "JNewStatusUpdate"
-    "JComment"
-    "JOpinion"
-    "JDiscussion"
-    "JCodeSnip"
-  ]

   constructor:(options={}, data)->


in upload error section user can see trailer section


activity feed: rollbar if lastItemCreatedAt is empty


added browser version

added browser version

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

--- heterarchy.coffee
+++ heterarchy.coffee
@@ -0,0 +1,95 @@
+initHeterarchy = (exports) ->
+    {head, tail, map, find, some, without, isEmpty, every, memoize, reject,
+     partial, isEqual} = _
+
+    assert = (value, error) ->
+        if not value
+            throw new Error(if error? then error else "Assertion failed")
+
+    exports.multi = (bases...) ->
+        generate merge map(bases, mro).concat [bases]
+
+    generate = memoize (linearization) ->
+        next = head linearization
+        if isEqual linearization, hierarchy next
+            next
+        else
+            class Result extends generate tail linearization
+                __mro__: linearization
+                constructor: reparent next, @, next::constructor
+                copyOwn next, @
+                copyOwn next::, @::, partial reparent, next, @
+
+    copyOwn = (from, to, project = (x) -> x) ->
+        for own key, value of from
+            if not to.hasOwnProperty key
+                to[key] = project value
+        to
+
+    reparent = (oldklass, newklass, value) ->
+        if value not instanceof Function
+            value
+        else if value is oldklass::constructor and inherited(oldklass) is Object
+            superctor = inherited(newklass)::constructor
+            ->
+                superctor.apply @, arguments
+                value.apply @, arguments
+        else
+            newsuper = inherited(newklass)::
+            oldsuper = oldklass.__super__
+            ->
+                oldklass.__super__ = newsuper
+                try
+                    value.apply @, arguments
+                finally
+                    oldklass.__super__ = oldsuper
+
+    merge = (inputs) ->
+        while not isEmpty inputs
+            next = find (map inputs, head), (candidate) ->
+                every inputs, (input) -> candidate not in tail input
+            assert next?, "Inconsistent multiple inheritance"
+            inputs = reject map(inputs, (lst) -> without lst, next), isEmpty
+            next
+
+    isJavaScriptClass = (cls) ->
+        return cls in [
+            Array
+            Boolean
+            Date
+            Error
+            Function
+            Number
+            RegExp
+            String
+            Object
+        ]
+
+    exports.mro = mro = (cls) ->
+        if not cls? or not cls::?
+            []
+        else if not cls::hasOwnProperty '__mro__'
+            result = [cls].concat mro inherited(cls)
+            cls::__mro__ = result unless isJavaScriptClass cls
+            result
+        else
+            cls::__mro__
+
+    exports.inherited = inherited = (cls) ->
+        Object.getPrototypeOf(cls.prototype)?.constructor
+
+    exports.hierarchy = hierarchy = (cls) ->
+        if not cls?
+            []
+        else
+            [cls].concat hierarchy inherited cls
+
+    exports.isinstance = (obj, classes...) ->
+        exports.issubclass obj?.constructor, classes...
+
+    exports.issubclass = (klass, classes...) ->
+        linearization = mro klass
+        some classes, (cls) -> cls in linearization
+
+window.heterarchy = {}
+initHeterarchy(window.heterarchy)


Added two way binding examples

Added two way binding examples

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

--- examples/two_way_bindings.coffee
+++ examples/two_way_bindings.coffee
@@ -0,0 +1,37 @@
+Serenade.view 'form', '''
+  form
+    h3 "Fill in stuff here"
+    p
+      label
+        "Title"
+        input[type="text" binding:keyup=@title]
+    p
+      label
+        "Active"
+        input[type="checkbox" binding:change=@active]
+    p
+      label
+        "Body"
+        br
+        textarea[binding:keyup=@body cols="60" rows="8"]
+'''
+
+Serenade.view 'result', '''
+  div
+    h3 "See this change magically"
+    p "Title: " @title
+    p "Active: " @active
+    p "Body: " @body
+'''
+
+class Post extends Serenade.Model
+  @property 'title'
+  @property 'active', format: (active) -> if active then "yes" else "no"
+  @property 'body'
+
+window.aPost = new Post()
+
+window.onload = ->
+  document.body.appendChild Serenade.render('form', aPost)
+  document.body.appendChild document.createElement("hr")
+  document.body.appendChild Serenade.render('result', aPost)


add ircapi.coffee

add ircapi.coffee

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

--- scripts/ircapi.coffee
+++ scripts/ircapi.coffee
@@ -0,0 +1,52 @@
+# Desjcription:
+#   IRC API
+#   @see http-say.coffee
+#   @see http-post-say.coffee
+#
+# Commands:
+#
+# URLS:
+#   GET /hubot/irc/send?message=<message>[&room=<room>&type=<type]
+#   POST /hubot/irc/send
+#     message = <message>
+#     room = <room>
+#
+#   curl -X POST http://localhost:8080/hubot/send -d message=lala -d room='#dev'
+#
+
+querystring = require('querystring')
+
+createUser = (robot, room, type) ->
+  console.log room
+  user = robot.brain.userForId 'broadcast'
+  user.room = room if room
+  user.type = type ? 'groupchat'
+  return user
+
+send = (robot, res, user, message) ->
+  if message
+    robot.send user, "#{message}"
+
+  robot.logger.info "Message '#{message}' received for room #{user.room}"
+
+  res.writeHead 200, {'Content-Type': 'text/plain'}
+  res.end "send #{message}"
+
+
+module.exports = (robot) ->
+  robot.router.get "/irc/send", (req, res) ->
+    query = querystring.parse(req._parsedUrl.query)
+
+    room = '#' + query.room if query.room
+    user = createUser robot, room, query.type
+    message = query.message
+
+    send robot, res, user, message
+
+  robot.router.post "/irc/send", (req, res) ->
+
+    user = createUser robot, req.body.room, req.body.type
+    message = req.body.message
+
+    send robot, res, user, message
+


Remove commented lines.

Remove commented lines.

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/gmist/five-studio2.git/'


Check if livechat command exists

Check if livechat command exists

--- packages/rocketchat-livechat/app/client/lib/_visitor.coffee
+++ packages/rocketchat-livechat/app/client/lib/_visitor.coffee
@@ -35,8 +35,7 @@
 	subscribeToRoom = (roomId) ->
 		msgStream.on roomId, (msg) ->
 			if msg.t is 'command'
-				console.log msg
-				Commands[msg.msg]()
+				Commands[msg.msg]?()
 			else if msg.t isnt 'livechat_video_call'
 				ChatMessage.upsert { _id: msg._id }, msg


added keyboard movement

added keyboard movement

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


Routes blog

Routes blog

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


get nearest package.json starting at project root, not pwd

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


recording time for previous dates fixed to 1200 hrs

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


Remove default value for new levels

Remove default value for new levels

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


chore(build):second fix of filters indentation

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


Embedded RocketBot in ALL ROOMS

Embedded RocketBot in ALL ROOMS

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

--- server/methods/sendMessage.coffee
+++ server/methods/sendMessage.coffee
@@ -0,0 +1,16 @@
+Meteor.methods
+	sendMessage: (message) ->
+
+		if not Meteor.userId()
+			throw new Meteor.Error('invalid-user', "[methods] sendMessage -> Invalid user")
+
+		console.log '[methods] sendMessage -> '.green, 'userId:', Meteor.userId(), 'arguments:', arguments
+
+		user = Meteor.users.findOne Meteor.userId(), fields: username: 1
+
+		room = Meteor.call 'canAccessRoom', message.rid, user._id
+
+		if not room
+			return false
+
+		RocketChat.sendMessage user, message, room


Clearer handling of @showing in UI component.

--- content_scripts/ui_component.coffee
+++ content_scripts/ui_component.coffee
@@ -1,7 +1,7 @@
 class UIComponent
   iframeElement: null
   iframePort: null
-  showing: true
+  showing: null
   showStyle: "display: block;"
   hideStyle: "display: none;"

@@ -12,7 +12,8 @@
     @iframeElement.src = chrome.runtime.getURL iframeUrl
     @iframeElement.addEventListener "load", => @openPort()
     document.documentElement.appendChild @iframeElement
-    # Hide iframe, but don't interfere with the focus.
+    @showing = true # The iframe is visible now.
+    # Hide the iframe, but don't interfere with the focus.
     @hide false

   # Open a port and pass it to the iframe via window.postMessage.
@@ -44,7 +45,6 @@
   hide: (focusWindow=true)->
     if @showing
       @iframeElement.setAttribute "style", @hideStyle
-      # TODO(smblott) Is window always the right thing to focus, here?
       window.focus() if focusWindow
       @showing = false


Added missing commas to JS config for datatables.

Oddly, the code still worked without them !

--- app/assets/javascripts/events.js.coffee
+++ app/assets/javascripts/events.js.coffee
@@ -3,9 +3,9 @@
   $('#events').dataTable
     order: [[3, 'asc']],
     columnDefs: [
-                  { orderable: false, targets: -1 }
-                  { orderData: 2, targets: 3 }
-                  { orderData: 4, targets: 5 }
+                  { orderable: false, targets: -1 },
+                  { orderData: 2, targets: 3 },
+                  { orderData: 4, targets: 5 },
                   { visible: false, targets: [2,4] }
                 ]


Change form action attribute upon selecting search type

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


Started javascript tests for Repository Branch

Signed-off-by: Pedro Scocco <41cc21cceda2a9d6d5957ab7e4855513918a62bb@gmail.com>

error: pathspec 'spec/javascripts/repository/branch_spec.js.coffee' did not match any file(s) known to git

--- spec/javascripts/repository/branch_spec.js.coffee
+++ spec/javascripts/repository/branch_spec.js.coffee
@@ -0,0 +1,7 @@
+#= require application
+
+describe "Branch#constructor", ->
+  it "should construct a branch", ->
+    a = new Repository.Branch()
+    a.names.should.deep.equal({})
+    assert.isNull(a.request)


schemas

schemas

error: pathspec 'both/collections/_schemas.coffee' did not match any file(s) known to git

--- both/collections/_schemas.coffee
+++ both/collections/_schemas.coffee
@@ -0,0 +1 @@
+@Schemas = {}


First release

First release

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


better error handling

better error handling

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


Remove script tags.

Remove script tags.

--- core/htdocs_source/src/pods/oxivalue-format/component.coffee
+++ core/htdocs_source/src/pods/oxivalue-format/component.coffee
@@ -47,6 +47,7 @@
         $el
             .html e
             .find ':cleanup'
+        $el.find('script').remove()
         return $el.html()


transmit message in #times_xxx room to #timeline.

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

--- scripts/timelines.coffee
+++ scripts/timelines.coffee
@@ -0,0 +1,14 @@
+# Description:
+#   times_xxx のつぶやきを #timeline に流す
+#
+# Commands:
+#
+# Authors:
+#   nagachika
+
+
+module.exports = (robot) ->
+  robot.hear /./, (msg) ->
+    if msg.message.room.match(/^times_/)
+      msg.envelope.room = "#timeline"
+      msg.send "#{msg.message.user.name} at ##{msg.message.room} : #{msg.message.text}"


Add main package file

Add main package file

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

--- src/brave-mouse/index.coffee
+++ src/brave-mouse/index.coffee
@@ -0,0 +1 @@
+braveMouse = module.exports = {}


Workaround for loadding spinner getting stuck when seeking past an ad and leave the mouse button down.

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/OnCircle/gbox-video-player.git/'


Don't log scaffolded files.

Don't log scaffolded files.

--- src/commands/scaffold.coffee
+++ src/commands/scaffold.coffee
@@ -103,7 +103,7 @@
         path + ".#{extension}"
       .map (path) ->
         file = {type, extension, path, data}
-        logger.info "Generating", file
+        logger.debug "Generating", file
         file
     strings.concat(nonStrings)


minor fix

minor 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/AdiGajbhiye/keyboardninja.git/'


Bugfix: Issue with collision warning

Bugfix: Issue with collision warning

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


Comment transform of ChatRoom

Comment transform of ChatRoom

--- lib/collections.coffee
+++ lib/collections.coffee
@@ -1,16 +1,17 @@
 @UserFullName = {}

 @ChatMessage = new Meteor.Collection 'data.ChatMessage'
-@ChatRoom = new Meteor.Collection 'data.ChatRoom',
-	transform: (room) ->
-		if room.t is 'd' and Meteor.userId()?
-			if not UserFullName[Meteor.userId()]?
-				user = Meteor.users.findOne Meteor.userId()
-				UserFullName[Meteor.userId()] = user.name
+@ChatRoom = new Meteor.Collection 'data.ChatRoom'
+# ,
+# 	transform: (room) ->
+# 		if room.t is 'd' and Meteor.userId()?
+# 			if not UserFullName[Meteor.userId()]?
+# 				user = Meteor.users.findOne Meteor.userId()
+# 				UserFullName[Meteor.userId()] = user.name

-			regex = new RegExp('\\|?' + UserFullName[Meteor.userId()] + '\\|?')
-			room.name = room.name.replace(regex, '')
+# 			regex = new RegExp('\\|?' + UserFullName[Meteor.userId()] + '\\|?')
+# 			room.name = room.name.replace(regex, '')

-		return room
+# 		return room

 @ChatSubscription = new Meteor.Collection 'data.ChatSubscription'


new geometry file

new geometry file

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

--- src/game/geometry.coffee
+++ src/game/geometry.coffee
@@ -0,0 +1,36 @@
+#
+# geometry.coffee
+#
+# Role: define default geometry of games
+#
+
+{my} = require '../my'
+{vector} = require '../god/vector'
+
+width = my.page_dimensions[vector.size.width]
+
+exports.game = {
+  name: "iPad Geometry"
+
+  # Geometry
+  screen: my.page_dimensions
+  width: width
+  column_width: width / 2
+  fill: 'white'
+  name_style: {font_size: 36}
+
+  grid_size: my.column_1_width
+  cell_count: 8
+  cell_size: (world) -> world.get('grid_size') / world.get('cell_count')
+
+  margin: my.margin
+  outer_width: (world) -> world.get('width') + 2 * world.get('padding')
+  inner_width: (world) -> world.get('width') - 2 * world.get('margin')
+
+  available_width: (world) ->
+    world.up.get('inner_width') - 2 * world.get('padding')
+  set_outer_width: (world, outer_width) ->
+    world.put 'width', outer_width - 2 * world.get('padding')
+
+  offset: (world) -> world.index * world.get('outer_width')
+}


added a getKeys internal utility 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/genericdave/speedr.js.git/'


Add specs for Message

Add specs for Message

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

--- spec/message-spec.coffee
+++ spec/message-spec.coffee
@@ -0,0 +1,13 @@
+Message = require '../src/message'
+
+describe "Message", ->
+  [message] = []
+
+  describe "::getIcon()", ->
+    it "returns a default when no icon specified", ->
+      message = new Message('error', 'message!')
+      expect(message.getIcon()).toBe 'bug'
+
+    it "returns the icon specified", ->
+      message = new Message('error', 'message!', icon: 'my-icon')
+      expect(message.getIcon()).toBe 'my-icon'


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


Add spec for matcher.

Add spec for matcher.

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

--- src/spec/matcher.spec.coffee
+++ src/spec/matcher.spec.coffee
@@ -0,0 +1,47 @@
+_ = require 'underscore'
+Matcher = require '../lib/matcher'
+Promise = require 'bluebird'
+{ExtendedLogger} = require 'sphere-node-utils'
+
+describe 'ApiClient', ->
+  beforeEach ->
+    @logger = new ExtendedLogger()
+    @matcher = new Matcher(@logger)
+
+  describe '#constructor', ->
+    it 'should initialize', ->
+      expect(-> new Matcher()).toBeDefined()
+      expect(@matcher).toBeDefined()
+
+  describe '#match', ->
+    it 'should not find a match without initialize/add', (done) ->
+      @matcher.match({})
+      .then (result) ->
+        expect(result).toBeUndefined()
+        done()
+      .catch (err) ->
+        done err
+
+    it 'should find a match after initialize', (done) ->
+      apiClient =
+        getByExternalIds: ->
+          new Promise (resolve, reject) ->
+            console.log "HAJO"
+            res =
+              body:
+                results: [
+                  { externalId: 'ex123', id: 'i123' }
+                ]
+            resolve res
+      matcher = new Matcher(@logger, apiClient)
+      category =
+        externalId: 'ex123'
+      matcher.initialize [ category ]
+      .then ->
+        matcher.match(category)
+        .then (result) ->
+          expect(result).toBeDefined()
+          expect(result.id).toBe 'i123'
+          done()
+      .catch (err) ->
+        done err


included the asset pipeline for javascript

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

--- app/assets/javascripts/home.coffee
+++ app/assets/javascripts/home.coffee
@@ -0,0 +1,3 @@
+# Place all the behaviors and hooks related to the matching controller here.
+# All this logic will automatically be available in application.js.
+# You can use CoffeeScript in this file: http://coffeescript.org/


Fix WebView focus

Fix WebView focus

This code is needed to automatically focus the webview when it is blurred

--- src/main-process/atom-window.coffee
+++ src/main-process/atom-window.coffee
@@ -157,6 +157,9 @@

     @setupContextMenu()

+    @browserWindow.on 'blur', =>
+      @browserWindow.focusOnWebView()
+
   openPath: (pathToOpen, initialLine, initialColumn) ->
     @openLocations([{pathToOpen, initialLine, initialColumn}])


changed error message and increase 3 secs wait

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


reduce lines in pastie template

reduce lines in pastie template

Signed-off-by: Hiroshi Miura <ff6fb3ed059786151e736af13627c08d24e9f922@linux.com>

--- app/assets/javascripts/backbone/plugins/pastie.js.coffee
+++ app/assets/javascripts/backbone/plugins/pastie.js.coffee
@@ -6,10 +6,7 @@
     regex: /\n.*\n/i

     template: _.template '''
-

-        <a target="_blank" class="pastie-link" href="<%= messageLink %>">View pastie
-

-        <%= preview %>
+
<%= preview %><a target="_blank" class="pastie-link" href="<%= messageLink %>">read more

     '''


Fix algolia inputs in teacher signup form

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


working toward refactoring the controller to support multiple galleries

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