Tests: add API test suite!

Tests: add API test suite!

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

--- test/api._coffee
+++ test/api._coffee
@@ -0,0 +1,168 @@
+#
+# General API tests.
+#
+# TODO: We should have a separate test suite for properly testing the image
+# submission flow, e.g. new --> queued --> progress --> ready or failed.
+# That could/should cover both the UI and API since states are transient.
+# That should also test that fetching the actual image tiles works too.
+#
+
+app = (require 'supertest')(require '../app')
+{expect} = require 'chai'
+urls = require './fixtures/urls'
+
+
+## Helpers
+
+TYPE_JSON = 'application/json'
+TYPE_TEXT = 'text/plain; charset=utf-8'
+
+# Matches e.g. '/v1/content/Abc123' and captures the ID:
+CONTENT_BY_ID_REGEX = /// ^/v1/content/ (\w+) $ ///
+
+EXISTING_ID = null
+
+#
+# Asserts that the given actual object is a valid Content info object,
+# optionally matching the given expected object (which may be partial).
+#
+expectContent = (act, exp={}) ->
+    expect(act).to.be.an 'object'
+
+    _expectStringMatching act.id, /\w+/
+    _expectURL act.url
+
+    for prop in ['ready', 'failed']
+        expect(act[prop]).to.be.a 'boolean'
+
+    expect(act.progress).to.be.a 'number'
+    expect(act.progress).to.be.within 0, 1
+
+    # TODO: Do we want to test the actual makeup of these properties?
+    # E.g. that the share URL is to the website with the same ID, etc.
+    _expectURL act.shareUrl
+    _expectStringMatching act.embedHtml, /// ^<script .+></script>$ ///
+
+    if act.ready or act.dzi
+        expectDZI act.dzi
+
+    _expectPartial act, exp
+
+#
+# Asserts that the given actual object is a valid DZI info object,
+# optionally matching the given expected object (which may be partial).
+#
+expectDZI = (act, exp={}) ->
+    expect(act).to.be.an 'object'
+
+    _expectURL act.url
+
+    for prop in ['width', 'height', 'tileSize', 'tileOverlap']
+        expect(act[prop]).to.be.a 'number'
+        expect(act[prop]).to.be.greaterThan 0
+
+    _expectStringMatching act.tileFormat, /^(png|jpeg)$/
+
+    _expectPartial act, exp
+
+#
+# Asserts that the given actual object matches the given expected object,
+# which may be partial. IOW, the actual object must be a superset.
+#
+_expectPartial = (act, exp={}) ->
+    expect(act).to.be.an 'object'
+    for prop of exp
+        expect(act[prop]).to.eql exp[prop]
+
+_expectStringMatching = (val, regex) ->
+    expect(val).to.be.a 'string'
+    expect(val).to.match regex
+
+_expectURL = (val) ->
+    _expectStringMatching val, /// ^https?://.+ ///
+
+
+## Tests
+
+describe 'API /v1/content', ->
+
+    describe 'List', ->
+
+        it 'should be interpreted as a get-by-URL, with no URL given', (_) ->
+            app.get '/v1/content'
+                .expect 400
+                .expect 'Content-Type', TYPE_TEXT
+                .expect /Missing/i
+                .end _
+
+    describe 'Get by URL', ->
+
+        it 'should reject empty URLs', (_) ->
+            app.get '/v1/content?url='
+                .expect 400
+                .expect 'Content-Type', TYPE_TEXT
+                .expect /Missing/i
+                .end _
+
+        it 'should reject malformed URLs', (_) ->
+            app.get "/v1/content?url=#{encodeURIComponent urls.MALFORMED}"
+                .expect 400
+                .expect 'Content-Type', TYPE_TEXT
+                .expect /full URL/i
+                .end _
+
+        it 'should reject URLs w/out protocol', (_) ->
+            app.get "/v1/content?url=#{encodeURIComponent urls.NO_PROTOCOL}"
+                .expect 400
+                .expect 'Content-Type', TYPE_TEXT
+                .expect /full URL/i
+                .end _
+
+        it 'should reject non-HTTP URLs', (_) ->
+            app.get "/v1/content?url=#{encodeURIComponent urls.NON_HTTP}"
+                .expect 400
+                .expect 'Content-Type', TYPE_TEXT
+                .expect /full URL/i
+                .end _
+
+        # TEMP
+        it 'should reject new HTTP URLs for now', (_) ->
+            app.get "/v1/content?url=#{encodeURIComponent urls.randomize urls.IMAGE}"
+                .expect 503
+                .expect 'Content-Type', TYPE_TEXT
+                .expect /Please wait/i
+                .end _
+
+        # TODO: Need reliable existing image across local dev envs.
+        it.skip 'should redirect existing HTTP URLs to view page', (_) ->
+            resp = app.get "/v1/content?url=#{encodeURIComponent urls.IMAGE}"
+                .expect 301
+                .expect 'Location', CONTENT_BY_ID_REGEX
+                .expect 'Content-Type', TYPE_JSON
+                .end _
+
+            EXISTING_ID = (resp.headers.location.match CONTENT_BY_ID_REGEX)[1]
+
+            # the response body should also be the info for convenience:
+            expectContent resp.body,
+                id: EXISTING_ID
+                url: urls.IMAGE
+
+    describe 'Get by ID', ->
+
+        # TODO: Need reliable existing image across local dev envs.
+        it.skip 'should return viewer for existing image', (_) ->
+            resp = app.get "/v1/content/#{EXISTING_ID}"
+                .expect 200
+                .expect 'Content-Type', TYPE_JSON
+                .end _
+
+            expectContent resp.body,
+                id: EXISTING_ID
+
+        it 'should return 404 for non-existent image', (_) ->
+            app.get '/v1/content/99999999'
+                .expect 404
+                .expect 'Content-Type', TYPE_TEXT
+                .expect /No content/i
+                .end _


GroupStackSettings: Stacks: StackTemplateListController initial commit

error: pathspec 'client/admin/lib/views/stacks/stacktemplatelistcontroller.coffee' did not match any file(s) known to git

--- client/admin/lib/views/stacks/stacktemplatelistcontroller.coffee
+++ client/admin/lib/views/stacks/stacktemplatelistcontroller.coffee
@@ -0,0 +1,43 @@
+kd                          = require 'kd'
+remote                      = require('app/remote').getInstance()
+
+showError                   = require 'app/util/showError'
+AccountListViewController   = require 'account/controllers/accountlistviewcontroller'
+
+
+module.exports = class StackTemplateListController extends AccountListViewController
+
+
+  constructor: (options = {}, data) ->
+
+    options.noItemFoundText ?= "You have no stack template"
+    super options, data
+
+    @loadItems()
+
+
+  loadItems: ->
+
+    @removeAllItems()
+    @showLazyLoader()
+
+    { JStackTemplate } = remote.api
+
+    JStackTemplate.some {}, { limit: 30 }, (err, stackTemplates) =>
+
+      @hideLazyLoader()
+
+      return if showError err, \
+        KodingError : "Failed to fetch stackTemplates, try again later."
+
+      @instantiateListItems stackTemplates
+
+
+  loadView: ->
+
+    super
+
+    view = @getView()
+    view.on 'ItemDeleted', (item) =>
+      @removeItem item
+      @noItemView.show()  if @listView.items.length is 0


RegisterForm: crewate nickname from user email address

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


Client: Activity: Moved newline character to applyMarkdown method and deleted unnecessary lines from formatBlockQuotes

--- client/app/lib/util/formatBlockquotes.coffee
+++ client/app/lib/util/formatBlockquotes.coffee
@@ -7,11 +7,6 @@
   for part, index in parts
     blockquote = index %% 2 is 1

-    if blockquote
-      if match = part.match /^\w+/
-        [lang] = match
-        part = "\n#{part}"  unless hljs.getLanguage lang
-
-      parts[index] = "\n```#{Encoder.htmlDecode part}\n```\n"
+    parts[index] = "\n```#{Encoder.htmlDecode part}\n```\n"  if blockquote

   parts.join ''


redis brain using new eventemitter-powered robot.brain in hubot master (pending 1.1.0)

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

--- src/scripts/redis_brain.coffee
+++ src/scripts/redis_brain.coffee
@@ -0,0 +1,26 @@
+# sets up hooks to persist the brain into redis.
+module.exports = (robot) ->
+  info   = Url.parse process.env.REDISTOGO_URL || 'redis://localhost:6379'
+  client = Redis.createClient(info.port, info.hostname)
+
+  if info.auth
+    client.auth info.auth.split(":")[1]
+
+  client.on "error", (err) ->
+    console.log "Error #{err}"
+
+  client.on "connect", ->
+    console.log "Successfully connected to Redis"
+
+    client.get "hubot:storage", (err, reply) ->
+      if err
+        throw err
+      else if reply
+        robot.brain.mergeData JSON.parse(reply.toString())
+
+  robot.brain.on 'save', (data) ->
+    client.set 'hubot:storage', data
+
+  robot.brain.on 'close', ->
+    client.quit()
+


Disable 'disabled' solve problem links.

Disable 'disabled' solve problem links.

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


Comment out useless log lines

Comment out useless log lines

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


fix negative offsets with "minimum" crop

--- app/assets/javascripts/uploadcare/ui/crop/crop-widget.js.coffee
+++ app/assets/javascripts/uploadcare/ui/crop/crop-widget.js.coffee
@@ -193,12 +193,12 @@
         handleSize: 10
         trueSize: @__originalSize
         onSelect: (coords) =>
-          left = Math.floor coords.x
-          top = Math.floor coords.y
+          left = Math.floor Math.max(0, coords.x)
+          top = Math.floor Math.max(0, coords.y)
           @__currentCoords = {
             left, top
-            width: Math.ceil(coords.x2) - left
-            height: Math.ceil(coords.y2) - top
+            width: Math.ceil(Math.min(@__originalSize[0], coords.x2)) - left
+            height: Math.ceil(Math.min(@__originalSize[1], coords.y2)) - top
           }

       if @__options.preferedSize


Adding menu_linux.cson to translation

Adding menu_linux.cson to translation

error: pathspec 'def/sq/menu_linux.cson' did not match any file(s) known to git

--- def/sq/menu_linux.cson
+++ def/sq/menu_linux.cson
@@ -0,0 +1,305 @@
+Menu:
+  "&File":
+    value: "&Kartelë"
+    submenu:
+      "New &Window":
+        value: "&Dritare e Re"
+      "&New File":
+        value: "Karte&lë e Re"
+      "&Open File…":
+        value: "&Hapni Kartelë…"
+      "Open Folder…":
+        value: "Hapni Dosje…"
+      "Add Project Folder…":
+        value: "Shtoni Dosje Projekti…"
+      "Reopen Project":
+        value: "Rihape Projektin"
+        submenu:
+          "Clear Project History":
+            value: "Pastro Historik Projekti"
+      "Reopen Last &Item":
+        value: "Rihap &Objektin e Fundit"
+      "&Save":
+        value: "&Ruaje"
+      "Save &As…":
+        value: "Ruajeni &Si…"
+      "Save A&ll":
+        value: "Ruaji &Krejt"
+      "&Close Tab":
+        value: "&Mbylle Skedën"
+      "Close &Pane":
+        value: "Mbylle K&uadratin"
+      "Clos&e Window":
+        value: "Mbylle &Dritaren"
+      "Quit":
+        value: "Dil"
+      "Close All Tabs":
+        value: "Mbylli Krejt Skedat"
+  "&Edit":
+    value: "&Përpunoni"
+    submenu:
+      "&Undo":
+        value: "&Zhbëje"
+      "&Redo":
+        value: "&Ribëje"
+      "&Cut":
+        value: "&Prije"
+      "C&opy":
+        value: "&Kopjoje"
+      "Copy Pat&h":
+        value: "Kopjoji Shte&gun"
+      "&Paste":
+        value: "&Ngjite"
+      "Select &All":
+        value: "Përzgjidhi &Krejt"
+      "&Toggle Comments":
+        value: "Sh&faqi/Fshihi Komentet"
+      Lines:
+        value: "Rreshta"
+        submenu:
+          "&Indent":
+            value: "&Brendazi"
+          "&Outdent":
+            value: "&Jashtazi"
+          "&Auto Indent":
+            value: "Shmangie &Automatike"
+          "Move Line &Up":
+            value: "Ngjite Rreshtin &Sipër"
+          "Move Line &Down":
+            value: "Zbrite Rreshtin &Poshtë"
+          "Du&plicate Lines":
+            value: "Sh&umëfisho Rreshta"
+          "D&elete Line":
+            value: "&Fshije Rreshtin"
+          "&Join Lines":
+            value: "&Bashkoji Rreshtat"
+      Columns:
+        value: "Shtylla"
+        submenu:
+          "Move Selection &Left":
+            value: "Kaloje Përzgjedhjen &Majtas"
+          "Move Selection &Right":
+            value: "Kaloje Përzgjedhjen &Djathtas"
+      Text:
+        value: "Tekst"
+        submenu:
+          "&Upper Case":
+            value: "Me të &Madhe"
+          "&Lower Case":
+            value: "Me të &Vogël"
+          "Delete to End of &Word":
+            value: "Fshije deri te F&undi i Fjalës"
+          "Delete to Previous Word Boundary":
+            value: "Fshije deri te Kufiri i Fjalës së Mëparshme"
+          "Delete to Next Word Boundary":
+            value: "Fshije deri te Kufiri i Fjalës Pasuese"
+          "&Delete Line":
+            value: "&Fshije Rreshtin"
+          "&Transpose":
+            value: "Ktheji Fjalët Së &Prapthi"
+      Folding:
+        value: "Palosje"
+        submenu:
+          "&Fold":
+            value: "&Palosi"
+          "&Unfold":
+            value: "&Shpalosi"
+          "Unfold &All":
+            value: "Shpalosi &Krejt"
+          "Fol&d All":
+            value: "Pa&losi Krejt"
+          "Fold Level 1":
+            value: "Palos Nivelin 1"
+          "Fold Level 2":
+            value: "Palos Nivelin 2"
+          "Fold Level 3":
+            value: "Palos Nivelin 3"
+          "Fold Level 4":
+            value: "Palos Nivelin 4"
+          "Fold Level 5":
+            value: "Palos Nivelin 5"
+          "Fold Level 6":
+            value: "Palos Nivelin 6"
+          "Fold Level 7":
+            value: "Palos Nivelin 7"
+          "Fold Level 8":
+            value: "Palos Nivelin 8"
+          "Fold Level 9":
+            value: "Palos Nivelin 9"
+      "&Preferences":
+        value: "&Parapëlqime"
+      "Config…":
+        value: "Formësim…"
+      "Init Script…":
+        value: "Programth Init…"
+      "Keymap…":
+        value: "Tastierë…"
+      "Snippets…":
+        value: "Copëza…"
+      "Stylesheet…":
+        value: "Fletëstil…"
+      "Reflow Selection":
+        value: "Reflow Selection"
+      Bookmark:
+        value: "Faqerojtës"
+        submenu:
+          "View All":
+            value: "Shihini Krejt"
+          "Toggle Bookmark":
+            value: "Shfaq/Fshih Faqerojtës"
+          "Jump to Next Bookmark":
+            value: "Hidhu te Faqerojtësi Pasues"
+          "Jump to Previous Bookmark":
+            value: "Hidhu te Faqerojtësi i Mëparshëm"
+      "Select Encoding":
+        value: "Përzgjidhni Kodim"
+      "Go to Line":
+        value: "Shko te Rreshti"
+      "Select Grammar":
+        value: "Përzgjidhni Gramatikë"
+  "&View":
+    value: "&Parje"
+    submenu:
+      "Toggle &Full Screen":
+        value: "Aktivizo/Çaktivizo Mënyrën Sa Krejt &Ekrani"
+      "Toggle Menu Bar":
+        value: "Shfaq/Fshih Shtyllë Menush"
+      Panes:
+        value: "Kuadrate"
+        submenu:
+          "Split Up":
+            value: "Ndaje Për Sipër"
+          "Split Down":
+            value: "Ndaje Për Poshtë"
+          "Split Left":
+            value: "Ndaje Majtas"
+          "Split Right":
+            value: "Ndaje Djathtas"
+          "Focus Next Pane":
+            value: "Fokusi Te Kuadrati Pasues"
+          "Focus Previous Pane":
+            value: "Fokusi Te Kuadrati i Mëparshëm"
+          "Focus Pane Above":
+            value: "Fokusi Te Kuadrati Sipër"
+          "Focus Pane Below":
+            value: "Fokusi Te Kuadrati Poshtë"
+          "Focus Pane On Left":
+            value: "Fokusi Te Kuadrati Në të Majtë"
+          "Focus Pane On Right":
+            value: "Fokusi Te Kuadrati Në të Djathtë"
+          "Close Pane":
+            value: "Mbylle Kuadratin"
+      Developer:
+        value: "Zhvillues"
+        submenu:
+          "Open In &Dev Mode…":
+            value: "Hapeni Nën Mënyrën &Dev…"
+          "&Reload Window":
+            value: "&Ringarkoje Dritaren"
+          "Run Package &Specs":
+            value: "Xhironi &Specifikime Pakete"
+          "Run &Benchmarks":
+            value: "Xhironi Prova &Bankëprove"
+          "Toggle Developer &Tools":
+            value: "Aktivizo/Çaktivizo &Mjete Zhvilluesi"
+      "&Increase Font Size":
+        value: "&Rrite Madhësinë e Shkronjave"
+      "&Decrease Font Size":
+        value: "&Zvogëloje Madhësinë e Shkronjave"
+      "Re&set Font Size":
+        value: "Ktheje Madhësinë e Shkronjave Te &Parazgjedhja"
+      "Toggle Soft &Wrap":
+        value: "Aktivizo/Çaktivizo &Mbështjellje të Butë"
+      "Toggle Command Palette":
+        value: "Aktivizo/Çaktivizo Paletë Urdhrash"
+      "Toggle Tree View":
+        value: "Aktivizo/Çaktivizo Pamjen Pemë"
+  "&Selection":
+    value: "Për&zgjedhje"
+    submenu:
+      "Add Selection &Above":
+        value: "Shtoje Përzgjedhjen &Sipër"
+      "Add Selection &Below":
+        value: "Shtoje Përzgjedhjen &Poshtë"
+      "S&plit into Lines":
+        value: "Ndaje në &Rreshta"
+      "Single Selection":
+        value: "Përzgjedhje Njëshe"
+      "Select to &Top":
+        value: "Përzgjidh nga aty e &Sipër"
+      "Select to Botto&m":
+        value: "Përzgjidh nga aty e &Poshtë"
+      "Select &Line":
+        value: "Përzgjidh &Rreshtin"
+      "Select &Word":
+        value: "Përzgjidh &Fjalën"
+      "Select to Beginning of W&ord":
+        value: "Përzgjidh nga aty e te Fillimi i Fj&alës"
+      "Select to Beginning of L&ine":
+        value: "Përzgjidh nga aty e te Fillimi i Rr&eshtit"
+      "Select to First &Character of Line":
+        value: "Përzgjidh nga aty e te She&nja e Parë e Rreshtit"
+      "Select to End of Wor&d":
+        value: "Përzgjidh nga aty e te F&undi i Fjalës"
+      "Select to End of Lin&e":
+        value: "Përzgjidh nga aty e te Fun&di i Rreshtit"
+      "Select Inside Brackets":
+        value: "Përzgjidh Brenda Kllapash"
+  "F&ind":
+    value: "&Gjeni"
+    submenu:
+      "Find in Buffer":
+        value: "Gjej në Lëndën e Tanishme"
+      "Replace in Buffer":
+        value: "Zëvendëso në Lëndën e Tanishme"
+      "Select Next":
+        value: "Përzgjidh Pasuesen"
+      "Select All":
+        value: "Përzgjidhi Krejt"
+      "Toggle Find in Buffer":
+        value: "Aktivizo/Çaktivizo Gjetje në Lëndën e Tanishme"
+      "Find in Project":
+        value: "Gjej në Projekt"
+      "Toggle Find in Project":
+        value: "Aktivizo/Çaktivizo Gjetjen në Projekt"
+      "Find All":
+        value: "Gjeji të Tëra"
+      "Find Next":
+        value: "Gjej Pasuesin"
+      "Find Previous":
+        value: "Gjej të Mëparshmin"
+      "Replace Next":
+        value: "Zëvendëso Pasuesin"
+      "Replace All":
+        value: "Zëvendësoji Krejt"
+      "Clear History":
+        value: "Pastroje Historikun"
+      "Find Buffer":
+        value: "Gjeni Buffer"
+      "Find File":
+        value: "Gjeni Kartelë"
+      "Find Modified File":
+        value: "Gjeni Kartelë të Modifikuar"
+  "&Packages":
+    value: "&Paketa"
+  "&Help":
+    value: "&Ndihmë"
+    submenu:
+      "View &Terms of Use":
+        value: "Shihni &Kushtet e Përdorimit"
+      "View &License":
+        value: "Shihni &Licencën"
+      "&Documentation":
+        value: "&Dokumentim"
+      "Frequently Asked Questions":
+        value: "Pyetje të Bëra Shpesh"
+      "Community Discussions":
+        value: "Diskutime Në Bashkësi"
+      "Report Issue":
+        value: "Njoftoni Një Problem"
+      "Search Issues":
+        value: "Kërkoni Te Problemet"
+      "About Atom":
+        value: "Mbi Atom-in"
+      "Welcome Guide":
+        value: "Turi i Mirëseardhjes"


Remove duration

Remove duration

--- desktop/components/article/client/fullscreen.coffee
+++ desktop/components/article/client/fullscreen.coffee
@@ -7,7 +7,6 @@
     { @article, header } = options
     @$window = $(window)
     @setupArticleWaypoints()
-    @duration = 500

   setupArticleWaypoints: ->
     $fullscreen = @$('.article-fullscreen')


use blob for audio files upload on iOS after library update broke old method

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


add js for profile dynamic forms

add js for profile dynamic forms

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


Add onDidChangeTitle and onDidChangeModified methods to TestView

--- spec/pane-container-view-spec.coffee
+++ spec/pane-container-view-spec.coffee
@@ -3,6 +3,7 @@
 PaneContainer = require '../src/pane-container'
 PaneContainerView = require '../src/pane-container-view'
 PaneView = require '../src/pane-view'
+{Disposable} = require 'event-kit'
 {$, View, $$} = require '../src/space-pen-extensions'

 describe "PaneContainerView", ->
@@ -18,6 +19,8 @@
       getUri: -> path.join(temp.dir, @name)
       save: -> @saved = true
       isEqual: (other) -> @name is other?.name
+      onDidChangeTitle: -> new Disposable(->)
+      onDidChangeModified: -> new Disposable(->)

     container = atom.views.getView(atom.workspace.paneContainer).__spacePenView
     pane1 = container.getRoot()


Added easing generator class

Added easing generator class

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

--- src/easing.coffee
+++ src/easing.coffee
@@ -0,0 +1,39 @@
+( ->
+
+  Easing =
+    sinusoidal: (begin, end) ->
+      change = end - begin
+      (t) -> begin + change * (1 - Math.cos(t * Math.TAU / 4))
+
+    sinusoidalOut: (begin, end) ->
+      change = end - begin
+      (t) -> begin + change * (0 + Math.sin(t * Math.TAU / 4))
+
+  polynomialEasings = ["linear", "quadratic", "cubic", "quartic", "quintic"]
+
+  polynomialEasings.each (easing, i) ->
+    exponent = i + 1
+    sign = if exponent % 2 then 1 else -1
+
+    Easing[easing] = (begin, end) ->
+      change = (end - begin)
+      (t) -> begin + change * Math.pow(t, exponent)
+
+    Easing["#{easing}Out"] = (begin, end) ->
+      change = end - begin
+      (t) -> begin + change * (1 + sign * Math.pow(t - 1, exponent))
+
+  ["sinusoidal"].concat(polynomialEasings).each (easing) ->
+    Easing["#{easing}InOut"] = (begin, end) ->
+      midpoint = (begin + end)/2
+      easeIn = Easing[easing](begin, midpoint)
+      easeOut = Easing["#{easing}Out"](midpoint, end)
+
+      (t) ->
+        if t < 0.5
+          easeIn(2 * t)
+        else
+          easeOut(2 * t - 1)
+
+  (exports ? this)["Easing"] = Easing
+)()


Commented unused actions

Commented unused actions

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/tamino-martinius/colourco.de.git/'


time-slider to be defaulted to calendar year to date

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


a skeletal main

a skeletal main

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

--- src/main.iced
+++ src/main.iced
@@ -0,0 +1,3 @@
+#!/usr/bin/env iced
+
+yargs = require 'yargs'


Better queue debug logging

Better queue debug logging

--- src/transmission/transmission.coffee
+++ src/transmission/transmission.coffee
@@ -38,6 +38,27 @@
     return this unless @loggingIsEnabled
     msg = (inspect arg for arg in arguments).join(', ')
     console.log msg if @loggingFilter(msg)
+    return this
+
+
+  logQueue: ->
+    return this unless @loggingIsEnabled
+    nextComm = @commQueue[0][1]
+    return this unless @loggingFilter(inspect nextComm.sourceNode)
+    message = []
+    filteredCounter = 0
+    for [commSeqNum, comm] in @commQueue
+      msg = [comm, comm.sourceNode]
+        .map(inspect).join(' for ').replace(/\s+/gi, ' ')
+      if @loggingFilter(msg)
+        filteredCounter = 0
+        message.push msg
+      else
+        if filteredCounter
+          message.pop()
+        filteredCounter++
+        message.push "(#{filteredCounter} skipped)"
+    console.log message.join('\n  ')
     return this

@@ -130,15 +151,10 @@
       or r * (commASeqNum - commBSeqNum)

-  logQueue: ->
-    @log @commQueue.map(([commSeqNum, comm]) ->
-      [comm, commSeqNum, comm.sourceNode]
-    ).toArray()...
-
-
   respond: ->
     while @commQueue.length
       @commQueue.sort(@compareComms)
+      @logQueue()
       [commSeqNum, comm] = @commQueue.shift()
       comm.respond()
     return this


end passes on skip-install flag to installDependencies

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


InvitationInputView: Added class.

InvitationInputView: Added class.


Report network time for all View Time events, not just first load

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


Oops, I screwed up the indentation.

Oops, I screwed up the indentation.

--- packages/rocketchat-lib/client/MessageAction.coffee
+++ packages/rocketchat-lib/client/MessageAction.coffee
@@ -218,4 +218,4 @@
 			input.value = text
 			input.focus()
 			$(input).keyup()
-    order: 5
+		order: 5


+ misc test

+ misc test

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

--- test/misc-test.coffee
+++ test/misc-test.coffee
@@ -0,0 +1,23 @@
+chai            = require 'chai'
+sinon           = require 'sinon'
+sinonChai       = require 'sinon-chai'
+should          = chai.should()
+expect          = chai.expect
+Codec           = require '../src/buffer-codec'
+Errors          = require 'abstract-object/Error'
+util            = require 'abstract-object/util'
+inherits        = util.inherits
+setImmediate    = setImmediate || process.nextTick
+
+chai.use(sinonChai)
+
+describe "String", ->
+  #before (done)->
+  #after (done)->
+
+  describe ".fromCharCode/.charCodeAt", ->
+    it "should convert from 0x0000 to 0xFFFF.", ->
+      for i in [0..0xFFFF]
+        c = String.fromCharCode(i)
+        c.charCodeAt(0).should.be.equal i
+


Reinstate OAuth session state.

Reinstate OAuth session state.

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


_createCheckBox method was added

_createCheckBox method was 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/NightingaleStudio/exam.js.git/'


AccountTwoFactorAuth Pane initial commit


client: make getPlaceholder return correct constant

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


Create combine-two-strings.coffee

Create combine-two-strings.coffee

error: pathspec 'combine-two-strings/combine-two-strings.coffee' did not match any file(s) known to git

--- combine-two-strings/combine-two-strings.coffee
+++ combine-two-strings/combine-two-strings.coffee
@@ -0,0 +1,16 @@
+combineTwoStrings = (str1, str2, combined) ->
+  # Generate all the posible paths between `str1` and `str2`
+  paths = {}
+
+  # Check the string lengths are the same to begin
+  return false  if (str1 + str2).length isnt combined.length
+
+  # Finding paths is essentially the anagrams solution
+  (findPath = (str1, str2, path) ->
+    return paths[path] = true  if path.length is combined.length
+
+    # Find the next path from the first character of either strings
+    str1 and findPath(str1.substr(1), str2, path + str1.substr(0, 1))
+    str2 and findPath(str1, str2.substr(1), path + str2.substr(0, 1))
+  ) str1, str2, ""
+  combined of paths


node broker: default to auto-reconnect false

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


[api] photo panorama via panoramio.com

[api] photo panorama via panoramio.com

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

--- app/scripts/apis/photo_panorama.coffee
+++ app/scripts/apis/photo_panorama.coffee
@@ -0,0 +1,47 @@
+define [
+  'apis/base'
+], (BaseAPI) ->
+
+  class PhotoPanoramaAPI extends BaseAPI
+
+    baseUrl: 'http://www.panoramio.com/map/get_panoramas.php'
+
+    dataDefaults:
+      set: 'public'
+      from: 0
+      to: 20
+      size: 'medium'
+      mapfilter: 'true'
+      callback: 'callback'
+      # lat: undefined
+      # lon: undefined
+      # minx: undefined
+      # miny: undefined
+      # maxx: undefined
+      # maxy: undefined
+
+    initialize: (options) ->
+      super
+      @request()
+      @
+
+    ajaxParams: ->
+      $.extend {}, super,
+        dataType: 'jsonp'
+
+    prepareData: ->
+      delta = 0.03
+      @options.data.minx = @options.data.lng - delta
+      @options.data.miny = @options.data.lat - delta
+      @options.data.maxx = @options.data.lng + delta
+      @options.data.maxy = @options.data.lat + delta
+      delete @options.data.lat
+      delete @options.data.lng
+      super
+
+    prepareResult: ->
+      data = super?.photos
+      random = data? && _.random(0, _(data).size() - 1)
+      data = _(data).any? && data[random]
+      data = data? && data.photo_file_url
+      @result = data || ''


Pingdom temporarly disabled

Pingdom temporarly disabled

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


Component for reading all time entries

Component for reading all time entries

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

--- src/components/WebService/Basecamp/ReadHours.coffee
+++ src/components/WebService/Basecamp/ReadHours.coffee
@@ -0,0 +1,36 @@
+noflo = require "noflo"
+base = require "./BasecampComponent"
+
+class ReadHours extends base.BasecampComponent
+    constructor: ->
+        @start = false
+        do @basePortSetup
+
+        @inPorts.start = new noflo.Port()
+
+        @outPorts =
+            out: new noflo.Port()
+
+        @inPorts.start.on "data", =>
+            @start = true
+            do @readHours if @hostname and @apikey
+        @inPorts.apikey.on "disconnect", =>
+            do @readHours if @hostname and @start
+        @inPorts.hostname.on "disconnect", =>
+            do @readHours if @apikey and @start
+
+    readHours: ->
+        @get "/time_entries/report.xml", (data) =>
+            @parseHours data
+
+    parseHours: (data) ->
+        target = @outPorts.out
+        id = "https://#{@hostname}/"
+        @parse data, (parsed) ->
+            target.beginGroup id
+            target.send entry for entry in parsed['time-entry']
+            target.endGroup()
+            target.disconnect()
+
+exports.getComponent = ->
+    new ReadHours


add clean user script

add clean user script

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


Guard against missing best match

Guard against missing best match

--- src/grammar-registry.coffee
+++ src/grammar-registry.coffee
@@ -40,10 +40,10 @@
     highestScore = -Infinity
     for grammar in @grammars
       score = grammar.getScore(filePath, fileContents)
-      if score > highestScore
+      if score > highestScore or not bestMatch?
         bestMatch = grammar
-      else if score is highestScore
-        bestMatch = grammar if bestMatch.bundledPackage and not grammar.bundledPackage
+      else if score is highestScore and bestMatch?.bundledPackage
+        bestMatch = grammar unless grammar.bundledPackage
     bestMatch

   clearObservers: ->


Added ability to pass options in renderEntities().

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/urbanetic/meteor-atlas-util.git/'


Ember task controller test

Ember task controller test

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

--- test/javascripts/controllers/task_controller_test.js.coffee
+++ test/javascripts/controllers/task_controller_test.js.coffee
@@ -0,0 +1,38 @@
+#= require test_helper
+
+moduleFor 'controller:task', 'TaskController',
+  needs: ['controller:application']
+  setup: ->
+    @litePaper = Ember.Object.create
+      submitted: true
+
+    ETahi.currentUser = Ember.Object.create
+      user:
+        admin: false
+
+    @task = Ember.Object.create
+      isMetadataTask: true
+      litePaper: @litePaper
+
+    Ember.run =>
+      @subject().set('model', @task)
+
+
+test '#isEditable: true when the task is not a metadata task', ->
+  equal @subject().get('isEditable'), true
+
+test '#isEditable: always true when the user is an admin', ->
+  ETahi.currentUser.user.admin = true
+  equal @subject().get('isEditable'), true
+
+test '#isEditable: true when paper is not submitted and task is a metadata task', ->
+  @litePaper.set('submitted', false)
+
+  equal @subject().get('isEditable'), true
+
+test '#isEditable: false when the paper is submitted and the task is a metadata task', ->
+  Ember.run =>
+    @litePaper.set('submitted', true)
+    @task.set('isMetadataTask', true)
+    equal @subject().get('isEditable'), false
+


refact (Module) Extract init and refresh into a namespace

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


document model.one()

document model.one()

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


Client: Teams: Added prepareEmailsText method to add seperators to split emails.


Fixed bug with heroes not rendering in the hero picker.

--- app/views/play/modal/PlayHeroesModal.coffee
+++ app/views/play/modal/PlayHeroesModal.coffee
@@ -148,7 +148,8 @@
       return hero
     fullHero = @getFullHero hero.get 'original'
     onLoaded = =>
-      return unless canvas = $(".hero-item[data-hero-id='#{fullHero.get('original')}'] canvas")
+      canvas = $(".hero-item[data-hero-id='#{fullHero.get('original')}'] canvas")
+      return unless canvas.length  # Don't render it if it's not on the screen.
       canvas.show().prop width: @canvasWidth, height: @canvasHeight
       builder = new SpriteBuilder(fullHero)
       movieClip = builder.buildMovieClip(fullHero.get('actions').attack?.animation ? fullHero.get('actions').idle.animation)


Return the router object when initializing filter

--- components/artwork_filter/index.coffee
+++ components/artwork_filter/index.coffee
@@ -2,6 +2,7 @@
 ArtworkFilterRouter = require './router.coffee'

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


removes log

removes log

--- components/capture_signup/index.coffee
+++ components/capture_signup/index.coffee
@@ -11,8 +11,6 @@
       duration: 4000

     { profile, notes, message, duration } = _.defaults options, defaults
-
-    console.log 'profile', profile, notes

     if CURRENT_USER?
       following = new Following(null, kind: 'profile')


Add grunt-bump

Add grunt-bump

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/tghw/grunt-heroku.git/'


Remove shared.js from build

Remove shared.js from build

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


add gruntfile

add gruntfile

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/Aprila/app-blog.git/'


Fixes #2384

Fixes #2384

--- packages/rocketchat-lib/server/models/Messages.coffee
+++ packages/rocketchat-lib/server/models/Messages.coffee
@@ -104,6 +104,7 @@

 	findPinnedByRoom: (roomId, options) ->
 		query =
+			t: { $ne: 'rm' }
 			_hidden: { $ne: true }
 			pinned: true
 			rid: roomId


Fix checking room roles

Fix checking room roles

--- packages/rocketchat-ui-message/message/message.coffee
+++ packages/rocketchat-ui-message/message/message.coffee
@@ -2,7 +2,7 @@
 	isBot: ->
 		return 'bot' if this.bot?
 	roleTags: ->
-		roles = _.union(UserRoles.findOne(this.u?._id)?.roles, RoomRoles.findOne({'u._id': this.u?._id})?.roles)
+		roles = _.union(UserRoles.findOne(this.u?._id)?.roles, RoomRoles.findOne({'u._id': this.u?._id, rid: this.rid })?.roles)
 		return _.compact(_.map(roles, (role) -> return RocketChat.models.Roles.findOne({ _id: role, description: { $exists: 1 } })?.description));
 	isGroupable: ->
 		return 'false' if this.groupable is false


a bit of flexible size

a bit of flexible size

--- httpdd.fsm.html.coffee
+++ httpdd.fsm.html.coffee
@@ -12,7 +12,7 @@
   block_entry: {}
 transitions = {}

-gridMultiplier = 20 # in pixels
+gridMultiplier = parseInt(window.location.hash.substr(1), 10) or 20 # in pixels
 gridCellWidth = 10 # * gridMultiplier for pixels
 gridCellHeight = 4 # * gridMultiplier for pixels
 gridCellsH = 1


added presenter template

added presenter template

error: pathspec 'lib/generators/transponder/presenter/templates/_presenter.coffee' did not match any file(s) known to git

--- lib/generators/transponder/presenter/templates/_presenter.coffee
+++ lib/generators/transponder/presenter/templates/_presenter.coffee
@@ -0,0 +1,3 @@
+class <%= options[:module_name].camelize %>.Presenters.<%= file_name.camelize %>Presenter extends Transponder.Presenter
+  presenterName: '<%= file_name %>'
+  module: '<%= options[:module_name] %>'


add DateQuestion component

add DateQuestion component

error: pathspec 'app/assets/javascripts/components/questions/date_question.cjsx' did not match any file(s) known to git

--- app/assets/javascripts/components/questions/date_question.cjsx
+++ app/assets/javascripts/components/questions/date_question.cjsx
@@ -0,0 +1,11 @@
+React = require("react")
+Question = require("components/question")
+
+class DateQuestion extends Question
+  render: ->
+

+
{@props.data.question}

+      <input value={@props.selected} type="date"></input>
+

+
+module.exports = DateQuestion


book base 3

book base 3

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


Remove debug line

Remove debug line

--- resources/assets/coffee/react/profile-page/main.coffee
+++ resources/assets/coffee/react/profile-page/main.coffee
@@ -250,7 +250,6 @@
     url = showMoreLink.dataset.showMoreUrl
     offset = @state[propertyName].length
     perPage = parseInt(showMoreLink.dataset.showMorePerPage)
-    console.log perPage
     maxResults = parseInt(showMoreLink.dataset.showMoreMaxResults)

     paginationState = _.cloneDeep @state.showMorePagination


Add KSlide proof-of-concept

Add KSlide proof-of-concept


Fix PrivateMessages issue

Fix PrivateMessages issue


[➦] Merged changes.

[➦] Merged changes.

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


[➠] Shuffled defaults of Booster engine.


Use dialog API to override file chooser dialog in web inspector.

--- atom/renderer/lib/inspector.coffee
+++ atom/renderer/lib/inspector.coffee
@@ -1,11 +1,18 @@
-# Use menu API to show context menu.
 window.onload = ->
+  # Use menu API to show context menu.
   WebInspector.ContextMenu.prototype.show = ->
     menuObject = @_buildDescriptor()
     if menuObject.length
       WebInspector._contextMenu = this
       createMenu(menuObject, @_event)
       @_event.consume()
+
+  # Use dialog API to override file chooser dialog.
+  WebInspector.createFileSelectorElement = (callback) ->
+    fileSelectorElement = document.createElement 'span'
+    fileSelectorElement.style.display = 'none'
+    fileSelectorElement.click = showFileChooserDialog.bind this, callback
+    return fileSelectorElement

 convertToMenuTemplate = (items) ->
   template = []
@@ -40,3 +47,15 @@
   menu = Menu.buildFromTemplate convertToMenuTemplate(items)
   menu.popup remote.getCurrentWindow()
   event.consume true
+
+showFileChooserDialog = (callback) ->
+  remote = require 'remote'
+  dialog = remote.require 'dialog'
+  dialog.showOpenDialog remote.getCurrentWindow(), null, (files) ->
+    callback pathToHtml5FileObject(files[0]) if files?
+
+pathToHtml5FileObject = (path) ->
+  fs = require 'fs'
+  blob = new Blob([fs.readFileSync(path)])
+  blob.name = path
+  blob


Move code from enterFindMode into the FindMode constructor

--- content_scripts/vimium_frontend.coffee
+++ content_scripts/vimium_frontend.coffee
@@ -690,6 +690,9 @@

 class FindMode extends Mode
   constructor: (@options = {}) ->
+    # Save the selection, so performFindInPlace can restore it.
+    findModeSaveSelection()
+    window.findModeQuery = rawQuery: ""
     if @options.returnToViewport
       @scrollX = window.scrollX
       @scrollY = window.scrollY
@@ -697,6 +700,8 @@
       name: "find"
       indicator: false
       exitOnClick: true
+
+    HUD.showFindMode()

   exit: (event) ->
     super()
@@ -919,12 +924,7 @@
 # Enters find mode.  Returns the new find-mode instance.
 window.enterFindMode = (options = {}) ->
   Marks.setPreviousPosition()
-  # Save the selection, so performFindInPlace can restore it.
-  findModeSaveSelection()
-  window.findModeQuery = rawQuery: ""
   window.findMode = new FindMode options
-  HUD.showFindMode()
-  findMode

 window.showHelpDialog = (html, fid) ->
   return if (isShowingHelpDialog || !document.body || fid != frameId)


Add test for array object methods.

Add test for array object methods.

--- tests/unit_tests/utils_test.coffee
+++ tests/unit_tests/utils_test.coffee
@@ -81,3 +81,9 @@
     assert.equal -1, Utils.compareVersions("1.40.1", "1.40.2")
     assert.equal -1, Utils.compareVersions("1.40.1", "1.41")
     assert.equal 1, Utils.compareVersions("1.41", "1.40")
+
+context "miscellaneous tests for arrays",
+  # We should not add Array::abc methods.
+  should "not have additional properties", ->
+    for value in []
+      assert.isTrue false


Remove debugging.

Remove debugging.

--- lib/assets/javascripts/nyulibraries/dropdown.js.coffee
+++ lib/assets/javascripts/nyulibraries/dropdown.js.coffee
@@ -8,7 +8,7 @@
 # Basic Dropdown
 class Dropdown
   init: () ->
-    $(@selector).dropdown @options()
+    $(@selector).dropdown

   # Contructor (obviously)
   constructor: (@selector) ->


sidebar: don't render templates that are not mine

Render resources with stacks no matter what.

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

--- client/app/lib/sidebar/view.coffee
+++ client/app/lib/sidebar/view.coffee
@@ -20,6 +20,7 @@
     { sidebar } = kd.singletons

     ownedResources = calculateOwnedResources(props)
+      .filter ({ stack, template }) -> stack or template?.isMine()
       .map (resource) ->
         isVisible = if resource.stack
         then sidebar.isVisible 'stack', resource.stack.getId()


Fixes #114

Fixes #114

--- SingularityUI/app/views/request.coffee
+++ SingularityUI/app/views/request.coffee
@@ -181,7 +181,12 @@
         # More fetching after we know the latest request state (from the first item of the history)
         @listenTo @requestHistoryTable.history, 'sync', =>
             if @requestHistoryTable.hasHistoryItems() and not @requestHistoryTable.isPausedOrDeleted()
-                @requestModel.fetch().done =>
+                @requestModel.fetch({ suppressErrors: true }).fail =>
+                    @requestModel.fetched = true
+                    @requestActiveDeploy.fetched = true
+                    @requestActiveDeploy.noData = true
+                    @render()
+                .done =>
                     @requestModel.fetched = true
                     @render()


Updated open to use new API. fixes #30

Updated open to use new API. fixes #30

--- lib/project-manager.coffee
+++ lib/project-manager.coffee
@@ -89,10 +89,7 @@
   openProject: ({title, paths}) ->
     atom.open options =
       pathsToOpen: paths
-
-    if atom.config.get('project-manager.closeCurrent') or
-    not atom.project.getPath()
-      atom.close()
+      newWindow: !atom.config.get('project-manager.closeCurrent')

   editProjects: ->
     config =


typo..

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/pcruise/translate-together.git/'


fix: remove stub on financial year end month = 6

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


[fix] [bot] Update levels every minute instead of making wave time depend on the amount of streams

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


Create mind-mapping.coffee

Create mind-mapping.coffee

error: pathspec 'data/tags/mind-mapping.coffee' did not match any file(s) known to git

--- data/tags/mind-mapping.coffee
+++ data/tags/mind-mapping.coffee
@@ -0,0 +1,3 @@
+id："mind-mapping"
+title: "思维导图"
+parent: "function"


Use temp dir in specs

Use temp dir in specs

--- spec/installer-spec.coffee
+++ spec/installer-spec.coffee
@@ -6,7 +6,7 @@

 describe 'create-windows-installer task', ->
   it 'creates a nuget package', ->
-    outputDirectory = __dirname
+    outputDirectory = temp.mkdirSync('grunt-atom-shell-installer-')

     grunt.config.init
       pkg: grunt.file.readJSON(path.join(__dirname, 'fixtures', 'app', 'resources', 'app', 'package.json'))


fix typo

fix typo


go proverbs

go proverbs

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

--- scripts/go-proverbs.coffee
+++ scripts/go-proverbs.coffee
@@ -0,0 +1,45 @@
+# Description:
+#   Hear one of Rob Pike's Go Proverbs
+#   http://go-proverbs.github.io
+#
+# Dependencies:
+#   None
+#
+# Configuration:
+#   None
+#
+# Commands:
+#   go proverb - hear a Go proverb
+#
+# Notes:
+#   None
+#
+# Author:
+#   Michael Ivey <michael.ivey@riotgames.com>
+
+proverbs = [
+	"Don't communicate by sharing memory, share memory by communicating.",
+	"Concurrency is not parallelism.",
+	"Channels orchestrate; mutexes serialize.",
+	"The bigger the interface, the weaker the abstraction.",
+	"Make the zero value useful.",
+	"interface{} says nothing.",
+	"Gofmt's style is no one's favorite, yet gofmt is everyone's favorite.",
+	"A little copying is better than a little dependency.",
+	"Syscall must always be guarded with build tags.",
+	"Cgo must always be guarded with build tags.",
+	"Cgo is not Go.",
+	"With the unsafe package there are no guarantees.",
+	"Clear is better than clever.",
+	"Reflection is never clear.",
+	"Errors are values.",
+	"Don't just check errors, handle them gracefully.",
+	"Design the architecture, name the components, document the details.",
+	"Documentation is for users.",
+	"Don't panic."
+]
+
+
+module.exports = (robot) ->
+  robot.hear /.*go proverb.*/i, (msg) ->
+    msg.send msg.random proverbs


exercises werent rendering because oops

exercises werent rendering because oops

--- src/components/reference-book/exercise.cjsx
+++ src/components/reference-book/exercise.cjsx
@@ -14,7 +14,7 @@
   displayName: 'ReferenceBookExercise'
   render: ->
     {exerciseAPIUrl} = @props
-    {items} = ReferenceBookExerciseStore.get(exerciseAPIUrl)?
+    {items} = ReferenceBookExerciseStore.get(exerciseAPIUrl)

     unless items?.length
       # warning about missing exercise --


Add mouse input handler

Add mouse input handler

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


pastebin: Copy url to clipboard

pastebin: Copy url to clipboard

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/maximilian-krauss/kb-sharer.git/'


Make utils file for something with react...

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


Prevent generated files from being excluded in Workspace::scan test

--- spec/workspace-spec.coffee
+++ spec/workspace-spec.coffee
@@ -1139,6 +1139,7 @@
             range: [[2, 6], [2, 11]]

       it "works on evil filenames", ->
+        atom.config.set('core.excludeVcsIgnoredPaths', false)
         platform.generateEvilFiles()
         atom.project.setPaths([path.join(__dirname, 'fixtures', 'evil-files')])
         paths = []


js for user tabs returned back

js for user tabs returned back

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

--- app/assets/javascripts/users.coffee
+++ app/assets/javascripts/users.coffee
@@ -0,0 +1,7 @@
+jQuery ->
+  $( "#tabs" ).tabs
+    #i.e. do something on show tab
+    show: (event, ui) ->
+      #optional if want to do something based on tab selection
+      whichSelected = $("#tabs").tabs('option', 'selected')
+      #do something


help: prompt for email address when user is not logged in

fixes CNVS-12002

test plan:
  * enable /plugins/error_reporting
  * open the login page
  * click "Help"
  * click "Report a Problem"
  * verify that there is a field for email address
  * log in
  * click "Help"
  * click "Report a Problem"
  * verify that there is no field for email address

Change-Id: I8ef05bd7e927de25716a3b5b9bc8f8844ed4d74f
Reviewed-on: https://gerrit.instructure.com/32375
Reviewed-by: Jon Willesen <eb5ce5e6a76c243326fecfa94534101600f87bd9@instructure.com>
Tested-by: Jenkins <d95b56ce41a2e1ac4cecdd398defd7414407cc08@instructure.com>
QA-Review: Caleb Guanzon <54fa1f30d451e4f3c341a8f3c47c9215fd0be9c6@instructure.com>
Product-Review: Braden Anderson <a6cc2cef7d25f27847876bdb81651755fcebacf0@instructure.com>

--- app/coffeescripts/helpDialog.coffee
+++ app/coffeescripts/helpDialog.coffee
@@ -20,6 +20,8 @@
   helpDialog =
     defaultTitle: I18n.t 'Help', "Help"

+    showEmail: -> not ENV.current_user_id
+
     initDialog: ->
       @$dialog = $('<div style="padding:0; overflow: visible;" />').dialog
         resizable: false
@@ -39,7 +41,7 @@
             role is 'user' or
             (ENV.current_user_roles and role in ENV.current_user_roles)
         locals =
-          showEmail: ENV.current_user_id
+          showEmail: @showEmail()
           helpLinks: links
           url: window.location
           contextAssetString: ENV.context_asset_string
@@ -55,9 +57,9 @@
     initTicketForm: ->
       $form = @$dialog.find('#create_ticket').formSubmit
         disableWhileLoading: true
-        required: ->
+        required: =>
           requiredFields = ['error[subject]', 'error[comments]', 'error[user_perceived_severity]']
-          requiredFields.push 'error[email]' if ENV.current_user_id
+          requiredFields.push 'error[email]' if @showEmail()
           requiredFields
         success: =>
           @$dialog.dialog('close')


wip(mixins): adds a mixin to work with DOM elements

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

--- app/assets/javascripts/awesome_ui/mixins/has_elements.js.coffee
+++ app/assets/javascripts/awesome_ui/mixins/has_elements.js.coffee
@@ -0,0 +1,6 @@
+class mixins.HasElements
+  @has_elements: (collection_names...) ->
+    for collection_name in collection_names
+      @::[collection_name] = new widgets.Hash
+
+


Fluent connector

Fluent connector

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

--- app/fluent.coffee
+++ app/fluent.coffee
@@ -0,0 +1,15 @@
+config = require './config'
+FluentLogger = require 'fluent-logger'
+
+{ host, port, tagPrefix } = config.fluent
+
+console.log 'Connecting to Fluent...'
+fluent = FluentLogger.createFluentSender tagPrefix, {
+  host: host
+  port: port
+}
+
+fluent.on 'error', (err) ->
+  console.log err.message
+
+module.exports = fluent


add routes

add routes

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

--- app/routes.coffee
+++ app/routes.coffee
@@ -0,0 +1,4 @@
+### @ngInject ###
+
+global.cobudgetApp.config ($routeProvider, $locationProvider) ->
+  $routeProvider.when '/', () ->


Add IT Crowd script

Add IT Crowd script

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

--- src/scripts/itcrowd.coffee
+++ src/scripts/itcrowd.coffee
@@ -0,0 +1,51 @@
+# Make hubot fetch quotes pertaining The IT Crowd
+# The SHOES-A
+#
+# get archer
+
+# REQUIRED MODULES
+# sudo npm install htmlparser
+# sudo npm install soupselect
+# sudo npm install jsdom
+# sudo npm install underscore
+
+Select     = require("soupselect").select
+HtmlParser = require "htmlparser"
+JsDom      = require "jsdom"
+_          = require("underscore")
+
+module.exports = (robot) ->
+
+  robot.respond /itcrowd quote$/i, (msg) ->
+    msg
+      .http("http://en.wikiquote.org/wiki/The_IT_Crowd")
+      .header("User-Agent: Crowdbot for Hubot (+https://github.com/github/hubot-scripts)")
+      .get() (err, res, body) ->
+        quotes = parse_html(body, "dl")
+        quote = get_quote msg, quotes
+
+get_quote = (msg, quotes) ->
+
+  nodeChildren = _.flatten childern_of_type(quotes[Math.floor(Math.random() * quotes.length)])
+  quote = (textNode.data for textNode in nodeChildren).join(' ').replace(/^\s+|\s+$/g, '')
+
+  msg.send quote
+
+# Helpers
+parse_html = (html, selector) ->
+  handler = new HtmlParser.DefaultHandler((() ->), ignoreWhitespace: true)
+  parser  = new HtmlParser.Parser handler
+
+  parser.parseComplete html
+  Select handler.dom, selector
+
+childern_of_type = (root) ->
+  return [root] if root?.type is "text"
+
+  if root?.children?.length > 0
+    return (childern_of_type(child) for child in root.children)
+
+get_dom = (xml) ->
+  body = JsDom.jsdom(xml)
+  throw Error("No XML data returned.") if body.getElementsByTagName("FilterReturn")[0].childNodes.length == 0
+  return body


Corrected variable name

Corrected variable 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/evercam/evercam-dashboard.git/'


system command utilities

system command utilities

error: pathspec 'platforms/node/tools/cmd.coffee' did not match any file(s) known to git

--- platforms/node/tools/cmd.coffee
+++ platforms/node/tools/cmd.coffee
@@ -0,0 +1,26 @@
+
+cp = require 'child_process'
+
+##
+##
+module.exports =
+
+    feed: (cmd, args, fn)->
+        if typeof args is 'function'
+            fn = args
+            args = undefined
+
+        proc = cp.spawn cmd, args
+
+        proc.stdout.on 'data', (data)=>
+            for chunk in data.toString().split '\n'
+                if chunk
+                    fn null, chunk
+
+        proc.stdout.on 'end', ()=>
+            fn null, '<EOF>'
+
+        proc.stderr.on 'data', (err)=>
+            fn new Error err
+
+        return proc


updated bugzilla query result format

updated bugzilla query result 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/leonidas/qa-dashboard.git/'


Add a separator between compile/hot swap and stop

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


Removed useless file.

Removed useless file.

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


writing very basic raw importer of plays from nfl.com

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


Decide to run reactions based on job type

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/ICTU/self-healer.git/'


atom: snippets: more

atom: snippets: more

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


Remove unused version tag

Remove unused version tag

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


adding handlebar helper to remove version from id

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

--- src/scripts/helpers/handlebars/noVersion.coffee
+++ src/scripts/helpers/handlebars/noVersion.coffee
@@ -0,0 +1,4 @@
+define (require) ->
+  Handlebars = require('hbs/handlebars')
+
+  Handlebars.registerHelper 'noVersion', (id) -> return id.split('@')[0]


home/billing: activate pricing details link

--- client/home/lib/billing/components/planslist/container.coffee
+++ client/home/lib/billing/components/planslist/container.coffee
@@ -20,8 +20,16 @@
     @state = { groupPlans: null }

+  onDetailsClick: (event) ->
+
+    kd.utils.stopDOMEvent event
+    window.open 'http://www.koding.com/pricing', '_blank'
+
+
   render: ->
-    <PlansList plans={@state.plans} />
+    <PlansList
+      plans={@state.plans}
+      onDetailsClick={@bound 'onDetailsClick'} />

 PlansListContainer.include [KDReactorMixin]


updated line task report to deal with missing eventLog data

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


fix spelling - "standart" to "standard"

fix spelling - "standart" to "standard"

Fix spelling in tooltip for each color representation name in the "show edit/details pane".

--- client/app.coffee
+++ client/app.coffee
@@ -783,7 +783,7 @@
       """
   new Handlebars.SafeString """

-

+

         #{type}

       #{inputs}


JCredential: revert static helper

JCredential: revert static helper

--- workers/social/lib/social/models/computeproviders/credential.coffee
+++ workers/social/lib/social/models/computeproviders/credential.coffee
@@ -150,46 +150,45 @@
       @fetchByPublicKey client, publicKey, callback

-  @someHelper = (client, selector, options, callback)->
-
-    [options, callback] = [callback, options]  unless callback
-    options ?= {}
-
-    { delegate } = client.connection
-    items        = []
-
-    relSelector  =
-      targetName : @getName()
-      sourceId   : delegate.getId()
-
-    if selector.as? and selector.as in ['owner', 'user']
-      relSelector.as = selector.as
-      delete selector.as
-
-    Relationship.someData relSelector, { targetId:1, as:1 }, (err, cursor)=>
-
-      return callback err  if err?
-
-      cursor.toArray (err, arr)=>
-
-        map = arr.reduce (memo, doc)=>
-          memo[doc.targetId] = doc.as
-          memo
-        , {}
-
-        selector    ?= {}
-        selector._id = $in: (t.targetId for t in arr)
-
-        @some selector, options, (err, items)->
-          return callback err  if err?
-
-          for item in items
-            item.owner = map[item._id] is 'owner'
-
-          callback null, items
-
-
-  @some$ = permit 'list credentials', success: JCredential.someHelper
+  @some$ = permit 'list credentials',
+
+    success: (client, selector, options, callback)->
+
+      [options, callback] = [callback, options]  unless callback
+      options ?= {}
+
+      { delegate } = client.connection
+      items        = []
+
+      relSelector  =
+        targetName : 'JCredential'
+        sourceId   : delegate.getId()
+
+      if selector.as? and selector.as in ['owner', 'user']
+        relSelector.as = selector.as
+        delete selector.as
+
+      Relationship.someData relSelector, { targetId:1, as:1 }, (err, cursor)=>
+
+        return callback err  if err?
+
+        cursor.toArray (err, arr)=>
+
+          map = arr.reduce (memo, doc)=>
+            memo[doc.targetId] = doc.as
+            memo
+          , {}
+
+          selector    ?= {}
+          selector._id = $in: (t.targetId for t in arr)
+
+          @some selector, options, (err, items)->
+            return callback err  if err?
+
+            for item in items
+              item.owner = map[item._id] is 'owner'
+
+            callback null, items

   fetchUsers: permit


Kittens!

Kittens!

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

--- src/scripts/kittens.coffee
+++ src/scripts/kittens.coffee
@@ -0,0 +1,24 @@
+
+# Kittens!
+#
+# kitten me - A randomly selected kitten
+# kitten me <w>x<h> - A kitten of the given size
+# kitten bomb me <number> - Many many kittens!
+
+module.exports = (robot) ->
+  robot.respond /kittens?(?: me)?$/i, (msg) ->
+    msg.send kittenMe()
+
+  robot.respond /kittens?(?: me)? (\d+)(?:[x ](\d+))?$/i, (msg) ->
+    msg.send kittenMe msg.match[1], (msg.match[2] || msg.match[1])
+
+  robot.respond /kitten bomb(?: me)?( \d+)?$/i, (msg) ->
+    kittens = msg.match[1] || 5
+    msg.send(kittenMe()) for i in [1..kittens]
+
+kittenMe = (height, width)->
+  h = height ||  Math.floor(Math.random()*250) + 250
+  w = width  || Math.floor(Math.random()*250) + 250
+  root = "http://placekitten.com"
+  root += "/g" if Math.random() > 0.5 # greyscale kittens!
+  return "#{root}/#{h}/#{w}#.png"


PivotalTracker: show me stories for <project>

You need to set the following variables:
  HUBOT_PIVOTAL_TOKEN = <API token>

If you're working on a single project, you can set it once:
  HUBOT_PIVOTAL_PROJECT = <project name>

Otherwise, include the project name in your message to Hubot.

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

--- src/scripts/pivotal.coffee
+++ src/scripts/pivotal.coffee
@@ -0,0 +1,41 @@
+# Get current stories from PivotalTracker
+#
+# You need to set the following variables:
+#   HUBOT_PIVOTAL_TOKEN = <API token>
+#
+# If you're working on a single project, you can set it once:
+#   HUBOT_PIVOTAL_PROJECT = <project name>
+#
+# Otherwise, include the project name in your message to Hubot.
+#
+# show me stories for <project> -- shows current stories being worked on
+module.exports = (robot) ->
+  robot.respond /show\s+(me\s+)?stories\s+(for\s+)?(.*)/i, (msg)->
+    Parser = require("xml2js").Parser
+    token = process.env.HUBOT_PIVOTAL_TOKEN
+    project_name = msg.match[3]
+    if project_name == ""
+      project_name = RegExp(process.env.HUBOT_PIVOTAL_PROJECT, "i")
+    else
+      project_name = RegExp(project_name + ".*", "i")
+
+    msg.http("http://www.pivotaltracker.com/services/v3/projects").headers("X-TrackerToken": token).get() (err, res, body) ->
+      if err
+        msg.send "Pivotal says: #{err}"
+        return
+      (new Parser).parseString body, (err, json)->
+        for project in json.project
+          if project_name.test(project.name)
+            msg.http("https://www.pivotaltracker.com/services/v3/projects/#{project.id}/stories").headers("X-TrackerToken": token).query(filter: "state:unstarted,started,finished,delivered").get() (err, res, body) ->
+              if err
+                msg.send "Pivotal says: #{err}"
+                return
+
+              (new Parser).parseString body, (err, json)->
+                for story in json.story
+                  message = "##{story.id['#']} #{story.name}"
+                  message += " (#{story.owned_by})" if story.owned_by
+                  message += " is #{story.current_state}" if story.current_state && story.current_state != "unstarted"
+                  msg.send message
+            return
+        msg.send "No project #{project_name}"


refactored main.coffee

refactored main.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/toukov/rinsenews.git/'


more kvstore over from keybase/node-clietnt/src/db.iced

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

--- src/kvstore.iced
+++ src/kvstore.iced
@@ -0,0 +1,147 @@
+
+{mkdirp} = require './fs'
+iutils = require 'iced-utils'
+{Lock} = iutils.lock
+{util} = require 'pgp-utils'
+log = require './log'
+{constants} = require './constants'
+idb = require 'iced-db'
+
+##=======================================================================
+
+make_key = ({ table, type, id }) -> [ table, type, id].join(":").toLowerCase()
+make_kvstore_key = ( {type, key } ) ->
+  type or= key[-2...]
+  make_key { table : "kv", type, id : key }
+make_lookup_key = ( {type, name} ) -> make_key { table : "lo", type, id : name }
+
+##=======================================================================
+
+class DB
+
+  constructor : ({@filename}) ->
+    @lock = new Lock
+
+
+  #-----
+
+  get_db : () ->
+    db = new idb.DB { root : @get_filename(), json : true }
+
+  #----
+
+  get_filename : () ->
+    @filename or= env().get_db_filename()
+    return @filename
+
+  #----
+
+  _upgrade : (cb) ->
+    f = env().get_nedb_filename()
+    await fs.stat f, defer err, so
+    unless err?
+      await fs.unlink f, defer err
+      if err?
+        log.warn "Error deleting old DB file #{f}: #{err}"
+      else
+        log.info "Deleting old DB #{f}"
+    cb err
+
+  #----
+
+  open : (cb) ->
+    err = null
+    await @_upgrade defer err
+    await @_open defer err unless @db?
+    cb err
+
+  #----
+
+  unlink : (cb) ->
+    db = @get_db()
+    log.info "Purging local cache: #{db.root}"
+    await db.drop defer err
+    cb err
+
+  #----
+
+  close : (cb) ->
+    cb null
+  #-----
+
+  put : ({type, key, value, name, names, debug}, cb) ->
+    kvsk = make_kvstore_key {type,key}
+    log.debug "| DB put value #{kvsk}" if debug
+    await @db.put { key : kvsk, value }, defer err, obj
+    unless err?
+      {hkey} = obj
+      names  = [ name ] if name? and not names?
+      if names and names.length
+        for name in names
+          lk = make_lookup_key(name)
+          log.debug "| DB put lookup: #{lk} -> #{hkey}" if debug
+          await @db.put { key : lk, value : hkey }, defer tmp
+          if tmp? and not err? then err = tmp
+    cb err
+
+  #-----
+
+  remove : ({type, key, optional}, cb) ->
+    k = make_kvstore_key { type, key }
+    err = null
+    log.debug "+ DB remove #{k}"
+
+    # XXX error -- we're leaking all of the pointer that pointed to this object.
+    # I think it's OK since we're not ever calling remove.
+    await @db.del { key : k }, defer err
+
+    if err? and (err instanceof idb.E.NotFoundError) and optional
+      log.debug "| No object found for #{k}"
+      err = null
+
+    log.debug "- DB remove #{k} -> #{err}"
+    cb null
+
+  #-----
+
+  find1 : (q, cb) ->
+    err = value = null
+    await @db.get q, defer err, value
+    if err? and (err instanceof idb.E.NotFoundError) then err = null
+    else if err? then # noop
+    cb err, value
+
+  #-----
+
+  get : ({type, key}, cb) ->
+    k = make_kvstore_key { type, key }
+    await @find1 { key : k }, defer err, value
+    cb err, value
+
+  #-----
+
+  lookup : ({type, name}, cb) ->
+    k = make_lookup_key { type, name }
+    err = value = null
+    await @find1 { key : k }, defer err, value
+    if not err? and value?
+      await @find1 { hkey : value }, defer err, value
+    cb err, value
+
+  #-----
+
+  _init_db : (cb) ->
+    log.debug "+ DB::_init_db"
+    esc = make_esc cb, "DB::_init_db"
+    await @db.create esc defer made
+    log.debug "- DB::_init_db -> #{made}"
+    cb null
+
+##=======================================================================
+
+exports.db = _db = new DB {}
+exports.DB = DB
+for k,v of DB.prototype
+  ((key) -> exports[key] = (args...) -> _db[key](args...) )(k)
+
+##=======================================================================


Used collection-helpers instead of transform.


fixed grading edit blur event

fixed grading edit blur event

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


Update ellipse.coffee

Update ellipse.coffee

Copy/pasted wrong version of containsPoint!

--- app/lib/world/ellipse.coffee
+++ app/lib/world/ellipse.coffee
@@ -57,7 +57,7 @@
     if withRotation and @rotation # optionally rotate point into ellipse space
       c = Math.cos(@rotation)
       s = Math.sin(@rotation)
-      [x, y] = [x*c + y*s, y*c + x*s]
+      [x, y] = [x*c - y*s, y*c + x*s]
     x = x / @width # scale point into ellipse space
     y = y / @height
     x*x + y*y <= 1 #if the resulting point falls on/in the unit circle at 0, 0


Fixed a case where the supermodel was overriding what a previous supermodel had set for saveBackups.

--- app/models/SuperModel.coffee
+++ app/models/SuperModel.coffee
@@ -122,7 +122,7 @@
     return @progress is 1.0 or not @denom

   addModelResource: (modelOrCollection, name, fetchOptions, value=1) ->
-    modelOrCollection.saveBackups = @shouldSaveBackups(modelOrCollection)
+    modelOrCollection.saveBackups = modelOrCollection.saveBackups or @shouldSaveBackups(modelOrCollection)
     @checkName(name)
     res = new ModelResource(modelOrCollection, name, fetchOptions, value)
     @storeResource(res, value)


Add copy task

Add copy task

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

--- grunt/copy.coffee
+++ grunt/copy.coffee
@@ -0,0 +1,20 @@
+path = require 'path'
+
+module.exports = (grunt) ->
+  'use strict';
+
+  assets:
+    files: [{
+      expand: true,
+      cwd: 'assets',
+      src: ['*/**'],
+      dest: 'build/debug/assets',
+      filter: (filepath) ->
+        not ((filepath.indexOf(path.sep + 'scenes') >= 0) || (filepath.indexOf(path.sep + 'prefabs') >= 0))
+    }]
+  root:
+    files: [{
+      expand: true,
+      src: ['favicon.ico', '*.png'],
+      dest: 'build/debug/'
+    }]


Autocomplete on class name

Autocomplete on class name

--- lib/php-class-provider.coffee
+++ lib/php-class-provider.coffee
@@ -11,8 +11,8 @@
   # "new" keyword or word starting with capital letter
   wordRegex: /\b(^new \w*[a-zA-Z_]\w*)|(^[A-Z]([a-zA-Z])*)\b/g

-  possibleWords: ["async", "attributes", "author", "beta", "borrows", "bubbles", "Master"]
-
+  possibleWords: []
+
   buildSuggestions: ->
     selection = @editor.getSelection()
     prefix = @prefixOfSelection selection
@@ -40,8 +40,12 @@
   getClasses: (error, stdout, stderr) =>
     console.log error
     console.log stderr
-    console.log JSON.parse(stdout)
     console.log stdout
+
+    res = JSON.parse(stdout)
+    console.log res
+
+    @possibleWords = res.classes

   generateClasses: ->
     for directory in atom.project.getDirectories()


Modified in browser at pixie.strd6.com

Modified in browser at pixie.strd6.com

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

--- src/animation.coffee
+++ src/animation.coffee
@@ -0,0 +1,49 @@
+(() ->
+  Animation = (data) ->
+    spriteLookup = {}
+    activeAnimation = data.animations[0]
+    currentSprite = data.animations[0].frames[0]
+
+    advanceFrame = (animation) ->
+      frames = animation.frames
+      currentSprite = frames[(frames.indexOf(currentSprite) + 1) % frames.length]
+
+    data.tileset.each (spriteData, i) ->
+      spriteLookup[i] = Sprite.fromURL(spriteData.src)
+
+    $.extend data,
+      currentSprite: -> return currentSprite
+      draw: (canvas, x, y) ->
+        canvas.withTransform Matrix.translation(x, y), () ->
+          spriteLookup[currentSprite].draw(canvas, 0, 0)
+
+      frames: -> return activeAnimation.frames
+
+      update: -> return advanceFrame(activeAnimation)
+
+      active: (name) ->
+        if (name != undefined)
+          if data.animations[name]
+            currentSprite = data.animations[name].frames[0]
+        else
+          return activeAnimation
+
+  window.Animation = (name, callback) ->
+    fromPixieId(App.Animations[name], callback)
+
+  fromPixieId = (id, callback) ->
+    url = "http://pixie.strd6.com/s3/animations/#{id}/data.json"
+
+    proxy =
+      active: $.noop
+      draw: $.noop
+
+    $.getJSON url, (data) ->
+      $.extend(proxy, Animation(data))
+
+      callback? proxy
+
+    return proxy
+
+  window.Animation.fromPixieId = fromPixieId
+)()


ability to destroy environment

ability to destroy environment

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


ability to clone rds instances

ability to clone rds instances


Start upgrade command

Start upgrade command

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

--- src/cmd/upgrade.coffee
+++ src/cmd/upgrade.coffee
@@ -0,0 +1,8 @@
+exports.title = "Upgrade #{PACKAGE.mingzi} itself"
+
+exports.help = """
+  Download and install latest version of #{PACKAGE.mingzi}
+  """
+
+exports.cmd = ->
+  echo PACKAGE.version, '++'


support custom client-side configuration file from arguments(change coffeescript)

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


code quality fix

code quality fix

--- bokehjs/src/coffee/common/ui_events.coffee
+++ bokehjs/src/coffee/common/ui_events.coffee
@@ -85,7 +85,7 @@
     if tool_view._doubletap?
       logger.debug("Registering tool: #{type} for event 'doubletap'")
       tool_view.listenTo(@, "doubletap", tool_view._doubletap)
-
+
     # Dual touch hack part 1/2
     # This is a hack for laptops with touch screen who may be pinching or scrolling
     # in order to use the wheel zoom tool. If it's a touch screen the WheelZoomTool event


app/util: add cloneArray

app/util: add cloneArray

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

--- client/app/lib/util/cloneArray.coffee
+++ client/app/lib/util/cloneArray.coffee
@@ -0,0 +1,13 @@
+_ = require 'underscore'
+
+clone          =
+module.exports =
+
+(arr) ->
+
+  if _.isArray arr
+    return _.map arr, clone
+  else if 'object' is typeof arr
+    throw 'array should not contain an object'
+  else
+    return arr


Use all the available cores on CI

Use all the available cores on CI

--- build/tasks/spec-task.coffee
+++ build/tasks/spec-task.coffee
@@ -3,6 +3,12 @@

 _ = require 'underscore-plus'
 async = require 'async'
+
+if process.env.JANKY_SHA1
+  # Use all the cores on CI
+  concurrency = require('os').cpus().length
+else
+  concurrency = 2

 module.exports = (grunt) ->
   {isAtomPackage, spawn} = require('./task-helpers')(grunt)
@@ -61,7 +67,7 @@
       continue unless isAtomPackage(packagePath)
       packageSpecQueue.push(packagePath)

-    packageSpecQueue.concurrency = 1
+    packageSpecQueue.concurrency = concurrency - 1
     packageSpecQueue.drain = -> callback(null, failedPackages)

   runCoreSpecs = (callback) ->
@@ -84,7 +90,7 @@
         fs.unlinkSync('ci.log')
       else
         # TODO: Restore concurrency on Windows
-        packageSpecQueue.concurrency = 2
+        packageSpecQueue.concurrency = concurrency

       callback(null, error)

@@ -102,7 +108,7 @@
     method [runCoreSpecs, runPackageSpecs], (error, results) ->
       [coreSpecFailed, failedPackages] = results
       elapsedTime = Math.round((Date.now() - startTime) / 100) / 10
-      grunt.log.ok("Total spec time: #{elapsedTime}s")
+      grunt.log.ok("Total spec time: #{elapsedTime}s using #{concurrency} cores")
       failures = failedPackages
       failures.push "atom core" if coreSpecFailed


Combine join and sign in elements into one for mobile

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


Social: change rest... to args...

Social: change rest... to args...

--- client/Main/socialapicontroller.coffee
+++ client/Main/socialapicontroller.coffee
@@ -143,17 +143,17 @@
           ]

   message:
-    edit   :(rest...)-> messageApiMessageResFunc 'edit', rest...
-    post   :(rest...)-> messageApiMessageResFunc 'post', rest...
-    reply  :(rest...)-> messageApiMessageResFunc 'reply', rest...
-    delete :(rest...)-> KD.remote.api.SocialMessage.delete rest...
-    like   :(rest...)-> KD.remote.api.SocialMessage.like rest...
-    unlike :(rest...)-> KD.remote.api.SocialMessage.unlike rest...
-    listLikers:(rest...)-> KD.remote.api.SocialMessage.listLikers rest...
-    sendPrivateMessage :(rest...)->
-      sendPrivateMessageRequest 'sendPrivateMessage', rest...
-    fetchPrivateMessages :(rest...)->
-      sendPrivateMessageRequest 'fetchPrivateMessages', rest...
+    edit   :(args...)-> messageApiMessageResFunc 'edit', args...
+    post   :(args...)-> messageApiMessageResFunc 'post', args...
+    reply  :(args...)-> messageApiMessageResFunc 'reply', args...
+    delete :(args...)-> KD.remote.api.SocialMessage.delete args...
+    like   :(args...)-> KD.remote.api.SocialMessage.like args...
+    unlike :(args...)-> KD.remote.api.SocialMessage.unlike args...
+    listLikers:(args...)-> KD.remote.api.SocialMessage.listLikers args...
+    sendPrivateMessage :(args...)->
+      sendPrivateMessageRequest 'sendPrivateMessage', args...
+    fetchPrivateMessages :(args...)->
+      sendPrivateMessageRequest 'fetchPrivateMessages', args...
     revive : mapActivity

   channel:
@@ -161,17 +161,17 @@
     fetchActivities      : fetchChannelActivities
     fetchGroupActivities : fetchGroupActivities
     fetchPopularTopics   : fetchPopularTopics
-    fetchPinnedMessages  : (rest...)->
-      channelApiActivitiesResFunc 'fetchPinnedMessages', rest...
-    pin                  : (rest...)->
-      KD.remote.api.SocialChannel.pinMessage rest...
-    unpin                : (rest...)->
-      KD.remote.api.SocialChannel.unpinMessage rest...
-    follow               : (rest...)->
-      KD.remote.api.SocialChannel.follow rest...
-    unfollow             : (rest...)->
-      KD.remote.api.SocialChannel.unfollow rest...
-    fetchFollowedChannels: (rest...)->
-      channelApiChannelsResFunc 'fetchFollowedChannels', rest...
-    searchTopics: (rest...)->
-      channelApiChannelsResFunc 'searchTopics', rest...
+    fetchPinnedMessages  : (args...)->
+      channelApiActivitiesResFunc 'fetchPinnedMessages', args...
+    pin                  : (args...)->
+      KD.remote.api.SocialChannel.pinMessage args...
+    unpin                : (args...)->
+      KD.remote.api.SocialChannel.unpinMessage args...
+    follow               : (args...)->
+      KD.remote.api.SocialChannel.follow args...
+    unfollow             : (args...)->
+      KD.remote.api.SocialChannel.unfollow args...
+    fetchFollowedChannels: (args...)->
+      channelApiChannelsResFunc 'fetchFollowedChannels', args...
+    searchTopics         : (args...)->
+      channelApiChannelsResFunc 'searchTopics', args...


Added news a as an example news service

Added news a as an example news service

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

--- app/assets/javascripts/services/news/news.js.coffee
+++ app/assets/javascripts/services/news/news.js.coffee
@@ -0,0 +1,17 @@
+@app.service 'News', ($resource, $http) ->
+  class News
+    constructor: () ->
+      @service = $resource('/news/:newsId.json', {}, {
+        index: {
+          method: 'GET',
+          params: {},
+          isArray: true,
+          headers: {
+            'Content-Type': 'application/json'
+          }
+        }
+      })
+    all: ->
+      @service.index()
+    find: (newsId) ->
+      @service.get({'newsId' : newsId})


Show an error message if the frontend can't connect to the server.

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


Create a directive to display a US status

--- app/coffee/modules/common/directives.coffee
+++ app/coffee/modules/common/directives.coffee
@@ -57,6 +57,27 @@
     return {link: link}

+UsStatusDisplay = ->
+    ###
+    Show the name of a US status by id.
+    It need usStatusList in the $scope.
+
+    Example:
+
+
+    ###
+    link = ($scope, $el, $attrs) ->
+       $scope.$watch $attrs.tgUsStatusDisplay, (status_id) ->
+           if status_id is undefined
+               return
+
+           status_name = $scope.usStatusList[status_id].name
+           $el.html(status_name)
+
+    return {link:link}
+
+
 module = angular.module("taigaCommon")
 module.directive("tgDateRange", DateRangeDirective)
 module.directive("tgSprintProgressbar", SprintProgressBarDirective)
+module.directive("tgUsStatusDisplay", UsStatusDisplay)


List /teachers/classes classes most recent first

--- app/views/courses/TeacherClassesView.coffee
+++ app/views/courses/TeacherClassesView.coffee
@@ -34,6 +34,7 @@
   initialize: (options) ->
     super(options)
     @classrooms = new Classrooms()
+    @classrooms.comparator = (a, b) -> b.id.localeCompare(a.id)
     @classrooms.fetchMine()
     @supermodel.trackCollection(@classrooms)
     @listenTo @classrooms, 'sync', ->


Fix lint error

Fix lint error

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


Client: Activity: Test: Created StartVideoCallLink tests

error: pathspec 'client/activity/lib/components/common/test/startvideocalllink.coffee' did not match any file(s) known to git

--- client/activity/lib/components/common/test/startvideocalllink.coffee
+++ client/activity/lib/components/common/test/startvideocalllink.coffee
@@ -0,0 +1,47 @@
+kd        = require 'kd'
+React     = require 'kd-react'
+expect    = require 'expect'
+ReactDOM  = require 'react-dom'
+Link      = require '../startvideocalllink'
+TestUtils = require 'react-addons-test-utils'
+
+describe 'StartVideoCallLink', ->
+
+  { Simulate
+    renderIntoDocument
+    findRenderedDOMComponentWithClass } = TestUtils
+
+
+  afterEach -> expect.restoreSpies()
+
+
+  describe '::render', ->
+
+    it 'should render link with correct props and classNames', ->
+
+      link = renderIntoDocument(<Link onStart={kd.noop}/>)
+
+      expect(link.props.onStart).toBeA 'function'
+      expect(findRenderedDOMComponentWithClass link, 'StartVideoCall-link').toExist()
+      expect(findRenderedDOMComponentWithClass link, 'StartVideoCall-icon').toExist()
+
+    it 'should render correct text content', ->
+
+      link = renderIntoDocument(<Link onStart={kd.noop}/>)
+      node = ReactDOM.findDOMNode(link).querySelector 'span'
+
+      expect(node.textContent).toEqual 'Start a Video Call'
+
+
+  describe '::onClick', ->
+
+    it 'should call passed onStart handler when click the link', ->
+
+      onStartSpy = expect.createSpy()
+      link       = renderIntoDocument(<Link onStart={onStartSpy}/>)
+      node       = ReactDOM.findDOMNode link
+
+      Simulate.click node
+
+      expect(onStartSpy).toHaveBeenCalled()
+


bigger template main.coffee

bigger template main.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/aeosynth/demos.git/'


Initialise modes and install listeners at the same time.

Previously, we initialised modes early, but then installed our listeners
only after DOM ready, and then only after we'd heard back from the
background page in `checkIfEnabledForUrl`.  This creates a gap during
which modes are installed, but they're not receiving events.

If an input is focused during that gap, then we don't pick it up when
the modes are installed, and we don't pick it up when the input is
focussed (because we're not listening).  This commit moves these two
initialisation steps together, so they happen at the same time and there
is no gap.

Fixes #1738.

--- content_scripts/vimium_frontend.coffee
+++ content_scripts/vimium_frontend.coffee
@@ -126,7 +126,6 @@
 # Complete initialization work that sould be done prior to DOMReady.
 #
 initializePreDomReady = ->
-  initializeModes()
   checkIfEnabledForUrl()
   refreshCompletionKeys()

@@ -190,6 +189,7 @@
 installedListeners = false
 window.installListeners = ->
   unless installedListeners
+    initializeModes()
     # Key event handlers fire on window before they do on document. Prefer window for key events so the page
     # can't set handlers to grab the keys before us.
     for type in [ "keydown", "keypress", "keyup", "click", "focus", "blur", "mousedown", "scroll" ]


not done, write_text_file_to_project test times out

error: pathspec 'src/smc-hub/test/api/text_files.coffee' did not match any file(s) known to git

--- src/smc-hub/test/api/text_files.coffee
+++ src/smc-hub/test/api/text_files.coffee
@@ -0,0 +1,37 @@
+###
+Testing API functions relating to text files
+###
+
+api   = require('./apitest')
+{setup, teardown} = api
+misc = require('smc-util/misc')
+expect = require('expect')
+
+describe 'testing text file operations -- ', ->
+    before(setup)
+    after(teardown)
+
+    project_id = undefined
+
+    it "creates target project", (done) ->
+        api.call
+            event : 'create_project'
+            body  :
+                title       : 'TFTEST'
+                description : 'Testing text file operations'
+            cb    : (err, resp) ->
+                expect(resp?.event).toBe('project_created')
+                project_id = resp.project_id
+                done(err)
+
+    it "creates a text file", (done) ->
+        api.call
+            event : 'write_text_file_to_project'
+            body  :
+                project_id: project_id
+                content   : 'hello\nworld'
+                path      : 'A1/h1.txt'
+            cb    : (err, resp) ->
+                expect(err).toEqual(null)
+                expect(resp?.event).toBe('file_written_to_project')
+                done(err)


Add pagination

Add pagination

Signed-off-by: Steven Hoffman <f5bcacb8ce1651b7d1e56f2693431f20e085fdeb@valenciamgmt.com>

error: pathspec 'vendor/assets/javascripts/fustrate/components/pagination.coffee' did not match any file(s) known to git

--- vendor/assets/javascripts/fustrate/components/pagination.coffee
+++ vendor/assets/javascripts/fustrate/components/pagination.coffee
@@ -0,0 +1,55 @@
+class Fustrate.Components.Pagination extends Fustrate.Components.Base
+  constructor: ({@current_page, @total_pages, @total_entries, @per_page}) ->
+    @base = @constructor._getPreppedPaginationURL()
+
+  link: (text, page, options = {}) =>
+    Fustrate.linkTo(text, "#{@base}page=#{page}", options)
+
+  previousLink: =>
+    if @current_page > 1
+      return "
+

+          #{@link('← Previous', @current_page - 1, rel: 'prev')}
+
"
+
+    '
← Previous
'
+
+  nextLink: =>
+    if @current_page < @total_pages
+      return "
+

+          #{@link('Next →', @current_page + 1, rel: 'next')}
+
"
+
+    '
Next →
'
+
+  generate: =>
+    pages = []
+
+    if @total_pages > 1
+      for i in [1..@total_pages]
+        if i == @current_page
+          pages.push "
#{VMG.linkTo(i, '#')}
"
+        else
+          pages.push "
#{@link i, i}
"
+
+      pages.unshift @previousLink()
+      pages.push @nextLink()
+
+    $('
').html(pages.join ' ')
+
+  @getCurrentPage: ->
+    window.location.search.match(/[?&]page=(\d+)/)?[1] ? 1
+
+  # Just add 'page='
+  @_getPreppedPaginationURL: ->
+    search = window.location.search.replace(/[?&]page=\d+/, '')
+
+    search = if search[0] == '?'
+               "#{search}&"
+             else if search[0] == '&'
+               "?#{search[1...search.length]}&"
+             else
+               '?'
+
+    "#{window.location.pathname}#{search}"


Add logic in backbone for removing teams

Resolves: [#106309290]

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


move tos link

move tos link

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