support requesting faction data

support requesting faction data

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

--- src/plugins/request-faction.coffee
+++ src/plugins/request-faction.coffee
@@ -0,0 +1,118 @@
+async = require 'async'
+requestFactory = require '../lib/request.js'
+broadcastTasker = require '../lib/broadcast.js'
+request = requestFactory()
+
+messageCount    = 0
+messageReceived = 0
+messageInserted = 0
+noMoreMessages  = false
+
+taskCount     = 0
+taskCompleted = 0
+
+module.exports =
+
+    onBootstrap: (callback) ->
+
+        if argv.faction
+            bootstrap ->
+                callback 'end'
+        else
+            callback()
+
+dbQueue = async.queue (task, callback) ->
+
+    task callback
+
+, Config.Database.MaxParallel
+
+bootstrap = (callback) ->
+
+    indexes = [
+        {time: -1}
+        {'markup.SENDER1.plain': 1}
+        {'markup.PLAYER1.plain': 1}
+    ]
+
+    # ensure indexes
+    async.each indexes, (index, callback) ->
+
+        Database.db.collection('Chat.Faction').ensureIndex index, callback
+
+    , ->
+
+        dbQueue.drain = ->
+            callback() if noMoreMessages
+
+        broadcast = broadcastTasker
+            instanceId:         'req-broadcast-faction'
+            type:               'faction'
+            splitTimespanMS:    Config.Chat.SplitTimespanMS
+            region:             Config.Region
+
+        broadcast.on 'error', (err) ->
+            logger.error "[Faction] #{err.message}"
+
+        broadcast.on 'complete', ->
+            noMoreMessages = true
+
+        broadcast.on 'receive', (response) ->
+            for rec in response
+                messageReceived++
+                insertMessage rec[0], rec[1], rec[2]
+
+        broadcast.on 'response', (done, max) ->
+            logger.info "[Faction] " +
+                    Math.round(taskCompleted / taskCount * 100) +
+                    "% [#{taskCompleted}/#{taskCount}] [#{done}/#{max}]" +
+                    "\tReceived #{messageReceived} (all #{messageCount})"
+
+        broadcast.on 'taskcreated', (preparedLength, allLength) ->
+            taskCount = allLength
+            logger.info "[Faction] Created #{preparedLength} tasks (all #{allLength} tasks)."
+
+        broadcast.on 'taskcompleted', ->
+            taskCompleted++
+
+        broadcast.on 'beforestart', ->
+            logger.info "[Faction] Begin requesting..."
+
+        if argv.new or argv.n
+            logger.info "[Faction] New: [#{Config.Region.SouthWest.Lat},#{Config.Region.SouthWest.Lng}]-[#{Config.Region.NorthEast.Lat},#{Config.Region.NorthEast.Lng}]"
+        else
+            logger.info "[Faction] Continue: [#{Config.Region.SouthWest.Lat},#{Config.Region.SouthWest.Lng}]-[#{Config.Region.NorthEast.Lat},#{Config.Region.NorthEast.Lng}]"
+
+        tsMax = Date.now()
+        tsMin = tsMax - Config.Chat.TraceTimespanMS
+        broadcast.start tsMin, tsMax, argv.new or argv.n
+
+insertMessage = (id, timestamp, data) ->
+
+    if messageInserted % 100 is 0
+
+        Database.db.collection('Chat.Faction').count {}, (err, count) ->
+            messageCount = count if count
+
+    messageInserted++
+
+    data2 = data.plext
+
+    # parse markup
+    markup = {}
+    count = {}
+
+    for m in data.plext.markup
+        count[m[0]] = 0 if not count[m[0]]?
+        count[m[0]]++
+        markup[m[0]+count[m[0]].toString()] = m[1]
+
+    data2.markup = markup
+
+    dbQueue.push (done) ->
+
+        doc = data2
+        doc._id = id
+        doc.time = timestamp
+
+        Database.db.collection('Chat.Faction').insert doc, done


clio-41275 tests

clio-41275 tests

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


Add CarrierService resource

Add CarrierService resource

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

--- src/resources/carrier_service.coffee
+++ src/resources/carrier_service.coffee
@@ -0,0 +1,10 @@
+Base = require './base'
+
+class CarrierService extends Base
+  slug: "carrier_service"
+  prefix: "/carrier_services"
+
+  constructor: (site) ->
+    super(site)
+
+module.exports = CarrierService


wtf am i reading

wtf am i reading

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

--- scripts/wtfreading.coffee
+++ scripts/wtfreading.coffee
@@ -0,0 +1,3 @@
+module.exports = (robot) ->
+  robot.hear /.*(wtf|what the fuck) am i reading.*/i, (msg) ->
+    msg.send "http://mlkshk.com/r/KDRQ.gif"


add missing file

add missing 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/VoiSmart/Rocket.Chat.git/'


Fix load pagination totals before fetched 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/xaun/transac.git/'


webapp/library2: wait longer until project is open

--- src/smc-webapp/projects.cjsx
+++ src/smc-webapp/projects.cjsx
@@ -231,7 +231,9 @@
         if opts.target?
             redux.getProjectActions(opts.project_id)?.load_target(opts.target, opts.switch_to)
         redux.getActions('page').save_session()
-        store.wait_until_project_is_open opts.project_id, 200, (err) =>
+        # init the library after project started.
+        # TODO write a generalized store function that does this in a more robust way
+        store.wait_until_project_is_open opts.project_id, 600, (err) ->
             if not err
                 project_actions.init_library()


sagews: change how flags cleared

sagews: change how flags cleared

--- src/smc-webapp/sagews.coffee
+++ src/smc-webapp/sagews.coffee
@@ -42,7 +42,6 @@

 class SynchronizedWorksheet extends SynchronizedDocument2
     constructor: (@editor, @opts) ->
-        window.w = @
         # these two lines are assumed, at least by the history browser
         @codemirror  = @editor.codemirror
         @codemirror1 = @editor.codemirror1
@@ -520,12 +519,9 @@

     clear_action_flags: (this_session) =>
         flags = if this_session then ACTION_SESSION_FLAGS else ACTION_FLAGS
-        # Set any running cells to not running.
-        for cm in [@codemirror, @codemirror1]
-            for marker in cm.getAllMarks()
-                if marker.type == MARKERS.cell
-                    for flag in flags
-                        @remove_cell_flag(marker, flag)
+        for cell in @get_all_cells()
+            for flag in flags
+                cell.remove_cell_flag(flag)

     kill: (opts={}) =>
         opts = defaults opts,


work in progress

work in progress

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


clean-up

clean-up

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


fix typo

fix typo

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


notebook spec

notebook spec

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

--- spec/notebook.spec.coffee
+++ spec/notebook.spec.coffee
@@ -0,0 +1,7 @@
+define (require) ->
+  notebook = require 'notebook'
+
+  describe 'notebooks', ->
+  	it 'can be created', ->
+      nb = notebook.create_notebook()
+


second commit

second commit

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


added atom command support

added atom command support

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/genesisneo/project-hermes.git/'


Filtered out achievement popups for level achievements.

--- app/views/kinds/RootView.coffee
+++ app/views/kinds/RootView.coffee
@@ -34,6 +34,7 @@
     'achievements:new': 'handleNewAchievements'

   showNewAchievement: (achievement, earnedAchievement) ->
+    return if achievement.get('collection') is 'level.sessions'
     popup = new AchievementPopup achievement: achievement, earnedAchievement: earnedAchievement

   handleNewAchievements: (e) ->


change logCouchdb in loginCouch

change logCouchdb in loginCouch

--- config/initializers/db.coffee
+++ config/initializers/db.coffee
@@ -13,7 +13,7 @@

     ### Helpers ###

-    initLogCouchdb = ->
+    initLoginCouch = ->
         data = fs.readFileSync '/etc/cozy/couchdb.login'
         lines = S(data.toString('utf8')).lines()
         return lines
@@ -21,25 +21,25 @@
     # Add admin to couchDB
     # Result : Unauthorized applications cannot create a database
     addCouchdbAdmin = (callback) ->
-        logCouchdb = initLogCouchdb()
-        couchClient.put "_config/admins/#{logCouchdb[0]}", "#{logCouchdb[1]}",
+        loginCouch = initLoginCouch()
+        couchClient.put "_config/admins/#{loginCouch[0]}", "#{loginCouch[1]}",
                 (err, res, body) =>
-            couchClient.setBasicAuth(logCouchdb[0],logCouchdb[1])
+            couchClient.setBasicAuth(loginCouch[0],loginCouch[1])
             couchClient.get 'cozy/_security', (err, res, body) =>
                 callback err, body

     # Add admin to cozy database
     # Result : Unauthorized applications cannot read on cozy
     addCozyAdmin = (callback) ->
-        logCouchdb = initLogCouchdb()
+        loginCouch = initLoginCouch()
         data =
             "admins":
-                "names":[logCouchdb[0]]
+                "names":[loginCouch[0]]
                 "roles":[]
             "readers":
-                "names":[logCouchdb[0]]
+                "names":[loginCouch[0]]
                 "roles":[]
-        couchClient.setBasicAuth(logCouchdb[0],logCouchdb[1])
+        couchClient.setBasicAuth(loginCouch[0],loginCouch[1])
         couchClient.put 'cozy/_security', data, (err, res, body)->
             callback err

@@ -71,9 +71,9 @@
             else if exists
                 if process.env.ENV_VARIABLE is 'production'
                     addCouchdbAdmin (err, body) =>
-                        logCouchdb = initLogCouchdb()
+                        loginCouch = initLoginCouch()
                         if not body.admins? or
-                                body.admins.names[0] isnt logCouchdb[0]
+                                body.admins.names[0] isnt loginCouch[0]
                             addCozyAdmin (err) =>
                                 if err
                                     compound.logger.write "Error on database" +
@@ -86,11 +86,9 @@
                 else
                     logFound()
             else
-                console.log("create")
                 db_create()

     db_create = ->
-        console.log("create")
         compound.logger.write "Database #{db.name} on" +
                 " #{db.connection.host}:#{db.connection.port} doesn't exist."
         db.create (err) ->


Add Atom configuration.

Add Atom configuration.

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

--- .atom/config.cson
+++ .atom/config.cson
@@ -0,0 +1,8 @@
+"*":
+    core:
+        telemetryConsent: "limited"
+    editor:
+        tabLength: 4
+        tabType: "soft"
+    welcome:
+        showOnStartup: false


Remove debugging

Remove debugging


Minor: code cleanup

Minor: code cleanup

--- client/ide/AppController.coffee
+++ client/ide/AppController.coffee
@@ -10,7 +10,7 @@

     super options, data

-  createFileFromPath:(rest...)-> FSHelper.createFileFromPath rest...
+  createFileFromPath: -> FSHelper.createFileFromPath arguments...

   create: (options = {}) ->
     options.useStorage       ?= yes


(new test) Covering the reponsibility of locals

--- Paws/Test/Paws.tests.coffee
+++ Paws/Test/Paws.tests.coffee
@@ -149,8 +149,10 @@
          expect(exe.locals).to.be.a Thing
          expect(exe.locals.metadata).to.have.length 2

-         expect(exe.locals.at(1).valueish()).to.be exe.locals
          expect(exe       .at(1).valueish()).to.be exe.locals
+         expect(exe       .at(1).metadata[2].isResponsible).to.be true
+         expect(exe.locals.at(1).valueish()   ).to.be exe.locals
+         expect(exe.locals.at(1).metadata[2].isResponsible).to.be false

       describe '(alien, nukespace code)', ->
          it 'should take a series of procedure-bits', ->


delete plugin tell client that it is enabled

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


Create migration for Layout_Login_Header

error: pathspec 'server/startup/migrations/v36.coffee' did not match any file(s) known to git

--- server/startup/migrations/v36.coffee
+++ server/startup/migrations/v36.coffee
@@ -0,0 +1,21 @@
+url = Npm.require 'url'
+RocketChat.Migrations.add
+	version: 35
+	up: ->
+		loginHeader = RocketChat.models.Settings.findOne _id: 'Layout_Login_Header'
+
+		if not loginHeader?.value?
+			return
+
+		match = loginHeader.value.match(/<img\ssrc=['"]([^'"]+)/)
+		if match? and match.length is 2
+			requestUrl = match[1]
+			if requestUrl[0] is '/'
+				requestUrl = url.resolve(Meteor.absoluteUrl(), requestUrl)
+
+			result = HTTP.get requestUrl, npmRequestOptions: {encoding: 'binary'}
+			if result.statusCode is 200
+				RocketChat.Assets.setAsset(result.content, result.headers['content-type'], 'logo')
+
+
+		RocketChat.models.Settings.remove _id: 'Layout_Login_Header'


TODO added

TODO added


commit

commit

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


Updates description format

Updates description format

--- src/scripts/gosling.coffee
+++ src/scripts/gosling.coffee
@@ -1,8 +1,22 @@
-# Pulls a random programmer Ryan Gosling image
 #
 # gos(ling)? me - Receive a programmer Ryan Gosling meme
 # gos(ling)? bomb N - Receive N programmer Ryan Gosling memes

+# Description:
+#   Pulls a random programmer Ryan Gosling image
+#
+# Dependencies:
+#   None
+#
+# Configuration:
+#   HUBOT_TUMBLR_API_KEY
+#
+# Commands:
+#   hubot gos(ling)? me - Receive a programmer Ryan Gosling meme
+#   hubot gos(ling)? bomb N - Receive N programmer Ryan Gosling memes
+#
+# Author:
+#   jessedearing

 api_key = process.env.HUBOT_TUMBLR_API_KEY


Template render with mustache system

Template render with mustache system

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

--- source/core/render.coffee
+++ source/core/render.coffee
@@ -0,0 +1,35 @@
+# templayed.js 0.2.1 - (c) 2012 Paul Engel
+# The fastest and smallest Mustache compliant Javascript templating library
+
+"use strict"
+
+Atoms.render = (template, data) ->
+  get = (path, i) ->
+    i = 1
+    path = path.replace(/\.\.\//g, ->
+      i++
+      ""
+    )
+    js = ["data[data.length - ", i, "]"]
+    keys = ((if path is "." then [] else path.split(".")))
+    index = 0
+    while index < keys.length
+      js.push "." + keys[index]
+      index++
+    js.join ""
+
+  tag = (template) ->
+    template.replace /\{\{(!|&|\{)?\s*(.*?)\s*}}+/g, (match, operator, context) ->
+      return ""    if operator is "!"
+      i = inc++
+      ["\"; var o", i, " = ", get(context), ", s", i, " = (((typeof(o", i, ") == \"function\" ? o", i, ".call(data[data.length - 1]) : o", i, ") || \"\") + \"\"); s += ", ((if operator then ("s" + i) else "(/[&\"><]/.test(s" + i + ") ? s" + i + ".replace(/&/g,\"&\").replace(/\"/g,\""\").replace(/>/g,\">\").replace(/</g,\"<\") : s" + i + ")")), " + \""].join ""
+
+
+  block = (template) ->
+    tag template.replace(/\{\{(\^|#)(.*?)}}(.*?)\{\{\/\2}}/g, (match, operator, key, context) ->
+      i = inc++
+      ["\"; var o", i, " = ", get(key), "; ", ((if operator is "^" then ["if ((o", i, " instanceof Array) ? !o", i, ".length : !o", i, ") { s += \"", block(context), "\"; } "] else ["if (typeof(o", i, ") == \"boolean\" && o", i, ") { s += \"", block(context), "\"; } else if (o", i, ") { for (var i", i, " = 0; i", i, " < o", i, ".length; i", i, "++) { data.push(o", i, "[i", i, "]); s += \"", block(context), "\"; data.pop(); }}"])).join(""), "; s += \""].join ""
+    )
+
+  inc = 0
+  new Function("data", "data = [data], s = \"" + block(template.replace(/"/g, "\\\"").replace(/\n/g, "\\n")) + "\"; return s;")


Added test for OmitTypeForCSS

Added test for OmitTypeForCSS

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

--- test/rules/OmitTypeForCSS.coffee
+++ test/rules/OmitTypeForCSS.coffee
@@ -0,0 +1,34 @@
+expect = require('chai').expect
+rule = require "./../../src/rules/#{require('path').basename(__filename, '.coffee')}"
+
+describe 'OmitTypeForCSS', ->
+    it 'should catch when the type is text/css', ->
+        it 'should catch single quotes', ->
+            expect rule::validate """
+            style(type='text/css')
+            """
+            .to.be.false
+
+        it 'should catch double quotes', ->
+            expect rule::validate """
+            style(type="text/css")
+            """
+            .to.be.false
+
+    it 'should pass other style types', ->
+        expect rule::validate """
+        style(type='text/less')
+        """
+        .to.be.true
+
+    it 'should pass normal style elements', ->
+        expect rule::validate """
+        style
+        """
+        .to.be.true
+
+    it 'should ignore other element types', ->
+        expect rule::validate """
+        div(type="text/css")
+        """
+        .to.be.true


bug fix

bug fix

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


Add namespace utility for exporting to global namespace.

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

--- src/util/namespace.coffee
+++ src/util/namespace.coffee
@@ -0,0 +1,21 @@
+module.exports = (namespace, obj) ->
+
+  # Split the namespace by periods.
+  ns = namespace.split /\./g
+
+  # Starting at the global window object, travel down the namespace, creating
+  # it as required.
+  parent = window
+  i = 0
+  while i < ns.length - 1
+    n = ns[i]
+    parent[n] = parent[n] or {}
+    parent = parent[n]
+    i++
+
+  # Expose the passed object, if it doesn't already exist.
+  n = ns[i]
+  if parent[n]
+    throw new Error "Refuse to redefine namespace #{namespace}."
+  else
+    parent[n] = obj


Add test case for unknown ast conjunction

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


Added first draft of unit testing for Elyssa.Math

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

--- test/src/tests/core/math.coffee
+++ test/src/tests/core/math.coffee
@@ -0,0 +1,8 @@
+describe 'Elyssa', ->
+  describe 'Core', ->
+    describe 'Math', ->
+      describe '.clamp', ->
+        it 'value is between min and max', -> Elyssa.Math.clamp(0.5, 0, 1).should.equal(0.5)
+        it 'value is bigger than max', -> Elyssa.Math.clamp(1.5, 0, 1).should.equal(1)
+        it 'value is smaller than min', -> Elyssa.Math.clamp(-5, 0, 1).should.equal(0)
+        it 'value is bigger than max, but max is maller than min', -> Elyssa.Math.clamp(-5, 1, 0).should.equal(0)


Edge case detection

Edge case detection

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


Prevent fan drag handles from overlapping

--- app/controllers/fan_tool.coffee
+++ app/controllers/fan_tool.coffee
@@ -6,7 +6,7 @@
 optionsTemplate = require 'views/fan_tool_options'

 # Destructure math for convenience.
-{abs, atan2, cos, PI, pow, sin, sqrt, tan} = Math
+{abs, atan2, cos, max, PI, pow, sin, sqrt, tan} = Math
 sq = (n) -> pow n, 2

 class FanTool extends MarkingTool
@@ -96,8 +96,8 @@
     spreadX = @mark.distance - spreadRadius

     @dots.distance.setPosition @mark.distance, 0
-    @dots.spreadA.setPosition spreadX, -spreadRadius
-    @dots.spreadB.setPosition spreadX, +spreadRadius
+    @dots.spreadA.setPosition spreadX, -max style.circle.radius * 2.5, spreadRadius
+    @dots.spreadB.setPosition spreadX, +max style.circle.radius * 2.5, spreadRadius

     @lines.distance.setPoints [{x: 0, y: 0}, {x: @mark.distance, y: 0}]


added class property that got missing

added class property that got missing

--- app/views/play/level/tome/spell_view.coffee
+++ app/views/play/level/tome/spell_view.coffee
@@ -450,6 +450,8 @@
         #state.executing = true if state.userInfo?.time is @thang.world.age  # no work
     currentCallIndex ?= callNumber - 1
     #console.log "got call index", currentCallIndex, "for time", @thang.world.age, "out of", states.length
+
+    @decoratedGutter = @decoratedGutter || {}

     # TODO: don't redo the markers if they haven't actually changed
     for markerRange in (@markerRanges ?= [])
@@ -490,7 +492,7 @@
       markerRange.id = @aceSession.addMarker markerRange, clazz, markerType
       @markerRanges.push markerRange
       if executedRows[start.row] and @decoratedGutter[start.row] isnt clazz
-        @aceSession.removeGutterDecoration start.row, @decoratedGutter[start.row] if @decoratedGutter isnt ''
+        @aceSession.removeGutterDecoration start.row, @decoratedGutter[start.row] if @decoratedGutter[start.row] isnt ''
         @aceSession.addGutterDecoration start.row, clazz
         @decoratedGutter[start.row] = clazz
     @debugView.setVariableStates {} unless gotVariableStates


Add importing files

Add importing files

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


removed commented code

removed commented code

--- coffee/metaCollector.coffee
+++ coffee/metaCollector.coffee
@@ -17,11 +17,6 @@
       return initialSorting if initialSorting == "asc" || initialSorting == "desc"
       throw "Invalid value for initial-sorting: #{initialSorting}. Allowed values are 'asc' or 'desc'."
     return undefined
-
-  # collectAttributes = (attributes) ->
-  #   result = []
-  #   for attribute in attributes
-  #     result.push({name: attribute.name, value: attribute.value})

   {
     collectCustomHeaderMarkup: (thead) ->


Added event handling callbacks to websockets

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


atom: snippets: more

atom: snippets: more

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


Rename `phantomTab` to `indentToken`

Rename `phantomTab` to `indentToken`

--- src/tokenized-line.coffee
+++ src/tokenized-line.coffee
@@ -121,7 +121,7 @@
       leftTextLength += nextToken.value.length
       leftTokens.push nextToken

-    phantomTab = leftTokens[0].buildSoftWrapIndentToken(@indentLevel * @tabLength)
+    indentToken = leftTokens[0].buildSoftWrapIndentToken(@indentLevel * @tabLength)

     leftFragment = new TokenizedLine(
       tokens: leftTokens
@@ -133,7 +133,7 @@
       tabLength: @tabLength
     )
     rightFragment = new TokenizedLine(
-      tokens: [phantomTab].concat(rightTokens)
+      tokens: [indentToken].concat(rightTokens)
       startBufferColumn: @bufferColumnForScreenColumn(column)
       ruleStack: @ruleStack
       invisibles: @invisibles


fix: parse dates in invalid jobs

fix: parse dates in invalid jobs

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


Deprecate pane:removed event

Deprecate pane:removed event

--- src/workspace-view.coffee
+++ src/workspace-view.coffee
@@ -167,6 +167,17 @@
     @command 'core:save', => @saveActivePaneItem()
     @command 'core:save-as', => @saveActivePaneItemAs()

+    @setupViewEventDeprecations()
+
+  setupViewEventDeprecations: ->
+    originalOn = @on
+
+    @on = (eventName) =>
+      switch eventName
+        when 'pane:removed'
+          deprecate("Use Pane::onDidDestroy instead")
+      originalOn.apply(this, arguments)
+
   ###
   Section: Accessing the Workspace Model
   ###


Added color.coffee module

Added color.coffee module

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

--- coffee/color.coffee
+++ coffee/color.coffee
@@ -0,0 +1,38 @@
+
+###
+Convert from NJ.NDArray to THREE.Vector4 color representation
+
+@param [NJ.NDArray] c color array with 1, 3, or 4 components
+  if c.length == 1, c represents a gray scal color, alpha = 1.0
+  if c.length == 3, c represents a RGB color, alpha = 1.0
+  if c.length == 4, c represents a RGBA color
+
+@return [THREE.Vector4] RBGA color
+###
+color2vec4 = (c) ->
+
+    if !c instanceof NJ.NDArray
+        throw new SCIWIZ.SciwizException('Expecting NJ.NDArray object')
+
+    [R, G, B, A] = [1.0, 1.0, 1.0, 1.0]
+    switch c.length
+        when 1 then [R, G, B] = [c.data[0], c.data[0], c.data[0]]
+        when 3 then [R, G, B] = [c.data[0], c.data[1], c.data[2]]
+        when 4 then [R, G, B, A] = [c.data[0], c.data[1], c.data[2], c.data[3]]
+        else throw new SCIWIZ.SciwizException('Unexpected color length: got: ' + c.length)
+
+    return new THREE.Vector4(R, G, B, A)
+
+###
+Return a random RGB color with given alpha
+
+@param [float] alpha alpha value [0, 1]
+
+@return [NJ.NDArrray] 4 element array with RGBA value
+###
+randomColor = (alpha=1.0) ->
+    return NJ.array([Math.random(), Math.random(), Math.random(), alpha], dtype=NJ.float32)
+
+module.exports =
+    color2vec4 : color2vec4
+    randomColor : randomColor


Modified in browser at pixie.strd6.com

Modified in browser at pixie.strd6.com

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

--- test/active_bounds.coffee
+++ test/active_bounds.coffee
@@ -0,0 +1,73 @@
+module "ActiveBounds"
+
+test "#bounds returns correct x, y, width, height", ->
+  x = 5
+  y = 10
+  width = 50
+  height = 75
+
+  obj = GameObject
+    x: x
+    y: y
+    width: width
+    height: height
+
+  obj.include(Bounded)
+
+  equals obj.bounds().x, x - width/2
+  equals obj.bounds().y, y - height/2
+  equals obj.bounds().width, width
+  equals obj.bounds().height, height
+
+test "#centeredBounds returns correct x, y, xw, yx", ->
+  x = -5
+  y = 20
+
+  obj = GameObject
+    x: x
+    y: y
+    width: 100,
+    height: 200
+
+  obj.include(Bounded)
+  bounds = obj.centeredBounds()
+
+  equals bounds.x, x
+  equals bounds.y, y
+  equals bounds.xw, 100 / 2
+  equals bounds.yw, 200 / 2
+
+test "#bounds(width, height) returns correct x, y", ->
+  x = 20
+  y = 10
+  width = 15
+  height = 25
+
+  offsetX = 7.5
+  offsetY = 12
+
+  obj = GameObject
+    x: x
+    y: y
+    width: width
+    height: height
+
+  obj.include(Bounded)
+  bounds = obj.bounds(offsetX, offsetY)
+
+  equals bounds.x, obj.center().x + offsetX - width/2
+  equals bounds.y, obj.center().y + offsetY - height/2
+
+test "#center returns correct center point", ->
+  obj = GameObject
+    x: -5
+    y: 20
+    width: 10
+    height: 60
+
+  obj.include(Bounded)
+  center = obj.center()
+
+  ok center.equal(Point(-5, 20))
+
+module()


 Merge branch 'master.fixRenewDate' into 'master'

Master.Fix Renew Date

* Canceled Subscriptions can show the Wrong Date https://app.asana.com/0/5526870156482/10535657483710

--- client/Main/payment/subscriptionview.coffee
+++ client/Main/payment/subscriptionview.coffee
@@ -30,7 +30,7 @@
             when 'active'
               "Will renew on #{dateFormat renewAt, datePattern}"
             when 'canceled'
-              "Will be available till #{dateFormat expires, datePattern}"
+              "Will be available till #{dateFormat (expires or renewAt), datePattern}"
             when 'future'
               "Will become available on #{dateFormat startsAt, datePattern}"
         else ''


Tests: Fixed login team helper.

Tests: Fixed login team helper.

--- client/test/lib/helpers/teamshelpers.coffee
+++ client/test/lib/helpers/teamshelpers.coffee
@@ -121,11 +121,6 @@

   loginToTeam: (browser, user) ->

-    if HUBSPOT
-      browser
-        .waitForElementVisible  '.hero.block .container', 50000
-        .click                  '.header__nav .hs-menu-wrapper a[href="/Login"]'
-
     browser
       .pause                  2000 # wait for login page
       .waitForElementVisible  '.TeamsModal--login', 20000
@@ -142,16 +137,17 @@
     user = utils.getUser()
     url  = helpers.getUrl(yes)

-    hasNotTeamAccessPage = '.TeamsModal--select'
+    teamsLogin = '.TeamsModal--login'

     browser.url url
     browser.maximizeWindow()

-    browser.element 'css selector', hasNotTeamAccessPage, (result) =>
+    browser.pause  3000
+    browser.element 'css selector', teamsLogin, (result) =>
       if result.status is 0
+        @loginToTeam browser, user
+      else
         @createTeam browser
-      else
-        @loginToTeam browser, user

     return user


Removed extra logger

Removed extra logger

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


Fix error where account_id variable not found when it should have been looking for accountId

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/aha-app/bigquery-log-viewer.git/'


Added animator class

Added animator class

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

--- app/assets/javascripts/controllers/animator.js.coffee
+++ app/assets/javascripts/controllers/animator.js.coffee
@@ -0,0 +1,100 @@
+window.canvasSize = {
+  width: 760
+  height: 550
+}
+
+window.Animator = class
+  @getRenderer: ()->
+    @renderer ?= PIXI.autoDetectRenderer(canvasSize.width, canvasSize.height, null, true)
+
+  constructor: (@controller)->
+    @active = false
+
+    @.prepareTextures()
+
+    @stage = new PIXI.Stage(0x000000, true)
+    @renderer = Animator.getRenderer()
+
+    @last_tick = Date.now()
+    @animation_requested = false
+
+  zeroPad: (num, size)->
+    s = num + ""
+    s = "0" + s while s.length < size
+    s
+
+  animate: =>
+    if @active
+      requestAnimFrame(@.animate)
+
+      @animation_requested = true
+    else
+      @animation_requested = false
+
+    return if @paused_at
+
+    if Date.now() - @last_tick >= 15 # 60 frames per second
+      @last_tick = Date.now()
+
+      @renderer.render(@stage)
+
+  activate: ->
+    return if @active
+
+    @active = true
+    @paused_at = null
+
+    @.animate() unless @animation_requested
+
+    $(document).on('dialog.opened', @.onDialogOpened)
+    $(document).on('dialog.closed', @.onDialogClosed)
+
+    true
+
+  deactivate: ->
+    return unless @active
+
+    @active = false
+    @paused_at = null
+
+    $(document).off('dialog.opened', @.onDialogOpened)
+    $(document).off('dialog.closed', @.onDialogClosed)
+
+    true
+
+  onDialogOpened: =>
+    @paused_at = Date.now()
+
+  onDialogClosed: =>
+    @last_tick = Date.now() - 15 # Render on next frame
+    @paused_at = null
+
+  getTexture: (name)->
+    @textures ?= {}
+
+    unless @textures[name]
+      unless @base_texture
+        image = new Image()
+        image.src = '$assetPath(art.png)'
+
+        @base_texture = new PIXI.BaseTexture(image)
+
+      rect = artSprite[name].frame
+
+      @textures[name] = new PIXI.Texture(@base_texture,
+        x: rect.x,
+        y: rect.y,
+        width: rect.w,
+        height: rect.h
+      )
+
+    @textures[name]
+
+  detachRenderer: ->
+    if @renderer.view.parentNode
+      @renderer.view.parentNode.removeChild(@renderer.view)
+
+  attachRendererTo: (selector)->
+    @.detachRenderer()
+
+    $(selector).get(0).appendChild(@renderer.view)


This was stripping out ul tags from lists

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/biola/profile-publisher.git/'


Delete animation for notification sequence

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


Correct severity name for warnings

Correct severity name for warnings

--- lib/features/typechecking.coffee
+++ lib/features/typechecking.coffee
@@ -40,7 +40,7 @@
           message: note.msg
           className: switch note.severity.typehint
             when "NoteError" then "highlight-error"
-            when "NoteWarning" then "highlight-warning"
+            when "NoteWarn" then "highlight-warning"
             else ""

     for file, notes of @notesByFile


Upgrade indicator selector to diorama 0.2.0

--- client/src/views/indicator_selector_view.coffee
+++ client/src/views/indicator_selector_view.coffee
@@ -20,13 +20,12 @@
   render: =>
     $('body').addClass('stop-scrolling')

-    @closeSubViews()
     @$el.html(@template(
       thisView: @
       indicators: @indicators.models
       section: @section
     ))
-    @renderSubViews()
+    @attachSubViews()

     return @


add the test for the previous commit

add the test for the previous commit

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

--- test/unit/model/box.coffee
+++ test/unit/model/box.coffee
@@ -0,0 +1,53 @@
+mongoose = require 'mongoose'
+sinon = require 'sinon'
+should = require 'should'
+_ = require 'underscore'
+request = require 'request'
+
+{Box} = require 'model/box'
+
+describe 'Box (server)', ->
+  firstBox = null
+  before ->
+    sinon.stub request, 'post', (opts_, cb) -> cb null, statusCode: 200, "{}"
+    mongoose.connect process.env.CU_DB unless mongoose.connection.db
+
+  after ->
+    request.post.restore()
+
+  context 'when adding a new box', ->
+    before (done) ->
+      Box.create
+        shortName: 'testofferson'
+        accountLevel: 'grandfather'
+      , (err, box) =>
+        firstBox = box
+        done err
+
+    it 'assigns a random uid', ->
+      should.exist firstBox.uid
+      firstBox.uid.should.be.within 4000, 429496729
+
+  context 'when there is a uid collision', ->
+    before (done) ->
+      returnedOneFake = Boolean(false)
+
+      testUid = =>
+        if returnedOneFake is true
+          return 324234324234
+        else
+          returnedOneFake = true
+          return firstBox.uid
+
+      sinon.stub Box, 'generateUid', testUid
+
+      Box.create
+        shortName: 'testofferson'
+        accountLevel: 'grandfather'
+      , (err, box) =>
+        @secondBox = box
+        done()
+
+    it "doesn't break, and assigns another random value", ->
+      should.exist @secondBox.uid
+      @secondBox.uid.should.not.equal firstBox.uid


feat(comments) sync-apps component

feat(comments) sync-apps component

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


Extra guard for hidden availabilities

Extra guard for hidden availabilities

--- desktop/models/artwork.coffee
+++ desktop/models/artwork.coffee
@@ -299,6 +299,7 @@
     @get 'sale_message'

   availabilityMessage: ->
+    return if @get('availability_hidden')
     return if @get('partner')?.type is "Institutional Seller"
     return if @get('availability') is 'for sale' or @get('availability') is 'not for sale' or @get('availability') is 'permanent collection'
     if @get('partner')?.has_limited_fair_partnership


添加coffee-script

添加coffee-script

error: pathspec 'javascript/coffee-script使用示例.coffee' did not match any file(s) known to git

--- javascript/coffee-script使用示例.coffee
+++ javascript/coffee-script使用示例.coffee
@@ -0,0 +1,96 @@
+# 赋值
+number = 42
+opposite = true
+# 条件
+number = -42 if opposite
+item=6
+$("p").addClass "test" if item == 5
+funName = () -> alert "123"
+# 数组
+list = [1, 2, 3, 4, 5]
+# 对象
+people =
+  name: "sjx"
+  age:20
+# 存在性，假设
+ok=false
+alert "我知道了" if ok
+# 数组推导
+cubes = ( Math.random value for value in list)
+define = ->
+  console.log "123"
+people =
+  asd:"asd"
+# 三元表达式
+obj ={}
+obj.height = if obj.height<window.innerHeight then window.innerHeight else obj.height
+# 变参
+testArgument = (first,second,others...) ->
+  gold = first
+  silver = second
+  rest = others
+  console.log "金牌得主是#{gold}"
+  console.log "银牌得住是#{silver}"
+  console.log "没有得奖的是#{rest}"
+  undefined
+member = ["p1"
+          "p2"
+          "p3"
+          "p4"]
+testArgument member...
+# 函数名 = （参数） -> 函数体
+change = (sth) ->
+  console.log sth
+arr = [
+  1
+  2
+  3
+  4
+  5
+]
+# 遍历一个数组，对数组里面的每一个值进行处理，用when控制条件
+for sth in arr when sth is 4
+  change sth
+demo2 = name:'sjx',age:'20',location:'xian'
+# 根据对象生成一个数组
+item = for own key,value of demo2
+  key+':'+value
+# 遍历对象时，对对象进行处理
+for index,value of demo2
+  do (index,value)->
+    console.log index+':'+value
+# 对数组的裁剪
+arr1 = [1,2,3,4,5]
+arr2 = arr1[0..2]
+# 对数组的拼接
+arr1[arr1.length..arr1.length+2] =['ceshi'
+'ceshi2'
+'ceshi3']
+console.log arr1
+# 在没有显式声明return时，不要太在意return放在那里
+testFun1 = ->
+  Math.random 1
+  console.log "我这里显式声明了return"
+  return true;
+testFun2 = ->
+  Math.random 2
+# 存在性问题？  mind? 表示mind存在吗
+# demo2存在吗？存在的话就是demo2，否则就是[]
+demo3 = demo2 ? []
+# instance存在吗？
+init() if instance?
+# 类
+class Animal
+  constructor:(@name) -> 'sjx'
+  move:(meters) ->
+    console.log (@name) + '位移了' + meters + '米\n'
+  sayName:->
+    console.log '我的名字是'+@name+'\n'
+class Pig extends Animal
+  move: ->
+    console.log '我是猪八戒这个类，我调用了自己重写的move方法\n'
+    super 5
+littlePig = new Pig '猪八戒'
+littlePig.sayName()
+littlePig.move()
+console.log Animal.prototype.move


Fix stream consumption.

Fix stream consumption.

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


增加 api-server  文件，支持远程api调用

增加 api-server  文件，支持远程api调用

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

--- src/apiserver.coffee
+++ src/apiserver.coffee
@@ -0,0 +1,115 @@
+###
+  QQBot的API Server，支持通过http方式调用Bot功能
+  注意：响应 http get/post 参数可设置在url query 或 http body ，两者选其一。 token为必备字段
+
+  @发送消息                /send   type    = [buddy,group]
+                                  to  = 目标名字
+                                  msg  = 消息(文本)
+
+  @发送STDIN(图片验证码)      /stdin {value = 需要传入的stdin值}
+
+  返回值 JSON
+  {
+    err:0
+    msg:'error msg'
+  }
+###
+
+
+URL   = require 'url'
+http  = require('http')
+jsons = JSON.stringify
+log   = new (require 'log')('debug')
+querystring = require('querystring')
+
+#global variables
+server = null
+config_token = null
+config_port  = null
+cb_sendmessage = null
+
+processPost = (request, response, callback) ->
+    queryData = ""
+    return null if typeof callback isnt 'function'
+    request.on 'data', (data)->
+      queryData += data
+      if queryData.length > 1e6
+        queryData = ""
+        response.writeHead(413, {'Content-Type': 'text/plain'}).end();
+        request.connection.destroy();
+
+    request.on 'end', ->
+      data = querystring.parse(queryData)
+      callback(post)
+
+    request.on 'error', (error)->
+      callback(null, error)
+
+on_stdin = (req,res,params)->
+  value = params.value.trim()
+  log.info 'stdin value',value
+  process.emit 'data', value
+  res.endjson()
+
+on_sendmsg = (req,res,params)->
+  log.info "will send #{params.type} #{params.to} : #{params.msg}"
+  if params.type == 'buddy'
+    msg =  "unimplement type #{params.type}"
+    log.warning msg
+    res.endjson {err:100,msg:msg}
+  else if params.type == 'group'
+      cb_sendmessage params.to, params.msg, res
+  else
+    msg =  "unimplement type #{params.type}"
+    log.warning msg
+    res.endjson {err:100,msg:msg}
+
+handle_request = (req,res,path,params)->
+  res.endjson = (dict={})->
+    ret_dict =
+      err: 0
+      msg: 'ok'
+    for key,value of dict
+      ret_dict[key] = value
+
+    res.writeHead 200
+    res.end jsons ret_dict
+
+  if config_token and params.token isnt config_token
+    res.endjson {err:503,msg:'token failed'}
+    return
+
+  switch path
+    when '/stdin' then on_stdin(req,res,params)
+    when '/send'  then on_sendmsg(req,res,params)
+
+
+create_server = (port)->
+  server = http.createServer (req, res) ->
+    log.debug '[api]' , req.url
+    url = URL.parse req.url
+    path = url.pathname
+    if req.method == 'POST'
+      processPost req, res, (body)->
+        handle_request(req, res, path, body)
+    else if req.method == 'GET'
+      query = querystring.parse url.query
+      handle_request(req, res, path, query)
+
+  server.listen port
+  log.info 'api server started at port',port
+
+
+exports.run = (port,token)->
+  config_port  = port or 3000
+  config_token = token
+  create_server config_port
+
+exports.stop = ->
+  server.close() if server
+  server = null
+
+# @callback group_name, message, res
+# need call res.endjson {} to finish request
+exports.on_groupmessage = (callback)->
+  cb_sendmessage = callback


feat(shell): Implement initial application shell

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

--- src/app/index.coffee
+++ src/app/index.coffee
@@ -0,0 +1,23 @@
+app = require 'app'
+path = require 'path'
+BrowserWindow = require 'browser-window'
+Menu = require 'menu'
+menuTemplate = require './components/menuTemplate'
+
+conf =
+  paths:
+    ui:
+      path.resolve __dirname, '..', 'ui'
+
+require('crash-reporter').start()
+
+do (mainWindow = null) ->
+  app.on 'window-all-closed', ->
+    app.quit() unless process.platform is 'darwin'
+
+  app.on 'ready', ->
+    mainWindow = new BrowserWindow width: 800, height: 600
+    mainWindow.loadUrl "file://#{conf.paths.ui}/index.html"
+    mainWindow.on 'closed', -> mainWindow = null
+    menu = Menu.buildFromTemplate menuTemplate(app)
+    Menu.setApplicationMenu menu


bug fixes

bug fixes

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


openDoor FE slave fix

openDoor FE slave 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/drsdrs/dooropener.git/'


increase limit

increase limit


Add main CLI file

Add main CLI file

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

--- src/cli/index.coffee
+++ src/cli/index.coffee
@@ -0,0 +1,3 @@
+cli = module.exports = {}
+
+cli.argv = require './argv'


More return statements

More return statements

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


clio-41275 Followup Test

clio-41275 Followup Test

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


Removed semicolons.

Removed semicolons.

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


Tests: IDE: File: Added saveFile test.

Tests: IDE: File: Added saveFile test.

--- client/test/lib/ide/file.coffee
+++ client/test/lib/ide/file.coffee
@@ -63,7 +63,7 @@
       .end()

-  createFolderMachineHeader: (browser) ->
+  createFolderFromMachineHeader: (browser) ->

     user = helpers.beginTest(browser)
     helpers.waitForVMRunning(browser)
@@ -159,3 +159,14 @@
     helpers.deleteFile(browser, newFile)

     browser.end()
+
+
+  saveFile: (browser) ->
+
+    user = helpers.beginTest(browser)
+    helpers.waitForVMRunning(browser)
+
+    fileName = helpers.createFile(browser, user)
+    ideHelpers.openFile(browser, user, fileName)
+
+    browser.end()


refactor voteButton into own component

refactor voteButton into own component

error: pathspec 'assets/coffee/components/VoteButton.cjsx' did not match any file(s) known to git

--- assets/coffee/components/VoteButton.cjsx
+++ assets/coffee/components/VoteButton.cjsx
@@ -0,0 +1,28 @@
+React = require 'react'
+request = require 'superagent'
+
+csrfToken = document.getElementsByTagName('meta')['csrf-token'].getAttribute('content')
+apiUrl = '/api/bands'
+
+VoteButton = React.createClass
+  displayName: 'VoteButton'
+
+  voteForBand: (e) ->
+    e.preventDefault()
+
+    # post new vote to the server
+    request
+      .post("#{apiUrl}/#{@props.bandId}/vote")
+      .set('X-CSRF-Token', csrfToken)
+      .set('Accept', 'application/json')
+      .end (error, res) =>
+        # TODO handle errors better
+        return console.error error if error?
+        return console.log JSON.parse(res.text)
+
+  render: ->
+    <div className="band-vote-for float-right">
+      <button onClick={@voteForBand}>Vote!</button>
+    </div>
+
+module.exports = VoteButton


Add coffeescript

Add coffeescript

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

--- coffeescript/douchetester.coffee
+++ coffeescript/douchetester.coffee
@@ -0,0 +1,8 @@
+a = "asshole"
+u = "you"
+isdouche = false
+
+
+if isdouche then console.log(u + " " + a)
+else
+  console.log(u + " are not an " + a)


:shit:

:shit:

--- src/packages/snippets/spec/snippets-spec.coffee
+++ src/packages/snippets/spec/snippets-spec.coffee
@@ -285,7 +285,8 @@
       waitsFor "all snippets to load", 5000, -> snippets.loaded

       runs ->
-        expect(console.warn).toHaveBeenCalledWith("Error reading snippets file '/Users/corey/github/atom/spec/fixtures/packages/package-with-snippets/snippets/junk-file'")
+        expect(console.warn).toHaveBeenCalled()
+        expect(console.warn.argsForCall[0]).toMatch /Error reading snippets file '.*?\/spec\/fixtures\/packages\/package-with-snippets\/snippets\/junk-file'/
         expect(Worker.prototype.terminate).toHaveBeenCalled()
         expect(Worker.prototype.terminate.calls.length).toBe 1


init profile

init profile

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


Account: enforcelogin modal width fix to not to have ugly scrollbars

--- client/Account/AppController.coffee
+++ client/Account/AppController.coffee
@@ -237,7 +237,7 @@

       Click play to see what Koding is all about in 2 minutes!
       """
-      width           : 650
+      width           : 660
       overlay         : yes
       buttons         :
         "Login"       :


updating height of popup

updating height of popup

--- client/lib/templates/buttons.coffee
+++ client/lib/templates/buttons.coffee
@@ -1,4 +1,4 @@
-popupFlags = 'width=440,height=301'
+popupFlags = 'width=440,height=400'
 isAddingAccount = new ReactiveVar()

 Template.connectMailboxButton.rendered = ->
@@ -20,11 +20,11 @@

     isAddingAccount.set true
     Meteor.call 'addMailboxSimple', account, (e, connectURL)->
-      console.log e, connectURL
       isAddingAccount.set false
       if e?
         console.error e
         return
+
       window.open connectURL, "Office", popupFlags

 Template.connectMailboxButton.helpers


bug fix

bug fix


Fix app.reset when db hasn't been initialized

--- assets/javascripts/app/app.coffee
+++ assets/javascripts/app/app.coffee
@@ -126,7 +126,7 @@
   reset: ->
     @store.clear()
     @settings.reset()
-    @db.reset()
+    @db?.reset()
     @appCache?.update()
     window.location = '/'
     return


Add missing word boundary for detecting std types

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/pyfisch/atom-language-rust.git/'


Refactor to dependencies

Refactor to dependencies

--- lib/Task/ActivityTask/Sample.coffee
+++ lib/Task/ActivityTask/Sample.coffee
@@ -2,10 +2,13 @@
 Match = require "mtr-match"

 class Sample extends ActivityTask
-  constructor: (input, options, dependencies) ->
-    Match.check dependencies, Match.ObjectIncluding
-      mongodb: Match.Any # strange kind of woman
-      bookshelf: Object
+  constructor: (input, options, streams, dependencies) ->
     super
+    @knex = dependencies.knex
+    @bookshelf = dependencies.bookshelf
+    @mongodb = dependencies.mongodb
+    Match.check @knex, Function
+    Match.check @bookshelf, Object
+    Match.check @mongodb, Match.Any # strange kind of woman

 module.exports = Sample


Fix bitbucket issues url

Fix bitbucket issues url

--- plugins/bitbucket-issues/index.coffee
+++ plugins/bitbucket-issues/index.coffee
@@ -26,6 +26,6 @@

         callback null,
           id: res.body.local_id
-          url: url.resolve(BASE_URL, "#{res.body.resource_uri}")
+          url: url.resolve(BASE_URL, "#{config.repo}/issue/#{res.body.local_id}")

-module.exports = BitbucketIssue+module.exports = BitbucketIssue


updates that comment

updates that comment

--- components/teleport/index.coffee
+++ components/teleport/index.coffee
@@ -1,7 +1,7 @@
 sd = require('sharify').data

 # simulates a click for eigen views that don't
-# it when you set window.location
+# like it when you set window.location

 module.exports = (location) ->
   a = document.createElement 'a'


Add scroll top of page on merge screen

Add scroll top of page on merge screen

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


ace: remove CTRL+L key combo overriding browser default [#80434992]

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


implement BC_FLOW_BI, BC_FLOW_TRI

implement BC_FLOW_BI, BC_FLOW_TRI

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


Fix list view sorting

Fix list view sorting

--- lib/projects-list-view.coffee
+++ lib/projects-list-view.coffee
@@ -91,4 +91,7 @@

   sortBy: (arr, key) ->
     arr.sort (a, b) ->
-      (a[key] || '\uffff').toUpperCase() > (b[key] || '\uffff').toUpperCase()+      a = (a[key] || '\uffff').toUpperCase()
+      b = (b[key] || '\uffff').toUpperCase()
+
+      return if a > b then 1 else -1


Added share log details

Added share log details


Fix form submission

Fix form submission

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


Add command-line interface tests

Add command-line interface tests

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

--- test/cli-test.coffee
+++ test/cli-test.coffee
@@ -0,0 +1,41 @@
+chai = require 'chai'
+chai.should()
+cp = require 'child_process'
+pack = require '../package.json'
+cmd_version = 'node bin/autometa -v'
+cmd_help = 'node bin/autometa -h'
+cmd_stdout = 'node bin/autometa -o test/test.xlsx'
+cmd_notexistsfile = 'node bin/autometa not-exists-file'
+
+# Fix the problem that cannot capture
+# a child process's stdout and stderr in Windows
+# https://gist.github.com/cowboy/3427148
+exit = (exitCode) ->
+  if (process.stdout._pendingWriteReqs || process.stderr._pendingWriteReqs)
+    process.nextTick =>
+      exit(exitCode)
+  else
+    process.exit(exitCode)
+
+describe 'autometa command-line interface test', ->
+
+  it 'return version if -v option specified', (done) =>
+    cp.exec cmd_version, (error, stdout, stderr) =>
+      stdout.toString().should.string(pack['version'])
+      done()
+
+  it 'return help message if -h option specified', (done) =>
+    cp.exec cmd_help, (error, stdout, stderr) =>
+      stdout.toString().should.string('help')
+      done()
+
+  it 'return output to stdout if -o option specified', (done) =>
+    cp.exec cmd_stdout, (error, stdout, stderr) =>
+      stdout.toString().should.string('test.xml')
+      done()
+
+  it 'return error messsage if not exists file specified', (done) =>
+    cp.exec cmd_notexistsfile, (error, stdout, stderr) =>
+      stdout.toString().should.equal('Error. Check input file.\n')
+      done()
+


bugfix for statcache

bugfix for statcache

--- shared/idle/IdlePlayerController.coffee
+++ shared/idle/IdlePlayerController.coffee
@@ -41,6 +41,8 @@
         items.unshift test

         lastCalc = player._statCache
+
+        return items if not lastCalc
         lastCalc.name = 'Last Cached Calculated Stats'
         lastCalc.type = 'CACHED'
         lastCalc.bgColor = 'bg-maroon'


improved group-querying for qa-reports plugin

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


Use ready instead of a customReady state, extend from KDObject


Added events (liszt:hiding_dropdown, liszt:showing_dropdown) to dropdown hiding/showing to support custom event scenarios and inextricable z-index problems usage: mySelect.chosen() mySelect.bind('liszt:showing_dropdown', function() { someOtherObject.hide(); }); mySelect.bind('liszt:hiding_dropdown', function() { someOtherObject.show(); });

--- coffee/chosen.jquery.coffee
+++ coffee/chosen.jquery.coffee
@@ -239,6 +239,7 @@
       return false

     dd_top = if @is_multiple then @container.height() else (@container.height() - 1)
+    @form_field_jq.trigger("liszt:showing_dropdown", {chosen: this})
     @dropdown.css {"top":  dd_top + "px", "left":0}
     @results_showing = true

@@ -250,6 +251,7 @@
   results_hide: ->
     @selected_item.removeClass "chzn-single-with-drop" unless @is_multiple
     this.result_clear_highlight()
+    @form_field_jq.trigger("liszt:hiding_dropdown", {chosen: this})
     @dropdown.css {"left":"-9000px"}
     @results_showing = false


Added Thang names

Added Thang names

--- app/lib/world/names.coffee
+++ app/lib/world/names.coffee
@@ -49,6 +49,8 @@
     "Stormy"
     "Halle"
     "Sage"
+    "Ryan"
+    "Bond"
   ]
   "Soldier F": [
     "Sarah"
@@ -64,6 +66,7 @@
     "Lukaz"
     "Gorgin"
     "Coco"
+    "Buffy"
   ]
   "Peasant": [
     "Yorik"
@@ -88,10 +91,12 @@
     "Gawain"
     "Durfkor"
     "Paps"
+    "Hodor"
   ]
   "Peasant F": [
     "Hilda"
     "Icey"
+    "Matilda"
   ]
   "Archer F": [
     "Phoebe"
@@ -123,6 +128,7 @@
     "Luna"
     "Alleria"
     "Vereesa"
+    "Beatrice"
   ]
   "Archer M": [
     "Brian"
@@ -143,6 +149,7 @@
     "Vican"
     "Mars"
     "Dev"
+    "Oliver"
   ]
   "Ogre Munchkin M": [
     "Brack"
@@ -191,6 +198,7 @@
     "Tarlok"
     "Gurulax"
     "Mokrul"
+    "Polifemo"
   ]
   "Ogre F": [
     "Nareng"
@@ -286,6 +294,7 @@
   ]
   "Potion Master": [
     "Snake"
+    "Curie"
   ]
   "Librarian": [
     "Hushbaum"


Update names.coffee

Update names.coffee

-added new names for #53

--- app/lib/world/names.coffee
+++ app/lib/world/names.coffee
@@ -100,6 +100,7 @@
     'Miles'
     'Mischa'
     'Nicholas'
+    'Noah'
     'Orion'
     'Patrick'
     'Paul'
@@ -263,6 +264,7 @@
     'Susan'
     'Tammy'
     'Teresa'
+    'Tess'
     'Theresa'
     'Tina'
     'Trinity'
@@ -286,6 +288,7 @@
     'Merek'
     'Paps'
     'Piers'
+    'Shimron'
     'Thad'
     'Tybalt'
     'Victor'
@@ -426,6 +429,7 @@
   'Ogre M': [
     'Axe Ox'
     'Dronck'
+    'Gorlog'
     'Grumus'
     'Gug'
     'Gurulax'


Fetch one install shot, then artworks

Fetch one install shot, then artworks

--- collections/partner_shows.coffee
+++ collections/partner_shows.coffee
@@ -52,7 +52,7 @@
   getShowsRelatedImages: ->
     Q.allSettled(
       @map (show) ->
-        show.related().installShots.fetch data: size: 5
+        show.related().installShots.fetch data: size: 1
         show.related().artworks.fetch data: size: 5
     ).then =>
       @trigger 'shows:fetchedRelatedImages'


Removed duplicate Anya

Removed duplicate Anya

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


Show message when there is no camera settings, changed.


Remove verbose logging statements

Remove verbose logging statements

--- lib/Strategy/APIStrategy/Read/LimitOffset.coffee
+++ lib/Strategy/APIStrategy/Read/LimitOffset.coffee
@@ -35,20 +35,16 @@

   getTotal: ->
     params = @getTotalParams()
-    @verbose "LimitOffset:getTotalRequest", @details({params: params})
     @getTotalRequest(params).bind(@)
     .spread (response, body) ->
-      @verbose "LimitOffset:getTotalResponse", @details({params: params, response: response.toJSON(), body: body})
       total = @extractTotalFromResponse(response, body)
       @emit("total", total)
       .thenReturn(total)

   readPage: (limit, offset) ->
     params = @getPageParams(limit, offset)
-    @verbose "LimitOffset:readPageRequest", @details({params: params})
     @getPageRequest(params).bind(@)
     .spread (response, body, legs) ->
-      @verbose "LimitOffset:readPageResponse", @details({params: params, response: response.toJSON(), body: body})
       Promise.all(@emit("object", object) for object in body)
       .thenReturn([response, body])


Allow unique prefix.

Allow unique prefix.

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/TeffenEllis/local-preferences.git/'


Verify icon text in status label specs

Verify icon text in status label specs

--- spec/app/status-bar-spec.coffee
+++ spec/app/status-bar-spec.coffee
@@ -137,12 +137,12 @@
     it "displays the modified icon for a changed file", ->
       fs.write(path, "i've changed for the worse")
       rootView.open(path)
-      expect(statusBar.gitStatusIcon).toBeVisible()
+      expect(statusBar.gitStatusIcon).toHaveText('\uf26d')

     it "doesn't display the modified icon for an unchanged file", ->
       rootView.open(path)
-      expect(statusBar.gitStatusIcon).toBeHidden()
+      expect(statusBar.gitStatusIcon).toHaveText('')

     it "displays the new icon for a new file", ->
       rootView.open(newPath)
-      expect(statusBar.gitStatusIcon).toBeVisible()
+      expect(statusBar.gitStatusIcon).toHaveText('\uf26b')


linux: Suppress test for "enable-larger-than-screen".

It is failing on some DEs.

--- spec/api-browser-window-spec.coffee
+++ spec/api-browser-window-spec.coffee
@@ -102,6 +102,8 @@
       assert.equal size[1], 400

   describe '"enable-larger-than-screen" option', ->
+    return if process.platform is 'linux'
+
     beforeEach ->
       w.destroy()
       w = new BrowserWindow(show: true, width: 400, height: 400, 'enable-larger-than-screen': true)


working labelset

working labelset

error: pathspec 'bokehjs/src/coffee/models/annotations/label_set.coffee' did not match any file(s) known to git

--- bokehjs/src/coffee/models/annotations/label_set.coffee
+++ bokehjs/src/coffee/models/annotations/label_set.coffee
@@ -0,0 +1,222 @@
+_ = require "underscore"
+$ = require "jquery"
+
+Annotation = require "./annotation"
+ColumnDataSource = require "../sources/column_data_source"
+Renderer = require "../renderers/renderer"
+p = require "../../core/properties"
+
+class LabelSetView extends Renderer.View
+  initialize: (options) ->
+    super(options)
+    # @_initialize_properties is called by super class
+    @_initialize_properties()
+
+  bind_bokeh_events: () ->
+    if @mget('render_mode') == 'css'
+      # dispatch CSS update immediately
+      @listenTo(@model, 'change', () ->
+        @set_data(@mget('source'))
+        @render())
+      @listenTo(@mget('source'), 'change', () ->
+        @set_data(@mget('source'))
+        @render())
+    else
+      @listenTo(@model, 'change', () ->
+        @set_data(@mget('source'))
+        @plot_view.request_render())
+      @listenTo(@mget('source'), 'change', () ->
+        @set_data(@mget('source'))
+        @plot_view.request_render())
+
+  _initialize_properties: () ->
+    @canvas = @plot_model.get('canvas')
+    @xmapper = @plot_view.frame.get('x_mappers')[@mget("x_range_name")]
+    @ymapper = @plot_view.frame.get('y_mappers')[@mget("y_range_name")]
+
+    @set_data(@mget('source'))
+    @set_visuals(@mget('source'))
+
+    @$el.addClass('bk-title-parent')
+
+    if @mget('render_mode') == 'css'
+      for i in [0...@_text.length]
+        @title_div = $("<div>").addClass('bk-title-child').hide()
+        @title_div.appendTo(@$el)
+      @$el.appendTo(@plot_view.$el.find('div.bk-canvas-overlays'))
+
+  _calculate_text_dimensions: (ctx, i, text) ->
+    @visuals.text.set_vectorize(ctx, i)
+    width = [ctx.measureText(text).width]
+    height = [ctx.measureText(text).ascent / 1.175]
+    return [width, height]
+
+  _calculate_rect_offset: (ctx, i, width, height) ->
+    @visuals.text.set_vectorize(ctx, i)
+    switch ctx.textAlign
+      when 'left' then x_shift = 0
+      when 'center' then x_shift = -width / 2
+      when 'right' then x_shift = -width
+
+    # guestimated from https://www.w3.org/TR/2dcontext/#dom-context-2d-textbaseline
+    switch ctx.textBaseline
+      when 'top' then y_shift = 0.0
+      when 'middle' then y_shift = -0.5 * height
+      when 'bottom' then y_shift = -1.0 * height
+      when 'alphabetic' then y_shift = -0.8 * height
+      when 'hanging' then y_shift = -0.17 * height
+      when 'ideographic' then y_shift = -0.83 * height
+
+    return [x_shift, y_shift]
+
+  _map_data: () ->
+    if @mget('x_units') == "data"
+      vx = @xmapper.v_map_to_target(@_x)
+    else
+      vx = @_x.slice(0) # make deep copy to not mutate
+    sx = @canvas.v_vx_to_sx(vx)
+
+    if @mget('y_units') == "data"
+      vy = @ymapper.v_map_to_target(@_y)
+    else
+      vy = @_y.slice(0) # make deep copy to not mutate
+
+    sy = @canvas.v_vy_to_sy(vy)
+
+    return [sx, sy]
+
+  render: () ->
+    ctx = @plot_view.canvas_view.ctx
+
+    [sx, sy] = @_map_data()
+
+    if @mget('render_mode') == 'canvas'
+      for i in [0...@_text.length]
+        @_canvas_text(ctx, i, @_text[i], sx[i] + @_x_offset[i], sy[i] - @_y_offset[i], @_angle[i])
+    else
+      for i in [0...@_text.length]
+        @_css_text(ctx, i, @_text[i], sx[i] + @_x_offset[i], sy[i] - @_y_offset[i], @_angle[i])
+
+  _get_size: () ->
+    ctx = @plot_view.canvas_view.ctx
+    @visuals.text.set_value(ctx)
+
+    side = @model.panel.side
+    if side == "above" or side == "below"
+      height = ctx.measureText(@_text[0]).ascent
+      return height
+    if side == 'left' or side == 'right'
+      width = ctx.measureText(@_text[0]).width
+      return width
+
+  _canvas_text: (ctx, i, text, sx, sy, angle) ->
+    [text_width, text_height] = @_calculate_text_dimensions(ctx, i, text)
+    [ x_rect_offset, y_rect_offset ] = @_calculate_rect_offset(ctx, i, text_width, text_height)
+
+    ctx.save()
+
+    ctx.beginPath()
+    ctx.translate(sx, sy)
+    ctx.rotate(angle)
+
+    ctx.rect(x_rect_offset, y_rect_offset, text_width, text_height)
+
+    if @visuals.background_fill.doit
+      @visuals.background_fill.set_vectorize(ctx, i)
+      ctx.fill()
+
+    if @visuals.border_line.doit
+      @visuals.border_line.set_vectorize(ctx, i)
+      ctx.stroke()
+
+    if @visuals.text.doit
+      @visuals.text.set_vectorize(ctx, i)
+      ctx.fillText(text, 0, 0)
+
+    ctx.restore()
+
+  _css_text: (ctx, i, text, sx, sy, angle) ->
+    [text_width, text_height] = @_calculate_text_dimensions(ctx, i, text)
+    [ x_rect_offset, y_rect_offset ] = @_calculate_rect_offset(ctx, i, text_width, text_height)
+
+    @visuals.text.set_vectorize(ctx, i)
+
+    # attempt to support vector-style ("8 4 8") line dashing for css mode
+    ld = @visuals.border_line.line_dash.value()
+    if _.isArray(ld)
+      if ld.length < 2
+        line_dash = "solid"
+      else
+        line_dash = "dashed"
+    if _.isString(ld)
+        line_dash = ld
+
+    @visuals.border_line.set_vectorize(ctx, i)
+    @visuals.background_fill.set_vectorize(ctx, i)
+
+    div_style = {
+      'position': 'absolute'
+      'left': "#{sx + x_rect_offset}px"
+      'top': "#{sy + y_rect_offset}px"
+      'color': "#{@visuals.text.text_color.value()}"
+      'opacity': "#{@visuals.text.text_alpha.value()}"
+      'font-size': "#{@visuals.text.text_font_size.value()}"
+      'font-family': "#{@visuals.text.text_font.value()}"
+      'background-color': "#{@visuals.background_fill.color_value()}"
+      'transform': "rotate(#{angle}rad)"
+      'line-height': "normal" # needed to prevent ipynb css override
+      }
+
+    switch @visuals.text.text_font_style.value()
+      when "bold" then _.extend(div_style, {'font-weight': "bold"})
+      when "italic" then _.extend(div_style, {'font_style': "italic"})
+
+    if @visuals.background_fill.doit
+      _.extend(div_style, {
+        'background-color': "#{@visuals.background_fill.color_value()}"
+      })
+
+    if @visuals.border_line.doit
+      _.extend(div_style, {
+        'border-style': "#{line_dash}"
+        'border-width': "#{@visuals.border_line.line_width.value()}"
+        'border-color': "#{@visuals.border_line.color_value()}"
+      })
+
+    @$el.children().eq(i)
+                   .html(text)
+                   .css(div_style)
+                   .show()
+
+class LabelSet extends Annotation.Model
+  default_view: LabelSetView
+
+  type: 'Label'
+
+  @mixins ['text', 'line:border_', 'fill:background_']
+
+  @coords [['x', 'y']]
+
+  @define {
+      # x:            [ p.NumberSpec,                     ]
+      x_units:      [ p.SpatialUnits, 'data'            ]
+      # y:            [ p.NumberSpec,                     ]
+      y_units:      [ p.SpatialUnits, 'data'            ]
+      text:         [ p.StringSpec,   { field: "text" } ]
+      angle:        [ p.AngleSpec,    0                 ]
+      x_offset:     [ p.NumberSpec,   { value: 0 }      ]
+      y_offset:     [ p.NumberSpec,   { value: 0 }      ]
+      source:       [ p.Instance,     () -> new ColumnDataSource.Model()  ]
+      x_range_name: [ p.String,      'default'          ]
+      y_range_name: [ p.String,      'default'          ]
+      render_mode:  [ p.RenderMode,  'canvas'           ]
+    }
+
+  @override {
+    background_fill_color: null
+    border_line_color: null
+  }
+
+module.exports =
+  Model: LabelSet
+  View: LabelSetView


add linear attribution for ads

add linear attribution for ads

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


Document atom.* globals as properties

Document atom.* globals as properties

--- src/atom.coffee
+++ src/atom.coffee
@@ -17,21 +17,6 @@
 # Public: Atom global for dealing with packages, themes, menus, and the window.
 #
 # An instance of this class is always available as the `atom` global.
-#
-# ## Properties
-#
-#  * `atom.clipboard`     - A {Clipboard} instance
-#  * `atom.config`        - A {Config} instance
-#  * `atom.contextMenu`   - A {ContextMenuManager} instance
-#  * `atom.deserializers` - A {DeserializerManager} instance
-#  * `atom.keymaps`       - A {KeymapManager} instance
-#  * `atom.menu`          - A {MenuManager} instance
-#  * `atom.packages`      - A {PackageManager} instance
-#  * `atom.project`       - A {Project} instance
-#  * `atom.syntax`        - A {Syntax} instance
-#  * `atom.themes`        - A {ThemeManager} instance
-#  * `atom.workspace`     - A {Workspace} instance
-#  * `atom.workspaceView` - A {WorkspaceView} instance
 module.exports =
 class Atom extends Model
   @version: 1  # Increment this when the serialization format changes
@@ -111,6 +96,42 @@
     remote.getCurrentWindow()

   workspaceViewParentSelector: 'body'
+
+  # Public: A {Clipboard} instance
+  clipboard: null
+
+  # Public: A {Config} instance
+  config: null
+
+  # Public: A {ContextMenuManager} instance
+  contextMenu: null
+
+  # Public: A {DeserializerManager} instance
+  deserializers: null
+
+  # Public: A {KeymapManager} instance
+  keymaps: null
+
+  # Public: A {MenuManager} instance
+  menu: null
+
+  # Public: A {PackageManager} instance
+  packages: null
+
+  # Public: A {Project} instance
+  project: null
+
+  # Public: A {Syntax} instance
+  syntax: null
+
+  # Public: A {ThemeManager} instance
+  themes: null
+
+  # Public: A {Workspace} instance
+  workspace: null
+
+  # Public: A {WorkspaceView} instance
+  workspaceView: null

   # Call .loadOrCreate instead
   constructor: (@state) ->


:memo: doc parameters in atom.coffee

:memo: doc parameters in atom.coffee

--- src/atom.coffee
+++ src/atom.coffee
@@ -305,31 +305,32 @@
   # Calling this method without an options parameter will open a prompt to pick
   # a file/folder to open in the new window.
   #
-  # * options
-  #   * pathsToOpen: A string array of paths to open
+  # options - An {Object} with the following keys:
+  #   :pathsToOpen -  An {Array} of {String} paths to open.
   open: (options) ->
     ipc.sendChannel('open', options)

   # Public: Open a confirm dialog.
   #
-  # ## Example:
-  # ```coffeescript
+  # ## Example
+  #
+  # ```coffee
   #   atom.confirm
-  #      message: 'How you feeling?'
-  #      detailedMessage: 'Be honest.'
-  #      buttons:
-  #        Good: -> window.alert('good to hear')
-  #        Bad: ->  window.alert('bummer')
+  #     message: 'How you feeling?'
+  #     detailedMessage: 'Be honest.'
+  #     buttons:
+  #       Good: -> window.alert('good to hear')
+  #       Bad:  -> window.alert('bummer')
   # ```
   #
-  # * options:
-  #    + message: The string message to display.
-  #    + detailedMessage: The string detailed message to display.
-  #    + buttons: Either an array of strings or an object where the values
-  #      are callbacks to invoke when clicked.
-  #
-  # Returns the chosen index if buttons was an array or the return of the
-  # callback if buttons was an object.
+  # options - An {Object} with the following keys:
+  #   :message - The {String} message to display.
+  #   :detailedMessage - The {String} detailed message to display.
+  #   :buttons - Either an array of strings or an object where keys are
+  #              button names and the values are callbacks to invoke when
+  #              clicked.
+  #
+  # Returns the chosen button index {Number} if the buttons option was an array.
   confirm: ({message, detailedMessage, buttons}={}) ->
     buttons ?= {}
     if _.isArray(buttons)
@@ -385,10 +386,16 @@
     ipc.sendChannel('call-window-method', 'hide')

   # Public: Set the size of current window.
+  #
+  # width  - The {Number} of pixels.
+  # height - The {Number} of pixels.
   setSize: (width, height) ->
     ipc.sendChannel('call-window-method', 'setSize', width, height)

   # Public: Set the position of current window.
+  #
+  # x - The {Number} of pixels.
+  # y - The {Number} of pixels.
   setPosition: (x, y) ->
     ipc.sendChannel('call-window-method', 'setPosition', x, y)

@@ -498,6 +505,9 @@
   #
   # The globals will be set on the `window` object and removed after the
   # require completes.
+  #
+  # id - The {String} module name or path.
+  # globals - An {Object} to set as globals during require (default: {})
   requireWithGlobals: (id, globals={}) ->
     existingGlobals = {}
     for key, value of globals


Construction and destruction section

Construction and destruction section

--- src/atom.coffee
+++ src/atom.coffee
@@ -137,6 +137,10 @@

   # Public: A {WorkspaceView} instance
   workspaceView: null
+
+  ###
+  Section: Construction and Destruction
+  ###

   # Call .loadOrCreate instead
   constructor: (@state) ->


Remove pasteboard shim

Remove pasteboard shim

--- src/atom.coffee
+++ src/atom.coffee
@@ -150,9 +150,6 @@
     @menu = new MenuManager({resourcePath})
     @clipboard = new Clipboard()

-    # TODO Remove once packages have been updated
-    @pasteboard = @clipboard
-
     @syntax = @deserializers.deserialize(@state.syntax) ? new Syntax()

     @subscribe @packages, 'activated', => @watchThemes()


view_partials story cakes added.

view_partials story cakes added.

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

--- cakes/view_partials.coffee
+++ cakes/view_partials.coffee
@@ -0,0 +1,42 @@
+Feature 'View Partials',
+
+	"As a developer",
+	"I want to use Mustache Partials",
+	"In order to not repeat myself.", ->
+
+		Scenario "Partials", ->
+
+			app = null
+
+			Given 'an Express server', ->
+				express = require 'express'
+				app = express.createServer()
+				app.set 'views', process.cwd()
+				app.listen 3000
+
+			And "it's registered to use Hulk-Hogan", ->
+				app.set 'view options', layout:false
+				app.register '.hulk', require '../'
+
+			fs = require 'fs'
+
+			And 'I have a partial template file', ->
+				file = 'salute.hulk'
+				template = fs.readFileSync file
+				template.toString().should.eql 'How are you, {{what}}?'
+
+
+			And 'I have a template file that includes that partial', ->
+				file = 'express_engine.hulk'
+				template = fs.readFileSync file
+				template.toString().should.eql 'Hello {{what}}! {{> salute}}'
+
+			When 'I render that template', ->
+				app.get '/', (req,res)->
+					res.render 'express_engine.hulk', {what : 'World'}
+
+			Then 'it should output the rendered template with partial', (done)->
+				agent = require 'superagent'
+				agent.get 'http://localhost:3000', (res)->
+					res.text.should.eql 'Hello World! How are you, World?'
+					done()


fix (Modules) Make sure module loading spinners will be removed at some point

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


Add the levels definition

Add the levels definition

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

--- lib/levels.coffee
+++ lib/levels.coffee
@@ -0,0 +1,13 @@
+# Log levels.
+class Levels
+  @fatal: {name: "Fatal", value:0}
+  @error: {name: "Error", value:1}
+  @warn : {name: "Warn", value:2}
+  @info : {name: "Info", value:3}
+  @debug: {name: "Debug", value:4}
+  @trace: {name: "Trace", value:5}
+
+if typeof module is 'undefined' and typeof window isnt 'undefined'
+  window.Levels  = Levels
+else
+  module.exports = Levels


Only show context menu separator when it makes sense.

--- src/context-menu-manager.coffee
+++ src/context-menu-manager.coffee
@@ -14,12 +14,12 @@
     @devModeDefinitions = {}
     @activeElement = null

-    @devModeDefinitions['#root-view'] = [{ type: 'separator' }]
-    @devModeDefinitions['#root-view'].push
+    @devModeDefinitions['#root-view'] = [
       label: 'Inspect Element'
       command: 'application:inspect'
       executeAtBuild: (e) ->
         @.commandOptions = x: e.pageX, y: e.pageY
+    ]

   # Public: Creates menu definitions from the object specified by the menu
   # cson API.
@@ -76,9 +76,12 @@
   # Private: Returns a menu template for both normal entries as well as
   # development mode entries.
   combinedMenuTemplateForElement: (element) ->
-    menuTemplate = @menuTemplateForMostSpecificElement(element)
-    menuTemplate = menuTemplate.concat(@menuTemplateForMostSpecificElement(element, devMode: true)) if @devMode
-    menuTemplate
+    normalItems = @menuTemplateForMostSpecificElement(element)
+    devItems = if @devMode then @menuTemplateForMostSpecificElement(element, devMode: true) else []
+
+    menuTemplate = normalItems
+    menuTemplate.push({ type: 'separator' }) if normalItems.length > 0 and devItems.length > 0
+    menuTemplate.concat(devItems)

   # Private: Executes `executeAtBuild` if defined for each menu item with
   # the provided event and then removes the `executeAtBuild` property from


add selector to choose aciton

add selector to choose aciton

--- coffee/jquery.atwho.coffee
+++ coffee/jquery.atwho.coffee
@@ -179,6 +179,11 @@
         li.replace new RegExp(">\\s*(\\w*)(" + query.replace("+","\\+") + ")(\\w*)\\s*<", 'ig'), (str,$1, $2, $3) ->
             '> '+$1+'<strong>' + $2 + '</strong>'+$3+' <'

+      # 选择某列表项的动作
+      #
+      # @param $li [jQuery Object] 选中的列表项目
+      selector: ($li) ->
+        @controller.replace_str($li.data("value") || "") if $li.length > 0

     # At.js 对数据操作(搜索, 匹配, 渲染) 的主控中心
@@ -423,7 +428,7 @@

       choose: ->
         $li = @$el.find ".cur"
-        @controller.replace_str($li.data("value") || "") if $li.length > 0
+        this.callbacks("selector").call(this, $li)
         this.hide()

       reposition: ->


Keep a history of notifications

Keep a history of notifications

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


Enable auto-indent for spec

Enable auto-indent for spec

--- spec/app/editor-spec.coffee
+++ spec/app/editor-spec.coffee
@@ -1327,6 +1327,7 @@

       describe "when newline is inserted", ->
         it "indents cursor based on the indentation of previous buffer line", ->
+          editor.autoIndent = true
           editor.setCursorBufferPosition([4, 29])
           editor.insertText("\n")
           expect(editor.buffer.lineForRow(5)).toEqual("      ")


:lipstick:

:lipstick:

--- spec/app/editor-spec.coffee
+++ spec/app/editor-spec.coffee
@@ -1210,22 +1210,18 @@
             editor.setCursorScreenPosition([2, 5])
             expect(editor.scrollView.scrollLeft()).toBe 0

-  describe "buffer manipulation", ->
-    beforeEach ->
+  describe "when text input events are triggered on the hidden input element", ->
+    it "inserts the typed character at the cursor position, both in the buffer and the pre element", ->
       editor.attachToDom()
-
-    describe "when text input events are triggered on the hidden input element", ->
-      describe "when there is no selection", ->
-        it "inserts the typed character at the cursor position, both in the buffer and the pre element", ->
-          editor.setCursorScreenPosition(row: 1, column: 6)
-
-          expect(buffer.lineForRow(1).charAt(6)).not.toBe 'q'
-
-          editor.hiddenInput.textInput 'q'
-
-          expect(buffer.lineForRow(1).charAt(6)).toBe 'q'
-          expect(editor.getCursorScreenPosition()).toEqual(row: 1, column: 7)
-          expect(editor.renderedLines.find('.line:eq(1)')).toHaveText buffer.lineForRow(1)
+      editor.setCursorScreenPosition(row: 1, column: 6)
+
+      expect(buffer.lineForRow(1).charAt(6)).not.toBe 'q'
+
+      editor.hiddenInput.textInput 'q'
+
+      expect(buffer.lineForRow(1).charAt(6)).toBe 'q'
+      expect(editor.getCursorScreenPosition()).toEqual(row: 1, column: 7)
+      expect(editor.renderedLines.find('.line:eq(1)')).toHaveText buffer.lineForRow(1)

   describe "when the editor is attached to the dom", ->
     it "calculates line height and char width and updates the pixel position of the cursor", ->


Update spec event coordinates for new default styles

--- spec/app/editor-spec.coffee
+++ spec/app/editor-spec.coffee
@@ -744,7 +744,7 @@
         editor.renderedLines.trigger mousedownEvent(editor: editor, point: [12, 0])

         # moving changes selection
-        $(document).trigger mousemoveEvent(editor: editor, pageX: 0, pageY: -10)
+        $(document).trigger mousemoveEvent(editor: editor, pageX: 0, pageY: -15)
         expect(editor.scrollTop()).toBe 4 * editor.lineHeight

         # if cursor stays off screen, we keep moving / scrolling up


Pulled merge request but using existing default colours (removed alternating)

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


Add the source

Add the source

error: pathspec 'src/coffeescripts/transition-callbacks.js.coffee' did not match any file(s) known to git

--- src/coffeescripts/transition-callbacks.js.coffee
+++ src/coffeescripts/transition-callbacks.js.coffee
@@ -0,0 +1,159 @@
+isEmpty = (object) ->
+  return true unless object?
+  return false for k of object
+  return true
+
+shallowCopy = (object) ->
+  o = {}
+  o[key] = value for key, value of object
+  return o
+
+class window.TransitionCallbacks
+  @VERSION: '0.1'
+  @timeout: 3000
+  @clearAll: false
+
+  @transition: (=>
+    style = (document.body or document.documentElement).style
+
+    map =
+      WebkitTransition: 'webkitTransitionEnd'
+      MozTransition: 'transitionend'
+      MsTransition: 'MSTransitionEnd'
+      OTransition: 'oTransitionEnd'
+      transition: 'TransitionEnd'
+
+    return { end: value} for key, value of map when key of style
+    return false)()
+
+  @_transitionCallbacks: {}
+
+  @addCallback: (element, options, callback) ->
+    if typeof options is 'function'
+      callback = options
+      options = {}
+    else
+      options ||= {}
+
+    # For jQuery elements
+    element = element.get(0) if typeof element?.get is 'function'
+    throw new TransitionCallbacks.NoElementGiven unless element
+
+    throw new TransitionCallbacks.NoCallbackGiven unless callback
+
+    timeout = @_getTimeout(options)
+    @_clearOldCallbacks(element, callback, options)
+
+    @_transitionCallbacks[element] ||= {}
+
+    c = @_transitionCallbacks[element][callback] = {}
+
+    c.callback = =>
+      return if not @_transitionCallbacks[element][callback]? or c.cancelled
+      c.cancel()
+      callback.call(element)
+
+    c.cancel = =>
+      c.cancelled = true
+      delete @_transitionCallbacks[element][callback]
+      element.removeEventListener?(@transition.end, c, false) if @transition
+      clearTimeout(c.timeout)
+
+    if @transition and typeof element.addEventListener is 'function'
+      element.addEventListener(@transition.end, c.callback, false)
+      c.timeout = setTimeout(c.callback, timeout) if timeout isnt false
+    else
+      c.callback()
+
+    return
+
+  @_getTimeout: (options) ->
+    if options.timeout?
+      options.timeout
+    else if @timeout?
+      @timeout
+    else
+      TransitionCallbacks.timeout
+
+  @_clearOldCallbacks: (element, callback, options) ->
+    clearAll = if options.clearAll?
+      options.clearAll
+    else if @clearAll?
+      @clearAll
+    else
+      TransitionCallbacks.clearAll
+
+    if clearAll
+      @cancelCallback(element)
+    else
+      @cancelCallback(element, callback)
+
+  @cancelCallback: (element, callback) ->
+    element = element.get(0) if typeof element?.get is 'function'
+    return false unless @_transitionCallbacks[element]
+
+    if callback?
+      if @_transitionCallbacks[element][callback]
+        @_transitionCallbacks[element][callback].cancel()
+      else
+        return false
+    else
+      callbacks = shallowCopy(@_transitionCallbacks[element])
+      value.cancel() for key, value of callbacks
+
+    return true
+
+  @cancelAllCallbacks: ->
+    @cancelCallback(element) for element of @_transitionCallbacks
+
+  @isCallbackPending: (element, callback) ->
+    return false unless c = @_transitionCallbacks[element]
+    if callback?
+      callback of c
+    else
+      !isEmpty(c)
+
+  constructor: (options={}) ->
+    @timeout = options.timeout if options.timeout?
+    @clearAll = options.clearAll if options.clearAll?
+    @_transitionCallbacks = {}
+
+  transition: @transition
+  addCallback: @addCallback
+  _getTimeout: @_getTimeout
+  _clearOldCallbacks: @_clearOldCallbacks
+  cancelCallback: @cancelCallback
+  cancelAllCallbacks: @cancelAllCallbacks
+  hasCallbackPending: @hasCallbackPending
+
+class TransitionCallbacks.NoCallbackGiven
+  @prototype = Error.prototype
+  constructor: -> @name = 'NoCallbackGiven'
+
+class TransitionCallbacks.NoElementGiven
+  @prototype = Error.prototype
+  constructor: -> @name = 'NoElementGiven'
+
+# Add transition support to jQuery if it's used
+if ($ = window.jQuery)
+  $.support.transition = TransitionCallbacks.transition
+
+  tc = new TransitionCallbacks()
+
+  $.fn.addTransitionCallback = (options, callback) ->
+    tc.addCallback(@.get(0), options, callback) if @length > 0
+    return this
+
+  $.fn.cancelTransitionCallback = (callback) ->
+    tc.cancelCallback(element, callback) for element in this
+    return this
+
+  $.fn.hasTransitionCallbackPending = (callback) ->
+    pending = false
+    @each (index, element) ->
+      pending &&= tc.hasCallbackPending(callback)
+      return not pending # Cancel if found
+    return pending
+
+  $.cancelAllTransitionCallbacks = ->
+    tc.cancelAllCallbacks()


Meant to move this here with either f480315b6f887c88462be0efd709e758650042b9 or 999ce70891278e0a8f1c3e9154818873c4ddb914

error: pathspec 'docs/welcome/landing-page.coffee' did not match any file(s) known to git

--- docs/welcome/landing-page.coffee
+++ docs/welcome/landing-page.coffee
@@ -0,0 +1,117 @@
+THEMES = [{
+    name: 'minimal'
+    numbers: [{
+        number: 10000
+        description: '= 282 + 962 = 602 + 802'
+        detail: 'two sums of two squares'
+        source: 'http://www.wolframalpha.com/input/?i=10000'
+    }, {
+        number: 99999
+        description: '= 110000110100111112'
+        detail: '11000011010011111 in base 2'
+        source: 'http://www.wolframalpha.com/input/?i=99999'
+    }]
+}, {
+    name: 'car'
+    odometerOptions:
+        format: 'd'
+    numbers: [{
+        number: 13476
+        description: 'miles driven'
+        detail: 'by the average american each year'
+        source: 'http://www.fhwa.dot.gov/ohim/onh00/bar8.htm'
+    }, {
+        number: 25114
+        description: 'flat tires'
+        detail: 'occur in american each hour'
+        source: 'http://excelmathmike.blogspot.com/2011/04/phooey-on-flats-part-i.html'
+    }]
+}, {
+    name: 'digital'
+    odometerOptions:
+        format: 'd'
+    numbers: [{
+        number: 87360
+        description: 'minutes of tv watched'
+        detail: 'by the average american each year'
+        source: 'http://www.nationmaster.com/graph/med_tel_vie-media-television-viewing'
+    }, {
+        number: 20938
+        description: 'minutes snoozed'
+        detail: 'by the average american each year'
+        source: 'http://jsfiddle.net/adamschwartz/BWgWj/show/light/'
+    }]
+}, {
+    name: 'train-station'
+    numbers: [{
+        number: 682
+        description: 'train cars'
+        detail: 'on the longest train in the world'
+        source: 'http://en.wikipedia.org/wiki/Longest_trains'
+    }, {
+        number: 853
+        description: 'people'
+        detail: 'capacity of the largest commercial airplane'
+        source: 'http://en.wikipedia.org/wiki/Airbus_A380'
+    }]
+}]
+
+animateHeader = ->
+    $('.title-number-section .odometer').addClass 'odometer-animating-up odometer-animating'
+
+setupOnePageScroll = ->
+    $ ->
+        $('.main').onepage_scroll
+            sectionContainer: '.section'
+
+setupNumberSections = ->
+    $afterSections = $('.after-number-sections')
+    $numberSectionTemplate = $('.number-section.template')
+    $numberSectionTemplateClone = $numberSectionTemplate.clone().removeClass('template')
+
+    _.each THEMES, (theme) ->
+        $section = $numberSectionTemplateClone.clone().addClass('number-section-theme-' + theme.name)
+
+        $afterSections.before $section
+
+        $odometerContainer = $section.find '.odometer-container'
+        $odometerContainer.append('
')
+        $odometerContainer = $odometerContainer.find('div')
+
+        currentNumber = 0
+
+        odometerOptions = $.extend(true, {}, theme.odometerOptions or {},
+            theme: theme.name
+            value: theme.numbers[1].number
+            el: $odometerContainer[0]
+        )
+
+        odometer = new Odometer odometerOptions
+
+        odometer.render()
+
+        next = ->
+            number = theme.numbers[currentNumber]
+            odometer.update number.number
+            $section.find('.number-description').html number.description
+            $section.find('.number-detail').html number.detail
+            $section.find('.number-source').attr 'href', number.source
+            currentNumber = (currentNumber + 1) % theme.numbers.length
+
+        next()
+
+        setInterval ->
+            next() if $section.hasClass('active')
+        , 4 * 1000
+
+    $afterSections.remove()
+    $numberSectionTemplate.remove()
+
+init = ->
+    setupNumberSections()
+    setupOnePageScroll()
+    setTimeout ->
+        animateHeader()
+    , 500
+
+init()


filereading attempt 9

filereading attempt 9

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


Remove todo comments

Remove todo comments

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


add flip

add flip

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

--- scripts/flip.coffee
+++ scripts/flip.coffee
@@ -0,0 +1,50 @@
+# Description:
+#   When things aren't going well, you must flip it. (╯°□°）╯︵ ʇoqnɥ
+#
+# Dependencies:
+#   "flip": "~0.1.0"
+#
+# Commands:
+#   hubot flip <text> - express your anger
+#   hubot rage flip <text> - express your anger with rage
+#   hubot unflip <text>
+#
+# Authors:
+#   jergason
+#   spajus
+
+flip = require 'flip'
+
+module.exports = (robot) ->
+
+  robot.respond /(rage )?flip( .*)?$/i, (msg) ->
+    if msg.match[1] == 'rage '
+      guy = '(ノಠ益ಠ)ノ彡'
+    else
+      guy = '(╯°□°）╯︵'
+
+    toFlip = (msg.match[2] || '').trim()
+
+    if toFlip == 'me'
+      toFlip = msg.message.user.name
+
+    if toFlip == ''
+      flipped = '┻━┻'
+    else
+      flipped = flip(toFlip)
+
+    msg.send "#{guy} #{flipped}"
+
+
+  robot.respond /unflip( .*)?$/i, (msg) ->
+    toUnflip = (msg.match[1] || '').trim()
+
+    if toUnflip == 'me'
+      unflipped = msg.message.user.name
+    else if toUnflip == ''
+      unflipped = '┬──┬'
+    else
+      unflipped = toUnflip
+
+    msg.send "#{unflipped} ノ( º _ ºノ)"
+


Ensure request.reply method gets bound to reply object.

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