Fixed the archive bugs. (#2119)

Fixed the archive bugs. (#2119)

* Set the play Url for play clip and mp4 url for download clip.

* Fixed the undefined URL error after click upload image link on archive.

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


Create Main.coffee

Create Main.coffee

https://paiza.jp/poh/hatsukoi/share/84eb217c

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

--- POH8/Mizugi/Main.coffee
+++ POH8/Mizugi/Main.coffee
@@ -0,0 +1,39 @@
+# Try POH
+# author: Leonardone @ NEETSDKASU
+# ===================================================
+
+solve = (mr) ->
+    [n, m] = mr.gis()
+    s = mr.gs()
+    g = mr.gs()
+    x = (0 for _ in [0 .. 27])
+    a = 'a'.charCodeAt 0
+    for c in s
+        x[c.charCodeAt(0) - a]++
+    for c in g
+        x[c.charCodeAt(0) - a]--
+    needs = 0
+    needs -= i for i in x when i < 0
+    console.log needs
+
+# ===================================================
+(() ->
+    buf = ''
+    process.stdin.resume()
+    process.stdin.setEncoding 'utf8'
+    process.stdin.on 'data', (chunk) -> buf += chunk.toString()
+    process.stdin.on 'end', () ->
+        lines = buf.split '\n'
+        cur = 0
+        gs = -> lines[cur++]
+        gi = -> parseInt gs()
+        gss = -> gs().split ' '
+        gis = -> gss().map (x) -> parseInt x
+        ngt = (n, f) -> f() for _ in [1..n]
+        ngs = (n) -> ngt n, gs
+        ngi = (n) -> ngt n, gi
+        ngss = (n) -> ngt n, gss
+        ngis = (n) -> ngt n, gis
+        solve "gs": gs, "gi": gi, "gss": gss, "gis": gis, "ngs": ngs, "ngi": ngi, "ngss": ngss, "ngis": ngis
+    )()
+# ===================================================


moved _config from prototype to constructor

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


Added spool file.

Added spool file.

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

--- src/coffee/utils/spool.coffee
+++ src/coffee/utils/spool.coffee
@@ -0,0 +1,80 @@
+'use strict'
+
+_ = require 'lodash'
+promise = require 'promised-io/promise'
+Deferred = promise.Deferred
+fs = require 'fs'
+
+module.exports = Spool = {}
+
+___ = require('parkplace').scope Spool
+
+___.secret '_files', {}
+
+if Object?.defineProperty?
+    Object.defineProperty Spool, 'files', {
+        get: ()->
+            return _ @_files
+    }, {
+        writable: false
+        enumerable: true
+        configurable: false
+    }
+
+___.readable 'add', ()->
+    self = @
+    _(arguments).toArray().each (arg)->
+        if _.isString arg
+            self._files[arg] = {
+                raw: null
+            }
+
+___.readable 'remove', ()->
+    if 0 < _.size arguments
+        self = @
+        _(arguments).toArray().each (arg)->
+            if self._files[arg]?
+                delete self._files[arg]
+            return
+        return @_files
+
+___.guarded 'readFile', (input, opts={})->
+    d = new Deferred()
+    unless input?
+        d.reject new Error "Expected input to be defined."
+    else
+        options = _.assign {charset: 'utf8'}, opts
+        fs.readFile input, options, (e, read)->
+            if e?
+                d.reject e
+                return
+            d.resolve read.toString()
+    return d
+
+___.readable 'readFiles', ()->
+    self = @
+    resolver = new Deferred()
+    # map the files into an instruction set
+    instructions = @files.map((data, file)->
+        return ()->
+            d = new Deferred()
+            success = (x)->
+                unless data.raw?
+                    self._files[file].raw = x
+                d.resolve x
+            fail = (x)->
+                d.reject x
+            unless data.raw?
+                self.readFile(file).then success, fail
+            return d
+    ).value()
+    resolve = (content)->
+        if content?
+            resolver.resolve self.files.map((x)-> return x.raw).value()
+    reject = (e)->
+        resolver.reject e
+
+    promise.seq(instructions).then resolve, reject
+    return resolver
+
+


Add failing test for #2274

Add failing test for #2274

Tested first on a branch off of `master` to ensure that it would
actually fail :grinning:

--- spec/editor-component-spec.coffee
+++ spec/editor-component-spec.coffee
@@ -344,11 +344,29 @@
         expect(line13LeafNodes[1].textContent).toBe '  '
         expect(line13LeafNodes[1].classList.contains('indent-guide')).toBe true

-      getLeafNodes = (node) ->
-        if node.children.length > 0
-          flatten(toArray(node.children).map(getLeafNodes))
-        else
-          [node]
+    describe "when indent guides are disabled", ->
+      beforeEach ->
+        component.setShowIndentGuide(false)
+        runSetImmediateCallbacks()
+
+      it "does not render indent guides on lines containing only whitespace", ->
+        editor.getBuffer().insert([1, Infinity], '\n      ')
+        runSetImmediateCallbacks()
+
+        line2LeafNodes = getLeafNodes(component.lineNodeForScreenRow(2))
+        expect(line2LeafNodes.length).toBe 3
+        expect(line2LeafNodes[0].textContent).toBe '  '
+        expect(line2LeafNodes[0].classList.contains('indent-guide')).toBe false
+        expect(line2LeafNodes[1].textContent).toBe '  '
+        expect(line2LeafNodes[1].classList.contains('indent-guide')).toBe false
+        expect(line2LeafNodes[2].textContent).toBe '  '
+        expect(line2LeafNodes[2].classList.contains('indent-guide')).toBe false
+
+    getLeafNodes = (node) ->
+      if node.children.length > 0
+        flatten(toArray(node.children).map(getLeafNodes))
+      else
+        [node]

     describe "when the buffer contains null bytes", ->
       it "excludes the null byte from character measurement", ->


Modified in browser at pixie.strd6.com

Modified in browser at pixie.strd6.com

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

--- src/engine_fps_counter.coffee
+++ src/engine_fps_counter.coffee
@@ -0,0 +1,35 @@
+###*
+The FPSCounter module tracks and displays the framerate.
+
+

+window.engine = Engine
+  ...
+  includedModules: ["FPSCounter"]
+  FPSColor: "#080"
+

+
+@name FPSCounter
+@fieldOf Engine
+@module
+
+@param {Object} I Instance variables
+@param {Object} self Reference to the engine
+###
+Engine.FPSCounter = (I, self) ->
+  Object.reverseMerge I,
+    showFPS: true
+    FPSColor: "#FFF"
+
+  framerate = Framerate
+    noDOM: true
+
+  self.bind "overlay", (canvas) ->
+    if I.showFPS
+      canvas.font("bold 9pt consolas, 'Courier New', 'andale mono', 'lucida console', monospace")
+
+      canvas.drawText
+        color: I.FPSColor
+        position: Point(6, 18)
+        text: "fps: #{framerate.fps}"
+
+    framerate.rendered()


Added bullshitator.coffee

Added bullshitator.coffee

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

--- src/bullshitator.coffee
+++ src/bullshitator.coffee
@@ -0,0 +1,185 @@
+
+root = this
+if exports?
+  root = exports
+else
+  @bullshitator = {}
+  root = @bullshitator
+
+PUNCTUATION = /([\.,;!?])/g
+WHITESPACES = /\s+/
+
+tokenize = (corpus)->
+  # A simple tokenizer splitting on punctuation and whitespaces.
+  corpus = corpus.replace(PUNCTUATION, " $1 ")
+  corpus = corpus.replace /(Mr|Mrs|Pr)\./g, "$1 "
+  corpus = corpus.replace /("|--)/g, " "
+  corpus.split WHITESPACES
+
+class DefaultDict
+
+    # A simple implementation of Python's
+    # defaultdict.
+    constructor: (@default_value)->
+        @c = {}
+
+    get: (k)->
+      # if the key is not within the dictionary
+      # automatically creates an entry.
+      if not @c[k]?
+          @c[k] = @default_value()
+      @c[k]
+
+    set: (k,v)->
+        @c[k]=v
+
+    items: ->
+      # Returns the list of [key,value]
+      ([k,v] for k,v of @c)
+
+class Counter extends DefaultDict
+
+    constructor: ->
+        @c = {}
+        @default_value = -> 0
+    inc: (k, count=1)->
+        @c[k] = @get(k) + count
+
+
+
+
+binary_search_aux = (arr, target, start, end)->
+    if arr[start] >= target
+        start
+    else if (end - start) == 1
+        end
+    else
+        middle = (start + end - (start+end) % 2) / 2
+        if arr[middle] >= target
+            binary_search_aux arr, target, start, middle
+        else
+            binary_search_aux arr, target, middle, end
+
+binary_search = (arr, target)->
+  # Assuming that arr is sorted,
+  # returns the smallest id, such that
+  # arr[id] >= target
+  binary_search_aux arr, target, 0, arr.length
+
+
+class Distribution
+
+    constructor: (weights)->
+      # Takes a list of [value, weight] as
+      # argument.  See draw
+      @total = 0
+      @values = []
+      @boundaries = []
+      for [value,weight] in weights
+        @values.push value
+        @total += weight
+        @boundaries.push @total
+
+    draw: ->
+      # Returns a random value
+      # The bigger the weight associated to
+      # the value, the greater the chance
+      # of appearance.
+      target = Math.random() * @total
+      value_id = binary_search @boundaries, target
+      @values[value_id]
+
+
+
+all = (predicate, elements)->
+  # return true iff all the elements
+  # match the predicate
+  for el in elements
+    if not predicate el
+      return false
+  true
+
+add_space = (token)->
+  # add space before token if it is
+  # required.
+  if token in ".,"
+    token
+  else
+    " " + token
+
+
+count_triplets = (tokens)->
+  # Returns a counter for all the
+  # triplets of tokens in the form of
+  # a three level map :
+  #   token -> token -> token -> count
+  triplet_counter = new DefaultDict (-> new DefaultDict (-> new Counter()))
+  for start in [0...tokens.length-2]
+      [tok1, tok2, tok3] = tokens[start...start+3]
+      triplet_counter.get(tok1).get(tok2).inc(tok3)
+  triplet_counter
+
+class LanguageModel
+
+  # This object represents a
+  # language model. It is able to
+  # generate random sentences out of it.
+  constructor: (@trigrams, @starting_bigrams)->
+
+  draw_tokens: ->
+    # Generates a sequence of token
+    # finishing by "."
+    [w1, w2] = @starting_bigrams.draw()
+    tokens = [w1, w2]
+    while w2 != "."
+      [w1, w2] = [ w2, @trigrams.get(w1)[w2].draw() ]
+      tokens.push w2
+    if 3 < tokens.length < 12
+      tokens
+    else
+      @draw_tokens()
+
+  draw_sentence: ->
+    # Returns a random sentence
+    tokens = @draw_tokens()
+    ( add_space(token) for token in tokens).join("").trim()
+
+
+  draw_text: (min_length)->
+    # Returns a text of a length of around
+    # min_length.
+    text = ""
+    while text.length < min_length
+      text += @draw_sentence() + " "
+    text
+
+root.learn =  (text)->
+  # tokenize our text
+  tokens = tokenize text+"."
+  # creates a triplet counter
+  triplet_counter = count_triplets tokens
+  # computes the trigram distribution
+  markov_model = new DefaultDict -> {}
+  for w1, doublet_counter of triplet_counter.c
+    for w2, word_counts of doublet_counter.c
+      token_distribution = new Distribution word_counts.items()
+      markov_model.get(w1)[w2] = token_distribution
+  # Given a triplet counter map,
+  # computes a distribution of starting
+  # bigram
+  bigrams = []
+  for k1, word_counter of triplet_counter.get(".").c
+    for k2, word_count of word_counter.c
+      if word_count > 2
+        bigrams.push [ [k1, k2], word_count ]
+  bigram_distribution = new Distribution bigrams
+  new LanguageModel markov_model, bigram_distribution
+
+
+if process?.argv.length == 3
+  fs = require 'fs'
+  filepath = process.argv[2]
+  console.log filepath
+  text = fs.readFileSync filepath, {'encoding': 'utf-8'}
+  model = root.learn text
+  console.log model.draw_text 500


improve indentation

improve indentation

--- apps/auction/client/registration_form.coffee
+++ apps/auction/client/registration_form.coffee
@@ -43,24 +43,23 @@
     @internationalizeFields()

   cardCallback: (response) =>
-    switch response.status
-      when 201  # success
-        card      = new Backbone.Model
-        card.url  = "#{sd.API_URL}/api/v1/me/credit_cards"
-        card.save token: response.data.uri,
-          success: =>
-            @currentUser.createBidder
-              saleId: @model.get('id')
-              success: =>
-                @success()
-                analytics.track.funnel 'Registration submitted'
-              error: (xhr) =>
-                @showError "Registration submission error", xhr
-          error: =>
-            @showError "Error adding your credit card", response
-        analytics.track.funnel 'Registration card validated'
-      else
-        @showError "Registration card - other error", response
+    if response.status == 201
+      card      = new Backbone.Model
+      card.url  = "#{sd.API_URL}/api/v1/me/credit_cards"
+      card.save token: response.data.uri,
+        success: =>
+          @currentUser.createBidder
+            saleId: @model.get('id')
+            success: =>
+              @success()
+              analytics.track.funnel 'Registration submitted'
+            error: (xhr) =>
+              @showError "Registration submission error", xhr
+        error: =>
+          @showError "Error adding your credit card", response
+      analytics.track.funnel 'Registration card validated'
+    else
+      @showError "Registration card - other error", response

   cardData: ->
     name: @fields['name on card'].el.val()


Specified camera id on remove and delete camera request. (#2013)


app/util: add util to check cloned stack template still exist

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


Add checking for required properties

Add checking for required properties

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/tombell/hubot-github-identity.git/'


Add Dictionary

Add Dictionary

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

--- src/scripts/dictionary.coffee
+++ src/scripts/dictionary.coffee
@@ -0,0 +1,34 @@
+# Dictionary definitions with the Wordnik API. You'll need an API key from http://developer.wordnik.com/
+#
+# define me <word> - Grabs a dictionary definition of a word.
+module.exports = (robot) ->
+  robot.respond /define( me)? (.*)/i, (msg) ->
+
+    if process.env.WORDNIK_API_KEY == undefined
+      msg.send "Missing WORDNIK_API_KEY env variable."
+      return
+
+    word = msg.match[2]
+
+    msg.http("http://api.wordnik.com/v4/word.json/#{escape(word)}/definitions")
+      .header('api_key', process.env.WORDNIK_API_KEY)
+      .get() (err, res, body) ->
+        definitions = JSON.parse(body)
+
+        if definitions.length == 0
+          msg.send "No definitions for \"#{word}\" found."
+        else
+          reply = "Definitions for \"#{word}\":\n"
+
+          lastSpeechType = null
+          definitions = definitions.forEach (def) ->
+            # Show the part of speech (noun, verb, etc.) when it changes
+            if def.partOfSpeech != lastSpeechType
+              reply += " (#{def.partOfSpeech})\n" if def.partOfSpeech != undefined
+
+            lastSpeechType = def.partOfSpeech
+
+            reply += "  - #{def.text}\n"
+
+          msg.send reply
+


Add toCamelCase function.

Add toCamelCase function.

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


clean coffee

clean coffee

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


Don't do special handling on up and down arrow keys if shift is being held.

--- src/Editor.coffee
+++ src/Editor.coffee
@@ -50,8 +50,8 @@
     switch event.keyCode
       when 222 then useSmartHandler @applySmartQuote
       when 189 then useSmartHandler @applySmartEmDash
-      when 38  then useSmartHandler @handleUpPress
-      when 40  then useSmartHandler @handleDownPress
+      when 38  then useSmartHandler @handleUpPress unless event.shiftKey
+      when 40  then useSmartHandler @handleDownPress unless event.shiftKey
       when 83
         # Disable Cmd+S and Ctrl+S
         if event.metaKey || event.ctrlKey


MachineSettingsVMSharingView: Added class.

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

--- client/app/lib/providers/machinesettingsvmsharingview.coffee
+++ client/app/lib/providers/machinesettingsvmsharingview.coffee
@@ -0,0 +1,15 @@
+kd                        = require 'kd'
+KDView                    = kd.View
+MachineSettingsCommonView = require './machinesettingscommonview'
+
+module.exports = class MachineSettingsVMSharingView extends MachineSettingsCommonView
+
+
+  constructor: (options = {}, data) ->
+
+    options.headerTitle          = 'Shared With'
+    options.addButtonTitle       = 'INVITE'
+    options.headerAddButtonTitle = 'ADD PEOPLE'
+    # options.listViewItemClass    =
+
+    super options, data


Fix bug in ModelProvider causing incorrect init data in #get().

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


Elektron: Tray: fix click handlers for team flows

--- elektron/src/trayicon.coffee
+++ elektron/src/trayicon.coffee
@@ -122,15 +122,15 @@
         keys.map (key) =>
           return  if key is 'latest'
           teamName = @_previousTeams[key]
-          return { label: teamName, click: -> @_mainWindow.loadURL "https://#{key}.koding.com" }
+          return { label: teamName, click: => @_mainWindow.loadURL "https://#{key}.koding.com" }
         .filter(Boolean)

       submenu or= []

       submenu = submenu.concat [
         { type: 'separator', visible: !!submenu.length }
-        { label: 'Login to Another Team', click: -> @_mainWindow.loadURL 'https://koding.com/Teams' }
-        { label: 'Create a Team', click: -> @_mainWindow.loadURL 'https://koding.com/Teams/Create' }
+        { label: 'Login to Another Team', click: => @_mainWindow.loadURL 'https://koding.com/Teams' }
+        { label: 'Create a Team', click: => @_mainWindow.loadURL 'https://koding.com/Teams/Create' }
       ]

       menu.unshift { label: 'Your Teams', submenu }


Activity: private message show more  copy change


SettingsPane: Export editorSettingsView and terminalSettingsView in settings pane.

--- client/ide/workspace/panes/settings/settingspane.coffee
+++ client/ide/workspace/panes/settings/settingspane.coffee
@@ -8,5 +8,8 @@

     @addSubView scrollView = new KDCustomScrollView

-    scrollView.wrapper.addSubView new IDE.EditorSettingsView
-    scrollView.wrapper.addSubView new IDE.TerminalSettingsView
+    @editorSettingsView   = new IDE.EditorSettingsView
+    @terminalSettingsView = new IDE.TerminalSettingsView
+
+    scrollView.wrapper.addSubView @editorSettingsView
+    scrollView.wrapper.addSubView @terminalSettingsView


Disable HTML post compress for inline CSS, it kills normal paragraph spaces too.

--- Gruntfile.coffee
+++ Gruntfile.coffee
@@ -108,11 +108,11 @@
         files:
           "<%= core.dist %>/css/a.css": ["<%= core.dist %>/css/*.css"]

-      html:
-        expand: true
-        cwd: "<%= core.dist %>"
-        src: "**/*.html"
-        dest: "<%= core.dist %>"
+      # html:
+      #   expand: true
+      #   cwd: "<%= core.dist %>"
+      #   src: "**/*.html"
+      #   dest: "<%= core.dist %>"

     shell:
       options:


fix: hide error message on new submit

fix: hide error message on new submit

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


Remove unused grunt task

Remove unused grunt task

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


feat(grunt): pass project name when deploy

--- Gruntfile.coffee
+++ Gruntfile.coffee
@@ -296,7 +296,7 @@

       serve:
         options:
-          config: "_config.yml,_amsf/_config.yml,<%= config.app %>/_data/<%= amsf.theme.current %>.yml,_config.dev.yml,_config.user.yml"
+          config: "_config.yml,_amsf/_config.yml,<%= config.app %>/_data/<%= amsf.theme.current %>.yml,_config.user.yml,_config.dev.yml"
           drafts: true
           future: true

@@ -319,7 +319,7 @@

       # Auto commit untracked files sync'ed from sync_local
       sync_commit:
-        command: "sh <%= config.deploy.s3_website.dest %>/auto-commit"
+        command: "sh <%= config.deploy.s3_website.dest %>/auto-commit '<%= config.pkg.name %>'"

       amsf__core__update_deps:
         command: [


Revert "chore: add --init switch for `amsf` Travis test build"

This reverts commit 06cdb6104ac58118949d97d68fac6f8e7e978962.

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

   grunt.registerTask "build", "Build site with `jekyll`, use `--busy` to set availability to false", (target) ->
     grunt.config.set "replace.availability.replacements.0.to", "$1 false" if grunt.option("busy")
-    grunt.config.set "shell.dist.command", "jekyll build --config _config.init.yml" if grunt.option("init")
     grunt.task.run [
       "replace"
       "clean"


death to define

death to define

--- plugins/project/index.coffee
+++ plugins/project/index.coffee
@@ -1,2 +1 @@
-define (require, exports, module) ->
-  exports.Project = require('project/project').init()
+exports.Project = require('project/project').init()


Don't throw exceptions watching paths

Don't throw exceptions watching paths

--- lib/directory.coffee
+++ lib/directory.coffee
@@ -141,10 +141,11 @@

   # Public: Watch this directory for changes.
   watch: ->
-    @watchSubscription ?= PathWatcher.watch @path, (eventType) =>
-      switch eventType
-        when 'change' then @reload()
-        when 'delete' then @destroy()
+    try
+      @watchSubscription ?= PathWatcher.watch @path, (eventType) =>
+        switch eventType
+          when 'change' then @reload()
+          when 'delete' then @destroy()

   getEntries: ->
     try


remove static value and give dynamically header value using coffee


BM : Reset 0 value inputs on focus

BM : Reset 0 value inputs on focus

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


Reorder include list

Reorder include list

fatal: remote error: upload-pack: not our ref e2f1683e96a8616829b43e1e7e463ceedb412fa8
fatal: the remote end hung up unexpectedly


only test using bundles included by stratus-bundle

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


ability to open second dialog

ability to open second dialog

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


Add spec for clicking paths in file finder

--- spec/extensions/fuzzy-finder-spec.coffee
+++ spec/extensions/fuzzy-finder-spec.coffee
@@ -260,6 +260,22 @@
         expect(activeEditor.isFocused).toBeTruthy()
         expect(finder.miniEditor.isFocused).toBeFalsy()

+    describe "selecting a path with the mouse", ->
+      it "opens the clicked path in the active editor and focuses it", ->
+        rootView.attachToDom()
+        rootView.trigger 'fuzzy-finder:toggle-file-finder'
+
+        selectedLi = finder.find('li:eq(1)')
+
+        expectedPath = rootView.project.resolve(selectedLi.text())
+        expect(rootView.activeEditor().buffer.path).not.toBe expectedPath
+        expect(rootView.activeEditor().isFocused).toBeFalsy()
+
+        selectedLi.mousedown()
+
+        expect(rootView.activeEditor().buffer.path).toBe expectedPath
+        expect(rootView.activeEditor().isFocused).toBeTruthy()
+
     describe ".findMatches(queryString)", ->
       beforeEach ->
         rootView.trigger 'fuzzy-finder:toggle-file-finder'


Skip sound as required translation prop

Skip sound as required translation prop

Fixes #4142

--- app/models/CocoModel.coffee
+++ app/models/CocoModel.coffee
@@ -438,7 +438,7 @@

         # use it to determine what properties actually need to be translated
         props = workingSchema.props or []
-        props = (prop for prop in props when parentData[prop])
+        props = (prop for prop in props when parentData[prop] and prop isnt 'sound')
         return unless props.length
         return if 'additionalProperties' of i18n  # Workaround for #2630: Programmable is weird


Replace @plot_model.plot -> @plot_model

Replace @plot_model.plot -> @plot_model

--- bokehjs/src/coffee/models/renderers/glyph_renderer.coffee
+++ bokehjs/src/coffee/models/renderers/glyph_renderer.coffee
@@ -95,7 +95,7 @@
     length = 1 if not length?
     @all_indices = [0...length]

-    lod_factor = @plot_model.plot.lod_factor
+    lod_factor = @plot_model.lod_factor
     @decimated = []
     for i in [0...Math.floor(@all_indices.length/lod_factor)]
       @decimated.push(@all_indices[i*lod_factor])
@@ -153,7 +153,7 @@
       else
         inspected = []

-    lod_threshold = @plot_model.plot.lod_threshold
+    lod_threshold = @plot_model.lod_threshold
     if @plot_view.interactive and !glsupport and lod_threshold? and @all_indices.length > lod_threshold
       # Render decimated during interaction if too many elements and not using GL
       indices = @decimated


Use bugzilla issue id not comment id

Use bugzilla issue id not comment id

--- plugins/bugzilla/index.coffee
+++ plugins/bugzilla/index.coffee
@@ -32,8 +32,8 @@
       return callback(err) if err

       callback null,
-        id: response.id,
-        url: url.resolve(config.host, "show_bug.cgi?id=#{response.id}")
+        id: issueId,
+        url: url.resolve(config.host, "show_bug.cgi?id=#{issueId}")

   @receiveEvent: (config, event, callback) ->
     return if event?.trigger?.type == "reopened"


add hours/minutes/seconds helper

add hours/minutes/seconds helper

error: pathspec 'app/helpers/hh-mm-ss.coffee' did not match any file(s) known to git

--- app/helpers/hh-mm-ss.coffee
+++ app/helpers/hh-mm-ss.coffee
@@ -0,0 +1,24 @@
+hhmmssHelper = Ember.Handlebars.makeBoundHelper (seconds) ->
+  separator ":"
+  minutesInHour = 60
+  secondsInMinute = 60
+  secondsInHour = minutesInHour*secondsInMinute
+
+  hours = Math.floor seconds/secondsInHour
+  hoursRemainder = seconds%secondsInHour
+  minutes = Math.floor hoursRemainder/secondsInMinute
+  seconds = hoursRemainder%secondsInMinute
+
+  sections = []
+
+  if hours > 0 then sections.push "#{hours}"
+
+  if minutes < 10 and hours > 0 then sections.push "0#{minutes}"
+  else sections.push "#{minutes}"
+
+  if seconds < 10 then sections.push "0#{seconds}"
+  else sections.push "#{seconds}"
+
+  sections.join separator
+
+`export default hhmmssHelper`


anotation added

anotation added

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/gurujowa/rails-simple-crm.git/'


Added wall tile.

Added wall tile.

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/4eek/unknown.git/'


Start to bring Label under test.

Start to bring Label under test.

error: pathspec 'test/spec/viewmodels/drawings/label.coffee' did not match any file(s) known to git

--- test/spec/viewmodels/drawings/label.coffee
+++ test/spec/viewmodels/drawings/label.coffee
@@ -0,0 +1,40 @@
+define [
+  'paper'
+  'viewmodels/drawings/label'
+], (paper, Label) ->
+
+  # TODO
+  # -- when I extract options, might be able to re-use for the contentFor part of label (and might want to support label colour etc to be bound against options, just like in stencils)
+  # -- might want to make use of paper.Item's style property that allows multiple style elements to be set in one go
+
+  describe 'Label', ->
+    describe 'placement is none', ->
+      it 'just wraps shape into a group', ->
+        shape = new paper.Path.Rectangle(new paper.Point(0,0), new paper.Size(10, 20))
+        result = createLabel({placement: 'none'}, {}, shape)
+        expect(result.children).toEqual([shape])
+
+    describe 'placement is internal', ->
+      it 'does stuff', ->
+        shape = new paper.Path.Rectangle(new paper.Point(0,0), new paper.Size(10, 20))
+        result = createLabel({placement: 'internal', for: ['name']}, { name: 'John' }, shape)
+        label = result.lastChild
+
+        expect(result.firstChild).toEqual(shape)
+        expect(label instanceof paper.PointText).toBeTruthy()
+        expect(label.position.x).toEqual(shape.position.add([0, 5]).x)
+        # expect(label.position.y).toEqual(shape.position.add([0, 5]).y)
+
+
+    createLabel = (options, properties, shape) ->
+      paper = new paper.PaperScope()
+      paper.project = new paper.Project()
+      label = new Label(options)
+      result = label.draw(new FakeNode(properties), shape)
+
+    class FakeNode
+      constructor: (properties) ->
+        @properties =
+          bind: (event, handler) =>
+          get: (property) =>
+            properties[property]


Coffee script for Google Analytics !!!TODO Add AnalyticsID!!!

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

--- source/javascripts/google_analytics.js.coffee
+++ source/javascripts/google_analytics.js.coffee
@@ -0,0 +1,43 @@
+class @GoogleAnalytics
+
+  @load: ->
+    # Google Analytics depends on a global _gaq array. window is the global scope.
+    window._gaq = []
+    window._gaq.push ["_setAccount", GoogleAnalytics.analyticsId()]
+
+    # Create a script element and insert it in the DOM
+    ga = document.createElement("script")
+    ga.type = "text/javascript"
+    ga.async = true
+    ga.src = ((if "https:" is document.location.protocol then "https://ssl" else "http://www")) + ".google-analytics.com/ga.js"
+    firstScript = document.getElementsByTagName("script")[0]
+    firstScript.parentNode.insertBefore ga, firstScript
+
+    # If Turbolinks is supported, set up a callback to track pageviews on page:change.
+    # If it isn't supported, just track the pageview now.
+    if typeof Turbolinks isnt 'undefined' and Turbolinks.supported
+      document.addEventListener "page:change", (->
+        GoogleAnalytics.trackPageview(document.location.pathname)
+      ), true
+    else
+      GoogleAnalytics.trackPageview(document.location.pathname)
+
+  @trackPageview: (url) ->
+    unless GoogleAnalytics.isLocalRequest()
+      if url
+        window._gaq.push ["_trackPageview", url]
+      else
+        window._gaq.push ["_trackPageview"]
+      window._gaq.push ["_trackPageLoadTime"]
+
+  @isLocalRequest: ->
+    GoogleAnalytics.documentDomainIncludes "local"
+
+  @documentDomainIncludes: (str) ->
+    document.domain.indexOf(str) isnt -1
+
+  @analyticsId: ->
+    # your google analytics ID(s) here...
+    'UA-XXXXXXX-XX'
+
+GoogleAnalytics.load()


Fix duplicate entry issues in db 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/andrewjcasal/koding.git/'


[util] Add a guid function to generate unique identifier.

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


added mite script to interact with mite.yo.lk

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

--- src/scripts/mite.coffee
+++ src/scripts/mite.coffee
@@ -0,0 +1,139 @@
+# Allows Hubot to start and stop project time in mite.yo.lk
+#
+# save my mite key <key> for <account> - stores your personal API key for mite.yo.lk
+# mite me <task> on <project> - starts or stops the matched task on the given project in mite.yo.lk
+
+module.exports = (robot) ->
+  robot.respond /mite( me)? (.+) on (.+)/i, (msg) ->            # user wants to track time
+    [task, project] = msg.match[2..3]
+
+    user_mite = msg.message.user.mite
+
+    unless user_mite? and user_mite.length == 2                 # exit if the credentials are not provided
+      msg.reply "sorry, you first have to tell me your credentials."
+      return
+
+    [mite_key, mite_account] = user_mite[0..1]                  #ok, credentials are there...
+
+    mite = new Mite msg, mite_key, mite_account                 # create a new Mite instance
+    mite.projects msg, project, (projects) ->                        # first get the project information
+      if projects.length == 0                                   # no projects found
+        msg.reply "Oops.. could not find a matching project"
+        return
+      if projects.length > 1                                    # more than one project found
+        answer = "please be more precise, I found #{projects.length} projects: "
+        result = (project.project.name for project in projects)
+        answer += result.join(", ")
+        msg.reply answer                                        # list the found projects and..
+        return                                                  # .. exit
+      project = projects[0].project                             # the first and only project is used
+      mite.services msg,task, (services) ->                         # then get the task
+        if services.length == 0
+          msg.reply "Oops.. could not find a matching task"
+          return
+        if services.length > 1
+          answer = "please be more precise, I found #{services.length} tasks: "
+          result = (service.service.name for service in services)
+          answer += result.join(", ")
+          msg.reply answer
+          return
+        service = services[0].service
+        # check if there is alreday a good time entry for today
+        mite.todays_matching_entry msg, project, service, (time_entry) ->
+          if time_entry?                                        # if there is an existing time entry for today...
+            mite.tracker msg, time_entry                             # we start the timer on this one again
+          else
+            mite.time_entry msg, project, service, (time_entry) ->   # create a new entry for this projects task
+              mite.tracker msg, time_entry                           # start the tracker on the time entry
+
+# we need to know the key to connect to mite.yo.lk
+  robot.respond /save my mite key (.+) for (.+)/i, (msg) ->
+    mite_key = msg.match[1]                                     # the key we should keep in mind
+    mite_account = msg.match[2]                                 # and the account
+    user   = msg.message.user                                   # for this user
+
+    user.mite = [mite_key, mite_account]                        # and in the Brain it goes
+    msg.reply "I'll hapilly punch your timecard from now on."
+
+# MITE CLASS #
+class Mite
+  constructor: (msg, key, account) ->
+    @url = "http://#{account}.mite.yo.lk"
+    @key = key
+
+  services: (msg, task, callback) ->
+    msg
+      .http(@url)
+      .headers
+        'X-MiteApiKey': "#{@key}",
+        'Accept': 'application/json'
+      .query
+        name: task
+      .path("services")
+      .get() (err, res, body) ->
+        if err
+          msg.reply "Mite says: #{err}"
+          return
+        callback JSON.parse body
+
+  projects: (msg, project, callback) ->
+    msg
+      .http(@url)
+      .headers
+        'X-MiteApiKey': "#{@key}",
+        'Accept': 'application/json'
+      .query
+        name: project
+      .path("projects")
+      .get() (err, res, body) ->
+        if err
+          msg.reply "Mite says: #{err}"
+          return
+        callback JSON.parse body
+
+  time_entry: (msg, project, service, callback) ->
+    data = JSON.stringify {time_entry: {service_id: "#{service.id}", project_id: "#{project.id}"}}
+    msg
+      .http(@url)
+      .headers
+        'X-MiteApiKey': "#{@key}",
+        'Content-type': "application/json",
+        'Accept': 'application/json'
+      .path("time_entries")
+      .post(data) (err, res, body) ->
+        if err
+          msg.reply "Mite says: #{err}"
+          return
+        time_entries = JSON.parse body
+        callback time_entries.time_entry
+
+  todays_matching_entry: (msg, project, service, callback) ->
+    msg
+      .http(@url)
+      .headers
+        'X-MiteApiKey': "#{@key}",
+        'Accept': 'application/json'
+      .query
+        name: project
+      .path("daily")
+      .get() (err, res, body) ->
+        if err
+          msg.reply "Mite says: #{err}"
+          return
+        time_entries = JSON.parse body
+        time_entry = (t_entries.time_entry for t_entries in time_entries when t_entries.time_entry.project_id == project.id and t_entries.time_entry.service_id == service.id)
+        callback time_entry[0]
+
+  tracker: (msg, time_entry) ->
+    msg
+      .http(@url)
+      .headers
+        'X-MiteApiKey': "#{@key}",
+        'Content-type': "application/json",
+        'Accept': 'application/json'
+      .path("tracker/#{time_entry.id}")
+      .put(" ") (err, res, body) ->
+        if err
+          msg.reply "Mite says: #{err}"
+          return
+        msg.reply "ok, time is running..."


WIP: initial integration test

WIP: initial integration test

error: pathspec 'test/javascripts/integration/reporting_guidelines_test.js.coffee' did not match any file(s) known to git

--- test/javascripts/integration/reporting_guidelines_test.js.coffee
+++ test/javascripts/integration/reporting_guidelines_test.js.coffee
@@ -0,0 +1,11 @@
+module 'Integration: Reporting Guidelines Card',
+  teardown: -> ETahi.reset()
+  setup: ->
+    setupApp integration: true
+    TahiTest.paperId = 4245
+    TahiTest.figureTaskId = 949
+    TahiTest.authorId = 19347
+
+test 'Supporting Guideline is a meta data card', ->
+  ok true
+  visit ''


Fixed a bug with tearing down angels.

Fixed a bug with tearing down angels.

--- app/lib/God.coffee
+++ app/lib/God.coffee
@@ -210,6 +210,7 @@
     @

   abort: ->
+    return unless @worker
     @abortTimeout = _.delay @terminate, @abortTimeoutDuration
     @worker.postMessage {func: 'abort'}


fix spec maybe

fix spec maybe

--- apps/artwork/client/related-show.coffee
+++ apps/artwork/client/related-show.coffee
@@ -19,7 +19,7 @@
         @setup collection

   setupFollowButton: ->
-    @following = new Following(null, kind: 'profile') if @currentUser?
+    @following = new Following(null, kind: 'profile')
     @following.syncFollows [@partner.get('default_profile_id')]

     @followButton = new FollowButton
@@ -36,7 +36,7 @@
     @render()
     @setupArtworks @collection
     @setupPartnerButtons()
-    @setupFollowButton() if @partner?.get('default_profile_id')
+    @setupFollowButton() if @currentUser? and @partner?.get('default_profile_id')
     @$el.addClass 'is-fade-in'

   render: ->


Applied invitation email fix.

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


Update ipc `this` comment

Update ipc `this` comment

--- lib/ipc.coffee
+++ lib/ipc.coffee
@@ -1,8 +1,8 @@
 #
 # ipc: Inter-Plugins Call
 #
-# Any function passed to `register` should bind to `this`
-#   if you want to access `this` in you API handler.
+# Any function passed to `register` will be run asynchronous.
+# Be careful of your `this.
 #
 # Usage:
 #   remote = require('electron').remote


Added tracking properties to systems.

Added tracking properties to systems.

--- app/lib/world/world.coffee
+++ app/lib/world/world.coffee
@@ -245,11 +245,17 @@
   addScripts: (scripts...) ->
     @scripts = (@scripts ? []).concat scripts

+  addTrackedProperties: (props...) ->
+    @trackedProperties = (@trackedProperties ? []).concat props
+
   serialize: ->
     # Code hotspot; optimize it
     if @frames.length < @totalFrames then worldShouldBeOverBeforeSerialization
     [transferableObjects, nontransferableObjects] = [0, 0]
-    o = {name: @name, totalFrames: @totalFrames, maxTotalFrames: @maxTotalFrames, frameRate: @frameRate, dt: @dt, victory: @victory, userCodeMap: {}, showCoordinates: @showCoordinates, showGrid: @showGrid, showPaths: @showPaths, indieSprites: @indieSprites}
+    o = {name: @name, totalFrames: @totalFrames, maxTotalFrames: @maxTotalFrames, frameRate: @frameRate, dt: @dt, victory: @victory, userCodeMap: {}}
+
+    o[prop] = @[prop] for prop in @trackedProperties or []
+
     for thangID, methods of @userCodeMap
       serializedMethods = o.userCodeMap[thangID] = {}
       for methodName, method of methods


atom: snippets: tabs

atom: snippets: tabs

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


Fix minor bug

Fix minor bug

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


added more testing product services

added more testing product services

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


impr (modules) Change timeout to better comply with project conventions.

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


Moving UI stuff to Chrome.

Moving UI stuff to Chrome.

I don't like the name Chrome, looking to rename it.

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

--- src/chrome.coffee
+++ src/chrome.coffee
@@ -0,0 +1,34 @@
+module.exports =
+class Chrome
+  # path - Optional. The String path to the file to base it on.
+  @newWindow: (path) ->
+    c = OSX.AtomWindowController.alloc.initWithWindowNibName "AtomWindow"
+    c.window
+    c.window.makeKeyAndOrderFront null
+
+  # Returns null or a file path.
+  @openPanel: ->
+    panel = OSX.NSOpenPanel.openPanel
+    panel.setCanChooseDirectories true
+    if panel.runModal isnt OSX.NSFileHandlingPanelOKButton
+      return null
+    filename = panel.filenames.lastObject
+    localStorage.lastOpenedFilename = filename
+    filename
+
+  @openURL: (url) ->
+    window.location = url
+    App = require 'app'
+    App.activeWindow.setTitle _.last url.replace(/\/$/,'').split '/'
+
+  # Returns null or a file path.
+  @savePanel: ->
+    panel = OSX.NSSavePanel.savePanel
+    if panel.runModal isnt OSX.NSFileHandlingPanelOKButton
+      return null
+    panel.filenames.lastObject
+
+  writeToPasteboard: (text) ->
+    pb = OSX.NSPasteboard.generalPasteboard
+    pb.declareTypes_owner [OSX.NSStringPboardType], null
+    pb.setString_forType text, OSX.NSStringPboardType


The sessions should set isRanking false when they win.

--- server/queues/scoring.coffee
+++ server/queues/scoring.coffee
@@ -155,13 +155,16 @@

                   levelOriginalID = levelSession.level.original
                   levelOriginalMajorVersion = levelSession.level.majorVersion
-                  findNearestBetterSessionID levelOriginalID, levelOriginalMajorVersion, originalSessionID, sessionNewScore, opponentNewScore, opponentID ,opposingTeam, (err, opponentSessionID) ->
+                  findNearestBetterSessionID levelOriginalID, levelOriginalMajorVersion, originalSessionID, sessionNewScore, opponentNewScore, opponentID, opposingTeam, (err, opponentSessionID) ->
                     if err? then return errors.serverError res, "There was an error finding the nearest sessionID!"
-                    unless opponentSessionID then return sendResponseObject req, res, {"message":"There were no more games to rank (game is at top)!"}
-
-                    addPairwiseTaskToQueue [originalSessionID, opponentSessionID], (err, success) ->
-                      if err? then return errors.serverError res, "There was an error sending the pairwise tasks to the queue!"
-                      sendResponseObject req, res, {"message":"The scores were updated successfully and more games were sent to the queue!"}
+                    if opponentSessionID
+                      addPairwiseTaskToQueue [originalSessionID, opponentSessionID], (err, success) ->
+                        if err? then return errors.serverError res, "There was an error sending the pairwise tasks to the queue!"
+                        sendResponseObject req, res, {"message":"The scores were updated successfully and more games were sent to the queue!"}
+                    else
+                      LevelSession.update {_id: originalSessionID}, {isRanking: false}, {multi: false}, (err, affected) ->
+                        if err? then return errors.serverError res, "There was an error marking the victorious session as not being ranked."
+                        return sendResponseObject req, res, {"message":"There were no more games to rank (game is at top)!"}
                 else
                   console.log "Player lost, achieved rank #{originalSessionRank}"
                   LevelSession.update {_id: originalSessionID}, {isRanking: false}, {multi: false}, (err, affected) ->


removed unused function

removed unused function

--- test/test_helper.coffee
+++ test/test_helper.coffee
@@ -10,11 +10,6 @@
   _.map(elements, (element) ->
     angular.element(element).html()
   )
-
-extract_pagination_to_array = (elements) ->
-  elements = extract_visible_elements(elements)
-  angular.element(element).find("a").html() for element in elements
-

 class ScopeWrapper
   constructor: (@scope) ->


Increase overflowchanged timeout to 100ms

--- src/editor.coffee
+++ src/editor.coffee
@@ -707,7 +707,7 @@

     # Listen for overflow events to detect when the editor's width changes
     # to update the soft wrap column.
-    updateWidthInChars = _.debounce((=> @setWidthInChars()), 1)
+    updateWidthInChars = _.debounce((=> @setWidthInChars()), 100)
     @scrollView.on 'overflowchanged', =>
       updateWidthInChars() if @[0].classList.contains('soft-wrap')


Force mongodb launch in kill mongo test

Force mongodb launch in kill mongo test

--- tests/MeteorTest.coffee
+++ tests/MeteorTest.coffee
@@ -151,10 +151,11 @@

   it "kill() - should kill internal mongodb child processes", (done)->
-    @timeout 30000
+    @timeout 60000
     process.argv.push packageToTest
     spawnStub.restore()
     spawnStub = null
+    delete process.env.MONGO_URL if process.env.MONGO_URL
     ChildProcess.prototype.child = null

     meteor.testPackages({})


added snippet for simulate('change')

added snippet for simulate('change')

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

--- snippets/simulateChange.cson
+++ snippets/simulateChange.cson
@@ -0,0 +1,8 @@
+".source.js, .source.jsx, .source.ts":
+  "simulate("change")":
+    "prefix": "simChange"
+    "body": """
+      ${1:input}.simulate("change", {
+        ${target: { value: value },}
+        });
+      """


Fix typo

Fix typo

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


Cleaned up outgoing webhooks creation endpoint

--- packages/rocketchat-api/server/routes.coffee
+++ packages/rocketchat-api/server/routes.coffee
@@ -385,43 +385,33 @@
 user must also have manage-integrations role
 creating a push point for messages to be push to from Rocket Chat.
 ###
-RocketChat.API.v1.addRoute 'outgoingWebhook', authRequired: true,
+RocketChat.API.v1.addRoute 'integrations.outgoingWebhook.create', authRequired: true,
 	post: ->

 		if RocketChat.authz.hasPermission(@userId, 'manage-integrations') is false
 			return RocketChat.API.v1.unauthorized()
-
-		if not @bodyParams.name?
-			return RocketChat.API.v1.failure 'Body param "name" is required'
-
-		if not @bodyParams.userid?
-			return RocketChat.API.v1.failure 'Body param "userid" is required'
-
-		if not @bodyParams.authToken?
-			return RocketChat.API.v1.failure 'Body param "authToken" is required'
-
-		if not @bodyParams.channel?
-			return RocketChat.API.v1.failure 'Body param "channel" is required'
-
-		if not @bodyParams.roomName?
-			return RocketChat.API.v1.failure 'Body param "roomName" is required'
+		console.log 'Web integration data: ', @bodyParams

-		if not @bodyParams.enabled?
-			return RocketChat.API.v1.failure 'Body param "enabled" is required'
-
-		if not @bodyParams.urls?
-			return RocketChat.API.v1.failure 'Body param "urls" is required'
-
-		try
+		try
+			check @bodyParams,
+				name: String
+				enabled: Boolean
+				username: String
+				urls: Array
+				channel: Match.Maybe(String)
+				alias: Match.Maybe(String)
+				avatar: Match.Maybe(String)
+				emoji: Match.Maybe(String)
+				token: Match.Maybe(String)
+				scriptEnabled: Boolean
+				script: Match.Maybe(String)
+
 			this.response.setTimeout (1000 * @bodyParams.name.length)
-			integration ={ userid:@bodyParams.userid, auth:@bodyParams.authToken, name:@bodyParams.name, enabled:@bodyParams.enabled, name:@bodyParams.roomName, channel:@bodyParams.channel,
-			triggerWords:@bodyParams.triggerWords, urls:@bodyParams.urls, username:@bodyParams.username, alias:@bodyParams.alias, avatar:@bodyParams.avatar, emoji:@bodyParams.emoji, token:@bodyParams.token,
-			scriptEnable:@bodyParams.scriptEnabled, script:@bodyParams.script }

 			Meteor.runAsUser this.userId, () =>
-				Meteor.call 'addOutgoingIntegration', integration
-			return RocketChat.API.v1.success
-				body:[list:integration]
+				Meteor.call 'addOutgoingIntegration', @bodyParams
+			return RocketChat.API.v1.success
+				integration: RocketChat.models.Integrations.findOne({ 'name': @bodyParams.name })
 		catch e
 			return RocketChat.API.v1.failure e.name + ': ' + e.message


Links must have at least one matching character.  Also max-height instead of set height.


no source map for node stuff

no source map for node stuff

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/YoloDev/mimosa-babel.git/'


Profile: group name is added to selectors in JAccount.fetchLikedContents method

--- workers/social/lib/social/models/account.coffee
+++ workers/social/lib/social/models/account.coffee
@@ -766,15 +766,17 @@
             activity.mark client, 'glanced', -> queue.fin()
           dash queue, callback

-  fetchLikedContents: secure ({connection}, options, selector, callback)->
+  fetchLikedContents: secure ({connection, context}, options, selector, callback)->

     {delegate} = connection
+    {group}    = context
     [callback, selector] = [selector, callback] unless callback

     selector            or= {}
     selector.as           = 'like'
     selector.targetId     = @getId()
     selector.sourceName or= $in: likeableActivities
+    selector.data         = {group}

     Relationship.some selector, options, (err, contents)=>
       if err then callback err, []


Table column save bugfix

Table column save bugfix

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


Remove progress indicators, make rubric display properly

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


Fix spec to expect whitespace to be removed

--- spec/text-editor-spec.coffee
+++ spec/text-editor-spec.coffee
@@ -2388,8 +2388,8 @@
           expect(cursor2.getBufferPosition()).toEqual [1, 24]

           editor.deleteToNextWordBoundary()
-          expect(buffer.lineForRow(0)).toBe 'var quicksort = () {'
-          expect(buffer.lineForRow(1)).toBe '  var sort = function(it {'
+          expect(buffer.lineForRow(0)).toBe 'var quicksort =() {'
+          expect(buffer.lineForRow(1)).toBe '  var sort = function(it{'
           expect(cursor1.getBufferPosition()).toEqual [0, 15]
           expect(cursor2.getBufferPosition()).toEqual [1, 24]


Password Recovery: remove recoverPasswordByUsername function

--- workers/social/lib/social/models/passwordrecovery.coffee
+++ workers/social/lib/social/models/passwordrecovery.coffee
@@ -15,7 +15,7 @@
     sharedMethods :
       static      : [
         'validate','recoverPassword','recoverPasswordByEmail'
-        'recoverPasswordByUsername','resetPassword'
+        'resetPassword'
       ]
     indexes       :
       token       : 'unique'
@@ -60,27 +60,21 @@
       @recoverPasswordByUsername client, usernameOrEmail, callback
     else callback new KodingError 'Invalid input.'

-  @recoverPasswordByUsername = secure (client, username, callback)->
+  @recoverPasswordByUsername = (client, username, callback)->
     JUser = require './user'
     {delegate} = client.connection
-    unless delegate.type is 'unregistered'
-      callback new KodingError 'You are already logged in.'
-    else
-      JUser.one {username}, (err, user)=>
-        unless user then callback new KodingError "Unknown username"
-        else @create client, {email: user.getAt('email')}, callback
+    JUser.one {username}, (err, user)=>
+      unless user then callback new KodingError "Unknown username"
+      else @create client, {email: user.getAt('email')}, callback

   @recoverPasswordByEmail = secure (client, email, callback)->
     JUser = require './user'
     {delegate} = client.connection
-    unless delegate.type is 'unregistered'
-      callback new KodingError 'You are already logged in.'
-    else
-      JUser.count {email}, (err, num)=>
-        unless num then callback null # pretend like everything went fine.
-        else @create client, {email}, callback
+    JUser.count {email}, (err, num)=>
+      unless num then callback null # pretend like everything went fine.
+      else @create client, {email}, callback

-  @create = secure ({connection:{delegate}}, options, callback)->
+  @create = (client, options, callback)->
     JUser = require './user'
     token = createId()
     {email} = options


Gruntfile stub

Gruntfile stub

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

--- gruntfile.coffee
+++ gruntfile.coffee
@@ -0,0 +1,2 @@
+module.exports = (grunt) ->
+


view compilation takes layout existence into account

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


Adding a base for the jira issue linkifier

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

--- scripts/jira-linkifier.coffee
+++ scripts/jira-linkifier.coffee
@@ -0,0 +1,22 @@
+# Description
+#   Watches for JIRA issue mentions and provides information and a link
+#
+# Dependencies
+#   None
+#
+# Configuration
+#   HUBOT_JIRA_INSTANCE_URL
+#
+# Commands:
+#   <mention a JIRA issue> - Get basic information about the issue
+#   hubot watch jira project <PROJECT> - Start watching for issues with the prefix PROJECT
+#   hubot status on <issue> - Get detailed status on a jira issue
+#
+# Author:
+#   bmnick
+module.exports = (robot) ->
+  robot.respond /watch jira project ?(.+)?/i, (msg) ->
+    projects = robot.brain.get('jira-projects') or []
+    projects.push msg.match[1]
+
+    msg.send "Watching that project for you"


Add Template model Created a Template model for storing templates in the database. Adding this commit as a starting point before diving into API changes.

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

--- server/models/template.coffee
+++ server/models/template.coffee
@@ -0,0 +1,21 @@
+mongoose = require 'mongoose'
+db = require '../lib/database'
+
+# We should be mindful of potential exploits in user-provided input,
+# but MongoDB appears to be safe for the basic use case.
+# http://docs.mongodb.org/manual/faq/developers/#how-does-mongodb-address-sql-or-query-injection
+
+Template = new mongoose.Schema
+  name:
+    type: String
+    required: true
+  contents: String
+  date_created:
+    type: date
+    default: Date.now
+  last_modified:
+    type: Date
+    default: Date.now
+  tags: [String]
+
+module.exports = db.model('Template', Template)


ide: add a method to show no stacks view

--- client/ide/lib/index.coffee
+++ client/ide/lib/index.coffee
@@ -34,8 +34,9 @@
 StackAdminMessageController   = require './views/stacks/stackadminmessagecontroller'
 ContentModal = require 'app/components/contentModal'

+NoStackFoundView = require 'app/nostackfoundview'
+
 require('./routes').init()
-

 module.exports =

@@ -607,6 +608,13 @@
         @setMountedMachine machine

         callback null, machine
+
+
+  showNoMachineState: ->
+
+    return  if @noStackFoundView
+
+    @getView().addSubView @noStackFoundView = new NoStackFoundView

   mountMachineByMachineUId: (machineUId) ->


add plugin model

add plugin model

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


comments, dropbox stuff and list formatting

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