Fix security ;)

Fix security ;)

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


Initial Brazilian Portuguese translation.

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

--- app/assets/javascripts/uploadcare/locale/pt.js.coffee
+++ app/assets/javascripts/uploadcare/locale/pt.js.coffee
@@ -0,0 +1,99 @@
+# Note: English locale is the default and used as a fallback.
+uploadcare.namespace 'uploadcare.locale.translations', (ns) ->
+  ns.pt =
+    ready: 'Fazer upload de'
+    uploading: 'Fazendo upload... Aguarde.'
+    loadingInfo: 'Carregando informações...'
+    errors:
+      default: 'Erro'
+      baddata: 'Valor incorreto'
+      size: 'Arquivo muito grande'
+      upload: 'Não foi possível fazer o upload'
+      user: 'Upload cancelado'
+      info: 'Não foi possível carregar as informações'
+      image: 'Apenas imagens são permitidas'
+      createGroup: 'Não foi possível criar o grupo de arquivos'
+      deleted: 'O arquivo foi excluído'
+    draghere: 'Arraste um arquivo para cá'
+    file:
+      one: '%1 arquivo'
+      other: '%1 arquivos'
+    buttons:
+      cancel: 'Cancelar'
+      remove: 'Excluir'
+      file: 'Computador'
+    dialog:
+      done: 'OK'
+      showFiles: 'Mostrar arquivos'
+      tabs:
+        file:
+          drag: 'Arraste um arquivo para cá'
+          nodrop: 'Faça upload de arquivos do seu computador'
+          or: 'ou'
+          button: 'Escolha um arquivo do computador'
+          also: 'Você também pode escolher arquivos de'
+          tabNames:
+            facebook: 'Facebook'
+            dropbox: 'Dropbox'
+            gdrive: 'Google Drive'
+            instagram: 'Instagram'
+            vk: 'VK'
+            evernote: 'Evernote'
+            url: 'Link da web'
+        url:
+          title: 'Arquivos da web'
+          line1: 'Faça upload de qualquer arquivo da web.'
+          line2: 'Apenas informe o link.'
+          input: 'Cole seu link aqui...'
+          button: 'Upload'
+        preview:
+          unknownName: 'desconhecido'
+          change: 'Cancelar'
+          back: 'Voltar'
+          done: 'Adicionar'
+          unknown:
+            title: 'Fazendo upload... Aguarde o preview.'
+            done: 'Pular preview e aceitar'
+          regular:
+            title: 'Adicionar esse arquivo?'
+            line1: 'Você está prestes a adicionar o arquivo acima.'
+            line2: 'Por favor, confirme.'
+          image:
+            title: 'Adicionar essa imagem?'
+            change: 'Cancelar'
+          crop:
+            title: 'Cortar e adicionar essa imagem'
+            done: 'OK'
+          error:
+            default:
+              title: 'Oops!'
+              text: 'Alguma coisa deu errado durante o upload.'
+              back: 'Por favor, tente novamente'
+            image:
+              title: 'Apenas arquivos de imagem são aceitos.'
+              text: 'Por favor, tente novamente com outro arquivo.'
+              back: 'Escolher a imagem'
+            size:
+              title: 'O arquivo que você escolheu excede o limite.'
+              text: 'Por favor, tente novamente com outro arquivo.'
+          multiple:
+            title: 'Você escolheu'
+            question: 'Você quer adicionar todos esses arquivos?'
+            clear: 'Excluir todos'
+            done: 'OK'
+      footer:
+        text: 'Upload, armazenamento e processamento dos arquivos feito por'
+        link: 'Uploadcare.com'
+    crop:
+      error:
+        title: 'Erro'
+        text: 'Não foi possível carregar a imagem'
+      done: 'OK'
+
+
+# Pluralization rules taken from:
+# http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html
+uploadcare.namespace 'uploadcare.locale.pluralize', (ns) ->
+  ns.en = (n) ->
+    return 'um' if n == 1
+    'outros'


Add tools for AngularJS

Add tools for AngularJS

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

--- angular-unicode_eastasianwidth.coffee
+++ angular-unicode_eastasianwidth.coffee
@@ -0,0 +1,40 @@
+"use strict"
+
+
+angular.module("unicode_eastasianwidth", [
+])
+
+.directive("eastAsianWidth",
+->
+  isEmpty = (value) ->
+    angular.isUndefined(value) or value is "" or value is null or value isnt value
+
+  int = (str) ->
+    parseInt(str, 10)
+
+  require: "ngModel"
+  restrict: "A"
+  link: (scope, iElement, iAttrs, controller) ->
+    maxlength = int(iAttrs.ngMaxlength or iAttrs.maxlength)
+    maxLengthValidator = (value) ->
+      if not isEmpty(value) and unicodeEastAsianWidth.width(value) > maxlength
+        controller.$setValidity("maxlength", false)
+        return undefined
+      else
+        controller.$setValidity("maxlength", true)
+        return value
+    controller.$parsers.push(maxLengthValidator)
+    controller.$formatters.push(maxLengthValidator)
+    return
+)
+
+.filter("truncate", [
+  "length",
+
+(length) ->
+  int = (str) ->
+    parseInt(str, 10)
+  length = int(length)
+  (value) ->
+    unicodeEastAsianWidth.truncate(value, length, "…")
+])


Update Schemas scripts

Update Schemas scripts

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/e-gob/interoperabilidad.git/'


Change default to 10

Change default to 10

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


Fixed the date/time format for IE11. (#1471)

* Fixed the date/time format for IE11.

* Wraped the line according to maximum allowed length.

* Wrapped the line accordingly.

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


Added Family History datatype

Added Family History datatype

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

--- app/assets/javascripts/datatypes/familyhistory.js.coffee
+++ app/assets/javascripts/datatypes/familyhistory.js.coffee
@@ -0,0 +1,36 @@
+###
+@namespace scoping into the CQL_QDM namespace
+###
+@CQL_QDM ||= {}
+
+
+###
+To meet criteria using this datatype, the diagnosis/problem indicated by the
+FamilyHistory QDM category and its corresponding value set should reflect a
+diagnosis/problem of a family member. When used in timing relationships, the
+recorded datetime acts as both the implicit start datetime and implicit stop
+datetime.
+###
+class CQL_QDM.FamilyHistory
+  constructor: (@entry) ->
+    @_onsetAge = @entry.onsetAge
+    @_recordedDatetime = @entry.recordedDatetime
+    @_relationship = @entry.relationshipToPatient
+
+  ###
+  @returns {Quantity}
+  ###
+  onsetAge: ->
+    cql.Quantity(@_onsetAge['unit'], @_onsetAge['value'])
+
+  ###
+  @returns {Date}
+  ###
+  recordedDatetime: ->
+    cql.DateTime.fromDate(moment.utc(@_recordedDatetime, 'X').toDate())
+
+  ###
+  @returns {Code}
+  ###
+  relationshipToPatient: ->
+    cql.Code(@_relationship.code, @_relationship.code_system)


Tidied up and documented

Tidied up and documented

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


Add extension loading to Bootstrapper.

Add extension loading to Bootstrapper.

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


Profile: Following/Followers/Like implementations are changed

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


activity: render channel name with label in header

--- client/activity/lib/components/threadheader/index.coffee
+++ client/activity/lib/components/threadheader/index.coffee
@@ -6,6 +6,7 @@
 ActivityFlux       = require 'activity/flux'
 ButtonWithMenu     = require 'app/components/buttonwithmenu'
 StartVideoCallLink = require 'activity/components/common/startvideocalllink'
+ChannelLabel       = require 'activity/components/channellabel'

 module.exports = class ThreadHeader extends React.Component

@@ -128,7 +129,7 @@
     return null  unless @state.thread

     <div className={kd.utils.curry "ThreadHeader", @props.className}>
-      #{@channel 'name'}
+      <ChannelLabel thread={@state.thread} />
       <ButtonWithMenu
         listClass='ChannelThreadPane-menuItems'
         items={@getMenuItems()} />


home/billing: make card form toggleable

home/billing: make card form toggleable

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

--- client/home/lib/billing/components/paymentsection.coffee
+++ client/home/lib/billing/components/paymentsection.coffee
@@ -7,6 +7,7 @@
 CreateCreditCardForm = require './creditcardcontainer'
 SubscriptionSuccessModal = require 'lab/SubscriptionSuccessModal'
 CardRemoveConfirmModal = require 'lab/CardRemoveConfirmModal'
+CardInfo = require 'lab/CreditCard/CardInfo'

 Icon = require 'lab/Icon'

@@ -47,18 +48,23 @@
     @props.onInviteMembers()

+  onToggleForm: ->
+    @setState { formVisible: not @state.formVisible }
+
+
   render: ->

-    { message, onMessageClose, isDirty, onResetForm
-      hasCard, submitting, loading, operation, onRemoveCard } = @props
+    { message, placeholders, operation
+      isDirty, hasCard, submitting, loading
+      onResetForm, onRemoveCard
+      onMessageClose, onPaymentHistory } = @props

-    { hasSuccessModal, hasRemoveModal } = @state
+    { hasSuccessModal, hasRemoveModal, formVisible } = @state

     buttonTitle = switch
-      when submitting and operation is 'create' then 'SAVING...'
-      when submitting and operation is 'change' then 'CHANGING...'
+      when submitting then 'SAVING...'
       when operation is 'create' then 'SAVE'
-      when operation is 'change' then 'CHANGE'
+      when operation is 'change' then 'SAVE NEW CARD'

     secondaryButtonProps = switch
       when isDirty then { title: 'CANCEL', onClick: onResetForm }
@@ -80,7 +86,18 @@
         onCancel={=> @onRemoveCancel()}
         onRemove={=> @onRemoveSuccess()} />

-      <CreateCreditCardForm loading={loading} ref={(f) => @_form = f} />
+      {hasCard and
+        <CardInfo
+          loading={loading}
+          number={placeholders.number}
+          brand={placeholders.brand}
+          year={placeholders.exp_year}
+          month={placeholders.exp_month}
+          formVisible={formVisible}
+          onToggleForm={=> @onToggleForm()} />}
+
+      {formVisible and
+        <CreateCreditCardForm loading={loading} ref={(f) => @_form = f} />}

       <Footer border>
         <Row style={{margin: '0'}} between='xs'>
@@ -95,6 +112,12 @@
                 size='small'
                 onClick={secondaryButtonProps.onClick}
                 type='secondary'>{secondaryButtonProps.title}</Button>}
+          </Col>
+          <Col>
+            <Button
+              size='small'
+              type='link-primary-6'
+              onClick={onPaymentHistory}>PAYMENT HISTORY</Button>
           </Col>
         </Row>
       </Footer>


[NEW] WebSQL support (for webkit browsers)

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

--- src/device.module.db.coffee
+++ src/device.module.db.coffee
@@ -0,0 +1,166 @@
+###
+WebSQL
+
+@namespace Device
+@class DB
+@author Javier Jimenez Villar <javi@tapquo.com> || @soyjavi
+###
+
+Device.DB = do(dvc = Device) ->
+  ERROR = lng.Constants.ERROR
+  CONFIG =
+    name: "lungo_db"
+    version: "1.0"
+    size: 65536
+    schema: []
+
+  db = null
+
+  ###
+  Initialize the SQLite storage (HTML5 Feature)
+  @method init
+  @param {object} Configuration for the Database
+  ###
+  init = (db_config) ->
+    CONFIG = lng.Core.mix(CONFIG, db_config)
+    db = openDatabase(CONFIG.name, CONFIG.version, CONFIG.name, CONFIG.size)
+    if db
+      _createSchema()
+    else
+      throw new Error(ERROR.DATABASE)
+
+
+  ###
+  Select a data set of a given table and based on a selection object
+  @method select
+  @param {string} Name of the table in the database
+  @param {object} [OPTIONAL] Object selection condition
+  @param {Function} Callback when the process is complete
+  ###
+  select = (table, where_obj, callback) ->
+    where = (if (where_obj) then " WHERE " + _convertToSql(where_obj, "AND") else "")
+    execute "SELECT * FROM " + table + where, (rs) ->
+      result = []
+      i = 0
+      len = rs.rows.length
+
+      while i < len
+        result.push rs.rows.item(i)
+        i++
+      _callbackResponse callback, result
+
+
+  ###
+  Inserts a data set of a given table and based on a data object
+  @method insert
+  @param {string} Name of the table in the database
+  @param {object} Object (or Array of objects) to insert in table
+  ###
+  insert = (table, data, callback) ->
+    if lng.Core.toType(data) is "object"
+      _insertRow table, data
+    else
+      for row of data
+        _insertRow table, data[row]
+
+
+  ###
+  Updates a data set of a given table and based on a data object and
+  an optional selection object
+  @method update
+  @param {string} Name of the table in the database
+  @param {object} Data object to update in table
+  @param {object} [OPTIONAL] Object selection condition
+  ###
+  update = (table, data_obj, where_obj, callback) ->
+    sql = "UPDATE " + table + " SET " + _convertToSql(data_obj, ",")
+    sql += " WHERE " + _convertToSql(where_obj, "AND")  if where_obj
+    execute sql
+
+
+  ###
+  Delete a data set of a given table and based on a selection object
+  @method drop
+  @param {string} Name of the table in the database
+  @param {object} [OPTIONAL] Object selection condition
+  ###
+  drop = (table, where_obj, callback) ->
+    where = (if (where_obj) then " WHERE " + _convertToSql(where_obj, "AND") else "")
+    execute "DELETE FROM " + table + where + ";"
+
+
+  ###
+  Executes a SQL statement in the SQLite storage
+  @method execute
+  @param {string} SQL statement
+  @param {Function} Callback when the process is complete
+  ###
+  execute = (sql, callback) ->
+    lng.Core.log 1, "lng.Data.Sql >> " + sql
+    db.transaction (transaction) ->
+      transaction.executeSql sql, [], ((transaction, rs) ->
+        _callbackResponse callback, rs
+      ), (transaction, error) ->
+        transaction.executedQuery = sql
+        _throwError.apply null, arguments
+
+
+  _createSchema = ->
+    schema = CONFIG.schema
+    schema_len = schema.length
+    return  unless schema_len
+    i = 0
+
+    while i < schema_len
+      current = schema[i]
+      _regenerateTable current
+      _createTable current.name, current.fields
+      i++
+
+  _createTable = (table, fields) ->
+    sql_fields = ""
+    for field of fields
+      if lng.Core.isOwnProperty(fields, field)
+        sql_fields += ", "  if sql_fields
+        sql_fields += field + " " + fields[field]
+    execute "CREATE TABLE IF NOT EXISTS " + table + " (" + sql_fields + ");"
+
+  _regenerateTable = (table) ->
+    _dropTable table.name  if table.drop is true
+
+  _dropTable = (table) ->
+    execute "DROP TABLE IF EXISTS " + table
+
+  _convertToSql = (fields, separator) ->
+    sql = ""
+    for field of fields
+      if lng.Core.isOwnProperty(fields, field)
+        value = fields[field]
+        sql += " " + separator + " "  if sql
+        sql += field + "="
+        sql += (if (isNaN(value)) then "\"" + value + "\"" else value)
+    sql
+
+  _callbackResponse = (callback, response) ->
+    setTimeout callback, 100, response  if lng.Core.toType(callback) is "function"
+
+  _insertRow = (table, row) ->
+    fields = ""
+    values = ""
+    for field of row
+      if lng.Core.isOwnProperty(row, field)
+        value = row[field]
+        fields += (if (fields) then ", " + field else field)
+        values += ", "  if values
+        values += (if (isNaN(value) or value is "") then "\"" + value + "\"" else value)
+    execute "INSERT INTO " + table + " (" + fields + ") VALUES (" + values + ")"
+
+  _throwError = (transaction, error) ->
+    throw new Error(ERROR.DATABASE_TRANSACTION + error.code + ": " + error.message + " \n Executed query: " + transaction.executedQuery)
+
+  init: init
+  select: select
+  insert: insert
+  update: update
+  drop: drop
+  execute: execute


Added support for streams in REST

Added support for streams in REST

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


fix "public" facet

fix "public" facet


Environment: Don't use "delete" keyword as method name


[bot] Hopefully a fix for the startup rate limiting choke

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


remove console.log

remove console.log

--- packages/rocketchat-lib/client/MessageAction.coffee
+++ packages/rocketchat-lib/client/MessageAction.coffee
@@ -90,7 +90,6 @@
 			message = @_arguments[1]
 			input = instance.find('.input-message')
 			url = RocketChat.MessageAction.getPermaLink(message._id)
-			console.log message
 			text = '[ ](' + url + ') @' + message.u.username + ': '
 			if input.value
 				input.value += if input.value.endsWith(' ') then '' else ' '


handle teardown and startup log events

handle teardown and startup log events

error: pathspec 'imports/server/mqtt/agent/logs.coffee' did not match any file(s) known to git

--- imports/server/mqtt/agent/logs.coffee
+++ imports/server/mqtt/agent/logs.coffee
@@ -0,0 +1,8 @@
+reconciler  = require '../../stateReconciler.coffee'
+
+module.exports =
+  startup: (logEvent) ->
+    reconciler.updateStartupLogs logEvent.instance, logEvent.data
+
+  teardown: (logEvent) ->
+    reconciler.updateTeardownLogs logEvent.instance, logEvent.data


Updates is_cheap_name to match blockchain

--- dl/src/common/validation.coffee
+++ dl/src/common/validation.coffee
@@ -39,10 +39,9 @@
         return null

     is_cheap_name: (account_name)->
-        account_name.length > 8 or
         /[0-9]/.test(account_name) or
         not /[aeiouy]/.test(account_name) or
-        /[\.\-/]/.test(account_name)
+        /[\.-]/.test(account_name)

     is_empty_user_input: (value)->
         return yes if is_empty value


Add has-many relationship integration tests.

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


initial commit for index.coffee

initial commit for index.coffee

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


Added test/linked_list.coffee (broken for now).

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


Fixed accounts entry bug

Fixed accounts entry bug

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

--- client/tracker.coffee
+++ client/tracker.coffee
@@ -0,0 +1,7 @@
+Tracker.autorun ->
+	#Accounts entry routing bug
+	if Meteor.userId() and not _.isNull(Router.current()) and Router.current().route.name == 'entrySignIn'
+		Router.go 'dashboard'
+
+	if Meteor.userId() and not _.isNull(Router.current()) and Router.current().route.name == 'entrySignUp'
+		Router.go 'dashboard'


added empty test suite

added empty test suite

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


Cosmetic changes (following #1490).

Cosmetic changes (following #1490).

Mainly fix the indentation on comments.  Also tweak wording a bid.

--- lib/dom_utils.coffee
+++ lib/dom_utils.coffee
@@ -167,18 +167,17 @@
       node = node.parentNode
     false

-  # True if the current element is editable and contains the active selection range.
+  # True if element is editable and contains the active selection range.
   isSelected: (element) ->
+    selection = document.getSelection()
     if element.isContentEditable
-      node = document.getSelection().anchorNode
+      node = selection.anchorNode
       node and @isDOMDescendant element, node
     else
-      selection = document.getSelection()
       if selection.type == "Range" and selection.isCollapsed
-	# The selection is inside the Shadow DOM of a node. We can check the node it registers as being
-	# before, since this represents the node whose Shadow DOM it's inside.
+	      # The selection is inside the Shadow DOM of a node. We can check the node it registers as being
+	      # before, since this represents the node whose Shadow DOM it's inside.
         containerNode = selection.anchorNode.childNodes[selection.anchorOffset]
-
         element == containerNode # True if the selection is inside the Shadow DOM of our element.
       else
         false
@@ -191,13 +190,12 @@
       handlerStack.bubbleEvent "click", target: element
     else
       element.focus()
-        # If the cursor is at the start of the element's contents, send it to the end. Motivation:
-        # * the end is a more useful place to focus than the start,
-        # * we've been moving the cursor to the end for quite some time now,
-        # * this way preserves the last used position (except when it's at the beginning), so the user can
-        #   'resume where they left off'.
-        # NOTE(mrmr1993): Some elements throw an error when we try to access their selection properties, so
-        # wrap this with a try.
+      # If the cursor is at the start of the element's contents, send it to the end. Motivation:
+      # * the end is a more useful place to focus than the start,
+      # * this way preserves the last used position (except when it's at the beginning), so the user can
+      #   'resume where they left off'.
+      # NOTE(mrmr1993): Some elements throw an error when we try to access their selection properties, so
+      # wrap this with a try.
       try
         if element.selectionStart == 0 and element.selectionEnd == 0
           element.setSelectionRange element.value.length, element.value.length


initial implementation of BC_STACK_DUP, stubs for most other stack functions

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


Added article related coffeescript file

Added article related coffeescript file

error: pathspec 'src/Jme/ArticleBundle/Resources/coffee/article.coffee' did not match any file(s) known to git

--- src/Jme/ArticleBundle/Resources/coffee/article.coffee
+++ src/Jme/ArticleBundle/Resources/coffee/article.coffee
@@ -0,0 +1,35 @@
+$('document').ready ->
+
+
+    selected = []
+    $('.tag_item_selector .item ul li').each (i) ->
+        val = $(this).attr 'data-id'
+        val = parseInt val
+        selected.push val
+
+    options = {
+    mainElement:            '.tag_item_selector',
+    autoCompleteElement:    '.item_field',
+    containerElement:       '.items ul',
+    source:                 url_tagSource,
+    saveUrl:                url_tagAddSource,
+    selected:               selected,
+    canAddNew:              true
+    minLength:              3
+    }
+
+    tagComplete = new App.Selector(options)
+
+    $('div.item_selector a.remove').live 'click', ->
+        return false
+
+    $('.tag_item_selector').find('.add-item-btn').live 'click', ->
+
+        tag = $.trim($('.item_field').val() )
+
+        tagComplete.saveItem tag
+        return false;
+
+    tagComplete.bind()
+
+    window.ttkTagComplete = tagComplete


fixed small issues

fixed small issues


clean-up flash messages after use

clean-up flash messages after use

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


fixed the event regexp once more

fixed the event regexp once more


tune description

tune description

--- spec/narrow-spec.coffee
+++ spec/narrow-spec.coffee
@@ -113,13 +113,13 @@
                 editor2 = _editor
                 ensurePaneLayout(horizontal: [[editor], [editor2]])

-          describe "left pane active", ->
+          describe "initially left-pane active", ->
             it "open on existing right pane", ->
               paneForItem(editor).activate()
               ensureEditorIsActive(editor)
               ensurePaneLayoutAfterStart((ui) -> horizontal: [[editor], [editor2, ui.editor]])

-          describe "right pane active", ->
+          describe "initially right-pane active", ->
             it "open on previous adjacent pane", ->
               ensureEditorIsActive(editor2)
               ensurePaneLayoutAfterStart((ui) -> horizontal: [[editor, ui.editor], [editor2]])
@@ -131,13 +131,13 @@
                 editor2 = _editor
                 ensurePaneLayout(vertical: [[editor], [editor2]])

-          describe "up-pane active", ->
+          describe "initially ip-pane active", ->
             it "open on existing down pane", ->
               paneForItem(editor).activate()
               ensureEditorIsActive(editor)
               ensurePaneLayoutAfterStart((ui) -> vertical: [[editor], [editor2, ui.editor]])

-          describe "down pane active", ->
+          describe "initially iown pane active", ->
             it "open on previous adjacent pane", ->
               ensureEditorIsActive(editor2)
               ensurePaneLayoutAfterStart((ui) -> vertical: [[editor, ui.editor], [editor2]])


Read configuration from koding-config-manager module

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


autocheck "no" on close-encounter form in sandbox mode

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


chore(grunt): remove filter

chore(grunt): remove filter

--- Gruntfile.coffee
+++ Gruntfile.coffee
@@ -299,7 +299,6 @@
           {
             expand: true
             dot: true
-            filter: "isFile"
             cwd: "<%= config.amsf_core %>/_app/_includes/"
             src: [
               "_amsf.html"


Layered mixin

Layered mixin

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

--- lib/mixins/layered.coffee
+++ lib/mixins/layered.coffee
@@ -0,0 +1,24 @@
+React = require 'react'
+
+#
+module.exports = ->
+  componentDidMount: ->
+    @_layerNode = document.createElement 'div'
+    document.body.appendChild @_layerNode
+
+    @_renderLayer()
+
+  componentDidUpdate: ->
+    @_renderLayer()
+
+  componentWillUnmount: ->
+    React.unmountComponentAtNode @_layerNode
+
+  _renderLayer: ->
+    content = @renderLayer()
+
+    if content
+      React.render @renderLayer(), @_layerNode
+    else
+      React.unmountComponentAtNode @_layerNode
+


Remove the height calculation aspect of tabs

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


Moved the closeTabs function to the tabs API so it's public


Prevent default event bubbling on tab click


Add utility function to (sync) check if a file exists and is a file.

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

--- lib/utilities.coffee
+++ lib/utilities.coffee
@@ -0,0 +1,9 @@
+fs = require('fs')
+
+module.exports=
+  isFileSync: (name)->
+    try
+      fs.statSync(name).isFile()
+    catch e
+      throw e unless e.code == 'ENOENT'
+      false


Fix header shortcuts

Fix header shortcuts

--- app/assets/javascripts/keyboard_shortcuts.js.coffee
+++ app/assets/javascripts/keyboard_shortcuts.js.coffee
@@ -9,10 +9,11 @@
         when 38 # select prev group with up arrow
           target = active.parent().prev('.group-item').find('.selector-link')
           target = $('#group-dropdown-items').find('.selector-link').last() if target.length is 0
-      target.focus() if target?
-      event.preventDefault()
+      if target?
+        target.focus()
+        event.preventDefault()

-    if active.not('input, textarea, select') or event.which == 27
+    if !active.is('input, textarea, select') or event.which == 27
       switch event.which
         when 71, 27 # G or ESC for groups search dropdown
           $('#groups>a').click()


Add spec for download image route

Add spec for download image route

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

--- apps/artwork/test/routes.coffee
+++ apps/artwork/test/routes.coffee
@@ -0,0 +1,70 @@
+_ = require 'underscore'
+Q = require 'bluebird-q'
+sinon = require 'sinon'
+Backbone = require 'backbone'
+request = require 'superagent'
+{ fabricate } = require 'antigravity'
+routes = require '../routes'
+CurrentUser = require '../../../models/current_user'
+Artwork = require '../../../models/artwork'
+
+describe 'Artwork routes', ->
+  beforeEach ->
+    sinon.stub Backbone, 'sync'
+    sinon.stub request, 'get'
+      .returns set: sinon.stub()
+
+    @req =
+      params: id: 'foo'
+      pipe: sinon.stub().returns pipe: sinon.stub()
+
+    @res =
+      render: sinon.stub()
+      redirect: sinon.stub()
+      status: sinon.stub()
+      locals:
+        sd:
+          APP_URL: 'http://localhost:5000'
+          CURRENT_PATH: '/artwork/andy-foobar'
+
+    @next = sinon.stub()
+
+  afterEach ->
+    Backbone.sync.restore()
+    request.get.restore()
+
+  describe '#download', ->
+    describe 'as a normal user', ->
+      describe 'when the image is downloadable', ->
+        beforeEach ->
+          Backbone.sync.restore()
+          sinon.stub(Backbone, 'sync')
+            .yieldsTo 'success', fabricate('artwork', images: [downloadable: true])
+
+        it 'downloads the artwork', ->
+          routes.download @req, @res, @next
+          request.get.called.should.be.true()
+
+      describe 'when the image is not downloadable', ->
+        beforeEach ->
+          Backbone.sync.restore()
+          sinon.stub(Backbone, 'sync')
+            .yieldsTo 'success', fabricate('artwork', images: [downloadable: false])
+
+        it 'nexts with a 403', ->
+          routes.download @req, @res, @next
+          request.get.called.should.be.false()
+          @next.called.should.be.true()
+          @res.status.args[0][0].should.equal 403
+
+    describe 'as an admin', ->
+      describe 'when the image is not downloadable', ->
+        beforeEach ->
+          @req.user = new CurrentUser fabricate 'user', type: 'Admin'
+          Backbone.sync.restore()
+          sinon.stub(Backbone, 'sync')
+            .yieldsTo 'success', fabricate('artwork', images: [downloadable: false])
+
+        it 'downloads the artwork', ->
+          routes.download @req, @res, @next
+          request.get.called.should.be.true()


Added jquery boilerplate - from ecarlesso

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


Add SPDY example

Add SPDY example

Fixes #120 ;)

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

--- examples/spdy.coffee
+++ examples/spdy.coffee
@@ -0,0 +1,30 @@
+http2 = require 'spdy'
+fs = require 'fs'
+Zappa = require './zappajs'
+
+z = Zappa.app ->
+  @use morgan: 'dev'
+
+  @get '/', ->
+    @send 'hello, http2!\ngo to /pushy'
+
+  @get '/pushy', ->
+    stream = @res.push '/main.js',
+      status: 200
+      method: 'GET'
+      request:
+        accept: '*/*'
+      response:
+        'content-type': 'application/javascript'
+    stream.on 'error', ->
+    stream.end 'alert("hello from push stream!");'
+    @res.end '<script src="/main.js"></script>'
+
+options =
+  key: fs.readFileSync 'ssl/key.pem'
+  cert: fs.readFileSync 'ssl/cert.pem'
+
+http2
+  .createServer(options, z.app)
+  .listen 8080, =>
+    console.log 'Server is listening on https://localhost:8080. You can open the URL in the browser.'


bugfix #10 invalid date in date widget (again)

 On branch bug#17

	modified:   app/lib/extensions.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/corkboard-website.git/'


Bug fixes

Bug fixes

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


Use natural ordering in sidebar

Use natural ordering in sidebar


Add Packages > Open On GitHub menu

Add Packages > Open On GitHub menu

error: pathspec 'menus/open-on-github.cson' did not match any file(s) known to git

--- menus/open-on-github.cson
+++ menus/open-on-github.cson
@@ -0,0 +1,14 @@
+'menu': [
+  {
+    'label': 'Packages'
+    'submenu': [
+      'label': 'Open On GitHub'
+      'submenu': [
+        { 'label': 'Blame', 'command': 'open-on-github:blame' }
+        { 'label': 'Copy Url', 'command': 'open-on-github:copy-url' }
+        { 'label': 'File', 'command': 'open-on-github:file' }
+        { 'label': 'History', 'command': 'open-on-github:history' }
+      ]
+    ]
+  }
+]


Remove code that disable button CONNECT

Remove code that disable button CONNECT

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/Morgy93/Rocket.Chat.Cordova.git/'


Bazinga :bangbang:

Bazinga :bangbang:

--- scripts/entrance.coffee
+++ scripts/entrance.coffee
@@ -6,5 +6,5 @@
     # If its dusya optionally follwed by ANYTHING
     if /^dusya/.test(username)
       msg.send "DEES NUTS"
-    else if /^anonuser/.test(username)
+    else if /anonuser/.test(username)
       msg.send "Bazinga!"


Update Atom config

Update Atom config

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


fixing show link

fixing show 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/alienfast/bootstrap-password.git/'


more proper response

more proper response

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/justinlhudson/WebApplication-Server.git/'


Fixed bug with systems not being addable.

--- app/views/editor/level/systems/AddLevelSystemModal.coffee
+++ app/views/editor/level/systems/AddLevelSystemModal.coffee
@@ -49,5 +49,5 @@
         original: s.get('original') ? id
         majorVersion: s.get('version').major ? 0
       @extantSystems.push levelSystem
-      Backbone.Mediator.publish 'level-system-added', system: levelSystem
+      Backbone.Mediator.publish 'editor:level-system-added', system: levelSystem
     @renderAvailableSystems()


app-updates: Fix for update app button. It was showing when user don't have the app.

--- client/app/Applications/Apps.kdapplication/Views/appview.coffee
+++ client/app/Applications/Apps.kdapplication/Views/appview.coffee
@@ -161,16 +161,17 @@
         appsController.updateUserApp app.manifest, =>
           @getSingleton("router").handleRoute "Develop"

+    @updateButton.hide()
+
     appsController.fetchApps (err, manifests) =>
       # user have the app, show just show open button
       if app.title in Object.keys manifests
         @installButton.hide()
         @openButton.show()

-      appName   = app.manifest.name
-      {version} = manifests[appName]
-      unless appsController.isAppUpdateAvailable appName, version
-        @updateButton.hide()
+      appName = app.manifest.name
+      if appsController.isAppUpdateAvailable appName, manifests[appName]?.version
+        @updateButton.show()

     {icns, name, version, authorNick} = app.manifest


invite user link: Reset password link is missed on login page

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


add hungary border sign

add hungary border sign

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

--- dev/hu.cson
+++ dev/hu.cson
@@ -0,0 +1,8 @@
+information_border_hu:
+  category: 'information'
+  name: 'European border crossing into Hungary'
+  elements: [
+    { type: 'square-rounded', color: 'blue' }
+    { type: 'europe_stars', color: 'yellow' }
+    { type: 'content-5', color: 'white', content: 'Magyarország', transform: 'scale(.75)' }
+  ]


2 -> 1

2 -> 1

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


Added task text and candidate name to task emails

--- server/routes/mail.coffee
+++ server/routes/mail.coffee
@@ -479,26 +479,30 @@
   mailTaskName = @mailTaskName
   User.findOne("_id":task.contact).select("email").lean().exec (err, contact) ->
     if err? then return cb err
-    context =
-      email_id: "tem_aryDjyw6JmEmbKtCMTSwAM"
-      recipient:
-        address: contact.email
-      email_data:
-        candidate_link: "http://codecombat.com/account/profile/#{task.user}"
-        due_date: task.date
-    log.info "Sending recruitment task reminder to #{contact.email}"
-    newSentMail =
-      mailTask: mailTaskName
-      user: task.contact
-      "metadata":
-        remarkID: task.remarkID
-        taskAction: task.action
-        date: task.date
-    MailSent.create newSentMail, (err) ->
+    User.findOne("_id":task.user).select("jobProfile.name").lean().exec (err, user) ->
       if err? then return cb err
-      sendwithus.api.send context, (err, result) ->
-        log.error "Error sending #{mailTaskName} to #{contact.email}: #{err} with result #{result}" if err
-        cb null
+      context =
+        email_id: "tem_aryDjyw6JmEmbKtCMTSwAM"
+        recipient:
+          address: contact.email
+        email_data:
+          task_text: task.action
+          candidate_name: user.jobProfile?.name ? "(Name not listed in job profile)"
+          candidate_link: "http://codecombat.com/account/profile/#{task.user}"
+          due_date: task.date
+      log.info "Sending recruitment task reminder to #{contact.email}"
+      newSentMail =
+        mailTask: mailTaskName
+        user: task.contact
+        "metadata":
+          remarkID: task.remarkID
+          taskAction: task.action
+          date: task.date
+      MailSent.create newSentMail, (err) ->
+        if err? then return cb err
+        sendwithus.api.send context, (err, result) ->
+          log.error "Error sending #{mailTaskName} to #{contact.email}: #{err} with result #{result}" if err
+          cb null

 ### New Recruit Leaderboard Email ###
 ###


Add logger class.

Add logger class.

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

--- src/coffee/logger.coffee
+++ src/coffee/logger.coffee
@@ -0,0 +1,5 @@
+{Logger} = require 'sphere-node-connect'
+
+module.exports = class extends Logger
+
+  @appName: 'sphere-stock-import'


working on stream wrapping

working on stream wrapping

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


bring stream BACK

bring stream BACK


Atomのkeymap

Atomのkeymap

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

--- keymap.cson
+++ keymap.cson
@@ -0,0 +1,2 @@
+'atom-workspace, atom-workspace atom-text-editor':
+  'ctrl-alt-m': 'markdown-preview:toggle'


check to see if the build passes without the 9000-line-file.after-opening.move-to-beginning-of-word benchmark

--- benchmark/benchmark-suite.coffee
+++ benchmark/benchmark-suite.coffee
@@ -66,13 +66,13 @@
         fbenchmark "move-down-and-scroll", 300, ->
           editor.trigger 'move-down'

-      describe "at-eof.", ->
-        endPosition = null
+      # describe "at-eof.", ->
+      #   endPosition = null

-        beforeEach ->
-          editor.moveCursorToBottom()
-          endPosition = editor.getCursorScreenPosition()
+      #   beforeEach ->
+      #     editor.moveCursorToBottom()
+      #     endPosition = editor.getCursorScreenPosition()

-        benchmark "move-to-beginning-of-word", ->
-          editor.moveCursorToBeginningOfWord()
-          editor.setCursorScreenPosition(endPosition)
+      #   benchmark "move-to-beginning-of-word", ->
+      #     editor.moveCursorToBeginningOfWord()
+      #     editor.setCursorScreenPosition(endPosition)


:lipstick: group dispatch specs

:lipstick: group dispatch specs

--- spec/command-registry-spec.coffee
+++ spec/command-registry-spec.coffee
@@ -16,97 +16,98 @@

     registry = new CommandRegistry(parent)

-  it "invokes callbacks with selectors matching the target", ->
-    called = false
-    registry.add '.grandchild', 'command', (event) ->
-      expect(this).toBe grandchild
-      expect(event.type).toBe 'command'
-      expect(event.eventPhase).toBe Event.BUBBLING_PHASE
-      expect(event.target).toBe grandchild
-      expect(event.currentTarget).toBe grandchild
-      called = true
+  describe "command dispatch", ->
+    it "invokes callbacks with selectors matching the target", ->
+      called = false
+      registry.add '.grandchild', 'command', (event) ->
+        expect(this).toBe grandchild
+        expect(event.type).toBe 'command'
+        expect(event.eventPhase).toBe Event.BUBBLING_PHASE
+        expect(event.target).toBe grandchild
+        expect(event.currentTarget).toBe grandchild
+        called = true

-    grandchild.dispatchEvent(new CustomEvent('command', bubbles: true))
-    expect(called).toBe true
+      grandchild.dispatchEvent(new CustomEvent('command', bubbles: true))
+      expect(called).toBe true

-  it "invokes callbacks with selectors matching ancestors of the target", ->
-    calls = []
+    it "invokes callbacks with selectors matching ancestors of the target", ->
+      calls = []

-    registry.add '.child', 'command', (event) ->
-      expect(this).toBe child
-      expect(event.target).toBe grandchild
-      expect(event.currentTarget).toBe child
-      calls.push('child')
+      registry.add '.child', 'command', (event) ->
+        expect(this).toBe child
+        expect(event.target).toBe grandchild
+        expect(event.currentTarget).toBe child
+        calls.push('child')

-    registry.add '.parent', 'command', (event) ->
-      expect(this).toBe parent
-      expect(event.target).toBe grandchild
-      expect(event.currentTarget).toBe parent
-      calls.push('parent')
+      registry.add '.parent', 'command', (event) ->
+        expect(this).toBe parent
+        expect(event.target).toBe grandchild
+        expect(event.currentTarget).toBe parent
+        calls.push('parent')

-    grandchild.dispatchEvent(new CustomEvent('command', bubbles: true))
-    expect(calls).toEqual ['child', 'parent']
+      grandchild.dispatchEvent(new CustomEvent('command', bubbles: true))
+      expect(calls).toEqual ['child', 'parent']

-  it "orders multiple matching listeners for an element by selector specificity", ->
-    child.classList.add('foo', 'bar')
-    calls = []
+    it "orders multiple matching listeners for an element by selector specificity", ->
+      child.classList.add('foo', 'bar')
+      calls = []

-    registry.add '.foo.bar', 'command', -> calls.push('.foo.bar')
-    registry.add '.foo', 'command', -> calls.push('.foo')
-    registry.add '.bar', 'command', -> calls.push('.bar') # specificity ties favor commands added later, like CSS
+      registry.add '.foo.bar', 'command', -> calls.push('.foo.bar')
+      registry.add '.foo', 'command', -> calls.push('.foo')
+      registry.add '.bar', 'command', -> calls.push('.bar') # specificity ties favor commands added later, like CSS

-    grandchild.dispatchEvent(new CustomEvent('command', bubbles: true))
-    expect(calls).toEqual ['.foo.bar', '.bar', '.foo']
+      grandchild.dispatchEvent(new CustomEvent('command', bubbles: true))
+      expect(calls).toEqual ['.foo.bar', '.bar', '.foo']

-  it "stops bubbling through ancestors when .stopPropagation() is called on the event", ->
-    calls = []
+    it "stops bubbling through ancestors when .stopPropagation() is called on the event", ->
+      calls = []

-    registry.add '.parent', 'command', -> calls.push('parent')
-    registry.add '.child', 'command', -> calls.push('child-2')
-    registry.add '.child', 'command', (event) -> calls.push('child-1'); event.stopPropagation()
+      registry.add '.parent', 'command', -> calls.push('parent')
+      registry.add '.child', 'command', -> calls.push('child-2')
+      registry.add '.child', 'command', (event) -> calls.push('child-1'); event.stopPropagation()

-    grandchild.dispatchEvent(new CustomEvent('command', bubbles: true))
-    expect(calls).toEqual ['child-1', 'child-2']
+      grandchild.dispatchEvent(new CustomEvent('command', bubbles: true))
+      expect(calls).toEqual ['child-1', 'child-2']

-  it "stops invoking callbacks when .stopImmediatePropagation() is called on the event", ->
-    calls = []
+    it "stops invoking callbacks when .stopImmediatePropagation() is called on the event", ->
+      calls = []

-    registry.add '.parent', 'command', -> calls.push('parent')
-    registry.add '.child', 'command', -> calls.push('child-2')
-    registry.add '.child', 'command', (event) -> calls.push('child-1'); event.stopImmediatePropagation()
+      registry.add '.parent', 'command', -> calls.push('parent')
+      registry.add '.child', 'command', -> calls.push('child-2')
+      registry.add '.child', 'command', (event) -> calls.push('child-1'); event.stopImmediatePropagation()

-    grandchild.dispatchEvent(new CustomEvent('command', bubbles: true))
-    expect(calls).toEqual ['child-1']
+      grandchild.dispatchEvent(new CustomEvent('command', bubbles: true))
+      expect(calls).toEqual ['child-1']

-  it "allows listeners to be removed via a disposable returned by ::add", ->
-    calls = []
+    it "allows listeners to be removed via a disposable returned by ::add", ->
+      calls = []

-    disposable1 = registry.add '.parent', 'command', -> calls.push('parent')
-    disposable2 = registry.add '.child', 'command', -> calls.push('child')
+      disposable1 = registry.add '.parent', 'command', -> calls.push('parent')
+      disposable2 = registry.add '.child', 'command', -> calls.push('child')

-    disposable1.dispose()
-    grandchild.dispatchEvent(new CustomEvent('command', bubbles: true))
-    expect(calls).toEqual ['child']
+      disposable1.dispose()
+      grandchild.dispatchEvent(new CustomEvent('command', bubbles: true))
+      expect(calls).toEqual ['child']

-    calls = []
-    disposable2.dispose()
-    grandchild.dispatchEvent(new CustomEvent('command', bubbles: true))
-    expect(calls).toEqual []
+      calls = []
+      disposable2.dispose()
+      grandchild.dispatchEvent(new CustomEvent('command', bubbles: true))
+      expect(calls).toEqual []

-  it "allows multiple commands to be registered under one selector when called with an object", ->
-    calls = []
+    it "allows multiple commands to be registered under one selector when called with an object", ->
+      calls = []

-    disposable = registry.add '.child',
-      'command-1': -> calls.push('command-1')
-      'command-2': -> calls.push('command-2')
+      disposable = registry.add '.child',
+        'command-1': -> calls.push('command-1')
+        'command-2': -> calls.push('command-2')

-    grandchild.dispatchEvent(new CustomEvent('command-1', bubbles: true))
-    grandchild.dispatchEvent(new CustomEvent('command-2', bubbles: true))
+      grandchild.dispatchEvent(new CustomEvent('command-1', bubbles: true))
+      grandchild.dispatchEvent(new CustomEvent('command-2', bubbles: true))

-    expect(calls).toEqual ['command-1', 'command-2']
+      expect(calls).toEqual ['command-1', 'command-2']

-    calls = []
-    disposable.dispose()
-    grandchild.dispatchEvent(new CustomEvent('command-1', bubbles: true))
-    grandchild.dispatchEvent(new CustomEvent('command-2', bubbles: true))
-    expect(calls).toEqual []
+      calls = []
+      disposable.dispose()
+      grandchild.dispatchEvent(new CustomEvent('command-1', bubbles: true))
+      grandchild.dispatchEvent(new CustomEvent('command-2', bubbles: true))
+      expect(calls).toEqual []


Various improvements to transpire script

--- scripts/transpile.coffee
+++ scripts/transpile.coffee
@@ -11,25 +11,28 @@

 Aether.addGlobal 'Vector', require '../app/lib/world/vector'
 Aether.addGlobal '_', _
-
+i = 0
 transpileLevelSession = (sessionID, cb) ->
-  query = LevelSession.findOne("_id": sessionID).select("submittedCode submittedCodeLanguage").lean()
+  query = LevelSession.findOne("_id": sessionID).select("team teamSpells submittedCode submittedCodeLanguage").lean()
   query.exec (err, session) ->
     if err then return cb err
     submittedCode = session.submittedCode
     unless session.submittedCodeLanguage
       throw "SUBMITTED CODE LANGUAGE DOESN'T EXIST"
     else
-      console.log "Transpiling code for session #{session._id} in language #{session.submittedCodeLanguage}"
+      console.log "Transpiling code for session #{i++} #{session._id} in language #{session.submittedCodeLanguage}"
     transpiledCode = {}
     #console.log "Updating session #{sessionID}"
     for thang, spells of submittedCode
       transpiledCode[thang] = {}
       for spellID, spell of spells
+        spellName = thang + "/" + spellID

+        if session.teamSpells and not (spellName in session.teamSpells[session.team]) then continue
+        #console.log "Transpiling spell #{spellName}"
         aetherOptions =
           problems: {}
-          language: session.submittedCodeLanguage
+          language: session.submittedCodeLanguage
           functionName: spellID
           functionParameters: []
           yieldConditionally: spellID is "plan"
@@ -62,7 +65,7 @@
     levelSessionIDs = _.pluck levelSessions, "_id"
     async.eachSeries levelSessionIDs, transpileLevelSession, (err) ->
       if err then return cb err
-      cb null
+      return cb null

 transpileLadderSessions = ->
@@ -80,4 +83,4 @@
       throw err if err

 serverSetup.connectToDatabase()
-transpileLadderSessions()
+transpileLadderSessions()


adding empty config

adding empty config

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

--- example/config.coffee
+++ example/config.coffee
@@ -0,0 +1,13 @@
+#
+# Fill in these values to check out the example
+#
+
+module.exports =
+  FACEBOOK_ID: ''
+  FACEBOOK_SECRET: ''
+  TWITTER_KEY: ''
+  TWITTER_SECRET: ''
+  ARTSY_ID: ''
+  ARTSY_SECRET: ''
+  SECURE_URL: 'https://staging.artsy.net'
+  APP_URL: 'http://localhost:4000'


mkdir sample

mkdir sample

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

--- samples/mkdir.coffee
+++ samples/mkdir.coffee
@@ -0,0 +1,31 @@
+
+should = require 'should'
+connect = require 'superexec/lib/connect'
+mecano = require '..'
+config = require '../test'
+{uid, gid} = config.ssh_root
+console.log '--------------------'
+console.log 'config:', config.ssh_root
+console.log '--------------------'
+
+connect config.ssh_root, (err, ssh) ->
+  mecano.remove
+    ssh: ssh
+    destination: '/tmp/mecano_sample_mkdir'
+  , (err, removed) ->
+    mecano.mkdir
+      ssh: ssh
+      mode: 0o700
+      # mode: '700'
+      destination: '/tmp/mecano_sample_mkdir/a_dir'
+      uid: uid
+      gid: gid
+    , (err, created) ->
+      created.should.eql 1
+      mecano.exec
+        ssh: ssh
+        cmd: 'ls -l /tmp/mecano_sample_mkdir'
+      , (err, executed, stdout) ->
+        console.log stdout
+        ssh.end()
+


Adding feature abstract class

Adding feature abstract class

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

--- src/abstract.coffee
+++ src/abstract.coffee
@@ -0,0 +1,38 @@
+	class Abstract
+
+		constructor: (@m) ->
+
+		Get: (id, callback, error) ->
+
+			return @m.Request @endpoint+'/'+id, 'GET', null, callback, error
+
+		Find: (terms, callback, error) ->
+
+			return @m.Request @endpoint, 'GET', terms, callback, error
+
+		List: (terms, callback, error) ->
+
+			return @m.Request @endpoint, 'GET', terms, callback, error
+
+		Fields: (id = 0, callback, error) ->
+
+			uri  = @endpoint+'/'+ if id != 0 then id+'/fields' else 'fields'
+
+			return @m.Request uri, 'GET', null, callback, error
+
+		`// @if TARGET=='nodejs'
+		`
+		Create: (data, callback, error) ->
+
+			return @m.Request @endpoint, 'POST', data, callback, error
+
+		Update: (id, data, callback, error) ->
+
+			return @m.Request @endpoint+'/'+id, 'PUT', data, callback, error
+
+		Delete: (id, callback, error) ->
+
+			return @m.Request @endpoint+'/'+id, 'DELETE', null, callback, error
+
+		`// @endif
+		`


Leave only one session in checkin api

Leave only one session in checkin api

--- server/api/setupApi.coffee
+++ server/api/setupApi.coffee
@@ -315,7 +315,7 @@
             {
                 checkins: await Checkin.findBySession(i)
                 max: MAX_CHECKIN_PER_SESSION[i]
-            } for i in [0..1])
+            } for i in [0..0])
         for sessionCheckins in checkins
             sessionCheckins.checkins = await Promise.all(sessionCheckins.checkins.map((checkin) ->
                 checkin = checkin.toObject()


Mark algoprog users in any text

Mark algoprog users in any text

--- server/api/setupApi.coffee
+++ server/api/setupApi.coffee
@@ -592,6 +592,18 @@
         stats.ip = JSON.parse(await download 'https://api.ipify.org/?format=json')["ip"]
         res.json(stats)

+    app.get '/api/markUsers', ensureLoggedIn, wrap (req, res) ->
+        url = req.query.url
+        console.log "markUsers url=", url
+        if not req.user?.admin
+            res.status(403).send('No permissions')
+            return
+        text = await download url
+        users = await User.find({})
+        for user in users
+            text = text.replace(user.name, "#{user.name}")
+        res.send(text)
+
     app.post '/api/paymentNotify', wrap (req, res) ->
         logger.info("paymentNotify #{req.body.OrderId}")
         data = deepcopy(req.body)


Ensure circle is hidden

Ensure circle is hidden

--- resources/assets/coffee/_classes/fancy-chart.coffee
+++ resources/assets/coffee/_classes/fancy-chart.coffee
@@ -46,6 +46,7 @@
     @svgEndCircle = @svgWrapper.append 'circle'
       .classed 'fancy-graph__circle', true
       .attr 'r', 2
+      .attr 'opacity', 0

     @svgHoverArea = @svg.append 'rect'
       .classed 'fancy-graph__hover-area', true
@@ -62,6 +63,11 @@
     @loadData data

+  hide: =>
+    @svgEndCircle.attr 'opacity', 0
+    @svgLine.attr 'opacity', 0
+
+
   loadData: (data) =>
     return if _.isEqual data, @data

@@ -123,6 +129,8 @@

   reveal: =>
+    return @hide() if !@data[0]?
+
     @recalc()

     @svgLine
@@ -174,7 +182,7 @@

   hoverRefresh: =>
     return if !@options.hoverId?
-    return if @data.length == 0
+    return if !@data[0]?

     x = @options.scales.x.invert(d3.mouse(@svgHoverArea.node())[0] - @margins.left)
     i = @lookupIndexFromX x


Removed stray log

Removed stray log

--- jquery.immybox.coffee
+++ jquery.immybox.coffee
@@ -186,7 +186,6 @@
         li.attr 'data-value', choice.value
         li.html format choice, query
         if choice is @selectedChoice
-          console.log 'found selected choice!'
           selectedOne = true
           li.addClass 'active'
         return li


Add failing test.

Add failing test.

--- spec/git-spec.coffee
+++ spec/git-spec.coffee
@@ -205,7 +205,7 @@
       expect(repo.isStatusModified(repo.getDirectoryStatus(directoryPath))).toBe true

   describe ".refreshStatus()", ->
-    [newPath, modifiedPath, cleanPath, originalModifiedPathText] = []
+    [newPath, modifiedPath, cleanPath, originalModifiedPathText, workingDirectory] = []

     beforeEach ->
       workingDirectory = copyRepository()
@@ -231,6 +231,35 @@
         expect(repo.isStatusNew(repo.getCachedPathStatus(newPath))).toBeTruthy()
         expect(repo.isStatusModified(repo.getCachedPathStatus(modifiedPath))).toBeTruthy()

+    it 'caches the proper statuses when a subdir is open', ->
+      subDir = path.join(workingDirectory, 'dir')
+      fs.mkdirSync(subDir)
+
+      filePath = path.join(subDir, 'b.txt')
+      fs.writeFileSync(filePath, '')
+
+      atom.project.setPaths([subDir])
+
+      waitsForPromise ->
+        atom.workspace.open('b.txt')
+
+      statusHandler = null
+      runs ->
+        repo = atom.project.getRepositories()[0]
+
+        statusHandler = jasmine.createSpy('statusHandler')
+        repo.onDidChangeStatuses statusHandler
+        repo.refreshStatus()
+
+      waitsFor ->
+        statusHandler.callCount > 0
+
+      runs ->
+        filePath = path.join(subDir, 'b.txt')
+        status = repo.getCachedPathStatus(filePath)
+        expect(repo.isStatusModified(status)).toBe false
+        expect(repo.isStatusNew(status)).toBe false
+
   describe "buffer events", ->
     [editor] = []


yet another attempt

yet another attempt

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


[parser] fix operators

[parser] fix operators

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


[bot] [fix] too tired to explain

[bot] [fix] too tired to explain

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


cleaning up main class a bit

cleaning up main class a bit


Don't auto hot swap if the user has explicitly stopped the program

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


Remove unnecessary fat arrow.

Remove unnecessary fat arrow.

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


Add configurable reporter and interface, slightly refactor test.

--- src/commands/test.coffee
+++ src/commands/test.coffee
@@ -67,13 +67,14 @@
     helpers.extend global, globals

     mocha = new Mocha()
-    # TODO: configurable reporter and interface
-    mocha.reporter('spec').ui('bdd')
-    @testFiles.forEach (file) ->
+    mocha
+      .reporter(@config.test?.reporter ? 'spec')
+      .ui(@config.test?.ui ? 'bdd')
+    @testFiles.forEach (file) =>
       mocha.addFile file
-    mocha.run (failures) ->
-      process.exit if failures > 0 then 1 else 0
-
+    mocha.run (failures) =>
+      process.exit (if failures > 0 then 1 else 0)
+
   startTestRunner: (window) =>
     getTestHelpersPath = (filename) =>
       sysPath.resolve sysPath.join @config.paths.root, @config.paths.test, filename
@@ -84,9 +85,8 @@
     ]

     async.detect testHelpersFiles, fs_utils.exists, (testHelpersFile) =>
-      globals = testHelpersFile? and require(testHelpersFile) or {}
+      globals = if testHelpersFile? then require(testHelpersFile) else {}
       globals.window = window
-
       @startMocha globals

 module.exports = test = (options) ->


bug fix

bug fix

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


commit

commit

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


Extract line initialization and removal to separate methods

--- app/assets/javascripts/player/vt.js.coffee
+++ app/assets/javascripts/player/vt.js.coffee
@@ -530,14 +530,20 @@
   scrollDown: (n = 1) ->
     @deleteLine n, @topMargin

+  _addEmptyLine: (l) ->
+    @lineData.splice l, 0, []
+    @clearLineData l
+
+  _removeLine: (l) ->
+    @lineData.splice l, 1
+
   insertLine: (n, l = @cursorY) ->
     return unless @inScrollRegion()

     i = 0
     while i < n
-      @lineData.splice @bottomMargin, 1
-      @lineData.splice l, 0, []
-      @clearLineData l
+      @_removeLine @bottomMargin
+      @_addEmptyLine l
       i++

     @updateScreen()
@@ -547,9 +553,8 @@

     i = 0
     while i < n
-      @lineData.splice l, 1
-      @lineData.splice @bottomMargin, 0, []
-      @clearLineData @bottomMargin
+      @_removeLine l
+      @_addEmptyLine @bottomMargin
       i++

     @updateScreen()


Add CFHTLS contributors, closes #261

Add CFHTLS contributors, closes #261

error: pathspec 'app/lib/results/CFHTLS-contributors.coffee' did not match any file(s) known to git


tests

tests

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

--- test/current_user.coffee
+++ test/current_user.coffee
@@ -0,0 +1,35 @@
+_ = require 'underscore'
+sinon = require 'sinon'
+Backbone = require 'backbone'
+CurrentUser = require '../lib/current_user'
+
+class User extends Backbone.Model
+
+  _.extend @prototype, CurrentUser('http://artsy.net')
+
+describe 'CurrentUser Mixin', ->
+
+  beforeEach ->
+    sinon.stub Backbone, 'sync'
+    @user = new User
+
+  afterEach ->
+    Backbone.sync.restore()
+
+  describe "#unlinkAccount", ->
+
+    it 'unlinks the user from a provider', ->
+      @user.unlinkAccount 'facebook'
+      Backbone.sync.args[0][1].url.should.include 'v1/me/authentications/facebook'
+
+  describe '#sync', ->
+
+    it 'adds the access token to data for fetches', ->
+      @user.set accessToken: 'foobarbaz'
+      @user.fetch()
+      Backbone.sync.args[0][2].data.access_token.should.equal 'foobarbaz'
+
+    xit 'adds the access token to attrs for saves', ->
+      @user.set accessToken: 'foobarbaz'
+      @user.save()
+      Backbone.sync.args[0][2].attrs


Remove semicolons from coffeescript file

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


checkStatusCode for binding request

checkStatusCode for binding request

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


Remove .coffee, switch to JavaScript.

Remove .coffee, switch to JavaScript.

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


Tested and cleaned up comment detection for space disablement sensitivity.

--- app/views/play/level/tome/SpellView.coffee
+++ app/views/play/level/tome/SpellView.coffee
@@ -216,22 +216,10 @@
       name: 'disable-spaces'
       bindKey: 'Space'
       exec: =>
-        cursor = @ace.getCursorPosition()
-          sentance = @aceDoc.getLine(cursor.row)
-
-      commentStarts =
-      javascript: '//'
-      python: '#'
-      coffeescript: '#'
-      clojure: ';'
-      lua: '--'
-      io: '//'
-    commentStart = commentStarts[@spell.language] or '//'
-    if(flg=/#{commentStart}/.test sentance)
-    @ace.execCommand 'insertstring', ' '
-    else
-    @ace.execCommand 'insertstring', ' ' unless LevelOptions[@options.level.get('slug')]?.disableSpaces
-
+        return @ace.execCommand 'insertstring', ' ' unless LevelOptions[@options.level.get('slug')]?.disableSpaces
+        line = @aceDoc.getLine @ace.getCursorPosition().row
+        return @ace.execCommand 'insertstring', ' ' if @singleLineCommentRegex().test line
+
     addCommand
       name: 'throttle-backspaces'
       bindKey: 'Backspace'
@@ -797,7 +785,9 @@
         @recompile()

   singleLineCommentRegex: ->
-    return @_singleLineCommentRegex if @_singleLineCommentRegex
+    if @_singleLineCommentRegex
+      @_singleLineCommentRegex.lastIndex = 0
+      return @_singleLineCommentRegex
     commentStarts =
       javascript: '//'
       python: '#'
@@ -806,8 +796,8 @@
       lua: '--'
       io: '//'
     commentStart = commentStarts[@spell.language] or '//'
-    @_singleLineCommentRegexp ?= new RegExp "[ \t]*#{commentStart}[^\"'\n]*", 'g'
-    @_singleLineCommentRegexp
+    @_singleLineCommentRegex = new RegExp "[ \t]*#{commentStart}[^\"'\n]*", 'g'
+    @_singleLineCommentRegex

   preload: ->
     # Send this code over to the God for preloading, but don't change the cast state.


stay alive until done

stay alive until done

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/NewSpring/norma-copy.git/'


removed ignore pattern from init

removed ignore pattern from init

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/pauljakobwhite/develephant-roots-template.git/'


:memo: Remove mention of WorkspaceView which no longer exists

Fixes #7146

--- src/workspace.coffee
+++ src/workspace.coffee
@@ -22,8 +22,8 @@
 # An instance of this class is available via the `atom.workspace` global.
 #
 # Interact with this object to open files, be notified of current and future
-# editors, and manipulate panes. To add panels, you'll need to use the
-# {WorkspaceView} class for now until we establish APIs at the model layer.
+# editors, and manipulate panes. To add panels, use {Workspace::addTopPanel}
+# and friends.
 #
 # * `editor` {TextEditor} the new editor
 #


Implemented angularjs service to set the "accepted_cookies" cookie.

Not yet implemented: this cookie will be set with value "true" when the user clicks on the "accept" button of the cookies warning message. If this cookie is set to "true", the cookies warning message won't be displayed.

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

--- app/assets/javascripts/ng-services/ng-cookiesSvc.js.coffee
+++ app/assets/javascripts/ng-services/ng-cookiesSvc.js.coffee
@@ -0,0 +1,15 @@
+########################################################
+# AngularJS service to manipulate cookies
+########################################################
+
+angular.module('feedbunch').service 'cookiesSvc',
+['$cookies', ($cookies)->
+
+  #---------------------------------------------
+  # Set an "accepted_cookies" cookie with value "true". This will make the cookies warning
+  # (to comply with EU law) not to appear again.
+  #---------------------------------------------
+  accept_cookies: ->
+    $cookies.accepted_cookies = 'true'
+
+]


Add cart.

Add cart.

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

--- src/cart.coffee
+++ src/cart.coffee
@@ -0,0 +1,26 @@
+class Cart
+  constructor: ->
+    riot.observable @
+    @items = []
+
+  add: (item) ->
+    @items.push item
+
+  remove: (item) ->
+    for _item, index in @items by -1
+      if item.id == _item.id
+        return @items.splice index, 1
+
+  get: ->
+    items = []
+
+    subtotal = 0
+
+    for item in @items
+      items.push items
+      subtotal += item.quantity * item.price
+    return
+      items:    items
+      subtotal: subtotal
+
+module.exports = new Cart


Fixing default path when not logged in

Fixing default path when not logged in

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


getAnswersInformation was implemented

getAnswersInformation was implemented

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/NightingaleStudio/exam.js.git/'


typo fixed

typo fixed

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


Check that the nodes are there

Check that the nodes are there

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


account: make sure invitations, session and user is deleted

--- workers/social/lib/social/models/account.test.coffee
+++ workers/social/lib/social/models/account.test.coffee
@@ -452,6 +452,26 @@
               expect(err).to.not.exist
               expect(name).to.not.exist
               next()
+
+          (next) ->
+            JUser.one { username }, (err, user) ->
+              expect(err).to.not.exist
+              expect(user).to.not.exist
+              next()
+
+          (next) ->
+            JInvitation.one { inviterId: account.getId() }, (err, invitation) ->
+              expect(err).to.not.exist
+              expect(invitation).to.not.exist
+              next()
+
+          (next) ->
+            JSession = require './session'
+            JSession.one { username }, (err, session) ->
+              expect(err).to.not.exist
+              expect(session).to.not.exist
+              next()
+
         ]

         async.series queue, done


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)


oops. wrong model required

oops. wrong model required

--- models/partner.coffee
+++ models/partner.coffee
@@ -1,6 +1,6 @@
-sd              = require('sharify').data
-Backbone        = require 'backbone'
-CoverImage      = require './icon.coffee'
+sd        = require('sharify').data
+Backbone  = require 'backbone'
+Icon      = require './icon.coffee'

 module.exports = class Partner extends Backbone.Model


Add simple Config system

Add simple Config system

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

--- system/Config.coffee
+++ system/Config.coffee
@@ -0,0 +1,34 @@
+# This file is part of CoffeeScript OS.
+#
+# CoffeeScript OS is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# CoffeeScript OS is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with CoffeeScript OS.  If not, see <http://www.gnu.org/licenses/>.
+
+define ["./FileSystem"], (FileSystem) -> # Provides a simplified configuration interface.
+  class Config
+    constructor: (owner) ->
+      @dir = "/config/" + owner
+      @fs = new FileSystem()
+
+    get: (key) ->
+      handle = @fs.open @dir + "/" + key
+      value = @fs.read handle
+      @fs.close handle
+      return value
+
+    set: (key, value) ->
+      handle = @fs.open @dir + "/" + key
+      @fs.write value
+      @fs.close handle
+      return value
+
+  return Config


Crew poll

Crew poll

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/jencka/2001-A-SPACE-SACRIFICE.git/'


Generate path helpers from routes.

Generate path helpers from routes.

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


use full paths in meta-t

use full paths in meta-t

--- lib/load-paths-handler.coffee
+++ lib/load-paths-handler.coffee
@@ -9,14 +9,13 @@

     paths = []
     isIgnored = (path) ->
+      path = path.substring(rootPath.length + 1)
       for segment in path.split('/')
         return true if _.contains(ignoredNames, segment)
       repo?.isPathIgnored(fs.join(rootPath, path))
     onFile = (path) ->
-      path = path.substring(rootPath.length + 1)
       paths.push(path) unless isIgnored(path)
     onDirectory = (path) ->
-      path = path.substring(rootPath.length + 1)
       not isIgnored(path)
     fs.traverseTree(rootPath, onFile, onDirectory)


Added karma tracking script

Added karma tracking script

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

--- src/scripts/karma.coffee
+++ src/scripts/karma.coffee
@@ -0,0 +1,62 @@
+# Track arbitrary karma
+#
+# <thing>++ - give thing some karma
+# <thing>-- - take away some of thing's karma
+# karma <thing> - check thing's karma, if <thing> is ommitted get top and bottom 3
+class Karma
+  constructor: (@robot) ->
+    @cache = {}
+
+    @robot.brain.on 'loaded', =>
+      if @robot.brain.data.karma
+        @cache = @robot.brain.data.karma
+
+  add: (thing) ->
+    @cache[thing] ?= 0
+    @cache[thing] += 1
+    @robot.brain.data.karma = @cache
+
+  subtract: (thing) ->
+    @cache[thing] ?= 0
+    @cache[thing] -= 1
+    @robot.brain.data.karma = @cache
+
+  get: (thing) ->
+    k = if @cache[thing] then @cache[thing] else 0
+    return k
+
+  summary: ->
+    s = []
+    for key,val of @cache
+      s.push({name: key, karma: val})
+    s.sort (a,b) -> b.karma - a.karma
+    if s.length >= 6
+      return [s[0], s[1], s[2], s[s.length-3], s[s.length-2], s[s.length-1]]
+    else
+      return s
+
+module.exports = (robot) ->
+  karma = new Karma robot
+  robot.hear /(\S+[^+])\+\+(\s|$)/, (msg) ->
+    karma.add msg.match[1].toLowerCase()
+    msg.reply "The operation succeeded."
+
+  robot.hear /(\S+[^-])--(\s|$)/, (msg) ->
+    karma.subtract msg.match[1].toLowerCase()
+    msg.reply "The operation succeeded."
+
+  robot.respond /karma ?(\S*)/, (msg) ->
+    if msg.match[1]
+      match = msg.match[1].toLowerCase()
+      msg.send "\"#{match}\" has #{karma.get(match)} karma."
+    else
+      s = karma.summary()
+      if s.length >= 3
+        msg.send "Highest karma: \"#{s[0].name}\" (#{s[0].karma}), " +
+               "\"#{s[1].name}\" (#{s[1].karma}), and \"#{s[2].name}\" " +
+               "(#{s[2].karma}). Lowest karma: \"#{s[s.length-1].name}\" " +
+               "(#{s[s.length-1].karma}), \"#{s[s.length-2].name}\" " +
+               "(#{s[s.length-2].karma}), and \"#{s[s.length-3].name}\" " +
+               "(#{s[s.length-2].karma})."
+      else
+        msg.send "There aren't enough items with karma to give a top and bottom 3"


Adds simple axis visualization

Adds simple axis visualization

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

--- src/scripts/scale.coffee
+++ src/scripts/scale.coffee
@@ -0,0 +1,42 @@
+# Description
+#   Simple axis visualization.
+#
+# Commands:
+#   hubot scale <value> - Show a simple text scale.
+#   hubot scale <locale> <value> - Show a simple text scale in specified locale - can be 'uk', 'nj', or 'uh'.
+
+# Author:
+#   pengwynn
+#   ymendel
+#   balevine
+
+drawScale = (value, max = 10, locale = 'us') ->
+  if value?
+    locale = locale.replace(' ', '').toLowerCase()
+    max = parseInt(max)
+    pos = if value then parseInt(value) else 0
+    pos ?= 0
+    pos = Math.min(pos, max)
+    pos = Math.max(pos, 0)
+    switch locale
+     when 'uh'
+        textMin = "wut"
+        textMax = "wat"
+      when 'uk'
+        textMin = "dreadful"
+        textMax = "brilliant"
+      when 'nj'
+        textMin = "You think you're better than me?"
+        textMax = "fuggedaboutit"
+      else
+        textMin = "horrible"
+        textMax = "amazing"
+
+    left = Array(pos).join("=")
+    right = Array(max-pos+1).join("=")
+
+    "[#{textMin}]#{left}X#{right}[#{textMax}]"
+
+module.exports = (robot) ->
+  robot.respond /scale(\s\w+)? (\d+)\/?(\d+)?/i, (msg) ->
+    msg.send(drawScale(msg.match[2], msg.match[3], msg.match[1]))


added server and instructions for using it

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


Use profile_slug in url for menu.

Use profile_slug in url for menu.

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


パスワード入力欄の動的プログラム実装

パスワード入力欄の動的プログラム実装

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

--- app/assets/javascripts/staff/customer_form.js.coffee
+++ app/assets/javascripts/staff/customer_form.js.coffee
@@ -0,0 +1,11 @@
+$(document).on 'ready page:load', ->
+  $('form.edit_form').on 'click', '#enable-password-field', ->
+    $('#enable-password-field').hide()
+    $('#disable-password-field').show()
+    $('#form_customer_password').removeAttr('disabled')
+    $('label[for=form_customer_password]').addClass('required')
+  $('form.edit_form').on 'click', '#disable-password-field', ->
+    $('#disable-password-field').hide()
+    $('#enable-password-field').show()
+    $('#form_customer_password').attr('disabled', 'disabled')
+    $('label[for=form_customer_password]').removeClass('required')


Update zh-HANS.coffee

Update zh-HANS.coffee

--- app/locale/zh-HANS.coffee
+++ app/locale/zh-HANS.coffee
@@ -15,9 +15,9 @@
     fork: "派生"
     play: "开始"
     retry: "重试"
-#    watch: "Watch"
-#    unwatch: "Unwatch"
-#    submit_patch: "Submit Patch"
+    watch: "关注"
+    unwatch: "取消关注"
+    submit_patch: "提交补丁"

   units:
     second: "秒"
@@ -166,8 +166,8 @@
     email_notifications: "通知"
 #    email_notifications_summary: "Controls for personalized, automatic email notifications related to your CodeCombat activity."
     email_any_notes: "任何通知"
-#    email_any_notes_description: "Disable to stop all activity notification emails."
-#    email_recruit_notes: "Job Opportunities"
+    email_any_notes_description: "取消接收所有活动提醒邮件"
+    email_recruit_notes: "工作机会"
 #    email_recruit_notes_description: "If you play really well, we may contact you about getting you a (better) job."
     contributor_emails: "贡献者通知"
     contribute_prefix: "我们在寻找志同道合的人！请到"
@@ -181,7 +181,7 @@
     job_profile_approved: "你填写的工作经历将由CodeCombat认证. 雇主将看到这些信息，除非你将它设置为不启用状态或者连续四周没有更新."
     job_profile_explanation: "你好! 填写这些信息, 我们将使用它帮你寻找一份软件开发的工作."
 #    sample_profile: "See a sample profile"
-#    view_profile: "View Your Profile"
+    view_profile: "浏览个人信息"

   account_profile:
     edit_settings: "编辑设置"
@@ -199,7 +199,7 @@

   employers:
     want_to_hire_our_players: "想要雇用CodeCombat上的专业玩家？"
-#    see_candidates: "Click here to see our candidates"
+    see_candidates: "点击这里查看我们的忧患人"
     candidates_count_prefix: "我们当前有 "
     candidates_count_many: "很多"
     candidates_count_suffix: "经过我们认证的高手们正在找工作。"
@@ -210,8 +210,8 @@
     candidate_top_skills: "高级技能"
     candidate_years_experience: "多年工作经验"
     candidate_last_updated: "最后一次更新"
-#    candidate_approved: "Us?"
-#    candidate_active: "Them?"
+    candidate_approved: "我们"
+    candidate_active: "他们"

   play_level:
     level_load_error: "关卡不能载入: "
@@ -271,7 +271,7 @@
     editor_config_invisibles_description: "显示诸如空格或TAB键。"
     editor_config_indentguides_label: "显示缩进提示"
     editor_config_indentguides_description: "显示一条竖线以使缩进更明显。"
-#    editor_config_behaviors_label: "Smart Behaviors"
+    editor_config_behaviors_label: "聪明的行为"
     editor_config_behaviors_description: "自动完成括号，大括号和引号。"
     loading_ready: "载入完成!"
     tip_insert_positions: "使用Shift+左键来插入拼写编辑器。"
@@ -320,7 +320,7 @@
     lg_title: "最新的游戏"
 #    clas: "CLAs"

-#  community:
+  community:
     level_editor: "关卡编辑器"
     main_title: "CodeCombat 社区"
 #    facebook: "Facebook"
@@ -336,7 +336,7 @@
     thang_description: "创建单元，并定义单元的逻辑、图形和音频。目前只支持导入 Flash 导出的矢量图形。"
     level_title: "关卡编辑器"
     level_description: "所有用来创造所有难度的关卡的工具，包括脚本、上传音频和构建自定义逻辑。"
-#    got_questions: "Questions about using the CodeCombat editors?"
+    got_questions: "使用CodeCombat编辑器有问题？"
     contact_us: "联系我们！"
     hipchat_prefix: "你也可以在这里找到我们"
     hipchat_url: "HipChat 房间。"
@@ -378,9 +378,9 @@
     new_article_title: "创建一个新物品"
     new_thang_title: "创建一个新物品类型"
     new_level_title: "创建一个新关卡"
-#    new_article_title_signup: "Sign Up to Create a New Article"
-#    new_thang_title_signup: "Sign Up to Create a New Thang Type"
-#    new_level_title_signup: "Sign Up to Create a New Level"
+    new_article_title_signup: "注册以创建新的物品"
+    new_thang_title_signup: "注册以创建新的物品类型"
+    new_level_title_signup: "注册以创建新的关卡"
     article_search_title: "在这里搜索物品"
     thang_search_title: "在这里搜索物品类型"
     level_search_title: "在这里搜索关卡"