Hubot responds with a robot-oriented meme when appropriate

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

--- src/scripts/robot-memes.coffee
+++ src/scripts/robot-memes.coffee
@@ -0,0 +1,31 @@
+# Robot Memes
+#
+# hubot robot - mention the word robot to hubot
+#               and he responds with a robot-oriented meme
+
+robot_memes = [
+	"http://troll.me/images/ancient-aliens-guy/but-you-see-steve-is-a-alien-robot-thumb.jpg",
+	"http://troll.me/images/arnold-disgusting/i-see-robots-thumb.jpg",
+	"http://troll.me/images/bender/i-am-not-a-robot-i-am-a-unicorn-thumb.jpg",
+	"http://troll.me/images/bender/i-be-no-human-i-be-robot-with-emotion-thumb.jpg",
+	"http://troll.me/images/bender/robots-cant-pimp-sure-thumb.jpg",
+	"http://troll.me/images/compliment-bender/indeed-my-robotic-friend-bite-my-lustrous-metallic-behind-thumb.jpg",
+	"http://troll.me/images/conspiracy-keanu/can-bust-the-robot-dance-so-well-what-if-im-a-robot-thumb.jpg",
+	"http://troll.me/images/conspiracy-keanu/cant-read-the-captcha-verification-what-if-i-am-a-robot-thumb.jpg",
+	"http://troll.me/images/conspiracy-keanu/he-busts-the-robot-dance-so-well-what-if-hes-a-robot-thumb.jpg",
+	"http://troll.me/images/conspiracy-keanu/what-if-dubstep-is-just-robots-singing-thumb.jpg",
+	"http://troll.me/images/conspiracy-keanu/what-if-everyone-is-a-robot-except-me-thumb.jpg",
+	"http://troll.me/images/conspiracy-keanu/what-if-im-the-only-human-and-everyone-else-are-just-robots-thumb.jpg",
+	"http://troll.me/images/conspiracy-keanu/what-if-like-everyone-i-know-is-a-robot-thumb.jpg",
+	"http://troll.me/images/conspiracy-keanu/what-if-this-is-an-alternate-universe-created-for-us-by-robots-thumb.jpg",
+	"http://troll.me/images/conspiracy-keanu/what-if-we-are-robots-programmed-to-think-we-are-humans--thumb.jpg",
+	"http://troll.me/images/conspiracy-keanu/what-if-were-scary-to-the-robots-thumb.jpg",
+	"http://troll.me/images/futurama-fry/could-be-a-man-in-robotsuit-or-could-it-be-robot-in-mansuit-in-a-robotsuit-thumb.jpg",
+	"http://troll.me/images/futurama-fry/not-sure-if-human-or-robot-thumb.jpg",
+	"http://troll.me/images/philosoraptor/if-lab-is-all-about-research-development-why-keep-old-robots-thumb.jpg",
+	"http://troll.me/images/professor/a-giant-red-robot-wonderful-thumb.jpg"
+]
+
+module.exports = (robot) ->
+  robot.respond /(.*)(robot)/i, (msg) ->
+	    msg.send msg.random robot_memes


Query tests on browser

Query tests on browser

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

--- test/browser/queries.coffee
+++ test/browser/queries.coffee
@@ -0,0 +1,87 @@
+assert = require 'assert'
+createSocket = require '../helpers/socket.coffee'
+{Connection} = require '../../lib/client'
+
+describe 'Queries', ->
+
+  before -> @connection = new Connection(createSocket())
+  after  -> @connection.socket.close()
+
+  fixtures = require('../helpers/fixtures.coffee')()
+
+  beforeEach (done)->
+    fixtures.reset(done)
+    @connection.collections = {}
+
+  beforeEach (done)->
+    @connection.get('cars', 'porsche').create 'text', 'red', =>
+      @connection.get('cars', 'jaguar').create 'text', 'green', =>
+        @connection.collections = {}
+        done()
+
+
+  describe 'fetch', ->
+
+    it 'returns documents', (done)->
+      @connection.createFetchQuery 'cars', {}, {}, (error, documents)->
+        assert.equal documents[0].name, 'porsche'
+        assert.equal documents[1].name, 'jaguar'
+        done()
+
+    describe 'docMode: fetch', ->
+
+      it 'returns documents with snapshots', (done)->
+        @connection.createFetchQuery 'cars', {}, {docMode: 'fetch'}, (error, documents)->
+          assert.equal documents[0].snapshot, 'red'
+          assert.equal documents[1].snapshot, 'green'
+          done()
+
+      it 'populates connection documents', (done)->
+        porsche = @connection.get('cars', 'porsche')
+        assert.equal porsche.type, undefined
+        assert.equal porsche.snapshot, undefined
+        @connection.createFetchQuery 'cars', {}, {docMode: 'fetch'}, (error, documents)->
+          assert.equal porsche.type.name, 'text'
+          assert.equal porsche.snapshot, 'red'
+          done()
+
+
+  describe 'subscribe', ->
+
+    it 'returns documents', (done)->
+      @connection.createSubscribeQuery 'cars', {}, {}, (error, documents)->
+        assert.equal documents[0].name, 'porsche'
+        assert.equal documents[1].name, 'jaguar'
+        done()
+
+    it 'emits insert when creating document', (done)->
+      query = @connection.createSubscribeQuery 'cars', {}, {}
+      query.on 'insert', ([document])->
+        assert.equal document.snapshot, 'black'
+        done()
+      @connection.get('cars', 'panther').create 'text', 'black'
+
+    # FIXME as soon as upstream bug is fixed
+    # https://github.com/share/livedb/pull/11
+    xit 'emits remove when deleting document', (done)->
+      query = @connection.createSubscribeQuery 'cars', {}, {}
+      query.on 'remove', ([document])->
+        assert.equal document.snapshot, 'black'
+        done()
+      @connection.get('cars', 'porsche').del()
+
+
+  describe 'docMode: sub', ->
+    before -> @anotherConnection = new Connection(createSocket())
+    after  -> @anotherConnection.socket.close()
+    beforeEach -> @anotherConnection.collections = {}
+
+    it 'subscribes all result documents', (done)->
+      @connection.createSubscribeQuery 'cars', {}, {docMode: 'sub'}
+      , (error, [document])=>
+        document.on 'op', (operation)->
+          console.log operation
+          assert.deepEqual operation, [3, 'y']
+          done()
+        porsche = @anotherConnection.get('cars', 'porsche')
+        porsche.fetch -> porsche.submitOp [3, 'y']


Modified in browser at pixie.strd6.com

Modified in browser at pixie.strd6.com

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

--- src/dust_emitter.coffee
+++ src/dust_emitter.coffee
@@ -0,0 +1,36 @@
+DustParticle = (I={}, self) ->
+  Object.extend I,
+    color: 'rgb(100, 100, 100)'
+    duration: 0.2
+    fadeOut: true
+    maxSpeed: 90
+
+  I.velocity = [
+    Point(-60, -30)
+    Point(40, -15)
+    Point(-20, -7)
+    Point(60, -30)
+    Point(40, -15)
+    Point(20, -7)
+  ].rand()
+
+  I.acceleration = Point(0, 60)
+
+  return {}
+
+DustEmitter = (I={}) ->
+  Object.reverseMerge I,
+    duration: 3
+    particleCount: 20
+    batchSize: 5
+    x: I.x
+    y: I.y + I.height / 2
+    zIndex: 50
+    generator:
+      includedModules: ["DustParticle"]
+      radius: (n) ->
+        [2, 3, 1].wrap(n)
+
+  self = Emitter(I)
+
+  return self


[refactor] rewrite express middleware in :coffee:

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

--- src/express-bull.coffee
+++ src/express-bull.coffee
@@ -0,0 +1,82 @@
+express    = require "express"
+errify     = require "errify"
+GetJobs    = require "./get_jobs"
+
+
+class ExpressBull
+  states: [
+    "active"
+    "wait"
+    "failed"
+    "complete"
+  ]
+
+  constructor: ({@router, @redisClient}) ->
+    @router or= new express.Router
+    throw new Error "redisClient required" unless @redisClient
+
+    @Store = require "./redis-model"
+    @Store.setup @redisClient
+
+    @getJobs = GetJobs @Store
+    bindRoutes()
+
+  bindRoutes: ->
+    @router.get "/#{state}", @getHandler state for state in @states
+    @router.get "/data/id/:type/:id",    @dataById
+    @router.get "/pending/id/:type/:id", @makePendingById
+    @router.get "/delete/id/:type/:id",  @deleteById
+    @router.get "/delete/status/:type",  @deleteByStatus
+    @router.get "/queues",               @queues
+
+  getHandler: (state) -> (req, res, next) ->
+    ideally = errify next
+    await @getJobs state, ideally defer results
+    res.json results
+
+  getJobs: (state) ->
+    await @Store.statusKeys state, ideally defer list
+    await @Store.jobsInList list,  ideally defer keys
+    await @Store.formatKeys keys,  ideally defer keys
+
+    if state is "active"
+      await @Store.getProgressForKeys keys, ideally defer keys
+
+    await @Store.getStatusCounts ideally defer counts
+    callback null, {keys, counts}
+
+  dataById: (req, res, next) ->
+    ideally = errify next
+    {id, type} = req.params
+
+    await @Store.dataById type, id, ideally defer results
+    res.json message: results
+
+  makePendingById: (req, res, next) ->
+    ideally = errify next
+    {id, type} = req.params
+
+    await @Store.makePendingById type, id, ideally defer results
+    res.json message: results
+
+  deleteById: (req, res, next) ->
+    ideally = errify next
+    {id, type} = req.params
+
+    await @Store.deleteById type, id, ideally defer results
+    res.json message: results
+
+  deleteByStatus: (req, res, next) ->
+    ideally = errify next
+    {type} = req.params
+
+    await @Store.deleteByStatus type, ideally defer results
+    res.json message: results
+
+  queues: (req, res, next) ->
+    ideally = errify next
+    await @Store.queues ideally defer results
+    res.json results
+
+
+module.exports = ExpressBull


added clearGraph() method to query

added clearGraph() method to query

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/MicrosmartSA/ubiquity-ui.git/'


logout

logout

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/Boxee/cloudee-couch.git/'


Create toggle.coffee

Create toggle.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/RivalNick/personal.git/'


bug fix to update

bug fix to update

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


[Bugfix] Only interact with carousel if images

--- src/desktop/apps/artists/client/carousel.coffee
+++ src/desktop/apps/artists/client/carousel.coffee
@@ -57,17 +57,19 @@

   next: (e) ->
     e?.preventDefault()
-    if @active is @$images.length - @increment
-      @active -= @$images.length
-    @active += @increment
-    @moveToActive()
+    if @$images
+      if @active is @$images.length - @increment
+        @active -= @$images.length
+      @active += @increment
+      @moveToActive()

   prev: (e) ->
     e?.preventDefault()
-    if @active is 0
-      @active = @$images.length
-    @active -= @increment
-    @moveToActive()
+    if @$images
+      if @active is 0
+        @active = @$images.length
+      @active -= @increment
+      @moveToActive()

   keyUp: (e) ->
     switch e.keyCode


add resource manager class

add resource manager class

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

--- scripts/resource_manager.coffee
+++ scripts/resource_manager.coffee
@@ -0,0 +1,11 @@
+class ResourceManager
+  constructor: ->
+    @resources = {}
+
+  get: (keypath) ->
+    @resources[keypath]
+
+  register: (keypath, value) ->
+    @resources[keypath] = value
+
+window.ResourceManager = ResourceManager


Fix a typo

Fix a typo

--- server/lib/remote_access.coffee
+++ server/lib/remote_access.coffee
@@ -62,7 +62,7 @@
                                 cache[access.value.login] = access.value.token
                     callback?()
             else
-                callback()?
+                callback?()

 # Check if <login>:<password> is authenticated for a device


Fix for reference error in deserialization

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


chore(gulp): fix watchified builds

chore(gulp): fix watchified builds

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/kvcrawford/reactive-mpc.git/'


Kill process when task is aborted

Kill process when task is aborted

--- lib/load-paths-task.coffee
+++ lib/load-paths-task.coffee
@@ -30,8 +30,11 @@
     stdout = (data) ->
       paths = paths.concat(_.compact(data.split("\n")))

-    new BufferedProcess({command, args, stdout, exit})
+    @process = new BufferedProcess({command, args, stdout, exit})
     deferred

   abort: ->
     @aborted = true
+    if @process?
+      @process.kill()
+      @process = null


Added password check for registration

Added password check for registration

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/C-Bouthoorn/Anthony-Server.git/'


Lint Gruntfile.coffee

Lint Gruntfile.coffee

--- Gruntfile.coffee
+++ Gruntfile.coffee
@@ -17,6 +17,7 @@

       src: ['src/**/*.coffee']
       test: ['spec/**/*.coffee']
+      gruntfile: ['Gruntfile.coffee']

     cpplint:
       files: ['src/**/*.cc']


Capture exceptions in spec runner

Capture exceptions in spec runner

--- Gruntfile.coffee
+++ Gruntfile.coffee
@@ -40,7 +40,7 @@
           failOnError: true

       test:
-        command: 'node_modules/.bin/jasmine-focused --coffee spec'
+        command: 'node_modules/.bin/jasmine-focused --captureExceptions --coffee spec'
         options:
           stdout: true
           stderr: true


remove console.log

remove console.log

--- models/artwork.coffee
+++ models/artwork.coffee
@@ -135,12 +135,6 @@
   # return {Boolean}
   isContactable: ->
     @get('forsale') and @has('partner') and not @get('acquireable')
-
-  hasPartnerPhoneNumber: ->
-    console.log @get('partner')
-
-  partnerPhoneNumber: ->
-    console.log @get('partner')

   # The work is not for sale but a buyer may be interested
   # in related works


More coffee-y

More coffee-y

--- resources/assets/coffee/react/profile-page/recent-achievements.coffee
+++ resources/assets/coffee/react/profile-page/recent-achievements.coffee
@@ -58,7 +58,7 @@
           dd {}, "#{achievementsProgress}%"

       div className: 'profile-row profile-recent-achievements',
-        currentUserAchievements.slice(0, maxDisplayed).map (a, i) =>
+        currentUserAchievements[...maxDisplayed].map (a, i) =>
           el ProfilePage.AchievementBadge,
             key: "profile-achievement-#{i}"
             achievement: a.achievement


Random value in a range

Random value in a range

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

--- _app/random.coffee
+++ _app/random.coffee
@@ -0,0 +1,4 @@
+define([],()->
+  return (range)->
+    return Math.floor(Math.random() * range)
+)


updated item table message to be more expressive.

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


Meter polling every 5 seconds

Meter polling every 5 seconds

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


Added schema for resource.

Added schema for resource.

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

--- app/lib/collections/schemas/resource.coffee
+++ app/lib/collections/schemas/resource.coffee
@@ -0,0 +1,24 @@
+schema = new SimpleSchema
+  name:
+    type:String
+    label:'Name'
+    min: 2
+    max: 32
+  position:
+    type: String
+    label: 'position'
+    optional: true
+    min: 2
+    max: 140
+  workingHours:
+    type: Number
+    label: 'Working Hours'
+    min: 1
+    max: 24
+  holiday:
+    type: [Date]
+    label: 'Holiday'
+    minCount: 0
+    maxCount: 365
+
+Namespace 'schemas', Resource: schema


fix(profiles): unselect profile filter fix

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


remove lecacy code for grading

remove lecacy code for grading

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


SAML: Use multiline for cert settings

SAML: Use multiline for cert settings

--- packages/meteor-accounts-saml/saml_rocketchat.coffee
+++ packages/meteor-accounts-saml/saml_rocketchat.coffee
@@ -22,12 +22,14 @@
 			type: 'string' ,
 			group: 'SAML',
 			section: name,
+			multiline: true,
 			i18nLabel: 'SAML_Custom_Public_Cert'
 		}
 		RocketChat.settings.add "SAML_Custom_#{name}_private_key", '', {
 			type: 'string' ,
 			group: 'SAML',
 			section: name,
+			multiline: true,
 			i18nLabel: 'SAML_Custom_Private_Key'
 		}
 		RocketChat.settings.add "SAML_Custom_#{name}_button_label_text" , ''                                                            , { type: 'string' , group: 'SAML', section: name, i18nLabel: 'Accounts_OAuth_Custom_Button_Label_Text'}


Teamwork: reference error fixed

Teamwork: reference error 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/andrewjcasal/koding.git/'


client: use tabview to navigate to tabs

client: use tabview to navigate to tabs

--- client/app/lib/routehandler.coffee
+++ client/app/lib/routehandler.coffee
@@ -114,5 +114,9 @@
       { uid, state } = info.params
       environmentDataProvider.fetchMachineByUId uid, (machine) ->
         modal = new MachineSettingsModal {}, new Machine { machine: remote.revive machine }
-        modal.showPaneByName state  if state

+        return  unless state
+
+        # if there is a state, it's the name of the tab of modal. Switch to that.
+        modal.tabView.showPaneByName state  if state
+


Fix resolve absolute image path

Fix resolve absolute image path

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


Add project stringification and empty 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/nathan/lemma.git/'


Improved edit box height

Improved edit box height

--- resources/assets/coffee/react/beatmap-discussions/post.coffee
+++ resources/assets/coffee/react/beatmap-discussions/post.coffee
@@ -146,8 +146,10 @@

   editStart: =>
+    @textarea.style.minHeight = "#{@messageBody.getBoundingClientRect().height + 50}px"
+
     @setState editing: true, =>
-      @refs.textarea.focus()
+      @textarea.focus()

   editEnd: =>
@@ -168,6 +170,7 @@
     div className: "#{bn}__message-container #{'hidden' if @state.editing}",
       div
         className: "#{bn}__message"
+        ref: (el) => @messageBody = el
         dangerouslySetInnerHTML:
           __html: BeatmapDiscussionHelper.linkTimestamp(osu.linkify(_.escape(@props.post.message)), ["#{bn}__timestamp"])

@@ -257,7 +260,7 @@

     div className: "#{bn}__message-container #{'hidden' if !@state.editing}",
       textarea
-        ref: 'textarea'
+        ref: (el) => @textarea = el
         className: "#{bn}__message #{bn}__message--editor"
         onChange: @messageInput
         onKeyDown: @submitIfEnter


Correct condition for disabling cancel button

--- resources/assets/coffee/react/beatmap-discussions/post.coffee
+++ resources/assets/coffee/react/beatmap-discussions/post.coffee
@@ -177,7 +177,7 @@
               text: osu.trans 'common.buttons.cancel'
               props:
                 onClick: @editEnd
-                disabled: !canPost
+                disabled: @state.posting

           div className: "#{bn}__action",
             el BigButton,


Allow any comment about l[ou]lz

Allow any comment about l[ou]lz

--- src/scripts/lolz.coffee
+++ src/scripts/lolz.coffee
@@ -2,10 +2,9 @@

 Select     = require("soupselect").select
 HtmlParser = require "htmlparser"
-util = require 'util'

 module.exports = (robot) ->
-  robot.respond /l[ou]lz/i, (msg) ->
+  robot.respond /.*l[ou]lz/i, (msg) ->
     msg.http("http://bukk.it")
       .get() (err, res, body) ->
         handler = new HtmlParser.DefaultHandler()


ensure thumbnails

ensure thumbnails

--- api/lib/migrate.coffee
+++ api/lib/migrate.coffee
@@ -74,11 +74,12 @@
       (cb) -> gravity.post_artist_features.find(post_id: post._id).toArray cb
       (cb) -> gravity.post_artwork_features.find(post_id: post._id).toArray cb
     ]
-    if post.attachments?[0]?._type is 'PostArtwork'
-      queries.push (cb) ->
-        gravity.artworks.findOne { _id: post.attachments?[0].artwork_id }, cb
+    artworkIds = (ObjectId(a.artwork_id) for a in (post.attachments or []) \
+      when a._type is 'PostArtwork')
+    if artworkIds.length
+      queries.push (cb) -> gravity.artworks.find { _id: $in: artworkIds }, cb
     async.parallel queries, (err, results) ->
-      [artistFeatures, artworkFeatures, artwork] = results
+      [artistFeatures, artworkFeatures, artworks] = results

       # Map Gravity data into a Positron schema
       data =
@@ -87,30 +88,35 @@
         author_id: ObjectId(post.author_id)
         thumbnail_title: post.title
         thumbnail_teaser: $?('p')?.first()?.text()
-        thumbnail_image: (
-          switch post.attachments?[0]?._type
-            when 'PostArtwork'
-              img = artwork?.additional_images?[0]
-              if img
-                "http://static.artsy.net/additional_images/#{img._id}/" +
-                "#{if v = img.image_version then v + '/' else ''}large.jpg"
+        thumbnail_image: _.compact(
+          for attachment, i in (post.attachments ? [])
+            switch attachment._type
+              when 'PostArtwork'
+                artwork = _.select(artworks, (artwork) ->
+                  attachment.artwork_id.toString() is artwork._id.toString()
+                )[0]
+                img = artwork?.additional_images?[0]
+                choices = _.compact([
+                  img?.image_urls?.large
+                  _.sample(img?.image_urls ? [])
+                  artwork?.image_urls?.large
+                  _.sample(artwork?.image_urls ? [])
+                  (("http://static.artsy.net/additional_images/#{img._id}/" +
+                   "#{if v = img.image_version then v + '/' else ''}" +
+                   "large.jpg") if img)
+                ])
+                choices[0]
+              when 'PostImage'
+                "#{GRAVITY_CLOUDFRONT_URL}/post_images/" +
+                "#{post.attachments?[i]?._id}/large.jpg"
+              when 'PostLink'
+                (
+                  post.attachments?[i]?.oembed_json?.thumbnail_url or
+                  post.attachments?[i]?.oembed_json?.url
+                )
               else
-                artwork?.image_urls?.large or artwork?.image_urls?[0]
-            when 'PostImage'
-              "#{GRAVITY_CLOUDFRONT_URL}/post_images/" +
-              "#{post.attachments?[0]?._id}/large.jpg"
-            when 'PostLink'
-              (
-                post.attachments?[0]?.oembed_json?.thumbnail_url or
-                post.attachments?[0]?.oembed_json?.url
-              )
-        )
-        tags: (
-          tags = (term for term in glossary.extract bodyText \
-            when term.length > 3 and not term.match('@')) if bodyText
-          tags ?= []
-          tags.concat 'Migrated Post'
-        )
+                null
+        )[0]
         title: post.title
         published: post.published
         published_at: moment(post.published_at).format()


Fix overlay bug, fixes #7479

Fix overlay bug, fixes #7479

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

--- app/assets/javascripts/jquery_settings.js.coffee
+++ app/assets/javascripts/jquery_settings.js.coffee
@@ -0,0 +1,5 @@
+do ($ = jQuery) ->
+  $.ajaxSetup({
+    # Disable caching of AJAX responses
+    cache: false
+  })


codepicker bugfix

codepicker bugfix

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/treasures-io/main.git/'


Update fr.coffee

Update fr.coffee

diverses petites corrections

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


add missing pt file

add missing pt file


updated atom config

updated 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/hubwub/holman-dotfiles.git/'


model fix

model 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/skgcorp/freshdesk-workflows.git/'


add helpers

add helpers

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

--- lib/carte/client/helpers.coffee
+++ lib/carte/client/helpers.coffee
@@ -0,0 +1,4 @@
+
+module.exports =
+  isMobile: ()->
+    /(iPhone|iPod|iPad).*AppleWebKit/i.test(navigator.userAgent)


destroy: test inside readable

destroy: test inside readable

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

--- test/api.destroy.coffee
+++ test/api.destroy.coffee
@@ -0,0 +1,59 @@
+
+parse = require '../lib'
+generate = require 'csv-generate'
+fs = require 'fs'
+os = require 'os'
+
+describe 'API destroy', ->
+
+  it 'inside readable with input string', (next) ->
+    parser = parse()
+    parser.on 'readable', ->
+      while this.read()
+        parser.destroy(Error 'Catch me')
+    parser.write """
+    "ABC","45"
+    "DEF","23"
+    """
+    parser.on 'error', (err) ->
+      err.message.should.eql 'Catch me'
+      parser._readableState.destroyed.should.be.true()
+      next()
+    parser.on 'end', ->
+      next Error 'End event shouldnt be called'
+    # Note, removing =nextTick trigger both the error and end events
+    process.nextTick ->
+      parser.end()
+
+  it 'inside readable with fs input stream', (next) ->
+    fs.writeFile "#{os.tmpdir()}/data.csv", "a,b,c\n1,2,3", (err) ->
+      return next err if err
+      parser = parse()
+      parser.on 'readable', ->
+        while data = this.read()
+          parser.destroy(Error 'Catch me')
+      parser.on 'error', (err) ->
+        err.message.should.eql 'Catch me'
+        parser._readableState.destroyed.should.be.true()
+        next()
+      parser.on 'end', ->
+        next Error 'End event shouldnt be called'
+      fs
+      .createReadStream "#{os.tmpdir()}/data.csv"
+      .pipe parser
+
+  it 'inside readable with generator input stream', (next) ->
+    # csv-generate emit data synchronously, it cant detect error on time
+    parser = parse()
+    parser.on 'readable', ->
+      while data = this.read()
+        parser.destroy(Error 'Catch me')
+    parser.on 'error', (err) ->
+      err.message.should.eql 'Catch me'
+      parser._readableState.destroyed.should.be.true()
+      # next()
+    parser.on 'end', ->
+      # next Error 'End event shouldnt be called'
+      next()
+    generate length: 2, seed: 1, columns: 2, fixed_size: true
+    .pipe parser


Refs #24; Now testing formatSI

Refs #24; Now testing formatSI

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


Add test case for no hubot-auth module.

Add test case for no hubot-auth module.

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


Add missing file.

Add missing file.

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

--- src/spec/orderexport.spec.coffee
+++ src/spec/orderexport.spec.coffee
@@ -0,0 +1,223 @@
+{parseString} = require 'xml2js'
+OrderExport = require '../lib/orderexport'
+Config = require '../config'
+
+describe '#mapOrder', ->
+  beforeEach ->
+    @orderExport = new OrderExport Config
+
+  it 'simple', (done) ->
+    order =
+      id: 'abc'
+      orderNumber: '10001'
+      version: 1
+      externalCustomerId: '111-2222-33333'
+
+    doc = @orderExport.mapOrder order
+    parseString doc, (err, result) ->
+      expect(result.order.xsdVersion[0]).toBe '0.9'
+      expect(result.order.id[0]).toBe 'abc'
+      expect(result.order.orderNumber[0]).toBe '10001'
+      expect(result.order.version[0]).toBe '1'
+      expect(result.order.paymentState[0]).toBe 'Pending'
+      expect(result.order.shipmentState[0]).toBe 'Pending'
+      expect(result.order.customerNumber).toBe undefined
+      expect(result.order.externalCustomerId).toBe undefined
+      done()
+
+  it 'lineItem', (done) ->
+    order =
+      lineItems: [
+        id: 'l1'
+        name:
+          de: 'mein Produkt'
+        price:
+          value:
+            currencyCode: 'EUR'
+            centAmount: 999
+        quantity: 2
+        taxRate:
+          name: 'Mehrwertsteuer'
+          amount: 0.19
+          oncludedInPrice: true
+          country: 'DE'
+          id: 'ABC'
+        variant:
+          id: 1
+          sku: '345'
+      ]
+    doc = @orderExport.mapOrder order
+    parseString doc, (err, result) ->
+      expect(result.order.lineItems.length).toBe 1
+      li = result.order.lineItems[0]
+      expect(li.id[0]).toBe 'l1'
+      expect(li.name[0]).toBe 'mein Produkt'
+      expect(li.sku[0]).toBe '345'
+
+      expect(li.variant[0].id[0]).toBe '1'
+      expect(li.variant[0].sku[0]).toBe '345'
+
+      expect(li.price[0].value[0].currencyCode[0]).toBe 'EUR'
+      expect(li.price[0].value[0].centAmount[0]).toBe '999'
+
+      expect(li.quantity[0]).toBe '2'
+
+      expect(li.lineItemPrice[0].value[0].currencyCode[0]).toBe 'EUR'
+      expect(li.lineItemPrice[0].value[0].centAmount[0]).toBe '1998'
+
+      expect(li.taxRate[0].id[0]).toBe 'ABC'
+      expect(li.taxRate[0].name[0]).toBe 'Mehrwertsteuer'
+      expect(li.taxRate[0].amount[0]).toBe '0.19'
+      expect(li.taxRate[0].country[0]).toBe 'DE'
+      done()
+
+  it 'customLineItem', (done) ->
+    order =
+      customLineItems: [
+        id: 'cl1'
+        name:
+          de: 'Rabatt'
+        slug: 'discount'
+        money:
+            currencyCode: 'EUR'
+            centAmount: -700
+        quantity: 3
+        taxRate:
+          name: 'Mehrwertsteuer'
+          amount: 0.19
+          oncludedInPrice: true
+          country: 'DE'
+          id: 'ABC'
+      ]
+    doc = @orderExport.mapOrder order
+    parseString doc, (err, result) ->
+      expect(result.order.customLineItems.length).toBe 1
+      cli = result.order.customLineItems[0]
+      expect(cli.id[0]).toBe 'cl1'
+      expect(cli.name[0]).toBe 'Rabatt'
+      expect(cli.slug[0]).toBe 'discount'
+
+      expect(cli.money[0].currencyCode[0]).toBe 'EUR'
+      expect(cli.money[0].centAmount[0]).toBe '-700'
+
+      expect(cli.quantity[0]).toBe '3'
+
+      expect(cli.lineItemPrice[0].value[0].currencyCode[0]).toBe 'EUR'
+      expect(cli.lineItemPrice[0].value[0].centAmount[0]).toBe '-2100'
+
+      expect(cli.taxRate[0].id[0]).toBe 'ABC'
+      expect(cli.taxRate[0].name[0]).toBe 'Mehrwertsteuer'
+      expect(cli.taxRate[0].amount[0]).toBe '0.19'
+      expect(cli.taxRate[0].country[0]).toBe 'DE'
+      done()
+
+  it 'taxedPrice', (done) ->
+    order =
+      taxedPrice:
+        totalNet:
+          currencyCode: 'EUR',
+          centAmount: 1000
+        totalGross:
+          currencyCode: 'EUR',
+          centAmount: 1190
+        taxPortions: [
+          rate: 'MwSt',
+          amount:
+            currencyCode: 'EUR',
+            centAmount: 190
+          ]
+    doc = @orderExport.mapOrder order
+    parseString doc, (err, result) ->
+      expect(result.order.taxedPrice).not.toBeUndefined()
+      expect(result.order.taxedPrice[0].totalNet[0].currencyCode[0]).toBe 'EUR'
+      expect(result.order.taxedPrice[0].totalNet[0].centAmount[0]).toBe '1000'
+      expect(result.order.taxedPrice[0].totalGross[0].currencyCode[0]).toBe 'EUR'
+      expect(result.order.taxedPrice[0].totalGross[0].centAmount[0]).toBe '1190'
+      expect(result.order.taxedPrice[0].taxPortions[0].rate[0]).toBe 'MwSt'
+      expect(result.order.taxedPrice[0].taxPortions[0].amount[0].currencyCode[0]).toBe 'EUR'
+      expect(result.order.taxedPrice[0].taxPortions[0].amount[0].centAmount[0]).toBe '190'
+      done()
+
+  it 'shippingAddress', (done) ->
+    order =
+      shippingAddress:
+        title: 'Prof. Dr.'
+    doc = @orderExport.mapOrder order
+    parseString doc, (err, result) ->
+      expect(result.order.shippingAddress).not.toBeUndefined()
+      expect(result.order.shippingAddress[0].title[0]).toBe 'Prof. Dr.'
+      done()
+
+  it 'billingAddress', (done) ->
+    order =
+      billingAddress:
+        pOBox: '123456789'
+    doc = @orderExport.mapOrder order
+    parseString doc, (err, result) ->
+      expect(result.order.billingAddress).not.toBeUndefined()
+      expect(result.order.billingAddress[0].pOBox[0]).toBe '123456789'
+      done()
+
+  it 'customerGroup', (done) ->
+    order =
+      customerGroup:
+        typeId: 'customer-group'
+        id: '213'
+        obj:
+          id: '213'
+          version: 3
+          name: 'B2B'
+    doc = @orderExport.mapOrder order
+    parseString doc, (err, result) ->
+      cg = result.order.customerGroup[0]
+      expect(cg.id[0]).toBe '213'
+      expect(cg.version[0]).toBe '3'
+      expect(cg.name[0]).toBe 'B2B'
+      done()
+
+  it 'paymentInfo', (done) ->
+    order = {}
+    paymentInfo =
+      value:
+        paymentMethod: 'Cash'
+        paymentID: '7'
+
+    console.log "paymentInfo 1 #{JSON.stringify paymentInfo, null, 2}"
+
+    doc = @orderExport.mapOrder order, paymentInfo, null
+    parseString doc, (err, result) ->
+      console.log "yes", JSON.stringify result.order, null, 2
+      expect(result.order.paymentInfo).not.toBeUndefined()
+      expect(result.order.paymentInfo[0].paymentID[0]).toBe '7'
+      expect(result.order.paymentInfo[0].paymentMethod[0]).toBe 'Cash'
+      done()
+
+  it 'shippingInfo', (done) ->
+    order =
+      shippingInfo:
+        price:
+          currencyCode: 'USD'
+          centAmount: 999
+        taxRate:
+          includedInPrice: true
+    doc = @orderExport.mapOrder order
+    parseString doc, (err, result) ->
+      expect(result.order.shippingInfo).not.toBeUndefined()
+      expect(result.order.shippingInfo[0].price[0].currencyCode[0]).toBe 'USD'
+      expect(result.order.shippingInfo[0].price[0].centAmount[0]).toBe '999'
+      expect(result.order.shippingInfo[0].taxRate[0].includedInPrice[0]).toBe 'true'
+      done()
+
+  it 'customer', (done) ->
+    order = {}
+    customer =
+      customerNumber: '111-222'
+      externalId: '111-222-333'
+
+    console.log JSON.stringify customer, null, 2
+
+    doc = @orderExport.mapOrder order, null, customer
+    parseString doc, (err, result) ->
+      expect(result.order.customerNumber[0]).toBe customer.customerNumber
+      expect(result.order.externalCustomerId[0]).toBe customer.externalId
+      done()


Use ramda 0.23.0 in key transformer

Use ramda 0.23.0 in key transformer

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/ziagrosvenor/sound-machine.git/'


Don't need this as we're calling the method directly on the view

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


Atom v0.196.0

Atom v0.196.0

--- def/context.cson
+++ def/context.cson
@@ -20,13 +20,13 @@
     "pane:split-left": "ペイン分割 ←"
     "pane:split-right": "ペイン分割 →"
     "pane:close": "ペインを閉じる"
-  "atom-text-editor":
+  "atom-text-editor:not([mini])":
     "encoding-selector:show": "エンコーディング選択"
     "spell-check:correct-misspelling": "スペル修正"
     "symbols-view:go-to-declaration": "宣言に移動"
-  "atom-pane .item-views":
+  "atom-pane[data-active-item-path] .item-views":
     "tree-view:reveal-active-file": "ツリービューに表示"
-  "atom-pane .tab.active":
+  "atom-pane[data-active-item-path] .tab.active":
     "tree-view:reveal-active-file": "ツリービューに表示"
   ".overlayer":
     "autocomplete:toggle": "オートコンプリート"


And more

And more

--- resources/assets/coffee/react/beatmap-discussions/mode-switcher.coffee
+++ resources/assets/coffee/react/beatmap-discussions/mode-switcher.coffee
@@ -19,24 +19,24 @@
 {a, div, li, span, ul} = React.DOM
 el = React.createElement

-BeatmapDiscussions.ModeSwitcher = React.createClass
-  mixins: [StickyTabsMixin]
+class BeatmapDiscussions.ModeSwitcher extends React.PureComponent
+  constructor: (props) ->
+    super props
+
+    @state =
+      tabsSticky: false

-  componentDidMount: ->
-    $.subscribe 'stickyHeader.beatmapDiscussionsMode', @_tabsStick
+  componentDidMount: =>
+    $.subscribe 'stickyHeader.beatmapDiscussionsMode', @tabsStick
     osu.pageChange()

-  componentWillUnmount: ->
+  componentWillUnmount: =>
     $.unsubscribe '.beatmapDiscussionsMode'

-  getInitialState: ->
-    tabsSticky: false
-
-
-  render: ->
+  render: =>
     div null,
       div
         className: "page-extra-tabs #{'page-extra-tabs--floating' if @state.tabsSticky}"
@@ -68,7 +68,12 @@
                     span className: 'page-mode-link__stripe'

-  switch: (e) ->
+  tabsStick: (_e, target) =>
+    newState = (target == 'page-extra-tabs')
+    @setState(tabsSticky: newState) if newState != @state.tabsSticky
+
+
+  switch: (e) =>
     e.preventDefault()

     $.publish 'beatmapDiscussion:setMode', e.currentTarget.dataset.mode


valid and validationMessages can nolonger be changed by the user

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/Meteor-Reaction/meteor-reactive-schema.git/'


Prepare for using Mocha for cross-platform testing

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

--- spec/Graph.coffee
+++ spec/Graph.coffee
@@ -0,0 +1,8 @@
+{expect} = require 'chai'
+graph = require '../src/lib/Graph.coffee'
+
+describe 'Graph instance', ->
+  g = null
+  it 'should have no nodes initially', ->
+    g = new graph.Graph
+    expect(g.nodes.length).to.equal 0


added simple designer to selectdesign props

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


Create gulpfile.coffee

Create gulpfile.coffee

error: pathspec '_dev/_config/gulpfile.coffee' did not match any file(s) known to git

--- _dev/_config/gulpfile.coffee
+++ _dev/_config/gulpfile.coffee
@@ -0,0 +1,628 @@
+#    .aMMMMP dMP dMP dMP     dMMMMb  dMMMMMP dMP dMP     dMMMMMP
+#   dMP"    dMP dMP dMP     dMP.dMP dMP     amr dMP     dMP
+#  dMP MMP"dMP dMP dMP     dMMMMP" dMMMP   dMP dMP     dMMMP
+# dMP.dMP dMP.aMP dMP     dMP     dMP     dMP dMP     dMP
+# VMMMP"  VMMMP" dMMMMMP dMP     dMP     dMP dMMMMMP dMMMMMP
+#
+# By: Wellfire Interactive, LLC (wellfire.co)
+
+# 01. Initialization
+# 02. HTML / Jade
+# 03. CSS / Stylus
+# 04. JavaScript / CoffeeScript
+# 05. Watches
+# 06. Tasks
+# ---- Complete / No Change----
+# 07. Bower
+# 08. Assets / Vendor files
+
+
+#
+#     dMP dMMMMb  dMP dMMMMMMP
+#    amr dMP dMP amr    dMP
+#   dMP dMP dMP dMP    dMP
+#  dMP dMP dMP dMP    dMP
+# dMP dMP dMP dMP    dMP
+#
+# LOAD DEPENDENCIES
+#
+gulp = require 'gulp'
+del = require 'del'
+utils = require 'gulp-util'
+colors = utils.colors
+plugins = do require 'gulp-load-plugins'
+mainBowerFiles = require 'main-bower-files'
+browserSync = require 'browser-sync'
+browserReload = browserSync.reload
+
+http = require 'http'
+fs = require 'fs'
+yaml = require 'js-yaml'
+
+
+#
+# Helper stream functions
+#
+renamer = (path) ->
+    unless path.basename is 'index'
+        dir = path.basename.split(".")
+        if dir.length > 1
+            path.basename = dir.pop()
+            path.dirname = dir.join("/")
+        else
+
+    return path
+
+
+#
+# LOAD YAML CONFIGS
+#
+yamlLoad = (file) -> yaml.safeLoad fs.readFileSync file, 'utf8'
+
+site = {}
+config = yamlLoad(site_file) # this is not
+src = config.path.src
+build = config.path.build
+
+# add config to the site object for use within Jade/Stylus/Coffeescript
+for key, value of config
+    site[key] = value
+
+# lets add extra files in the data folder to the site object
+for file in fs.readdirSync "./#{src.base}/#{src.data}/"
+    file_name = file.split('.')[0]
+    if file_name
+        # site[file_name] = {}
+        temp = yamlLoad("./#{src.base}/#{src.data}/#{file}")
+        for obj_name, obj of temp
+            site[obj_name] = temp[obj_name]
+
+# Messages for BrowserSync
+messages =
+    jadeBuild: 'Running: jade'
+    stylusBuild: 'Running: stylus'
+    coffeeBuild: 'Running: coffeescript'
+
+
+#
+# GET ENVIRONMENT
+#
+# call up a size report
+config.size_report = if utils.env.sizereport then true else false
+# start watch of files
+config.watch = if utils.env.watch then true else false
+# minify css and js
+config.unminify = if utils.env.unminify then true else false
+# force a full recompile
+config.force = if utils.env.force then true else false
+# open browsersync debug browsers
+config.debug = if utils.env.debug then true else false
+# force specific url to open within browsersync browsers
+config.view = if utils.env.url then utils.env.url else false
+# open the browsersync ui for use
+config.ui = if utils.env.ui then "ui" else false
+# convert CSS background images to data URIs, not always recommended, run size report
+config.dataURI = if utils.env.datauri then true else false
+
+
+#
+#     dMP dMP dMMMMMMP dMMMMMMMMb  dMP
+#    dMP dMP    dMP   dMP"dMP"dMP dMP
+#   dMMMMMP    dMP   dMP dMP dMP dMP
+#  dMP dMP    dMP   dMP dMP dMP dMP
+# dMP dMP    dMP   dMP dMP dMP dMMMMMP
+#
+
+# USE gulp-htmlmin on jekyll templates perhaps?
+jade_opts =
+    pretty: config.jade.pretty || true
+    compileDebug: config.jade.compileDebug || false
+    doctype: 'html' # forces Jade to follow HTML5 attribute convention
+    locals: site
+    dest: config.jade.dest || "#{build.base}/#{build.html}/"
+    cwd: config.jade.cwd || "#{src.base}/#{src.html}/"
+    basedir: config.jade.basedir || "#{src.base}/#{src.html}/"
+
+
+# set up which Jade files we're looking for
+jade_glob = config.jade.glob
+
+gulp.task 'jade-build',  ->
+    browserSync.notify messages.jadeBuild
+
+    gulp
+        .src(
+            jade_glob,
+            cwd: jade_opts.cwd
+        )
+        .pipe(
+            # check to find out which files have been edited,
+            # based on changed status of corresponding build file
+            # use force flag to compile all
+            plugins.if(
+                config.force,
+                utils.noop(),
+                plugins.newer(
+                    dest: jade_opts.dest
+                    ext: ".html"
+                )
+            )
+        )
+        .pipe( plugins.plumber() )
+        .pipe( plugins.jade( jade_opts ) )
+        .pipe( gulp.dest( jade_opts.dest ) )
+        .pipe(
+            utils.noop(
+                console.log colors.yellow(colors.underline("[Jade] output to:")) + colors.gray(jade_opts.dest)
+            )
+        )
+
+
+#
+#    .aMMMb  .dMMMb  .dMMMb
+#   dMP"VMP dMP" VP dMP" VP
+#  dMP      VMMMb   VMMMb
+# dMP.aMP dP .dMP dP .dMP
+# VMMMP"  VMMMP"  VMMMP"
+#
+stylus_opts =
+    compress: config.stylus.compress || false
+    log: config.stylus.log || true
+    showFiles: config.stylus.showFiles || false
+    dest: config.stylus.dest ||"#{build.base}/#{build.static}/#{build.css}/"
+    cwd: config.stylus.cwd || "#{src.base}/#{src.css}/"
+
+# set up which Stylus files we're looking for
+stylus_glob = config.stylus.glob
+# asset_opts =
+#     files: [ "**/*.*" ]
+#     assets:
+#         cwd: "./#{src.base}/#{src.assets}"
+#         dest:
+
+gulp.task 'stylus-build', ->
+    browserSync.notify messages.stylusBuild
+
+    gulp
+        .src(
+            stylus_glob
+            cwd: stylus_opts.cwd
+        )
+        .pipe(
+            # test for which files are newly editted
+            # based on concatenate final file of app.js
+            # todo: pull out concatenate final file
+            # warning: assumes users want to concatenate
+            plugins.if(
+                config.force,
+                utils.noop(),
+                plugins.newer(
+                    dest: stylus_opts.dest
+                    ext: ".css"
+                )
+            )
+        )
+        .pipe( plugins.plumber() )
+        .pipe( plugins.stylus( stylus_opts ) )
+        .pipe(
+            # filter out underscored files, in case they got through for some reason
+            plugins.filter(
+                (file) ->
+                    !/\/_/.test(file.path) || !/^_/.test(file.relative);
+            )
+        )
+        .pipe(
+            # autoprefix css styles
+            plugins.autoprefixer(
+                'last 2 versions',
+                'Explorer 9'
+                'Explorer 10'
+            )
+        )
+        .pipe(
+            # minification of css files; minify by default, use flag to not minify
+            plugins.if(
+                config.unminify
+                utils.noop()
+                plugins.csso()
+            )
+        )
+        .pipe(
+            plugins.if(
+                config.dataURI
+                plugins.imageEmbed(
+                    asset: "./#{build.base}/#{build.static}/#{build.assets}/"
+                    extension: ['jpg', 'png', 'gif', 'svg']
+                )
+                utils.noop()
+            )
+        )
+        .pipe(
+            plugins.if(
+                config.size_report
+                plugins.sizereport( gzip: true )
+                utils.noop()
+            )
+        )
+        .pipe( gulp.dest( stylus_opts.dest ) )
+        .pipe(
+            # force livereload/inject of styles into browser
+            plugins.if(
+                config.watch,
+                browserReload(
+                    stream: true
+                ),
+                utils.noop()
+            )
+        )
+        .pipe(
+            utils.noop(
+                console.log colors.yellow(colors.underline("[Stylus] output to:")) + colors.gray(stylus_opts.dest)
+            )
+        )
+
+
+#
+#    dMMMMMP .dMMMb
+#       dMP dMP" VP
+#      dMP  VMMMb
+# dK .dMP dP .dMP
+# VMMMP"  VMMMP"
+#
+lint_opts = # Coffeescript lint options
+    arrow_spacing: true
+    no_empty_param_list: true
+    no_implicit_braces: true
+    space_operators: true
+    max_line_length:
+        value: 100
+    indentation:
+        value: 4
+
+coffee_opts = # Coffeescript options
+    bare: config.coffee.bare || true
+    join: config.coffee.join ||true
+    src: config.coffee.glob
+    output: config.coffee.output || "app.js"
+    cwd: config.coffee.cwd || "#{src.base}/#{src.js}/"
+    dest: config.coffee.dest || "#{build.base}/#{build.static}/#{build.js}/"
+
+
+gulp.task 'coffee-build', ->
+    browserSync.notify messages.coffeeBuild
+
+    data = gulp
+        .src(
+            coffee_opts.src
+            cwd: coffee_opts.cwd
+        )
+        .pipe(
+            # test for which files are newly editted
+            # based on concatenate final file of app.js
+            # todo: pull out concatenate final file
+            # warning: assumes users want to concatenate
+            plugins.if(
+                config.force,
+                utils.noop(),
+                plugins.newer(
+                    "#{coffee_opts.dest}/app.js"
+                )
+            )
+        )
+
+    # lint and report
+    data
+        .pipe( plugins.coffeelint( lint_opts ) )
+        .pipe( plugins.coffeelint.reporter() )
+
+    # make sourcemap, parse coffeescript, concat into file
+    data
+        .pipe(
+            plugins.sourcemaps.init()
+        )
+        .pipe(
+            plugins.coffee( coffee_opts )
+                .on('error', utils.log)
+        )
+        # warning: assumes users want to concatenate
+        .pipe( plugins.concat(coffee_opts.output) )
+        .pipe(
+            # minification of js files; minify by default, use flag to not minify
+            plugins.if(
+                config.unminify
+                utils.noop()
+                plugins.uglify()
+            )
+        )
+        .pipe(
+            # use here so we don't read the js.map files
+            plugins.if(
+                config.size_report
+                plugins.sizereport( gzip: true )
+                utils.noop()
+            )
+        )
+        .pipe(
+            plugins.sourcemaps.write('./maps')
+        )
+        .pipe( gulp.dest( coffee_opts.dest ) )
+
+    data.pipe(
+        utils.noop(
+            console.log colors.yellow(colors.underline("[CoffeeScript] output to:")) + colors.gray(coffee_opts.dest)
+        )
+    )
+
+
+#
+#    dMP dMP dMP .aMMMb dMMMMMMP .aMMMb  dMP dMP dMMMMMP .dMMMb
+#   dMP dMP dMP dMP"dMP   dMP   dMP"VMP dMP dMP dMP     dMP" VP
+#  dMP dMP dMP dMMMMMP   dMP   dMP     dMMMMMP dMMMP    VMMMb
+# dMP.dMP.dMP dMP dMP   dMP   dMP.aMP dMP dMP dMP     dP .dMP
+# VMMMPVMMP" dMP dMP   dMP    VMMMP" dMP dMP dMMMMMP  VMMMP"
+#
+
+# sync_reload = ->
+#     # unless config.type == "jekyll"
+
+gulp.task 'jade-watch', ["jade-build"], browserSync.reload
+gulp.task 'stylus-watch', ["stylus-build"], browserSync.reload
+gulp.task 'coffee-watch', ["coffee-build"], browserSync.reload
+
+bSync = ->
+    browserSync(
+        proxy: "localhost:#{config.port}" # sets up what the proxy should be
+        port: config.port+1 # set up port to watch/proxy
+        ui:
+            port: config.port+2 # where the UI can be accessed
+            weinre: 9090
+        watchOptions:
+            debounceDelay: 1000
+        ghostMode:
+            clicks: true
+            forms: true
+            scroll: true
+        logPrefix: "#{config.url} -- DEV" # give it a name
+        open: if config.debug then true else config.ui # do we open a browser, or the ui?
+        browser: if config.debug then ["google chrome", "firefox", "opera", "safari"] else false
+        startPath: config.view # where should the browser open up to?
+        xip: false
+        reloadOnRestart: true
+        notify: false # change to true after refactoring CIS
+        injectChanges: false
+    )
+
+gulp.task 'browser-sync', ->
+    if config.watch
+        bSync()
+
+        gulp
+            .watch("#{jade_opts.cwd}**", ['jade-watch'])
+
+        gulp
+            .watch("#{stylus_opts.cwd}**", ['stylus-watch'])
+
+        gulp
+            .watch("#{coffee_opts.cwd}**", ['coffee-watch'])
+
+gulp.task 'jekyll-browser-sync', ->
+    if config.watch
+        bSync()
+
+        gulp
+            .watch("#{jade_opts.cwd}**", ['jade-jekyll-watch'])
+
+        # gulp
+        #     .watch("#{stylus_opts.cwd}**", ['stylus-watch'])
+        #
+        # gulp
+        #     .watch("#{coffee_opts.cwd}**", ['coffee-watch'])
+
+        if config.type == "jekyll"
+            gulp
+                .watch("#{build.base}/**", ['jekyll-watch'])
+
+        # gulp
+        #     .watch("/__site/*.html")
+        #     .on('change', browserReload)
+
+
+
+#  dMMMMMMP .aMMMb  .dMMMb  dMP dMP .dMMMb
+#    dMP   dMP"dMP dMP" VP dMP.dMP dMP" VP
+#   dMP   dMMMMMP  VMMMb  dMMMMK"  VMMMb
+#  dMP   dMP dMP dP .dMP dMP"AMF dP .dMP
+# dMP   dMP dMP  VMMMP" dMP dMP  VMMMP"
+
+# for help file/maker
+task_def = (task_name, task_def, dev, build) ->
+    if task_name
+        task_name = colors.green("#{task_name} :: ")
+    else
+        task_name = ""
+
+    task = task_def
+
+    if dev
+        dev = colors.yellow(dev)
+        task = task.replace /::dev::/, dev
+
+    if build
+        build = colors.yellow(build)
+        task = task.replace /::build::/, build
+
+    console.log task_name + task
+
+
+# default shouldn't do anything aside show what tasks are available to the user
+gulp.task 'default',
+  [], ->
+    console.log "\n\n"
+    task_def "coffee", "compile coffeescript files from ::dev:: to ::build::", coffee_opts.cwd, coffee_opts.dest
+    task_def "jade", "compile jade files from ::dev:: to ::build::", jade_opts.cwd, jade_opts.dest
+    task_def "stylus", "compile stylus files, autoprefix, [combine media queries,] minify, "
+    task_def null, "          report size from ::dev:: to ::build::", stylus_opts.cwd, stylus_opts.dest
+    console.log ""
+    task_def "bower", "install bower files from ::dev:: and send to ::build::.", "bower.json", asset_opts.vendors.dest
+    task_def null, "         Requires bower be installed on system."
+    task_def "assets", "transfer assets from ::dev:: to ::build:: and minify images", asset_opts.assets.cwd, asset_opts.assets.dest
+    task_def "vendor", "transfer vendor files from ::dev:: to ::build::", asset_opts.vendors.cwd, asset_opts.vendors.dest
+    console.log ""
+    task_def "media", "process and copy assets and vendor to build"
+    task_def "django", "run jade, stylus, coffee for use in Django"
+    console.log ""
+    task_def "FLAGS", ""
+    task_def "--sizereport", "give size of compiled files and their associated gzip size"
+    task_def "--unminify", "unminify CSS/JS"
+    task_def "--force", "force a compilation of all files"
+    task_def "---watch", "run browser-sync and reload live pages"
+    task_def "--ui", "when used with --watch, will open browser-sync ui"
+    task_def "--url <project url>", "when used with --watch, will open browser"
+    task_def null, "                       with given url of project"
+    task_def "--debug", "when used with --watch, will open"
+    task_def null, "           [chrome, firefox, opera, safari] for testing concurrently"
+    task_def "--datauri","convert CSS background images to data URIs, not always recommended, "
+    task_def null, "             run --sizereport"
+    console.log "\n\n"
+
+gulp.task 'jade',
+[
+    'jade-build'
+    'browser-sync'
+], ->
+    console.log colors.yellow 'Compiled project through GulpJS for Jade'
+
+gulp.task 'stylus',
+[
+    'stylus-build'
+    'browser-sync'
+], ->
+    console.log colors.yellow 'Compiled project through GulpJS for Stylus'
+
+gulp.task 'coffee',
+[
+    'coffee-build'
+    'browser-sync'
+], ->
+    console.log colors.yellow 'Compiled project through GulpJS for CoffeScript'
+
+gulp.task 'media',
+[
+    'assets'
+    'vendor'
+], ->
+    console.log colors.yellow 'Compiled media files through GulpJS'
+
+
+gulp.task 'django',
+[
+    'jade-build'
+    'stylus-build'
+    'coffee-build'
+    'browser-sync'
+], ->
+    console.log colors.yellow 'Compiled project through GulpJS for Django'
+
+gulp.task 'help',
+[
+    'default'
+]
+
+
+
+
+
+#     dMMMMb  .aMMMb  dMP dMP dMP dMMMMMP dMMMMb
+#    dMP"dMP dMP"dMP dMP dMP dMP dMP     dMP.dMP
+#   dMMMMK" dMP dMP dMP dMP dMP dMMMP   dMMMMK"
+#  dMP.aMF dMP.aMP dMP.dMP.dMP dMP     dMP"AMF
+# dMMMMP"  VMMMP"  VMMMPVMMP" dMMMMMP dMP dMP
+
+# run series of bower pieces based off of bower.json
+gulp.task 'bower', ['bower_init', 'bower_copy', 'bower_cleanup'], ->
+    console.log colors.green "Bower components installed at: ./#{src.base}/#{ src.vendor }"
+
+
+gulp.task 'bower_init', ->
+    gulp.src("./")
+        .pipe(
+            plugins.exec "bower install"
+        )
+
+
+gulp.task 'bower_copy', ['bower_init'], ->
+    gulp.src(mainBowerFiles())
+        .pipe(
+            gulp.dest("./#{src.base}/#{ src.vendor }")
+        )
+
+
+gulp.task 'bower_cleanup', ['bower_init', 'bower_copy'], (cb) ->
+    del(
+        ["./bower_components"],
+        cb
+    )
+
+
+#
+#     .aMMMb  .dMMMb  .dMMMb  dMMMMMP dMMMMMMP .dMMMb
+#    dMP"dMP dMP" VP dMP" VP dMP        dMP   dMP" VP
+#   dMMMMMP  VMMMb   VMMMb  dMMMP      dMP    VMMMb
+#  dMP dMP dP .dMP dP .dMP dMP        dMP   dP .dMP
+# dMP dMP  VMMMP"  VMMMP" dMMMMMP    dMP    VMMMP"
+#
+
+# asset and vendor options
+asset_opts =
+    files: [ "**/*.*" ]
+    assets:
+        cwd: "./#{src.base}/#{src.assets}"
+        dest: "./#{build.base}/#{build.static}/#{build.assets}/"
+    vendors:
+        cwd: "./#{src.base}/#{src.vendor}"
+        dest: "./#{build.base}/#{build.static}/#{build.vendor}/"
+
+# transfer asset files over to build location, run through imagemin
+gulp.task 'assets', ->
+    gulp
+        .src(
+            asset_opts.files
+            cwd: asset_opts.assets.cwd
+        )
+        .pipe(
+            # test for which files are newly editted
+            # based on concatenate final file of app.js
+            # todo: pull out concatenate final file
+            # warning: assumes users want to concatenate
+            plugins.if(
+                config.force,
+                utils.noop(),
+                plugins.changed( asset_opts.assets.dest )
+            )
+        )
+        .pipe( plugins.imagemin() )
+        .pipe( gulp.dest asset_opts.assets.dest )
+
+    console.log colors.yellow(colors.underline("[Assets] output to:")) + colors.gray(asset_opts.assets.dest)
+
+# transfer vendor files over to build location
+gulp.task 'vendor', ->
+    gulp
+        .src(
+            asset_opts.files
+            cwd: asset_opts.vendors.cwd
+        )
+        .pipe(
+            # test for which files are newly editted
+            # based on concatenate final file of app.js
+            # todo: pull out concatenate final file
+            # warning: assumes users want to concatenate
+            plugins.if(
+                config.force,
+                utils.noop(),
+                plugins.changed( asset_opts.assets.dest )
+            )
+        )
+        .pipe( gulp.dest asset_opts.vendors.dest )
+
+    console.log colors.yellow(colors.underline("[Vendor] output to:")) + colors.gray(asset_opts.vendors.dest)


reformat long lines

reformat long lines

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


scroll to top on tag edit page.

scroll to top on tag edit 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/kristenhazard/epm-catalog.git/'


Less is more; Dropbox temporarily removed

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


added write permissions, refractored permission code, fixed regex permissions

error: pathspec 'api/policies/canWrite.coffee' did not match any file(s) known to git

--- api/policies/canWrite.coffee
+++ api/policies/canWrite.coffee
@@ -0,0 +1,23 @@
+###
+	canWrite
+
+	@module      :: Policy
+	@description :: Check to see if the current user has write permissions
+					on current doc and parent doc
+###
+
+module.exports = (req,res,next) ->
+	if req.target.controller == 'doc'
+		Doc.findOne(fullName: req.body.path + '/' + req.body.name).done (err,doc) ->
+			if not doc?
+				Doc.findOne({fullName: req.body.path}).done (err,doc) ->
+					if not doc? or doc.canWrite req.user?.email
+						next()
+					else
+						res.forbidden 'You do not have write permissions for this doc'
+			else if doc.canWrite req.user?.email
+				next()
+			else
+				res.forbidden 'You do not have write permissions for this doc'
+	else
+		next()


Copied over from repo pickles, init.

Copied over from repo pickles, init.

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

--- src/cakes.coffee
+++ src/cakes.coffee
@@ -0,0 +1,26 @@
+exports.Feature = (feature, benefit, who, desire, callback)->
+	message = "Feature: #{feature} \n\t Story -#{benefit} #{who} #{desire}"
+	describe(message, callback)
+	return
+
+exports.Scenario = (message, callback)->
+	describe("\n    Scenario: #{message}", callback)
+
+exports.Given = (context, callback)->
+	if arguments.length == 1
+		callback = context
+		message = 'before'
+
+	describe("Given: #{context}", callback)
+
+exports.When = (action, callback)->
+	describe("When: #{action}", callback)
+
+exports.And = (more_action_or_outcome, callback)->
+	describe("  and: #{more_action_or_outcome}", callback)
+
+exports.Then = (outcome, callback)->
+	describe("Then: #{outcome}", callback)
+
+exports.But = (not_outcome)->
+	describe(" but: #{not_outcome}", callback)


fixed starting of server copypasta

fixed starting of server copypasta

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


fix passing arguments to Connect constructor


Implement data-uri support

Implement data-uri support

--- src/index.coffee
+++ src/index.coffee
@@ -185,7 +185,14 @@
         loadedText: res.text
         status: Status.LOADED
         => @props.onLoad?()
-    load: -> http.get @props.src, @handleLoad
+    load: ->
+      if @props.src.indexOf('data:image/svg') is 0
+        # is data-uri
+        chunks = @props.src.split ';base64,'
+        @handleLoad null,
+          text: atob(chunks[1])
+      else
+        http.get @props.src, @handleLoad
     getClassName: ->
       # Build a CSS class name based on the current state.
       className = "isvg #{ @state.status }"


Ensure correct state

Ensure correct state

--- apps/feature/client/view.coffee
+++ apps/feature/client/view.coffee
@@ -51,7 +51,7 @@
         @auctionArtworks.add artworks.models
       else
         view = new AuctionArtworksView
-          model: new Auction @sale.toJSON()
+          model: new Auction @sale.toJSON(), parse: true
           collection: @auctionArtworks = artworks
           user: @currentUser
         @$('#feature-artworks').html view.render().$el


decided calling out the way we calculate percentile was too much

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


status cats

status cats

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

--- scripts/status-cats.coffee
+++ scripts/status-cats.coffee
@@ -0,0 +1,9 @@
+# HTTP Status Cats
+#
+# status cat <STATUS CODE> - show a status cat
+#
+
+
+module.exports = (robot) ->
+  robot.reply /status cat (\d+)/i, (msg) ->
+    msg.send "http://httpcats.herokuapp.com/#{msg.match[1]}.jpg"


confirm before delete

confirm before delete

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


hide points overview when reordering criteria

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


use max points in predictor

use max points in predictor


Add sample snippets.cson to dot-atom template

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

--- dot-atom/snippets.cson
+++ dot-atom/snippets.cson
@@ -0,0 +1,15 @@
+# Your snippets
+#
+# Atom snippets allow you to enter a simple prefix in the editor and hit tab to
+# expand the prefix into a larger code block with templated values.
+#
+# You can create a new snippet in this file by typing `snip` and then hitting
+# tab.
+#
+# An example CoffeeScript snippet to expand log to console.log:
+#
+# '.source.coffee':
+#   'Console log':
+#     'prefix': 'log'
+#     'body': 'console.log $1'
+#


updated atom config

updated 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/hubwub/holman-dotfiles.git/'


Display events in dumb console list

Display events in dumb console list

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


remove white color

remove white color

--- lib/fuzzy-finder-view.coffee
+++ lib/fuzzy-finder-view.coffee
@@ -50,7 +50,7 @@
           matchedChar = path[matchIndex]

           @text unmatched if unmatched
-          @strong matchedChar, class: 'matched-char', style: 'color:white'
+          @strong matchedChar, class: 'matched-char'
           lastIndex = matchIndex + 1

         # Remaining characters are plain text


Added Azerbaijani translation

Added Azerbaijani translation

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

--- app/assets/javascripts/uploadcare/locale/az.js.coffee
+++ app/assets/javascripts/uploadcare/locale/az.js.coffee
@@ -0,0 +1,115 @@
+ns.az =
+  uploading: 'Yüklənilir... Lütfən, gözləyin.'
+  loadingInfo: 'İnfo yüklənilir...'
+  errors:
+    default: 'Xəta'
+    baddata: 'Yanlış dəyər'
+    size: 'Fayl çox böyükdür'
+    upload: 'Yüklənilə bilmədi'
+    user: 'Yükləmə ləğv edildi'
+    info: 'İnfo yüklənə bilmədi'
+    image: 'Yalnız təsvirlərə icazə verilir'
+    createGroup: 'Fayl qrupu yaradıla bilmir'
+    deleted: 'Fayl silindi'
+  draghere: 'Faylı bura atın'
+  file:
+    one: '%1 fayl'
+    other: '%1 fayl'
+  buttons:
+    cancel: 'Ləğv edin'
+    remove: 'Silin'
+    choose:
+      files:
+        one: 'Fayl seçin'
+        other: 'Fayllar seçin'
+      images:
+        one: 'Təsvir seçin'
+        other: 'Təsvirlər seçin'
+  dialog:
+    done: 'Hazırdır'
+    showFiles: 'Faylları göstərin'
+    tabs:
+      names:
+        'empty-pubkey': 'Xoş gəlmisiniz'
+        preview: 'Önbaxış'
+        file: 'Lokal Fayllar'
+        url: 'İxtiyari linklər'
+        camera: 'Kamera'
+        facebook: 'Facebook'
+        dropbox: 'Dropbox'
+        gdrive: 'Google Disk'
+        instagram: 'Instagram'
+        vk: 'VK'
+        evernote: 'Evernote'
+        box: 'Box'
+        skydrive: 'OneDrive'
+        flickr: 'Flickr'
+        huddle: 'Huddle'
+      file:
+        drag: 'Faylı bura atın'
+        nodrop: 'Kompüterinizdən faylları yükləyin'
+        cloudsTip: 'Bulud yaddaşlar <br>və sosial xidmətlər'
+        or: 'or'
+        button: 'Lokal fayl seçin'
+        also: 'Həmçinin, buradan seçə bilərsiniz'
+      url:
+        title: 'Vebdən fayllar'
+        line1: 'Vebdən istənilən faylı  götürün.'
+        line2: 'Sadəcə, link verin.'
+        input: 'Linkinizi bura yerləşdirin...'
+        button: 'Yükləyin'
+      camera:
+        capture: 'Şəkil çəkin'
+        mirror: 'Güzgü'
+        retry: 'Yenidən icazə sorğusu göndərin.'
+        pleaseAllow:
+          title: 'Lütfən, kameranıza giriş hüququ verin'
+          text: 'Bu saytdan kameranıza daxil olmaq icazəsi verildi. ' +
+                'Kameranız ilə şəkil çəkmək üçün bu sorğunu təsdiq etməlisiniz.'
+        notFound:
+          title: 'Kamera aşkar edilmədi'
+          text: 'Görünür, bu cihaza kamera qoşulmayıb.'
+      preview:
+        unknownName: 'naməlum'
+        change: 'Ləğv edin'
+        back: 'Geri'
+        done: 'Əlavə edin'
+        unknown:
+          title: 'Yüklənilir... Lütfən, önbaxış üçün gözləyin.'
+          done: 'Önbaxışı ötürün və qəbul edin'
+        regular:
+          title: 'Bu fayl əlavə edilsin?'
+          line1: 'Yuxarıdakı faylı əlavə etmək üzrəsiniz.'
+          line2: 'Lütfən, təsdiq edin.'
+        image:
+          title: 'Bu təsvir əlavə edilsin?'
+          change: 'Ləğv edin'
+        crop:
+          title: 'Bu təsviri kəsin və əlavə edin'
+          done: 'Hazırdır'
+          free: 'pulsuz'
+        error:
+          default:
+            title: 'Ups!'
+            text: 'Yükləmə zamanı nəsə xəta baş verdi.'
+            back: 'Lütfən, y enidən cəhd edin.'
+          image:
+            title: 'Yaınız təsvir faylları qəbul olunur.'
+            text: 'Lütfən, başqa fayl ilə cəhd edin.'
+            back: 'Təsvir seçin'
+          size:
+            title: 'Seçdiyiniz fayl limiti keçir.'
+            text: 'Lütfən, başqa fayl ilə cəhd edin.'
+          loadImage:
+            title: 'Xəta'
+            text: 'Təsvir yüklənilə bilmir'
+        multiple:
+          title: '%files%' fayl seçdiniz.
+          question: 'Bütün bu faylları əlavə etmək istəyirsiniz?'
+          tooManyFiles: 'Həddindən çox fayl seçdiniz. %max% maksimumdur.'
+          tooFewFiles: '%files% fayl seçdiniz. Ən azı %min% tələb olunur.'
+          clear: 'Hamısını silin'
+          done: 'Hazırdır'
+    footer:
+      text: 'Faylları yükləyən, yadda saxlayan və icra edən'
+      link: 'Uploadcare.com'


add angular controller (with empty body)

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


Clean log

Clean log

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


Added method to flatten objects.

Added method to flatten objects.

Now for tests.

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

--- index.coffee
+++ index.coffee
@@ -0,0 +1,44 @@
+module.exports = (originalObj) ->
+    flattenedObj = {}
+
+    # This takes advantage of JS's passing object by reference
+    iterate(originalObj, flattenedObj);
+
+    return flattenedObj
+
+iterate = (obj, flat, path="") ->
+    for key, val of obj
+        if obj.hasOwnProperty(key)
+            keyPath = path + key
+            checkType(key, val, flat, keyPath)
+
+arrIterate = (arr, flat, path) ->
+    for val, idx in arr
+        arPath = path + '[' + idx + ']'
+        checkType(val, arr[idx], flat, arPath)
+
+
+checkType = (key, val, obj, path) ->
+    type = typeof val
+
+    # Throw error if unsupported values are passed
+    if type is "function" or type is "xml"
+        throw new Error("Unsupported type passed!")
+
+    # If is normal value, just assign it to the flattened object
+    if type is "boolean" or type is "string" or type is "number"
+        objKey = path or key
+        obj[objKey] = val
+        return
+
+    # else is an object.  We do this to not worry about 'undefined' or similar non-values.
+    if type is 'object'
+        # If Array
+        if Array.isArray(val)
+            arrIterate val, obj, path
+            return
+
+        # Else really is an object, so run it through iterate again.
+        else
+            objPath = path + '.'
+            return iterate( val, obj, objPath)


make phone notification persistent and close it when exiting the ringing status

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


Added you spec

Added you spec

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

--- spec/operations/you_spec.coffee
+++ spec/operations/you_spec.coffee
@@ -0,0 +1,44 @@
+operation = require '../../lib/operations/you'
+
+describe "/you", ->
+  it "should have the correct name", ->
+    expect(operation.name).toEqual('Fuck You')
+
+  it "should have the correct url", ->
+    expect(operation.url).toEqual('/you/:name/:from')
+
+  it "should have the correct fields", ->
+    expect(operation.fields).toEqual([
+      { name: 'Name', field: 'name'}
+      { name: 'From', field: 'from'}
+    ])
+
+  describe 'register', ->
+    it 'should call app.get with correct url', ->
+      app =
+        get: jasmine.createSpy()
+
+      operation.register(app,null)
+
+      expect(app.get).toHaveBeenCalled()
+      expect(app.get.argsForCall[0][0]).toEqual('/you/:name/:from')
+
+    it 'should call output with correct params', ->
+      func = null
+      app =
+        get: (url, fn) -> func = fn
+      output = jasmine.createSpy()
+      operation.register(app, output)
+
+      req =
+        params:
+          name: "TESTNAME"
+          from: "TESTFROM"
+
+      func(req,'RES')
+      expect(output).toHaveBeenCalledWith(
+        req,
+        'RES',
+        'Fuck you, TESTNAME.',
+        '- TESTFROM'
+      )


added OhimTransaction script

added OhimTransaction script

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

--- src/OhimTransaction.coffee
+++ src/OhimTransaction.coffee
@@ -0,0 +1,84 @@
+#This script is used to save the Trasnaction Object/Message into Mongo
+
+#schema definition -
+###
+{
+    "_id": "123",
+    "status": "Processing|Failed|Completed",
+    "applicationId": "Musha_OpenMRS",
+    "request": {
+        "path": "/api/test",
+        "headers": [
+            { "header1": "value1" },
+            { "header2": "value2" }
+        ],
+        "requestParams": [
+            { "param1": "value1" },
+            { "param2": "value2" }
+        ],
+        "body": "<HTTP body>",
+        "method": "POST",
+        "timestamp": "<ISO 8601>"
+    },
+    "response": {
+        "status": 201,
+        "body": "<HTTP body>",
+        "headers": [
+            { "header1": "value1" },
+            { "header2": "value2" }
+        ],
+        "timestamp": "<ISO 8601>"
+    },
+    "routes": [
+        {
+            "name": "<route name>"
+            // Same structure as above
+            "request": { ... },
+            "response": { ... }
+        }
+    ]
+    "orchestrations": [
+        {
+            "name": "<orchestration name>"
+            // Same structure as above
+            "request": { ... },
+            "response": { ... }
+        }
+    ]
+    "properties": [ // optional meta data about a transaction
+        { "prop1": "value1" },
+        { "prop2": "value2" }
+    ]
+}
+###
+
+	#orchestrations Schema
+RequestSchema = new Schema
+	"name" :{type: String, required: true}
+	"request": RequestSchema
+	"response": ResponseSchema
+
+	#Request Schema
+RequestSchema = new Schema
+	"path" :{type: String, required: true}
+	"headers": [{header:{type:String, required: true}, value:{type:String, required: true}}]
+	"requestParams":[{parameter:{type:String, required: true}, value:{type:String, required: true}}]
+	"body":{type: String, required: true}
+	"method":{type: String, required: true}
+	"timestamp":{type: Date, required: true}
+
+	#Response Schema
+ResponseSchema = new Schema
+	"status" :{type: Number, required: true}
+	"headers": [{header:{type:String, required: true}, value:{type:String, required: true}}]
+	"body":{type: String, required: true}
+	"timestamp":{type: Date, required: true}
+
+	#Application Schema
+ApplicationSchema = new Schema
+    "applicationID": {type: String, required: true}
+    "domain": {type: String, required: true}
+    "name": {type: String, required: true}
+    "routes": [ {name, request, response}]
+    "orchestrations": [{name, request,response}]
+    "properties": [ {property}]


Hide arrow's shadow if buried

Hide arrow's shadow if buried

--- app/lib/surface/CocoSprite.coffee
+++ app/lib/surface/CocoSprite.coffee
@@ -458,6 +458,8 @@
     else
       @marks[range['name']].toggle false for range in @ranges

+    if @thangType.get('name') is 'Arrow' and @thang.action is 'die'
+      @marks.shadow.hide()
     mark.update() for name, mark of @marks
     #@thang.effectNames = ['berserk', 'confuse', 'control', 'curse', 'fear', 'poison', 'paralyze', 'regen', 'sleep', 'slow', 'haste']
     @updateEffectMarks() if @thang?.effectNames?.length or @previousEffectNames?.length


:lipstick:

:lipstick:

--- spec/atom/selection-spec.coffee
+++ spec/atom/selection-spec.coffee
@@ -118,7 +118,7 @@
       expect(selection.regions.length).toBe 3
       expect(selection.find('.selection').length).toBe 3

-  describe "when a copy event is triggered", ->
+  describe ".copy()", ->
     beforeEach ->
       atom.native.writeToPasteboard('first')
       expect(atom.native.readFromPasteboard()).toBe 'first'
@@ -137,5 +137,3 @@
       selection.copy()
       expect(atom.native.readFromPasteboard()).toBe 'first'

-
-


Code styling

Code styling

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


complete Settings japanese

complete Settings japanese

--- def/settings.cson
+++ def/settings.cson
@@ -46,7 +46,7 @@
     {
       id: 'core.followSymlinks'
       title: "シンボリックリンクをたどる"
-      desc: "Fuzzy Finder でファイルを検索・開くときに使用されます。"
+      desc: "Fuzzy Finder でファイルを検索・開く時に使用されます。"
     }
     {
       id: 'core.ignoredNames'
@@ -56,4 +56,99 @@
       id: 'core.projectHome'
       title: "プロジェクトホーム"
     }
+    {
+      id: 'editor.autoIndent'
+      title: "自動インデント"
+      desc: "新しい行を挿入（改行）した時、カーソル位置を自動的にインデントした位置に移動します。"
+    }
+    {
+      id: 'editor.autoIndentOnPaste'
+      title: "ペースト時に自動インデント"
+    }
+    {
+      id: 'editor.confirmCheckoutHeadRevision'
+      title: "変更を破棄して HEAD リビジョンに戻す時に確認する"
+    }
+    {
+      id: 'editor.fontFamily'
+      title: "フォント"
+      desc: "font-family"
+    }
+    {
+      id: 'editor.fontSize'
+      title: "フォントサイズ"
+      desc: "font-size (px)"
+    }
+    {
+      id: 'editor.lineHeight'
+      title: "行の高さ"
+      desc: "line-height (number)"
+    }
+    {
+      id: 'editor.nonWordCharacters'
+      title: "単語の一部として扱わない文字"
+    }
+    {
+      id: 'editor.preferredLineLength'
+      title: "右端ガイドの位置"
+    }
+    {
+      id: 'editor.scrollPastEnd'
+      title: "最終行を超えてスクロール"
+    }
+    {
+      id: 'editor.scrollSensitivity'
+      title: "スクロール速度"
+    }
+    {
+      id: 'editor.showIndentGuide'
+      title: "インデントガイドを表示"
+    }
+    {
+      id: 'editor.showInvisibles'
+      title: "不可視文字を表示"
+      desc: "タブやスペース、改行などの見えない文字を記号として表示します。"
+    }
+    {
+      id: 'editor.showLineNumbers'
+      title: "行番号を表示"
+    }
+    {
+      id: 'editor.softTabs'
+      title: "ソフトタブ"
+      desc: "タブ文字の代わりにスペースを連ねて挿入します。"
+    }
+    {
+      id: 'editor.softWrap'
+      title: "ソフトラップ"
+      desc: "ウィンドウ幅を超えた時に折り返して表示します。「右端ガイドの位置でソフトラップ」が有効の場合は「右端ガイドの位置」の設定値で折り返されます。"
+    }
+    {
+      id: 'editor.softWrapAtPreferredLineLength'
+      title: "右端ガイドの位置でソフトラップ"
+      desc: "「右端ガイドの位置」の設定値で折り返します。この設定はソフトラップがグローバルまたは作業中の言語で有効な場合のみ適用されます。"
+    }
+    {
+      id: 'editor.softWrapHangingIndent'
+      title: "ソフトラップ時のインデント幅"
+    }
+    {
+      id: 'editor.tabLength'
+      title: "タブ幅"
+    }
+    {
+      id: 'editor.undoGroupingInterval'
+      title: "取り消し操作単位"
+      desc: "ひとまとまりの操作と認識させて取り消し履歴に登録する間隔（ミリ秒）"
+    }
+    {
+      id: 'editor.useShadowDOM'
+      title: "Shadow DOM を使う"
+      desc: "パッケージやテーマによる表示上の問題があった場合に無効にしてください。このオプションはいずれ無くすため、対象のパッケージまたはテーマに issue で報告してください。"
+    }
+    {
+      id: 'editor.zoomFontWhenCtrlScrolling'
+      title: "Ctrlスクロールでフォントサイズを変える"
+      desc: "コントロールキーを押しながらスクロールを上下することでエディタのフォントサイズを拡大/縮小します。"
+    }
   ]


refs #5 Changes extension of reply model to coffee script.

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

--- app/assets/javascripts/voluntary_feedback/models/reply.js.coffee
+++ app/assets/javascripts/voluntary_feedback/models/reply.js.coffee
@@ -0,0 +1,6 @@
+Volontariat.Reply = DS.Model.extend
+  userId: DS.attr('number')
+  userName: DS.attr('string')
+  userSlug: DS.attr('string')
+  feedbackId: DS.attr('number')
+  text: DS.attr('string')


logout with GET

logout with GET

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/Boxee/cloudee-couch.git/'


Create ProjectSize.coffee

Create ProjectSize.coffee

error: pathspec 'server-ce/grunt/ProjectSize.coffee' did not match any file(s) known to git

--- server-ce/grunt/ProjectSize.coffee
+++ server-ce/grunt/ProjectSize.coffee
@@ -0,0 +1,24 @@
+require("coffee-script")
+
+fs = require("fs")
+_ = require("underscore")
+
+if not process.argv[2]
+    console.log "Usage: coffee project_size.coffee user_files_path"
+else
+    dirPath = process.argv[2]
+    if not fs.lstatSync(dirPath).isDirectory()
+        console.log dirPath + " directory not exist"
+    else
+        fs.readdir dirPath, (err, files)->
+            projects = []
+            files.forEach (file)->
+                project_id = file.split("_")[0]
+                if !projects[project_id]
+                    projects[project_id] = 0
+                projects[project_id] += fs.lstatSync(dirPath+"/"+file).size
+
+            ids = _.keys projects
+            console.log "project \t size"
+            ids.forEach (id)->
+                console.log id + "\t" + projects[id]


escape handling

escape handling


bugfix in boyt create_transaction middleware

 On branch master

	modified:   nodejs_server/test/bestofyourtown/test-create_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/'


Added state for website-specific configuration

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

--- src/state.coffee
+++ src/state.coffee
@@ -0,0 +1,19 @@
+getUri = require('./helpers').getUriFromTab
+
+if localStorage["state"]
+	state = JSON.parse localStorage["state"]
+
+state ?= {}
+
+state.get = (tabId, cb) ->
+	chrome.tabs.get tabId, (tab) =>
+		id = getUri(tab)
+		pageConfig = state[id] || { id }
+		cb(pageConfig)
+
+state.sync = (pageConfig) ->
+	state[pageConfig.id] = pageConfig
+	localStorage["state"] = JSON.stringify @
+	@
+
+module.exports = state


Fix unable to select custom cover

Fix unable to select custom cover

--- resources/assets/coffee/react/profile-page/cover-uploader.coffee
+++ resources/assets/coffee/react/profile-page/cover-uploader.coffee
@@ -59,6 +59,7 @@
         url: @props.cover.customUrl
         thumbUrl: @props.cover.customUrl
         isSelected: @props.cover.id == null
+        name: -1

       el 'label', className: labelClass, ref: 'uploadButtonContainer',
         Lang.get 'users.show.edit.cover.upload.button'


fixed input-colorpicker-text bugs

fixed input-colorpicker-text bugs

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


add string utils

add string utils

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

--- newebe/client/app/lib/string.coffee
+++ newebe/client/app/lib/string.coffee
@@ -0,0 +1,11 @@
+
+exports.isSpecialKey = (key) ->
+    keychar = String.fromCharCode(key).toLowerCase()
+    if (key is null) or (key is 0) or (key is 8) or (key is 9) or
+    (key is 13) or (key is 27)
+         return true
+    else if ('abcdefghijklmnopqrstuvwxyz0123456789').indexOf(keychar) is -1
+        event.preventDefault()
+        return false
+
+


more idiomatic

more idiomatic

--- src/spine.coffee
+++ src/spine.coffee
@@ -6,7 +6,7 @@
     for name in evs
       calls[name] or= []
       calls[name].push(callback)
-    @
+    this

   one: (ev, callback) ->
     @bind ev, ->
@@ -27,21 +27,21 @@
   unbind: (ev, callback) ->
     unless ev
       @_callbacks = {}
-      return @
+      return this

     list = @_callbacks?[ev]
-    return @ unless list
+    return this unless list

     unless callback
       delete @_callbacks[ev]
-      return @
+      return this

     for cb, i in list when cb is callback
       list = list.slice()
       list.splice(i, 1)
       @_callbacks[ev] = list
       break
-    @
+    this

 Log =
   trace: true
@@ -53,7 +53,7 @@
     return if typeof console is 'undefined'
     if @logPrefix then args.unshift(@logPrefix)
     console.log(args...)
-    @
+    this

 moduleKeywords = ['included', 'extended']

@@ -63,14 +63,14 @@
     for key, value of obj when key not in moduleKeywords
       @::[key] = value
     obj.included?.apply(@)
-    @
+    this

   @extend: (obj) ->
     throw('extend(obj) requires obj') unless obj
     for key, value of obj when key not in moduleKeywords
       @[key] = value
     obj.extended?.apply(@)
-    @
+    this

   @proxy: (func) ->
     => func.apply(@, arguments)
@@ -96,7 +96,7 @@
     @attributes and= makeArray(@attributes)
     @attributes or=  []
     @unbind()
-    @
+    this

   @toString: -> "#{@className}(#{@attributes.join(", ")})"

@@ -135,7 +135,7 @@
       @crecords[record.cid] = record

     @trigger('refresh', not options.clear and records)
-    @
+    this

   @select: (callback) ->
     result = (record for id, record of @records when callback(record))
@@ -238,10 +238,10 @@
     @load atts if atts
     @cid or= 'c-' + @constructor.uid()

-  isNew: () ->
-    !@exists()
-
-  isValid: () ->
+  isNew: ->
+    not @exists()
+
+  isValid: ->
     not @validate()

   validate: ->
@@ -252,11 +252,11 @@
         @[key](value)
       else
         @[key] = value
-    @
+    this

   attributes: ->
     result = {}
-    for key in @constructor.attributes when key of @
+    for key in @constructor.attributes when key of this
       if typeof @[key] is 'function'
         result[key] = @[key]()
       else
@@ -303,7 +303,7 @@
     @trigger('destroy', options)
     @trigger('change', 'destroy', options)
     @unbind()
-    @
+    this

   dup: (newRecord) ->
     result = new @constructor(@attributes())
@@ -317,7 +317,7 @@
     Object.create(@)

   reload: ->
-    return @ if @isNew()
+    return this if @isNew()
     original = @constructor.find(@id)
     @load(original.attributes())
     original


hubot script to take a web screen of a url using our API

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


coffeescript doesn't like \0 (or maybe it's V8?). Anyway, changed it to \u0000

--- test/test.blob.coffee
+++ test/test.blob.coffee
@@ -29,7 +29,7 @@
 				blob.data.should.be.an.instanceof Buffer
 			it "has correct contents", ->
 				shasum = crypto.createHash "sha1"
-				shasum.update "blob #{blob.data.length}\0"
+				shasum.update "blob #{blob.data.length}\u0000"
 				shasum.update blob.data.toString("binary")
 				shasum.digest("hex").should.equal blob.id
 			it "is immutable", -> utils.checkImmutable blob, "data"


Remove @module comment from item-definition

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/laterpay/laterpay-client-node.git/'


Don't match dance / happy inside of other words

Previous regex was too loosey goosey - matched words like abundance,
guidance and unhappy.

--- src/scripts/carlton.coffee
+++ src/scripts/carlton.coffee
@@ -23,5 +23,5 @@
 ]

 module.exports = (robot) ->
-  robot.hear /.*(dance|happy).*/i, (msg) ->
+  robot.hear /\b(dance|happy)\b/i, (msg) ->
     msg.send msg.random carltons


Resync with server data after changing the timestamp.

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/lmjohns3/thorax-media.git/'


Adding the group resolver

Adding the group resolver

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

--- src/lib/resolvers/groups.coffee
+++ src/lib/resolvers/groups.coffee
@@ -0,0 +1,44 @@
+# Resolve remote URLs
+
+async = require 'async'
+glob = require 'glob'
+tilde = require 'expand-tilde'
+path = require 'path'
+fs = require 'fs'
+
+utils = require '../utils'
+config = require '../config'
+logger = require '../logger'
+ExpressionSet = require('../expressions').ExpressionSet
+
+class exports.Group
+  constructor: (expression, @getResolver) ->
+    @name = @parseExpression expression
+
+    logger.debug "Group: #{@name}"
+
+  parseExpression: (expression) ->
+    match = expression.match /^group\:(.+)/
+
+    unless match
+      throw new Error 'This isn\'t a valid group expression'
+
+    match[1]
+
+  # Returs a list of queries for the engine
+  resolve: (callback) ->
+    expressions = config.get "resolvers:groups:#{@name}"
+    unless utils.isArray expressions
+      throw new Error "Group '#{@name}' must be an array of expressions"
+
+    expSet = new ExpressionSet expressions, @getResolver
+    expSet.getQueries callback
+
+# Quickly check whether a string could be a basic expression
+#
+# @param [String] expression The expression to test.
+#
+# @return [Boolean] True when the expression matches.
+#
+exports.test = (expression) ->
+  /^group\:/.test expression


used string interpolation for profilePicture string

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/fbergin/timeline-stats.git/'


Modified in browser at pixie.strd6.com

Modified in browser at pixie.strd6.com

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

--- test/text.coffee
+++ test/text.coffee
@@ -0,0 +1,4 @@
+module "Text"
+
+te
+module()


Formatted utilities using single quoted literals

--- nodes.coffee
+++ nodes.coffee
@@ -2107,19 +2107,39 @@

   # Correctly set up a prototype chain for inheritance, including a reference
   # to the superclass for `super()` calls, and copies of any static properties.
-  extends: -> """
-    function(child, parent) { for (var key in parent) { if (#{utility 'hasProp'}.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }
-  """
+  extends: -> "
+    function(child, parent) {
+      for (var key in parent) {
+        if (#{utility 'hasProp'}.call(parent, key)) child[key] = parent[key];
+      }
+      function ctor() {
+        this.constructor = child;
+      }
+      ctor.prototype = parent.prototype;
+      child.prototype = new ctor();
+      child.__super__ = parent.prototype;
+      return child;
+    }
+  "

   # Create a function bound to the current value of "this".
-  bind: -> '''
-    function(fn, me){ return function(){ return fn.apply(me, arguments); }; }
-  '''
+  bind: -> '
+    function(fn, me){
+      return function(){
+        return fn.apply(me, arguments);
+      };
+    }
+  '

   # Discover if an item is in an array.
-  indexOf: -> """
-    [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }
-  """
+  indexOf: -> "
+    [].indexOf || function(item) {
+      for (var i = 0, l = this.length; i < l; i++) {
+        if (i in this && this[i] === item) return i;
+      }
+      return -1;
+    }
+  "

   # Shortcuts to speed up the lookup time for native functions.
   hasProp: -> '{}.hasOwnProperty'