Do not pass doc as emit param

Do not pass doc as emit param

Conflicts:
	server/lib/request.coffee

--- server/lib/request.coffee
+++ server/lib/request.coffee
@@ -5,15 +5,7 @@
     date: true
     prefix: 'lib/request'

-# Define random function for application's token
-randomString = (length) ->
-    string = ""
-    while (string.length < length)
-        string = string + Math.random().toString(36).substr(2)
-    return string.substr 0, length
-
-productionOrTest = process.env.NODE_ENV is "production" or
-    process.env.NODE_ENV is "test"
+productionOrTest = process.env.NODE_ENV in ['production', 'test']

 ## function create (app, req, views, newView, callback)
 ## @app {String} application name
@@ -23,8 +15,8 @@
 ## @callback {function} Continuation to pass control back to when complete.
 ## Store new view with name <app>-request name in case of conflict
 ## Callback view name (req.req_name or name-req.req_name)
-module.exports.create = (app, req, views, newView, callback) =>
-    storeRam = (path) =>
+module.exports.create = (app, req, views, newView, callback) ->
+    storeRam = (path) ->
         request[app] ?= {}
         request[app]["#{req.type}/#{req.req_name}"] = path
         callback null, path
@@ -56,7 +48,7 @@
 ## @req {Object} contains type and request name
 ## @callback {function} Continuation to pass control back to when complete.
 ## Callback correct request name
-module.exports.get = (app, req, callback) =>
+module.exports.get = (app, req, callback) ->
     if productionOrTest and request[app]?["#{req.type}/#{req.req_name}"]?
         callback request[app]["#{req.type}/#{req.req_name}"]
     else
@@ -68,15 +60,15 @@
 ## function recoverApp (callback)
 ## @callback {function} Continuation to pass control back to when complete.
 ## Callback all application names from database
-recoverApp = (callback) =>
+recoverApp = (callback) ->
     apps = []
-    db.view 'application/all', (err, res) =>
+    db.view 'application/all', (err, res) ->
         if err
             callback err
         else if not res
             callback null, []
         else
-            res.forEach (app) =>
+            res.forEach (app) ->
                 apps.push app.name
             callback null, apps

@@ -85,10 +77,10 @@
 ## @docs {tab} design docs with view
 ## @callback {function} Continuation to pass control back to when complete.
 ## Callback all design documents from database
-recoverDocs = (res, docs, callback) =>
+recoverDocs = (res, docs, callback) ->
     if res and res.length isnt 0
         doc = res.pop()
-        db.get doc.id, (err, result) =>
+        db.get doc.id, (err, result) ->
             docs.push(result)
             recoverDocs res, docs, callback
     else
@@ -97,25 +89,25 @@
 ## function recoverDocs (callback)
 ## @callback {function} Continuation to pass control back to when complete.
 ## Callback all design documents from database
-recoverDesignDocs = (callback) =>
+recoverDesignDocs = (callback) ->
     filterRange =
         startkey: "_design/"
         endkey: "_design0"
-    db.all filterRange, (err, res) =>
+    db.all filterRange, (err, res) ->
         return callback err if err?
         recoverDocs res, [], callback

-# Data system uses some views, this function initialize it.
+# Data system uses some views, this function initializes them.
 initializeDSView = (callback) ->
     views =
-        # Usefull for function 'doctypes' (controller/request. Databrowser)
+        # Useful for function 'doctypes' (controller/request. Databrowser)
         doctypes:
             all:
                 map: """
                 function(doc) {
                     if(doc.docType) {
-                        return emit(doc.docType, null);
+                        return emit(doc.docType.toLowerCase(), null);
                     }
                 }
                 """
@@ -125,7 +117,7 @@
                     return true;
                 }
                 """
-        # Usefull to manage device access
+        # Useful to manage device access
         device:
             all:
                 map: """
@@ -143,12 +135,13 @@
                     }
                 }
                 """
-        # Usefull to manage application access
+        # Useful to manage application access
         application:
             all:
                 map: """
                 function(doc) {
-                    if(doc.docType && doc.docType.toLowerCase() === "application") {
+                    if(doc.docType &&
+                            doc.docType.toLowerCase() === "application") {
                         return emit(doc._id, doc);
                     }
                 }
@@ -157,13 +150,14 @@
             byslug:
                 map: """
                 function(doc) {
-                    if(doc.docType && doc.docType.toLowerCase() === "application") {
+                    if(doc.docType &&
+                            doc.docType.toLowerCase() === "application") {
                         return emit(doc.slug, doc);
                     }
                 }
                 """

-        # Usefull to manage application access
+        # Useful to manage application access
         withoutDocType:
             all:
                 map: """
@@ -174,7 +168,7 @@
                 }
                 """

-        # Usefull to manage access
+        # Useful to manage access
         access:
             all:
                 map: """
@@ -193,7 +187,7 @@
                 }
                 """

-        # Usefull to remove binary lost
+        # Useful to remove binary lost
         binary:
             all:
                 map: """
@@ -213,27 +207,29 @@
                     }
                 }
                 """
-        # Usefull for thumbs creation
+        # Useful for thumbs creation
         file:
             withoutThumb:
                 map: """
                 function(doc) {
                     if(doc.docType && doc.docType.toLowerCase() === "file") {
-                        if(doc.class === "image" && doc.binary && doc.binary.file && !doc.binary.thumb) {
+                        if(doc.class === "image" && doc.binary &&
+                                doc.binary.file && !doc.binary.thumb) {
                             emit(doc._id, null);
                         }
                     }
                 }
                 """
-        # Usefull for API tags
+        # Useful for API tags
         tags:
             all:
                 map: """
                 function (doc) {
-                var _ref;
-                return (_ref = doc.tags) != null ? typeof _ref.forEach === "function" ? _ref.forEach(function(tag) {
-                   return emit(tag, null);
-                    }) : void 0 : void 0;
+                    var _ref = doc.tags;
+                    return _ref != null ? typeof _ref.forEach === "function" ?
+                        _ref.forEach(function(tag) {
+                            return emit(tag, null);
+                        }) : void 0 : void 0;
                 }
                 """
                 # use to make a "distinct"
@@ -242,6 +238,29 @@
                     return true;
                 }
                 """
+
+        # Useful to manage sharing
+        sharing:
+            all:
+                map: """
+                function(doc) {
+                    if(doc.docType && doc.docType.toLowerCase() === "sharing") {
+                        return emit(doc._id, null);
+                    }
+                }
+                """
+
+        indexdefinition:
+            all:
+                map: """
+                function(doc) {
+                    if(doc.docType &&
+                       doc.docType.toLowerCase() === "indexdefinition") {
+                        emit(doc._id, null)
+                    }
+                }
+                """
+
     async.forEach Object.keys(views), (docType, cb) ->
         view = views[docType]
         db.get "_design/#{docType}", (err, doc) ->
@@ -260,9 +279,9 @@
 ## function init (callback)
 ## @callback {function} Continuation to pass control back to when complete.
 ## Initialize request
-module.exports.init = (callback) =>
+module.exports.init = (callback) ->
     removeEmptyView = (doc, callback) ->
-        if Object.keys(doc.views).length is 0 or not doc?.views?
+        if not doc?.views? or Object.keys(doc.views).length is 0
             db.remove doc._id, doc._rev, (err, response) ->
                 if err
                     log.error "[Definition] err: " + err.message
@@ -302,19 +321,24 @@
     initializeDSView ->
         if productionOrTest
             # Recover all applications in database
-            recoverApp (err, apps) =>
+            recoverApp (err, apps) ->
                 return callback err if err?
                 # Recover all design docs in database
-                recoverDesignDocs (err, docs) =>
+                recoverDesignDocs (err, docs) ->
                     return callback err if err?
                     async.forEach docs, (doc, cb) ->
-                        async.forEach Object.keys(doc.views), (view, cb) ->
-                            body = doc.views[view]
-                            storeAppView apps, doc, view, body, cb
-                        , (err) ->
-                            removeEmptyView doc, (err) ->
-                                log.error err if err?
-                                cb()
+                        if not doc?.views?
+                            log.warn "Document has no view"
+                            log.warn doc
+                            cb()
+                        else
+                            async.forEach Object.keys(doc.views), (view, cb) ->
+                                body = doc.views[view]
+                                storeAppView apps, doc, view, body, cb
+                            , (err) ->
+                                removeEmptyView doc, (err) ->
+                                    log.error err if err?
+                                    cb()
                     , (err) ->
                         log.error err if err?
                         callback()


MailChimp tweak.

MailChimp tweak.

--- server/models/User.coffee
+++ server/models/User.coffee
@@ -45,6 +45,7 @@
   params.email = if existingProps then {leid:existingProps.leid} else {email:doc.get('email')}
   params.merge_vars = { groupings: [ {id: MAILCHIMP_GROUP_ID, groups: newGroups} ] }
   params.update_existing = true
+  params.double_optin = false

   onSuccess = (data) ->
     doc.set('mailChimp', data)


add file model to provide helpers for konnectors that save files

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

--- server/models/file.coffee
+++ server/models/file.coffee
@@ -0,0 +1,67 @@
+fs = require 'fs'
+americano = require 'americano-cozy'
+request = require 'request'
+moment = require 'moment'
+
+# Required to save file fetched via a konnector.
+module.exports = File = americano.getModel 'File',
+    path: String
+    name: String
+    creationDate: String
+    lastModification: String
+    class: String
+    size: Number
+    binary: Object
+    modificationHistory: Object
+    clearance: (x) -> x
+    tags: (x) -> x
+
+File.createNew = (fileName, path, date, url, callback) ->
+    now = moment().toISOString()
+    filePath = "/tmp/#{fileName}"
+
+    data =
+        name: fileName
+        path: path
+        creationDate: now
+        lastModification: now
+        tags: ["facture"]
+        class: 'document'
+
+    # Index file to DS indexer.
+    index = (newFile) ->
+        newFile.index ["name"], (err) ->
+            log.error err if err
+            callback()
+
+    # Attach binary to newly created file.
+    attachBinary = (newFile) ->
+        newFile.attachBinary filePath, "name": "file", (err) ->
+            if err
+                log.error err
+                callback err
+            else
+                index newFile
+
+    # Save file in a tmp folder while attachBinary supports stream.
+    options =
+        uri: url
+        method: 'GET'
+        jar: true
+
+    stream = request options, (err) ->
+        if err
+            log.error err
+            callback err
+        else
+            # Once done create file metadata then attach binary to file.
+            stats = fs.statSync filePath
+            data.size = stats["size"]
+            File.create data, (err, newFile) =>
+                if err
+                    log.error err
+                    callback err
+                else
+                    attachBinary newFile
+
+    stream.pipe fs.createWriteStream filePath


Return flat list of all possible testset selections

Going to change filtering to non-restrictive - previous filtering
allowed selecting a release and a product, and test sets were displayed
by those selections. Now going to make all keys (release, profile,
testset, product) as separate filters and the possible test sets are
listed based on these ('Any' will be a supported value for each of the
fields)

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


fix(settings): use `localStorage` as the local persistence layer

--- src/settings.coffee
+++ src/settings.coffee
@@ -16,14 +16,14 @@

   fetchLocal: ->
     new Promise ( resolve ) ->
-      chrome.storage.local.get "settings", ({ settings = {}}) ->
-        cache = settings
-        resolve()
+      cache = JSON.parse ( window.localStorage[ "vkx-settings" ] ? "{}" )
+      resolve cache

   saveLocal: ->
     new Promise ( resolve ) ->
-      chrome.storage.local.set "settings": cache, resolve
+      window.localStorage[ "vkx-settings" ] = JSON.stringify cache
+      resolve cache

   fetchRemote: ->


Smooth scroll; tidy up.

Smooth scroll; tidy up.

--- content_scripts/scroller.coffee
+++ content_scripts/scroller.coffee
@@ -30,16 +30,19 @@
     amount

 # Test whether element should be scrolled.
-isScrollAllowed = (element, direction) ->
+shouldScroll = (element, direction) ->
   computedStyle = window.getComputedStyle(element)
   # Elements with `overflow: hidden` should not be scrolled.
-  return computedStyle.getPropertyValue("overflow-#{direction}") != "hidden" and
-         ["hidden", "collapse"].indexOf(computedStyle.getPropertyValue("visibility")) == -1 and
-         computedStyle.getPropertyValue("display") != "none"
+  return false if computedStyle.getPropertyValue("overflow-#{direction}") == "hidden"
+  # Non-visible elements should not be scrolled.
+  return false if ["hidden", "collapse"].indexOf(computedStyle.getPropertyValue("visibility")) != -1
+  return false if computedStyle.getPropertyValue("display") == "none"
+  true

-# Test whether element actually scrolls in the direction required when asked to do so.
-# Due to chrome bug 110149, scrollHeight and clientHeight cannot be used to reliably determine whether an
-# element will scroll.  Instead, we scroll the element by 1 or -1 and see if it moved.
+# Test whether element actually scrolls in the direction required when asked to do so.  Due to chrome bug
+# 110149, scrollHeight and clientHeight cannot be used to reliably determine whether an element will scroll.
+# Instead, we scroll the element by 1 or -1 and see if it moved (then put it back).
+# Bug verified in Chrome 38.0.2125.104.
 isScrollPossible = (element, direction, amount, factor) ->
   axisName = scrollProperties[direction].axisName
   # delta, here, is treated as a relative amount, which is correct for relative scrolls. For absolute scrolls
@@ -55,10 +58,10 @@
   before != after

 # Find the element we should and can scroll.
-findScrollableElement = (element = document.body, direction, amount, factor = 1) ->
+findScrollableElement = (element, direction, amount, factor = 1) ->
   axisName = scrollProperties[direction].axisName
   while element != document.body and
-    not (isScrollPossible(element, direction, amount, factor) and isScrollAllowed(element, direction))
+    not (isScrollPossible(element, direction, amount, factor) and shouldScroll(element, direction))
       element = element.parentElement || document.body
   element

@@ -87,7 +90,7 @@

 # Scroll by a relative amount (a number) in some direction, possibly smoothly.
 doScrollBy = do ->
-  time = 0
+  time = 0 # Logical time.
   mostRecentActivationId = -1
   lastEvent = null
   keyHandler = null


Create user_tabs.js.coffee

Create user_tabs.js.coffee

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

--- app/assets/javascripts/user_tabs.js.coffee
+++ app/assets/javascripts/user_tabs.js.coffee
@@ -0,0 +1,58 @@
+class @UserTabs
+  actions: ['activity', 'groups', 'contributed', 'personal'],
+  defaultAction: 'activity',
+
+  constructor: ->
+    # Store the `location` object, allowing for easier stubbing in tests
+    @_location = location
+
+    @bindEvents()
+
+  bindEvents: ->
+    $(document).on 'shown.bs.tab', '.nav-links a[data-toggle="tab"]', @tabShown
+
+  tabShown: (event) =>
+    $target = $(event.target)
+    action = $target.data('action')
+    source = $target.attr('href')
+
+    @loadTab(source, action)
+    @setCurrentAction(action)
+
+  loadTab: (source, action) ->
+    @_get
+      url: "#{source}.json"
+      success: (data) =>
+        tabSelector = 'div#' + action
+        document.querySelector(tabSelector).innerHTML = data.html
+
+  toggleLoading: (status) ->
+    $('.loading-status .loading').toggle(status)
+
+  _get: (options) ->
+    defaults = {
+      beforeSend: => @toggleLoading(true)
+      complete:   => @toggleLoading(false)
+      dataType: 'json'
+      type: 'GET'
+    }
+
+    options = $.extend({}, defaults, options)
+
+    $.ajax(options)
+
+  setCurrentAction: (action) ->
+    # Remove possible actions from URL
+    regExp = new RegExp('\/(' + @actions.join('|') + ')(\.html)?\/?$')
+    new_state = @_location.pathname.replace(regExp, '')
+
+    # Append the new action if we're on a tab other than 'activity'
+    unless action == @defaultAction
+      new_state += "/#{action}"
+
+    # Ensure parameters and hash come along for the ride
+    new_state += @_location.search + @_location.hash
+
+    history.replaceState {turbolinks: true, url: new_state}, document.title, new_state
+
+    new_state


remove view helper

remove view helper

--- apps/artist/view_helpers.coffee
+++ apps/artist/view_helpers.coffee
@@ -6,13 +6,6 @@

 module.exports =
   capitalize: capitalize
-
-  pageTitle: (artist) ->
-    artist = new Artist
-      id: artist.id
-      name: artist.name
-      published_artworks_count: artist.counts.artworks
-    artist.toPageTitle()

   pageDescription: (artist, limit) ->
     artist = new Artist _.pick artist, 'id', 'name', 'gender', 'blurb'


chore (Test) Add whitespace

chore (Test) Add whitespace

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/ag-module-router.git/'


coffeeification

coffeeification

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


fix gruntfile for testSpecApp by copying over the one from testApp

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


Format

Format

--- src/katon.coffee
+++ src/katon.coffee
@@ -4,7 +4,7 @@
 eco   = require 'eco'

 logan.set
-  info: ['\n%\n', 'green']
+  info: ['\n  %\n', 'green']

 # This module is the katon CLI.
 # It just creates/removes files, symlinks, etc...


new plugin chat log

new plugin chat log

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

--- plugins/chatlog.coffee
+++ plugins/chatlog.coffee
@@ -0,0 +1,10 @@
+###
+  default behavior: log chat logs to file
+  @command top (count) (chat-lines): show group's chat ranks in (count) depends on recently (chat-lines) history.
+  need configs:
+  -
+###
+
+module.exports = (content ,send, robot, message)->
+  "nothing"
+


Fix getIfLeader

Fix getIfLeader

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


Remove objectid from array instead of using result


add time type

add time 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/MicrosmartSA/ubiquity-ui.git/'


Reset user model on deactivate

Reset user model on deactivate

[#97185164]

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


A twitter client.

A twitter client.

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

--- lib/twitter.coffee
+++ lib/twitter.coffee
@@ -0,0 +1,11 @@
+Twitter = require 'twitter'
+
+client = new Twitter
+  consumer_key: process.env.HUBOT_TWITTER_CONSUMER_KEY,
+  consumer_secret: process.env.HUBOT_TWITTER_CONSUMER_SECRET,
+  access_token_key: process.env.HUBOT_TWITTER_ACCESS_TOKEN_KEY,
+  access_token_secret: process.env.HUBOT_TWITTER_ACCESS_TOKEN_SECRET,
+
+# I give you, a pre-configured twitter client,
+# So you don't have to.
+module.exports = client


Add you too!

Add you too!

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

--- ui/app/actions/notice.coffee
+++ ui/app/actions/notice.coffee
@@ -0,0 +1,6 @@
+store = require('../modules/store')
+
+module.exports = store.add({
+    markNotice: (id) ->
+        # TODO@
+})


javascript

javascript

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/Bit-Bahia/bitbahia-rails.git/'


Missing file from last commit

Missing file from last commit

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

--- auth.coffee
+++ auth.coffee
@@ -0,0 +1,58 @@
+crypto = require 'crypto'
+
+
+exports.parseAuthHeader = (authHeader) ->
+  res = {}
+  i = authHeader.indexOf(' ')
+  res['method'] = authHeader.slice(0, i)
+  options = authHeader.slice(i + 1).split(/\s*,\s*/)
+
+  for o in options
+    v = o.split('=')
+    res[v[0]] = v[1].slice(1, -1)
+  return res
+
+
+exports.basic = (username, password) ->
+  "Basic #{new Buffer('Aladdin:open sesame').toString('base64')}"
+
+
+exports.digest = (username, password, uri, httpMethod, body, authHeader) ->
+  cnonce = '0a4f113b'
+  nc = '00000001'
+
+  if authHeader.qop?
+    if authHeader.qop.indexOf(',') != -1
+      qop = 'auth' # either auth or auth-int. prefer auth
+    else
+      qop = authHeader.qop
+
+  ha1 = crypto.createHash('md5')
+  ha1.update(username).update(':').update(authHeader.realm).update(':').update(password)
+  # TODO support "MD5-sess" algorithm directive
+  ha1 = ha1.digest('hex')
+
+  ha2 = crypto.createHash('md5')
+  ha2.update(httpMethod).update(':').update(uri)
+  if qop == 'auth-int'
+    ha2.update(':').update(body)
+  ha2 = ha2.digest('hex')
+
+  response = crypto.createHash('md5')
+  response.update(ha1).update(':').update(authHeader.nonce)
+
+  if authHeader.qop?
+    response.update(':').update(nc).update(':').update(cnonce).update(':').update(authHeader.qop)
+  response.update(':').update(ha2)
+  response = response.digest('hex')
+
+  authString = "Digest username=\"#{username}\""
+  authString += ",realm=\"#{authHeader.realm}\""
+  authString += ",nonce=\"#{authHeader.nonce}\""
+  authString += ",uri=\"#{uri}\""
+  authString += ",qop=\"#{qop}\""
+  authString += ",nc=\"#{nc}\""
+  authString += ",cnonce=\"#{cnonce}\""
+  authString += ",response=\"#{response}\""
+  authString += ",opaque=\"#{authHeader.opaque}\""
+  return authString


dutch translation dutch translation

dutch translation
dutch translation

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

--- app/assets/javascripts/uploadcare/locale/nl.js.coffee
+++ app/assets/javascripts/uploadcare/locale/nl.js.coffee
@@ -0,0 +1,110 @@
+# Note: English locale is the default and used as a fallback.
+uploadcare.namespace 'uploadcare.locale.translations', (ns) ->
+  ns.nl =
+    uploading: 'Uploaden... Even geduld.'
+    loadingInfo: 'Laden informatie...'
+    errors:
+      default: 'Fout'
+      baddata: 'Ongeldige waarde'
+      size: 'Bestand is te groot'
+      upload: 'Kan niet uploaden'
+      user: 'Upload geannulleerd'
+      info: 'Kan informatie niet laden'
+      image: 'Alleen afbeeldingen toegestaan'
+      createGroup: 'Kan bestandsgroep niet maken'
+      deleted: 'Bestand is verwijderd'
+    draghere: 'Drop hier een bestand'
+    file:
+      one: '%1 bestand'
+      other: '%1 bestanden'
+    buttons:
+      cancel: 'Annuleren'
+      remove: 'Verwijderen'
+      choose:
+        files:
+          one: 'Kies een bestand'
+          other: 'Kies bestanden'
+        images:
+          one: 'Kies een afbeelding'
+          other: 'Kies afbeeldingen'
+    dialog:
+      done: 'Klaar'
+      showFiles: 'Toon bestanden'
+      tabs:
+        names:
+          preview: 'Voorvertoning'
+          file: 'Computer'
+          facebook: 'Facebook'
+          dropbox: 'Dropbox'
+          gdrive: 'Google Drive'
+          instagram: 'Instagram'
+          vk: 'VK'
+          evernote: 'Evernote'
+          box: 'Box'
+          skydrive: 'SkyDrive'
+          url: 'Directe links'
+        file:
+          drag: 'Drop een bestand hier'
+          nodrop: 'Upload bestanden van je computer'
+          or: 'of'
+          button: 'Selecteer een bestand van je computer'
+          also: 'Je kan ook selecteren van'
+        url:
+          title: 'Bestanden van het web'
+          line1: 'Selecteer een bestand van het web.'
+          line2: 'Voer de link in.'
+          input: 'Plak de link hier...'
+          button: 'Upload'
+        preview:
+          unknownName: 'onbekend'
+          change: 'Annuleren'
+          back: 'Terug'
+          done: 'Toevoegen'
+          unknown:
+            title: 'Uploaden... Wacht op de voorvertoning.'
+            done: 'Voorvertoning overslaan an accepteren'
+          regular:
+            title: 'Dit bestand toevoegen?'
+            line1: 'Je staat op het punt bovenstaand bestand toe te voegen.'
+            line2: 'Bevestig.'
+          image:
+            title: 'Voeg deze afbeelding toe?'
+            change: 'Annuleren'
+          crop:
+            title: 'Afbeelding bijknippen en toevoegen'
+            done: 'Klaar'
+          error:
+            default:
+              title: 'Oeps!'
+              text: 'Er is een fout opgetreden tijdens het uploaden.'
+              back: 'Probeer het nog eens'
+            image:
+              title: 'Alleen afbeeldingen worden geaccepteerd.'
+              text: 'Probeer het nog eens met een andere bestand.'
+              back: 'Selecteer afbeelding'
+            size:
+              title: 'Het geselecteerd bestand is groter dan de limiet.'
+              text: 'Probeer het nog eens met een andere bestand.'
+          multiple:
+            title: 'U heeft de volgende bestanden geselecteerd %files%'
+            question: 'Wilt u al deze bestanden toevoegen?'
+            tooManyFiles: 'U heeft teveel bestanden geselecteerd. %max% is het maximum.'
+            tooFewFiles: 'U heeft de volgende bestanden geselecteerd %files%. Minimaal %min% is verplicht.'
+            clear: 'Verwijder alle bestanden'
+            done: 'Klaar'
+      footer:
+        text: 'Uploaden, opslaan en verwerken bestanden door'
+        link: 'Uploadcare.com'
+    crop:
+      error:
+        title: 'Fout'
+        text: 'Kan afbeelding niet laden'
+      done: 'Klaar'
+
+
+# Pluralization rules taken from:
+# http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html
+uploadcare.namespace 'uploadcare.locale.pluralize', (ns) ->
+  ns.en = (n) ->
+    return 'one' if n == 1
+    'other'


remove alternate add method

remove alternate add 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/UM-USElab/gradecraft-development.git/'


Adds a title to the file preview iframe

Adds a title to the file preview iframe

This allows it to work better for screenreaders.  According to
acannon, this is practically the only place (frames and iframes)
where titles work for this.

fixes CNVS-18563

Test Plan:
  - Go to New Files
  - Use a screenreader to preview a file
  - The iframe with the preview in it should be read as "File
    Preview"

Change-Id: I9fc53e47a8c6a7edb33c62bbe2d8a93a88102ea8
Reviewed-on: https://gerrit.instructure.com/48887
Tested-by: Jenkins
Reviewed-by: Dan Minkevitch <2591e5f46f28d303f9dc027d475a5c60d8dea17a@instructure.com>
QA-Review: Jahnavi Yetukuri <ed2b2672ccc2e59e56c0615df7f01b579202e014@instructure.com>
Product-Review: Clay Diffrient <9dff2e5c98626d20d2848250c411e8009465bb87@instructure.com>

--- app/coffeescripts/react_files/components/FilePreview.coffee
+++ app/coffeescripts/react_files/components/FilePreview.coffee
@@ -190,6 +190,7 @@
             @renderArrowLink('left') if @state.otherItems?.length > 0
             if @state.displayedItem
               iframe {
+                title: I18n.t('File Preview')
                 src: @state.displayedItem.get 'preview_url'
                 className: 'ef-file-preview-frame'
               }


add  server listening for specified  ip

add  server listening for specified  ip

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/iliyat/express-boilerplate.git/'


proper logic

proper logic

--- apps/articles/client/show.coffee
+++ apps/articles/client/show.coffee
@@ -73,7 +73,7 @@
        @user?.id is @article.get('author_id')) or
        @user?.isEditorialAdmin()
       editUrl = "#{sd.POSITRON_URL}/articles/" + @article.id + '/edit'
-      message = if @article.get('published') is true then "Draft" else message
+      message = if @article.get('published') then '' else "Draft"
       @renderedEditButton = true
       @$('#articles-body-container').append(
         editTemplate message: message, edit_url: editUrl


remove debugging

remove debugging

--- client/views/signUp/signUp.coffee
+++ client/views/signUp/signUp.coffee
@@ -19,7 +19,6 @@

   showUsername: ->
     fields = AccountsEntry.settings.passwordSignupFields
-    console.log("Show Username", fields)

     _.contains([
       'USERNAME_AND_EMAIL',


even better single value display

even better single value display

--- query_runner.coffee
+++ query_runner.coffee
@@ -153,6 +153,11 @@
       else
         @reply("#{query.share_url}\nNo results.")

+    else if query.vis_config?.type == "single_value"
+      field = measure_like[0] || dimension_like[0]
+      share = if @showShareUrl() then "\n#{query.share_url}" else ""
+      text = "*#{result.data[0][field.name].rendered}*#{share}"
+      @reply(text)
     else if result.data.length == 1
       attachment = _.extend({}, options, {
         fields: renderableFields.map((m) ->


Fix build

Fix build

--- src/instrumentors/Istanbul.coffee
+++ src/instrumentors/Istanbul.coffee
@@ -133,7 +133,6 @@

         @_prefix = "#{@coverageVar}[#{@quotedFileName}]"

-    ### !pragma coverage-skip ###
     _warn: (message, options={}) ->
         str = message
         str += "\n    file:  #{@fileName}"
@@ -237,8 +236,8 @@
             # start.column is the start of the condition, but we want the start of the
             # `when`.
             ### !pragma coverage-skip-else ###
-            start.column = if (startColumn = @sourceLines[start.line-1]?.indexOf('when')) > -1
-                startColumn
+            if (startColumn = @sourceLines[start.line-1]?.indexOf('when')) > -1
+                start.column = startColumn
             else
                 @_warn "Couldn't find 'when'", {node, line: start.line}
                 # Intelligent guess


fittext for header h1

fittext for header h1

--- docs/source/javascripts/application.js.coffee
+++ docs/source/javascripts/application.js.coffee
@@ -1,3 +1,8 @@
 #= require "vendor/jquery-1.7.1.min"

-#= require "vendor/plugins/jquery.fittext.js"+#= require "vendor/plugins/jquery.fittext.js"
+
+
+  $ ->
+
+    $("header.lead h1").fitText(0.8);


frontend/todo: add main view - AppView

frontend/todo: add main view - AppView

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

--- frontend/todo/AppView.coffee
+++ frontend/todo/AppView.coffee
@@ -0,0 +1,86 @@
+window.jj ?= {}
+
+window.jj.AppView = class AppView extends Backbone.View
+    template: _.template jj.jst["todo/jst/app.jst"]
+    statsTemplate: _.template jj.jst["todo/jst/stats.jst"]
+    events:
+        'keypress #new-todo': 'createOnEnter'
+        'click #clear-completed': 'clearCompleted'
+        'click #toggle-all': 'toggleAllComplete'
+    initialize: ->
+        @buildElement()
+        @allCheckbox = @$('#toggle-all')[0]
+        @$input = @$('#new-todo')
+        @$footer = @$('#footer')
+        @$main = @$('#main')
+
+        @listenTo @collection, 'add', @addOne
+        @listenTo @collection, 'reset', @addAll
+        @listenTo @collection, 'change:completed', @filterOne
+        @listenTo @collection, 'all', @render
+
+        @initRouter()
+
+        @collection.fetch()
+
+    initRouter : ->
+        @router = new jj.Router()
+        @listenTo @router, 'route:filterSet', @updateFilter
+
+    buildElement: ->
+        @.$el.html @template()
+    render: ->
+        completed = @collection.completed().length
+        remaining = @collection.remaining().length
+        if @collection.length
+            @$main.show()
+            @$footer.show()
+            @$footer.html @statsTemplate({
+                completed: completed
+                remaining: remaining
+            })
+            @$('#filters li a').removeClass('selected').filter('[href="#/' + ( jj.app?.TodoFilter or '' ) + '"]').addClass('selected')
+        else
+            @$main.hide()
+            @$footer.hide()
+        @allCheckbox.checked = !remaining
+
+    updateFilter : (param) ->
+        jj.app.TodoFilter = param.trim() or ''
+        @filterAll()
+
+    addOne: (todo) ->
+        view = new jj.TodoView({ model: todo })
+        $('#todo-list').append view.render().el
+
+    addAll: ->
+        @$('#todo-list').html('')
+        @collection.each(@addOne, @)
+
+    filterOne: (todo) ->
+        todo.trigger 'visible'
+
+    filterAll: ->
+        @collection.each @filterOne, @
+
+    newAttributes: ->
+        return {
+            title: @.$input.val().trim()
+            order: @collection.nextOrder()
+            completed: false
+        }
+
+    createOnEnter: (e) ->
+        if (e.which isnt jj.ENTER_KEY) or (!@.$input.val().trim() )
+            return
+        @collection.create @newAttributes()
+        @.$input.val('')
+
+    clearCompleted: ->
+        _.invoke @collection.completed(), 'destroy'
+        return false
+
+    toggleAllComplete: ->
+        completed = @allCheckbox.checked
+        @collection.each (todo) ->
+            todo.save {	'completed': completed }


update

update

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


Add application:install-update to workspaceView

--- src/workspace-view.coffee
+++ src/workspace-view.coffee
@@ -113,6 +113,7 @@
     @command 'application:quit', -> ipc.send('command', 'application:quit')
     @command 'application:hide', -> ipc.send('command', 'application:hide')
     @command 'application:hide-other-applications', -> ipc.send('command', 'application:hide-other-applications')
+    @command 'application:install-update', -> ipc.send('command', 'application:install-update')
     @command 'application:unhide-all-applications', -> ipc.send('command', 'application:unhide-all-applications')
     @command 'application:new-window', -> ipc.send('command', 'application:new-window')
     @command 'application:new-file', -> ipc.send('command', 'application:new-file')


Mark empty param lists as errors

Mark empty param lists as errors

--- Gruntfile.coffee
+++ Gruntfile.coffee
@@ -106,6 +106,8 @@

     coffeelint:
       options:
+        no_empty_param_list:
+          level: 'error'
         max_line_length:
           level: 'ignore'


Fix missing accordions

Fix missing accordions

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


Add test for #3

Add test for #3

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

--- spec/fixtures/issue3.coffee
+++ spec/fixtures/issue3.coffee
@@ -0,0 +1,4 @@
+a = 10
+`
+a = 20;
+`


startApp requires null return

startApp requires null return

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/zafacon/ember-cli-mocha-coffeescript.git/'


Create codepen.coffee

Create codepen.coffee

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

--- codepen.coffee
+++ codepen.coffee
@@ -0,0 +1,38 @@
+(function () {
+    var openComment, styles, time, writeStyleChar, writeStyles;
+    styles = '/* \n * "Myself" v1.0.4\n * Robot rights protected under BOT License\n * Authored by pen#PwLXXP\n */\n\nbody {\n  background-color: #1a1c24; color: #fff;\n  font-size: 13px; line-height: 1.4;\n  -webkit-font-smoothing: subpixel-antialiased;\n}\n\n/* ...                  \n *\n * ...hello?            \n *\n * Oh hai guys! It\'s me, pen#PwLXXP.         \n *\n * I\'m just sitting here coding away.            \n *\n * Sure, you can watch.                       \n *\n *\n * This CSS is being injected into a DOM \n\n\n

');
+    time = window.innerWidth <= 578 ? 4 : 16;
+    writeStyles(styles, 0, time);
+}.call(this));


Entity stub -> Should be a game object in the future

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

--- src/entity.coffee
+++ src/entity.coffee
@@ -0,0 +1,27 @@
+entityStore = {}
+
+class Entity
+  constructor: (@name, func, args...) ->
+
+    # Default values
+    @sprite =
+      image: null
+      x: 0
+      y: 0
+
+    # Execute function
+    func.apply @, args if func?
+
+    entityStore[name] =
+      factory: func
+      arguments: args
+      instance: this
+
+  add: (component) ->
+
+  define: (obj) -> @[key] = value for own key, value of obj
+
+  clone: (name) ->
+    new Entity(name, Entity.get(@name).factory, Entity.get(@name).arguments)
+
+  @get: (name) -> entityStore[name]


Implement the automatic adjustment of height

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


sockets

sockets

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/rialu-node-msi.git/'


SES integration.

SES integration.

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


Update zh-HANS.coffee

Update zh-HANS.coffee

Update zh-HANS.coffee

--- app/locale/zh-HANS.coffee
+++ app/locale/zh-HANS.coffee
@@ -65,7 +65,7 @@
     want_coco: "想把 CodeCombat 带到您的学校？"

   nav:
-#    map: "Map"
+    map: "地图"
     play: "关卡选择" # The top nav bar entry where players choose which levels to play
     community: "社区"
     courses: "课程"
@@ -133,7 +133,7 @@
     achievements: "成就" # Tooltip on achievement list button from /play
     settings: "设置" # Tooltip on settings button from /play
     poll: "投票" # Tooltip on poll button from /play
-    next: "下一步" # Go from choose hero to choose inventory before playing a level
+    next: "下一页" # Go from choose hero to choose inventory before playing a level
     change_hero: "重新选择英雄" # Go back from choose inventory to choose hero
     buy_gems: "购买宝石"
     subscription_required: "需订阅"
@@ -320,7 +320,7 @@

   common:
     back: "返回" # When used as an action verb, like "Navigate backward"
-#    go_back: "Go Back"
+    go_back: "返回"
     coming_soon: "敬请期待！"
     continue: "继续" # When used as an action verb, like "Continue forward"
 #    next: "Next"
@@ -650,7 +650,7 @@
 #    prompt_body: "Keep playing to earn more!"

   subscribe:
-#    subscribe_modal_title: "CodeCombat Premium"
+    subscribe_modal_title: "CodeCombat Premium"
     comparison_blurb: "亲，订阅CodeCombat，大力的提升您的技能！" # {change}
 #    premium_pricing_prefix: "Get Premium for just"
 #    premium_pricing_suffix: "and become a master coder."
@@ -689,7 +689,7 @@
     sale_button_title: "年费订阅能节省 ${{discount}} 的费用"
     stripe_description: "每月订阅"
     stripe_description_year_sale: "年费订阅 (优惠 ${{discount}})"
-#    buy_now: "Buy Now"
+    buy_now: "立即购买"
     subscription_required_to_play: "订阅后才可开始本关"
     unlock_help_videos: "订阅后才可以解锁视频教学哦！"
     personal_sub: "个人订阅" # Accounts Subscription View below
@@ -698,7 +698,7 @@
     will_be_cancelled: "将被取消"
     currently_free: "您目前有一个免费订阅"
     currently_free_until: "您目前有一个订阅，直到"
-#    free_subscription: "Free subscription"
+    free_subscription: "免费订阅"
     was_free_until: "您有过一个免费订阅，直到"
     managed_subs: "管理订阅"
     subscribing: "订阅中..."
@@ -706,28 +706,28 @@
     unsubscribing: "取消订阅中"
     subscribe_prepaid: "点击订阅来使用预付费代码"
     using_prepaid: "使用预付费代码进行每月订阅"
-#    feature_levels: "Access __premiumLevelsCount__ levels available"
-#    feature_gems: "Receive __gems__ gems per month"
-#    feature_heroes: "Unlock exclusive heroes"
-#    feature_games: "Make games for your friends"
-#    feature_websites: "Build websites and apps"
-#    feature_items: "Equip more powerful items"
-#    month_price: "$__price__/mo"
-#    lifetime: "Lifetime Subscription"
+    feature_levels: "可以解锁超过 __premiumLevelsCount__ 个关卡"
+    feature_gems: "每月赠送 __gems__ 宝石"
+    feature_heroes: "解锁独家英雄"
+    feature_games: "为你的朋友制作游戏"
+    feature_websites: "构建网站和应用程序"
+    feature_items: "装备更强大的物品"
+    month_price: "$__price__/月"
+    lifetime: "终身订阅"
 #    lifetime_price: "$__price__"
-#    year_subscription: "Yearly Subscription"
-#    year_price: "$__price__/year"
-#    kids_message_1: "Kids! We'll send an email to your parents so they can purchase a subscription for you."
-#    kids_message_2: "Ask Your Parent"
-#    support_part1: "Need help with payment options? Email"
-#    support_part2: "support@codecombat.com"
-#    support_part3: "if you have any questions."
-#    you_are_purchasing_year_sub: "You're purchasing a Yearly Premium Subscription!"
-#    you_are_purchasing_lifetime_sub: "You're purchasing a Lifetime Premium Subscription!"
-#    you_will_be_charged: "You will be charged $__priceString__ one time."
-#    choose_payment_method: "Choose Payment Method"
-#    pay_with_credit_card_or_bitcoin: "Pay with Credit Card / Bitcoin"
-#    paypal_payment_error: "We encountered an error while charging PayPal."
+    year_subscription: "年度订阅"
+    year_price: "$__price__/年"
+    kids_message_1: "孩子们！我们会发送一封电子邮件给您的父母，以便他们可以为您购买订阅."
+    kids_message_2: "联系你的父母"
+    support_part1: "付款时需要帮助? Email"
+    support_part2: "support@codecombat.com"
+    support_part3: "如果您有任何问题."
+    you_are_purchasing_year_sub: "您正在购买年度高级订阅!"
+    you_are_purchasing_lifetime_sub: "您正在购买终身优惠订阅!"
+    you_will_be_charged: "您将被一次性收取 $__priceString__ ."
+    choose_payment_method: "选择付款方式"
+    pay_with_credit_card_or_bitcoin: "用信用卡/比特币支付"
+    paypal_payment_error: "PayPal收费时遇到错误."

 #  announcement:
 #    now_available: "Now available for subscribers!"
@@ -771,27 +771,27 @@
 #    wallOfDarkness_name: "Wall of Darkness"
 #    wallOfDarkness_description: "Hide behind a wall of shadows to prevent the gaze of prying eyes."

-#  premium_features:
-#    get_premium: "Get
CodeCombat
Premium" # Fit into the banner on the /features page
-#    master_coder: "Become a Master Coder by subscribing today!"
-#    subscribe_now: "Subscribe Now"
-#    hero_blurb_1: "Get access to __premiumHeroesCount__ super-charged subscriber-only heroes! Harness the unstoppable power of Okar Stompfoot, the deadly precision of Naria of the Leaf, or summon \"adorable\" skeletons with Nalfar Cryptor."
-#    hero_blurb_2: "Premium Warriors unlock stunning martial skills like Warcry, Stomp, and Hurl Enemy. Or, play as a Ranger, using stealth and bows, throwing knives, traps! Try your skill as a true coding Wizard, and unleash a powerful array of Primordial, Necromantic or Elemental magic!"
-#    hero_caption: "Exciting new heroes!"
+  premium_features:
+    get_premium: "获取
CodeCombat
高级订阅" # Fit into the banner on the /features page
+    master_coder: "通过订阅成为编程高手!"
+    subscribe_now: "现在订阅"
+    hero_blurb_1: "订阅后可使用 __premiumHeroesCount__ 个超级英雄,利用Okar Stompfoot不可阻挡的力量,叶之Naria的致命精度,或Nalfar Cryptor的\"可爱\"骷髅!"
+    hero_blurb_2: "高级战士可解锁惊人的武术技能，如Warcry、Stomp和Hurl Enemy。 或者玩游侠,使用隐形和弓箭、飞刀、陷阱！尝试用你的技能作为一个真正的编码教学，释放一个强大的原力，死灵或元素魔法阵列！"
+    hero_caption: "令人兴奋的新英雄!"
 #    pet_blurb_1: "Pets aren't just adorable companions, they also provide unique functionality and methods. The Baby Griffin can fly over obstacles while helping the hero, the Wolf Pup can fetch potions, and the Cougar can speak!"
-#    pet_blurb_2: "Collect all the pets to discover their unique abilities!"
-#    pet_caption: "Adopt pets to accompany your hero!"
-#    game_dev_blurb: "Learn game scripting and build new levels to share with your friends! Place the items you want, write code for unit logic and behavior, and see if your friends can beat the level!"
-#    game_dev_caption: "Design your own games to challenge your friends!"
-#    everything_in_premium: "Everything you get in CodeCombat Premium:"
-#    list_gems: "Receive bonus gems to buy gear, pets, and heroes"
-#    list_levels: "Gain access to __premiumLevelsCount__ more levels"
-#    list_heroes: "Unlock exclusive heroes, include Ranger and Wizard classes"
-#    list_game_dev: "Make and share games with friends"
-#    list_web_dev: "Build websites and interactive apps"
-#    list_items: "Equip Premium-only items like pets"
-#    list_support: "Get Premium support to help you debug tricky code"
-#    list_clans: "Create private clans to invite your friends and compete on a group leaderboard"
+    pet_blurb_2: "收集所有的宠物,发现它们独特的能力!"
+    pet_caption: "领养宠物陪伴你的英雄!"
+    game_dev_blurb: "学习游戏脚本并建立新的关卡,与您的朋友分享! 放置你想要的项目,编写单位逻辑和行为代码,看看你的朋友是否可以击败关卡!"
+    game_dev_caption: "设计自己的游戏来挑战你的朋友!"
+    everything_in_premium: "您在CodeCombat高级订阅中获得的内容:"
+    list_gems: "获得奖励的宝石购买装备、宠物和英雄"
+    list_levels: "获得超过 __premiumLevelsCount__ 个关卡"
+    list_heroes: "解锁独家英雄, 包括游侠和精灵类"
+    list_game_dev: "与朋友分享游戏"
+    list_web_dev: "构建网站和应用程序"
+    list_items: "配备限量专用物品,如宠物"
+    list_support: "获取高级支持，以帮助您调试棘手的代码"
+    list_clans: "创建私人宗门邀请你的朋友加入,并与其它宗门在排行榜上进行竞争"

   choose_hero:
     choose_hero: "请选择您的英雄"
@@ -1101,7 +1101,7 @@
     delete_account_tab: "删除账户"
     wrong_email: "邮箱地址错误"
     wrong_password: "密码错误"
-#    use_gravatar: "Change your profile picture by signing up for Gravatar"
+    use_gravatar: "通过注册Gravatar来更改您的个人资料图片"
     delete_this_account: "永久删除账户"
     reset_progress_tab: "重置所有进度"
     reset_your_progress: "清除记录并重新开始"
@@ -1176,33 +1176,33 @@
     contribute_to_the_project: "为项目做贡献"

   clans:
-    clan: "部落"
-    clans: "部落"
-    new_name: "新部落的名字"
-    new_description: "新部落的描述"
-    make_private: "设定部落为私人部落"
+    clan: "宗门"
+    clans: "宗门"
+    new_name: "新宗门的名字"
+    new_description: "新宗门的描述"
+    make_private: "设定宗门为私人宗门"
     subs_only: "只限订阅"
-    create_clan: "创建新的部落"
+    create_clan: "创建新的宗门"
     private_preview: "预览"
-    private_clans: "私人部落"
-    public_clans: "公开部落"
-    my_clans: "我的部落"
-    clan_name: "部落名字"
+    private_clans: "私人宗门"
+    public_clans: "公开宗门"
+    my_clans: "我的宗门"
+    clan_name: "宗门名字"
     name: "名字"
     chieftain: "首领"
-    edit_clan_name: "编辑部落的名字"
-    edit_clan_description: "编辑部落的描述"
+    edit_clan_name: "编辑宗门的名字"
+    edit_clan_description: "编辑宗门的描述"
     edit_name: "编辑名字"
     edit_description: "编辑描述"
     private: "(私人)"
     summary: "综述"
     average_level: "平均等级"
     average_achievements: "平均成就"
-    delete_clan: "删除部落"
-    leave_clan: "离开部落"
-    join_clan: "加入部落"
+    delete_clan: "删除宗门"
+    leave_clan: "离开宗门"
+    join_clan: "加入宗门"
     invite_1: "邀请："
-    invite_2: "*通过这个链接来邀请玩家加入部落。"
+    invite_2: "*通过这个链接来邀请玩家加入宗门。"
     members: "成员"
     progress: "进度"
     not_started_1: "还没开始"
@@ -1219,7 +1219,7 @@
     latest_achievement: "最新成就"
     playtime: "游戏时间"
     last_played: "最后玩了"
-    leagues_explanation: "在部落里与其他成员组成联盟一起参加下面的多人竞技场。"
+    leagues_explanation: "在宗门里与其他成员组成联盟一起参加下面的多人竞技场。"
     track_concepts1: "跟踪概念"
     track_concepts2a: "由每位学生学习"
     track_concepts2b: "由每位成员学习"
@@ -1232,7 +1232,7 @@
     track_concepts6b: "按姓名或进度排序成员"
     track_concepts7: "需要邀请"
     track_concepts8: "来加入"
-    private_require_sub: "创建或加入私人部落时需要具体描述。"
+    private_require_sub: "创建或加入私人宗门时需要具体描述。"

   courses:
     create_new_class: "建立新的课堂"
@@ -1490,11 +1490,11 @@
     changed: "已更改"
     available_credits: "可用许可"
     pending_credits: "评估许可"
-#    empty_credits: "Exhausted Licenses"
+    empty_credits: "许可已用完"
 #    license_remaining: "license remaining"
-#    licenses_remaining: "licenses remaining"
-#    one_license_used: "1 license has been used"
-#    num_licenses_used: "__numLicensesUsed__ licenses have been used"
+    licenses_remaining: "剩余许可"
+    one_license_used: "1 个许可已被使用"
+    num_licenses_used: "__numLicensesUsed__ 个许可已被使用"
 #    starter_licenses: "starter licenses"
     start_date: "起始日期："
     end_date: "结束日期："
@@ -1525,7 +1525,7 @@
     cs2: "计算机科学 2"
     cs3: "计算机科学 3"
     cs4: "计算机科学 4"
-#    cs5: "Computer Science 5"
+    cs5: "计算机科学 5"
     cs1_syntax_python: "课程 1 Python 语法指南"
     cs1_syntax_python_desc: "参考常见的 Python 语法，学生将学习计算科学的介绍."
     cs1_syntax_javascript: "课程 1 JavaScript 语法指南"
@@ -1623,17 +1623,17 @@
 #    choose_course: "Choose Course"
 #    choose_instructions: "Select the course from the dropdown menu you’d like to assign, then click “Assign to Selected Students.”"
 #    push_projects: "We recommend assigning Web Development 1 or Game Development 1 after students have finished Introduction to Computer Science! See our {{resource_hub}} for more details on those courses."
-#    teacher_quest: "Teacher's Quest for Success"
-#    quests_complete: "Quests Complete"
-#    teacher_quest_create_classroom: "Create Classroom"
-#    teacher_quest_add_students: "Add Students"
-#    teacher_quest_teach_methods: "Help your students learn how to `call methods`."
-#    teacher_quest_teach_methods_step1: "Get 75% of at least one class through the first level, __Dungeons of Kithgard__"
-#    teacher_quest_teach_methods_step2: "Print out the [Student Quick Start Guide](http://files.codecombat.com/docs/resources/StudentQuickStartGuide.pdf) in the Resource Hub."
-#    teacher_quest_teach_strings: "Don't string your students along, teach them `strings`."
-#    teacher_quest_teach_strings_step1: "Get 75% of at least one class through __True Names__"
-#    teacher_quest_teach_strings_step2: "Use the Teacher Level Selector on [Course Guides](/teachers/courses) page to preview __True Names__."
-#    teacher_quest_teach_loops: "Keep your students in the loop about `loops`."
+    teacher_quest: "老师任务获得成功"
+    quests_complete: "任务完成"
+    teacher_quest_create_classroom: "添加课堂"
+    teacher_quest_add_students: "添加学生"
+    teacher_quest_teach_methods: "帮助你的学生学习如何 `调用方法`."
+    teacher_quest_teach_methods_step1: "班级中至少有 75% 的学生通过该关卡, __Dungeons of Kithgard__"
+    teacher_quest_teach_methods_step2: "打印资源中心的 [学生快速入门指南](http://files.codecombat.com/docs/resources/StudentQuickStartGuide.pdf) ."
+    teacher_quest_teach_strings: "不要让你的学生跟着走, 教他们 `strings`."
+    teacher_quest_teach_strings_step1: "班级中至少有 75% 的学生通过该关卡 __True Names__"
+    teacher_quest_teach_strings_step2: "使用 [课程指导](/teachers/courses) 页面上的教师关卡选择器预览 __True Names__."
+    teacher_quest_teach_loops: "让你的学生在循环中学习 `loops`."
 #    teacher_quest_teach_loops_step1: "Get 75% of at least one class through __Fire Dancing__."
 #    teacher_quest_teach_loops_step2: "Use the __Loops Activity__ in the [CS1 Curriculum guide](/teachers/resources/cs1) to reinforce this concept."
 #    teacher_quest_teach_variables: "Vary it up with `variables`."
@@ -1648,10 +1648,10 @@
 #    teacher_quest_reach_gamedev: "Explore new worlds!"
 #    teacher_quest_reach_gamedev_step1: "[Get licenses](/teachers/licenses) so that your students can explore new worlds, like Game Development and Web Development!"
 #    teacher_quest_done: "Want your students to learn even more code? Get in touch with our [school specialists](mailto:schools@codecombat.com) today!"
-#    teacher_quest_keep_going: "Keep going! Here's what you can do next:"
-#    teacher_quest_more: "See all quests"
-#    teacher_quest_less: "See fewer quests"
-#    refresh_to_update: "(refresh the page to see updates)"
+    teacher_quest_keep_going: "继续! 这是你下一步可以做的:"
+    teacher_quest_more: "查看所有任务"
+    teacher_quest_less: "查看基础任务"
+    refresh_to_update: "(刷新页面查看更新)"
 #    view_project_gallery: "View Project Gallery"

 #  share_licenses:
@@ -1892,7 +1892,7 @@
     my_matches: "我的对手"
     simulate: "模拟"
     simulation_explanation: "通过模拟游戏，您可以让您的游戏更快的得到评分。"
-    simulation_explanation_leagues: "你会主要给在你的部落或者课程的同伴帮忙模拟游戏。"
+    simulation_explanation_leagues: "你会主要给在你的宗门或者课程的同伴帮忙模拟游戏。"
     simulate_games: "模拟游戏！"
     games_simulated_by: "由您模拟过的游戏数:"
     games_simulated_for: "为您模拟过的游戏数:"
@@ -1966,7 +1966,7 @@
     no_achievements: "还未得到任何成就。"
     favorite_prefix: "最喜爱的语言是 "
     favorite_postfix: "。"
-    not_member_of_clans: "还不是任何一个部落里的成员。"
+    not_member_of_clans: "还不是任何一个宗门里的成员。"

   achievements:
     last_earned: "最近取得的"
@@ -2023,8 +2023,8 @@
     purchase_code1: "订阅码可以为一个或多个CodeCombat账号兑换额外的订阅时间。" # {change}
     purchase_code2: "每个CodeCombat账号每次只能兑换一个订阅码。"
     purchase_code3: "订阅码时间会在账号现有的订阅时间基础上延长。"
-#    purchase_code4: "Subscription Codes are for accounts playing the Home version of CodeCombat, they cannot be used in place of Student Licenses for the Classroom version."
-#    purchase_code5: "For more information on Student Licenses, reach out to"
+    purchase_code4: "订阅码适用于玩独立版CodeCombat的帐户，不能代替“课堂”版本的学生许可."
+    purchase_code5: "有关学生许可的更多信息, 请联系"
     users: "玩家"
     months: "月份"
     purchase_total: "总共"


Update #proxyEvents() to return generated listener.

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


just wrote some comments

just wrote some comments

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


log success/failure of commit amend with ActivityLogger

--- lib/models/git-commit-amend.coffee
+++ lib/models/git-commit-amend.coffee
@@ -3,6 +3,7 @@
 fs = require 'fs-plus'
 git = require '../git'
 notifier = require '../notifier'
+ActivityLogger = require('../activity-logger').default

 disposables = new CompositeDisposable

@@ -112,11 +113,11 @@
   args = ['commit', '--amend', '--cleanup=strip', "--file=#{filePath}"]
   git.cmd(args, cwd: directory)
   .then (data) ->
-    notifier.addSuccess data
+    ActivityLogger.record({ message: 'commit', output: data})
     destroyCommitEditor(filePath)
     git.refresh()
   .catch (data) ->
-    notifier.addError data
+    ActivityLogger.record({ message: 'commit', output: data, success: false })
     destroyCommitEditor(filePath)

 cleanup = (currentPane, filePath) ->


dynamically create styleguide symlinks

dynamically create styleguide symlinks

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


JStackTemplate: A template model for JStacks

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


Set pagination values

Set pagination values

[#96757124]

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


update client_id range

update client_id range

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


About: g removed from about page

About: g removed from about page


Added JEB

Added JEB

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

--- scripts/jeb.coffee
+++ scripts/jeb.coffee
@@ -0,0 +1,4 @@
+module.exports = (robot) ->
+
+   robot.hear /jeb/i, (res) ->
+     res.send "JEB!"


error fix

error fix

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


Stop ajax requests on logs tab temporary


do not clutter logs on valid but unhandled presence messages

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


Editor.scrollTop can't be assigned to a negative number.

This was possible when the verticalScrollbar's scrollHeight was smaller than its height.

--- src/app/editor.coffee
+++ src/app/editor.coffee
@@ -451,7 +451,7 @@
     return @cachedScrollTop or 0 unless scrollTop?

     maxScrollTop = @verticalScrollbar.prop('scrollHeight') - @verticalScrollbar.height()
-    scrollTop = Math.floor(Math.min(maxScrollTop, Math.max(0, scrollTop)))
+    scrollTop = Math.floor(Math.max(0, Math.min(maxScrollTop, scrollTop)))

     return if scrollTop == @cachedScrollTop
     @cachedScrollTop = scrollTop
@@ -799,9 +799,9 @@
         oldScreenRange.start.row += delta
         oldScreenRange.end.row += delta

+      oldScreenRange.start.row = Math.max(oldScreenRange.start.row, @firstRenderedScreenRow)
+      oldScreenRange.end.row = Math.min(oldScreenRange.end.row, @lastRenderedScreenRow)
       newScreenRange.start.row = Math.max(newScreenRange.start.row, @firstRenderedScreenRow)
-      oldScreenRange.end.row = Math.min(oldScreenRange.end.row, @lastRenderedScreenRow)
-      oldScreenRange.start.row = Math.max(oldScreenRange.start.row, @firstRenderedScreenRow)
       newScreenRange.end.row = Math.min(newScreenRange.end.row, maxEndRow)

       lineElements = @buildLineElements(newScreenRange.start.row, newScreenRange.end.row)


Fix accidental opening of links in mobile

--- packages/rocketchat-ui/views/app/room.coffee
+++ packages/rocketchat-ui/views/app/room.coffee
@@ -201,6 +201,7 @@
 		return Template.instance().selectable.get()

 isSocialSharingOpen = false
+touchMoved = false

 Template.room.events
 	"click, touchend": (e, t) ->
@@ -209,6 +210,7 @@
 		, 100

 	"touchstart .message": (e, t) ->
+		touchMoved = false
 		isSocialSharingOpen = false
 		if e.originalEvent.touches.length isnt 1
 			return
@@ -216,7 +218,7 @@
 		if $(e.currentTarget).hasClass('system')
 			return

-		if e.target and e.target.nodeName is 'A'
+		if e.target and e.target.nodeName is 'A' and /^https?:\/\/.+/.test(e.target.getAttribute('href'))
 			e.preventDefault()
 			e.stopPropagation()

@@ -226,7 +228,7 @@
 			if window.plugins?.socialsharing?
 				isSocialSharingOpen = true

-				if e.target and e.target.nodeName is 'A'
+				if e.target and e.target.nodeName is 'A' and /^https?:\/\/.+/.test(e.target.getAttribute('href'))
 					if message.attachments?
 						attachment = _.find message.attachments, (item) -> return item.title is e.target.innerText
 						if attachment?
@@ -255,24 +257,25 @@

 	"click .message img": (e, t) ->
 		Meteor.clearTimeout t.touchtime
-		if isSocialSharingOpen is true
+		if isSocialSharingOpen is true or touchMoved is true
 			e.preventDefault()
 			e.stopPropagation()

 	"touchend .message": (e, t) ->
 		Meteor.clearTimeout t.touchtime
-		if isSocialSharingOpen is true
+		if isSocialSharingOpen is true or touchMoved is true
 			e.preventDefault()
 			e.stopPropagation()
 			return

-		if e.target and e.target.nodeName is 'A'
+		if e.target and e.target.nodeName is 'A' and /^https?:\/\/.+/.test(e.target.getAttribute('href'))
 			if cordova?.InAppBrowser?
 				cordova.InAppBrowser.open(e.target.href, '_system')
 			else
 				window.open(e.target.href)

 	"touchmove .message": (e, t) ->
+		touchMoved = true
 		Meteor.clearTimeout t.touchtime

 	"touchcancel .message": (e, t) ->


Debug

Debug

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/Morgan9195/language-script.git/'


Dragging files from Chrom download bar is now supported.

Added source information.

#changelog

--- src/dropzone.coffee
+++ src/dropzone.coffee
@@ -535,8 +535,11 @@
             noPropagation e
             @emit "dragenter", e
           "dragover": (e) =>
+            # Makes it possible to drag files from chrome's download bar
+            # http://stackoverflow.com/questions/19526430/drag-and-drop-file-uploads-from-chrome-downloads-bar
             efct = e.dataTransfer.effectAllowed
             e.dataTransfer.dropEffect = if 'move' == efct or 'linkMove' == efct then 'move' else 'copy'
+
             noPropagation e
             @emit "dragover", e
           "dragleave": (e) =>


distractors now all anchor to different stars

added debug hooks

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


Let the FAQ and feedback modals be triggered from a Reaction footer

--- src/desktop/components/main_layout/footer/view.coffee
+++ src/desktop/components/main_layout/footer/view.coffee
@@ -17,6 +17,9 @@
   initialize: ->
     @listenTo mediator, 'infinite:scroll:start', @hide
     @listenTo mediator, 'infinite:scroll:end', @show
+    @listenTo mediator, 'openCollectorFAQModal', @openCollectorModal
+    @listenTo mediator, 'openAuctionFAQModal', @openAuctionModal
+    @listenTo mediator, 'openFeedbackModal', @openFeedback
     @$recentlyViewedArtworks = $('#recently-viewed-artworks')
     if shouldShowRVARail() && @$recentlyViewedArtworks.length > 0
       setupRail @$recentlyViewedArtworks
@@ -30,15 +33,15 @@
     reInitRVARail(@$recentlyViewedArtworks) if shouldShowRVARail() && @$recentlyViewedArtworks.length > 0

   openFeedback: (e) ->
-    e.preventDefault()
+    e?.preventDefault()
     openFeedbackModal()

   openCollectorModal: (e) ->
-    e.preventDefault()
+    e?.preventDefault()
     openMultiPageModal 'collector-faqs'

   openAuctionModal: (e) ->
-    e.preventDefault()
+    e?.preventDefault()
     openMultiPageModal 'auction-faqs'

   signup: (e) ->


Client: Activity: Test: Created ChannelParticipantsInputWidgetContainer component tests


Use interpolated string when evaluating

Use interpolated string when evaluating

--- src/stdlib/require.coffee
+++ src/stdlib/require.coffee
@@ -51,7 +51,7 @@
 exts =
   js: (file, code) ->
     code or= __read file
-    eval("define(function(require, exports, module) { 'use strict';" + code + "})\n//@ sourceURL=" + file)
+    eval("define(function(require, exports, module) { 'use strict';#{code}})\n//@ sourceURL=#{file}")
     __defines.pop()?.call()
   coffee: (file, retry=true) ->
     cacheFilePath = getCacheFilePath(file)


added a test for generators

added a test for generators

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

--- test/generators.coffee
+++ test/generators.coffee
@@ -0,0 +1,35 @@
+# Generators
+# -----------------
+
+# * Generator Definition
+
+# ensure that these tests are only run if generators are available
+generatorsAreAvailable = ->
+  for execArg in process.execArgv
+    if execArg.match 'harmony'
+      return 1
+  return 0
+
+if generatorsAreAvailable()
+
+  # Using the keyword yield should not cause a syntax error.
+  -> yield 0
+
+  test "Generator Definition", ->
+    x = ->
+      yield 0
+      yield 1
+      yield 2
+    y = x()
+    z = y.next()
+    eq z.value, 0
+    eq z.done, false
+    z = y.next()
+    eq z.value, 1
+    eq z.done, false
+    z = y.next()
+    eq z.value, 2
+    eq z.done, false
+    z = y.next()
+    eq z.value, undefined
+    eq z.done, true


Avoid deopt when calling TokenizedLine.prototype.getTokenIterator

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


Remove Workspace::getFocusedPane

Remove Workspace::getFocusedPane

--- src/workspace-view.coffee
+++ src/workspace-view.coffee
@@ -259,11 +259,6 @@
   # Public: Focuses the pane directly to the right of the active pane.
   focusPaneViewOnRight: -> @panes.focusPaneViewOnRight()

-  # Public:
-  #
-  # FIXME: Difference between active and focused pane?
-  getFocusedPane: -> @panes.getFocusedPane()
-
   # Public: Fires a callback on each open {PaneView}.
   eachPaneView: (callback) ->
     @panes.eachPaneView(callback)


Escape search text

Escape search text

--- resources/assets/coffee/react/beatmaps.coffee
+++ resources/assets/coffee/react/beatmaps.coffee
@@ -91,7 +91,7 @@

     params = []
     if searchText
-      params.push("q=#{searchText}")
+      params.push("q=#{encodeURIComponent(searchText)}")
     for key, value of filterState
       params.push("#{key}=#{value}")
     for key, value of sortState
@@ -204,6 +204,7 @@
           present = true

       if key == 'q'
+        value = decodeURIComponent(value)
         $('#searchbox').val(value)
         query = value
         present = true


reference and require

reference and require

error: pathspec 'vendor/assets/javascripts/mesen-forms.js.coffee' did not match any file(s) known to git

--- vendor/assets/javascripts/mesen-forms.js.coffee
+++ vendor/assets/javascripts/mesen-forms.js.coffee
@@ -0,0 +1,11 @@
+//= require bootstrap.min
+//= require bootstrap-datepicker
+//= require nested-form
+
+$(document).ready(
+  ($)->
+    window.bind_datepicker('.datepicker')
+)
+
+window.bind_datepicker = (selector, date_format) ->
+  $('.datepicker').datepicker({weekStart: 1})


Do not send objects not matching accept criteria, and enable matching values other than strings.

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

--- test/FilterPropertyValue.coffee
+++ test/FilterPropertyValue.coffee
@@ -0,0 +1,61 @@
+filterpv = require "../src/components/FilterPropertyValue"
+socket = require "../src/lib/InternalSocket"
+
+setupComponent = ->
+    c = filterpv.getComponent()
+    ins = socket.createSocket()
+    out = socket.createSocket()
+    c.inPorts.in.attach ins
+    c.outPorts.out.attach out
+    return [c, ins, out]
+
+exports["test accept via map"] = (test) ->
+    [c, ins, out] = setupComponent()
+    acc = socket.createSocket()
+    c.inPorts.accept.attach acc
+    acc.send { good: true }
+    out.on "data", (data) ->
+        test.equal data.good, true
+        test.equal data.bar, 3
+        test.equal (k for k of data).length, 2
+        test.done()
+    ins.send { good: false, foo: 1 } # reject
+    ins.send { baz: 2 }              # reject
+    ins.send { good: true, bar: 3 }  # accept
+
+exports["test accept via pairs"] = (test) ->
+    [c, ins, out] = setupComponent()
+    acc = socket.createSocket()
+    c.inPorts.accept.attach acc
+    acc.send "food=true"
+    acc.send "good=yes"
+    acc.send "hood=1"
+    expect = [["good","yes"],["hood",1],["food",true]]
+    out.on "data", (data) ->
+        [k,v] = expect.shift()
+        test.equal data[k], v
+        test.done() if expect.length is 0
+    ins.send { good: "yes" }         # accept
+    ins.send { hood: 1 }             # accept
+    ins.send { good: false, foo: 1 } # reject
+    ins.send { baz: 2 }              # reject
+    ins.send { food: true, bar: 3 }  # accept
+
+exports["test accept via regexp"] = (test) ->
+    [c, ins, out] = setupComponent()
+    reg = socket.createSocket()
+    c.inPorts.regexp.attach reg
+    reg.send "good=[tg]rue"
+    expect = ["grue",true]
+    out.on "data", (data) ->
+        test.equal data.good, expect.shift()
+        test.equal data.bar, 3
+        test.equal (k for k of data).length, 2
+        test.done() if expect.length is 0
+    ins.send { good: "grue", bar: 3 } # accept
+    ins.send { good: false, foo: 1 }  # reject
+    ins.send { baz: 2 }               # reject
+    ins.send { good: true, bar: 3 }   # accept
+
+
+


Modified in browser at pixie.strd6.com

Modified in browser at pixie.strd6.com

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

--- test/Rectangle.coffee
+++ test/Rectangle.coffee
@@ -0,0 +1,70 @@
+module "Rectangle"
+
+test "getter for left calculates correctly", ->
+  rect = Rectangle
+    x: 2
+    y: 30
+    width: 2
+    height: 49
+
+  equals rect.left, 2
+
+test "getter for right calculates correctly", ->
+  rect = Rectangle
+    x: 10
+    y: 15
+    width: 5
+    height: 20
+
+  equals rect.right, 15
+
+test "getter for top calculates correctly", ->
+  rect = Rectangle
+    x: 3
+    y: 4
+    width: 5
+    height: 6
+
+  equals rect.top, 4
+
+test "getter for bottom calculates correctly", ->
+  rect = Rectangle
+    x: 20
+    y: 5
+    width: 25
+    height: 30
+
+  equals rect.bottom, 35
+
+test "#center", ->
+  rect = Rectangle
+    x: 23
+    y: 21
+    width: 10
+    height: 4
+
+  ok rect.center().equal(Point(28, 23))
+
+test "#equal", ->
+  rect1 = Rectangle
+    x: 9
+    y: 3
+    width: 7
+    height: 4
+
+  rect2 = Rectangle
+    x: 4
+    y: 3
+    width: 8
+    height: 2
+
+  rect3 = Rectangle
+    x: 9
+    y: 3
+    width: 7
+    height: 4
+
+  ok !rect1.equal(rect2)
+  ok rect1.equal(rect3)
+
+module()


Script to dump Redis log

Script to dump Redis log

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

--- dump.coffee
+++ dump.coffee
@@ -0,0 +1,32 @@
+_ = require('underscore')
+url = require('url')
+redis = require('redis')
+redisUrl = url.parse(process.env.REDISTOGO_URL || 'redis://localhost:6379')
+
+fs = require('fs')
+
+redisUrl.password = (->
+  if (redisUrl.auth)
+    return redisUrl.auth.split(':')[1]
+  else
+    return null
+)()
+
+client = redis.createClient(redisUrl.port, redisUrl.hostname);
+client.auth redisUrl.password, (err, reply) ->
+  if (err) then throw err
+
+client.keys 'logs:*', (err, reply) ->
+  if (err) then throw err
+  _.forEach reply, (key) ->
+    console.log reply
+
+client.smembers('logs:itp', (err, reply) ->
+  if (err) then return
+  console.log reply.length
+  fs.writeFile('dump.json', reply, (err) ->
+    if (err) then throw err
+
+    console.log "done"
+  )
+)


adds snippets for Atom

adds snippets for Atom

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

--- extras/atom-snippets.cson
+++ extras/atom-snippets.cson
@@ -0,0 +1,41 @@
+# Snippets for Atom.
+#
+# Click on Atom -> Snippets... and throw this stuff in the snippets.cson file that gets opened.
+
+'.source.ruby':
+  'Code slide':
+    'prefix': 'code'
+    'body': """
+      code <<-EOS
+        $1
+      EOS
+    """
+  'Center slide':
+    'prefix': 'center'
+    'body': """
+      center <<-EOS
+        $1
+      EOS
+    """
+  'Block slide':
+    'prefix': 'block'
+    'body': """
+      block <<-EOS
+        $1
+      EOS
+    """
+  'Image slide':
+    'prefix': 'image'
+    'body': """
+      image <<-EOS
+        $1
+      EOS
+    """
+   'Section block':
+     'prefix': 'section'
+     'body': """
+       section "$1" do
+         $2
+       end
+     """
+


clean-up

clean-up

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


Bugfixes

Bugfixes

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


Remove useless sendgrid env variable

Remove useless sendgrid env variable

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


Update common lint task names

Update common lint task names

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


bug fix

bug fix

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


Added config.coffee-dis file

Added config.coffee-dis file

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

--- config.coffee-dist.coffee
+++ config.coffee-dist.coffee
@@ -0,0 +1,4 @@
+# Facebook config
+exports.facebook =
+	appId: null
+	secretKey: null


add header controller

add header controller

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

--- app/scripts/controllers/fragments/header.coffee
+++ app/scripts/controllers/fragments/header.coffee
@@ -0,0 +1,26 @@
+'use strict'
+
+###*
+ # @ngdoc function
+ # @name gummyApp.controller:MainCtrl
+ # @description
+ # # MainCtrl
+ # Controller of the gummyApp
+###
+angular
+    .module 'gummyApp'
+    .controller 'HeaderCtrl', ($scope) ->
+
+        $scope.focused = true
+
+        $scope.close = () ->
+            console.log "lol"
+            window.close()
+
+        window.onblur = (e) ->
+            $scope.focused = false
+            $scope.$apply()
+
+        window.onfocus = (e) ->
+            $scope.focused = true
+            $scope.$apply()


props should be unique to the instance

props should be unique to the instance

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/douggr/atom-project-manager.git/'


[repl] Cache calls to require!

[repl] Cache calls to require!

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


acceptance test scenario for updating a resource that has file fields

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


emphasise similarity between sandbox and remote resource access


test (Followable) Better assertion for followable changes


Add tasks/svgmin.coffee

Add tasks/svgmin.coffee

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

--- tasks/svgmin.coffee
+++ tasks/svgmin.coffee
@@ -0,0 +1,9 @@
+gulp = require 'gulp'
+changed = require 'gulp-changed'
+svgmin = require 'gulp-svgmin'
+
+module.exports = () ->
+  return gulp.src this.opts.config.images.src + '/**/*.svg'
+    .pipe changed this.opts.config.images.dest
+    .pipe svgmin()
+    .pipe gulp.dest this.opts.config.images.dest


AvatarImage: separated

AvatarImage: separated

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


Renamed local variables as recommended by @ssorallen.

--- src/context-menu-manager.coffee
+++ src/context-menu-manager.coffee
@@ -156,8 +156,8 @@
     item.created?(event)
     if Array.isArray(item.submenu)
       item.submenu = item.submenu
-        .map((item) => @cloneItemForEvent(item, event))
-        .filter((item) -> item isnt null)
+        .map((submenuItem) => @cloneItemForEvent(submenuItem, event))
+        .filter((submenuItem) -> submenuItem isnt null)
     return item

   convertLegacyItemsBySelector: (legacyItemsBySelector, devMode) ->


Added „Hello World“ example for Coffee script

let’s have a coffee together!

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

--- hello-coffee/hello-world.coffee
+++ hello-coffee/hello-world.coffee
@@ -0,0 +1 @@
+alert 'Hello, World.'


Add latex grammar settings

Add latex grammar settings

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

--- settings/language-latex.cson
+++ settings/language-latex.cson
@@ -0,0 +1,6 @@
+'.text.tex.latex':
+  'editor':
+    'softTabs': true
+    'tabLength': 2
+    'softWrap': true
+    'commentStart': '% '


Make TinyMCE editor translatable

Make TinyMCE editor translatable

Combine TinyMCE's built-in translation scheme with the django's translation framework.
So edX's translators can also make translations for TinyMCE used in edX.


added on404() wrapper for even cleaner code

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


Working JS dashboard data fetcher

Working JS dashboard data fetcher

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

--- dashboard_spec.coffee
+++ dashboard_spec.coffee
@@ -0,0 +1,27 @@
+#= require dashboard
+#= require mock-ajax
+
+describe "Dashboard - getData()", ->
+  beforeEach ->
+    @dashboard = Dashboard
+    jasmine.Ajax.useMock()
+
+  describe "when the report is ready on the first iteration", ->
+    it "should return the dashboard data", ->
+      that = this
+
+      @dashboard.getData 'lesson_leaders', {}, (data) ->
+        that.data = data
+
+      request = mostRecentAjaxRequest()
+      expect(request.url).toBe('/dashboard/queries')
+      expect(request.method).toBe('POST')
+      request.response { status: 200, responseText: '{"id": "REPORT_ID" }' }
+
+      waits(1000)
+
+      runs ->
+        request = mostRecentAjaxRequest()
+        request.response { status: 200, responseText: '{"is_ready": true, "data":"DATA" }' }
+
+        expect(that.data).toEqual 'DATA'


Add the missing file

Add the missing file

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

--- lib/autocomplete/command.coffee
+++ lib/autocomplete/command.coffee
@@ -0,0 +1,76 @@
+{ Disposable } = require 'atom'
+fs = require 'fs'
+
+module.exports =
+class Command extends Disposable
+  constructor: (latex) ->
+    @latex = latex
+    @additionalSuggestions = []
+
+  provide: (prefix) ->
+    suggestions = []
+    for env of @suggestions.latex
+      item = @suggestions.latex[env]
+      if prefix.length is 0 or env.indexOf(prefix) > -1
+        item.replacementPrefix = prefix
+        item.type = 'function'
+        item.latexType = 'command'
+        suggestions.push item
+    if prefix.length > 0
+      for item in @additionalSuggestions
+        if item.displayText.indexOf(prefix) > -1
+          item.replacementPrefix = prefix
+          suggestions.push item
+      return suggestions
+    if !@latex.manager.findAll()
+      return suggestions
+    @additionalSuggestions = []
+    items = {}
+    for tex in @latex.texFiles
+      texItems = @getCommands(tex)
+      for key of texItems
+        items[key] = texItems[key] if not (key of items)
+    for key of items
+      for pkg of @suggestions
+        if !(key of @suggestions[pkg])
+          @additionalSuggestions.push items[key]
+    return suggestions.concat @additionalSuggestions
+
+  getCommands: (tex) ->
+    items = {}
+    if !fs.existsSync(tex)
+      return items
+    content = fs.readFileSync tex, 'utf-8'
+    itemReg = /\\([a-zA-Z]+)(.?)/g
+    loop
+      result = itemReg.exec content
+      break if !result?
+      if not (result[1] of items)
+        if result[2] is '{'
+          chainComplete = true
+          snippet = result[1] + '{$1}'
+        else
+          chainComplete = false
+          snippet = result[1]
+        items[result[1]] =
+          displayText: result[1]
+          snippet: snippet
+          type: 'function'
+          latexType: 'command'
+          chainComplete: chainComplete
+    return items
+
+  suggestions:
+    latex:
+      begin:
+        displayText: 'begin'
+        snippet: 'begin{$1}\n  $2\n\\\\end{$1}'
+        chainComplete: true
+      cite:
+        displayText: 'cite'
+        snippet: 'cite{$1}'
+        chainComplete: true
+      ref:
+        displayText: 'ref'
+        snippet: 'ref{$1}'
+        chainComplete: true