Added guessing game script (based on AB by Muan - http://ab.muan.co/)

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

--- scripts/guess.coffee
+++ scripts/guess.coffee
@@ -0,0 +1,100 @@
+# Description:
+#   4-digit guessing game
+#   Based on AB, The Game by Muan (http://ab.muan.co/)
+#
+# Dependencies:
+#   None
+#
+# Configuration:
+#   None
+#
+# Commands:
+#   hubot guess <number> - Returns a feedback indicating how accurate your 4-digit <number> guess is
+#   hubot guess surrender - Restarts the game with a new number, duh!
+#   hubot guess tutorial - Tells you how to play this game
+#
+# Author:
+#   MrSaints
+
+players = []
+failure = [
+    "I have not failed. I've just found 10,000 ways that won't work. -Thomas Edison"
+    "Success is stumbling from failure to failure with no loss of enthusiasm. -Winston Churchill"
+    "It is hard to fail, but it is worse never to have tried to succeed. -Theodore Roosevelt"
+    "Only those who dare to fail greatly can ever achieve greatly. -Robert F. Kennedy"
+    "Failures are finger posts on the road to achievement. -C.S. Lewis"
+    "My great concern is not whether you have failed, but whether you are content with your failure. -Abraham Lincoln"
+    "When I was young, I observed that nine out of ten things I did were failures. So I did ten times more work. -George Bernard Shaw"
+]
+
+checkNumber = (answer, attempt) ->
+    attemptArray = attempt.split ""
+    answerArray = answer.toString().split ""
+
+    a = 0
+    b = 0
+
+    for index, number of answerArray
+        if number is attemptArray[index]
+            answerArray[index] = 'x'
+            attemptArray[index] = 'o'
+            ++a
+
+    for index, number of answerArray
+        if attemptArray.indexOf(number) >= 0
+            attemptArray[attemptArray.indexOf(number)] = ''
+            ++b
+
+    [a, b]
+
+newNumber = ->
+    (Math.random()).toString()[2..5]
+
+suffix = (number) ->
+    remainder = number % 10
+    suffixes = ["th", "st", "nd", "rd"]
+
+    if number > 3 and number < 21
+        number += suffixes[0]
+    else if remainder <= 3
+        number += suffixes[remainder]
+    else
+        number += suffixes[0]
+
+    number
+
+win = (msg) ->
+    msg.reply "#{msg.match[1]} is the right answer! You got it at the #{suffix(players[msg.message.user.name].attempts)} attempt."
+    restart msg.message.user.name
+    console.log players
+
+restart = (user) ->
+    players[user] = null
+
+module.exports = (robot) ->
+    robot.respond /guess (\d{4})/i, (msg) ->
+        if not players[msg.message.user.name]?
+            # Initialize
+            players[msg.message.user.name] =
+                answer: newNumber()
+                attempts: 0
+
+        ++players[msg.message.user.name].attempts
+
+        if players[msg.message.user.name].answer is msg.match[1]
+            win msg
+
+        feedback = checkNumber players[msg.message.user.name].answer, msg.match[1]
+
+        msg.reply "#{feedback[0]}A #{feedback[1]}B"
+
+    robot.respond /guess surrender/i, (msg) ->
+        if players[msg.message.user.name]
+            restart msg.message.user.name
+            msg.reply "New game session created! #{msg.random(failure)}"
+
+    robot.respond /guess tutorial/i, (msg) ->
+        msg.reply "The goal of this game is to guess a 4-digit number within the least number of attempts possible."
+        msg.send "With every guess, you will get a feedback indicating how many A and B you got with the guess."
+        msg.send "An A means: one of the digits is correct, and is also at the right place."
+        msg.send "A B means: one of the digits is a right number, but not at the right place."


Fix typo

Fix typo

--- app/schemas/models/level.coffee
+++ app/schemas/models/level.coffee
@@ -228,7 +228,7 @@
     links: [{rel: "extra", href: "/db/level/{($)}"}, {rel:'db', href: "/db/level/{(original)}/version/{(majorVersion)}"}],
     format: 'latest-version-reference',
     title: "Next Level",
-    description: "Reference to the next level players will player after beating this one."
+    description: "Reference to the next level players will play after beating this one."
   }
   scripts: c.array {title: "Scripts", description: "An array of scripts that trigger based on what the player does and affect things outside of the core level simulation.", "default": []}, ScriptSchema
   thangs: c.array {title: "Thangs", description: "An array of Thangs that make up the level.", "default": []}, LevelThangSchema


[add] メインスクリプトファイルを作成

[add] メインスクリプトファイルを作成

とりあえずハローワールド。このファイルがメインファイルになる予定。

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

--- src/w-cars.coffee
+++ src/w-cars.coffee
@@ -0,0 +1 @@
+console.log 'Hello, w-cars!!'


Changed timeouts and initial session visibility time

--- server/queues/scoring.coffee
+++ server/queues/scoring.coffee
@@ -13,7 +13,7 @@
 bayes = new (require 'bayesian-battle')()

 scoringTaskQueue = undefined
-scoringTaskTimeoutInSeconds = 180
+scoringTaskTimeoutInSeconds = 240

 module.exports.setup = (app) -> connectToScoringQueue()
@@ -364,7 +364,7 @@
   return taskPairs

 sendTaskPairToQueue = (taskPair, callback) ->
-  scoringTaskQueue.sendMessage {sessions: taskPair}, 0, (err,data) -> callback? err,data
+  scoringTaskQueue.sendMessage {sessions: taskPair}, 5, (err,data) -> callback? err,data

 getUserIDFromRequest = (req) -> if req.user? then return req.user._id else return null


important whitespace adjustments

important whitespace adjustments

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


remote-side only tabs

remote-side only tabs

error: pathspec 'modules/gui/lib/widgets/TabPanel.coffee' did not match any file(s) known to git

--- modules/gui/lib/widgets/TabPanel.coffee
+++ modules/gui/lib/widgets/TabPanel.coffee
@@ -0,0 +1,95 @@
+module.exports =
+
+    class TabPanel extends floyd.gui.ViewContext
+
+        ##
+        ##
+        ##
+        configure: (config)->
+            config = super new floyd.Config
+
+                tabs:
+                    _order: []
+                    _active: null
+
+                template: ->
+                    section class:'Content Tabs', ->
+
+                        ul class:'bar', ->
+                            for tab in @_tabs._order
+                                attr = {}
+                                if tab is @_tabs._active
+                                    attr = class:'active'
+
+                                li attr, ->
+                                    a href:'#'+tab, (@_tabs[tab])
+
+
+            , config
+
+            @_tabs = config.tabs
+            @_panels = config.panels
+
+            return config
+
+        ##
+        ##
+        ##
+        start: (done)->
+            super (err)=>
+                return done(err) if err
+
+                if floyd.system.platform is 'remote'
+                    tabs = @__root.parent().find('ul.bar a')
+
+                    tabs.click (e)=>
+                        tabs.parent().removeAttr 'class'
+                        link = $(e.currentTarget)
+                        link.parent().addClass 'active'
+
+                        @_showPanel link.attr('href').replace '#', ''
+
+                        return false;
+
+                    @_showPanel @_tabs._active
+
+                done()
+
+        ##
+        ##
+        ##
+        _showPanel: (id)->
+            @find('.panel.active').removeClass('active')
+
+            _emit = ()=>
+                @_emit 'change',
+                    active: id
+
+            if (panel = @find '.'+id).length
+
+                panel.addClass('active')
+                _emit()
+
+            else
+                config = @_panels[id] || {}
+
+                if typeof config is 'string' || typeof config is 'function'
+                    config =
+                        content: config
+
+                config = new floyd.Config
+                    type: 'gui.ViewContext'
+                    data:
+                        class: 'panel'
+                        active: id
+
+                , @_panels._config ,config
+
+                config.id ?= id
+
+                config.data.class += ' active '+id
+
+                @_createChild config, (err)=>
+                    return @error(err) if err
+
+                    _emit()


current_route was not active

current_route was not active

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


#32 add typeahead component

#32 add typeahead component

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

--- app/assets/javascripts/components/typeahead.js.jsx.coffee
+++ app/assets/javascripts/components/typeahead.js.jsx.coffee
@@ -0,0 +1,26 @@
+{div, input, br} = React.DOM
+
+nations = ['britain', 'ireland', 'norway', 'sweden', 'denmark', 'germany',
+  'holland', 'belgium', 'france', 'spain', 'portugal', 'italy', 'switzerland']
+
+Typeahead = React.createClass
+  getInitialSatet: ->
+    { input: '' }
+
+  handleChnage: ->
+    @setState input: @refs.field.getDOMNode().value
+
+  handleClick: (ra) ->
+    @setState input: ra
+
+  matches: (input) ->
+    regex = new RegExp(input, "i")
+    ras = nations # @props.areas
+    _.select ras, (ra) -> ra.match(regex) && ra != input
+
+  render: ->
+    div {},
+      input ref: 'field', onChange: @handleChnage, value: @state.input
+      br {}
+      _.map @matches(@state.input), (ra) =>
+        TypeaheadButton handleClick: @handleClick, name: ra


Bug fixes

Bug fixes

* regex is now works properly
* updated error message
* updated success response object

--- src/faker.coffee
+++ src/faker.coffee
@@ -13,16 +13,14 @@
 #
 # Author:
 #   Dustin Schie <me@dustinschie.com>
-
 URL = 'https://fakerapi.herokuapp.com'

 module.exports = (robot) ->
-  robot.respond /fake (\w+) (\w+)/i, (res) ->
+  robot.respond /fake( \w+ \w+)$/i, (res) ->
     path = res.match[1].split(' ').join('/')
     robot.http("#{URL}/#{path}")
       .get() (err, resp, body) ->
-        if  resp.statusCode isnt 200
-          res.send "Encountered an error :( #{err}"
-          return
+        if resp.statusCode isnt 200
+          res.send "I can't; something went wrong!"
         else
-          resp.send body
+          res.send body


Fix branch name decoding error

Fix branch name decoding error

The error would result in the branch name being returned as 'undefined'.
Fix #40.

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


running commands directly on servers

running commands directly on servers

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 an angular route

add an angular route

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


Don't send... yet

Don't send... yet

--- components/inquiry_questionnaire/views/inquiry.coffee
+++ components/inquiry_questionnaire/views/inquiry.coffee
@@ -15,5 +15,5 @@

   serialize: (e) ->
     form = new Form model: @inquiry, $form: @$('form')
-    form.submit e, success: =>
-      @next()
+    form.submit e, {}, 'set'
+    @next()


updated build workflow

updated build workflow

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


Fix actionThenHide

Fix actionThenHide

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


Fix other window scope issues in MapManager

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


Fixing register redirection

Fixing register redirection

--- app/coffee/modules/auth.coffee
+++ app/coffee/modules/auth.coffee
@@ -201,8 +201,7 @@

         onSuccessSubmit = (response) ->
             $confirm.notify("success", "Our Oompa Loompas are happy, wellcome to Taiga.") #TODO: i18n
-            # TODO: finish this. Go tu '/'
-            $location.path("/project/project-example-0/backlog")
+            $location.path("/")

         onErrorSubmit = (response) ->
             $confirm.notify("light-error", "According to our Oompa Loompas, the username or email is


Nuke out scrollspy =D

Nuke out scrollspy =D

--- resources/assets/coffee/_classes/wiki.coffee
+++ resources/assets/coffee/_classes/wiki.coffee
@@ -23,9 +23,6 @@
     @floatToc = document.getElementsByClassName('js-wiki-toc-float')

     $(document).on 'turbolinks:load', @initialize
-
-    $(document).on 'turbolinks:load', @scrollSpy
-    $(window).on 'throttled-scroll throttled-resize', @scrollSpy

     $.subscribe 'stickyHeader', @stickyToc
     $(document).on 'turbolinks:load', @stickyToc
@@ -122,19 +119,6 @@
     el.href = "#{path}?locale=#{locale}"

-  scrollSpy: =>
-    return if !@content[0]?
-
-    for header in document.getElementsByClassName('js-wiki-spy-target') by -1
-      id = header.id
-      break if header.getBoundingClientRect().top <= 0
-
-    $('.js-wiki-spy-link')
-      .removeClass 'js-wiki-spy-link--active'
-      .filter "[href='##{id}']"
-      .addClass 'js-wiki-spy-link--active'
-
-
   stickyToc: (_e, target) =>
     return if !@floatToc[0]?


Fix positioning of toc

Fix positioning of toc

There's also another bug I randomly encounter but couldn't reliably reproduce =[

--- resources/assets/coffee/_classes/wiki.coffee
+++ resources/assets/coffee/_classes/wiki.coffee
@@ -34,7 +34,6 @@
     el.style.position = 'absolute'
     el.style.top = 'auto'
     el.style.bottom = 0
-    el.style.left = 0
     el.style.width = 'auto'

@@ -47,7 +46,6 @@
     el.style.position = 'absolute'
     el.style.top = 0
     el.style.bottom = 'auto'
-    el.style.left = 0
     el.style.width = 'auto'

@@ -60,7 +58,6 @@
     el.style.position = 'fixed'
     el.style.top = 0
     el.style.bottom = 'auto'
-    el.style.left = "#{containerRect.left}px"
     el.style.width = "#{containerRect.width}px"


Changed .css to a .setStyle in dragDropSelect

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/programmfabrik/coffeescript-ui-demo.git/'


Add support for phpunit.

Add support for phpunit.

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/rafalprzywarski/test-status.git/'


Restore shell page functionality after ShowIf Revert

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/cganas/picoCTF-web.git/'


adding snowplow events to auction_reminder

--- components/auction_reminder/index.coffee
+++ components/auction_reminder/index.coffee
@@ -7,12 +7,14 @@
 ClockView = require '../clock/view.coffee'
 { API_URL } = require('sharify').data
 Cookies = require 'cookies-js'
+analytics = require '../../lib/analytics.coffee'
 auctionTemplate = -> require('./template.jade') arguments...

 class AuctionReminderModal extends Backbone.View

   events: ->
     'click .modal-close': 'close'
+    'click .auction-reminder-container': 'trackAnalytics'

   initialize: ({ @auction, @auctionImage }) ->

@@ -51,6 +53,8 @@

     Cookies.set('closeAuctionReminder', true)

+    analytics.snowplowStruct 'auction_reminder', 'dismiss', @auction.get('id'), 'feature'
+
   setupClock: ->
     @clock = new AuctionClock
       modelName: 'Auction'
@@ -58,6 +62,9 @@
       el: @$Clock = @$('.auction-reminder-clock')
     @$Clock.addClass 'is-fade-in'
     @clock.start()
+
+  trackAnalytics: ->
+    analytics.snowplowStruct 'auction_reminder', 'click', @auction.get('id'), 'feature'

 class AuctionClock extends ClockView


change -> to () -> in bookmarklet-ext.coffee

The parenthesis less form is dangerous because if you
omit > then it just becomes minus or list element depending on ideation
no compilation error is produced.

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/PiotrCzapla/Browser-To-Mobile.git/'


lower ttl on exisiting sessions

lower ttl on exisiting sessions

Hours of sleep: 25
Cups of coffee: 0
Cans of soda: 0
Cans of redbull: 0

error: pathspec 'scripts/set-session-ttl-10min.coffee' did not match any file(s) known to git

--- scripts/set-session-ttl-10min.coffee
+++ scripts/set-session-ttl-10min.coffee
@@ -0,0 +1,12 @@
+require 'colors'
+redis = require 'redis'
+util = require 'util'
+client = redis.createClient()
+
+client.on 'error', (err) ->
+  throw err
+
+client.keys '*', (err, keys) ->
+  keys.forEach (key) ->
+    util.log "Expiring #{key}..."
+    client.expire key, 600


refactor BandList into new component

refactor BandList into new component

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

--- assets/coffee/components/BandList.cjsx
+++ assets/coffee/components/BandList.cjsx
@@ -0,0 +1,14 @@
+React = require 'react'
+
+BandList = React.createClass(
+  displayName: 'BandList'
+  render: ->
+    bandNodes = @props.data.map((band) ->
+
{band.name}

+    )
+

+      {bandNodes}
+

+)
+
+module.exports = BandList


Only upload on master

Only upload on master

--- build/tasks/publish-build-task.coffee
+++ build/tasks/publish-build-task.coffee
@@ -22,7 +22,7 @@
   grunt.registerTask 'publish-build', 'Publish the built app', ->
     tasks = []
     tasks.push('build-docs', 'prepare-docs') if process.platform is 'darwin'
-    tasks.push('upload-assets') if process.env.JANKY_SHA1 and process.env.JANKY_BRANCH isnt 'master'
+    tasks.push('upload-assets') if process.env.JANKY_SHA1 and process.env.JANKY_BRANCH is 'master'
     grunt.task.run(tasks)

   grunt.registerTask 'prepare-docs', 'Move api.json to atom-api.json', ->


Introduced AdminPurchase service that allows purchase items to be marked as paid [RED-43]

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/Bogdan-p/bookingbug-angular.git/'


show 'updated_at' time in the 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/rremizov/github-notifier.git/'


Triggers blur after clicking award button

Fixes #15511

--- app/assets/javascripts/awards_handler.coffee
+++ app/assets/javascripts/awards_handler.coffee
@@ -30,6 +30,8 @@
       awards_handler.addAward "thumbsup"

     awards_handler.addAward emoji
+
+    $(this).trigger 'blur'

   didUserClickEmoji: (that, emoji) ->
     if $(that).siblings("button:has([data-emoji=#{emoji}])").attr("data-original-title")


update research networks section to be able to pull researcher names from tag-based approach; semi-detect tab presses and try to tag-ify when it happens (doesn't work terribly well, as the browser intercepts our tab-press first and moves the selected field)

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


Pass proper input element

Pass proper input element

--- app/assets/javascripts/gl_dropdown.js.coffee
+++ app/assets/javascripts/gl_dropdown.js.coffee
@@ -136,11 +136,8 @@

     # Init filterable
     if @options.filterable
-      @input = @dropdown.find('.dropdown-input .dropdown-input-field')
-
-      @filter = new GitLabDropdownFilter @input,
+      @filter = new GitLabDropdownFilter @filterInput,
         filterInputBlur: @filterInputBlur
-        input: @filterInput
         remote: @options.filterRemote
         query: @options.data
         keys: @options.search.fields


fix #1

fix #1

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


Update zh-HANS.coffee

Update zh-HANS.coffee

由于前面有人把stats翻成"成就"，为保持一致性，也翻译成"成就"

--- app/locale/zh-HANS.coffee
+++ app/locale/zh-HANS.coffee
@@ -34,7 +34,7 @@
     about: "关于"
     contact: "联系我们"
     twitter_follow: "关注"
-#    teachers: "Teachers"
+    teachers: "教师"

   modal:
     close: "关闭"
@@ -54,14 +54,14 @@
   play:
     play_as: "Play As" # Ladder page
     spectate: "旁观他人的游戏" # Ladder page
-#    players: "players" # Hover over a level on /play
+    players: "players" # Hover over a level on /play
 #    hours_played: "hours played" # Hover over a level on /play
-#    items: "Items" # Tooltip on item shop button from /play
-#    heroes: "Heroes" # Tooltip on hero shop button from /play
+    items: "道具" # Tooltip on item shop button from /play
+    heroes: "英雄" # Tooltip on hero shop button from /play
     achievements: "成就" # Tooltip on achievement list button from /play
     account: "账户" # Tooltip on account button from /play
     settings: "设置" # Tooltip on settings button from /play
-#    next: "Next" # Go from choose hero to choose inventory before playing a level
+    next: "下一步" # Go from choose hero to choose inventory before playing a level
     change_hero: "重新选择英雄" # Go back from choose inventory to choose hero
     choose_inventory: "装备道具"
     older_campaigns: "旧的战役"
@@ -204,7 +204,7 @@
     victory_rate_the_level: "评估关卡：" # Only in old-style levels.
     victory_return_to_ladder: "返回"
     victory_play_next_level: "下一关" # Only in old-style levels.
-#    victory_play_continue: "Continue"
+    victory_play_continue: "继续"
     victory_go_home: "返回主页" # Only in old-style levels.
     victory_review: "给我们反馈！" # Only in old-style levels.
     victory_hour_of_code_done: "你完成了吗?"
@@ -283,8 +283,8 @@
 #    guide_caption: "Docs and tips"
 #    multiplayer_caption: "Play with friends!"

-#  inventory:
-#    choose_inventory: "Equip Items"
+  inventory:
+    choose_inventory: "装备道具"

   choose_hero:
     choose_hero: "请选择您的英雄"
@@ -334,9 +334,9 @@
     why_paragraph_2_suffix: "这就是为什么 CodeCombat 是个多人游戏，而不是一个游戏化的编程课。你不停，我们就不停——但这次这是件好事。"
     why_paragraph_3: "如果你一定要对游戏上瘾，那就对这个游戏上瘾，然后成为科技时代的法师吧。"
     press_title: "博客/媒体"
-#    press_paragraph_1_prefix: "Want to write about us? Feel free to download and use all of the resources included in our"
-#    press_paragraph_1_link: "press packet"
-#    press_paragraph_1_suffix: ". All logos and images may be used without contacting us directly."
+    press_paragraph_1_prefix: "想要报道我们？ 您可以自由下载和使用"
+    press_paragraph_1_link: "成套宣传包"
+    press_paragraph_1_suffix: "里的所有材料. 所有商标和图像的使用都不必事先联系我们。"
     team: "团队"
 #    george_title: "CEO"
 #    george_blurb: "Businesser"
@@ -541,7 +541,7 @@
     introduction_desc_ending: "我们希望你也能一起加入进来！"
     introduction_desc_signature: "- Nick, George, Scott, Michael, Jeremy 以及 Matt"
     alert_account_message_intro: "你好！"
-#    alert_account_message: "To subscribe for class emails, you'll need to be logged in first."
+    alert_account_message: "想要订阅邮件？ 您必须先登录"
     archmage_summary: "你对游戏图像、界面设计、数据库和服务器运营、多人在线、物理、声音、游戏引擎性能感兴趣吗？想做一个教别人编程的游戏吗？如果你有编程经验，想要开发 CodeCombat ，那就选择这个职业吧。我们会非常高兴在制作史上最棒编程游戏的过程中得到你的帮助。"
     archmage_introduction: "制作游戏时，最令人激动的事莫过于整合诸多东西。图像、音响、实时网络交流、社交网络，从底层数据库管理到服务器运维，再到用户界面的设计和实现。制作游戏有很多事情要做，所以如果你有编程经验,  那么你应该选择这个职业。我们会很高兴在制作史上最好编程游戏的路上有你的陪伴."
     class_attributes: "职业说明"
@@ -670,40 +670,40 @@
 #    rules: "Rules"
 #    winners: "Winners"

-#  user:
-#    stats: "Stats"
-#    singleplayer_title: "Singleplayer Levels"
-#    multiplayer_title: "Multiplayer Levels"
-#    achievements_title: "Achievements"
-#    last_played: "Last Played"
-#    status: "Status"
-#    status_completed: "Completed"
-#    status_unfinished: "Unfinished"
-#    no_singleplayer: "No Singleplayer games played yet."
-#    no_multiplayer: "No Multiplayer games played yet."
-#    no_achievements: "No Achievements earned yet."
-#    favorite_prefix: "Favorite language is "
-#    favorite_postfix: "."
-
-#  achievements:
-#    last_earned: "Last Earned"
-#    amount_achieved: "Amount"
-#    achievement: "Achievement"
-#    category_contributor: "Contributor"
-#    category_miscellaneous: "Miscellaneous"
-#    category_levels: "Levels"
-#    category_undefined: "Uncategorized"
-#    current_xp_prefix: ""
-#    current_xp_postfix: " in total"
-#    new_xp_prefix: ""
-#    new_xp_postfix: " earned"
-#    left_xp_prefix: ""
-#    left_xp_infix: " until level "
-#    left_xp_postfix: ""
-
-#  account:
-#    recently_played: "Recently Played"
-#    no_recent_games: "No games played during the past two weeks."
+  user:
+    stats: "成就"
+    singleplayer_title: "单人关卡"
+    multiplayer_title: "多人关卡"
+    achievements_title: "成就"
+    last_played: "最近玩的时间"
+    status: "状态"
+    status_completed: "完成"
+    status_unfinished: "未完成"
+    no_singleplayer: "还未玩过任何单人关卡。"
+    no_multiplayer: "还未玩过任何多人关卡。"
+    no_achievements: "还未得到任何成就"
+    favorite_prefix: "最喜爱的语言是 "
+    favorite_postfix: "."
+
+  achievements:
+    last_earned: "最近取得的时间"
+    amount_achieved: "数量"
+    achievement: "成就"
+    category_contributor: "Contributor"
+    category_miscellaneous: "Miscellaneous"
+    category_levels: "Levels"
+    category_undefined: "Uncategorized"
+    current_xp_prefix: ""
+    current_xp_postfix: " in total"
+    new_xp_prefix: ""
+    new_xp_postfix: " earned"
+    left_xp_prefix: ""
+    left_xp_infix: " until level "
+    left_xp_postfix: ""
+
+  account:
+    recent0ly_played: "最近玩过的关卡"
+    no_recent_games: "最近两个星期没有玩过游戏。"

   loading_error:
     could_not_load: "载入失败"
@@ -730,7 +730,7 @@
 #    gplus_friend_sessions: "G+ Friend Sessions"
     leaderboard: "排行榜"
     user_schema: "用户模式"
-    user_profile: "User Profile"
+    user_profile: "用户信息"
     patches: "补丁"
 #    patched_model: "Source Document"
 #    model: "Model"


npe check in core.Repository.$$wsRegister

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


typo fixed

typo fixed

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


modifying run_local

modifying run_local

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


client: remove isWithinCodeBlock util

client: remove isWithinCodeBlock util

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

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


whoops, revert changes to this for debugging

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


Remove "only" scope from HasLogger 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/JoshuaToenyes/stout-core.git/'


If file is not an image / audio / video or larger then 10 mb don't try and show a preview

--- packages/rocketchat-ui/client/lib/fileUpload.coffee
+++ packages/rocketchat-ui/client/lib/fileUpload.coffee
@@ -4,6 +4,31 @@
 		callback ev.target.result, file

 	reader.readAsDataURL file
+
+getUploadPreview = (file, callback) ->
+	if file.file.type.indexOf('audio') > -1 or file.file.type.indexOf('video') > -1 or file.file.type.indexOf('image') > -1
+		file.type = file.file.type.split('/')[0]
+
+		readAsDataURL file.file, (content) ->
+			callback(file, content)
+	else
+		callback(file, null)
+
+formatBytes = (bytes, decimals) ->
+  if bytes == 0
+    return '0 Bytes'
+  k = 1000
+  dm = decimals + 1 or 3
+  sizes = [
+    'Bytes'
+    'KB'
+    'MB'
+    'GB'
+    'TB'
+    'PB'
+  ]
+  i = Math.floor(Math.log(bytes) / Math.log(k))
+  parseFloat((bytes / k ** i).toFixed(dm)) + ' ' + sizes[i]

 readAsArrayBuffer = (file, callback) ->
 	reader = new FileReader()
@@ -23,29 +48,29 @@
 			swal.close()
 			return

-		readAsDataURL file.file, (fileContent) ->
-			if not RocketChat.fileUploadIsValidContentType file.file.type
-				swal
-					title: t('FileUpload_MediaType_NotAccepted')
-					text: file.file.type || "*.#{s.strRightBack(file.file.name, '.')}"
-					type: 'error'
-					timer: 3000
-				return
+		if not RocketChat.fileUploadIsValidContentType file.file.type
+			swal
+				title: t('FileUpload_MediaType_NotAccepted')
+				text: file.file.type || "*.#{s.strRightBack(file.file.name, '.')}"
+				type: 'error'
+				timer: 3000
+			return

-			if file.file.size is 0
-				swal
-					title: t('FileUpload_File_Empty')
-					type: 'error'
-					timer: 1000
-				return
+		if file.file.size is 0
+			swal
+				title: t('FileUpload_File_Empty')
+				type: 'error'
+				timer: 1000
+			return

+		getUploadPreview file, (file, preview) ->
 			text = ''

 			if file.type is 'audio'
 				text = """

 						<audio  style="width: 100%;" controls="controls">
-							<source src="#{fileContent}" type="audio/wav">
+							<source src="#{preview}" type="audio/wav">
 							Your browser does not support the audio element.
 						</audio>

@@ -58,7 +83,7 @@
 				text = """

 						<video  style="width: 100%;" controls="controls">
-							<source src="#{fileContent}" type="video/webm">
+							<source src="#{preview}" type="video/webm">
 							Your browser does not support the video element.
 						</video>

@@ -67,10 +92,22 @@
 						<input id='file-description' style='display: inherit;' value='' placeholder='#{t("Upload_file_description")}'>

 				"""
-			else
+			else if file.type is 'image'
 				text = """

-

+

+

+

+						<input id='file-name' style='display: inherit;' value='#{Handlebars._escape(file.name)}' placeholder='#{t("Upload_file_name")}'>
+						<input id='file-description' style='display: inherit;' value='' placeholder='#{t("Upload_file_description")}'>
+

+				"""
+			else
+				fileSize = formatBytes(file.file.size)
+
+				text = """
+

+
#{Handlebars._escape(file.name)} - #{fileSize}

 						<input id='file-name' style='display: inherit;' value='#{Handlebars._escape(file.name)}' placeholder='#{t("Upload_file_name")}'>


Add script to control Spot.

Add script to control Spot.

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

--- src/scripts/spot.coffee
+++ src/scripts/spot.coffee
@@ -0,0 +1,71 @@
+# Description:
+#   Control Spot from campfire. https://github.com/minton/spot
+#
+# Dependencies:
+#   None
+#
+# Configuration:
+#   HUBOT_SPOT_URL
+#
+# Commands:
+#   hubot play - Plays current playlist or song.
+#   hubot pause - Pause the music.
+#   hubot play next - Plays the next song.
+#   hubot play back - Plays the previous song.
+#   hubot playing? - Returns the currently-played song.
+#   hubot play <song> - Play a particular song. This plays the first most popular result.
+#   hubot volume? - Returns the current volume level.
+#   hubot volume [0-100] - Sets the volume.
+#   hubot mute - Sets the volume to 0.
+#
+# Author:
+#   mcminton
+
+URL = "#{process.env.HUBOT_SPOT_URL}"
+
+spotRequest = (message, path, action, options, callback) ->
+  message.http("#{URL}#{path}")
+    .query(options)[action]() (err, res, body) ->
+      callback(err,res,body)
+
+module.exports = (robot) ->
+
+  robot.respond /play!/i, (message) ->
+    message.finish()
+    spotRequest message, '/play', 'put', {}, (err, res, body) ->
+      message.send(":notes:  #{body}")
+
+  robot.respond /pause/i, (message) ->
+    params = {volume: 0}
+    spotRequest message, '/pause', 'put', params, (err, res, body) ->
+      message.send("#{body} :cry:")
+
+  robot.respond /next/i, (message) ->
+    spotRequest message, '/next', 'put', {}, (err, res, body) ->
+      message.send("#{body} :fast_forward:")
+
+  robot.respond /back/i, (message) ->
+    spotRequest message, '/back', 'put', {}, (err, res, body) ->
+      message.send("#{body} :rewind:")
+
+  robot.respond /playing\?/i, (message) ->
+    spotRequest message, '/playing', 'get', {}, (err, res, body) ->
+      message.send(":notes:  #{body}")
+
+  robot.respond /volume\?/i, (message) ->
+    spotRequest message, '/volume', 'get', {}, (err, res, body) ->
+      message.send("Spot volume is #{body}. :mega:")
+
+  robot.respond /mute/i, (message) ->
+    spotRequest message, '/mute', 'put', {}, (err, res, body) ->
+      message.send("#{body} :mute:")
+
+  robot.respond /volume (.*)/i, (message) ->
+    params = {volume: message.match[1]}
+    spotRequest message, '/volume', 'put', params, (err, res, body) ->
+      message.send("Spot volume set to #{body}. :mega:")
+
+  robot.respond /play (.*)/i, (message) ->
+    params = {q: message.match[1]}
+    spotRequest message, '/find', 'post', params, (err, res, body) ->
+      message.send(":small_blue_diamond: #{body}")


[Options] Remove trailing whitespace.

[Options] Remove trailing whitespace.

--- options/options.coffee
+++ options/options.coffee
@@ -41,7 +41,7 @@

 # Saves options to localStorage.
 saveOptions = ->
-
+
   # If the value is unchanged from the default, delete the preference from localStorage; this gives us
   # the freedom to change the defaults in the future.
   for fieldName in editableFields
@@ -51,7 +51,7 @@
     else
       fieldValue = field.value.trim()
       field.value = fieldValue
-
+
     # If it's empty and not a field that we allow to be empty, restore to the default value
     if not fieldValue and canBeEmptyFields.indexOf(fieldName) is -1
       bgSettings.clear fieldName


Only start Backbone.history if it is not already started

--- components/artwork_filter/index.coffee
+++ components/artwork_filter/index.coffee
@@ -3,5 +3,5 @@

 module.exports.init = (options = {}) ->
   new ArtworkFilterRouter options
-  Backbone.history.start pushState: true
-  require './analytics.coffee'+  require './analytics.coffee'
+  Backbone.history.start(pushState: true) unless Backbone.History.started


Claim tests

Claim tests

error: pathspec 'spec/views/claim-core-manually-view-spec.coffee' did not match any file(s) known to git

--- spec/views/claim-core-manually-view-spec.coffee
+++ spec/views/claim-core-manually-view-spec.coffee
@@ -0,0 +1,80 @@
+{WorkspaceView} = require 'atom'
+$ = require('atom').$
+SettingsHelper = require '../../lib/utils/settings-helper'
+
+describe 'Claim Core manually View', ->
+  activationPromise = null
+  originalProfile = null
+  sparkIde = null
+  claimCoreManuallyView = null
+
+  beforeEach ->
+    require '../../lib/vendor/ApiClient'
+    atom.workspaceView = new WorkspaceView
+
+    activationPromise = atom.packages.activatePackage('spark-ide').then ({mainModule}) ->
+      sparkIde = mainModule
+
+    originalProfile = SettingsHelper.getProfile()
+    # For tests not to mess up our profile, we have to switch to test one...
+    SettingsHelper.setProfile 'spark-ide-test'
+
+    waitsForPromise ->
+      activationPromise
+
+  afterEach ->
+    SettingsHelper.setProfile originalProfile
+
+  describe '', ->
+    beforeEach ->
+      SettingsHelper.setCredentials 'foo@bar.baz', '0123456789abcdef0123456789abcdef'
+      SettingsHelper.setCurrentCore '0123456789abcdef0123456789abcdef', 'Foo'
+
+    afterEach ->
+      SettingsHelper.clearCredentials()
+      SettingsHelper.clearCurrentCore()
+
+    it 'checks if empty name would cause an error', ->
+      atom.workspaceView.trigger 'spark-ide:claim-core-manually'
+      claimCoreManuallyView = sparkIde.claimCoreManuallyView
+
+      editor = claimCoreManuallyView.miniEditor.getEditor()
+
+      editor.setText ''
+      spyOn(claimCoreManuallyView, 'close')
+      expect(atom.workspaceView.find('#spark-ide-claim-core-manually-view .editor.mini:eq(0)').hasClass('editor-error')).toBe(false)
+      claimCoreManuallyView.trigger 'core:confirm'
+      expect(atom.workspaceView.find('#spark-ide-claim-core-manually-view .editor.mini:eq(0)').hasClass('editor-error')).toBe(true)
+      expect(claimCoreManuallyView.close).not.toHaveBeenCalled()
+
+      atom.workspaceView.trigger 'core:cancel'
+      jasmine.unspy claimCoreManuallyView, 'close'
+
+
+    it 'claims the core', ->
+      require.cache[require.resolve('../../lib/vendor/ApiClient')].exports = require '../mocks/ApiClient-success'
+      atom.workspaceView.trigger 'spark-ide:claim-core-manually'
+      claimCoreManuallyView = sparkIde.claimCoreManuallyView
+
+      editor = claimCoreManuallyView.miniEditor.getEditor()
+
+      editor.setText '0123456789abcdef0123456789abcdef'
+      spyOn(claimCoreManuallyView, 'close')
+      spyOn(atom.workspaceView, 'trigger')
+      claimCoreManuallyView.trigger 'core:confirm'
+
+      waitsFor ->
+        !claimCoreManuallyView.claimPromise
+
+      runs ->
+        expect(SettingsHelper.get('current_core')).toBe('0123456789abcdef0123456789abcdef')
+        expect(SettingsHelper.get('current_core_name')).toBe('0123456789abcdef0123456789abcdef')
+        expect(atom.workspaceView.trigger).toHaveBeenCalled()
+        expect(atom.workspaceView.trigger.calls.length).toEqual(2)
+        expect(atom.workspaceView.trigger).toHaveBeenCalledWith('spark-ide:update-core-status')
+        expect(atom.workspaceView.trigger).toHaveBeenCalledWith('spark-ide:update-menu')
+        expect(claimCoreManuallyView.close).toHaveBeenCalled()
+
+        jasmine.unspy claimCoreManuallyView, 'close'
+        jasmine.unspy atom.workspaceView, 'trigger'
+        claimCoreManuallyView.close()


add randompop.coffee (work in progress)

add randompop.coffee (work in progress)

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

--- scripts/randompop.coffee
+++ scripts/randompop.coffee
@@ -0,0 +1,39 @@
+#
+# 主に発表者をランダムで指定する
+#
+
+happyo = []
+
+{TextListener} = require 'hubot/src/listener'
+
+
+module.exports = (robot) ->
+  removeListener = (listener) ->
+    index = robot.listeners.indexOf listener
+    robot.listeners.splice index, 1 if index != 1
+
+  waitForResponse = (waitMsg, callback) ->
+    userId = waitMsg.envelope.user.id
+    room = waitMsg.envelope.room
+    listener = new TextListener robot, /.*/, (msg) ->
+      {envelope} = msg
+      if envelope.room is room and envelope.user.id is userId
+        removeListener listener
+        if msg.envelope.message.text.toLowerCase() is '<end>'
+          waitMsg.reply '追加しました'
+        else
+          callback.apply null, arguments
+    robot.listeners.push listener
+
+  robot.respond /発表者\s+一覧/i, (msg) ->
+    msg.send "発表者一覧"
+    for name, idx in happyo
+      msg.send "  (#{idx})#{name}"
+
+  robot.respond /発表者\s+追加/i, (msg) ->
+    msg.reply "発表者を追加します。終了する場合は <end> と入力してください。"
+    waitForResponse msg, (msg) ->
+      # ここら辺に追加用のコードを書く予定
+
+
+


Plural

Plural

--- server/commons/mapping.coffee
+++ server/commons/mapping.coffee
@@ -66,5 +66,5 @@
   'users': 'User'

 mongoose.modelNameByCollection = (collection) ->
-  return require('../models/LevelSession') if collection is 'level.session'
+  return require('../models/LevelSession') if collection is 'level.sessions'
   mongoose.model modules[collection] if collection of modules


:lipstick:

:lipstick:

Kevin found this offensive

--- src/packages/collaboration/lib/bootstrap.coffee
+++ src/packages/collaboration/lib/bootstrap.coffee
@@ -34,7 +34,7 @@
   # abort if working directory is unclean

   # apply bundle of unpushed changes from host
-  {unpushedChanges, head} =atom.guestSession.repositoryDelta
+  {unpushedChanges, head} = atom.guestSession.repositoryDelta
   if unpushedChanges
     tempFile = temp.path(suffix: '.bundle')
     fs.writeFileSync(tempFile, new Buffer(atom.guestSession.repositoryDelta.unpushedChanges, 'base64'))


Add a couple triggers

Add a couple triggers

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


lay foundations for websocket server

lay foundations for websocket server

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

--- src/ws/websocket.coffee
+++ src/ws/websocket.coffee
@@ -0,0 +1,67 @@
+###
+
+Copyright (c) 2011-2012  Voicious
+
+This program is free software: you can redistribute it and/or modify it under the terms of the
+GNU Affero General Public License as published by the Free Software Foundation, either version
+3 of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+See the GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License along with this
+program. If not, see <http://www.gnu.org/licenses/>.
+
+###
+
+Http    = require 'http'
+Ws      = (require 'ws').Server
+Request = require 'request'
+
+Config = require '../common/config'
+
+class Websocket
+    constructor : () ->
+        @socks = { }
+
+    onConnection : (sock) =>
+        that = @
+        sock.onmessage = (message) ->
+            message = JSON.parse message.data
+            if message.type is 'authenticate'
+                that.validateSock message.params.uid, message.params.rid, @
+
+    validateSock : (uid, rid, sock) =>
+        Request.get "#{Config.Restapi.Url}/room/#{rid}", (e, r, body) =>
+            if not e?
+                Request.get "#{Config.Restapi.Url}/user/#{uid}", (e, r, body) =>
+                    body = JSON.parse body
+                    if not e? and body.id_room is rid
+                        @acceptSock uid, rid, sock
+
+    acceptSock : (uid, rid, sock) =>
+        sock.onmessage   = @onmessage
+        @send sock, { type : 'authenticated' }
+        if not @socks[rid]?
+            @socks[rid] = { }
+        else
+            peers = []
+            for uid of @socks[rid]
+                peers.push uid
+            @send sock, { type : 'peers' , params : { 'peers' : peers } }
+        @socks[rid][uid] = sock
+
+    onmessage : () =>
+
+    send : (sock, message) =>
+        sock.send JSON.stringify message
+
+    start : () =>
+        @server = new Ws {
+            server : (Http.createServer (req, res) ->).listen Config.Websocket.Port, () =>
+                console.log "Server ready on port #{Config.Websocket.Port}"
+        }
+        @server.on 'connection', @onConnection
+
+do (new Websocket).start


Confirm changed to alert

Confirm changed to alert

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


initial

initial

error: pathspec 'ranked-model-sortable.coffee' did not match any file(s) known to git

--- ranked-model-sortable.coffee
+++ ranked-model-sortable.coffee
@@ -0,0 +1,43 @@
+#= require jquery-ui/sortable
+jQuery(document).ready ($) ->
+
+  $("[data-ranked-model-sortable]").each ->
+
+    $sortable = $(this)
+    rms       = "ranked-model-sortable"
+    model     = $sortable.data("#{rms}-model")
+    attribute = $sortable.data("#{rms}-attribute")
+    $handle   = $sortable.find("[data-#{rms}-handle]")
+    base_post_url = $sortable.data("#{rms}-base-post-url")
+
+    post_url = (i) ->
+      "#{base_post_url}/#{i}"
+
+    get_data = (index) ->
+      obj = {}
+      obj["_method"] = "PATCH"
+      obj["#{model}[#{attribute}]"] = index
+      obj
+
+    csrf_token = ->
+      $("meta[name='csrf-token']").attr("content")
+
+    set_request_header = (jqxhr) ->
+      jqxhr.setRequestHeader "X-CSRF-Token", csrf_token()
+
+    stop = (e, ui) ->
+      id = ui.item.data("#{rms}-id")
+      index = ui.item.index()
+
+      jqxhr = $.ajax
+        type: "POST"
+        beforeSend: set_request_header
+        url: post_url(id)
+        data: get_data(index)
+
+      jqxhr.fail ->
+        $sortable.sortable "cancel"
+
+    $sortable.sortable
+      handle: $handle
+      stop: stop


Fix test that did not work with new CoffeeScript

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


Tweak

Tweak

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


Fix reloading

Fix reloading


reset the localization manager when locale change

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


Commit missing shim

Commit missing shim

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

--- src/install.coffee
+++ src/install.coffee
@@ -0,0 +1,2 @@
+import {install} from './sake'
+install()


But syntactically correct too

But syntactically correct too

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/mantacode/ftoggle-cli.git/'


I didn't know that!

I didn't know that!

error: pathspec 'scripts/i-didnt-know-that.coffee' did not match any file(s) known to git

--- scripts/i-didnt-know-that.coffee
+++ scripts/i-didnt-know-that.coffee
@@ -0,0 +1,3 @@
+module.exports = (robot) ->
+  robot.hear /i didn't know that/i, (msg) ->
+    msg.send "http://i.imgur.com/OLdNS.jpg"


Fix focus on retina displays

Fix focus on retina displays

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


Added another check to the recruit unsubscribe test, to make sure it doesn't affect other subscriptions.

--- test/server/functional/auth.spec.coffee
+++ test/server/functional/auth.spec.coffee
@@ -152,4 +152,5 @@
         expect(response.statusCode).toBe(200)
         user = User.findOne(joe.get('_id')).exec (err, user) ->
           expect(user.get('emails').recruitNotes.enabled).toBe(false)
+          expect(user.isEmailSubscriptionEnabled('generalNews')).toBeTruthy()
           done()


Added diagnostic study datatype

Added diagnostic study datatype

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

--- app/assets/javascripts/datatypes/diagnosticstudy.js.coffee
+++ app/assets/javascripts/datatypes/diagnosticstudy.js.coffee
@@ -0,0 +1,292 @@
+###
+@namespace scoping into the CQL_QDM namespace
+###
+@CQL_QDM ||= {}
+
+
+###
+Data elements that meet criteria using this datatype should document an
+unexpected or dangerous reaction to the diagnostic study indicated by the QDM
+category and its corresponding value set.
+###
+class CQL_QDM.DiagnosticStudyAdverseEvent
+  constructor: (@entry) ->
+    @_radiationDosage = @entry.radiation_dose
+    @_radiationDuration = @entry.radiation_duration
+    @_reaction = @entry.reaction
+    @_startDatetime = @entry.start_time
+    @_stopDatetime = @entry.end_time
+
+  ###
+  @returns {Quantity}
+  ###
+  radiationDosage: ->
+    cql.Quantity(@_radiationDosage['unit'], @_radiationDosage['value'])
+
+  ###
+  @returns {Quantity}
+  ###
+  radiationDuration: ->
+    cql.Quantity(@_radiationDuration['unit'], @_radiationDuration['value'])
+
+  ###
+  @returns {Code}
+  ###
+  reaction: ->
+    cql.Code(@_reaction.code, @_reaction.code_system)
+
+  ###
+  @returns {Date}
+  ###
+  startDatetime: ->
+    cql.DateTime.fromDate(moment.utc(@_startDatetime, 'X').toDate())
+
+  ###
+  @returns {Date}
+  ###
+  stopDatetime: ->
+    cql.DateTime.fromDate(moment.utc(@_stopDatetime, 'X').toDate())
+
+
+###
+Data elements that meet criteria using this datatype should document a reaction
+in specific patients who have a low threshold to the normal reported or
+expected reactions of the diagnostic study indicated by the QDM category and its
+corresponding value set.
+###
+class CQL_QDM.DiagnosticStudyIntolerance
+  constructor: (@entry) ->
+    @_radiationDosage = @entry.radiation_dose
+    @_radiationDuration = @entry.radiation_duration
+    @_reaction = @entry.reaction
+    @_startDatetime = @entry.start_time
+    @_stopDatetime = @entry.end_time
+
+  ###
+  @returns {Quantity}
+  ###
+  radiationDosage: ->
+    cql.Quantity(@_radiationDosage['unit'], @_radiationDosage['value'])
+
+  ###
+  @returns {Quantity}
+  ###
+  radiationDuration: ->
+    cql.Quantity(@_radiationDuration['unit'], @_radiationDuration['value'])
+
+  ###
+  @returns {Code}
+  ###
+  reaction: ->
+    cql.Code(@_reaction.code, @_reaction.code_system)
+
+  ###
+  @returns {Date}
+  ###
+  startDatetime: ->
+    cql.DateTime.fromDate(moment.utc(@_startDatetime, 'X').toDate())
+
+  ###
+  @returns {Date}
+  ###
+  stopDatetime: ->
+    cql.DateTime.fromDate(moment.utc(@_stopDatetime, 'X').toDate())
+
+
+###
+Data elements that meet criteria using this datatype should document a request
+by a clinician or appropriately licensed care provider to an appropriate
+provider or organization to perform the diagnostic study indicated by the QDM
+category and its corresponding value set. The request may be in the form of a
+consultation or a direct order to the organization that performs the diagnostic
+study. Diagnostic studies are those that are not performed in the clinical
+laboratory. Such studies include but are not limited to imaging studies,
+cardiology studies (electrocardiogram, treadmill stress testing), pulmonary
+function testing, vascular laboratory testing, and others.
+
+The start and stop datetime of Medication, Order reflects the
+“author time” of the record in QRDA. This corresponds to when the order was
+signed.
+###
+class CQL_QDM.DiagnosticStudyOrder
+  constructor: (@entry) ->
+    @_method = @entry.method
+    @_negationRationale = @entry.negationRationale
+    @_radiationDosage = @entry.radiation_dose
+    @_radiationDuration = @entry.radiation_duration
+    @_reason = @entry.reason
+    @_startDatetime = @entry.start_time
+    @_stopDatetime = @entry.end_time
+
+  ###
+  @returns {Code}
+  ###
+  method: ->
+    cql.Code(@_method.code, @_method.code_system)
+
+  ###
+  @returns {Code}
+  ###
+  negationRationale: ->
+    cql.Code(@_negationRationale.code, @_negationRationale.code_system)
+
+  ###
+  @returns {Quantity}
+  ###
+  radiationDosage: ->
+    cql.Quantity(@_radiationDosage['unit'], @_radiationDosage['value'])
+
+  ###
+  @returns {Quantity}
+  ###
+  radiationDuration: ->
+    cql.Quantity(@_radiationDuration['unit'], @_radiationDuration['value'])
+
+  ###
+  @returns {Code}
+  ###
+  reason: ->
+    cql.Code(@_reason.code, @_reason.code_system)
+
+  ###
+  @returns {Date}
+  ###
+  startDatetime: ->
+    cql.DateTime.fromDate(moment.utc(@_startDatetime, 'X').toDate())
+
+  ###
+  @returns {Date}
+  ###
+  stopDatetime: ->
+    cql.DateTime.fromDate(moment.utc(@_stopDatetime, 'X').toDate())
+
+
+###
+Data elements that meet criteria using this datatype should document the
+completion of the diagnostic study indicated by the QDM category and its
+corresponding value set.
+###
+class CQL_QDM.DiagnosticStudyPerformed
+  constructor: (@entry) ->
+    @_facilityLocation = @entry.facility_location
+    @_method = @entry.method
+    @_negationRationale = @entry.negationRationale
+    @_radiationDosage = @entry.radiation_dose
+    @_radiationDuration = @entry.radiation_duration
+    @_reason = @entry.reason
+    @_result = @entry.result
+    @_startDatetime = @entry.start_time
+    @_status = @entry.status
+    @_stopDatetime = @entry.end_time
+
+  ###
+  @returns {Code}
+  ###
+  facilityLocation: ->
+    cql.Code(@_facilityLocation.code, @_facilityLocation.code_system)
+
+  ###
+  @returns {Code}
+  ###
+  method: ->
+    cql.Code(@_method.code, @_method.code_system)
+
+  ###
+  @returns {Code}
+  ###
+  negationRationale: ->
+    cql.Code(@_negationRationale.code, @_negationRationale.code_system)
+
+  ###
+  @returns {Quantity}
+  ###
+  radiationDosage: ->
+    cql.Quantity(@_radiationDosage['unit'], @_radiationDosage['value'])
+
+  ###
+  @returns {Quantity}
+  ###
+  radiationDuration: ->
+    cql.Quantity(@_radiationDuration['unit'], @_radiationDuration['value'])
+
+  ###
+  @returns {Code}
+  ###
+  reason: ->
+    cql.Code(@_reason.code, @_reason.code_system)
+
+  ###
+  @returns {Code}
+  ###
+  result: ->
+    cql.Code(@_result.code, @_result.code_system)
+
+  ###
+  @returns {Date}
+  ###
+  startDatetime: ->
+    cql.DateTime.fromDate(moment.utc(@_startDatetime, 'X').toDate())
+
+  ###
+  @returns {Code}
+  ###
+  status: ->
+    cql.Code(@_status.code, @_status.code_system)
+
+  ###
+  @returns {Date}
+  ###
+  stopDatetime: ->
+    cql.DateTime.fromDate(moment.utc(@_stopDatetime, 'X').toDate())
+
+
+###
+Data elements that meet criteria using this datatype should document a
+recommendation for a request by a clinician or appropriately licensed care
+provider to an appropriate provider or organization to perform the diagnostic
+study indicated by the QDM category and its corresponding value set.
+###
+class CQL_QDM.DiagnosticStudyRecommended
+  constructor: (@entry) ->
+    @_method = @entry.method
+    @_negationRationale = @entry.negationRationale
+    @_radiationDosage = @entry.radiation_dose
+    @_radiationDuration = @entry.radiation_duration
+    @_startDatetime = @entry.start_time
+    @_stopDatetime = @entry.end_time
+
+  ###
+  @returns {Code}
+  ###
+  method: ->
+    cql.Code(@_method.code, @_method.code_system)
+
+  ###
+  @returns {Code}
+  ###
+  negationRationale: ->
+    cql.Code(@_negationRationale.code, @_negationRationale.code_system)
+
+  ###
+  @returns {Quantity}
+  ###
+  radiationDosage: ->
+    cql.Quantity(@_radiationDosage['unit'], @_radiationDosage['value'])
+
+  ###
+  @returns {Quantity}
+  ###
+  radiationDuration: ->
+    cql.Quantity(@_radiationDuration['unit'], @_radiationDuration['value'])
+
+  ###
+  @returns {Date}
+  ###
+  startDatetime: ->
+    cql.DateTime.fromDate(moment.utc(@_startDatetime, 'X').toDate())
+
+  ###
+  @returns {Date}
+  ###
+  stopDatetime: ->
+    cql.DateTime.fromDate(moment.utc(@_stopDatetime, 'X').toDate())


Only check up/down keys when results are displayed

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


Reviews page title.

Reviews page title.

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


Being a tiny bit more idiomatic about CoffeeScript ranges.

--- app/views/editor/level/components/ComponentsTabView.coffee
+++ app/views/editor/level/components/ComponentsTabView.coffee
@@ -52,7 +52,7 @@
       return res

     res = {}
-    res[treemaData[key].original] = treemaData[key] for key in [0..treemaData.length-1]
+    res[treemaData[key].original] = treemaData[key] for key in [0 ... treemaData.length]
     treemaData = (value for key, value of res)  # Removing duplicates from treemaData

     treemaOptions =


Started converting the djtch plugin to CoffeeScript

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

--- app/assets/javascripts/jquery.djtch.js.coffee
+++ app/assets/javascripts/jquery.djtch.js.coffee
@@ -0,0 +1,140 @@
+###
+ jquery.djtch.js - Dynamic Javascript Templating in Client-side HTML
+
+ Requires jquery (>= 1.3) and jquery.forms
+
+ @author olaf.delgado-friedrichs@anu.edu.au
+###
+
+$ = jQuery
+
+$.djtch =
+  options:
+    preUpdateHook: null
+    postUpdateHook: null
+
+  setup: (options) -> $.extend(this.options, options || {})
+
+anchor = (seed, item) ->
+  id = $(item).attr('id')
+  pattern = '.dj-anchor' + (if id then '#' + id else '')
+
+  while context and context.length > 0
+    res = if context.is(pattern) then context else context.find(pattern)
+    if res and res.length > 0
+      return res
+    if !context.parent()
+      break;
+    context = context.parent().closest('.dj-context,.dj-anchor')
+
+  $(pattern)
+
+content = (item) ->
+  if $(item).hasClass('.dj-children')
+    $(item).children()
+  else
+    $(item)
+
+update = (seed, html) ->
+  newStuff = $(html)
+
+  if $.djtch.options.preUpdateHook
+    $.djtch.options.preUpdateHook(newStuff)
+
+  newStuff.djtchEnable()
+
+  newStuff.find('.dj-replace').each ->
+    anchor(seed, this).replaceWith(content(this))
+
+  newStuff.find('.dj-append').each -> anchor(seed, this).append(content(this))
+
+  newStuff.find('.dj-prepend').each -> anchor(seed, this).prepend(content(this))
+
+  newStuff.find('.dj-after').each -> anchor(seed, this).after(content(this))
+
+  newStuff.find('.dj-before').each -> anchor(seed, this).before(content(this))
+
+  if $.djtch.options.postUpdateHook
+    $.djtch.options.postUpdateHook()
+
+handlers =
+  linkClicked: ->
+    link = $(this)
+    $.get(
+      link.attr('href'),
+      (html) ->
+        update(link, html)
+        if link.hasClass('.dj-once')
+          link.unbind('click'))
+    false
+
+  deleteLinkClicked: ->
+    link = $(this)
+    if confirm(link.attr('confirm') || 'Really delete this?')
+      $.post(
+        link.attr('href'),
+        $.param { '_method': 'delete' },
+        (html, status) ->
+          update(link, html))
+    false
+
+  activeScroll: (event) ->
+    win = $(window)
+    link = event.data
+    doc = $(document)
+
+    if link && link.attr('href')
+      if win.scrollTop() + 1.1 * win.height() > doc.height()
+        stopScrollHandler()
+        $.get(
+          link.attr('href'),
+          (html) ->
+            update(link, html)
+        )
+    else
+      stopScrollHandler()
+
+    false
+
+  formSubmitted: ->
+    input = $(this)
+    form = input.closest('form')
+    form.append("<input type='hidden' name='" + input.attr('name') +
+                "' value='" + input.attr('value') + "' class='tmp'>")
+    form.ajaxSubmit(
+       url: form.attr('action')
+       success: (html, status) ->
+         $("input.tmp", form).remove()
+         update(form, html)
+    )
+    false
+
+stopScrollHandler = ->
+  $(window).unbind('scroll', handlers.activeScroll)
+
+$.fn.extend
+  djtchLink: -> this.click(handlers.linkClicked)
+
+  djtchDeleteLink: -> this.click(handlers.deleteLinkClicked)
+
+  djtchOnScrollLink: ->
+    if this.length > 0
+      ev = 'scroll'
+      fn = handlers.activeScroll
+      $(window)
+        .unbind(ev, fn)
+        .bind(ev, this, fn)
+        .triggerHandler(ev)
+    this.hide().after(this.text())
+
+  djtchForm: ->
+    this.find('input[type=submit]')
+      .click(handlers.formSubmitted).end()
+
+  djtchEnable: ->
+    this
+      .find('.dj-link').djtchLink().end()
+      .find('.dj-delete').djtchDeleteLink().end()
+      .find('.dj-scroll').djtchOnScrollLink().end()
+      .find('.dj-form').djtchForm().end()
+


Added chat for hubot plugin

Added chat for hubot plugin

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

--- src/scripts/chat.coffee
+++ src/scripts/chat.coffee
@@ -0,0 +1,10 @@
+# Start up some wonderful chats with conversation starters
+#
+# chat - Tell hubot to make something fun to chat about
+# Conversation starters graciously provided by http://Chatoms.com
+
+module.exports = (robot) ->
+  robot.respond /chat/i, (msg) ->
+    msg.http("http://chatoms.com/chatom.json?Normal=1&Fun=2&Philosophy=3&Out+There=4&Love=5&Personal=7")
+      .get() (err, res, body) ->
+        msg.send JSON.parse(body).text


DRY up console spies

DRY up console spies

--- spec/apm-cli-spec.coffee
+++ spec/apm-cli-spec.coffee
@@ -8,13 +8,13 @@

 describe 'apm command line interface', ->
   beforeEach ->
+    spyOn(console, 'log')
+    spyOn(console, 'error')
     spyOn(process.stdout, 'write')
     spyOn(process.stderr, 'write')

   describe 'when no arguments are present', ->
     it 'prints a usage message', ->
-      spyOn(console, 'log')
-      spyOn(console, 'error')
       apm.run([])
       expect(console.log).not.toHaveBeenCalled()
       expect(console.error).toHaveBeenCalled()
@@ -22,8 +22,6 @@

   describe 'when the version flag is specified', ->
     it 'prints a usage message', ->
-      spyOn(console, 'log')
-      spyOn(console, 'error')
       apm.run(['-h'])
       expect(console.log).not.toHaveBeenCalled()
       expect(console.error).toHaveBeenCalled()
@@ -31,8 +29,6 @@

   describe 'when the version flag is specified', ->
     it 'prints the version', ->
-      spyOn(console, 'log')
-      spyOn(console, 'error')
       apm.run(['-v'])
       expect(console.error).not.toHaveBeenCalled()
       expect(console.log).toHaveBeenCalled()
@@ -40,8 +36,6 @@

   describe 'when an unrecognized command is specified', ->
     it 'prints an error message', ->
-      spyOn(console, 'log')
-      spyOn(console, 'error')
       apm.run(['this-will-never-be-a-command'])
       expect(console.log).not.toHaveBeenCalled()
       expect(console.error).toHaveBeenCalled()
@@ -62,9 +56,6 @@
       atomHome = temp.mkdirSync('apm-home-dir-')
       process.env.ATOM_HOME = atomHome
       process.env.ATOM_NODE_URL = "http://localhost:3000/node"
-
-      spyOn(console, 'log')
-      spyOn(console, 'error')

     afterEach ->
       server.close()


Ignore test

Ignore test

--- spec/project-spec.coffee
+++ spec/project-spec.coffee
@@ -349,7 +349,8 @@
           expect(paths[0]).toBe filePath
           expect(matches.length).toBe 1

-      it "excludes values in core.ignoredNames", ->
+      xit "excludes values in core.ignoredNames", ->
+        # FIXME: this test doesnt make any sense. Why should it ignore the whole project dir?
         projectPath = '/tmp/atom-tests/folder-with-dot-git/.git'
         filePath = path.join(projectPath, 'test.txt')
         fs.writeSync(filePath, 'match this')


Updated the url for the DB backup in the python installer

Updated the url for the DB backup in the python installer. I had updated
it for the Win-setup under #1535

--- scripts/runAfterGit.coffee
+++ scripts/runAfterGit.coffee
@@ -13,8 +13,8 @@

 ' if '--help' in process.argv

-#TODO: MD5 Verification, using http://23.21.59.137/dump.md5 using digest stream https://github.com/jeffbski/digest-stream
-dbDump = 'http://23.21.59.137/dump.tar.gz' # Don't change this unless you know what you're doing
+#TODO: MD5 Verification, using http://54.91.159.37/dump.md5 using digest stream https://github.com/jeffbski/digest-stream
+dbDump = 'http://54.91.159.37/dump.tar.gz' # Don't change this unless you know what you're doing
 dbLocalPath = '../temp'

 fs = require 'fs'


patched pty.js to prevent zombies

patched pty.js to prevent zombies

--- server.coffee
+++ server.coffee
@@ -3,6 +3,16 @@
 process.title = 'console-web-proxy'
 tty = require 'tty.js'
 url = require 'url'
+
+# PATCH pty.js
+# see https://github.com/chjj/pty.js/issues/58
+pty = require 'tty.js/node_modules/pty.js'
+waitpid = require 'waitpid'
+pty.Terminal.prototype.kill = (sig='SIGTERM') ->
+  try
+    process.kill @pid, sig
+    waitpid @pid
+# ENDPATCH

 getShellArgs = (session) ->
   url = url.parse session.req.headers.referer, true


added start slack noti [deploy:production]

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


updated ami

updated ami

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


Fix msg to res.

Fix msg to res.

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


A script. For tweeting.

A script. For tweeting.

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

--- scripts/twitter.coffee
+++ scripts/twitter.coffee
@@ -0,0 +1,12 @@
+t = require '../lib/twitter'
+
+module.exports = (robot) ->
+  robot.respond /tweet(\s+(me)?)?\s+(.{3,})$/i, (msg) ->
+    who = msg.message.user.name or "Some-Idiot"
+    what = msg.match[3].trim()
+
+    t.tweet "'#{what}' -#{who}", (error, tweet, url) ->
+      if error
+        return msg.reply "The internet rejected you as follows: #{error[0].message}"
+
+      msg.send url


added exports stuff for node

added exports stuff for node

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


Added Atom snippets.

Added Atom snippets.

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

--- atom/snippets.cson
+++ atom/snippets.cson
@@ -0,0 +1,45 @@
+# Your snippets
+#
+# Atom snippets allow you to enter a simple prefix in the editor and hit tab to
+# expand the prefix into a larger code block with templated values.
+#
+# You can create a new snippet in this file by typing "snip" and then hitting
+# tab.
+#
+# An example CoffeeScript snippet to expand log to console.log:
+#
+# '.source.coffee':
+#   'Console log':
+#     'prefix': 'log'
+#     'body': 'console.log $1'
+#
+# Each scope (e.g. '.source.coffee' above) can only be declared once.
+#
+# This file uses CoffeeScript Object Notation (CSON).
+# If you are unfamiliar with CSON, you can read more about it in the
+# Atom Flight Manual:
+# http://flight-manual.atom.io/using-atom/sections/basic-customization/#_cson
+
+'.source.gfm':
+  'Setup Beat':
+    'prefix': 'setup'
+    'body': '<!-- SETUP: $1 \n
+      -->'
+  'Payoff Beat':
+    'prefix': 'payoff'
+    'body': '<!-- PAYOFF: $1 \n
+      -->'
+  'Story Front Matter':
+    'prefix': 'storyhead'
+    'body': '---\n
+    title: \'$1\'\n
+    author: David L. Day\n
+    street: 395 Lyncroft Drive\n
+    city: Gahanna\n
+    state: OH\n
+    zip: 43230\n
+    email: david@davidlday.com\n
+    phone: 1-614-795-3329\n
+    synopsis: |\n
+      \n
+    ---'


actually add placebo file.

actually add placebo file.

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

--- code/placebo.coffee
+++ code/placebo.coffee
@@ -0,0 +1,25 @@
+_       = require 'underscore'
+
+Instance = (require 'instance').Instance
+
+exports.Placebo = class Placebo extends Instance
+  @instances: []
+
+  @create: (config) ->
+    instance = new Placebo config
+    @instances.push instance
+    instance
+
+  @destroy: (instance) ->
+    @instances.pop instance
+
+  # List instances in the cloud
+  @list: ->
+    _.clone @instances
+
+  start: ->
+
+  stop: ->
+
+  state: ->
+


Update availability filter

Update availability filter

[#90491298]

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


save improve

save improve

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


Resurrection: new groupscontroller added

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

--- client/Main/maincontroller/groupscontroller.coffee
+++ client/Main/maincontroller/groupscontroller.coffee
@@ -0,0 +1,97 @@
+class GroupsController extends KDController
+
+  constructor:(options = {}, data)->
+
+    super options, data
+
+    @isReady       = no
+
+    @utils.defer @bound 'init'
+
+  init:->
+    @groups = {}
+    @currentGroupData = new GroupData
+
+  getCurrentGroup:->
+    throw 'FIXME: array should never be passed'  if Array.isArray @currentGroupData.data
+    return @currentGroupData.data
+
+  openGroupChannel:(group, callback=->)->
+    @groupChannel = KD.remote.subscribe "group.#{group.slug}",
+      serviceType : 'group'
+      group       : group.slug
+      isExclusive : yes
+
+    @forwardEvent @groupChannel, "MemberJoinedGroup"
+    @forwardEvent @groupChannel, "FollowHappened"
+
+    @groupChannel.once 'setSecretNames', callback
+
+  changeGroup:(groupName='', callback=->)->
+
+    groupName or= 'koding' # KD.defaultSlug
+    return callback()  if @currentGroupName is groupName
+
+    oldGroupName        = @currentGroupName
+    @currentGroupName   = groupName
+
+    unless groupName is oldGroupName
+      KD.remote.cacheable groupName, (err, models)=>
+        if err then callback err
+        else if models?
+          [group] = models
+          if group.bongo_.constructorName isnt 'JGroup'
+            @isReady = yes
+          else
+            @setGroup groupName
+            @currentGroupData.setGroup group
+            @isReady = yes
+            callback null, groupName, group
+            @emit 'GroupChanged', groupName, group
+            @openGroupChannel group, => @emit 'GroupChannelReady'
+
+  getUserArea:->
+    @userArea ? group:
+      if KD.config.entryPoint?.type is 'group'
+      then KD.config.entryPoint.slug
+      else (KD.getSingleton 'groupsController').currentGroupName
+
+  setUserArea:(userArea)->
+    @userArea = userArea
+
+  getGroupSlug:-> @currentGroupName
+
+  setGroup:(groupName)->
+    @currentGroupName = groupName
+    @setUserArea {
+      group: groupName, user: KD.whoami().profile.nickname
+    }
+
+  joinGroup:(group, callback)->
+    group.join (err, response)=>
+      unless err
+        callback err, response
+        KD.track "Groups", "JoinedGroup", group.slug
+        KD.getSingleton('mainController').emit 'JoinedGroup'
+
+  acceptInvitation:(group, callback)->
+    KD.whoami().acceptInvitation group, (err, res)=>
+      mainController = KD.getSingleton "mainController"
+      mainController.once "AccountChanged", callback.bind this, err, res
+      mainController.accountChanged KD.whoami()
+
+  ignoreInvitation:(group, callback)->
+    KD.whoami().ignoreInvitation group, callback
+
+  cancelGroupRequest:(group, callback)->
+    KD.whoami().cancelRequest group, callback
+
+  cancelMembershipPolicyChange:(policy, membershipPolicyView, modal)->
+    membershipPolicyView.enableInvitations.setValue policy.invitationsEnabled
+
+  updateMembershipPolicy:(group, policy, formData, membershipPolicyView, callback)->
+    group.modifyMembershipPolicy formData, (err)->
+      unless err
+        policy.emit 'MembershipPolicyChangeSaved'
+        new KDNotificationView {title:"Membership policy has been updated."}
+      KD.showError err


marker_spec

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

--- spec_app/spec/javascripts/up/marker_spec.js.coffee
+++ spec_app/spec/javascripts/up/marker_spec.js.coffee
@@ -0,0 +1,14 @@
+describe 'up.marker', ->
+
+  describe '[up-marker]', ->
+
+    it 'hides empty containers', ->
+      $element = affix('.element[up-marker]')
+      up.ready($element)
+      expect($element).not.toBeVisible()
+
+    it 'does not hide empty containers', ->
+      $element = affix('.element[up-marker]').text('content')
+      up.ready($element)
+      expect($element).toBeVisible()
+


Default first argument to empty hash

Default first argument to empty hash

--- src/app/root-view.coffee
+++ src/app/root-view.coffee
@@ -37,7 +37,7 @@
     panes = deserialize(panes) if panes?.deserializer is 'PaneContainer'
     new RootView({panes, fullScreen})

-  initialize: ({fullScreen})->
+  initialize: ({fullScreen}={})->
     @on 'focus', (e) => @handleFocus(e)
     @subscribe $(window), 'focus', (e) =>
       @handleFocus(e) if document.activeElement is document.body


Fully fix 3646b8c999a9e4b864e8c529f84b64a3c2c74ff0.

--- background_scripts/completion.coffee
+++ background_scripts/completion.coffee
@@ -510,21 +510,19 @@
       highlightTerms: not haveCompletionEngine
       isSearchSuggestion: true

-    mkSuggestion = do =>
-      count = 0
-      (suggestion) =>
-        url = Utils.createSearchUrl suggestion, searchUrl
-        @previousSuggestions[url] = new Suggestion
-          queryTerms: queryTerms
-          type: description
-          url: url
-          title: suggestion
-          insertText: suggestion
-          highlightTerms: false
-          highlightTermsExcludeUrl: true
-          isCustomSearch: custom
-          relevancyFunction: @computeRelevancy
-          relevancyData: factor
+    mkSuggestion = (suggestion) =>
+      url = Utils.createSearchUrl suggestion, searchUrl
+      @previousSuggestions[url] = new Suggestion
+        queryTerms: queryTerms
+        type: description
+        url: url
+        title: suggestion
+        insertText: suggestion
+        highlightTerms: false
+        highlightTermsExcludeUrl: true
+        isCustomSearch: custom
+        relevancyFunction: @computeRelevancy
+        relevancyData: factor

     cachedSuggestions =
       if haveCompletionEngine then CompletionSearch.complete searchUrl, queryTerms else null


filereading attempt 21

filereading attempt 21

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


Shrink the size of the regex by using \w

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


fix toc overlay to show once

fix toc overlay to show once

--- src/coffee/github.coffee
+++ src/coffee/github.coffee
@@ -54,7 +54,7 @@
     $('.codecov-removable').remove()
     if @page is 'tree'
       replacement = "/#{self.slug}/blob/#{$('.file-navigation .repo-root a:first').attr('data-branch')}/"
-      $('.commit-tease .right').append("""#{res['report']['coverage'].toFixed(2)}%""")
+      $('.commit-tease span.right').append("""#{res['report']['coverage'].toFixed(2)}%""")
       $('.file-wrap tr:not(.warning):not(.up-tree)').each ->
         filepath = $('td.content a', @).attr('href')?.replace(replacement, '')
         if filepath


Fix parsing

Fix parsing

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


added the script

added the script

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

--- src/branch-name.coffee
+++ src/branch-name.coffee
@@ -0,0 +1,45 @@
+# Description:
+#   Vote for a name for a branch
+#
+# Commands:
+#   <number>_<name> - vote for a name
+#   hubot brach votes <number> - show votes counts
+
+module.exports = (robot) ->
+
+  robot.hear regex, (msg) ->
+    name = msg.match[1]
+    number = name.match(/^\d*/)
+    @robot.brain.data.votes ||= {}
+    @robot.brain.data.votes[number] ||= {}
+
+    votes = @robot.brain.data.votes[number][name]
+    votes = if votes? then votes + 1 else 1
+    @robot.brain.data.votes[number][name] = votes
+
+    msg.send "#{votes} votes for #{name}"
+
+  robot.respond /branch votes (.*)$/i, (msg) ->
+    number = msg.match[1]
+
+    unless @robot.brain.data.votes?
+      msg.send 'No votes!'
+      return
+    unless @robot.brain.data.votes[number]?
+      msg.send "No votes for #{number}!"
+      return
+
+    votesCounts = []
+    for key in Object.keys(@robot.brain.data.votes[number])
+      votesCounts.push [key, @robot.brain.data.votes[number][key]]
+    votesCounts.sort (a,b) -> a[1] - b[1]
+
+    for count in votesCounts
+      msg.send "#{count[1]} votes for #{count[0]}"
+
+regex = new RegExp /\s*(\d+_\w[\w_]*)\s*/
+
+
+
+
+


output

output

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

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


Fix the Empty Button bug (#1539)

Fix the Empty Button bug (#1539)

When navigating to a button, descriptive text didn't present to screen reader users to indicate the function of the button.
Therefore I fixed this bug by setting the aria-label according to the status of the attribute aria-expanded.

--- src/scripts/modules/media/body/body.coffee
+++ src/scripts/modules/media/body/body.coffee
@@ -469,7 +469,12 @@
     toggleSolution: (e) ->
       $solution = $(e.currentTarget).closest('.solution, [data-type="solution"]')
       $solution.toggleClass('ui-solution-visible')
-
+      if $solution.hasClass('ui-solution-visible')
+        $solution.attr('aria-expanded',true)
+        $solution.attr('aria-label',"hide solution")
+      else
+        $solution.attr('aria-expanded',false)
+        $solution.attr('aria-label',"show solution")
     onEditable: () -> @$el.find('.media-body').addClass('draft')

     onUneditable: () ->


selecting project in dropdown takes user to the correct project

--- app/assets/javascripts/project.js.coffee
+++ app/assets/javascripts/project.js.coffee
@@ -56,6 +56,9 @@
   _projectSelectDropdown: ->
     new ProjectSelect()

+    $('.project-item-select').on 'click', ->
+      window.location = $(this).val()
+
     $('.js-projects-dropdown-toggle').on 'click', (e) ->
       e.preventDefault()


Update gulp bump task.

Update gulp bump task.

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


Component that forwards each item in an array as a separate packet

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

--- src/components/SplitArray.coffee
+++ src/components/SplitArray.coffee
@@ -0,0 +1,15 @@
+noflo = require "noflo"
+
+class SplitArray extends noflo.Component
+    constructor: ->
+        @inPorts =
+            in: new noflo.Port()
+        @outPorts =
+            out: new noflo.Port()
+
+        @inPorts.in.on "data", (data) =>
+            @outPorts.out.send item for item in data
+        @inPorts.in.on "disconnect", (data) =>
+            @outPorts.out.disconnect()
+
+exports.getComponent = -> new SplitArray


Adding customer endpoints

Adding customer endpoints

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

--- src/features/customer.coffee
+++ src/features/customer.coffee
@@ -0,0 +1,8 @@
+	`// @if TARGET=='nodejs'
+	`
+	class Customer extends Abstract
+
+		endpoint: 'customers'
+
+	`// @endif
+	`


Add semicolons between concatenated javascripts

--- src/fs_utils/generate.coffee
+++ src/fs_utils/generate.coffee
@@ -124,6 +124,7 @@
   debug "Concatenating #{files.map((_) -> _.path).join(', ')} to #{path}"
   files.forEach (file) ->
     root.add file.node
+    root.add ';' if type is javascript
     #debug JSON.stringify(file.node)
     root.setSourceContent file.node.source, file.source


fix back to first box

fix back to first box

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


Icon component

Icon component

error: pathspec 'client/lanes/components/shared/Icon.cjsx' did not match any file(s) known to git

--- client/lanes/components/shared/Icon.cjsx
+++ client/lanes/components/shared/Icon.cjsx
@@ -0,0 +1,12 @@
+class Lanes.Components.Icon extends Lanes.React.Component
+
+    propTypes:
+        type: React.PropTypes.string.isRequired
+        animated: React.PropTypes.bool
+
+    render: ->
+        classes = _.classnames(
+            'icon', "icon-#{@props.type}",
+            {"icon-pulse": @props.animated}
+        )
+        <i className={classes} />


Show before after changes of Camera settings in logs. (#1859)

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


Fix duplicate title ID protection

Fix duplicate title ID protection

--- resources/assets/coffee/_classes/wiki.coffee
+++ resources/assets/coffee/_classes/wiki.coffee
@@ -82,10 +82,11 @@
       titleId = _.kebabCase title

       # ensure no duplicate ids
-      titleIds[titleId] ?= 1
-      if titleIds[titleId] > 0
+      if titleIds[titleId]?
         titleIds[titleId] += 1
         titleId = "#{titleId}.#{titleIds[titleId]}"
+      else
+        titleIds[titleId] = 1

       $link = $('<a>', class: 'wiki-toc-list__link js-wiki-spy-link', href: "##{titleId}").text(title)
       if currentLevel > 2


Fix args

Fix args


Sane error checking.

Sane error checking.

--- bokehjs/src/coffee/document.coffee
+++ bokehjs/src/coffee/document.coffee
@@ -573,7 +573,7 @@
       throw new Error("JSON object has wrong type #{typeof json}")
     py_version = json['version']
     versions_string = "Library versions: JS (#{js_version})  /  Python (#{py_version})"
-    if js_version.split('-')[0] != py_version.split('-')[0]
+    if js_version != py_version
       logger.warn("JS/Python version mismatch")
       logger.warn(versions_string)
     else


Move Scroller.init() up the handler stack.

Move scroller initialisation so that its key handlers are above insert
mode in the handler stack.  This ensures that the scroller sees keyup
events if we enter insert mode while continuous scrolling.

Fixes #1526.

--- content_scripts/vimium_frontend.coffee
+++ content_scripts/vimium_frontend.coffee
@@ -133,8 +133,6 @@
         keypress: (event) => onKeypress.call @, event
         keyup: (event) => onKeyup.call @, event

-      Scroller.init settings
-
   # Install the permanent modes.  The permanently-installed insert mode tracks focus/blur events, and
   # activates/deactivates itself accordingly.
   new BadgeMode
@@ -142,6 +140,7 @@
   new PassKeysMode
   new InsertMode permanent: true
   new GrabBackFocus
+  Scroller.init settings

 #
 # Complete initialization work that sould be done prior to DOMReady.


Use a boolean to track whether we are scrolling in CursorHider

--- content_scripts/vimium_frontend.coffee
+++ content_scripts/vimium_frontend.coffee
@@ -1073,20 +1073,20 @@
   # Hides the cursor when the browser scrolls, and prevent mouse from hovering while invisible
   #
   cursorHideStyle: null
+  isScrolling: false

   showCursor: -> @cursorHideStyle.remove()
   hideCursor: ->
     document.head.appendChild @cursorHideStyle unless @cursorHideStyle.parentElement

-  onMouseMove: (event) -> CursorHider.showCursor()
+  onMouseMove: (event) ->
+    if CursorHider.isScrolling # This event was caused by scrolling, don't show the cursor.
+      CursorHider.isScrolling = false
+    else
+      CursorHider.showCursor()
   onScroll: (event) ->
+    CursorHider.isScrolling = true
     CursorHider.hideCursor()
-
-    # Ignore next mousemove, caused by the scrolling, so the mouse doesn't re-show straight away.
-    window.removeEventListener "mousemove", CursorHider.onMouseMove
-    window.addEventListener "mousemove", ->
-      window.addEventListener "mousemove", CursorHider.onMouseMove
-      window.removeEventListener "mousemove", arguments.callee

   init: ->
     @cursorHideStyle = document.createElement("style")


Add strict checks for parameters of ON()

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/fulcrumapp/fulcrum-expressions.git/'


Bug fix - changing styles broke remove item function.

--- assets/coffeescript/pupil_store.coffee
+++ assets/coffeescript/pupil_store.coffee
@@ -153,7 +153,7 @@
         event.preventDefault()
         item = $(event.currentTarget)
         row = $(item).closest('.Cart-row')
-        container = $(row).closest('.Cart-container')
+        container = $(row).closest('.Cart-rowContainer')
         LocalStorage.expire($(row).attr('id'))

         # remove the row


permission

permission

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

--- src/core/permission.coffee
+++ src/core/permission.coffee
@@ -0,0 +1,16 @@
+class Permission
+
+  R     = 0   #GET
+  RW    = 1   #GET, POST
+  RWD   = 2
+  SUPER = 3
+
+
+
+  constructor: (pLevel) ->
+    @_pLevel = pLevel
+
+  @::__defineGetter__ 'level', () ->
+    @_pLevel
+
+module.exports = Permission


Add missing file

Add missing file

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

--- client/utils/load_indicator.coffee
+++ client/utils/load_indicator.coffee
@@ -0,0 +1,27 @@
+$ = require("jquery")
+
+class LoadIndicator
+  $win = $(window)
+
+  constructor: (@$el, opts={@delay})->
+    @delay ||= 0
+    @_pending = []
+
+  stop: ->
+    @$el.fadeOut()
+    @_timeout = clearTimeout(@_timeout)
+
+  showAfter: (ms)->
+    @_timeout = setTimeout((=> @show()), ms)
+
+  show: ->
+    @$el.fadeIn()
+
+  queue: (jqXHR)->
+    @showAfter(@delay) if @_pending.length == 0
+    @_pending.push(jqXHR) if @_pending.indexOf(jqXHR) == -1
+    jqXHR.always =>
+      @_pending.splice(@_pending.indexOf(jqXHR), 1)
+      @stop() if @_pending.length == 0
+
+  module.exports = LoadIndicator


added the refactored tutorial class

added the refactored tutorial class

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

--- app/assets/javascripts/lib/nypl_map_tutorial.coffee
+++ app/assets/javascripts/lib/nypl_map_tutorial.coffee
@@ -0,0 +1,61 @@
+class @NYPL_Map_Tutorial
+  constructor: (options) ->
+    @_parseOptions(options)
+    @_currentStep = 0
+    @intro = introJs()
+    @
+
+  _parseOptions: (options)=>
+    @opts = {}
+
+    # required stuff
+    @opts.highlightID = options.highlightID
+    @opts.highlightElement = $(options.highlightID)
+    @opts.steps = options.steps
+
+    # optional stuff
+    @opts.highlightclickFunction = options.highlightclickFunction if options.highlightclickFunction
+    @opts.changeFunction = options.changeFunction if options.changeFunction
+    @opts.exitFunction = options.exitFunction if options.exitFunction
+    @opts.ixactiveFunction = options.ixactiveFunction if options.ixactiveFunction
+    @opts.ixinactiveFunction = options.ixinactiveFunction if options.ixinactiveFunction
+
+  init: () =>
+    t = @
+    @intro.setOptions(
+      skipLabel: "Exit tutorial"
+      tooltipClass: "tutorial"
+      showStepNumbers: false
+      exitOnOverlayClick: false
+      steps: @opts.steps
+    ).onchange () ->
+      t._currentStep = t.intro._currentStep
+      onOverlay = (t.opts.steps[t._currentStep].element == t.opts.highlightElement[0])
+      # overriding some CSS
+      $(".introjs-helperLayer").removeClass("noMap")
+      $(".introjs-helperLayer").addClass("noMap") if !onOverlay
+      # end CSS stuff
+      t.opts.highlightElement.unbind('click')
+      t.opts.changeFunction() if t.opts.changeFunction
+      t.opts.highlightElement.on('click', t.opts.highlightclickFunction) if t.opts.highlightclickFunction && onOverlay
+      t.opts.ixinactiveFunction() if t.opts.ixinactiveFunction
+      t.opts.ixactiveFunction() if t.opts.steps[t.intro._currentStep].ixactive && t.opts.ixactiveFunction
+    .oncomplete () ->
+      t._currentStep = 0
+      t.opts.exitFunction()
+    .onexit () ->
+      t._currentStep = 0
+      t.opts.exitFunction()
+    .start()
+    @
+
+  exit: () ->
+    @intro.exit()
+
+  goToStep: (index) ->
+    @intro.goToStep(index)
+
+  getCurrentPolygonIndex: () ->
+    @opts.steps[@intro._currentStep].polygon_index
+
+#1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27


Set camera online when added from widget.


Set left as number without px suffix

Set left as number without px suffix

--- src/packages/wrap-guide/lib/wrap-guide-view.coffee
+++ src/packages/wrap-guide/lib/wrap-guide-view.coffee
@@ -38,7 +38,7 @@
     if column > 0
       columnWidth = @editor.charWidth * column
       if columnWidth < @editor.layerMinWidth or columnWidth < @editor.width()
-        @css('left', "#{columnWidth}px").show()
+        @css('left', columnWidth).show()
       else
         @hide()
     else


Added script to fetch Pokefacts

Added script to fetch Pokefacts

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

--- src/scripts/pokefacts.coffee
+++ src/scripts/pokefacts.coffee
@@ -0,0 +1,21 @@
+# Pokemon fun!
+#
+# pokefact - get a random pokefact!
+#
+# Developed by One Mighty Roar - http://github.com/onemightyroar
+
+module.exports = (robot) ->
+
+  robot.respond /pokefact/i, (msg) ->
+    msg.http('https://api.twitter.com/1/statuses/user_timeline.json')
+      .query(screen_name: 'pokefacts', count: 100)
+      .get() (err, res, body) ->
+        tweets = JSON.parse(body)
+        msg.send tweets.length
+        if tweets? and tweets.length > 0
+          tweet = msg.random tweets
+          while(tweet.text.toLowerCase().indexOf('#pokefact') == -1)
+            tweet = msg.random tweets
+          msg.send "PokeFACT: " + tweet.text.replace(/\#pokefact/i, "");
+        else
+          msg.reply "Couldn't find a PokeFACT"


+ property getter/setter supported on Class

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

--- src/util/property.coffee
+++ src/util/property.coffee
@@ -0,0 +1,47 @@
+###
+Usage:
+
+class Person
+  constructor: (@firstName, @lastName) ->
+  @property 'fullName',
+    get: -> "#{@firstName} #{@lastName}"
+    set: (name) -> [@firstName, @lastName] = name.split ' '
+
+
+class Person
+  constructor: (@firstName, @lastName) ->
+  @getter 'fullName', -> "#{@firstName} #{@lastName}"
+  @setter 'fullName', (name) -> [@firstName, @lastName] = name.split ' '
+
+
+About property super:
+
+class Bar extends Person
+    @property 'fullName'
+        get: ->
+            # the Person's 'fullName' property depended on something stored as an own property of the instance,
+            # calling .fullName in the superclass prototype won't work. For example:
+            #Person.__super__.fullName
+            # the only way found to make Person's 'fullName' work is to
+            (Object.getOwnPropertyDescriptor Person.__super__, 'fullName').get.apply @
+
+
+###
+
+# this is not necessary if u use the shim
+if Object.prototype.__defineGetter and not Object.defineProperty
+    Object.defineProperty = (obj, prop, desc) ->
+        if "get" of desc
+            obj.__defineGetter__ prop, desc.get
+        if "set" of desc
+            obj.__defineSetter__ prop, desc.set
+
+Function::property = (prop, desc) ->
+    Object.defineProperty this.prototype, prop, desc
+
+Function::getter = (prop, get) ->
+  Object.defineProperty @prototype, prop, {get, configurable: yes}
+
+Function::setter = (prop, set) ->
+  Object.defineProperty @prototype, prop, {set, configurable: yes}
+