[Refactor] resources.urls list

[Refactor] resources.urls list

--- app/coffee/modules/resources.coffee
+++ app/coffee/modules/resources.coffee
@@ -24,59 +24,42 @@
 class ResourcesService extends taiga.Service

 urls = {
+    # Auth
     "auth": "/auth"
     "auth-register": "/auth/register"
     "invitations": "/invitations"
-    "permissions": "/permissions"
-    "roles": "/roles"
-    "projects": "/projects"
-    "memberships": "/memberships"
-    "notify-policies": "/notify-policies"
-    "bulk-create-memberships": "/memberships/bulk_create"
-    "milestones": "/milestones"
-    "userstories": "/userstories"
-    "bulk-create-us": "/userstories/bulk_create"
-    "bulk-update-us-backlog-order": "/userstories/bulk_update_backlog_order"
-    "bulk-update-us-sprint-order": "/userstories/bulk_update_sprint_order"
-    "bulk-update-us-kanban-order": "/userstories/bulk_update_kanban_order"
-    "userstories-restore": "/userstories/%s/restore"
-    "tasks": "/tasks"
-    "bulk-create-tasks": "/tasks/bulk_create"
-    "bulk-update-task-taskboard-order": "/tasks/bulk_update_taskboard_order"
-    "tasks-restore": "/tasks/%s/restore"
-    "issues": "/issues"
-    "bulk-create-issues": "/issues/bulk_create"
-    "issues-restore": "/issues/%s/restore"
-    "wiki": "/wiki"
-    "wiki-restore": "/wiki/%s/restore"
-    "wiki-links": "/wiki-links"
-    "choices/userstory-statuses": "/userstory-statuses"
-    "choices/userstory-statuses/bulk-update-order": "/userstory-statuses/bulk_update_order"
-    "choices/points": "/points"
-    "choices/points/bulk-update-order": "/points/bulk_update_order"
-    "choices/task-statuses": "/task-statuses"
-    "choices/task-statuses/bulk-update-order": "/task-statuses/bulk_update_order"
-    "choices/issue-statuses": "/issue-statuses"
-    "choices/issue-statuses/bulk-update-order": "/issue-statuses/bulk_update_order"
-    "choices/issue-types": "/issue-types"
-    "choices/issue-types/bulk-update-order": "/issue-types/bulk_update_order"
-    "choices/priorities": "/priorities"
-    "choices/priorities/bulk-update-order": "/priorities/bulk_update_order"
-    "choices/severities": "/severities"
-    "choices/severities/bulk-update-order": "/severities/bulk_update_order"
-    "search": "/search"
-    "sites": "/sites"
-    "project-templates": "/project-templates"
-    "site-members": "/site-members"
-    "site-projects": "/site-projects"
+
+    # User
     "users": "/users"
     "users-password-recovery": "/users/password_recovery"
     "users-change-password-from-recovery": "/users/change_password_from_recovery"
     "users-change-password": "/users/change_password"
     "users-change-email": "/users/change_email"
     "users-cancel-account": "/users/cancel"
+
+    # User - Notification
+    "notify-policies": "/notify-policies"
+
+    # User - Storage
     "user-storage": "/user-storage"
+
+    # Memberships
+    "memberships": "/memberships"
+    "bulk-create-memberships": "/memberships/bulk_create"
+
+    # Roles & Permissions
+    "roles": "/roles"
+    "permissions": "/permissions"
+
+    # Resolver
     "resolver": "/resolver"
+
+    # Project
+    "projects": "/projects"
+    "project-templates": "/project-templates"
+    "project-modules": "/projects/%s/modules"
+
+    # Project Values - Choises
     "userstory-statuses": "/userstory-statuses"
     "points": "/points"
     "task-statuses": "/task-statuses"
@@ -84,11 +67,30 @@
     "issue-types": "/issue-types"
     "priorities": "/priorities"
     "severities": "/severities"
-    "project-modules": "/projects/%s/modules"
-    "webhooks": "/webhooks"
-    "webhooks-test": "/webhooks/%s/test"
-    "webhooklogs": "/webhooklogs"
-    "webhooklogs-resend": "/webhooklogs/%s/resend"
+
+    # Milestones/Sprints
+    "milestones": "/milestones"
+
+    # User stories
+    "userstories": "/userstories"
+    "bulk-create-us": "/userstories/bulk_create"
+    "bulk-update-us-backlog-order": "/userstories/bulk_update_backlog_order"
+    "bulk-update-us-sprint-order": "/userstories/bulk_update_sprint_order"
+    "bulk-update-us-kanban-order": "/userstories/bulk_update_kanban_order"
+
+    # Tasks
+    "tasks": "/tasks"
+    "bulk-create-tasks": "/tasks/bulk_create"
+    "bulk-update-task-taskboard-order": "/tasks/bulk_update_taskboard_order"
+
+    # Issues
+    "issues": "/issues"
+    "bulk-create-issues": "/issues/bulk_create"
+
+    # Wiki pages
+    "wiki": "/wiki"
+    "wiki-restore": "/wiki/%s/restore"
+    "wiki-links": "/wiki-links"

     # History
     "history/us": "/history/userstory"
@@ -107,22 +109,31 @@
     "custom-attributes/issue": "/issue-custom-attributes"
     "custom-attributes/task": "/task-custom-attributes"

-    # Custom field values
+    # Custom Attributess - Values
     "custom-attributes-values/userstory": "/userstories/custom-attributes-values"
     "custom-attributes-values/issue": "/issues/custom-attributes-values"
     "custom-attributes-values/task": "/tasks/custom-attributes-values"

-    # Feedback
-    "feedback": "/feedback"
+    # Webhooks
+    "webhooks": "/webhooks"
+    "webhooks-test": "/webhooks/%s/test"
+    "webhooklogs": "/webhooklogs"
+    "webhooklogs-resend": "/webhooklogs/%s/resend"
+
+    # Reports - CSV
+    "userstories-csv": "/userstories/csv?uuid=%s"
+    "tasks-csv": "/tasks/csv?uuid=%s"
+    "issues-csv": "/issues/csv?uuid=%s"
+
+    # Search
+    "search": "/search"

     # Export/Import
     "exporter": "/exporter"
     "importer": "/importer/load_dump"

-    # CSV
-    "userstories-csv": "/userstories/csv?uuid=%s"
-    "tasks-csv": "/tasks/csv?uuid=%s"
-    "issues-csv": "/issues/csv?uuid=%s"
+    # Feedback
+    "feedback": "/feedback"

     # locales
     "locales": "/locales"


Add period to usage

Add period to usage

--- src/unpublish.coffee
+++ src/unpublish.coffee
@@ -20,7 +20,7 @@

       Remove a published package from the atom.io registry. The package in the
       current working directory will be unpublished if no package name is
-      specified
+      specified.
     """
     options.alias('h', 'help').describe('help', 'Print this usage message')
     options.alias('f', 'force').boolean('force').describe('force', 'Do not prompt for confirmation.')


reversing showing fixed commits

reversing showing fixed commits

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


We got buttons

We got buttons

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

--- src/control.coffee
+++ src/control.coffee
@@ -0,0 +1,10 @@
+exports.control = (T, world) ->
+  T.div {class: "controls"}, [
+    T.div {class: "controls"}, [
+      T.button "West"
+      T.button "North"
+      T.button "South"
+      T.button "East"
+    ]
+    T.p "Goodbye"
+  ]


Add tests for changing node properties

Add tests for changing node properties

[#99423710]

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

--- test/node-test.coffee
+++ test/node-test.coffee
@@ -0,0 +1,65 @@
+global.window = { location: '' }
+
+chai = require('chai')
+chai.config.includeStack = true
+
+expect         = chai.expect
+should         = chai.should()
+Sinon          = require('sinon')
+
+requireModel = (name) -> require "#{__dirname}/../src/code/models/#{name}"
+
+Node           = requireModel 'node'
+GraphStore    = require "#{__dirname}/../src/code/stores/graph-store"
+CodapConnect   = requireModel 'codap-connect'
+
+describe "A Node", ->
+  beforeEach ->
+    sandbox = Sinon.sandbox.create()
+    sandbox.stub(CodapConnect, "instance", ->
+      return {
+        sendUndoableActionPerformed: -> return ''
+      }
+    )
+    @graphStore = GraphStore.store
+    @graphStore.init()
+
+  afterEach ->
+    CodapConnect.instance.restore()
+
+
+  it "can be added with properties", ->
+    newNode = new Node({title: "a", x:10, y:15}, 'a')
+    @graphStore.addNode newNode
+    nodes = @graphStore.getNodes()
+    nodes.length.should.equal 1
+    node = nodes[0]
+    node.key.should.equal 'a'
+    node.x.should.equal 10
+    node.y.should.equal 15
+
+  it "can have its properties changed", ->
+    newNode = new Node({title: "a", initialValue: 50}, 'a')
+    @graphStore.addNode newNode
+    node = @graphStore.getNodes()[0]
+    node.initialValue.should.equal 50
+    @graphStore.changeNode({initialValue: 20}, node)
+    node.initialValue.should.equal 20
+
+
+  it "can ensure that min, max and initialValue remain sane", ->
+    newNode = new Node({title: "a", min: 0, max: 100, initialValue: 50}, 'a')
+    @graphStore.addNode newNode
+    node = @graphStore.getNodes()[0]
+
+    @graphStore.changeNode({min: 80}, node)
+    node.min.should.equal 80
+    node.max.should.equal 100
+    node.initialValue.should.equal 80
+
+    @graphStore.changeNode({min: 120}, node)
+    node.min.should.equal 120
+    node.max.should.equal 120
+    node.initialValue.should.equal 120
+
+


Create Main.coffee

Create Main.coffee

https://paiza.jp/poh/hatsukoi/share/68686ea8

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

--- POH8/Tareme/Main.coffee
+++ POH8/Tareme/Main.coffee
@@ -0,0 +1,29 @@
+# Try POH
+# author: Leonardone @ NEETSDKASU
+# ===================================================
+
+solve = (mr) ->
+    [s, n] = mr.gis()
+    console.log if s < n then 'NG' else 'OK'
+
+# ===================================================
+(() ->
+    buf = ''
+    process.stdin.resume()
+    process.stdin.setEncoding 'utf8'
+    process.stdin.on 'data', (chunk) -> buf += chunk.toString()
+    process.stdin.on 'end', () ->
+        lines = buf.split '\n'
+        cur = 0
+        gs = -> lines[cur++]
+        gi = -> parseInt gs()
+        gss = -> gs().split ' '
+        gis = -> gss().map (x) -> parseInt x
+        ngt = (n, f) -> f() for _ in [1..n]
+        ngs = (n) -> ngt n, gs
+        ngi = (n) -> ngt n, gi
+        ngss = (n) -> ngt n, gss
+        ngis = (n) -> ngt n, gis
+        solve "gs": gs, "gi": gi, "gss": gss, "gis": gis, "ngs": ngs, "ngi": ngi, "ngss": ngss, "ngis": ngis
+    )()
+# ===================================================


dummy.coffee: Add a temporary dummy.coffee file to oghma so that Rake doesn't blow up.

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


add snapshothelper file

add snapshothelper 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/andrewjcasal/koding.git/'


Moving arrow shortcuts to the userlite-snippets package

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/danseethaler/userlite-utilities.git/'


HLS Segmenter: Fix call against a finalizer that doesn't exist yet

During initial startup, it's possible to try to sync against a segmenter
that hasn't yet set up its finalizer. Guard against that.

--- src/streammachine/rewind/hls_segmenter.coffee
+++ src/streammachine/rewind/hls_segmenter.coffee
@@ -63,7 +63,7 @@
             # Data is being removed from the rewind buffer.  we should
             # clean up our segments as needed

-            @finalizer.expire chunk.ts, (err,seg_id) =>
+            @finalizer?.expire chunk.ts, (err,seg_id) =>
                 if err
                     @log.error "Error expiring audio chunk: #{err}"
                     return false


Add test for simple cors over spdy

Add test for simple cors over spdy

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

--- source/javascripts/tests/simple_cors_spdy.coffee
+++ source/javascripts/tests/simple_cors_spdy.coffee
@@ -0,0 +1,21 @@
+class SimpleCorsSpdyTest
+  constructor: ($http) ->
+    @result = "pending"
+    @display_name = "Simple CORS over SPDY"
+    @$http = $http
+
+  run: ->
+    a = Math.floor((Math.random() * 100000) + 1)
+    b = Math.floor((Math.random() * 100000) + 1)
+    @$http(
+      method: "GET"
+      url: "https://corstest-api.coshx.com:4002/?a=#{a}&b=#{b}"
+    ).success((data, status, headers, config) =>
+      if data.sum == a+b && data.spdy == true
+        @result = "passed"
+      else
+        @result = "failed"
+    ).error (data, status, headers, config) =>
+      @result = "failed"
+
+CorsTest.all_tests.push(SimpleCorsSpdyTest)


Mobile browsers should be able to load /buy-art page

Signed-off-by: Yuki Nishijima <a6aa6c594f3f904825833313c0bab3e292e95764@artsymail.com>

--- desktop/lib/middleware/redirect_mobile.coffee
+++ desktop/lib/middleware/redirect_mobile.coffee
@@ -39,6 +39,7 @@
 router.get '/2016-year-in-art*', isResponsive
 router.get '/article/*', isResponsive
 router.get '/about/*', isResponsive
+router.get '/buy-art', isResponsive
 router.get TEAM_BLOGS, isResponsive
 router.use redirect
 module.exports = router


tests of MainController refactored for using mock factory

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/roseliux/CafeTownsend-Angular-Rails.git/'


removed unneeded table declaration

removed unneeded table declaration

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/fbergin/timeline-stats.git/'


Added Hype

Added Hype

Groupme needed some hype.

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

--- scripts/hype.coffee
+++ scripts/hype.coffee
@@ -0,0 +1,22 @@
+module.exports = (robot) ->
+
+total = 0;
+lastTime = Date.now();
+gettingHyped = "༼ʘ̚ل͜ʘ̚༽ Hype level rising: "
+overHyped = "ヽヽ༼༼ຈຈل͜ل͜ຈຈ༽༽ﾉﾉ TOO MUCH HYPE TO HANDLE! ヽヽ༼༼ຈຈل͜ل͜ຈຈ༽༽ﾉﾉ"
+
+resetHype ->
+    total = total - ((Date.now() - lastTime)%60000)*15
+    lastTime = Date.now()
+    if total < 0
+        total = 0
+
+obot.hear /rekt/i, (res) ->
+
+    resetHype
+    if hype < 100
+        hype += 15
+        res.send "#{gettingHyped} : Hype Level #{total}%"
+    else
+        res.send"#{overHyped}"
+


Remove unused $ variable in Package

Remove unused $ variable in Package

--- src/package.coffee
+++ src/package.coffee
@@ -9,7 +9,6 @@
 Q = require 'q'
 {deprecate} = require 'grim'

-$ = null # Defer require in case this is in the window-less browser process
 ModuleCache = require './module-cache'
 ScopedProperties = require './scoped-properties'


HistoryManager: Added initial version.

HistoryManager: Added initial version.

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

--- src/lib/core/HistoryManager.coffee
+++ src/lib/core/HistoryManager.coffee
@@ -0,0 +1,45 @@
+goog.provide 'spark.core.HistoryManager'
+
+goog.require 'spark.core.Object'
+goog.require 'goog.History'
+goog.require 'goog.history.Html5History'
+
+
+class spark.core.HistoryManager extends spark.core.Object
+
+  ###*
+    HistoryManager class for Spark Framework to handle hashbang or push state
+    navigations. This class uses goog.history.Html5History if supported and
+    fallbacks to goog.History. HistoryManager can be used as standalone but it's
+    more powerful with Router. They will developerd to provide a fully working
+    routing mechanism. You should listen `Navigated` event to use HistoryManager
+    as standalone.
+
+    @constructor
+    @export
+    @param   {Object=} options Class options.
+    @param   {*=} data Class data
+    @extends {spark.core.Object}
+  ###
+  constructor: (options = {}, data) ->
+
+    ###*
+      Add a prefix to all routes. Only available for Html5History.
+    ###
+    options.pathPrefix or= options['pathPrefix'] or ''
+
+    super options, data
+
+    isHtml5HistorySupported = goog.history.Html5History.isSupported()
+
+    if isHtml5HistorySupported
+      @history = new goog.history.Html5History()
+      @history.setPathPrefix  options.pathPrefix
+      @history.setUseFragment no
+    else
+      @history = new goog.History()
+
+    goog.events.listen @history, goog.history.EventType.NAVIGATE, (e) =>
+      @emit 'Navigated', e.token
+
+    @history.setEnabled yes


Test preview wrapper

Test preview wrapper

error: pathspec 'test/components/exercises/preview.spec.coffee' did not match any file(s) known to git

--- test/components/exercises/preview.spec.coffee
+++ test/components/exercises/preview.spec.coffee
@@ -0,0 +1,30 @@
+{Testing, expect, sinon, _, ReactTestUtils} = require '../helpers/component-testing'
+
+ExercisePreviewWrapper = require '../../../src/components/exercises/preview'
+{ExerciseActions, ExerciseStore} = require '../../../src/flux/exercise'
+
+EXERCISES = require '../../../api/exercises'
+
+describe 'Exercise Preview Wrapper Component', ->
+
+
+  beforeEach ->
+    @props =
+      exercise: EXERCISES.items[0]
+      onShowDetailsViewClick: sinon.spy()
+      onExerciseToggle:       sinon.spy()
+      getExerciseIsSelected:  sinon.spy()
+      getExerciseActions:     sinon.stub().returns({})
+      watchStore: ExerciseStore
+      watchEvent: 'testing-'
+
+  it 'renders', ->
+    Testing.renderComponent( ExercisePreviewWrapper, props: @props ).then ({dom}) ->
+      expect( dom ).to.exist
+      expect(dom.textContent).to.include('aims and topics of natural philosophy')
+
+  it 'listens for store updates', ->
+    Testing.renderComponent( ExercisePreviewWrapper, props: @props ).then ({dom}) =>
+      expect(@props.getExerciseActions.callCount).equal(1)
+      ExerciseStore.emit("testing-#{@props.exercise.id}")
+      expect(@props.getExerciseActions.callCount).equal(2)


Make sure to stop any spawned tty sessions on container 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/deviceMP/resin-supervisor.git/'


add request

add request

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

--- src/request.coffee
+++ src/request.coffee
@@ -0,0 +1,8 @@
+{Promise} = require 'es6-promise'
+request = require 'request'
+
+module.exports = (params) ->
+  new Promise (resolve, reject) ->
+    request params, (err, res) ->
+      return reject(err) if err?
+      resolve res


Run ssh close on stream close too

Run ssh close on stream close too

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


Handle errors without body

Handle errors without body

--- server/lib/sharing.coffee
+++ server/lib/sharing.coffee
@@ -35,6 +35,8 @@
 # Params must at least contain:
 #   url     -> the url of the target
 #   hostUrl -> [optionnal] the url of the cozy. Will be get if not set
+
+# A successful request is expected to return a 200 HTTP status
 module.exports.notifyTarget = (path, params, callback) ->
     # Get the domain if not already set
     checkDomain params, (err, params) ->
@@ -49,6 +51,10 @@
                 callback err
             else if body?.error?
                 err = body
+                err.status = result.statusCode
+                callback err
+            else if result?.statusCode isnt 200
+                err = new Error "The request has failed"
                 err.status = result.statusCode
                 callback err
             else


Cosmetic changes; Messages and variables

Changed variable name "succes" to "verified", changed welcome-message and leave-message.

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/C-Bouthoorn/Anthony-Server.git/'


make the tab switching work

make the tab switching work

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


SysAPI core

SysAPI core

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

--- src/sys-api.coffee
+++ src/sys-api.coffee
@@ -0,0 +1,30 @@
+##################################
+#   SYS-API (c) 2015 - Burnett
+##################################
+
+restify = require 'restify'
+
+class SysAPI
+
+    constructor: (options) ->
+
+        @server = new restify.createServer(options);
+
+        @pre()
+
+    connect: (port) ->
+        @server.listen port, () ->
+            console.log('API listening on port %d', port);
+
+    get: (path, handlers...) ->
+      @server.get(path, handlers)
+
+    head: (path, handlers...) ->
+      @server.head(path, handlers)
+
+
+    pre: () ->
+        #console.log('Invoked PRE-SCRIPTS')
+        #return
+
+module.exports = SysAPI


:memo: doc parameters in project.coffee

:memo: doc parameters in project.coffee

--- src/project.coffee
+++ src/project.coffee
@@ -50,14 +50,14 @@
   #
   # An {Editor} will be used if no openers return a value.
   #
-  # ## Example:
+  # ## Example
   # ```coffeescript
   #   atom.project.registerOpener (filePath) ->
   #     if path.extname(filePath) is '.toml'
   #       return new TomlEditor(filePath)
   # ```
   #
-  # * opener: A function to be called when a path is being opened.
+  # opener - A {Function} to be called when a path is being opened.
   registerOpener: (opener) -> @openers.push(opener)

   # Public: Remove a previously registered opener.
@@ -108,8 +108,7 @@
   # the path is already absolute or if it is prefixed with a scheme, it is
   # returned unchanged.
   #
-  # * uri:
-  #   The String name of the path to convert
+  # uri - The {String} name of the path to convert.
   #
   # Returns a String.
   resolve: (uri) ->
@@ -133,10 +132,8 @@
   # Public: Given a path to a file, this constructs and associates a new
   # {Editor}, showing the file.
   #
-  # * filePath:
-  #   The {String} path of the file to associate with
-  # * options:
-  #   Options that you can pass to the {Editor} constructor
+  # filePath - The {String} path of the file to associate with.
+  # options  - Options that you can pass to the {Editor} constructor.
   #
   # Returns a promise that resolves to an {Editor}.
   open: (filePath, options={}) ->
@@ -218,8 +215,8 @@

   # Given a file path, this sets its {TextBuffer}.
   #
-  # absoluteFilePath - A {String} representing a path
-  # text - The {String} text to use as a buffer
+  # absoluteFilePath - A {String} representing a path.
+  # text - The {String} text to use as a buffer.
   #
   # Returns a promise that resolves to the {TextBuffer}.
   buildBuffer: (absoluteFilePath) ->
@@ -252,12 +249,10 @@

   # Public: Performs a search across all the files in the project.
   #
-  # * regex:
-  #   A RegExp to search with
-  # * options:
-  #   - paths: an {Array} of glob patterns to search within
-  # * iterator:
-  #   A Function callback on each file found
+  # regex - A {RegExp} to search with.
+  # options - An optional options {Object} (default: {}):
+  #   :paths - An {Array} of glob patterns to search within
+  # iterator - A {Function} callback on each file found
   scan: (regex, options={}, iterator) ->
     if _.isFunction(options)
       iterator = options
@@ -296,10 +291,11 @@

   # Public: Performs a replace across all the specified files in the project.
   #
-  # * regex: A RegExp to search with
-  # * replacementText: Text to replace all matches of regex with
-  # * filePaths: List of file path strings to run the replace on.
-  # * iterator: A Function callback on each file with replacements. `({filePath, replacements}) ->`
+  # regex - A {RegExp} to search with.
+  # replacementText - Text to replace all matches of regex with
+  # filePaths - List of file path strings to run the replace on.
+  # iterator - A {Function} callback on each file with replacements:
+  #            `({filePath, replacements}) ->`.
   replace: (regex, replacementText, filePaths, iterator) ->
     deferred = Q.defer()


an experimental branch for the ideas from ndarray

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

--- src/array.coffee
+++ src/array.coffee
@@ -0,0 +1,39 @@
+# This is an experimental data structure intended to replace the current
+# representation of APL arrays.
+# Inspired by [ndarray](https://github.com/mikolalysenko/ndarray#readme)
+
+class @APLArray
+
+  constructor: (@data, @shape, @stride, @offset = 0) ->
+    @shape ?= [@data.length]
+    if not @stride
+      @stride = Array @shape.length
+      if @shape.length
+        @stride[@shape.length - 1] = 1
+        for axis in [@shape.length - 2 .. 0] by -1
+          @stride[axis] = @stride[axis + 1] * @shape[axis + 1]
+
+  get: (indices) ->
+    p = @offset
+    for index, axis in indices
+      p += index * @stride[axis]
+    @data[p]
+
+  each: (f) ->
+    p = @offset
+    indices = for axis in @shape then 0
+    loop
+      f @data[p]
+      axis = @shape - 1
+      while axis >= 0 and indices[axis] + 1 is @shape[axis]
+        p -= indices[axis] * @stride[axis]
+        indices[axis] = 0
+      if axis < 0 then break
+      indices[axis]++
+      p += @stride[axis]
+    return
+
+  map: (f) ->
+    data = []
+    @each (x) -> data.push x
+    new APLArray data, @shape


Reduce disk space. Just save user id, tweet id and a reduced date 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/enrmarc/f.git/'


creating subloggers for server request

creating subloggers for server request

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


Adding record manager template WIP

Adding record manager template WIP

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

--- src/components/record_manager.coffee
+++ src/components/record_manager.coffee
@@ -0,0 +1,215 @@
+# The RecordManager is a high level component which incorporates
+# a filterable grid, and an editor form responsible for editing
+# the records in that grid.
+#
+# it provides convenience methods for accesing those components.
+#
+# this represents a clean pattern for having multiple components
+# which work together.  inter-component communication should be handled
+# by parent containers, and not individual components, which should
+# usually not be aware of other components.
+
+# Work in progress
+Luca.components.RecordManager = Luca.containers.CardView.extend
+
+  events:
+    "click .record-manager-grid .edit-link" : "edit_handler"
+    "click .record-manager-filter .filter-button" : "filter_handler"
+    "click .record-manager-filter .reset-button" : "reset_filter_handler"
+    "click .add-button" : "add_handler"
+    "click .refresh-button" : "filter_handler"
+    "click .back-to-search-button" : "back_to_search_handler"
+
+  record_manager: true
+
+  initialize: (@options={})->
+    Luca.containers.CardView.prototype.initialize.apply @, arguments
+
+    throw "Record Managers must specify a name" unless @name
+
+    _.bindAll @, "add_handler", "edit_handler", "filter_handler", "reset_filter_handler"
+
+    _.extend @components[0][0], @filterConfig if @filterConfig
+    _.extend @components[0][1], @gridConfig if @gridConfig
+    _.extend @components[1][0], @editorConfig if @editorConfig
+
+    @bind "after:card:switch", () =>
+      @trigger("activation:search", @) if @activeCard is 0
+      @trigger("activation:editor", @) if @activeCard is 1
+
+  components:[
+    ctype: 'split_view',
+    relayFirstActivation: true
+    components:[
+      ctype: 'form_view'
+    ,
+      ctype: 'grid_view'
+    ]
+  ,
+    ctype: 'form_view'
+  ]
+
+  getSearch: (activate=false, reset=true)->
+    @activate(0) if activate is true
+    @getEditor().clear() if reset is true
+
+    _.first(@components)
+
+  getFilter: ()->
+    _.first @getSearch().components
+
+  getGrid: ()->
+    _.last @getSearch().components
+
+  getCollection: ()->
+    @getGrid().collection
+
+  getEditor: (activate=false,reset=false)->
+    if activate is true
+      @activate 1, (activator,previous,current)=>
+        current.reset()
+
+    _.last(@components)
+
+  beforeRender: ()->
+    $(@el).addClass("#{ @resource }-manager")
+    Luca.containers.CardView.prototype.beforeRender?.apply @, arguments
+
+    $(@el).addClass("#{ @resource } record-manager")
+    $(@el).data('resource', @resource)
+
+    $(@getGrid().el).addClass("#{ @resource } record-manager-grid")
+    $(@getFilter().el).addClass("#{ @resource } record-manager-filter")
+    $(@getEditor().el).addClass("#{ @resource } record-manager-editor")
+
+  # This is an example of a best practice from ExtJS
+  # that we incorporate in Luca, which is that container
+  # components are responsible for component communication.
+  #
+  # child components should not be aware of other components
+  # in the layout.  Their parents should be responsible for
+  # controlling how they interact.  listening to events on one,
+  # changing state, inducing effects in the others
+  afterRender: ()->
+    Luca.containers.CardView.prototype.afterRender?.apply @, arguments
+
+    manager = @
+    grid = @getGrid()
+    filter = @getFilter()
+    editor = @getEditor()
+    collection = @getCollection()
+
+    # when a row is double clicked on the grid
+    # then we edit that row
+    grid.bind "row:double:click", (grid,model,index)->
+      manager.getEditor(true)
+      editor.loadModel( model )
+
+    editor.bind "before:submit", ()=>
+      $('.form-view-flash-container', @el).html('')
+      $('.form-view-body', @el).spin("large")
+
+    editor.bind "after:submit", ()=>
+      $('.form-view-body', @el).spin(false)
+
+    editor.bind "after:submit:fatal_error", ()=>
+      $('.form-view-flash-container', @el ).append "
There was an internal server error saving this record.  Please contact developers@benchprep.com to report this error.
"
+      $('.form-view-body', @el).spin(false)
+
+    editor.bind "after:submit:error", (form, model, response)=>
+      _( response.errors ).each (error)=>
+        $('.form-view-flash-container', @el ).append "
#{ error }
"
+
+    editor.bind "after:submit:success", (form, model, response)=>
+      $('.form-view-flash-container', @el).append "
Successfully Saved Record
"
+
+      model.set( response.result )
+      form.loadModel( model )
+
+      grid.refresh()
+
+      _.delay ()=>
+        $('.form-view-flash-container li.success', @el).fadeOut(1000)
+        $('.form-view-flash-container', @el).html('')
+      , 4000
+
+    filter.eachComponent (component)=>
+      try
+        component.bind "on:change", @filter_handler
+      catch e
+        undefined
+
+  firstActivation: ()->
+    @getGrid().trigger "first:activation", @, @getGrid()
+    @getFilter().trigger "first:activation", @, @getGrid()
+
+  reload: ()->
+    manager = @
+
+    grid = @getGrid()
+    filter = @getFilter()
+    editor = @getEditor()
+
+    # refresh the select fields in the filter
+    filter.clear()
+
+    grid.applyFilter()
+
+  manageRecord: (record_id)->
+    model = @getCollection().get(record_id)
+    return @loadModel(model) if model
+
+    console.log "Could Not Find Model, building and fetching"
+
+    model = @buildModel()
+    model.set({id:record_id},{silent:true})
+
+    model.fetch
+      success: (model,response)=>
+        @loadModel(model)
+
+  loadModel: (@current_model)->
+    @getEditor(true).loadModel( @current_model )
+    @trigger "model:loaded", @current_model
+
+  currentModel: ()->
+    @getEditor(false).currentModel()
+
+  buildModel: ()->
+    editor = @getEditor(false)
+    collection = @getCollection()
+
+    collection.add([{}], silent:true, at: 0)
+
+    model = collection.at(0)
+
+  createModel: ()->
+    @loadModel(@buildModel())
+
+  ##### DOM Event Handlers
+  reset_filter_handler: (e)->
+    @getFilter().clear()
+    @getGrid().applyFilter( @getFilter().getValues() )
+
+  filter_handler: (e)->
+    @getGrid().applyFilter( @getFilter().getValues() )
+
+  edit_handler: (e)->
+    me = my = $( e.currentTarget )
+    record_id = my.parents('tr').data('record-id')
+
+    if record_id
+      model = @getGrid().collection.get( record_id )
+
+    model ||= @getGrid().collection.at( row_index )
+
+
+  add_handler: (e)->
+    me = my = $( e.currentTarget )
+    resource = my.parents('.record-manager').eq(0).data('resource')
+
+  destroy_handler: (e)->
+    #destroy handler
+
+  back_to_search_handler: ()->
+    # search handler


Generate files with https://twitter.com reference

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/surfdome/twitter-cldr-rb.git/'


Improved post targeting

Improved post targeting

- First post link always goes to the top
- Topmost scroll limit is 60px (kind of)

--- resources/assets/coffee/forum.coffee
+++ resources/assets/coffee/forum.coffee
@@ -109,15 +109,19 @@

     return unless post

-    postDim = post.getBoundingClientRect()
-    windowHeight = window.innerHeight
-
-    postTop = window.pageYOffset + postDim.top
-
-    offset = (windowHeight - postDim.height) / 2
-    offset = Math.max(offset, 0)
-
-    window.scrollTo 0, postTop - offset
+    if post.getAttribute('data-post-position') == '1'
+      postTop = 0
+    else
+      postDim = post.getBoundingClientRect()
+      windowHeight = window.innerHeight
+
+      postTop = window.pageYOffset + postDim.top
+
+      offset = (windowHeight - postDim.height) / 2
+      # FIXME: compute height using new header target
+      offset = Math.max(offset, 60)
+
+      window.scrollTo 0, postTop - offset

   postUrlClick: (e) =>


Client: Activity: Added getChannelCreatorProfile 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/andrewjcasal/koding.git/'


Utils: added md5 converter

Utils: added md5 converter


Fixing socket delete error

Fixing socket delete 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/stevelacy/claru.git/'


Admin: Integrations: Create dummy data for selected events.

/cc @canthefason


revive fixes

revive fixes


add paginated collection class for things that use our API

Change-Id: Iad14ff867187160c7b000a59e446c93715e319dd
Reviewed-on: https://gerrit.instructure.com/12166
Tested-by: Jenkins <d95b56ce41a2e1ac4cecdd398defd7414407cc08@instructure.com>
Reviewed-by: Joe Tanner <16a9a54ddf4259952e3c118c763138e83693d7fd@instructure.com>

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

--- app/coffeescripts/collections/PaginatedCollection.coffee
+++ app/coffeescripts/collections/PaginatedCollection.coffee
@@ -0,0 +1,54 @@
+define [
+  'Backbone'
+  'underscore'
+], (Backbone, _) ->
+
+  class PaginatedCollection extends Backbone.Collection
+
+    fetchNextPage: (options={}) ->
+      throw new Error "can't fetch next page when @nextPageUrl is undefined" unless @nextPageUrl?
+      options = _.extend {}, options,
+        add: true
+        url: @nextPageUrl
+
+      @fetchingNextPage = true
+      @trigger 'beforeFetchNextPage'
+      @fetch(options).done =>
+        @fetchingNextPage = false
+        @trigger 'didFetchNextPage', arguments...
+
+    _parsePageLinks: (xhr) ->
+      linkHeader = xhr.getResponseHeader('link').split(',')
+
+      # Matches the name of each link: "next," "prev," "first," or "last."
+      nameRegex = /rel="([a-z]+)/
+
+      # Matches the full link, e.g. "/api/v1/accounts/1/users?page=1&per_page=15"
+      linkRegex = /^<([^>]+)/
+
+      pageRegex = /\Wpage=(\d+)/
+
+      perPageRegex = /\per_page=(\d+)/
+
+      # # Matches only the querystring in the link, e.g. "?page=1&per_page=15"
+      # paramsRegex = /(\?[^>]+)/
+
+      # Reduce the link header into a hash.
+      links = _.reduce linkHeader, (links, link) ->
+        key = link.match(nameRegex)[1]
+        val = link.match(linkRegex)[1]
+        links[key] = val
+        links
+      , {}
+
+      @nextPageUrl = links.next
+      @totalPages = parseInt(links.last?.match(pageRegex)[1], 10)
+      @perPage = parseInt(links.first.match(perPageRegex)[1], 10)
+
+      # useful for dispaying 'nothingToShow' messages
+      @atLeastOnePageFetched = true
+
+
+    parse: (response, xhr) ->
+      @_parsePageLinks(xhr)
+      super


Update Comment

Update Comment

--- src/fairy.coffee
+++ src/fairy.coffee
@@ -111,7 +111,6 @@
   #     queues = fairy.queues()
   #     console.log "#{queues.length} queues: ", queues.map (queue) ->
   #       queue.name
-  #
   queues: (callback) ->
     @redis.smembers @key('QUEUES'), (err, res) =>
       callback res.map (name) => @queue name
@@ -119,7 +118,7 @@
   # ### Get Statistics for All Queues Asynchronously

   # `statistics` is an asynchronous method. The only arg of the callback
-  # function is an array containing statistics of all queues. **Usage:**
+  # function is an array containing statistics of all queues.
   #
   #     fairy.statistics (stats) ->
   #       console.log "Stats of #{stats.length} queues: ", stats


Fix a few ES6 snippets that were still set to ES5

/bin/sh: 1: Syntax error: "(" unexpected


test(scroll): inital tests

test(scroll): inital tests

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

--- test/spec/directives/scroll.coffee
+++ test/spec/directives/scroll.coffee
@@ -0,0 +1,21 @@
+describe 'scrollDirective', ->
+
+  scope   = null
+  element = null
+  events  = null
+
+  beforeEach module 'bp'
+
+  beforeEach inject ($rootScope, $compile) ->
+    scope   = $rootScope.$new()
+    element = $compile('<div bp-scroll></div>') scope
+    scope.$apply()
+    events  = $._data(element.get(0)).events
+
+  describe 'events', ->
+    it 'should bind touchstart', ->
+      expect(events.touchstart?).toBe true
+
+    it 'should unbind touchstart after destroy', ->
+      scope.$destroy()
+      expect(events.touchstart?).toBe false


Removed dependency on underscore

Removed dependency on underscore

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/weiribao/wintersmith-tag.git/'


Remove console.log call

Remove console.log call

Oops

--- src/index.coffee
+++ src/index.coffee
@@ -53,7 +53,6 @@
       else
         do delay => @fail unsupportedBrowserError()
     fail: (error) ->
-      console.log error
       status = if error.isUnsupportedBrowserError then Status.UNSUPPORTED else Status.FAILED
       @setState {status}, => @props.onError? error
     handleLoad: (err, res) ->


Add snippet

Add snippet

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


Add tests for layout mixins.

Add tests for layout mixins.

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

--- stylesheets/__tests__/layout-test.coffee
+++ stylesheets/__tests__/layout-test.coffee
@@ -0,0 +1,82 @@
+jest.autoMockOff()
+
+fs      = require 'fs'
+path    = require 'path'
+sass    = require 'node-sass'
+css     = require 'css'
+
+renderSass = (sass_source) ->
+    output = sass.renderSync
+                data: """
+                    @import "marquee"
+
+                    #{ sass_source }
+                """
+                indentedSyntax: true
+                includePaths: [
+                    path.join(__dirname, '..')
+                ]
+
+    parsed = css.parse(output.css.toString())
+    return parsed
+
+describe 'layout', ->
+    describe 'gutter-all', ->
+        it 'should use padding by default', ->
+            parsed = renderSass """
+                .Foo
+                    +gutter-all
+            """
+
+            parsed.stylesheet.rules[0].declarations.forEach (declaration) ->
+                expect(declaration.property.split('-')[0]).toEqual('padding')
+                expect(declaration.value).toEqual('14px')
+
+            parsed.stylesheet.rules[1...].forEach (mq_rule) ->
+                expect(mq_rule.rules[0].declarations[0].property.split('-')[0]).toEqual('padding')
+                expect(mq_rule.rules[0].declarations[0].value).toEqual('28px')
+
+
+
+        it 'should apply multiplier to default values', ->
+            parsed = renderSass """
+                .Foo
+                    +gutter-all(2)
+            """
+
+            parsed.stylesheet.rules[0].declarations.forEach (declaration) ->
+                expect(declaration.value).toEqual('28px')
+
+            parsed.stylesheet.rules[1...].forEach (mq_rule) ->
+                expect(mq_rule.rules[0].declarations[0].value).toEqual('56px')
+
+
+
+        it 'should support using margin', ->
+            parsed = renderSass """
+                .Foo
+                    +gutter-all($padding: false)
+            """
+
+            parsed.stylesheet.rules[0].declarations.forEach (declaration) ->
+                expect(declaration.property.split('-')[0]).toEqual('margin')
+                expect(declaration.value).toEqual('14px')
+
+            parsed.stylesheet.rules[1...].forEach (mq_rule) ->
+                expect(mq_rule.rules[0].declarations[0].property.split('-')[0]).toEqual('margin')
+                expect(mq_rule.rules[0].declarations[0].value).toEqual('28px')
+
+
+        it 'should accept alternate sizes', ->
+            parsed = renderSass """
+                .Foo
+                    +gutter-all($values: (1em, 2em))
+            """
+
+            parsed.stylesheet.rules[0].declarations.forEach (declaration) ->
+                expect(declaration.property.split('-')[0]).toEqual('padding')
+                expect(declaration.value).toEqual('1em')
+
+            parsed.stylesheet.rules[1...].forEach (mq_rule) ->
+                expect(mq_rule.rules[0].declarations[0].property.split('-')[0]).toEqual('padding')
+                expect(mq_rule.rules[0].declarations[0].value).toEqual('2em')


(fix) do not prepend node for windows sbawn of .exe

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


fix Id to ID param casing

fix Id to ID param casing

--- lib/clientModules/metadata.coffee
+++ lib/clientModules/metadata.coffee
@@ -60,7 +60,7 @@
     throw new Error('Resource type id is required (or for some types of metadata, "0" retrieves for all resource types)')
   options =
     Type: type
-    Id: id
+    ID: id
     Format: format
   retsHttp.callRetsMethod('getMetadata', @retsSession, options)

@@ -112,7 +112,7 @@
         throw new Error('Resource type id is required (or for some types of metadata, "0" retrieves for all resource types)')
       options =
         Type: type
-        Id: if classType then "#{id}:#{classType}" else id
+        ID: if classType then "#{id}:#{classType}" else id
         Format: format
       _getMetadataImpl(_retsSession, type, options)


Only focus editor when no confirming

Only focus editor when no confirming

--- src/packages/autocomplete/src/autocomplete.coffee
+++ src/packages/autocomplete/src/autocomplete.coffee
@@ -96,7 +96,7 @@
     else
       @editor.appendToLinesView(this)
       @setPosition()
-    @miniEditor.focus()
+      @miniEditor.focus()

   detach: ->
     super


bug fix

bug fix


exports fixes

exports fixes

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