refactor the assembly/RAD package

refactor the assembly/RAD package

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

--- library/assembly/entry.coffee
+++ library/assembly/entry.coffee
@@ -0,0 +1,143 @@
+###
+Copyright (c) 2013, Alexander Cherniuk <ts33kr@gmail.com>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+   list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+###
+
+_ = require "lodash"
+assert = require "assert"
+
+{external} = require "../membrane/remote"
+{Dialogue} = require "../semantic/dialogue"
+{BoxedFormular} = require "../semantic/standard"
+{Behavior} = require "../gearbox/behavior"
+
+# This is a abstract base class compound that combines modal window
+# with a data form. Basically, this component provides the skeleton
+# that scrapes the boilerplate routine of form submission and then
+# reacting to the response away and lets you focus on what matters
+# to your functionality, that is setting up the layout and fields.
+# As a basis, the service uses `BoxFormular` & `Dialogue` widgets.
+module.exports.EntryDialogue = class EntryDialogue extends Behavior
+
+    # This is a marker that indicates to some internal subsystems
+    # that this class has to be considered abstract and therefore
+    # can not be treated as a complete class implementation. This
+    # mainly is used to exclude or account for abstract classes.
+    # Once inherited from, the inheritee is not abstract anymore.
+    @abstract yes
+
+    # Define a set of considerations used by this service. An every
+    # consideration is one key/value pair. Where the key corresponds
+    # to the type name (also known as token) and the  value is holding
+    # either an implementation function or a remotable type (an alias).
+    # This allows you to override type definitions that may be used in
+    # the parent classes, without having to replace implementation code.
+    # Allows to inject arbitrary lexical-local values to external fns.
+    @considering TFormular: BoxedFormular
+    @reconfigure TDialogue: Dialogue
+
+    # This is an isolated server provider that gets called once the
+    # working data is being submitted into a simple entry component.
+    # The provider is responsible for handling the data and giving
+    # off the feadback on that data, as in its validity and stuff.
+    # Please refer to the `confirmedSubmission` method of component
+    # for more information on the data submission and handing logic.
+    dataSubmission: @isolated (data, callback) ->
+
+    # Once the service has been successfully booted, this method is
+    # going to set up all the necessary scaffolding for the service.
+    # It means setting up all the required UIX widgets, binding it
+    # all together and coupling with the service, adding a desigred
+    # overall behavior. See method implementation for more details.
+    # Pay attention, this method is only triggeted at a first boot.
+    configureScaffolding: @onetimer "booted", ->
+        disabler = -> selector().addClass "disabled"
+        enabler = -> selector().removeClass "disabled"
+        selector = => @dialogue.$.find ".positive.button"
+        unload = (visual) -> visual.removeClass "loading"
+        closer = => return @dialogue.$.find ".close.icon"
+        clean = => this.formular.prestine(); disabler()
+        @dialogue = new TDialogue $("body"), "mfs-dialogue"
+        @dialogue.title @t "Please enter the following data"
+        @tap this.dialogue, "positive" # tap positive event
+        @tap this.dialogue, "negative" # tap negative event
+        assert _.isObject @content = this.dialogue.content
+        assert _.isObject @actions = this.dialogue.actions
+        @formular = new TFormular @content, "mfs-formular"
+        @configureFormular? disabler, enabler, this.formular
+        this.actions.find(".positive").addClass("disabled")
+        this.emit("configure-formular", disabler, enabler)
+        @on "disconnect", -> unload $(".loading", @content)
+        @on "negative", => closer().click(); clean()
+
+    # This is the actual engine of the separate formular service.
+    # Method gets invoked each time the user submits a form data.
+    # It takes care of all the internal mechanics: download form
+    # data, invokes the specially designated server provider with
+    # this data, and then makes sense of the response provided by.
+    # Please refer to the implementation for better understanding.
+    confirmedSubmission: @awaiting "positive", ->
+        assert this.formular.element.addClass "loading"
+        assert _.isObject data = @formular.download yes
+        w = @th "Please check the information you entered"
+        s = @th "You have sucessfully submitted your data"
+        invalid = "got invalid response from the provider"
+        this.dataSubmission data, (success, values) =>
+            this.formular.element.removeClass "loading"
+            assert values and _.isObject(values), invalid
+            lo = (k) => (value) => value[k] = @t value[k]
+            pp = (k) => _.each _.filter(values, k), lo(k)
+            pp "warning"; pp "error" # localize server msg
+            @formular.upload values; @formular.messages w
+            return undefined unless (success and values)
+            this.emit "acknowledged", success, values # ok
+            this.once "acknowledged", (success, values) =>
+                iconical = "icon checkmark green massive ok"
+                @paragraph = $ "<p>", class: "right aligned"
+                @paragraph.text s.toString() # success note
+                assert icon = $ "<i>", class: "#{iconical}"
+                try this.actions.empty(); this.formular.hide()
+                this.content.append icon, this.paragraph
+
+    # This method is invoked once the `configure-formular` event is
+    # fired on the service. This event means that a dialogue and the
+    # formular are ready to be configured. This method sets a handy
+    # sort of behavior, when `enter` key is pressed, it either sets
+    # the focus to the next field or submits the form if it was last.
+    # Please refer directly to the implementation for more guidance.
+    configureKeyboard: @awaiting "configure-formular", ->
+        pos = => return $ ".positive.button", @dialogue.$
+        disabled = (element) => $(element).is ".disabled"
+        proceed = => pb.click() unless disabled pb = pos()
+        next = => return performFieldResolution arguments...
+        textInputs = "input[type=text],input[type=password]"
+        assert not _.isEmpty idc = @dialogue.id.toString()
+        jwerty.key "enter", next, textInputs, "##{idc}"
+        return performFieldResolution = (event, key) ->
+            assert _.isObject target = try event.target
+            sibling = $(target).parents(".field").next()
+            assert input = sibling.find(textInputs)
+            return proceed() unless sibling.is ".field"
+            return proceed() unless sibling.length > 0
+            return proceed() unless input.length > 0
+            return input.focus() # set to next input


これはテストです

これはテストです

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

--- scripts/test-hiraoka.coffee
+++ scripts/test-hiraoka.coffee
@@ -0,0 +1,22 @@
+# Description:
+#   AAを表示するbot
+# Author:
+#   raoka0000
+
+module.exports = (robot) ->
+  robot.respond /(hiraoka)/i, (msg) ->
+    text = """
+    　　　　　　　　　　　_
+    　　　　　　　　／"'￣フ／)　　　　　　　 、
+    　　　　　　　,/ ,--、 ￣､__フ　　　　 ／/
+    　　　　　　 ,ヘｌ⌒ﾉ 　　＞　　　　,／　/＿
+    　　　　　　( ＿l_"_ニ_　く＿　 ／）　／　／
+          ,＞　　　　　 フ､　　　　､､＞
+    　　　　　　　 <"　（　　　　　　フ　_＿＞
+    　　　　　　　　ヽ　 ＼､､　＿フ' ノ
+    　　　　　　　　　＼、＿＿､､,_ノ゛
+    　　　　　　　　　　 　　 〉ﾆ〉ﾆ〉
+    　　　　　　　　　 　 ,､_/ﾆ/ﾆ/
+    　　　　　　　　　　∠ｌ∠ｌ､ニ＞
+    """
+    msg.send text


refresh application list, add email app

refresh application list, add email app

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


Unbreak non-course campaign for teachers

--- app/models/User.coffee
+++ app/models/User.coffee
@@ -4,6 +4,7 @@
 util = require 'core/utils'
 ThangType = require './ThangType'
 Level = require './Level'
+utils = require 'core/utils'

 module.exports = class User extends CocoModel
   @className: 'User'
@@ -68,7 +69,7 @@
   isSessionless: ->
     # TODO: Fix old users who got mis-tagged as teachers
     # TODO: Should this just be isTeacher, eventually?
-    false
+    me.isTeacher() and utils.getQueryVariable('course', false)

   setRole: (role, force=false) ->
     return if me.isAdmin()


stop printing layout names

stop printing layout names

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/core-network/client-threejs.git/'


Fixing json2xml function to work with JAXBE generated json

--- src/main/webapp/lib/util/Util.coffee
+++ src/main/webapp/lib/util/Util.coffee
@@ -230,8 +230,9 @@
   # Function to convert XML to JSON
   # Reference: http://goessner.net/download/prj/jsonxml/
   json2xml: (json, tab) ->
+    xml = ""
     # Recursive function to transveres through child JSON objects
-    toXml: (v, name, ind) ->
+    toXml = (v, name, ind) ->
       # define XML variable to be global
       $a.xml = "";
       # If JSON element is an Array
@@ -243,7 +244,7 @@
       else if typeof(v) == "object"
         hasChild = false
         $a.xml += ind + "<" + name
-        for key in v
+        for key of v
           # If element has "@" character at beginning it is an attribute
           if key.charAt(0) == "@"
             $a.xml += " " + key.substr(1) + "=\"" + v[key].toString() + "\""
@@ -255,15 +256,15 @@

         # Continue on if JSON element has child elements
         if hasChild
-          for key in v
+          for key of v
             # If element key is of type text (no XML tag created)
-            if key == "#text"
+            if key == "#text" or key == "$"
               $a.xml += v[key]
-            else if key == "#cdata"
+            else if key == "#cdata"
               $a.xml += "<![CDATA[" + v[key] + "]]>"
             # Else if element is not an XML attribute it has children
             else if key.charAt(0) != "@"
-              $a.xml += toXml v[key], m, ind+"\t"
+              $a.xml += toXml v[key], key, ind+"\t"

           # Add indentation for new element if it is on a new line
           if $a.xml.charAt($a.xml.length-1) == "\n"
@@ -273,11 +274,11 @@

       # If JSON element is just a string value
       else
-         $a.xml += ind + "<" + name + ">" + v.toString() +  "</" + name + ">"
+         $a.xml += ind + "<" + name + ">" + v?.toString() +  "</" + name + ">"
       $a.xml

-    for elm in json
-      xml += toXml(json[elm], elm, "");
+    for key of json
+      xml += toXml(json[key], key, "");
     if tab?
       xml.replace(/\t/g, tab)
     else


Add line comment support

Add line comment support

When you comment out a line with Ctrl-/ or Command-/, a " will be
appended instead of wrapping the line with /* */ by default.

error: pathspec 'settings/language-viml.cson' did not match any file(s) known to git

--- settings/language-viml.cson
+++ settings/language-viml.cson
@@ -0,0 +1,3 @@
+'.source.viml':
+  'editor':
+    'commentStart': '" '


fixes

fixes

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


fixes

fixes


Remove unused bufferId from edit session document

This is now on tokenized buffer instead.

--- src/edit-session.coffee
+++ src/edit-session.coffee
@@ -61,7 +61,6 @@
         deserializer: @constructor.name
         version: @constructor.version
         id: @id
-        bufferId: buffer.id
         displayBuffer: displayBuffer.getState()
         softWrap: softWrap ? false
         softTabs: buffer.usesSoftTabs() ? softTabs ? true


Add request body and on-data events.

Add request body and on-data events.

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


Update to display error if body is >160 chars

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


add poll script

add poll script

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

--- scripts/poll.coffee
+++ scripts/poll.coffee
@@ -0,0 +1,129 @@
+# Description
+#   Generates a poll.
+#   Hubot will automatically end the poll when everyone has answered.
+#
+# Dependencies:
+#   None
+#
+# Configuration:
+#   None
+#
+# Commands:
+#   hubot опрос <вопрос> -a <варианты> - создать опрос с вариантами ответа через запятую
+#   hubot завершить опрос - прекратить опрос
+#   hubot я за <number> - проголосовать
+#   hubot предыдущий опрос - показывает результат предыдущего опроса
+#
+# Notes:
+#   $ hubot poll How cool is that? -a Amazeballz, Very Nice, Nice, Boring
+#   $ hubot vote 1
+#   $ hubot end vote
+#   $ hubot previous poll
+#
+# Author:
+#   EtienneLem, illotum
+
+class Poll
+
+  constructor: (@robot) ->
+    @poll = null
+    @previousPoll = null
+
+    @robot.respond /опрос (.*) -a (.*)/i, this.createPoll
+    @robot.respond /(завершить|закончить|остановить|прекратить) опрос/i, this.endPoll
+    @robot.respond /я за ([0-9]*)/i, this.vote
+    @robot.respond /предыдущий опрос/i, this.showPreviousPoll
+
+  getUser: (msg) ->
+    msg.message.user
+
+  # Poll management
+  createPoll: (msg) =>
+    answers = this.createAnswers(msg.match[2])
+    return msg.send('Опрос, это когда больше чем один вариант ответа') if answers.length <= 1
+
+    user = this.getUser(msg)
+    @poll = { user: user, question: msg.match[1], answers: answers, cancelled: 0, voters: {} }
+
+    msg.send """#{user.name} интересуется: #{@poll.question}
+    0. [Отменить мой голос]
+    #{this.printAnswers()}
+    """
+
+  endPoll: (msg) =>
+    return msg.send('Я не провожу сейчас опрос') unless @poll
+
+    msg.send """Результаты опроса на тему “#{@poll.question}”:
+    #{this.printResults(@poll)}
+    Этот опрос был создан #{@poll.user.name}
+    """
+
+    @previousPoll = @poll
+    @poll = null
+
+  showPreviousPoll: (msg) =>
+    return msg.send('Я не помню предыдущего опроса') unless @previousPoll
+
+    msg.send """Результаты опроса на тему “#{@previousPoll.question}”:
+    #{this.printResults(@previousPoll)}
+    Этот опрос был создан #{@previousPoll.user.name}
+    """
+
+  # Ansers management
+  createAnswers: (answers) ->
+    { text: answer, votes: 0 } for answer in answers.split(/\s?,\s?/)
+
+  printAnswers: ->
+    ("#{i+1}. #{answer.text}" for answer, i in @poll.answers).join("\n")
+
+  printResults: (poll) ->
+    poll.answers.sort (a, b) ->
+      return 1 if (a.votes < b.votes)
+      return -1 if (a.votes > b.votes)
+      0
+
+    results = ''
+    results += ("#{answer.text} (#{answer.votes})" for answer in poll.answers).join("\n")
+    results += "\n\nИз #{Object.keys(poll.voters).length} проголосовавших, #{poll.cancelled} свой голос отменили."
+
+  # Vote management
+  vote: (msg) =>
+    number = parseInt(msg.match[1])
+    user = this.getUser(msg)
+
+    # Errors
+    return msg.send('Извини, никакого опроса сейчас не ведется.') unless @poll
+    return msg.send("Я насчитала всего лишь #{@poll.answers.length} ответов.") if number > @poll.answers.length
+
+    # User already voted
+    if (userAnswer = @poll.voters[user.name]) != undefined
+      sorry = "Извини, #{user.name}, но ты уже "
+      if userAnswer is 0
+        sorry += 'отозвал свой голос.'
+      else
+        sorry += "проголосовал за “#{userAnswer}. #{@poll.answers[userAnswer - 1].text}” в этом опросе."
+
+      return msg.send(sorry)
+
+    # Save user vote
+    @poll.voters[user.name] = number
+    votersCount = Object.keys(@poll.voters).length
+
+    # Cancel vote
+    if number is 0
+      @poll.cancelled++
+      msg.send("#{user.name} решил не голосовать.")
+
+    # Cast vote
+    else
+      votedAnswer = @poll.answers[number - 1]
+      votedAnswer.votes++
+      msg.send "#{user.name} проголосовал за “#{votedAnswer.text}”"
+
+    # Close poll if all users have voted
+    # return if votersCount < @robot.brain.data.users.length - 1
+    # msg.send "It looks like all users casted their vote. Automatically closing this poll."
+    # this.endPoll(msg)
+
+module.exports = (robot) ->
+  new Poll(robot)


viewport.offset when viewport is the window fix

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


Try add echarts to show chart

Try add echarts to show chart

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

--- static/script.coffee
+++ static/script.coffee
@@ -0,0 +1,64 @@
+$ ->
+  xdata = []
+  pm25_data = []
+  aqi_data = []
+  myChart = echarts.init(document.getElementById('charts'))
+  myChart.showLoading
+    text: '正在努力的读取数据中...'
+  $.getJSON '/api/pm25/', (data) ->
+    for i in data
+      xdata.unshift i.time[-8..-7] + '时'
+      pm25_data.unshift i.pm2_5
+      aqi_data.unshift i.aqi
+    myChart.hideLoading()
+    option =
+      title:
+        text: '最近24小时pm2.5含量的变化',
+        # subtext: '纯属虚构'
+      tooltip:
+        trigger: 'axis'
+      legend:
+        data:['PM2.5', 'AQI']
+      toolbox:
+        show: true,
+        feature:
+          mark: {show: true},
+          dataView: {show: true, readOnly: false},
+          magicType: {show: true, type: ['line', 'bar']},
+          restore: {show: true},
+          saveAsImage: {show: true}
+      calculable: true,
+      xAxis: [
+          type: 'category',
+          data: xdata
+      ],
+      yAxis: [
+          type: 'value'
+      ],
+      series: [
+        {
+          name:'PM2.5'
+          type:'bar'
+          data: pm25_data
+          markLine:
+            data: [
+              {type: 'average', name: '平均值'}
+            ]
+        }
+        {
+          name: 'AQI'
+          type: 'bar'
+          data: aqi_data
+          markPoint:
+            data: [
+              {type: 'max', name: '最大值'}
+              {type: 'min', name: '最小值'}
+            ]
+          markLine:
+            data: [
+              {type: 'average', name: '平均值'}
+            ]
+        }
+      ]
+
+    myChart.setOption option


Bring the lulz from bukk.it

Bring the lulz from bukk.it

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

--- src/scripts/lolz.coffee
+++ src/scripts/lolz.coffee
@@ -0,0 +1,17 @@
+# lulz - BRING THE LOLZ from bukk.it
+
+Select     = require("soupselect").select
+HtmlParser = require "htmlparser"
+util = require 'util'
+
+module.exports = (robot) ->
+  robot.respond /l[ou]lz/i, (msg) ->
+    msg.http("http://bukk.it")
+      .get() (err, res, body) ->
+        handler = new HtmlParser.DefaultHandler()
+        parser  = new HtmlParser.Parser handler
+
+        parser.parseComplete body
+
+        results = ("http://bukk.it/#{link.attribs.href}" for link in Select handler.dom, "td a")
+        msg.send msg.random results


return a http server instead of connect server

--- src/server/index.coffee
+++ src/server/index.coffee
@@ -51,13 +51,13 @@

   browserChannel.attach(server, createAgent, options.browserChannel or {}) if options.browserChannel != null

+  if !(server instanceof http.Server)
+    server = http.createServer server
+
+  # this is required by sockjs since it only works with http server, not with
+  # `connect` server
   # SockJS frontend is disabled by default
-  if options.sockjs?
-    # this is required by sockjs since it only works with http server, not with
-    # `connect` server
-    if !(server instanceof http.Server)
-      server = http.createServer server
-    sockjs.attach(server, createAgent, options.sockjs or {})
+  sockjs.attach(server, createAgent, options.sockjs or {}) if options.sockjs?

   server


Add Unit Tests to ensure extensions are correctly called during hub start/stop/reset/register/unregister

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/nanoko-project/h-ubu.git/'


IDE: messagepane first commit

IDE: messagepane first commit

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


Added opacity variables

Added opacity variables

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

--- moon-phase/index.coffee
+++ moon-phase/index.coffee
@@ -0,0 +1,379 @@
+
+# set locale
+locale =
+  city             : 'Winnipeg'
+  region           : ''
+  country          : ''
+
+# set preferences
+option =
+  fontName         : 'Futura'
+  fontSize         : 14        # scales the overall widget size
+  fontColor        : '#FFF'    #
+  fontColorMuted   : '#FFF'    # for RUS label; at 50% opacity
+  iconSet          : 'lit'     # pixels are "lit" or "shadow" side of moon
+  iconColor        : '#FFF'    # pixels
+  iconBackground   : '#FFF'    #
+  iconOpacity      : 0.10      # percentage (0.01-1.00); 0 is transparent
+  widgetBackground : '#FFF'    #
+  widgetOpacity    : 0.02      # percentage (0.01-1.00); 0 is transparent
+  showPhase        : true      # the current moon phase
+  showIcon         : true      #
+  showCity         : true      #
+  showCoords       : true      # latitude and longitude
+  showAge          : true      # age in days
+  showIllum        : true      # percentage illumination
+  showRUS          : true      # w/separator, upcoming times for rise, upper transit, set
+  showClosest      : true      # w/separator, closest phase, either ahead or behind
+  showCloseDay     : true      #  +-> closest phase date, iff showClosest is true
+  showAMPM         : false     # default is military time
+
+refreshFrequency   : '1hr'     # 1hr is best accuracy for moon illumination data
+
+
+# do the heavy lifting; escape spaces
+command: "moon-phase.widget/get-phase.sh \"#{locale.city}\"   \
+                                         \"#{locale.region}\" \
+                                         \"#{locale.country}\""
+
+
+style: """
+  left             : 85px
+  top              : 15px
+  border-radius    : 20px
+  padding          : 10px
+  background       : rgba(#{option.widgetBackground}, #{option.widgetOpacity})
+  display          : inline-block
+  vertical-align   : bottom
+  line-height      : 1.5
+
+  color            : #{option.fontColor}
+  font-family      : #{option.fontName}
+  text-align       : center
+
+  icon-size = #{option.fontSize * 5}px
+
+  .error
+    font-size      : #{option.fontSize}px
+    color          : #FF0000
+    background     : rgba(#000000, 0.5)
+
+  .icon
+    display        : inline-block
+    font-family    : 'Weather'
+    vertical-align : middle
+    font-size      : #{option.fontSize}px
+    vertical-align : middle
+    text-align     : center
+
+    fill           : #{option.iconBackground}
+    width          : icon-size * 3
+    height         : icon-size * 3
+    max-width      : icon-size * 3
+    max-height     : icon-size * 3
+    border-radius  : 50%
+    background     : rgba(#{option.iconBackground}, #{option.iconOpacity})
+
+    img
+      width        : 100%
+
+    @font-face
+      font-family  : 'Weather'
+      src url(weather.widget/moon-icons.svg) format('svg')
+
+  .current
+    position       : relative
+    display        : inline-block
+    white-space    : nowrap
+    text-align     : center
+
+  .current .phase
+    font-size      : #{option.fontSize * 1.7}px
+    font-weight    : bold
+  .current .illum
+    font-size      : #{option.fontSize}px
+  .current .age
+    font-size      : #{option.fontSize}px
+
+  .current .phenomenae
+    display        : flex
+    justify-content: space-between
+  .current .phenomenae div
+    color          : rgba(#{option.fontColorMuted}, 0.5)
+    font-size      : #{option.fontSize * 0.75}px
+    width          : 30%
+
+  .current .phentimes
+    display        : flex
+    justify-content: space-between
+  .current .phentimes div
+    font-size      : #{option.fontSize}px
+    width          : 30%
+
+  .current .location
+    font-size      : #{option.fontSize * 1.5}px
+
+  .current .coords
+    font-size      : #{option.fontSize}px
+
+  .current .separator
+    background     : #666666
+    border-top     : #{option.fontSize / 10}px solid rgba(#{option.fontColor}, 0.5)
+    height         : #{option.fontSize / 10}px
+
+  .closest .clphase
+    font-size      : #{option.fontSize * 0.85}px
+  .closest .cldate
+    font-size      : #{option.fontSize * 0.85}px
+
+"""
+
+
+option : option
+
+
+render: -> """
+

+

+
+

+

+

+

+

+

+
+

+

+

+
+

+

+

+

+

+
+

+"""
+
+
+renderMoonData: (data) ->
+  moonEl = @$domEl.find('.current')
+
+  today = new Date()
+
+  # calculate current phase based on known new moon, modulo 29.53
+  # https://en.wikipedia.org/wiki/Lunar_phase#Calculating_phase
+  synodic_month = 29.530588853
+
+  # the most recent new moon; TODO: log last new moon seen to a file?
+  new_moon = new Date('03/09/2016 01:54 GMT')
+
+  #today = new Date('03/08/2016 18:35 CST')
+  #new_moon = new Date('02/08/2016 14:39 GMT')
+
+  ms_per_day = 1000 * 60 * 60  * 24
+  days_passed = (today.getTime() - new_moon.getTime()) / ms_per_day
+  moon_age = days_passed % synodic_month
+  moon_age = (moon_age).toFixed(1)
+
+  # handle leading zeroes
+  fracillum = Number(data.illum)
+
+  # if moon phase isn't modulo 25, curphase is provided
+  if data.curphase?
+    curphase = data.curphase
+  else
+    curphase = data.closestphase.phase
+
+  if @option.showPhase
+    moonEl.find('.phase').text "#{curphase}"
+
+# ###FIXME
+  if @option.showIcon
+    #icon = @getIcon(Math.floor(moon_age), @option.iconSet)
+    #console.error icon
+    #console.error 'Moon age:', moon_age
+    #console.error 'Floored :', Math.floor(moon_age)
+    moonEl.find('.icon').html @getIcon(Math.floor(moon_age), @option.iconSet)
+
+  if @option.showCity
+    moonEl.find('.location').text "#{data.city}"
+
+  if @option.showAge
+    moonEl.find('.age').text "#{moon_age} days old"
+
+  if @option.showIllum
+    moonEl.find('.illum').text "#{fracillum}% illumination"
+
+  if @option.showCoords
+    if data.lat > 0 then latcard = 'N' else latcard = 'S'
+    if data.lon > 0 then loncard = 'E' else loncard = 'W'
+    lat = Math.abs((data.lat).toFixed(2))
+    lon = Math.abs((data.lon).toFixed(2))
+    moonEl.find('.coords').text "#{lat}#{latcard} #{lon}#{loncard}"
+
+  # upcoming phenomenon and times; order based on current time
+  if @option.showRUS
+    count = Object.keys(data.moondata).length
+
+    phen = moonEl.find('.phenomenae')
+    phen.empty()
+    if count < 3
+      phenName = @returnPhenomenae("#{data.prevmoondata[0].phen}")
+      phen.append "
#{phenName}
"
+    for d in data.moondata
+      phenName = @returnPhenomenae("#{d.phen}")
+      phen.append "
#{phenName}
"
+
+    time = moonEl.find('.phentimes')
+    time.empty()
+    if count < 3
+      if @option.showAMPM
+        my_time = @returnAMPM(data.prevmoondata[0].time)
+      else
+        my_time = data.prevmoondata[0].time
+      time.append "
#{my.time}
"
+    for d in data.moondata
+      if @option.showAMPM
+        my_time = @returnAMPM(d.time)
+      else
+        my_time = d.time
+      time.append "
#{my_time}
"
+
+  # closest phase looks both backwards and fowards: determine which
+  clday = new Date(data.closestphase.date + " " + data.closestphase.time)
+
+  # compare in milliseconds to avoid string issues
+  if clday.getTime() > today.getTime()
+    clause = 'is'
+  else
+    clause = 'was'
+
+  if @option.showClosest
+    moonEl.find('.clphase').text "Closest phase #{clause} #{data.closestphase.phase}"
+
+    if @option.showCloseDay
+      # prepare time
+      if @option.showAMPM
+        my_time = @returnAMPM(data.closestphase.time)
+      else
+        my_time = data.closestphase.time
+      moonEl.find('.cldate').text "on #{data.closestphase.date} at #{my_time}"
+
+
+renderError: (data) ->
+  moonEl = @$domEl.find('.moon')
+  moonEl.find('.current').text "moon-phase: #{data.message}"
+  moonEl.append "
moon-phase: #{data.message}
"
+
+
+update: (output, domEl) ->
+  @$domEl = $(domEl)
+
+  data = JSON.parse(output)
+  if data?.error
+    console.error 'moon-phase: ', data.message
+    return @renderError(data)
+  @renderMoonData data
+
+
+returnAMPM: (time) ->
+  my_time = time.split(':')
+  hh = Number(my_time[0])
+  mm = Number(my_time[1])
+  if hh >= 12 then time_suffix = 'PM' else time_suffix = 'AM'
+  if hh > 12 then hh = hh - 12
+  if mm < 10 then mm = '0' + mm
+  my_time = hh + ':' + mm + ' ' + time_suffix
+  return my_time
+
+
+returnPhenomenae: (code) ->
+  if code is "R" then return "Rises"
+  if code is "U" then return "Upper Transit"
+  if code is "S" then return "Sets"
+
+
+getIcon: (code, iconSet) ->
+  if iconSet is 'lit'
+    @getLitIcon(code)
+  else
+    @getShadowIcon(code)
+
+getLitIcon: (code) ->
+  if code < 0 or code > 29
+    return @iconLitMapping['na']
+  else
+    @iconLitMapping[code]
+
+getShadowIcon: (code) ->
+  if code < 0 or code > 29
+    return @iconShadowMapping['na']
+  else
+    @iconShadowMapping[code1]
+
+iconLitMapping:
+  0  : ""
+  1  : ""
+  2  : ""
+  3  : ""
+  4  : ""
+  5  : ""
+  6  : ""
+  7  : ""
+  8  : ""
+  9  : ""
+  10 : ""
+  11 : ""
+  12 : ""
+  13 : ""
+  14 : ""
+  15 : ""
+  16 : ""
+  17 : ""
+  18 : ""
+  19 : ""
+  20 : ""
+  21 : ""
+  22 : ""
+  23 : ""
+  24 : ""
+  25 : ""
+  26 : ""
+  27 : ""
+  28 : ""
+  na : ""
+
+iconShadowMapping:
+  0  : ""
+  1  : ""
+  2  : ""
+  3  : ""
+  4  : ""
+  5  : ""
+  6  : ""
+  7  : ""
+  8  : ""
+  9  : ""
+  10 : ""
+  11 : ""
+  12 : ""
+  13 : ""
+  14 : ""
+  15 : ""
+  16 : ""
+  17 : ""
+  18 : ""
+  19 : ""
+  20 : ""
+  21 : ""
+  22 : ""
+  23 : ""
+  24 : ""
+  25 : ""
+  26 : ""
+  27 : ""
+  28 : ""
+  na : ""
+


Bug fix

Bug fix


FlexSplit: FlexSplit initial commit

FlexSplit: FlexSplit initial commit

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

--- lib/components/flexsplit/flexsplit.coffee
+++ lib/components/flexsplit/flexsplit.coffee
@@ -0,0 +1,81 @@
+KD     = require '../../core/kd'
+KDView = require '../../core/view'
+
+KDFlex = require './flex'
+KDFlexSplitResizer = require './flexresizer'
+
+
+module.exports = class KDFlexSplit extends KDView
+
+  # Keep copy of constants on KDFlexSplit for external uses
+  for own key, value of KDFlex
+    KDFlexSplit[key] = value
+
+  constructor: (options = {}, data) ->
+
+    options.cssClass   = KD.utils.curry 'flex-split', options.cssClass
+    options.sizes     ?= []
+    options.type      ?= KDFlex.HORIZONTAL
+    options.resizable ?= yes
+
+    super options, data
+
+    @_type = KDFlex.INSTANCE_TYPE
+
+    @resizer = null
+    { @type, @name, storage } = @getOptions()
+    @setClass @type.name
+
+    @setupViews()
+
+    storage?.addView this, @name
+
+
+  createResizer: (view, size) ->
+
+    @resizer = @addSubView new KDFlexSplitResizer { @type, view }
+
+    @forwardEvents @resizer, [
+      KDFlex.EVENT_EXPANDED
+      KDFlex.EVENT_RESIZED
+      KDFlex.EVENT_HIDDEN
+      KDFlex.EVENT_COLLAPSED
+    ]
+
+    @resizer.on KDFlex.EVENT_EXPAND, ->
+      if KDFlexSplit.isInstance view.parent
+        view.parent.emit KDFlex.EVENT_EXPAND
+
+    @resizer.on KDFlex.EVENT_COLLAPSE, ->
+      if KDFlexSplit.isInstance view.parent
+        view.parent.emit KDFlex.EVENT_COLLAPSE
+
+
+  setupViews: ->
+
+    { sizes, views, resizable } = @getOptions()
+
+    views.forEach (view, index) =>
+
+      unless view.hasClass 'flex-split'
+        view.setClass 'flex-view'
+
+      if sizes[index]?
+        size = sizes[index]
+        view.setCss 'flex-basis', "#{size}%"
+
+      @addSubView view
+
+      if resizable
+        view.setCss 'flex-basis', '50%'  unless size?
+        @resizer?.addView view, size
+        if views[index + 1]
+          @createResizer view, size
+
+
+  setFractions: (fractions, options) ->
+    @resizer?.setFractions fractions, options
+
+
+  @isInstance = (instance) ->
+    instance?._type is KDFlex.INSTANCE_TYPE


bug fixes

bug fixes


ui tweak

ui 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/andlogic/pos_machine.git/'


generate the private json files

generate the private json files

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


bug fix

bug fix


Load internal modules with an atom engines field as packages

--- src/app/atom.coffee
+++ src/app/atom.coffee
@@ -91,7 +91,15 @@
   resolvePackagePath: (name) ->
     return name if fsUtils.isDirectory(name)
     path = fsUtils.resolve(config.packageDirPaths..., name)
-    path if fsUtils.isDirectory(path)
+    if fsUtils.isDirectory(path)
+      path
+    else
+      packagePath = fsUtils.join(window.resourcePath, 'node_modules', name)
+      packagePath if @isInternalPackage(packagePath)
+
+  isInternalPackage: (packagePath) ->
+    {engines} = Package.loadMetadata(packagePath, true)
+    return packagePath if engines?.atom?

   getLoadedPackage: (name) ->
     @loadedPackages[name]
@@ -107,9 +115,14 @@

   getAvailablePackagePaths: ->
     packagePaths = []
+
     for packageDirPath in config.packageDirPaths
       for packagePath in fsUtils.list(packageDirPath)
         packagePaths.push(packagePath) if fsUtils.isDirectory(packagePath)
+
+    for packagePath in fsUtils.list(fsUtils.join(window.resourcePath, 'node_modules'))
+      packagePaths.push(packagePath) if @isInternalPackage(packagePath)
+
     _.uniq(packagePaths)

   getAvailablePackageNames: ->


MIL-291: Only show the input as invalid if its also dirty

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/crdschurch/crds-angular-ajax-form.git/'


adding hi command

adding hi command


Preserve folds when selecting rows by clicking the gutter

--- src/editor-component.coffee
+++ src/editor-component.coffee
@@ -654,32 +654,32 @@
     {editor} = @props
     clickedRow = @screenPositionForMouseEvent(event).row

-    editor.setSelectedScreenRange([[clickedRow, 0], [clickedRow + 1, 0]])
+    editor.setSelectedScreenRange([[clickedRow, 0], [clickedRow + 1, 0]], preserveFolds: true)

     @handleDragUntilMouseUp event, (screenPosition) ->
       dragRow = screenPosition.row
       if dragRow < clickedRow # dragging up
-        editor.setSelectedScreenRange([[dragRow, 0], [clickedRow + 1, 0]])
+        editor.setSelectedScreenRange([[dragRow, 0], [clickedRow + 1, 0]], preserveFolds: true)
       else
-        editor.setSelectedScreenRange([[clickedRow, 0], [dragRow + 1, 0]])
+        editor.setSelectedScreenRange([[clickedRow, 0], [dragRow + 1, 0]], preserveFolds: true)

   onGutterMetaClick: (event) ->
     {editor} = @props
     clickedRow = @screenPositionForMouseEvent(event).row

     bufferRange = editor.bufferRangeForScreenRange([[clickedRow, 0], [clickedRow + 1, 0]])
-    rowSelection = editor.addSelectionForBufferRange(bufferRange)
+    rowSelection = editor.addSelectionForBufferRange(bufferRange, preserveFolds: true)

     @handleDragUntilMouseUp event, (screenPosition) ->
       dragRow = screenPosition.row

       if dragRow < clickedRow # dragging up
-        rowSelection.setScreenRange([[dragRow, 0], [clickedRow + 1, 0]])
+        rowSelection.setScreenRange([[dragRow, 0], [clickedRow + 1, 0]], preserveFolds: true)
       else
-        rowSelection.setScreenRange([[clickedRow, 0], [dragRow + 1, 0]])
+        rowSelection.setScreenRange([[clickedRow, 0], [dragRow + 1, 0]], preserveFolds: true)

       # After updating the selected screen range, merge overlapping selections
-      editor.mergeIntersectingSelections()
+      editor.mergeIntersectingSelections(preserveFolds: true)

       # The merge process will possibly destroy the current selection because
       # it will be merged into another one. Therefore, we need to obtain a
@@ -700,9 +700,9 @@
     @handleDragUntilMouseUp event, (screenPosition) ->
       dragRow = screenPosition.row
       if dragRow < tailPosition.row # dragging up
-        editor.setSelectedScreenRange([[dragRow, 0], tailPosition])
+        editor.setSelectedScreenRange([[dragRow, 0], tailPosition], preserveFolds: true)
       else
-        editor.setSelectedScreenRange([tailPosition, [dragRow + 1, 0]])
+        editor.setSelectedScreenRange([tailPosition, [dragRow + 1, 0]], preserveFolds: true)

   onStylesheetsChanged: (stylesheet) ->
     return unless @performedInitialMeasurement


Add database connection string

Add database connection string

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

--- coffee/database.coffee
+++ coffee/database.coffee
@@ -0,0 +1,2 @@
+exports.conString = 'tcp://dbuser:dbpass@host:port/database'
+


Add projects from home Mac

Add projects from home Mac

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

--- atom/projects.courage.cson
+++ atom/projects.courage.cson
@@ -0,0 +1 @@
+[]


add some basic tests

add some basic tests

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

--- test/hello-world_test.coffee
+++ test/hello-world_test.coffee
@@ -0,0 +1,19 @@
+chai = require 'chai'
+sinon = require 'sinon'
+chai.use require 'sinon-chai'
+
+expect = chai.expect
+
+describe 'hello-world', ->
+  beforeEach ->
+    @robot =
+      respond: sinon.spy()
+      hear: sinon.spy()
+
+    require('../src/hello-world')(@robot)
+
+  it 'registers a respond listener', ->
+    expect(@robot.respond).to.have.been.calledWith(/hello/)
+
+  it 'registers a hear listener', ->
+    expect(@robot.hear).to.have.been.calledWith(/orly/)


Add crack scripts

Add crack scripts

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

--- scripts/saycrack.coffee
+++ scripts/saycrack.coffee
@@ -0,0 +1,48 @@
+# Description:
+#
+# Dependencies:
+#   None
+#
+# Configuration:
+#   HUBOT_SHIP_EXTRA_SQUIRRELS
+#
+# Commands:
+#   crack - Display motivation image - Chris
+#
+# Author:
+#   chris
+
+crackimages = [
+  "https://i.imgur.com/DRWNnmJ.gif",
+  "https://i.imgur.com/ntJKbx2.gif",
+  "https://i.imgur.com/O8r8fwa.gif",
+  "https://i.imgur.com/Y6DFt5C.gif",
+  "https://i.imgur.com/s88jNqX.gifv",
+  "https://i.imgur.com/9XfX1Ne.gif",
+  "https://i.imgur.com/tmNso.gif",
+  "https://i.imgur.com/8CZoT.gif",
+  "https://i.imgur.com/aWlRv.gif",
+  "https://i.imgur.com/dYznV.gif",
+  "https://i.imgur.com/kz5pY.gif",
+  "https://i.imgur.com/mCs83.gif",
+  "https://i.imgur.com/1rvPf.gif",
+  "https://i.imgur.com/jqP5H.gif",
+  "https://i.imgur.com/MclIU.gif",
+  "https://i.imgur.com/0Xsqe.gif",
+  "https://i.imgur.com/iLLn4.gif",
+  "https://i.imgur.com/Ovsgc.gif",
+  "https://i.imgur.com/6SAiyP2.gifv",
+
+]
+
+module.exports = (robot) ->
+
+  robot.hear /crack/i, (msg) ->
+    msg.send "Eso crack! " + msg.random crackimages
+
+  robot.hear /crak/i, (msg) ->
+    msg.send "Eso crack! " + msg.random crackimages
+
+  robot.hear /volando/i, (msg) ->
+    msg.send "Esta volando!! " + msg.random crackimages
+


Make user to make member.

Make user to make member.

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


fix broken download button

fix broken download button

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


added hubot against humanity

added hubot against humanity

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

--- src/scripts/hubotagainsthumanity.coffee
+++ src/scripts/hubotagainsthumanity.coffee
@@ -0,0 +1,561 @@
+# Description:
+#   Play Cards Against Humanity right in Hubot
+#
+# Dependencies:
+#   None
+#
+# Configuration:
+#   None
+#
+# Commands:
+#   q card - Returns a question
+#   card me - Displays an answer
+#   card 2 - Displays two answers for questions with two blanks
+#
+# Author:
+#   Jonny Campbell (@jonnycampbell)
+
+questions = [
+  "____? There's a app for that.",
+  "Why can't I sleep at night?",
+  "What's that smell?",
+  "I got 99 problems but _____ ain't one.",
+  "Who stole the cookies from the cookie jar?",
+  "What's the next Happy Meal toy?",
+  "Anthropologists have recently discovered a primitive tribe that worships ____.",
+  "It's a pity that kids these days are all getting involved with ____.",
+  "During Picasso's often-overlooked Brown Period he produced hundreds of paintings of ____.",
+  "Alternative medecine is now embracing the curative powers of ____.",
+  "What's that sound?",
+  "What ended my last relationship?",
+  "MTV's new reality show features eight washed-up celebrities living with ____.",
+  "I drink to forget ____.",
+  "What is Batman's guilty pleasure?",
+  "This is the way the worlds ends.  Not with a bang but with ____.",
+  "What's a girl's best friend?",
+  "TSA guidelines now prohibits ____ on airplanes.",
+  "____. This is how I die.",
+  "For my next trick I will pull ____ out of ____.",
+  "In the new Disney Channel Original Movie Hannah Montana struggles with ____ for the first time.",
+  "____ is a slippery slope that leads to ____.",
+  "What does Dick Cheney prefer?",
+  "I wish I hadn't lost the instruction manual for ____.",
+  "Instead of coal Santa now gives the bad children ____.",
+  "What's the most emo?",
+  "In 1000 years, when paper money is but a distant memory, ____ will be our currency.",
+  "What's the next superhero/sidekick duo? (Choose 2)",
+  "In M. Night Shyamalan's new movie, Bruce Willis discovers that ____ had really been ___ all along.",
+  "A romantic, candlelit dinner would be incomplete without ____.",
+  "_____. Betcha can't have just one!",
+  "White people like ____.",
+  "____. High five, bro.",
+  "Next from J.K. Rowling: Harry Potter and the Chamber of ____.",
+  "In a world savaged by ____, our only solace is _____.",
+  "War! What is it good for?",
+  "During sex, I like to think about ____.",
+  "What are my parents hiding from me?",
+  "What will always get you laid?",
+  "When I'm in prison, I'll have ____ smuggled in.",
+  "What did I bring back from Mexico?",
+  "What don't you want to find in your Chinese food?",
+  "What will I bring back in time to convince people that I am a powerful wizard?",
+  "How am I maintaining my relationship status?",
+  "____. It's a trap!",
+  "Coming to Broadway this season, ____.",
+  "While the United States raced the Soviet Union to the moon, the Mexican government funneled millions of pesos into research on ____.",
+  "After Hurricane Katrina, Sean Penn brought ____ to the people of New Orleans.",
+  "Due to a PR fiasco, Tesco no longer offers ____.",
+  "In his new summer comedy, Rob Schneider is ____ trapped in the body of ____.",
+  "Rumor has it that Vladimir Putin's favorite dish is ____ stuffed with ____.",
+  "But before I kill you, Mr Bond, I must show you ____.",
+  "What gives me uncontrollable gas?",
+  "What do old people smell like?",
+  "The class field trip was completely ruined by ____.",
+  "When Pharaoh remained unmoved, Moses called down a Plague of ____.",
+  "What's my secret power?",
+  "What's there a ton of in heaven?",
+  "What would grandma find disturbing, yet oddly charming?",
+  "I never truly understood ____ until I encountered ____.",
+  "The US has begun airdropping ___ to the children of Afghanistan.",
+  "What helps Obama unwind?",
+  "What did Vin Diesel eat for dinner?",
+  "____: Good to the last drop.",
+  "Why am I sticky?",
+  "What gets better with age?",
+  "____: kid-tested.",
+  "What's the crustiest?",
+  "Studies show that lab rats navigate mazes 50% after being exposed to ____.",
+  "Life was difficult for cavemen before _____.",
+  "I do not know with what weapons World War III will be fought, but World War IV will be fought with ____.",
+  "Why do I hurt all over?",
+  "What am I giving up for Lent?",
+  "In Michael Jackson's final moments, he thought about ____.",
+  "In an attempt to reach a wider audience, the Smithsonian Museum of Natural History has opened an interactive exhibit on ____.",
+  "When I am President of the United States, I will create the Department of ____.",
+  "When I was tripping on acid, ____ turned into ____.",
+  "That's right, I killed ____, How, you ask ? ____.",
+  "What's my anti-drug?",
+  "What never fails to liven up the party?",
+  "What's the new fad diet?",
+  "Major League Baseball has banned ____ for giving players an unfair advantage."
+]
+
+answers = [
+  "Coat hanger abortions",
+  "Man meat",
+  "Autocannibalism",
+  "Vigorous jazz hands",
+  "Flightless birds",
+  "Pictures of boobs",
+  "Doing the right thing",
+  "Hunting accidents",
+  "A cartoon camel enjoying the smooth",
+  "The violation of our most basic human rights",
+  "Viagra",
+  "Self-loathing",
+  "Spectacular abs",
+  "An honest cop with nothing left to lose",
+  "Abstinence",
+  "A balanced breakfast",
+  "Mountain Dew Code Red",
+  "Concealing a boner",
+  "Roofies",
+  "Tweeting",
+  "The Big Bang",
+  "Amputees",
+  "Dr. Marting Luther King Jr",
+  "Former President George W. Bush",
+  "Being marginalized",
+  "Smegma",
+  "Laying an egg",
+  "Cuddling",
+  "Aaron Burr",
+  "The Pope",
+  "A bleached asshole",
+  "Horse meat",
+  "Genital piercings",
+  "Fingering",
+  "Elderly Japanese men",
+  "Stranger danger",
+  "Fear itself",
+  "Science",
+  "Praying the gay away",
+  "Same-sex ice dancing",
+  "The terrorists",
+  "Making sex at her",
+  "German dungeon porn",
+  "Bingeing and purging",
+  "Ethnic cleansing",
+  "Cheating in the Special Olympics",
+  "Nickelback",
+  "Heteronormativity",
+  "William Shatner",
+  "Making a pouty face",
+  "Chainsaws for hands",
+  "The placenta",
+  "The profoundly handicapped",
+  "Tom Cruise",
+  "Object permanence",
+  "Goblins",
+  "An icepick lobotomy",
+  "Arnold Schwarzenegger",
+  "Hormone injections",
+  "A falcon with a cap on its head",
+  "Foreskin",
+  "Dying",
+  "Stunt doubles",
+  "The invisible hand",
+  "Jew-fros",
+  "A really cool hat",
+  "Flash flooding",
+  "Flavored condoms",
+  "Dying of disentery",
+  "Sexy pillow fights",
+  "The Three-Fifths compromise",
+  "A sad handjob",
+  "Men",
+  "Historically black colleges",
+  "Sean Penn",
+  "Heartwarming orphans",
+  "Waterboarding",
+  "The clitoris",
+  "Vikings",
+  "Friends who eat all the snacks",
+  "The Underground Railroad",
+  "Pretending to care",
+  "Raptor attacks",
+  "A micropenis",
+  "A Gypsy curse",
+  "Agriculture",
+  "Bling",
+  "A clandestine butt scratch",
+  "The South",
+  "Sniffing glue",
+  "Consultants",
+  "My humps",
+  "Geese",
+  "Being a dick to children",
+  "Party poopers",
+  "Sunshine and rainbows",
+  "Mutually-assured destruction",
+  "Heath Ledger",
+  "Sexting",
+  "An Oedipus complex",
+  "Eating all of the cookies before the AIDS bake-sale",
+  "A sausage festival",
+  "Michael Jackson",
+  "Skeletor",
+  "Chivalry",
+  "Sharing needles",
+  "Being rich",
+  "Spontaneous human combustion",
+  "College",
+  "Necrophilia",
+  "The Chinese gymnastics team",
+  "Global warming",
+  "Farting and walking away",
+  "Cookie Monster devouring the Eucharist wafers",
+  "Stifling a giggle at the mention of Hutus and Tutsis",
+  "Penis envy",
+  "Letting yourself go",
+  "White people",
+  "Leaving an awkward voicemail",
+  "Yeast",
+  "Natural selection",
+  "Masturbation",
+  "Twinkies",
+  "A LAN party",
+  "Opposable thumbs",
+  "A grande sugar-free iced soy caramel macchiato",
+  "Soiling oneself",
+  "A sassy black woman",
+  "Sperm whales",
+  "Teaching a robot to love",
+  "Scrubbing under the folds",
+  "A drive-by shooting",
+  "Whipping it out",
+  "Panda sex",
+  "Catapults",
+  "Will Smith",
+  "Toni Morrison's vagina",
+  "Five-Dollar Foot-longs",
+  "Land mines",
+  "A sea of troubles",
+  "A zesty breakfast burrito",
+  "Christopher Walken",
+  "Friction",
+  "Balls",
+  "AIDS",
+  "The KKK",
+  "Gandhi",
+  "Dave Matthews Band",
+  "Preteens",
+  "The token minority",
+  "Friends with benefits",
+  "Pixelated bukkake",
+  "Substitute teachers",
+  "Take-backsies",
+  "A thermonuclear detonation",
+  "Waiting 'til marriage",
+  "A tiny horse",
+  "A can of whoop-ass",
+  "Dental dams",
+  "Feeding Rosie O'Donnell",
+  "Old-people smell",
+  "Genghis Khan",
+  "Authentic Mexican cuisine",
+  "Oversized lollipops",
+  "Garth Brooks",
+  "Keanu Reeves",
+  "Drinking alone",
+  "The American Dream",
+  "Taking off your shirt",
+  "Giving 110%",
+  "Flesh-eating bacteria",
+  "Child abuse",
+  "A cooler full of organs",
+  "A moment of silence",
+  "The Rapture",
+  "Keeping Christ in Chrismas",
+  "Robocop ",
+  "That one gay Teletubby",
+  "Sweet",
+  "Fancy Feast",
+  "Pooping back and forth. Forever.",
+  "Being a motherfucking sorcerer",
+  "Jewish fraternities",
+  "Edible underpants",
+  "Poor people",
+  "All-you-can-eat shrimps for $4.99",
+  "Britney Spears at 55",
+  "That thing that electrocutes your abs",
+  "The folly of man",
+  "Fiery poops",
+  "Cards Against Humanity",
+  "A murder most foul",
+  "Me time",
+  "The inevitable heat death of the universe",
+  "Nocturnal emissions",
+  "Daddy issues",
+  "The hardworking Mexican",
+  "Natalie Portman",
+  "Waking up half-naked in a McDonalds's parking lot",
+  "Nipple blades",
+  "Assless chaps",
+  "Full frontal nudity",
+  "Hulk Hogan",
+  "Passive-aggression",
+  "Ronald Reagan",
+  "Vehicular manslaughter",
+  "Menstruation",
+  "Pulling out",
+  "Picking up girls at the abortion clinic",
+  "The homosexual agenda",
+  "The Holy Bible",
+  "World peace",
+  "Dropping a chandelier on your enemies and riding the rope up",
+  "Testicular torsion",
+  "The milk man",
+  "A time-travel paradox",
+  "Hot Pockets",
+  "Guys who don't call",
+  "Eating the last known bison",
+  "Darth Vader",
+  "Scalping",
+  "Homeless people",
+  "The Worlds of Warcraft",
+  "Gloryholes",
+  "Saxophone solos",
+  "Sean Connery",
+  "God",
+  "Intelligent design",
+  "The taint",
+  "Friendly fire",
+  "Keg stands",
+  "Eugenics",
+  "A good sniff",
+  "Lockjaw",
+  "A neglected Tamagotchi",
+  "The People's Elbow",
+  "Robert Downey Jr.",
+  "The heart of a child",
+  "Seduction",
+  "Smallpox blankets",
+  "Licking things to claim them as your own",
+  "A salty surprise",
+  "Poorly-timed Holocaust jokes",
+  "My soul",
+  "My sex life",
+  "Pterodactyl eggs",
+  "Altar boys",
+  "Forgetting the Alamo",
+  "72 virgins",
+  "Raping and pillaging",
+  "Pedophiles",
+  "Eastern European Turbo-Folk music",
+  "A snapping turtle biting the tip of your penis",
+  "Domino's Oreo Dessert Pizza",
+  "My collection of high-tech sex toys",
+  "A middle-aged man on roller skates",
+  "The Blood of Christ",
+  "Half-assed foreplay",
+  "Free samples",
+  "Douchebags on their iPhones",
+  "Hurricane Katrina",
+  "Wearing underwear inside-out to avoid doing laundry",
+  "Republicans",
+  "The glass ceiling",
+  "A foul mouth",
+  "Jerking off into a pool of children's tears",
+  "Getting really high",
+  "The deformed",
+  "Michelle Obama's arms",
+  "Explosions",
+  "The Übermensch",
+  "Donald Trump",
+  "Sarah Palin",
+  "Attitude",
+  "This answer is postmodern",
+  "Crumpets with the Queen",
+  "Frolocking",
+  "Team-building exercises",
+  "Repression",
+  "Road head",
+  "A bag of magic beans",
+  "An asymmetric boob job",
+  "Dead parents",
+  "Public ridicule",
+  "A mating display",
+  "A mime having a stroke",
+  "Stephen Hawking talking dirty",
+  "African Children",
+  "Mouth herpes",
+  "Overcompensation",
+  "Bill Nye the Science Guy",
+  "Bitches",
+  "Italians",
+  "Have some more kugel",
+  "A windmill full of corpses",
+  "Her Royal Highness",
+  "Crippling debt",
+  "Adderall",
+  "A stray pube",
+  "Shorties and blunts",
+  "Passing a kidney stone",
+  "Prancing",
+  "Leprosy",
+  "A brain tumor",
+  "Bees ?",
+  "Puppies !",
+  "Cockfights",
+  "Kim Jong-Il",
+  "Hope",
+  "9oz. of sweet Mexican black-tar heroin",
+  "Incest",
+  "Grave robbing",
+  "Asians who aren't good at math",
+  "Alcoholism",
+  "(I am doing Kegels right now.)",
+  "Justin Bieber",
+  "The Jews",
+  "Bestiality",
+  "Winking at old people",
+  "Drum circles",
+  "Kids with ass cancer",
+  "Loose lips",
+  "Auschwitz",
+  "Civilian casualties",
+  "Inappropriate yodeling",
+  "Tangled Slinkys",
+  "Being on fire",
+  "The Thong Song",
+  "A vajazzled vagina",
+  "Riding off into the sunset",
+  "Exchanging pleasantries",
+  "My relationship status",
+  "Being fabulous",
+  "Lactation",
+  "Not reciprocating oral sex",
+  "Sobbing into a Hungry-Man Frozen Dinner",
+  "My genitals",
+  "Date rape",
+  "Ring Pops",
+  "GoGurt",
+  "Judge Judy",
+  "Lumberjack fantasies",
+  "The gays",
+  "Scientology",
+  "Estrogen",
+  "Police brutality",
+  "Passable transvestites",
+  "The Virginia Tech Massacre",
+  "Tiger Woods",
+  "Dick Fingers",
+  "Racism",
+  "Glenn Beck being harried by a swarm of buzzards",
+  "Surprise sex!",
+  "Classist undertones",
+  "Booby-trapping the house to foil burglars",
+  "New Age music",
+  "PCP",
+  "A lifetime of sadness",
+  "Doin't it in the butt",
+  "Swooping",
+  "The Hamburglar",
+  "Tentacle porn",
+  "A hot mess",
+  "Too much hair gel",
+  "A look-see",
+  "Not giving a shit about the Third World",
+  "American Gladiators",
+  "The Kool-Aid Man",
+  "Mr. Snuffleupagus",
+  "Barack Obama",
+  "Golden showers",
+  "Wiping her butt",
+  "Queefing",
+  "Getting drunk on mouthwash",
+  "A M. Night Shyamalan plot twist",
+  "A robust mongoloid",
+  "Nazis",
+  "White privilege",
+  "An erection that lasts longer than four hours",
+  "A disappointing birthday party",
+  "Puberty",
+  "Two midgets shitting into a bucket",
+  "Wifely duties",
+  "The forbidden fruit",
+  "Getting so angry that you pop a boner",
+  "Sexual tension",
+  "Third base",
+  "A gassy antelope",
+  "Those times when you get sand in your vagina",
+  "A Super Soaker full of cat pee",
+  "Muhammad (Praise Be Unto Him)",
+  "Racially-biased SAT questions",
+  "Porn stars",
+  "A fetus",
+  "Obesity",
+  "When you fart and a little bit comes out",
+  "Oompa-Loompas",
+  "BATMAN!!!",
+  "Black people",
+  "Tasteful sideboob",
+  "Hot people",
+  "Grandma",
+  "Cooping a feel",
+  "The Trail of Tears",
+  "Famine",
+  "Finger painting",
+  "The miracle of childbirth",
+  "Goats eating cans",
+  "A monkey smoking a cigar",
+  "Faith healing",
+  "Parting the Red Sea",
+  "Dead babies",
+  "The Amish",
+  "Impotence",
+  "Child beauty pageants",
+  "Centaurs",
+  "AXE Body Spray",
+  "Kanye West",
+  "Women's suffrage",
+  "Children on leashes",
+  "Harry Potter erotica",
+  "The Dance of the Sugar Plum Fairy",
+  "Lance Armstrong's missing testicle",
+  "Dwarf tossing",
+  "Mathletes",
+  "Lunchables",
+  "Women in yogurt commercials",
+  "John Wilkes Booth",
+  "Powerful thighs",
+  "Mr Clean",
+  "Multiple stab wounds",
+  "Cybernetic enhancements",
+  "Serfdom",
+  "Another goddamn vampire movie",
+  "Glenn Beck catching his scrotum on a curtain hook",
+  "A big hoopla about nothing",
+  "Peeing a little bit",
+  "The Hustle",
+  "Ghosts",
+  "Bananas in Pajamas",
+  "Active listening",
+  "Dry heaving",
+  "Kamikaze pilots",
+  "The Force",
+  "Anal beads",
+  "The Make-A-Wish Foundation"
+]
+
+module.exports = (robot) ->
+  robot.hear /(card me)/i, (msg) ->
+    msg.send msg.random answers
+
+  robot.hear /(card 2)/i, (msg) ->
+    msg.send msg.random answers
+    msg.send msg.random answers
+
+  robot.hear /(q card)/i, (msg) ->
+    msg.send msg.random questions


bug fix

bug fix

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


align white space

align white space

--- src/wow.coffee
+++ src/wow.coffee
@@ -93,7 +93,7 @@
       -webkit-animation-iteration-count: #{iteration};
          -moz-animation-iteration-count: #{iteration};
               animation-iteration-count: #{iteration};
-      " if iteration
+    " if iteration

     style


add number formats to Color.format()

add number formats to Color.format()

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


created elastic initializer

created elastic initializer

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/0xenvision/negotiator-inator.git/'


Invited users were not redirected after login.


Refactoring

Refactoring

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/CrowdTwist/widgets-js-sdk.git/'


Tests:IDE:Terminal:Sessions: Added terminate all test.

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

--- tests/src/ide/terminal.coffee
+++ tests/src/ide/terminal.coffee
@@ -0,0 +1,61 @@
+utils   = require '../utils/utils.js'
+helpers = require '../helpers/helpers.js'
+faker   = require 'faker'
+assert  = require 'assert'
+paneSelector = '.pane-wrapper .kdsplitview-panel.panel-1 .application-tab-handle-holder'
+
+
+openNewTerminalMenu = (browser) ->
+
+  browser
+    .pause                   6000 # wait for sessions
+    .waitForElementVisible   paneSelector + ' .visible-tab-handle.plus', 20000
+    .click                   paneSelector + ' .visible-tab-handle.plus'
+    .waitForElementVisible   '.context-list-wrapper li.new-terminal', 20000
+    .moveToElement           '.context-list-wrapper li.new-terminal', 25, 20
+
+
+createTerminalSession = (browser, user) ->
+
+  userName = user.username
+
+  openNewTerminalMenu(browser)
+
+  browser
+    .waitForElementVisible   'li.new-session', 20000
+    .moveToElement           'li.new-session', 25, 20
+    .click                   'li.new-session'
+    .pause 6000 # required
+    .waitForElementVisible   paneSelector + ' .terminal:not(.active)',20000 # Assertion
+    .waitForElementVisible   paneSelector + ' .terminal.active',20000 # Assertion
+    .assert.containsText     '.application-tabview .terminal.active .terminal-pane', userName # Assertion
+
+
+terminateAll = (browser) ->
+
+  openNewTerminalMenu(browser)
+
+  browser
+    .waitForElementVisible   'li.terminate-all', 20000
+    .click                   'li.terminate-all'
+    .pause  3000
+
+  openNewTerminalMenu(browser)
+
+  browser
+    .pause 3000 # required
+    .assert.elementNotPresent   'li.terminate-all' # Assertion
+
+
+module.exports =
+
+
+  terminateAll: (browser) ->
+
+    user = helpers.beginTest(browser)
+    helpers.waitForVMRunning(browser)
+
+    createTerminalSession(browser, user)
+
+    terminateAll(browser)
+    browser.end()


Client: Activity: Test: Created CommentInputWidgetContainer component

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


(- tests new) Properly exercising ##synchronous with nullaries

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


Added missing period on sentence.

Added missing period on sentence.

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


add public/js/db_handler.coffee | データベース用のモジュール追加

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

--- public/js/db_handler.coffee
+++ public/js/db_handler.coffee
@@ -0,0 +1,49 @@
+# Description:
+#   Database handler for postgresql
+#   app name: saborunayo
+#
+# Functions:
+#   sendQuery(query)
+#   getGithubName(yo_name)
+#   writeData(yo_name, github_name)
+#
+# Author:
+#   @sota1235
+
+pg = require 'pg'
+
+Db_Handler = ->
+  this.db_url = process.env.DATABASE_URL
+  this.db_name = "user_list"
+  # Send query to database
+  this.sendQuery = (query) ->
+    pg.connect this.db_url, (err, client, done) ->
+      if err
+        return [false, err]
+      client.query query, (err, result) ->
+        done()
+        if err
+          return [false, err]
+        return [true, result.rows]
+
+# Get data from database
+Db_Handler.prototype.getGithubName = (yo_name) ->
+  query = "SELECT github_name FROM #{db_name} WHERE yo_name='#{yo_name}';"
+  return this.sendQuery query
+
+# Insert data to database
+# yo_name -> yo_name
+# github_name -> github_name
+Db_Handler.prototype.writeData = (yo_name, github_name) ->
+  query = "INSERT INTO '#{this.db_name}' (yo_name, github_name) values ('#{yo_name}', '#{github_name}');"
+
+  # TODO: Yoアカウントがあるかどうか検証
+  # TODO: githubアカウントが実在するかどうか検証
+  return this.sendQuery query
+
+# Delete data in database
+Db_Handler.prototype.deleteData = (yo_name) ->
+  query = "DELETE FROM #{this.db_name} WHERE yo_name='#{yo_name}';"
+  return this.sendQuery query
+
+module.exports = Db_Handler


#53 Adding more names

#53 Adding more names

--- app/lib/world/names.coffee
+++ app/lib/world/names.coffee
@@ -318,7 +318,7 @@
   'Griffin Rider': [
     'Aeoldan'
     'Bestarius'
-
+    'Letholdus'
   ]
   'Potion Master': [
     'Snake'
@@ -373,4 +373,6 @@
     'Lia'
     'Hardcastle'
     'Leona'
-  ]
+    'Jarin'
+    'Helena'
+  ]


Added two names

Added two names

--- app/lib/world/names.coffee
+++ app/lib/world/names.coffee
@@ -51,6 +51,7 @@
     'Ryan'
     'Bond'
     'Philippian'
+    'Malcolm'
   ]
   'Soldier F': [
     'Sarah'
@@ -323,6 +324,7 @@
     'Kyrgg'
     'Durnath'
     'Kraggan'
+    'Gragthar'
     'Rasha'
     'Moza'
     'Vujii'


Get back to archives list when click to archives from top nav

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


simple template registry

simple template registry

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

--- app/assets/javascripts/mtl/templates.coffee
+++ app/assets/javascripts/mtl/templates.coffee
@@ -0,0 +1,4 @@
+@MTL.templates = {}
+@MTL.renderTemplate = (template, data) ->
+  MTL.templates[template] = _.template(MTL.templates[template]) unless _.isFunction(MTL.templates[template])
+  MTL.templates[template](data)


clearer

clearer

--- apps/unsupported_browser/test/routes.coffee
+++ apps/unsupported_browser/test/routes.coffee
@@ -33,8 +33,9 @@

     it 'sets the cookie to expire one day from now', ->
       routes.continueAnyway @req, @res
+      today = moment()
       expireDate = new Date @res.cookie.args[0][2].expires
-      moment(expireDate).diff(moment().add('days', 1), 'seconds').should.equal 0
+      moment(expireDate).diff(today, 'days').should.equal 1

     it 'redirects to the root if no forward url is passed', ->
       routes.continueAnyway @req, @res


Remove use of the 'wc' command

Remove use of the 'wc' command

'wc' is unavailable on windows

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


:lipstick: Give mousewheel events their own describe block

--- spec/editor-component-spec.coffee
+++ spec/editor-component-spec.coffee
@@ -747,74 +747,76 @@
       expect(horizontalScrollbarNode.scrollWidth).toBe gutterNode.offsetWidth + editor.getScrollWidth()

     describe "when a mousewheel event occurs on the editor", ->
-      it "updates the horizontal or vertical scrollbar depending on which delta is greater (x or y)", ->
+
+  describe "mousewheel events", ->
+    it "updates the scrollLeft or scrollTop on mousewheel events depending on which delta is greater (x or y)", ->
+      node.style.height = 4.5 * lineHeightInPixels + 'px'
+      node.style.width = 20 * charWidth + 'px'
+      component.measureHeightAndWidth()
+
+      expect(verticalScrollbarNode.scrollTop).toBe 0
+      expect(horizontalScrollbarNode.scrollLeft).toBe 0
+
+      node.dispatchEvent(new WheelEvent('mousewheel', wheelDeltaX: -5, wheelDeltaY: -10))
+      expect(verticalScrollbarNode.scrollTop).toBe 10
+      expect(horizontalScrollbarNode.scrollLeft).toBe 0
+
+      node.dispatchEvent(new WheelEvent('mousewheel', wheelDeltaX: -15, wheelDeltaY: -5))
+      expect(verticalScrollbarNode.scrollTop).toBe 10
+      expect(horizontalScrollbarNode.scrollLeft).toBe 15
+
+    describe "when the mousewheel event's target is a line", ->
+      it "keeps the line on the DOM if it is scrolled off-screen", ->
         node.style.height = 4.5 * lineHeightInPixels + 'px'
         node.style.width = 20 * charWidth + 'px'
         component.measureHeightAndWidth()

-        expect(verticalScrollbarNode.scrollTop).toBe 0
-        expect(horizontalScrollbarNode.scrollLeft).toBe 0
-
-        node.dispatchEvent(new WheelEvent('mousewheel', wheelDeltaX: -5, wheelDeltaY: -10))
-        expect(verticalScrollbarNode.scrollTop).toBe 10
-        expect(horizontalScrollbarNode.scrollLeft).toBe 0
-
-        node.dispatchEvent(new WheelEvent('mousewheel', wheelDeltaX: -15, wheelDeltaY: -5))
-        expect(verticalScrollbarNode.scrollTop).toBe 10
-        expect(horizontalScrollbarNode.scrollLeft).toBe 15
-
-      describe "when the mousewheel event's target is a line", ->
-        it "keeps the line on the DOM if it is scrolled off-screen", ->
-          node.style.height = 4.5 * lineHeightInPixels + 'px'
-          node.style.width = 20 * charWidth + 'px'
-          component.measureHeightAndWidth()
-
-          lineNode = node.querySelector('.line')
-          wheelEvent = new WheelEvent('mousewheel', wheelDeltaX: 0, wheelDeltaY: -500)
-          Object.defineProperty(wheelEvent, 'target', get: -> lineNode)
-          node.dispatchEvent(wheelEvent)
-
-          expect(node.contains(lineNode)).toBe true
-
-        it "does not set the mouseWheelScreenRow if scrolling horizontally", ->
-          node.style.height = 4.5 * lineHeightInPixels + 'px'
-          node.style.width = 20 * charWidth + 'px'
-          component.measureHeightAndWidth()
-
-          lineNode = node.querySelector('.line')
-          wheelEvent = new WheelEvent('mousewheel', wheelDeltaX: 10, wheelDeltaY: 0)
-          Object.defineProperty(wheelEvent, 'target', get: -> lineNode)
-          node.dispatchEvent(wheelEvent)
-
-          expect(component.mouseWheelScreenRow).toBe null
-
-        it "does not preserve the line if it is on screen", ->
-          expect(node.querySelectorAll('.line-number').length).toBe 14 # dummy line
-          lineNodes = node.querySelectorAll('.line')
-          expect(lineNodes.length).toBe 13
-          lineNode = lineNodes[0]
-
-          wheelEvent = new WheelEvent('mousewheel', wheelDeltaX: 0, wheelDeltaY: 100) # goes nowhere, we're already at scrollTop 0
-          Object.defineProperty(wheelEvent, 'target', get: -> lineNode)
-          node.dispatchEvent(wheelEvent)
-
-          expect(component.mouseWheelScreenRow).toBe 0
-          editor.insertText("hello")
-          expect(node.querySelectorAll('.line-number').length).toBe 14 # dummy line
-          expect(node.querySelectorAll('.line').length).toBe 13
-
-      describe "when the mousewheel event's target is a line number", ->
-        it "keeps the line number on the DOM if it is scrolled off-screen", ->
-          node.style.height = 4.5 * lineHeightInPixels + 'px'
-          node.style.width = 20 * charWidth + 'px'
-          component.measureHeightAndWidth()
-
-          lineNumberNode = node.querySelectorAll('.line-number')[1]
-          wheelEvent = new WheelEvent('mousewheel', wheelDeltaX: 0, wheelDeltaY: -500)
-          Object.defineProperty(wheelEvent, 'target', get: -> lineNumberNode)
-          node.dispatchEvent(wheelEvent)
-
-          expect(node.contains(lineNumberNode)).toBe true
+        lineNode = node.querySelector('.line')
+        wheelEvent = new WheelEvent('mousewheel', wheelDeltaX: 0, wheelDeltaY: -500)
+        Object.defineProperty(wheelEvent, 'target', get: -> lineNode)
+        node.dispatchEvent(wheelEvent)
+
+        expect(node.contains(lineNode)).toBe true
+
+      it "does not set the mouseWheelScreenRow if scrolling horizontally", ->
+        node.style.height = 4.5 * lineHeightInPixels + 'px'
+        node.style.width = 20 * charWidth + 'px'
+        component.measureHeightAndWidth()
+
+        lineNode = node.querySelector('.line')
+        wheelEvent = new WheelEvent('mousewheel', wheelDeltaX: 10, wheelDeltaY: 0)
+        Object.defineProperty(wheelEvent, 'target', get: -> lineNode)
+        node.dispatchEvent(wheelEvent)
+
+        expect(component.mouseWheelScreenRow).toBe null
+
+      it "does not preserve the line if it is on screen", ->
+        expect(node.querySelectorAll('.line-number').length).toBe 14 # dummy line
+        lineNodes = node.querySelectorAll('.line')
+        expect(lineNodes.length).toBe 13
+        lineNode = lineNodes[0]
+
+        wheelEvent = new WheelEvent('mousewheel', wheelDeltaX: 0, wheelDeltaY: 100) # goes nowhere, we're already at scrollTop 0
+        Object.defineProperty(wheelEvent, 'target', get: -> lineNode)
+        node.dispatchEvent(wheelEvent)
+
+        expect(component.mouseWheelScreenRow).toBe 0
+        editor.insertText("hello")
+        expect(node.querySelectorAll('.line-number').length).toBe 14 # dummy line
+        expect(node.querySelectorAll('.line').length).toBe 13
+
+    describe "when the mousewheel event's target is a line number", ->
+      it "keeps the line number on the DOM if it is scrolled off-screen", ->
+        node.style.height = 4.5 * lineHeightInPixels + 'px'
+        node.style.width = 20 * charWidth + 'px'
+        component.measureHeightAndWidth()
+
+        lineNumberNode = node.querySelectorAll('.line-number')[1]
+        wheelEvent = new WheelEvent('mousewheel', wheelDeltaX: 0, wheelDeltaY: -500)
+        Object.defineProperty(wheelEvent, 'target', get: -> lineNumberNode)
+        node.dispatchEvent(wheelEvent)
+
+        expect(node.contains(lineNumberNode)).toBe true

   describe "input events", ->
     inputNode = null


added collection models

added collection models

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

--- src/collections/categories.coffee
+++ src/collections/categories.coffee
@@ -0,0 +1,15 @@
+class Categories extends Backbone.Collection
+
+    model: Backbone.Model
+
+    parse: (data) ->
+        c = data.facet_counts.facet_fields.category.filter (_x, i) -> i % 2 is 0
+        c.map (x) ->
+            catagory: x
+
+    url: solr_query_uri
+            q: '*'
+            rows: 0
+            facet: true
+            "facet.field": "category"
+            "facet.mincount": 1


Highlight installed dist in package modal

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/hlecuanda/conda-ui.git/'


push other branches

push other branches


new folder convention

new folder convention

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/harsha-mudi/esti.git/'


:lipstick:

:lipstick:

--- src/atom/keymap.coffee
+++ src/atom/keymap.coffee
@@ -17,15 +17,11 @@
       'meta-,': 'open-user-configuration'
       'meta-o': 'open'

-    @_newWindow = => $native.newWindow()
-    @_openUserConfiguration = => atom.open(atom.userConfigurationPath)
-    @_open =  =>
+    $(document).on 'new-window', => $native.newWindow()
+    $(document).on 'open-user-configuration', => atom.open(atom.userConfigurationPath)
+    $(document).on 'open', =>
       url = $native.openDialog()
       atom.open(url) if url
-
-    $(document).on 'new-window', @_newWindow
-    $(document).on 'open-user-configuration', @_openUserConfiguration
-    $(document).on 'open', @_open

   unbindDefaultKeys: ->
     $(document).unbind 'new-window', @_newWindow


removing whitespace to test grunt watch

removing whitespace to test grunt watch

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


Update time again

Update time again

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


Added Elyssa.Node stub

Added Elyssa.Node stub

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

--- src/foundation/node.coffee
+++ src/foundation/node.coffee
@@ -0,0 +1,20 @@
+do (window = @, Elyssa = @Elyssa or= {}) ->
+  'use strict'
+
+  class Elyssa.Node extends Elyssa.Entity
+
+    constructor: ->
+
+    position: new Elyssa.Vector()
+    color: new Elyssa.Color()
+    scale: new Elyssa.Vector()
+    texture: new Elyssa.Texture()
+
+    draw: ->
+
+
+    toString: ->
+      position: position.toString()
+      color: color.toString()
+      scale: scale.toString()
+      texture: texture.toString()


Check in the draft implementation of the Api class

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

--- library/gearing/api.coffee
+++ library/gearing/api.coffee
@@ -0,0 +1,105 @@
+###
+Copyright (c) 2013, Alexander Cherniuk <ts33kr@gmail.com>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+   list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+###
+
+logger = require "winston"
+events = require "events"
+colors = require "colors"
+http = require "http"
+
+_ = require "underscore"
+router = require "./router"
+service = require "./service"
+
+# This is an abstract base class for every service in the system
+# and in the end user application that provides a REST interface
+# to some arbitrary resource, determined by HTTP path and guarded
+# by the domain matching. This is the crucial piece of framework.
+# It supports strictly methods defined in the HTTP specification.
+module.exports.Api = class Api extends service.Service
+
+    # Get the contents of the resources at the established path. It
+    # is a good idea for this HTTP method to be idempotent. As the
+    # rule, this method does not have to alter any contents or data
+    # of the resource. Use for unobtrusive retrieval of resources.
+    GET: (request, response, resource, domain) ->
+        @unsupported(request, response)
+
+    # Alter the contents of the resources at the established path. It
+    # usually means replacing the old contents with the new contents.
+    # This HTTP method nicely maps to UPDATE method of the storages.
+    # Use this method to repetidely replace the contents of resources.
+    PUT: (request, response, resource, domain) ->
+        @unsupported(request, response)
+
+    # Append the contents to the resources at the established path. It
+    # usually means adding new content in addition to the old one. This
+    # HTTP method nicely maps to INSERT method of the storage engines.
+    # Use this method to successively append new contents to resources.
+    POST: (request, response, resource, domain) ->
+        @unsupported(request, response)
+
+    # Delete the contents of the resources at the establushed path. It
+    # generally should destroy the contents of the resource for good.
+    # Be sure to provide enough protection for your API for destructive
+    # HTTP methods like this one. Apply it to indicate destruction.
+    DELETE: (request, response, resource, domain) ->
+        @unsupported(request, response)
+
+    # This method should generally be used to obtain HTTP methods that
+    # are allowed on this resources. This is not the only possible way
+    # of implementing this method, because it usually can have a lot of
+    # different interpretations other than the one in the HTTP spec.
+    OPTIONS: (request, response, resource, domain) ->
+        @unsupported(request, response)
+
+    # Process the already macted HTTP request according to the REST
+    # specification. That is, see if the request method conforms to
+    # to the RFC, and if so, dispatch it onto corresponding method
+    # defined in the subclass of this abstract base class. Default
+    # implementation of each method will throw a not implemented.
+    process: (request, response, next) ->
+        tokens = super(request, response, next)
+        parameters = [request, response, next]
+        knowns = ["GET", "PUT", "POST", "DELETE", "OPTIONS"]
+        method = request.method?.toUpperCase()?.trim()
+        return @unsupported(parameters...) unless method in knowns
+        missing = "Missing implementation for #{method} method"
+        throw new Error(missing) unless method of this
+        variables = [tokens.resource, tokens.domain]
+        this[method](request, response, variables...); this
+
+    # This method is intended for indicating to a client that the
+    # method that has been used to make the request is not supported
+    # by this service of the internals that are comprising service.
+    # Can be used from the outside, but generally should not be done.
+    unsupported: (request, response, next) ->
+        methodNotAllowed = 405
+        codes = http.STATUS_CODES
+        message = codes[methodNotAllowed]
+        accept = request.headers.accept or ""
+        handles = (mime) -> accept.indexOf(mime) >= 0
+        response.statusCode methodNotAllowed
+        response.end(error: message) if handles("json")
+        response.end(message); this


get rid of getTaskId() and getTaskName() (since we can just use tabcat.task.get())


Fix typo in editor settings

Fix typo in editor settings

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


cleanup defaults importing

cleanup defaults importing

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


Use package.json in application info

Use package.json in application info

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/Hiroto-K/EncryptionHelper.git/'


Namespaced model update fix

Namespaced model update fix

--- vendor/assets/javascripts/editable/rails.js.coffee
+++ vendor/assets/javascripts/editable/rails.js.coffee
@@ -22,7 +22,7 @@
           obj[nestedName + '_attributes'] = nested
         else
           obj[myName] = myValue
-          params[model] = obj
+        params[model] = obj
         delete params.name
         delete params.value
         delete params.pk


removed my API credentials

removed my API credentials

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


Recommend GitRepository. Ugh

Recommend GitRepository. Ugh

--- exports/atom.coffee
+++ exports/atom.coffee
@@ -27,7 +27,7 @@
   module.exports.Reactionary = require 'reactionary-atom-fork'

 Object.defineProperty module.exports, 'Git', get: ->
-  deprecate "Please require `GitRepository` instead of `Git`: `{Git} = require 'atom'`"
+  deprecate "Please require `GitRepository` instead of `Git`: `{GitRepository} = require 'atom'`"
   module.exports.GitRepository

 Object.defineProperty module.exports, 'EditorView', get: ->


Added module for REST

Added module for REST

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


Fix tx reconcile tiles to display match tx app_name

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


adding animate to layout extra

adding animate to layout extra

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/tcarlsen/pixel-moba.git/'


Revert "Add grub script"

Revert "Add grub script"

This reverts commit 481b2caf5ba454931380df4cded9ec630e1ce479.

--- src/scripts/grub.coffee
+++ src/scripts/grub.coffee
@@ -1,44 +0,0 @@
-# Description:
-#   Decides where your team should get their grub on
-#
-# Dependencies:
-#   None
-#
-# Configuration:
-#   None
-#
-# Commands:
-#   grub add - Add a grubbery to the list
-#   grub rm - Remove a grubbery from the list
-#   grub ls - List all of the grubberies that have been added
-#   grub time - Chooses a grubbery at random
-#
-# Notes:
-#   None
-#
-# Author:
-#   carmstrong
-
-module.exports = (robot) ->
-  robot.brain.on 'loaded', =>
-    robot.brain.data.grub ||= []
-
-  robot.hear /grub add (.*)/i, (msg) ->
-    grubhub = msg.match[1]
-    if grubhub.length
-      robot.brain.data.grub.push(grubhub)
-    else
-      msg.send "Provide a grubbery..."
-
-  robot.hear /grub rm (.*)/i, (msg) ->
-    grubhub = msg.match[1]
-    if grubhub.length
-      robot.brain.data.grub = robot.brain.data.grub.filter (x) -> x != grubhub
-    else
-      msg.send "Provide a grubbery..."
-
-  robot.hear /grub ls/i, (msg) ->
-    msg.send "Grubberies: #{ robot.brain.data.grub.join(", ") }"
-
-  robot.hear /grub time/i, (msg) ->
-    msg.send "We're grubbing at #{ msg.random robot.brain.data.grub } today"


JIRA JQL filter names should not be case sensitive

 - Improved documentation since issues could mean GitHub or other trackers
 - <name> needs to be specified to use a filter
 - Filter names are no longer case sensitive
 - Error message when a filter isn't found

--- src/scripts/jira.coffee
+++ src/scripts/jira.coffee
@@ -15,13 +15,13 @@
 #   HUBOT_JIRA_IGNOREUSERS
 #
 # Commands:
-#   <Project Key>-<Issue ID> - Displays information about the ticket (if it exists)
-#   hubot show watchers for <Issue Key> - Shows watchers for the given issue
+#   <Project Key>-<Issue ID> - Displays information about the JIRA ticket (if it exists)
+#   hubot show watchers for <Issue Key> - Shows watchers for the given JIRA issue
 #   hubot search for <JQL> - Search JIRA with JQL
-#   hubot save filter <JQL> as <name> - Save JQL as filter in the brain
-#   hubot use filter - Use a filter from the brain
-#   hubot show filter(s) - Show all filters
-#   hubot show filter <name> - Show a specific filter
+#   hubot save filter <JQL> as <name> - Save JIRA JQL query as filter in the brain
+#   hubot use filter <name> - Use a JIRA filter from the brain
+#   hubot show filter(s) - Show all JIRA filters
+#   hubot show filter <name> - Show a specific JIRA filter
 #
 # Author:
 #   codec
@@ -40,7 +40,7 @@
   delete: (name) ->
     result = []
     @cache.forEach (filter) ->
-      if filter.name isnt name
+      if filter.name.toLowerCase() isnt name.toLowerCase()
         result.push filter

     @cache = result
@@ -50,7 +50,7 @@
     result = null

     @cache.forEach (filter) ->
-      if filter.name is name
+      if filter.name.toLowerCase() is name.toLowerCase()
         result = filter

     result
@@ -212,6 +212,10 @@
   robot.respond /(use )?filter (.*)/i, (msg) ->
     name    = msg.match[2]
     filter  = filters.get name
+
+    if not filter
+      msg.reply "Sorry, could not find filter #{name}"
+      return

     search msg, filter.jql, (text) ->
       msg.reply text


initial parser tests

initial parser tests

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

--- test/parser/classes.coffee
+++ test/parser/classes.coffee
@@ -0,0 +1,15 @@
+# class parsing tests
+
+p = require '../../dst/apex.js'
+
+assert = (val, msg) ->
+  throw new Error msg if !val
+
+parses = (str) ->
+  try
+    p.parse str
+  catch error
+    no
+
+assert parses 'public class Foo {}'
+assert not parses 'class Foo {}'


Rename tasks

Rename tasks

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/morizotter/first-gulp.git/'


client/redux: add helper

client/redux: add helper

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


Failing spec that demonstrates that queryless sorts fail.

--- spec/javascripts/atwho.spec.coffee
+++ spec/javascripts/atwho.spec.coffee
@@ -81,6 +81,11 @@
       names = callbacks.data_refactor.call(controller, fixtures["names"])
       names = callbacks.sorter.call(controller, "e", names, "name")
       expect(names).toContain({ name : 'Ethan', order : 0 })
+
+    it "can sort the data without a query", ->
+      names = callbacks.data_refactor.call(controller, fixtures["names"])
+      names = callbacks.sorter.call(controller, "", names, "name")
+      expect(names[0]).toEqual({ name : 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' })

     it "can eval temple", ->
       map = {name: "username", nick: "nick_name"}
@@ -205,4 +210,3 @@
       reposition_event = spyOnEvent($inputor, "reposition.atwho")
       trigger_atwho()
       expect(reposition_event).toHaveBeenTriggered()
-


fix 6/7 hack

fix 6/7 hack

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


fix laziness in sampledBy

fix laziness in sampledBy

--- src/Bacon.coffee
+++ src/Bacon.coffee
@@ -623,10 +623,14 @@
     else
       @subscribeInternal = new PropertyDispatcher(subscribe, handler).subscribe

-    @sampledBy = (sampler, combinator = former) =>
-      combinator = toCombinator combinator
-      thisSource = new Source(this, false, false, this.subscribeInternal)
-      samplerSource = new Source(sampler, true, false)
+    @sampledBy = (sampler, combinator) =>
+      if combinator?
+        combinator = toCombinator combinator
+      else
+        lazy = true
+        combinator = (f) -> f()
+      thisSource = new Source(this, false, false, this.subscribeInternal, lazy)
+      samplerSource = new Source(sampler, true, false, sampler.subscribe, lazy)
       stream = Bacon.when([thisSource, samplerSource], combinator)
       if sampler instanceof Property then stream.toProperty() else stream

@@ -873,17 +877,18 @@
       sink? end()

 class Source
-  constructor: (s, @sync, consume, @subscribe) ->
+  constructor: (s, @sync, consume, @subscribe, lazy = false) ->
     queue = []
+    invoke = if lazy then _.id else (f) -> f()
     @subscribe = s.subscribe if not @subscribe?
     @markEnded = -> @ended = true
     if consume
-      @consume = () -> queue.shift()()
+      @consume = () -> invoke(queue.shift())
       @push  = (x) -> queue.push(x)
       @mayHave = (c) -> !@ended || queue.length >= c
       @hasAtLeast = (c) -> queue.length >= c
     else
-      @consume = () -> queue[0]()
+      @consume = () -> invoke(queue[0])
       @push  = (x) -> queue = [x]
       @mayHave = -> true
       @hasAtLeast = (c) -> queue.length


Fixed: vtodo wasn't properly created when exporting analarm to ical

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


Improve next problem handling and state tracking

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


Buttons

Buttons

--- lib/main.coffee
+++ lib/main.coffee
@@ -95,6 +95,18 @@
     # Install panel
     applySectionHeadings(sv)

+    # Buttons
+    for btn in sv.querySelectorAll('.meta-controls .install-button')
+      btn.textContent = "インストール"
+    for btn in sv.querySelectorAll('.meta-controls .settings')
+      btn.textContent = "設定"
+    for btn in sv.querySelectorAll('.meta-controls .uninstall-button')
+      btn.textContent = "アンインストール"
+    for btn in sv.querySelectorAll('.meta-controls .icon-playback-pause span')
+      btn.textContent = "無効にする"
+    for btn in sv.querySelectorAll('.meta-controls .icon-playback-play span')
+      btn.textContent = "有効にする"
+
   applySpecialHeading = (area, org, childIdx, text) ->
     sh = getTextMatchElement(area, '.section-heading', org)
     sh.childNodes[childIdx].textContent = null


Improve Document

Improve Document

--- src/fairy.coffee
+++ src/fairy.coffee
@@ -585,7 +585,7 @@
       #   3. Calculate pending tasks. The equation used to calculate pending
       #   tasks is:
       #
-      #   `pending = total - finished - processing - failed - blocked`
+      # `pending = total - finished - processing - failed - blocked`
       result.blocked.groups = multi_res[4].length
       multi2 = @redis.multi()
       multi2.llen "#{@key 'QUEUED'}:#{group}" for group in multi_res[4]


3rd commit

3rd commit

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