removed some comments, added some others.

--- src/stateful.coffee
+++ src/stateful.coffee
@@ -74,14 +74,10 @@
 		if from isnt undefined and not @isValidStateChange(from, to)
 			throw new Error "Bad state change: can't change from the '#{@state}' state to '#{to}' state on #{@constructor.name}"

-		# Could introduce an extension point here that would allow child class to do a check before the state changes
-		# and if the callback returns true would abort the state change.
-
 		@__state = to

-		# build something like this so we can reuse this
-		# handler = "onState#{@_toPascalCase to}"
-		# @[handler](from) if @[handler]?
+		handler = "onState#{@pascalCase to}"
+		@[handler](from) if @[handler]?

 		@onStateChange(from, to)

@@ -99,28 +95,21 @@
 		return _.contains(fromConfig.exit, to) and _.contains(toConfig.enter, from)

 	onStateChange: (from, to) ->
-		# unapply methods in the fromState
-		fromMethods = @__stateChart[from]?.methods
+		fromMethods = @__stateChart[from]?.methods        		# unapply methods in the fromState
 		@unapplyMethod method for method of fromMethods

-		# apply methods in the toState
-		toMethods = @__stateChart[to]?.methods
+		toMethods = @__stateChart[to]?.methods                  # apply methods in the toState
 		@applyMethod method, impl for method, impl of toMethods

 		@emit 'stateChange', from, to
 		@emit "stateChange:#{to}", from

 	unapplyMethod: (method) ->
-		if @[method]?
-			delete @[method]
-
-		if @["_#{method}"]?
-			@[method] = @["_#{method}"]
+		if @[method]? then delete @[method]
+		if @["_#{method}"]? then @[method] = @["_#{method}"]

 	applyMethod: (method, impl) ->
-		if @[method]?
-			@["_#{method}"] = @[method]
-
+		if @[method]? then @["_#{method}"] = @[method]
 		@[method] = impl

 	when: (state, callback) ->


Fix comments

Fix comments

--- src/svgtiler.coffee
+++ src/svgtiler.coffee
@@ -1753,7 +1753,8 @@
 class Tile
   ###
   `Tile` represents a rendered tile, which consists of
-  * the input `key` (usually a `String`) and coordinates (`i` and `j`);
+  * the input `key` (usually a `String`)
+  * coordinates: row `i`, column `j`, and layer `k`;
   * an `SVGSymbol` (`symbol`); and
   * a layout (`xMin`, `yMin`, `xMax`, `yMax`, `width`, `height`).
   We also store `zIndex` and `isEmpty` (from the symbol).


client/kite: add an alpha version of memory-fs-klient

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

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

--- client/app/lib/kite/kites/memoryfsklient.coffee
+++ client/app/lib/kite/kites/memoryfsklient.coffee
@@ -0,0 +1,76 @@
+kd = require 'kd'
+Promise = require 'bluebird'
+KodingKite = require '../kodingkite'
+Klient = require './klient'
+nick = require 'app/util/nick'
+MemoryFsKite = require './memoryfs'
+
+module.exports = class MemoryFsKlient extends KodingKite
+
+  # implements the same interface with KodingKlientKite
+  @api =
+    exec                : 'exec'
+    ping                : 'kite.ping'
+    systemInfo          : 'kite.systemInfo'
+    clientSubscribe     : 'client.Subscribe'
+    clientUnsubscribe   : 'client.Unsubscribe'
+    fsReadDirectory     : 'fs.readDirectory'
+    fsGlob              : 'fs.glob'
+    fsReadFile          : 'fs.readFile'
+    fsGetInfo           : 'fs.getInfo'
+    fsSetPermissions    : 'fs.setPermissions'
+    fsRemove            : 'fs.remove'
+    fsUniquePath        : 'fs.uniquePath'
+    fsWriteFile         : 'fs.writeFile'
+    fsRename            : 'fs.rename'
+    fsMove              : 'fs.move'
+    fsCreateDirectory   : 'fs.createDirectory'
+    tail                : 'log.tail'
+    webtermKillSessions : 'webterm.killSessions'
+    webtermGetSessions  : 'webterm.getSessions'
+    webtermPing         : 'webterm.ping'
+    webtermRename       : 'webterm.rename'
+    klientDisable       : 'klient.disable'
+    klientInfo          : 'klient.info'
+    klientShare         : 'klient.share'
+    klientUnshare       : 'klient.unshare'
+    klientShared        : 'klient.shared'
+    sshKeysAdd          : 'sshkeys.add'
+
+    # extras in klient
+
+    # storageGet { key }
+    storageGet          : 'storage.get'
+    # storageSet { key, value}
+    storageSet          : 'storage.set'
+    # storageDelete { key }
+    storageDelete       : 'storage.delete'
+    # TODO
+    webtermConnect      : 'webterm.connect'
+    # webtermKillSession { session }
+    webtermKillSession  : 'webterm.killSession'
+
+  @createApiMapping @api
+
+
+  constructor: (options = {}) ->
+    options.name = 'mockklient'
+    super options
+
+
+  setTransport: ->
+
+    mockTransport = new MemoryFsKite
+      api: MemoryFsKlient.api
+      username: nick()
+
+    super mockTransport
+
+
+  fetchTerminalSessions: -> @transport?.webtermGetSessions?()
+
+
+  clientSubscribe: (options) -> @transport?.clientSubscribe options
+
+
+


:lipstick:

:lipstick:

--- src/template.coffee
+++ src/template.coffee
@@ -16,7 +16,6 @@
 # ```coffee
 # Template.render('some-template', foo: 'bar')
 # ```
-module.exports =
 class Template
   @markedOptions:
     gfm: true
@@ -83,3 +82,5 @@
       path.join(path.dirname(__dirname), 'templates', templatePath)
     else
       templatePath
+
+module.exports = Template


[#35065403] Lets video player continue to work if subtitles cannot be loaded

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


Modification type organisation

Modification type organisation

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

--- app/assets/javascripts/dune/static/how_it_works.js.coffee
+++ app/assets/javascripts/dune/static/how_it_works.js.coffee
@@ -0,0 +1,21 @@
+Dune.Static ?= {}
+
+Dune.Static.HowItWorks =
+  init: Backbone.View.extend
+    el: '.how-it-works-page'
+
+    initialize: ->
+      if window.innerWidth < 1000
+        $('.main-section').localScroll duration: 600
+      else
+        $('.expand-section').click this.expand_section
+
+    expand_section: (event) ->
+      event.preventDefault()
+      $(this).parents('.main-section').find('.section-content').slideToggle 500, =>
+        elem = $(this).find('.expansion-btn')
+        current_text = elem.text()
+        elem.text(elem.attr('data-alternative-text'))
+        elem.attr('data-alternative-text', current_text)
+        $('.expand-section-icon').toggleClass('icon-fa-chevron-down').
+          toggleClass('icon-fa-chevron-up')


clio-26902 Fix test

clio-26902 Fix test

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


Client: Activitiy: Added ChannelThreadHeadar for ChannelThreadPane

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


Removed token from ajax request header

Removed token from ajax request header

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 blank string option for grade status dropdown on grade edit

--- app/assets/javascripts/angular/controllers/GradeCtrl.js.coffee
+++ app/assets/javascripts/angular/controllers/GradeCtrl.js.coffee
@@ -7,7 +7,7 @@
     gradeId = gradeParams.id
     $scope.rawScoreUpdating = false
     $scope.hasChanges = false
-    $scope.gradeStatuses = ["", "In Progress", "Graded", "Released"]
+    $scope.gradeStatuses = ["In Progress", "Graded", "Released"]

     $scope.froalaOptions = {
       inlineMode: false,


summary feedback autosave group rubric grades

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


added todos model

added todos model

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

--- app/assets/javascripts/dashit/models/todos.js.coffee
+++ app/assets/javascripts/dashit/models/todos.js.coffee
@@ -0,0 +1,3 @@
+DashIt.Todo  = Ember.Resource.extend
+  resourceProperties: ['description', 'status']
+  resourceName: 'todo'


adds snowplow event plugin

adds snowplow event plugin

	new file:   vendor/assets/javascripts/plinth/plugins/tbg-snowplow.js.coffee

error: pathspec 'vendor/assets/javascripts/plinth/plugins/tbg-snowplow.js.coffee' did not match any file(s) known to git

--- vendor/assets/javascripts/plinth/plugins/tbg-snowplow.js.coffee
+++ vendor/assets/javascripts/plinth/plugins/tbg-snowplow.js.coffee
@@ -0,0 +1,84 @@
+# ============================================================
+# SnowplowEvents v0.0.1
+# http://URL
+# ============================================================
+# Copyright 2013 The Beans Group
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+plugin = ($) ->
+
+  "use strict"
+
+  # Class definition
+  #
+  # @example How to use with HAML
+  # %{href: 'path/to/link', data: { spevent: 'category|action|label|prop|value' }}
+  # @see https://github.com/snowplow/snowplow/wiki/2-Specific-event-tracking-with-the-Javascript-tracker#371-trackstructevent
+  #
+  # @example Ensure plugin self-initialises
+  # <form data-spevent-load="true">...</form>
+  #
+  class SPEvent
+
+    # SPEvent constructor
+    #
+    # @param el [DOMElement]
+    # @param content [String] Pipe-delimited string of event data
+    #
+    constructor: (el, @content) ->
+      $el = $(el)
+      @sendEvent (if !(content.split('|') instanceof Array) then content.split('|') else [content]
+
+    _constructor: SPEvent
+
+    # Send event to Snowplow
+    #
+    # sendEvent :: [String] -> [String]
+    #
+    # @param evData [Array]
+    #
+    sendEvent: (data) ->
+      evData = ['trackStructEvent'].concat data
+      _snaq?.push evData
+
+  removeData = ($el, ev) ->
+    $el.removeAttr('data-' + ev)
+    $el.removeData(ev)
+
+  # SPEvent plugin
+  #
+  $.fn.spEvent = (option, type = "spevent") ->
+    this.each ->
+      $this = $(@)
+      $this = if ($t = $(this)).is("[data-#{type}]") then $t else $t.closest("[data-#{type}]")
+      data = $this.data 'speventplugin'
+      if not (eventContent = $this.data(type)) then return removeData($this, type)
+      if !data then $this.data 'speventplugin', (data = new SPEvent @, eventContent)
+      if typeof option is 'string' then data[option].call $this
+
+  $.fn.spEvent.Constructor = SPEvent
+
+  # Data API
+  #
+  $ ->
+    $('body').on 'click.gaEvent.data-api', '[data-spevent]' , ( e ) ->
+      $this = $(e.target)
+      $this.spEvent()
+
+    $('body').on 'tbgform-success.spEvent.data-api', (e, $form)->
+      $form.spEvent null, 'spevent-form'
+
+    $('[data-spevent-load]').each ->
+      $(this).spEvent null, 'spevent-load'


ComputeProvider::createGroupStack: remove all possible variable name collisions


Do not auto-add zero threshold if last element
.. is removed.

Also moves logResponse call prior to window redirect.


Add GitHub Search script

Add GitHub Search script

Uses GitHub's brand new code search API. Example use:

  hubot github search bigdata
  hubot github search rails/rails ActiveRecord

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

--- src/scripts/github-search.coffee
+++ src/scripts/github-search.coffee
@@ -0,0 +1,56 @@
+# Description
+#   Tells Hubot to search for anything in code at GitHub
+#
+# Dependencies:
+#   "githubot": "0.4.1"
+#
+# Configuration:
+#   HUBOT_GITHUB_TOKEN (optional, if you want to search in private repos)
+#
+# Commands:
+#   hubot github search [repo] <query> - Search for <query> in [repo] or anywhere
+#
+# Author:
+#   spajus
+
+module.exports = (robot) ->
+
+  github = require('githubot')(robot, apiVersion: 'preview')
+
+  robot.respond /github search ((.+\/[^\s]+) )?(.+)/i, (msg) ->
+    try
+      repo = msg.match[2]
+      query = msg.match[3].trim()
+      repostr = ''
+      in_repo = ''
+
+      if repo
+        repostr = "+repo:#{repo}"
+        in_repo = " in repo #{repo}"
+
+      github.handleErrors (response) ->
+        msg.send "Error: #{response.statusCode} #{response.error}"
+
+      github.get "search/code?q=#{encodeURIComponent(query)}#{repostr}&sort=indexed", (data) ->
+        resp = ''
+        found = 0
+
+        if data.total_count == 0
+          msg.send "Didn't find \"#{query}\"#{in_repo}"
+          return
+
+        for item in data.items
+          if found == 5
+            broken = true
+            break
+          resp += "\n - #{item.name}: #{item.html_url}"
+          found += 1
+
+        first_n = ''
+        if broken
+          first_n = ", first 5"
+          resp += "\nMore: https://github.com/search?q=#{encodeURIComponent(query)}#{repostr}&type=Code&s=indexed"
+
+        msg.send "Searched for \"#{query}\"#{in_repo} and found #{data.total_count} results#{first_n}: #{resp}"
+    catch e
+      console.log "GitHub Search failed", e


Added profile Images collection

Added profile Images collection

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

--- both/collections/profile_pictures.coffee
+++ both/collections/profile_pictures.coffee
@@ -0,0 +1,13 @@
+@ProfilePictures = new FS.Collection("profilePictures",
+  stores: [new FS.Store.GridFS("profilePictures")]
+)
+
+# @ProfilePictures = new FS.Collection("profilePictures",
+#   stores: [new FS.Store.GridFS("profilePictures",
+#     transformWrite: (fileObj, readStream, writeStream) ->
+#       # Transform the image into a 120x120px image
+#       gm(readStream, fileObj.name()).resize("120", "120").stream().pipe writeStream
+#       return
+
+#   )]
+# )


Made the level editor not break when using units that are incomplete.

--- app/lib/surface/CocoSprite.coffee
+++ app/lib/surface/CocoSprite.coffee
@@ -323,7 +323,7 @@
     if not action and @thang?.actionActivated and not @stopLogging
       console.error "action is", action, "for", @thang?.id, "from", @currentRootAction, @thang.action, @thang.getActionName?()
       @stopLogging = true
-    @queueAction(action) if isDifferent or (@thang?.actionActivated and action.name isnt 'move')
+    @queueAction(action) if action and (isDifferent or (@thang?.actionActivated and action.name isnt 'move'))
     @updateActionDirection()

   determineAction: ->
@@ -332,8 +332,11 @@
     action = thang.action if thang?.acts
     action ?= @currentRootAction.name if @currentRootAction?
     action ?= 'idle'
-    action = null unless @actions[action]?
-    return null unless action
+    unless @actions[action]?
+      @warnedFor ?= {}
+      console.warn 'Cannot show action', action, 'for', @thangType.get('name'), 'because it DNE' unless @warnedFor[action]
+      @warnedFor[action] = true
+      return null
     action = 'break' if @actions.break? and @thang?.erroredOut
     action = 'die' if @actions.die? and thang?.health? and thang.health <= 0
     @actions[action]


add javascript

add javascript

error: pathspec 'vendor/assets/javascripts/mongoid-sortable.js.coffee' did not match any file(s) known to git

--- vendor/assets/javascripts/mongoid-sortable.js.coffee
+++ vendor/assets/javascripts/mongoid-sortable.js.coffee
@@ -0,0 +1,29 @@
+$ ->
+  if $('#sortable').length > 0
+    table_width = $('#sortable').width()
+    cells = $('.table').find('tr')[0].cells.length
+    desired_width = table_width / cells + 'px'
+    $('.table td').css('width', desired_width)
+
+    $('#sortable').sortable(
+      axis: 'y'
+      items: '.item'
+      cursor: 'move'
+
+      sort: (e, ui) ->
+        ui.item.addClass('active-item-shadow')
+      stop: (e, ui) ->
+        ui.item.removeClass('active-item-shadow')
+        # highlight the row on drop to indicate an update
+        ui.item.children('td').effect('highlight', {}, 1000)
+      update: (e, ui) ->
+        item_id = ui.item.data('item-id')
+        ajax_path = ui.item.data('ajax-path')
+        position = ui.item.index() # this will not work with paginated items, as the index is zero on every page
+        $.ajax(
+          type: 'POST'
+          url: ajax_path
+          dataType: 'json'
+          data: { input_definition: { id: item_id, position: position } }
+        )
+    )


client/util: add isTestMachine

client/util: add isTestMachine

This util will be used to determine if a machine is a test/mock machine.


ajaxy_pagination.coffee is working, let's gogogo other files

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

--- core/app/assets/javascripts/refinery/ajaxy_pagination.js.coffee
+++ core/app/assets/javascripts/refinery/ajaxy_pagination.js.coffee
@@ -0,0 +1,14 @@
+@init_ajaxy_pagination = ->
+  if typeof (window.history.pushState) == "function" and $(".pagination_container").length > 0
+    pagination_pages = $(".pagination_container .pagination a")
+    pagination_pages.live "click", (e) ->
+      navigate_to = @href.replace(/(\&(amp\;)?)?from_page\=\d+/, "")
+      navigate_to += "&from_page=" + $(".current").text()
+      navigate_to = navigate_to.replace("?&", "?").replace(/\s+/, "")
+      current_state_location = (location.pathname + location.href.split(location.pathname)[1])
+      window.history.pushState path: current_state_location, "", navigate_to
+      $(document).paginateTo navigate_to
+      e.preventDefault()
+      false
+  $(".pagination_container").applyMinimumHeightFromChildren()
+  $(".pagination_frame").css "top", "0px"  if $(".pagination_container").find(".pagination").length == 0


<model> Actuator - Backbone model.

<model> Actuator - Backbone model.

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

--- client/app/models/actuator.coffee
+++ client/app/models/actuator.coffee
@@ -0,0 +1,14 @@
+
+module.exports = class Actuator extends Backbone.RelationalModel
+	relations: [
+			type: Backbone.HasOne
+			key: 'driver'
+			keySource: 'driverId'
+			relatedModel: 'Driver'
+	]
+
+	urlRoot: 'actuators'
+
+    defaults: ->
+        customId: 	''
+		name: 		''


added comment explaining purpose of script

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


Last Changes before Merge

Last Changes before Merge

- Change variable name to make it more clear


Dont stop fading, dont ever stop

Dont stop fading, dont ever stop

[Finishes #40695947]

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


fix import link

fix import link

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


Cache results from jQuery selectors to retrieve namespace name

--- app/assets/javascripts/importer_status.js.coffee
+++ app/assets/javascripts/importer_status.js.coffee
@@ -7,13 +7,16 @@
     $('.js-add-to-import')
       .off 'click'
       .on 'click', (e) =>
-        new_namespace = null
         $btn = $(e.currentTarget)
         $tr = $btn.closest('tr')
+        $target_field = $tr.find('.import-target')
+        $namespace_input = $target_field.find('input')
         id = $tr.attr('id').replace('repo_', '')
-        if $tr.find('.import-target input').length > 0
-          new_namespace = $tr.find('.import-target input').prop('value')
-          $tr.find('.import-target').empty().append("#{new_namespace}/#{$tr.find('.import-target').data('project_name')}")
+        new_namespace = null
+
+        if $namespace_input.length > 0
+          new_namespace = $namespace_input.prop('value')
+          $target_field.empty().append("#{new_namespace}/#{$target_field.data('project_name')}")

         $btn
           .disable()


TeamListController: aka JGroupListController to handle listing groups/teams


Tweaked an error message to be more generally useful.

--- app/lib/surface/CocoSprite.coffee
+++ app/lib/surface/CocoSprite.coffee
@@ -252,7 +252,9 @@
   updateAction: ->
     action = @determineAction()
     isDifferent = action isnt @currentRootAction
-    console.error "action is", action, "for", @thang?.id, "from", @currentRootAction, @thang.action, @thang.getActionName?() if not action and @thang?.actionActivated and @thang.id is 'Artillery'
+    if not action and @thang?.actionActivated and not @stopLogging
+      console.error "action is", action, "for", @thang?.id, "from", @currentRootAction, @thang.action, @thang.getActionName?()
+      @stopLogging = true
     @queueAction(action) if isDifferent or (@thang?.actionActivated and action.name isnt 'move')
     @updateActionDirection()


Update converter.coffee

Update converter.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/bradedelman/pdf2image.git/'


Update a comment about the changed nature of isSelectable

--- lib/dom_utils.coffee
+++ lib/dom_utils.coffee
@@ -91,7 +91,7 @@
     null

   #
-  # Selectable means the element has a text caret; this is not the same as "focusable".
+  # Selectable means that we should use the simulateSelect method to activate the element instead of a click.
   #
   isSelectable: (element) ->
     unselectableTypes = ["button", "checkbox", "color", "file", "hidden", "image", "radio", "reset"]


Remove unnecessary returns from snapshot navigator


Use the new hour endpoint for loading snapshots at a given time


return delete method back to normal, users designs page in admin brings back designs even if they are deleted. Can assume delete is working

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


Encode messages before adding to DOM

Encode messages before adding to DOM

--- client/app/Applications/Chat.kdapplication/Views/chatmessagelistitem.coffee
+++ client/app/Applications/Chat.kdapplication/Views/chatmessagelistitem.coffee
@@ -11,4 +11,6 @@
     @template.update()

   pistachio:->
-    """{{#(sender)}}: {{#(message)}}"""
+    {message, sender} = @getData()
+    message = Encoder.XSSEncode message
+    """#{sender}: #{message}"""


Workspace: Passed delegate to child class in PreviewPane.


[Fix #68767234].  Remove default overlay background properly.

Temp. eliminate race condition that prevented default overlay from being
removed.

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

--- app/assets/javascripts/views/overlay_background_view.js.coffee
+++ app/assets/javascripts/views/overlay_background_view.js.coffee
@@ -0,0 +1,3 @@
+ETahi.OverlayBackgroundView = Ember.View.extend
+  willDestroyElement: ->
+    $(this.get('element')).empty()


Show yanked text in HUD for "yf".

Show yanked text in HUD for "yf".

--- content_scripts/link_hints.coffee
+++ content_scripts/link_hints.coffee
@@ -32,6 +32,8 @@
     if settings.get("filterLinkHints") then filterHints else alphabetHints
   # lock to ensure only one instance runs at a time
   isActive: false
+  # Call this function on exit (if defined).
+  onExit: null

   #
   # To be called after linkHints has been generated from linkHintsBase.
@@ -92,8 +94,11 @@
           altKey: false
     else if @mode is COPY_LINK_URL
       @hintMode.setIndicator "Copy link URL to Clipboard"
-      @linkActivator = (link) ->
+      @linkActivator = (link) =>
         chrome.runtime.sendMessage handler: "copyToClipboard", data: link.href
+        url = link.href
+        url = url[0..25] + "...." if 28 < url.length
+        @onExit = -> HUD.showForDuration "Yanked #{url}", 2000
     else if @mode is OPEN_INCOGNITO
       @hintMode.setIndicator "Open link in incognito window"
       @linkActivator = (link) ->
@@ -341,6 +346,8 @@
         DomUtils.removeElement LinkHints.hintMarkerContainingDiv
       LinkHints.hintMarkerContainingDiv = null
       @hintMode.exit()
+      @onExit?()
+      @onExit = null
       @isActive = false

     # we invoke the deactivate() function directly instead of using setTimeout(callback, 0) so that


Fix other WrapGuide specs

Fix other WrapGuide specs

--- src/extensions/wrap-guide/spec/wrap-guide-spec.coffee
+++ src/extensions/wrap-guide/spec/wrap-guide-spec.coffee
@@ -17,10 +17,10 @@
   describe "@initialize", ->
     it "appends a wrap guide to all existing and new editors", ->
       expect(rootView.panes.find('.pane').length).toBe 1
-      expect(rootView.panes.find('.lines > .wrap-guide').length).toBe 1
+      expect(rootView.panes.find('.underlayer > .wrap-guide').length).toBe 1
       editor.splitRight()
       expect(rootView.find('.pane').length).toBe 2
-      expect(rootView.panes.find('.lines > .wrap-guide').length).toBe 2
+      expect(rootView.panes.find('.underlayer > .wrap-guide').length).toBe 2

   describe "@updateGuide", ->
     it "positions the guide at the configured column", ->


:lipstick:

:lipstick:

--- spec/app/text-mate-tokenizer-spec.coffee
+++ spec/app/text-mate-tokenizer-spec.coffee
@@ -7,8 +7,8 @@
   tokenizer = null

   beforeEach ->
-    coffee_plist = fs.read(require.resolve 'CoffeeScriptBundle.tmbundle/Syntaxes/CoffeeScript.tmLanguage')
-    plist.parseString coffee_plist, (err, grammar) ->
+    coffeePlist = fs.read(require.resolve 'CoffeeScriptBundle.tmbundle/Syntaxes/CoffeeScript.tmLanguage')
+    plist.parseString coffeePlist, (err, grammar) ->
       tokenizer = new TextMateTokenizer(grammar[0])

   describe ".getLineTokens(line, currentRule)", ->


MachineSettingsModal: Created initial modal with tabs.


refact (Module) router.getPath defaults to empty params object

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


apparently i don't know how sorting works

--- resources/assets/coffee/react/mp-history/game.coffee
+++ resources/assets/coffee/react/mp-history/game.coffee
@@ -34,7 +34,7 @@
       m.teamRank = if m.team == winningTeam then 1 else 2
       m

-    scores = _.orderBy scores, ['teamRank', 'score'], ['desc', 'desc']
+    scores = _.orderBy scores, ['teamRank', 'score'], ['asc', 'desc']

     div className: 'mp-history-events__game mp-history-game',
       el MPHistory.BeatmapHeader,


CLIO-23420: Use coffeescript syntax

CLIO-23420: Use coffeescript syntax

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


[➠] Use `figure` tag for logo.

[➠] Use `figure` tag for logo.

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


Fixed another broken utility class

Fixed another broken utility class

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


Fix csv parsing process in user-importer script

Signed-off-by: Sonmez Kartal <d2d15c3d37396a5f2a09f8b42cf5f27d43a3fbde@koding.com>

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


fix dropdown-select-multiple component for plain object sources

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/companytools/ember-cli-dunlop.git/'


Tweaked sprite scripts to use given response buttons even if the script is not skippable.

--- app/lib/scripts/SpriteScriptModule.coffee
+++ app/lib/scripts/SpriteScriptModule.coffee
@@ -33,7 +33,7 @@
   spriteSayNote: (sprite, script) ->
     return if @speakingSprites[sprite.id]
     responses = sprite.say.responses
-    responses = [] unless script.skippable
+    responses = [] unless script.skippable or responses
     for response in responses ? []
       response.text = response.i18n?[me.lang()]?.text ? response.text
     text = sprite.say.i18n?[me.lang()]?.text or sprite.say.text


Persist library sort order.

Persist library sort order.

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


add matcher

add matcher

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

--- matcher.coffee
+++ matcher.coffee
@@ -0,0 +1,11 @@
+module.exports =
+
+  # checks if actual matrix has the same size and all element number values are similar
+  toApprox: (expected, maxEps = 0) ->
+    if not expected.isSameSize(@actual)
+      return false
+    for i in [0...expected.width] by 1
+      for j in [0...expected.height] by 1
+        if (Math.abs @actual.get(j, i) - expected.get(j, i)) > maxEps
+          return false
+    true


testing

testing


Move UserController.test to coffee

Move UserController.test to coffee

error: pathspec 'test/integration/controllers/v1/UserController.test.coffee' did not match any file(s) known to git

--- test/integration/controllers/v1/UserController.test.coffee
+++ test/integration/controllers/v1/UserController.test.coffee
@@ -0,0 +1,34 @@
+###*
+# UserController.test
+###
+
+request = require('supertest')
+should = require('should')
+
+###*
+# Test invalid /user/password endpoint.
+###
+
+describe 'Requests to the root (/user/password) path with missing required body parameters.', ->
+  it 'POST: Invalid password reset request with missing body parameters returns expected 422
+      - Unprocessable due to request validation error results.', (done) ->
+    request(sails.hooks.http.app)
+      .post('/api/v1/user/password')
+      .send({})
+      .expect(422)
+      .expect('content-type', /json/)
+      .end (err, res) ->
+        if err
+          throw err
+        res.status.should.equal 422
+        res.body.should.have.property 'reason'
+        res.body.should.have.property 'errors'
+        res.body.errors.should.have.keys 'user_id', 'email', 'mobile'
+        requiredRule = [ { 'rule': 'required' } ]
+        res.body.errors.user_id.should.containDeep requiredRule
+        res.body.errors.email.should.containDeep requiredRule
+        res.body.errors.mobile.should.containDeep requiredRule
+        done()
+        return
+    return
+  return


Remove useless try/catch

Remove useless try/catch

--- prototypes/using-aurora/coffeescripts/main.coffee
+++ prototypes/using-aurora/coffeescripts/main.coffee
@@ -39,10 +39,6 @@
         '../shared/backbone.js',
         '../shared/bootstrap/js/bootstrap.js', ->
             load_aurora_classes ->
-              try
-                null
-              catch err
-                console.log(err)
               $("#load_scenario").click ->
                 xml_text = $("#scenario_text").val()
                 window.textarea_scenario = window.aurora.Scenario.from_xml($(xml_text))


turn off failling test that fails on ci but passes locally


"initializes the views" --> "...logic" (Rebase this, maybe?) Like, I mean it's so small.

--- app/assets/javascripts/live.coffee
+++ app/assets/javascripts/live.coffee
@@ -110,7 +110,7 @@
 # ------------

 # --- Load. Executed when the page is loaded (via Tubolinks or otherwise) ---
-# Defines all hooks for controls and cue buttons, and initializes the views
+# Defines all hooks for controls and cue buttons, and initializes the logic
 load = ->
   $('#start-live-show').click ->
     # Enter live mode


Use absolute paths in specs

Use absolute paths in specs

--- src/packages/fuzzy-finder/spec/fuzzy-finder-spec.coffee
+++ src/packages/fuzzy-finder/spec/fuzzy-finder-spec.coffee
@@ -78,8 +78,8 @@
         expect(rootView.getActiveView()).toBe editor2
         rootView.trigger 'fuzzy-finder:toggle-file-finder'

-        finderView.confirmed('dir/a')
         expectedPath = project.resolve('dir/a')
+        finderView.confirmed(expectedPath)

         expect(finderView.hasParent()).toBeFalsy()
         expect(editor1.getPath()).not.toBe expectedPath
@@ -189,7 +189,7 @@
       describe "when the active pane has an item for the selected path", ->
         it "switches to the item for the selected path", ->
           expectedPath = project.resolve('sample.txt')
-          finderView.confirmed('sample.txt')
+          finderView.confirmed(expectedPath)

           expect(finderView.hasParent()).toBeFalsy()
           expect(editor1.getPath()).not.toBe expectedPath
@@ -205,7 +205,7 @@
           expect(rootView.getActiveView()).toBe editor1

           expectedPath = project.resolve('sample.txt')
-          finderView.confirmed('sample.txt')
+          finderView.confirmed(expectedPath)

           expect(finderView.hasParent()).toBeFalsy()
           expect(editor1.getPath()).toBe expectedPath
@@ -380,7 +380,7 @@

       runs ->
         expect(finderView).not.toBeVisible()
-        expect(openedPath).toBe "sample.txt"
+        expect(openedPath).toBe project.resolve("sample.txt")

     it "displays an error when the word under the cursor doesn't match any files", ->
       editor.setText("moogoogaipan")


Client: Activity: Tests: Created view tests

error: pathspec 'client/activity/lib/components/browsepublicchannelsmodal/test/view.coffee' did not match any file(s) known to git

--- client/activity/lib/components/browsepublicchannelsmodal/test/view.coffee
+++ client/activity/lib/components/browsepublicchannelsmodal/test/view.coffee
@@ -0,0 +1,26 @@
+React     = require 'kd-react'
+expect    = require 'expect'
+ModalView = require '../view'
+TestUtils = require 'react-addons-test-utils'
+
+describe 'BrowsePublicChannelsModalView', ->
+
+  { renderIntoDocument } = TestUtils
+
+
+  describe '::render', ->
+
+    it 'checks rendered modal props type', ->
+
+      modal = renderIntoDocument(<ModalView isOpen={no}/>)
+
+      expect(modal.props.query).toBeA 'string'
+      expect(modal.props.className).toBeA 'string'
+      expect(modal.props.onClose).toBeA 'function'
+      expect(modal.props.onTabChange).toBeA 'function'
+      expect(modal.props.onItemClick).toBeA 'function'
+      expect(modal.props.onThresholdReached).toBeA 'function'
+      expect(modal.props.onSearchInputChange).toBeA 'function'
+      expect(modal.props.isOpen).toBeA 'boolean'
+      expect(modal.props.isSearchActive).toBeA 'boolean'
+


update #2

update #2

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/EmeraldArrow/Netflixify-wrapper.git/'


Fixed Map pins in IE

Fixed Map pins in IE


shortcuts: add binding presenter

shortcuts: add binding presenter

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

--- client/app/lib/shortcuts/presenters/binding.coffee
+++ client/app/lib/shortcuts/presenters/binding.coffee
@@ -0,0 +1,21 @@
+globals = require 'globals'
+_ = require 'lodash'
+
+SEPARATOR   = '+'
+MAC_UNICODE =
+  shift   : '⇧'
+  command : '⌘'
+  alt     : '⌥'
+  ctrl    : '^'
+
+convertCase = _.capitalize
+render = _.template '<% _.forEach(keys, function (key) { %><%= key %><% }) %>'
+
+module.exports = (str) ->
+
+  keys = str.split SEPARATOR
+
+  render keys:
+    if globals.os isnt 'mac'
+    then _.map keys, (value) -> convertCase value
+    else _.map keys, (value) -> MAC_UNICODE[value] or convertCase value


fix typo in code enablind the videomsg button

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


Made changes to reloadAllCode to reload only the team's code.

--- app/views/play/level/tome/tome_view.coffee
+++ app/views/play/level/tome/tome_view.coffee
@@ -213,7 +213,7 @@
       @spellPaletteView.toggleControls {}, spell.view.controlsEnabled   # TODO: know when palette should have been disabled but didn't exist

   reloadAllCode: ->
-    spell.view.reloadCode false for spellKey, spell of @spells
+    spell.view.reloadCode false for spellKey, spell of @spells when spell.team is me.team
     Backbone.Mediator.publish 'tome:cast-spells', spells: @spells

   destroy: ->


Fix for save controls on show page

Fix for save controls on show page

--- src/desktop/apps/show/components/artwork_item_metaphysics/save_controls/view.coffee
+++ src/desktop/apps/show/components/artwork_item_metaphysics/save_controls/view.coffee
@@ -11,10 +11,9 @@

   initialize: (options) ->
     throw 'You must pass an el' unless @el?
-    return unless options.artworkCollection && options.artwork
+    return unless options.artwork

     { @artworkCollection, @artwork, @context_page } = options
-
     @$button = @$('.overlay-button-save')

     @listenTo @artworkCollection, "add:#{@artwork.id}", @onArtworkSaveChange


fixing [050321c5a5a5e3b18c30a0bd5d093a6eae7c07d1]

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


Fixed mountain map background ratio.

Fixed mountain map background ratio.

--- app/views/play/CampaignView.coffee
+++ app/views/play/CampaignView.coffee
@@ -340,7 +340,7 @@

   onWindowResize: (e) =>
     mapHeight = iPadHeight = 1536
-    mapWidth = {dungeon: 2350, forest: 2500, desert: 2350}[@terrain] or 2350
+    mapWidth = {dungeon: 2350, forest: 2500, auditions: 2500, desert: 2350, mountain: 2422}[@terrain] or 2350
     aspectRatio = mapWidth / mapHeight
     pageWidth = @$el.width()
     pageHeight = @$el.height()


clio-21024 fix comment

clio-21024 fix comment


CancelSubscriptionModal: update copy

CancelSubscriptionModal: update copy

ref: https://github.com/koding/koding/pull/10189/files#r94361938


add tutorial text placeholder

add tutorial text placeholder

error: pathspec 'app/assets/javascripts/components/tutorial-text/yale-mark-tutorial-text.cjsx' did not match any file(s) known to git

--- app/assets/javascripts/components/tutorial-text/yale-mark-tutorial-text.cjsx
+++ app/assets/javascripts/components/tutorial-text/yale-mark-tutorial-text.cjsx
@@ -0,0 +1,18 @@
+module.exports = {
+  pages: [
+    {
+      page: 0,
+      text: "One Lorem ipsum dolor sit amet, posuere a mauris, nostra quam nonummy, facilisis amet neque. Ut lacus eros venenatis ipsum, erat ut turpis, aliquam metus vitae volutpat sit sed. Eros maecenas malesuada quam leo laoreet, vel curabitur maecenas neque quam et libero, ut libero, vitae vel eros vestibulum, sagittis etiam nunc. Nonummy risus mattis, sed nisl. Quis non quis quis ultricies non facilisi."
+    },
+
+    {
+      page: 1,
+      text: "Two Lorem ipsum dolor sit amet, posuere a mauris, nostra quam nonummy, facilisis amet neque. Ut lacus eros venenatis ipsum, erat ut turpis, aliquam metus vitae volutpat sit sed. Eros maecenas malesuada quam leo laoreet, vel curabitur maecenas neque quam et libero, ut libero, vitae vel eros vestibulum, sagittis etiam nunc. Nonummy risus mattis, sed nisl. Quis non quis quis ultricies non facilisi."
+    },
+
+    {
+      page: 2,
+      text: "Three Lorem ipsum dolor sit amet, posuere a mauris, nostra quam nonummy, facilisis amet neque. Ut lacus eros venenatis ipsum, erat ut turpis, aliquam metus vitae volutpat sit sed. Eros maecenas malesuada quam leo laoreet, vel curabitur maecenas neque quam et libero, ut libero, vitae vel eros vestibulum, sagittis etiam nunc. Nonummy risus mattis, sed nisl. Quis non quis quis ultricies non facilisi."
+    }
+  ]
+}


forgot model

forgot model

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

--- app/assets/javascripts/models/classification.coffee
+++ app/assets/javascripts/models/classification.coffee
@@ -0,0 +1,24 @@
+class Classification
+
+  annotation: {},
+  subject_id: null,
+  subject_set_id: null,
+  task_key: null,
+
+  constructor: ->
+    @metadata =
+      started_at: (new Date).toISOString()
+
+  commit: ->
+    @metadata.finished_at = (new Date).toISOString()
+
+    rec = API.type('classifications').create
+      annotation: @annotation
+      subject_id: @subject_id
+      subject_set_id: @subject_set_id
+      task_key: @task_key
+      metadata: @metadata
+      workflow_id: @workflow_id
+    rec.save()
+
+module.exports = Classification


Structure for PlayerView constructor

Structure for PlayerView constructor

--- app/assets/javascripts/player/player_view.js.coffee
+++ app/assets/javascripts/player/player_view.js.coffee
@@ -5,32 +5,35 @@
   initialize: (options) ->
     @$el.addClass('not-started')

-    @rendererView = new options.rendererClass(
+    @createRendererView()
+    @createHudView()
+    @createMovie()
+    @showLoadingIndicator()
+
+  createRendererView: ->
+    @rendererView = new this.options.rendererClass(
       cols:  this.options.cols
       lines: this.options.lines
     )

+    @$el.append(@rendererView.$el)
+    @rendererView.afterInsertedToDom()
+
+  createHudView: ->
     @hudView = new AsciiIo.HudView(cols:  this.options.cols)
+    @$el.append(@hudView.$el)

-    vt = new AsciiIo.VT(options.cols, options.lines, @rendererView)
+  createMovie: ->
+    vt = new AsciiIo.VT(this.options.cols, this.options.lines, @rendererView)

     @movie = new AsciiIo.Movie(
       @model,
       vt,
-      speed: options.speed,
-      benchmark: options.benchmark
+      speed: this.options.speed,
+      benchmark: this.options.benchmark
     )
     @movie.on 'movie-loaded', @onMovieLoaded, this
     @movie.load()
-
-    @appendChildViews()
-    @showLoadingIndicator()
-
-  appendChildViews: ->
-    @$el.append(@rendererView.$el)
-    @rendererView.afterInsertedToDom()
-
-    @$el.append(@hudView.$el)

   onStartPromptClick: ->
     @hideToggleOverlay()


Add tests for DotLedger.Views.Search.Summary.

error: pathspec 'spec/javascripts/dot_ledger/views/search/summary_spec.js.coffee' did not match any file(s) known to git

--- spec/javascripts/dot_ledger/views/search/summary_spec.js.coffee
+++ spec/javascripts/dot_ledger/views/search/summary_spec.js.coffee
@@ -0,0 +1,18 @@
+describe "DotLedger.Views.Search.Summary", ->
+  createCollection = ->
+    new DotLedger.Collections.Transactions()
+
+  createView = (collection = createCollection())->
+    new DotLedger.Views.Search.Summary(
+      collection: collection
+    )
+
+  it "should be defined", ->
+    expect(DotLedger.Views.Search.Summary).toBeDefined()
+
+  it "should use the correct template", ->
+    expect(DotLedger.Views.Search.Summary).toUseTemplate('search/summary')
+
+  it "can be rendered", ->
+    view = createView()
+    expect(view.render).not.toThrow()


lazy cache

lazy cache

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/pcruise/translate-together.git/'


Fixed tab bug

Fixed tab bug


open the final modal on success

open the final modal on success

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


config: change default delta endpoint to https and production

Signed-off-by: Petros Angelatos <5ae4506022d2e10a17fe64868893c6af9c21e85f@gmail.com>

--- src/config.coffee
+++ src/config.coffee
@@ -18,7 +18,7 @@
 	apiEndpoint: process.env.API_ENDPOINT ? 'https://api.resin.io'
 	listenPort: process.env.LISTEN_PORT ? 80
 	gosuperAddress: "http://unix:#{process.env.GOSUPER_SOCKET}:"
-	deltaHost: process.env.DELTA_ENDPOINT ? 'http://delta.staging.resin.io'
+	deltaHost: process.env.DELTA_ENDPOINT ? 'https://delta.resin.io'
 	registryEndpoint: process.env.REGISTRY_ENDPOINT ? 'registry.resin.io'
 	pubnub:
 		subscribe_key: checkValidKey(process.env.PUBNUB_SUBSCRIBE_KEY) ? process.env.DEFAULT_PUBNUB_SUBSCRIBE_KEY


format message in issues (#27)

format message in issues (#27)

fix #20

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


Adding more snippets

Adding more snippets

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

--- snippets/save.cson
+++ snippets/save.cson
@@ -0,0 +1,367 @@
+'.source.feature':
+
+  'save101':
+    'prefix': 'save the text content the element found by "$1" to the alias "$2"'
+    'body': 'save the text content the element found by "$1" to the alias "$2"'
+  'save102':
+    'prefix': 'save the text content the element found by alias "alias identifier" to the alias "$2"'
+    'body': 'save the text content the element found by alias "$1" to the alias "$2"'
+  'save103':
+    'prefix': 'save the text content the element found by "$1" to the alias "$2" if it exists'
+    'body': 'save the text content the element found by "$1" to the alias "$2" if it exists'
+  'save104':
+    'prefix': 'save the text content the element found by alias "alias identifier" to the alias "$2" if it exists'
+    'body': 'save the text content the element found by alias "$1" to the alias "$2" if it exists'
+  'save110':
+    'prefix': 'save the text content the element with the ID of "$1" to the alias "$2"'
+    'body': 'save the text content the element with the ID of "$1" to the alias "$2"'
+  'save111':
+    'prefix': 'save the text content the element with the class of "$1" to the alias "$2"'
+    'body': 'save the text content the element with the class of "$1" to the alias "$2"'
+  'save112':
+    'prefix': 'save the text content the element with the xpath of "$1" to the alias "$2"'
+    'body': 'save the text content the element with the xpath of "$1" to the alias "$2"'
+  'save113':
+    'prefix': 'save the text content the element with the name of "$1" to the alias "$2"'
+    'body': 'save the text content the element with the name of "$1" to the alias "$2"'
+  'save114':
+    'prefix': 'save the text content the element with the css selector of "$1" to the alias "$2"'
+    'body': 'save the text content the element with the css selector of "$1" to the alias "$2"'
+  'save120':
+    'prefix': 'save the text content the element with the ID of "$1" to the alias "$2" if it exists'
+    'body': 'save the text content the element with the ID of "$1" to the alias "$2" if it exists'
+  'save121':
+    'prefix': 'save the text content the element with the class of "$1" to the alias "$2" if it exists'
+    'body': 'save the text content the element with the class of "$1" to the alias "$2" if it exists'
+  'save122':
+    'prefix': 'save the text content the element with the xpath of "$1" to the alias "$2" if it exists'
+    'body': 'save the text content the element with the xpath of "$1" to the alias "$2" if it exists'
+  'save123':
+    'prefix': 'save the text content the element with the name of "$1" to the alias "$2" if it exists'
+    'body': 'save the text content the element with the name of "$1" to the alias "$2" if it exists'
+  'save124':
+    'prefix': 'save the text content the element with the css selector of "$1" to the alias "$2" if it exists'
+    'body': 'save the text content the element with the css selector of "$1" to the alias "$2" if it exists'
+  'save130':
+    'prefix': 'save the text content the element with the ID alias of "identifier alias" to the alias "$2"'
+    'body': 'save the text content the element with the ID alias of "$1" to the alias "$2"'
+  'save131':
+    'prefix': 'save the text content the element with the class alias of "identifier alias" to the alias "$2"'
+    'body': 'save the text content the element with the class alias of "$1" to the alias "$2"'
+  'save132':
+    'prefix': 'save the text content the element with the xpath alias of "identifier alias" to the alias "$2"'
+    'body': 'save the text content the element with the xpath alias of "$1" to the alias "$2"'
+  'save133':
+    'prefix': 'save the text content the element with the name alias of "identifier alias" to the alias "$2"'
+    'body': 'save the text content the element with the name alias of "$1" to the alias "$2"'
+  'save134':
+    'prefix': 'save the text content the element with the css selector alias of "identifier alias" to the alias "$2"'
+    'body': 'save the text content the element with the css selector alias of "$1" to the alias "$2"'
+  'save140':
+    'prefix': 'save the text content the element with the ID alias of "identifier alias" to the alias "$2" if it exists'
+    'body': 'save the text content the element with the ID alias of "$1" to the alias "$2" if it exists'
+  'save141':
+    'prefix': 'save the text content the element with the class alias of "identifier alias" to the alias "$2" if it exists'
+    'body': 'save the text content the element with the class alias of "$1" to the alias "$2" if it exists'
+  'save142':
+    'prefix': 'save the text content the element with the xpath alias of "identifier alias" to the alias "$2" if it exists'
+    'body': 'save the text content the element with the xpath alias of "$1" to the alias "$2" if it exists'
+  'save143':
+    'prefix': 'save the text content the element with the name alias of "identifier alias" to the alias "$2" if it exists'
+    'body': 'save the text content the element with the name alias of "$1" to the alias "$2" if it exists'
+  'save144':
+    'prefix': 'save the text content the element with the css selector alias of "identifier alias" to the alias "$2" if it exists'
+    'body': 'save the text content the element with the css selector alias of "$1" to the alias "$2" if it exists'
+
+  'save201':
+    'prefix': 'save the text content the hidden element found by "$1" to the alias "$2"'
+    'body': 'save the text content the hidden element found by "$1" to the alias "$2"'
+  'save202':
+    'prefix': 'save the text content the hidden element found by alias "alias identifier" to the alias "$2"'
+    'body': 'save the text content the hidden element found by alias "$1" to the alias "$2"'
+  'save203':
+    'prefix': 'save the text content the hidden element found by "$1" to the alias "$2" if it exists'
+    'body': 'save the text content the hidden element found by "$1" to the alias "$2" if it exists'
+  'save204':
+    'prefix': 'save the text content the hidden element found by alias "alias identifier" to the alias "$2" if it exists'
+    'body': 'save the text content the hidden element found by alias "$1" to the alias "$2" if it exists'
+  'save210':
+    'prefix': 'save the text content the hidden element with the ID of "$1" to the alias "$2"'
+    'body': 'save the text content the hidden element with the ID of "$1" to the alias "$2"'
+  'save211':
+    'prefix': 'save the text content the hidden element with the class of "$1" to the alias "$2"'
+    'body': 'save the text content the hidden element with the class of "$1" to the alias "$2"'
+  'save212':
+    'prefix': 'save the text content the hidden element with the xpath of "$1" to the alias "$2"'
+    'body': 'save the text content the hidden element with the xpath of "$1" to the alias "$2"'
+  'save213':
+    'prefix': 'save the text content the hidden element with the name of "$1" to the alias "$2"'
+    'body': 'save the text content the hidden element with the name of "$1" to the alias "$2"'
+  'save214':
+    'prefix': 'save the text content the hidden element with the css selector of "$1" to the alias "$2"'
+    'body': 'save the text content the hidden element with the css selector of "$1" to the alias "$2"'
+  'save220':
+    'prefix': 'save the text content the hidden element with the ID of "$1" to the alias "$2" if it exists'
+    'body': 'save the text content the hidden element with the ID of "$1" to the alias "$2" if it exists'
+  'save221':
+    'prefix': 'save the text content the hidden element with the class of "$1" to the alias "$2" if it exists'
+    'body': 'save the text content the hidden element with the class of "$1" to the alias "$2" if it exists'
+  'save222':
+    'prefix': 'save the text content the hidden element with the xpath of "$1" to the alias "$2" if it exists'
+    'body': 'save the text content the hidden element with the xpath of "$1" to the alias "$2" if it exists'
+  'save223':
+    'prefix': 'save the text content the hidden element with the name of "$1" to the alias "$2" if it exists'
+    'body': 'save the text content the hidden element with the name of "$1" to the alias "$2" if it exists'
+  'save224':
+    'prefix': 'save the text content the hidden element with the css selector of "$1" to the alias "$2" if it exists'
+    'body': 'save the text content the hidden element with the css selector of "$1" to the alias "$2" if it exists'
+  'save230':
+    'prefix': 'save the text content the hidden element with the ID alias of "identifier alias" to the alias "$2"'
+    'body': 'save the text content the hidden element with the ID alias of "$1" to the alias "$2"'
+  'save231':
+    'prefix': 'save the text content the hidden element with the class alias of "identifier alias" to the alias "$2"'
+    'body': 'save the text content the hidden element with the class alias of "$1" to the alias "$2"'
+  'save232':
+    'prefix': 'save the text content the hidden element with the xpath alias of "identifier alias" to the alias "$2"'
+    'body': 'save the text content the hidden element with the xpath alias of "$1" to the alias "$2"'
+  'save233':
+    'prefix': 'save the text content the hidden element with the name alias of "identifier alias" to the alias "$2"'
+    'body': 'save the text content the hidden element with the name alias of "$1" to the alias "$2"'
+  'save234':
+    'prefix': 'save the text content the hidden element with the css selector alias of "identifier alias" to the alias "$2"'
+    'body': 'save the text content the hidden element with the css selector alias of "$1" to the alias "$2"'
+  'save240':
+    'prefix': 'save the text content the hidden element with the ID alias of "identifier alias" to the alias "$2" if it exists'
+    'body': 'save the text content the hidden element with the ID alias of "$1" to the alias "$2" if it exists'
+  'save241':
+    'prefix': 'save the text content the hidden element with the class alias of "identifier alias" to the alias "$2" if it exists'
+    'body': 'save the text content the hidden element with the class alias of "$1" to the alias "$2" if it exists'
+  'save242':
+    'prefix': 'save the text content the hidden element with the xpath alias of "identifier alias" to the alias "$2" if it exists'
+    'body': 'save the text content the hidden element with the xpath alias of "$1" to the alias "$2" if it exists'
+  'save243':
+    'prefix': 'save the text content the hidden element with the name alias of "identifier alias" to the alias "$2" if it exists'
+    'body': 'save the text content the hidden element with the name alias of "$1" to the alias "$2" if it exists'
+  'save244':
+    'prefix': 'save the text content the hidden element with the css selector alias of "identifier alias" to the alias "$2" if it exists'
+    'body': 'save the text content the hidden element with the css selector alias of "$1" to the alias "$2" if it exists'
+
+  'save301':
+    'prefix': 'save the attribute content of "attribute" from the element found by "$2" to the alias "$3"'
+    'body': 'save the attribute content of "$1" from the element found by "$2" to the alias "$3"'
+  'save302':
+    'prefix': 'save the attribute content of "attribute" from the element found by alias "alias identifier" to the alias "$3"'
+    'body': 'save the attribute content of "$1" from the element found by alias "$2" to the alias "$3"'
+  'save303':
+    'prefix': 'save the attribute content of "attribute" from the element found by "$2" to the alias "$3" if it exists'
+    'body': 'save the attribute content of "$1" from the element found by "$2" to the alias "$3" if it exists'
+  'save304':
+    'prefix': 'save the attribute content of "attribute" from the element found by alias "alias identifier" to the alias "$3" if it exists'
+    'body': 'save the attribute content of "$1" from the element found by alias "$2" to the alias "$3" if it exists'
+  'save310':
+    'prefix': 'save the attribute content of "attribute" from the element with the ID of "$2" to the alias "$3"'
+    'body': 'save the attribute content of "$1" from the element with the ID of "$2" to the alias "$3"'
+  'save311':
+    'prefix': 'save the attribute content of "attribute" from the element with the class of "$2" to the alias "$3"'
+    'body': 'save the attribute content of "$1" from the element with the class of "$2" to the alias "$3"'
+  'save312':
+    'prefix': 'save the attribute content of "attribute" from the element with the xpath of "$2" to the alias "$3"'
+    'body': 'save the attribute content of "$1" from the element with the xpath of "$2" to the alias "$3"'
+  'save313':
+    'prefix': 'save the attribute content of "attribute" from the element with the name of "$2" to the alias "$3"'
+    'body': 'save the attribute content of "$1" from the element with the name of "$2" to the alias "$3"'
+  'save314':
+    'prefix': 'save the attribute content of "attribute" from the element with the css selector of "$2" to the alias "$3"'
+    'body': 'save the attribute content of "$1" from the element with the css selector of "$2" to the alias "$3"'
+  'save320':
+    'prefix': 'save the attribute content of "attribute" from the element with the ID of "$2" to the alias "$3" if it exists'
+    'body': 'save the attribute content of "$1" from the element with the ID of "$2" to the alias "$3" if it exists'
+  'save321':
+    'prefix': 'save the attribute content of "attribute" from the element with the class of "$2" to the alias "$3" if it exists'
+    'body': 'save the attribute content of "$1" from the element with the class of "$2" to the alias "$3" if it exists'
+  'save322':
+    'prefix': 'save the attribute content of "attribute" from the element with the xpath of "$2" to the alias "$3" if it exists'
+    'body': 'save the attribute content of "$1" from the element with the xpath of "$2" to the alias "$3" if it exists'
+  'save323':
+    'prefix': 'save the attribute content of "attribute" from the element with the name of "$2" to the alias "$3" if it exists'
+    'body': 'save the attribute content of "$1" from the element with the name of "$2" to the alias "$3" if it exists'
+  'save324':
+    'prefix': 'save the attribute content of "attribute" from the element with the css selector of "$2" to the alias "$3" if it exists'
+    'body': 'save the attribute content of "$1" from the element with the css selector of "$2" to the alias "$3" if it exists'
+  'save330':
+    'prefix': 'save the attribute content of "attribute" from the element with the ID alias of "identifier alias" to the alias "$3"'
+    'body': 'save the attribute content of "$1" from the element with the ID alias of "$2" to the alias "$3"'
+  'save331':
+    'prefix': 'save the attribute content of "attribute" from the element with the class alias of "identifier alias" to the alias "$3"'
+    'body': 'save the attribute content of "$1" from the element with the class alias of "$2" to the alias "$3"'
+  'save332':
+    'prefix': 'save the attribute content of "attribute" from the element with the xpath alias of "identifier alias" to the alias "$3"'
+    'body': 'save the attribute content of "$1" from the element with the xpath alias of "$2" to the alias "$3"'
+  'save333':
+    'prefix': 'save the attribute content of "attribute" from the element with the name alias of "identifier alias" to the alias "$3"'
+    'body': 'save the attribute content of "$1" from the element with the name alias of "$2" to the alias "$3"'
+  'save334':
+    'prefix': 'save the attribute content of "attribute" from the element with the css selector alias of "identifier alias" to the alias "$3"'
+    'body': 'save the attribute content of "$1" from the element with the css selector alias of "$2" to the alias "$3"'
+  'save340':
+    'prefix': 'save the attribute content of "attribute" from the element with the ID alias of "identifier alias" to the alias "$3" if it exists'
+    'body': 'save the attribute content of "$1" from the element with the ID alias of "$2" to the alias "$3" if it exists'
+  'save341':
+    'prefix': 'save the attribute content of "attribute" from the element with the class alias of "identifier alias" to the alias "$3" if it exists'
+    'body': 'save the attribute content of "$1" from the element with the class alias of "$2" to the alias "$3" if it exists'
+  'save342':
+    'prefix': 'save the attribute content of "attribute" from the element with the xpath alias of "identifier alias" to the alias "$3" if it exists'
+    'body': 'save the attribute content of "$1" from the element with the xpath alias of "$2" to the alias "$3" if it exists'
+  'save343':
+    'prefix': 'save the attribute content of "attribute" from the element with the name alias of "identifier alias" to the alias "$3" if it exists'
+    'body': 'save the attribute content of "$1" from the element with the name alias of "$2" to the alias "$3" if it exists'
+  'save344':
+    'prefix': 'save the attribute content of "attribute" from the element with the css selector alias of "identifier alias" to the alias "$3" if it exists'
+    'body': 'save the attribute content of "$1" from the element with the css selector alias of "$2" to the alias "$3" if it exists'
+
+'.source.feature':
+  'save1':
+    'prefix': 'save the value of the element found by "$1" to the alias "$2"'
+    'body': 'save the value of the element found by "$1" to the alias "$2"'
+  'save2':
+    'prefix': 'save the value of the element found by alias "alias identifier" to the alias "$2"'
+    'body': 'save the value of the element found by alias "$1" to the alias "$2"'
+  'save3':
+    'prefix': 'save the value of the element found by "$1" to the alias "$2" if it exists'
+    'body': 'save the value of the element found by "$1" to the alias "$2" if it exists'
+  'save4':
+    'prefix': 'save the value of the element found by alias "alias identifier" to the alias "$2" if it exists'
+    'body': 'save the value of the element found by alias "$1" to the alias "$2" if it exists'
+  'save10':
+    'prefix': 'save the value of the element with the ID of "$1" to the alias "$2"'
+    'body': 'save the value of the element with the ID of "$1" to the alias "$2"'
+  'save11':
+    'prefix': 'save the value of the element with the class of "$1" to the alias "$2"'
+    'body': 'save the value of the element with the class of "$1" to the alias "$2"'
+  'save12':
+    'prefix': 'save the value of the element with the xpath of "$1" to the alias "$2"'
+    'body': 'save the value of the element with the xpath of "$1" to the alias "$2"'
+  'save13':
+    'prefix': 'save the value of the element with the name of "$1" to the alias "$2"'
+    'body': 'save the value of the element with the name of "$1" to the alias "$2"'
+  'save14':
+    'prefix': 'save the value of the element with the css selector of "$1" to the alias "$2"'
+    'body': 'save the value of the element with the css selector of "$1" to the alias "$2"'
+  'save20':
+    'prefix': 'save the value of the element with the ID of "$1" to the alias "$2" if it exists'
+    'body': 'save the value of the element with the ID of "$1" to the alias "$2" if it exists'
+  'save21':
+    'prefix': 'save the value of the element with the class of "$1" to the alias "$2" if it exists'
+    'body': 'save the value of the element with the class of "$1" to the alias "$2" if it exists'
+  'save22':
+    'prefix': 'save the value of the element with the xpath of "$1" to the alias "$2" if it exists'
+    'body': 'save the value of the element with the xpath of "$1" to the alias "$2" if it exists'
+  'save23':
+    'prefix': 'save the value of the element with the name of "$1" to the alias "$2" if it exists'
+    'body': 'save the value of the element with the name of "$1" to the alias "$2" if it exists'
+  'save24':
+    'prefix': 'save the value of the element with the css selector of "$1" to the alias "$2" if it exists'
+    'body': 'save the value of the element with the css selector of "$1" to the alias "$2" if it exists'
+  'save30':
+    'prefix': 'save the value of the element with the ID alias of "identifier alias" to the alias "$2"'
+    'body': 'save the value of the element with the ID alias of "$1" to the alias "$2"'
+  'save31':
+    'prefix': 'save the value of the element with the class alias of "identifier alias" to the alias "$2"'
+    'body': 'save the value of the element with the class alias of "$1" to the alias "$2"'
+  'save32':
+    'prefix': 'save the value of the element with the xpath alias of "identifier alias" to the alias "$2"'
+    'body': 'save the value of the element with the xpath alias of "$1" to the alias "$2"'
+  'save33':
+    'prefix': 'save the value of the element with the name alias of "identifier alias" to the alias "$2"'
+    'body': 'save the value of the element with the name alias of "$1" to the alias "$2"'
+  'save34':
+    'prefix': 'save the value of the element with the css selector alias of "identifier alias" to the alias "$2"'
+    'body': 'save the value of the element with the css selector alias of "$1" to the alias "$2"'
+  'save40':
+    'prefix': 'save the value of the element with the ID alias of "identifier alias" to the alias "$2" if it exists'
+    'body': 'save the value of the element with the ID alias of "$1" to the alias "$2" if it exists'
+  'save41':
+    'prefix': 'save the value of the element with the class alias of "identifier alias" to the alias "$2" if it exists'
+    'body': 'save the value of the element with the class alias of "$1" to the alias "$2" if it exists'
+  'save42':
+    'prefix': 'save the value of the element with the xpath alias of "identifier alias" to the alias "$2" if it exists'
+    'body': 'save the value of the element with the xpath alias of "$1" to the alias "$2" if it exists'
+  'save43':
+    'prefix': 'save the value of the element with the name alias of "identifier alias" to the alias "$2" if it exists'
+    'body': 'save the value of the element with the name alias of "$1" to the alias "$2" if it exists'
+  'save44':
+    'prefix': 'save the value of the element with the css selector alias of "identifier alias" to the alias "$2" if it exists'
+    'body': 'save the value of the element with the css selector alias of "$1" to the alias "$2" if it exists'
+
+  'save501':
+    'prefix': 'save the value of the element found by "$1" to the alias "$2"'
+    'body': 'save the value of the element found by "$1" to the alias "$2"'
+  'save502':
+    'prefix': 'save the value of the element found by alias "alias identifier" to the alias "$2"'
+    'body': 'save the value of the element found by alias "$1" to the alias "$2"'
+  'save503':
+    'prefix': 'save the value of the element found by "$1" to the alias "$2" if it exists'
+    'body': 'save the value of the element found by "$1" to the alias "$2" if it exists'
+  'save504':
+    'prefix': 'save the value of the element found by alias "alias identifier" to the alias "$2" if it exists'
+    'body': 'save the value of the element found by alias "$1" to the alias "$2" if it exists'
+  'save510':
+    'prefix': 'save the value of the element with the ID of "$1" to the alias "$2"'
+    'body': 'save the value of the element with the ID of "$1" to the alias "$2"'
+  'save511':
+    'prefix': 'save the value of the element with the class of "$1" to the alias "$2"'
+    'body': 'save the value of the element with the class of "$1" to the alias "$2"'
+  'save512':
+    'prefix': 'save the value of the element with the xpath of "$1" to the alias "$2"'
+    'body': 'save the value of the element with the xpath of "$1" to the alias "$2"'
+  'save513':
+    'prefix': 'save the value of the element with the name of "$1" to the alias "$2"'
+    'body': 'save the value of the element with the name of "$1" to the alias "$2"'
+  'save514':
+    'prefix': 'save the value of the element with the css selector of "$1" to the alias "$2"'
+    'body': 'save the value of the element with the css selector of "$1" to the alias "$2"'
+  'save520':
+    'prefix': 'save the value of the element with the ID of "$1" to the alias "$2" if it exists'
+    'body': 'save the value of the element with the ID of "$1" to the alias "$2" if it exists'
+  'save521':
+    'prefix': 'save the value of the element with the class of "$1" to the alias "$2" if it exists'
+    'body': 'save the value of the element with the class of "$1" to the alias "$2" if it exists'
+  'save522':
+    'prefix': 'save the value of the element with the xpath of "$1" to the alias "$2" if it exists'
+    'body': 'save the value of the element with the xpath of "$1" to the alias "$2" if it exists'
+  'save523':
+    'prefix': 'save the value of the element with the name of "$1" to the alias "$2" if it exists'
+    'body': 'save the value of the element with the name of "$1" to the alias "$2" if it exists'
+  'save524':
+    'prefix': 'save the value of the element with the css selector of "$1" to the alias "$2" if it exists'
+    'body': 'save the value of the element with the css selector of "$1" to the alias "$2" if it exists'
+  'save530':
+    'prefix': 'save the value of the element with the ID alias of "identifier alias" to the alias "$2"'
+    'body': 'save the value of the element with the ID alias of "$1" to the alias "$2"'
+  'save531':
+    'prefix': 'save the value of the element with the class alias of "identifier alias" to the alias "$2"'
+    'body': 'save the value of the element with the class alias of "$1" to the alias "$2"'
+  'save532':
+    'prefix': 'save the value of the element with the xpath alias of "identifier alias" to the alias "$2"'
+    'body': 'save the value of the element with the xpath alias of "$1" to the alias "$2"'
+  'save533':
+    'prefix': 'save the value of the element with the name alias of "identifier alias" to the alias "$2"'
+    'body': 'save the value of the element with the name alias of "$1" to the alias "$2"'
+  'save534':
+    'prefix': 'save the value of the element with the css selector alias of "identifier alias" to the alias "$2"'
+    'body': 'save the value of the element with the css selector alias of "$1" to the alias "$2"'
+  'save540':
+    'prefix': 'save the value of the element with the ID alias of "identifier alias" to the alias "$2" if it exists'
+    'body': 'save the value of the element with the ID alias of "$1" to the alias "$2" if it exists'
+  'save541':
+    'prefix': 'save the value of the element with the class alias of "identifier alias" to the alias "$2" if it exists'
+    'body': 'save the value of the element with the class alias of "$1" to the alias "$2" if it exists'
+  'save542':
+    'prefix': 'save the value of the element with the xpath alias of "identifier alias" to the alias "$2" if it exists'
+    'body': 'save the value of the element with the xpath alias of "$1" to the alias "$2" if it exists'
+  'save543':
+    'prefix': 'save the value of the element with the name alias of "identifier alias" to the alias "$2" if it exists'
+    'body': 'save the value of the element with the name alias of "$1" to the alias "$2" if it exists'
+  'save544':
+    'prefix': 'save the value of the element with the css selector alias of "identifier alias" to the alias "$2" if it exists'
+    'body': 'save the value of the element with the css selector alias of "$1" to the alias "$2" if it exists'


Hide EOL

Hide EOL

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


Use spawn instead of execFile for squirrel events

--- src/browser/squirrel-events.coffee
+++ src/browser/squirrel-events.coffee
@@ -2,24 +2,20 @@
 ChildProcess = require 'child_process'
 path = require 'path'

-updateDotExe = path.resolve(path.dirname(process.execPath), '..', 'Update.exe')
-exeName = path.basename(process.execPath)
-
-createShortcut = ->
-  ChildProcess.execFile updateDotExe, ['--createShortcut', exeName], ->
-    app.quit()
-
-removeShortcut = ->
-  ChildProcess.execFile updateDotExe, ['--removeShortcut', exeName], ->
-    app.quit()
+spawnUpdateAndQuit = (option) ->
+  updateDotExe = path.resolve(path.dirname(process.execPath), '..', 'Update.exe')
+  exeName = path.basename(process.execPath)
+  updateProcess = ChildProcess.spawn(updateDotExe, ["--#{option}", exeName])
+  updateProcess.on 'error', -> # Ignore errors
+  updateProcess.on 'close', -> app.quit()

 module.exports = ->
   switch process.argv[1]
     when '--squirrel-install', '--squirrel-updated'
-      createShortcut()
+      spawnUpdateAndQuit('createShortcut')
       true
     when '--squirrel-uninstall'
-      removeShortcut()
+      spawnUpdateAndQuit('removeShortcut')
       true
     when '--squirrel-obsolete'
       app.quit()


Update static/vendors/morrisjs/spec/lib/bar/colours.coffee

Signed-off-by: Bernard Ojengwa <fccb4cc00c1ba7e51bf5c2b5f77130b9fe8d917e@gmail.com>

error: pathspec 'static/vendors/morrisjs/spec/lib/bar/colours.coffee' did not match any file(s) known to git

--- static/vendors/morrisjs/spec/lib/bar/colours.coffee
+++ static/vendors/morrisjs/spec/lib/bar/colours.coffee
@@ -0,0 +1,36 @@
+describe 'Morris.Bar#colorFor', ->
+
+  defaults =
+    element: 'graph'
+    data: [{x: 'foo', y: 2, z: 3}, {x: 'bar', y: 4, z: 6}]
+    xkey: 'x'
+    ykeys: ['y', 'z']
+    labels: ['Y', 'Z']
+
+  it 'should fetch colours from an array', ->
+    chart = Morris.Bar $.extend {}, defaults, barColors: ['#f00', '#0f0', '#00f']
+    chart.colorFor(chart.data[0], 0, 'bar').should.equal '#f00'
+    chart.colorFor(chart.data[0], 0, 'hover').should.equal '#f00'
+    chart.colorFor(chart.data[0], 1, 'bar').should.equal '#0f0'
+    chart.colorFor(chart.data[0], 1, 'hover').should.equal '#0f0'
+    chart.colorFor(chart.data[0], 2, 'bar').should.equal '#00f'
+    chart.colorFor(chart.data[0], 2, 'hover').should.equal '#00f'
+    chart.colorFor(chart.data[0], 3, 'bar').should.equal '#f00'
+    chart.colorFor(chart.data[0], 4, 'hover').should.equal '#0f0'
+
+  it 'should defer to a callback', ->
+    stub = sinon.stub().returns '#f00'
+    chart = Morris.Bar $.extend {}, defaults, barColors: stub
+    stub.reset()
+
+    chart.colorFor(chart.data[0], 0, 'bar')
+    stub.should.have.been.calledWith(
+      {x:0, y:2, label:'foo'},
+      {index:0, key:'y', label:'Y'},
+      'bar')
+
+    chart.colorFor(chart.data[0], 1, 'hover')
+    stub.should.have.been.calledWith(
+      {x:0, y:3, label:'foo'},
+      {index:1, key:'z', label:'Z'},
+      'hover')


Formatting tweaks to ADSR

Formatting tweaks to ADSR

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


CLIO-24155: Remove whitespace

CLIO-24155: Remove whitespace

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


"Delete all" button is now disabled properly and the ibCount is now incremented by 1 (closes GitHub issues #34 and #27)

--- app/assets/javascripts/inbox.coffee
+++ app/assets/javascripts/inbox.coffee
@@ -11,7 +11,7 @@
         # GitHub issue #26:
         del_all_btn = ($ "button#ib-delete-all")
         del_all_btn.removeAttr 'disabled'
-        del_all_btn[0].dataset.ibCount = 1
+        del_all_btn[0].dataset.ibCount = (Number del_all_btn[0].dataset.ibCount) + 1
     error: (jqxhr, status, error) ->
       console.log jqxhr, status, error
       showNotification "An error occurred, a developer should check the console for details", false
@@ -40,9 +40,10 @@
         console.log jqxhr, status, error
         showNotification "An error occurred, a developer should check the console for details", false
       complete: (jqxhr, status) ->
-        btn.button "reset"
         if succ
-          btn.prop "disabled", true  # this doesn't really work like I wanted it to…
+          # and now: a (broken?) re-implementation of Bootstrap's button.js
+          btn.html btn.data('resetText')
+          btn.removeClass 'disabled'
           btn[0].dataset.ibCount = 0


remove console.log() statements

remove console.log() statements

 On branch master

	modified:   nodejs_server/bestofyourtown/user_transaction.coffee

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


Tests for showing thread in course discussion (both loaded and not loaded)

error: pathspec 'common/static/coffee/spec/discussion/discussion_router_spec.coffee' did not match any file(s) known to git

--- common/static/coffee/spec/discussion/discussion_router_spec.coffee
+++ common/static/coffee/spec/discussion/discussion_router_spec.coffee
@@ -0,0 +1,189 @@
+describe 'DiscussionRouter', ->
+  beforeEach ->
+    DiscussionSpecHelper.setUpGlobals()
+    DiscussionSpecHelper.setUnderscoreFixtures()
+    appendSetFixtures("""
+
+      """)
+
+    @threads = [
+      DiscussionViewSpecHelper.makeThreadWithProps({
+        id: "1",
+        title: "Thread1",
+        votes: {up_count: '20'},
+        pinned: true,
+        comments_count: 1,
+        created_at: '2013-04-03T20:08:39Z',
+      }),
+      DiscussionViewSpecHelper.makeThreadWithProps({
+        id: "2",
+        title: "Thread2",
+        votes: {up_count: '42'},
+        comments_count: 2,
+        created_at: '2013-04-03T20:07:39Z',
+      }),
+      DiscussionViewSpecHelper.makeThreadWithProps({
+        id: "3",
+        title: "Thread3",
+        votes: {up_count: '12'},
+        comments_count: 3,
+        created_at: '2013-04-03T20:06:39Z',
+      }),
+      DiscussionViewSpecHelper.makeThreadWithProps({
+        id: "4",
+        title: "Thread4",
+        votes: {up_count: '25'},
+        comments_count: 0,
+        pinned: true,
+        created_at: '2013-04-03T20:05:39Z',
+      }),
+    ]
+
+    spyOn(DiscussionUtil, 'makeWmdEditor')
+    @discussion = new Discussion(_.map(@threads, (thread_spec) -> new Thread(thread_spec)), {pages: 2, sort: 'date'})
+    @course_settings = new DiscussionCourseSettings({
+          "category_map": {
+            "children": ["Topic", "General"],
+            "entries": {
+              "Topic": {"is_cohorted": false, "id": "topic"},
+              "General": {"is_cohorted": false, "id": "general"}
+            }
+          },
+          "allow_anonymous": false,
+          "allow_anonymous_to_peers": false,
+          "is_cohorted": true,
+          "cohorts": [
+            {"id": 1, "name": "Cohort1"},
+            {"id": 2, "name": "Cohort2"}
+          ]
+        })
+    @router = new DiscussionRouter({discussion: @discussion, course_settings: @course_settings})
+
+  describe 'showThread', ->
+    existingCheck = (thread_id) ->
+      it "shows thread #{thread_id}, which is already in threads collection", ->
+        DiscussionSpecHelper.makeAjaxSpy(() -> )
+        spyOn(@router, 'renderThreadView')
+        # precondition check - thread is in router's collection
+        expect(@router.discussion.get(thread_id)).not.toBeUndefined()
+        @router.showThread("irrelevant forum name", thread_id)
+        expect($.ajax).not.toHaveBeenCalled()
+        expect(@router.renderThreadView).toHaveBeenCalled()
+
+    missingCheck = (forum_name, thread_id) ->
+      it "requests thread #{thread_id} in forum #{forum_name} if not already in collection", ->
+
+        DiscussionSpecHelper.makeAjaxSpy(
+          (params) -> expect(params.url.path()).toBe(DiscussionUtil.urlFor('retrieve_single_thread', forum_name, thread_id))
+        )
+        spyOn(@router, 'renderThreadView')
+        # precondition check - thread is in router's collection
+        expect(@router.discussion.get(thread_id)).toBeUndefined()
+        @router.showThread(forum_name, thread_id)
+        # in this case showThread makes a hidden async ajax request - it's hard to hook inot it, so it's simpler and
+        # sufficient to just schedule assertion to run as soon as possible, but not immediately
+        setTimeout (() -> expect(@router.renderThreadView).toHaveBeenCalled()), 0
+
+
+    existingCheck('1')
+    existingCheck('2')
+    existingCheck('3')
+    existingCheck('4')
+
+    missingCheck('forum1', '12')
+    missingCheck('forum2', '15')
+    missingCheck('forum3', '112')
+


client: welcome: drop steps if user isnt allowed to create stacks

--- client/home/lib/flux/getters.coffee
+++ client/home/lib/flux/getters.coffee
@@ -1,6 +1,7 @@
 kd = require 'kd'
 welcomeStepsAll = [ 'WelcomeStepsStore' ]
 EnvironmentFlux = require 'app/flux/environment'
+canCreateStacks = require 'app/util/canCreateStacks'
 isAdmin = require 'app/util/isAdmin'
 teamHasStack = require 'app/util/teamHasStack'

@@ -30,6 +31,10 @@
     else
       steps = steps.delete 'buildStack'  unless isAdmin()

+    unless canCreateStacks()
+      steps = steps.delete 'stackCreation'
+      steps = steps.delete 'installKd'
+
     return steps.sortBy (a) -> a.get('order')
 ]


Added: doc link for cozy-fixtures

Added: doc link for cozy-fixtures

--- tests/helpers.coffee
+++ tests/helpers.coffee
@@ -1,3 +1,5 @@
+
+# See cozy-fixtures documentation for testing on https://github.com/jsilvestre/cozy-fixtures#automatic-tests
 fixtures = require 'cozy-fixtures'

 helpers = {}


Used saveimage function instead of download plugin for save image on mobile devices. (#2230)

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


Client: Account: add session list controller

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


remove a dot from the start of the class

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


Fix swipe max_index

Fix swipe max_index

Fixes https://www.pivotaltracker.com/story/show/48340149


Always soft-wrap Markdown files

Always soft-wrap Markdown files

error: pathspec 'atom.symlink/init.coffee' did not match any file(s) known to git

--- atom.symlink/init.coffee
+++ atom.symlink/init.coffee
@@ -0,0 +1,6 @@
+path = require 'path'
+
+atom.workspaceView.eachEditorView (editorView) ->
+  editor = editorView.getEditor()
+  if path.extname(editor.getPath()) is '.md'
+    editor.setSoftWrap(true)


Remove unneeded ?

Remove unneeded ?

AtomWindow always has a non-null browserWindow property

--- src/browser/atom-application.coffee
+++ src/browser/atom-application.coffee
@@ -142,7 +142,7 @@
     @on 'application:open-dev', -> @promptForPath(devMode: true)
     @on 'application:inspect', ({x,y, atomWindow}) ->
       atomWindow ?= @focusedWindow()
-      atomWindow?.browserWindow?.inspectElement(x, y)
+      atomWindow?.browserWindow.inspectElement(x, y)

     @on 'application:open-documentation', -> shell.openExternal('https://atom.io/docs/latest/?app')
     @on 'application:install-update', -> @autoUpdateManager.install()


Only read bibtex files when possibleWords is empty.

--- lib/bibtex-provider.coffee
+++ lib/bibtex-provider.coffee
@@ -12,18 +12,15 @@
   exclusive: true
   possibleWords: []
   initialize: ->
-    bibtex = []
-    files = atom.config.get "autocomplete-bibtex.bibtex"
+    if @possibleWords.length is 0
+      try
+        bibtex = []
+        files = atom.config.get "autocomplete-bibtex.bibtex"

-    for file in files
-      try
-        bibtex = bibtex.concat \
-          bibtexParse.toJSON(fs.readFileSync(file, 'utf-8'))
-      catch error
-        console.error error
+        for file in files
+          bibtex = bibtex.concat \
+            bibtexParse.toJSON(fs.readFileSync(file, 'utf-8'))

-    try
-      if @possibleWords.length is 0
         for citation in bibtex
           citation.entryTags.prettyTitle =
             @prettifyTitle citation.entryTags.title
@@ -40,8 +37,8 @@
               label: "#{citation.entryTags.prettyTitle} \
                 by #{citation.entryTags.prettyAuthors}"
             }
-    catch error
-      console.error error
+      catch error
+        console.error error

   buildSuggestions: ->
     selection = @editor.getSelection()


Refactor domain maintenance code.

Refactor domain maintenance code.

--- background_scripts/completion.coffee
+++ background_scripts/completion.coffee
@@ -200,29 +200,19 @@
   populateDomains: (onComplete) ->
     HistoryCache.use (history) =>
       @domains = {}
-      history.forEach (entry) =>
-        # We want each key in our domains hash to point to the most recent History entry for that domain.
-        domain = @parseDomain(entry.url)
-        if domain
-          previousEntry = @domains[domain]
-          if previousEntry
-            previousEntry.entry = entry if previousEntry.lastVisitTime < entry.lastVisitTime
-            previousEntry.referenceCount +=1
-          else
-            @domains[domain] = { entry: entry, referenceCount: 1 }
+      history.forEach (entry) => @onPageVisited entry
       chrome.history.onVisited.addListener(@onPageVisited.bind(this))
       chrome.history.onVisitRemoved.addListener(@onVisitRemoved.bind(this))
       onComplete()

+  # We want each key in our domains hash to point to the most recent History entry for that domain.
   onPageVisited: (newPage) ->
     domain = @parseDomain(newPage.url)
     if domain
-      previousEntry = @domains[domain]
-      if previousEntry
-        previousEntry.entry = newPage
-        previousEntry.referenceCount += 1
-      else
-        @domains[domain] = { entry: newPage, referenceCount: 1 }
+      @domains[domain] ||= { entry: newPage, referenceCount: 0 }
+      slot = @domains[domain]
+      slot.entry = newPage if slot.entry.lastVisitTime < newPage.lastVisitTime
+      slot.referenceCount += 1

   onVisitRemoved: (toRemove) ->
     if toRemove.allHistory


Revert "Add license override for emoji-images"

This reverts commit 36d28235fa7e8760526e25572f24f44efa18dae1.

--- build/tasks/license-overrides.coffee
+++ build/tasks/license-overrides.coffee
@@ -39,10 +39,6 @@
     repository: "https://github.com/cheeriojs/cheerio"
     license: 'MIT'
     source: 'https://github.com/cheeriojs/cheerio/blob/master/package.json'
-  'emoji-images@0.0.2':
-    repository: "https://github.com/HenrikJoreteg/emoji-images"
-    license: 'MIT'
-    source: 'https://github.com/HenrikJoreteg/emoji-images/blob/master/readme.md'
   'specificity@0.1.3':
     repository: 'https://github.com/keeganstreet/specificity'
     license: 'MIT'


Enable CORS tests for the download server.

--- test/src/client_test.coffee
+++ test/src/client_test.coffee
@@ -1250,7 +1250,7 @@
           expect(urlInfo.isDirect).to.equal false
           expect(urlInfo.url).not.to.contain '//db.tt/'

-          # The cont/ents server does not return CORS headers.
+          # The preview server does not return CORS headers.
           return done() unless @node_js
           xhr = new Dropbox.Xhr 'GET', urlInfo.url
           xhr.prepare().send (error, data) =>
@@ -1275,8 +1275,6 @@
           expect(urlInfo.isDirect).to.equal true
           expect(urlInfo.url).not.to.contain '//db.tt/'

-          # The contents server does not return CORS headers.
-          return done() unless @node_js
           xhr = new Dropbox.Xhr 'GET', urlInfo.url
           xhr.prepare().send (error, data) =>
             expect(error).to.equal null
@@ -1292,8 +1290,6 @@
           expect(urlInfo.url).not.to.contain '//db.tt/'
           expect(urlInfo.expiresAt - Date.now()).to.be.above 86400000

-          # The download server does not return CORS headers.
-          return done() unless @node_js
           xhr = new Dropbox.Xhr 'GET', urlInfo.url
           xhr.prepare().send (error, data) =>
             expect(error).to.equal null


proper order [#67023622]

proper order [#67023622]

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


simple_designer to createDrsign

simple_designer to createDrsign

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


Cancel Autosave Timer If Empty Submission Content

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


alert_channel temorary fix

alert_channel temorary 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/askdkc/cb_slackbot.git/'


add notification of projects (#19)

add notification of projects (#19)

* add notification of projects

* fix function name

fix #19


test: add regression test for dollar sign in a body

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

--- test/regression/dollar-sign-body-test.coffee
+++ test/regression/dollar-sign-body-test.coffee
@@ -0,0 +1,26 @@
+{assert} = require 'chai'
+Gavel2Html = require('../../src/index')
+
+describe 'Dollar sign in the body', ->
+  gavelResult = {
+    fields: {
+      body: {
+        kind: 'json',
+        values: {
+          actual: JSON.stringify({ symbol: '$' }),
+          expected: JSON.stringify({ symbol: 'a' }),
+        },
+        errors: []
+      }
+    }
+  }
+
+  payload = {
+    fieldName: 'body',
+    fieldResult: gavelResult.fields.body,
+  }
+  diff = new Gavel2Html payload
+  html = diff.getHtml()
+
+  it 'escapes the dollar sign in the diff', ->
+    assert.equal(html, '
{
\n
  "symbol": "$$"
\n
}
')


Allow multi-account with OAuthredirect arch.

--- server/controllers/konnectors.coffee
+++ server/controllers/konnectors.coffee
@@ -122,11 +122,5 @@
         req.konnector.updateFieldValues { accounts: accounts }, (err) ->
             return next err if err

-            req.konnector.import (err, notifContent) ->
-                if err?
-                    log.error err
-                else
-                    handleNotification req.konnector, notifContent
-
             res.redirect '../../..' + \
               "/#/category/#{req.konnector.category}/#{req.konnector.slug}"


Filters default value

Filters default value

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


fixed volume bug #2202

fixed volume bug #2202

--- app/views/play/menu/GuideView.coffee
+++ app/views/play/menu/GuideView.coffee
@@ -86,7 +86,7 @@
     Backbone.Mediator.publish 'level:docs-shown', {}

   onHidden: ->
-    createjs?.Sound?.setVolume?(@volume ? me.get('volume'))
+    createjs?.Sound?.setVolume?(@volume ? ( me.get('volume') ? 1.0))
     Backbone.Mediator.publish 'level:docs-hidden', {}

   onShown: ->


Modified in browser at pixie.strd6.com

Modified in browser at pixie.strd6.com

--- src/active_bounds.coffee
+++ src/active_bounds.coffee
@@ -1,5 +1,5 @@
 ###*
-ActiveBounds
+The ActiveBounds module

     player = Core
       x: 10


support for secure base layout [3rd parties]