Configured jade.compile locals to include the current source filename.

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/schulzch/static-jade-brunch.git/'


Regex for literals should allow upper-case letters.

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/vietarmis/sql-parser.git/'


Workspace: Added CollaborativeFinderPane class.

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


Remove "experimental" comment.

Remove "experimental" comment.

I think we can safely remove this comment now, @mrmr1993.  This is
working out very nicely.

--- content_scripts/mode_insert.coffee
+++ content_scripts/mode_insert.coffee
@@ -15,9 +15,6 @@
       target = event.srcElement
       if target and DomUtils.isFocusable target
         # Remove the focus, so the user can't just get back into insert mode by typing in the same input box.
-        # NOTE(smblott, 2014/12/22) Including embeds for .blur() etc. here is experimental.  It appears to be
-        # the right thing to do for most common use cases.  However, it could also cripple flash-based sites and
-        # games.  See discussion in #1211 and #1194.
         target.blur()
       else if target?.shadowRoot and @insertModeLock
         # An editable element in a shadow DOM is focused; blur it.


uses typescript's bound methods

uses typescript's bound methods

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


added help

added help

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

--- src/plugins/server/help.coffee
+++ src/plugins/server/help.coffee
@@ -0,0 +1,13 @@
+plugin =
+
+    name: 'help'
+
+    init: (callback) ->
+
+        Bot.Server.get '/help', AccessLevel.LEVEL_GUEST, 'Show help messages', (req, res) ->
+
+            res.json Bot.Server.routeEntries
+
+        callback()
+
+module.exports = plugin


Add missing wifi.coffee file

Add missing wifi.coffee file

error: pathspec 'homedisplay/info_internet_connection/static/js/wifi.coffee' did not match any file(s) known to git

--- homedisplay/info_internet_connection/static/js/wifi.coffee
+++ homedisplay/info_internet_connection/static/js/wifi.coffee
@@ -0,0 +1,19 @@
+
+
+jq ->
+  jq.get "/homecontroller/internet_connection/wifi/info", (data) ->
+    elem = jq(".wifi-info")
+    elem.find(".ssid").html data.ssid
+    elem.find(".passphrase").html data.passphrase
+    jq("#wifi-qr").qrcode
+      "text": "WIFI:S:" + data.ssid + ";T:WPA;P:" + data.passphrase + ";;"
+      "background": "white"
+      "render": "div"
+      "size": 600
+    return
+
+  jq(".main-button-box .open-wifi-settings").on "click", ->
+    content_switch.switchContent "#wifi-settings"
+
+  jq("#wifi-settings .close").on "click", ->
+    content_switch.switchContent "#main-content"


hubot responds to 'show stories' as well as 'show stories '

--- src/scripts/pivotal.coffee
+++ src/scripts/pivotal.coffee
@@ -10,7 +10,7 @@
 #
 # show me stories for <project> -- shows current stories being worked on
 module.exports = (robot) ->
-  robot.respond /show\s+(me\s+)?stories\s+(for\s+)?(.*)/i, (msg)->
+  robot.respond /show\s+(me\s+)?stories(\s+for\s+)?(.*)/i, (msg)->
     Parser = require("xml2js").Parser
     token = process.env.HUBOT_PIVOTAL_TOKEN
     project_name = msg.match[3]


Update text-editor-element.coffee

Update text-editor-element.coffee

--- src/text-editor-element.coffee
+++ src/text-editor-element.coffee
@@ -96,7 +96,7 @@
     throw new Error("Must pass a config parameter when initializing TextEditorElements") unless @config?
     throw new Error("Must pass a themes parameter when initializing TextEditorElements") unless @themes?
     throw new Error("Must pass a workspace parameter when initializing TextEditorElements") unless @workspace?
-    throw new Error("Must pass a assert parameter when initializing TextEditorElements") unless @assert?
+    throw new Error("Must pass an assert parameter when initializing TextEditorElements") unless @assert?
     throw new Error("Must pass a styles parameter when initializing TextEditorElements") unless @styles?
     throw new Error("Must pass a grammars parameter when initializing TextEditorElements") unless @grammars?


Account Settings: Credentials: Create common method for fetching data from back-end and use it


Managed VMs default finder path

Managed VMs default finder path

This PR implements a temporary default finder path, as instructed via @gokmen


home/teamteammates: change ui for teammates

--- client/home/lib/myteam/components/hometeamteammates/view.coffee
+++ client/home/lib/myteam/components/hometeamteammates/view.coffee
@@ -33,20 +33,22 @@

   render: ->

+    # commented out until we have a functioning design - SY
+
+    # <SearchBox
+    #   onChange={@props.onSearchInputChange}
+    #   value={@props.searchInputValue} />
+

-      <SearchBox
-        onChange={@props.onSearchInputChange}
-        value={@props.searchInputValue} />
-
-

-        <List
-          numberOfSections={@bound 'numberOfSections'}
-          numberOfRowsInSection={@bound 'numberOfRowsInSection'}
-          renderSectionHeaderAtIndex={@bound 'renderSectionHeaderAtIndex'}
-          renderRowAtIndex={@bound 'renderRowAtIndex'}
-          renderEmptySectionAtIndex={@bound 'renderEmptySectionAtIndex'}
-        />
-

+      <List
+        numberOfSections={@bound 'numberOfSections'}
+        numberOfRowsInSection={@bound 'numberOfRowsInSection'}
+        renderSectionHeaderAtIndex={@bound 'renderSectionHeaderAtIndex'}
+        renderRowAtIndex={@bound 'renderRowAtIndex'}
+        renderEmptySectionAtIndex={@bound 'renderEmptySectionAtIndex'}
+        rowClassName='HomeApp-Teammate--ListItem'
+        sectionClassName='HomeApp-TeammatesSection'
+      />


scripts: add aws import back

scripts: add aws import back


Add alias for bind and unbind

Add alias for bind and unbind


redirect query string too

redirect query string too

--- proxy.coffee
+++ proxy.coffee
@@ -3,6 +3,7 @@
 randomstring = require 'randomstring'
 bcrypt = require 'bcrypt'
 fs = require 'fs'
+qs = require 'querystring'
 passport = require 'passport'
 LocalStrategy = require('passport-local').Strategy
 Client = require('request-json').JsonClient
@@ -185,7 +186,7 @@
                 port: @defaultPort
                 buffer: buffer
         else
-            res.redirect "/login#{req.url}"
+            res.redirect "/login#{req.url}?#{qs.stringify(req.query)}"

     # Redirect application, redirect request depening on app name.
     redirectAppAction: (req, res) =>
@@ -203,7 +204,7 @@
             else
                 res.send 404
         else
-            res.redirect "/login#{req.url}"
+            res.redirect "/login#{req.url}?#{qs.stringify(req.query)}"

     # Redirect public side of application, redirect request depening on app
     # name.


replaced meteors with a ton of stars of different sizes

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


Some minor corrections

Some minor corrections

--- src/scripts/harvest.coffee
+++ src/scripts/harvest.coffee
@@ -12,7 +12,7 @@
 #
 # Commands:
 #   hubot remember my harvest account <email> with password <password> - Saves your Harvest credentials to allow Hubot to track time for you
-#   hubot forget my harvest account <email> - Deletes your account credentials from Hubot's memory
+#   hubot forget my harvest account - Deletes your account credentials from Hubot's memory
 #   hubot start harvest at <project>: notes - TODO
 #   hubot finish harvest at <project> - TODO
 #   hubot daily harvest [of <user>] - Hubot responds with your/a specific user's entries for today
@@ -36,24 +36,29 @@
         msg.reply "Uh-oh -- I just tested your credentials, but they appear to be wrong. Please specify the correct ones."

   # Allows a user to delete his credentials.
-  robot.respond /forget my harvest account (.+)/i, (msg) ->
+  robot.respond /forget my harvest account/i, (msg) ->
     msg.message.user.harvest_account = null
     msg.reply "Okay, I erased your credentials from my memory."

   # Retrieve your or a specific user's timesheet for today.
   robot.respond /daily harvest( of (.+))?/i, (msg) ->
+    # Detect the user; if none is passed, assume the sender.
     if msg.match[2]
       user = robot.userForName(msg.match[2])
-      if user
-        unless user.harvest_account
-          msg.reply "I didn't crack #{user.name}'s Harvest credentials yet, but I'm working on it... Sorry for the inconvenience."
-          return
-      else
+      unless user
         msg.reply "#{msg.match[2]}? Who's that?"
         return
     else
       user = msg.message.user
-
+
+    # Check if we know the detected user's credentials.
+    unless user.harvest_account
+      if user == msg.message.user
+        msg.reply "You have to tell me your Harvest credentials first."
+      else
+        msg.reply "I didn't crack #{user.name}'s Harvest credentials yet, but I'm working on it... Sorry for the inconvenience."
+      return
+
     user.harvest_account.daily msg, (status, body) ->
       if 200 <= status <= 299
         msg.reply "Your entries for today, #{user.name}:"


Added a 'describe' action for the jenkins script.

--- src/scripts/jenkins.coffee
+++ src/scripts/jenkins.coffee
@@ -12,6 +12,8 @@
 #   hubot jenkins build <job> - builds the specified Jenkins job
 #   hubot jenkins build <job>, <params> - builds the specified Jenkins job with parameters as key=value&key2=value2
 #   hubot jenkins list - lists Jenkins jobs
+#   hubot jenkins describe <job> - Describes the specified Jenkins job
+
 #
 # Author:
 #   dougcole
@@ -39,6 +41,50 @@
           msg.send "Build started for #{job} #{res.headers.location}"
         else
           msg.send "Jenkins says: #{body}"
+
+jenkinsDescribe = (msg) ->
+    url = process.env.HUBOT_JENKINS_URL
+    job = msg.match[1]
+
+    path = "#{url}/job/#{job}/api/json"
+
+    req = msg.http(path)
+
+    if process.env.HUBOT_JENKINS_AUTH
+      auth = new Buffer(process.env.HUBOT_JENKINS_AUTH).toString('base64')
+      req.headers Authorization: "Basic #{auth}"
+
+    req.header('Content-Length', 0)
+    req.get() (err, res, body) ->
+        if err
+          msg.send "Jenkins says: #{err}"
+        else
+          response = ""
+          try
+            content = JSON.parse(body)
+            response += "JOB: #{content.displayName}\n"
+            response += "DESCRIPTION: #{content.description}\n"
+            response += "ENABLED: #{content.buildable}\n"
+            response += "STATUS: #{content.color}\n"
+            tmpReport = ""
+            for report in content.healthReport
+              tmpReport += "\n  #{report.description}"
+            response += "HEALTH: #{tmpReport}\n"
+
+            parameters = ""
+            for item in content.actions
+              if item.parameterDefinitions
+                for param in item.parameterDefinitions
+                  tmpDescription = if param.description then " - #{param.description} " else ""
+                  tmpDefault = if param.defaultParameterValue then " (default=#{param.defaultParameterValue.value})" else ""
+                  parameters += "\n  #{param.name}#{tmpDescription}#{tmpDefault}"
+
+            if parameters != ""
+              response += "PARAMETERS: #{parameters}\n"
+
+            msg.send response
+          catch error
+            msg.send error

 jenkinsList = (msg) ->
     url = process.env.HUBOT_JENKINS_URL
@@ -70,6 +116,9 @@
   robot.respond /jenkins list/i, (msg) ->
     jenkinsList(msg)

+  robot.respond /jenkins describe ([\w\.\-_]+)/i, (msg) ->
+    jenkinsDescribe(msg)
+
   robot.jenkins = {
     list: jenkinsList,
     build: jenkinsBuild


JNewApp: Add group info into apps

JNewApp: Add group info into apps

--- workers/social/lib/social/models/app.coffee
+++ workers/social/lib/social/models/app.coffee
@@ -138,6 +138,8 @@
         type            : ObjectId
         required        : yes

+      group             : String
+

     relationships       :
       creator           :
@@ -214,6 +216,7 @@
         identifier  : data.identifier
         version     : data.manifest.version
         originId    : delegate.getId()
+        group       : client.context.group

       app.save (err)->
         return callback err  if err


adding mocha tests

adding mocha tests

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

--- tests/all.coffee
+++ tests/all.coffee
@@ -0,0 +1,355 @@
+assert = require 'assert'
+dom = require "../dom"
+dom.registerGlobals global
+global.dom = dom
+global.document = dom.createDocument()
+global.window = global
+
+testSelector = (s, output) ->
+	x = document.querySelectorAll(s)
+	assert.equal x.toString(), output, s
+
+describe 'document', ->
+	it "should exist", ->
+		assert document?
+	it "has a head", ->
+		assert document.head?
+	it "has a body", ->
+		assert document.body?
+	it "has DOCUMENT_ELEMENT node type", ->
+		assert.equal document.nodeType, 9, "document.nodeType"
+	describe 'creating a new element', ->
+		div = document.createElement('div')
+		it 'has node type', ->
+			assert.equal div.nodeType, 1
+		it 'has node name', ->
+			assert.equal div.nodeName, "DIV"
+		it 'has a style object', ->
+			assert div.style
+		describe 'appending new element to document', ->
+			it 'appears in parent.childNodes', ->
+				document.body.innerHTML = ""
+				document.body.appendChild div
+				assert.equal document.body.childNodes.length, 1
+			it 'can be removed', ->
+				document.body.innerHTML = ""
+				document.body.appendChild div
+				document.body.removeChild div
+				assert.equal document.body.childNodes.length, 0
+
+	describe '.getElementsByTagName()', ->
+		it "should find a single element", ->
+			document.body.innerHTML = "
"
+			assert.equal document.body.getElementsByTagName('DIV').length, 1
+		it "should find nested elements", ->
+			document.body.innerHTML = "

"
+			assert.equal document.body.getElementsByTagName('DIV').length, 2
+		it "is not case sensitive", ->
+			document.body.innerHTML = "

"
+			assert.equal document.body.getElementsByTagName('div').length, 2
+
+	describe '.getElementById()', ->
+		it 'finds a single element', ->
+			div = document.createElement("div")
+			div.id = "getElemId"
+			document.body.appendChild(div)
+			assert.equal document.getElementById("getElemId"), div
+
+	describe ".attributes", ->
+		it "is read/write", ->
+			div = document.createElement 'div'
+			div.attributes.foo = 'bar'
+			assert.equal div.attributes.foo, 'bar'
+		it "appears in a .toString()", ->
+			div = document.createElement 'div'
+			div.attributes.foo = 'bar'
+			assert.equal div.toString(), '
'
+		it "treats .id as a special attribute", ->
+			div = document.createElement 'div'
+			div.id = 'testId'
+			assert.equal div.attributes.id, div.id
+		it "treats .className special", ->
+			div = document.createElement 'div'
+			div.className = 'foo'
+			assert.equal div.attributes.class, 'foo'
+		describe ".get/setAttribute()", ->
+			it "reads/writes the .attributes map", ->
+				div = document.createElement("div")
+				div.setAttribute("name", "foo")
+				assert.equal div.getAttribute("name"), "foo"
+		describe ".hasAttribute()", ->
+			it "is true if attr exists", ->
+				div = document.createElement("div")
+				div.setAttribute("name", "")
+				assert.equal div.hasAttribute("name"), true
+			it "is false if attr does not exist", ->
+				div = document.createElement("div")
+				assert.equal div.hasAttribute("name"), false
+		describe ".getAttributeNode()", ->
+			it "returns an attribute node with value and nodeValue", ->
+				div = document.createElement("div")
+				div.setAttribute("name", "foo")
+				attr = div.getAttributeNode("name")
+				assert.equal attr.value, "foo"
+				assert.equal attr.nodeValue, "foo"
+
+	describe ".childNodes", ->
+		it "every node should have .childNodes", ->
+			div = document.createElement("div")
+			div.id = "subChildren_parent"
+			document.body.appendChild(div)
+			span = document.createElement("span")
+			div.appendChild(span)
+			assert.equal div.childNodes.length, 1
+			nodesByTagName = div.getElementsByTagName("span")
+			assert.equal nodesByTagName.length, 1
+			assert.equal nodesByTagName[0], span
+	describe ".getElementsByClassName()", ->
+		it "should find elements by class name", ->
+			div = document.createElement("div")
+			div.id = "getElemClass_parent"
+			document.body.appendChild(div)
+			p = document.createElement("p")
+			p.id = 'classTest'
+			p.className = "alpha beta"
+			div.appendChild(p)
+			alphaNodes = div.getElementsByClassName("alpha")
+			betaNodes = div.getElementsByClassName("beta")
+			assert.equal alphaNodes.length, 1, "alphaNodes.length"
+			assert.equal betaNodes.length, 1, "betaNodes.length"
+			assert.equal alphaNodes[0], p, "alphaNodes[0]"
+			assert.equal betaNodes[0], p, "betaNodes[0]"
+	describe "fragments",  ->
+		fragment_doc = fragment = null
+		it "can be created", ->
+			fragment_doc = global.dom.createDocument()
+			fragment = fragment_doc.createDocumentFragment()
+		it "can have children", ->
+			fragment.appendChild(fragment_doc.createElement("div"))
+			fragment.appendChild(fragment_doc.createElement("p"))
+			assert.equal fragment.childNodes.length, 2, "fragment.childNodes.length"
+		it "can render toString", ->
+			assert.equal fragment.toString(), "

", "fragment.toString()"
+		it "can be appended to a node and disappear", ->
+			div = fragment_doc.createElement("div")
+			div.id = "fragment_test"
+			fragment_doc.body.appendChild(div)
+			div.appendChild(fragment)
+			assert.equal fragment_doc.toString(), '

'
+	describe "text nodes", ->
+		it "can be created", ->
+			text = document.createTextNode(" ")
+		it "has nodeValue",  ->
+			text = document.createTextNode("Harro!")
+			assert.equal(text.nodeValue, "Harro!", "text.nodeValue")
+		it "can set .data property",  ->
+			text = document.createTextNode("Harro!")
+			text.data = "BB"
+			assert.equal(text.nodeValue, "BB", "text.nodeValue")
+		it "can put html in .data",  ->
+			text = document.createTextNode("Harro!")
+			text.data = "
"
+			assert.equal(text.nodeValue, "<p>", "text.nodeValue")
+		it "can read .data back from .innerHTML (escaped)",  ->
+			text = document.createTextNode("Harro!")
+			text.data = "
"
+			div = document.createElement("div")
+			div.appendChild(text)
+			assert.equal(div.innerHTML, "<p>")
+			text.data = "Goodbye!"
+			assert.equal(div.innerHTML, "Goodbye!")
+		describe ".innerText", ->
+			text = div = null
+			it "includes direct text nodes", ->
+				text = document.createTextNode(" ")
+				div = document.createElement("div")
+				# first put some simple text in a div
+				div.appendChild(text)
+				# and confirm we see it properly via the innerHTML/Text getters
+				assert.equal div.innerHTML, " "
+				assert.equal div.innerText, " "
+			it "also includes deeply nested text nodes", ->
+				# then create a span with some more text
+				span = document.createElement "span"
+				text2 = document.createTextNode "hello"
+				span.appendChild text2
+				assert.equal span.innerText, "hello"
+				# and insert it along side the existing text
+				div.appendChild(span)
+				# and confirm that the innerText getter puts the two together
+				assert.equal(div.innerText, " hello")
+	describe "input nodes", ->
+		it "treats .value as an attribute-property", ->
+			input = document.createElement("input")
+			input.value = 'bar'
+			input.setAttribute('value', 'foo')
+			assert.equal input.value, 'foo', 'input.value'
+			assert.equal input.value, input.getAttribute('value'), 'input.getAttribute("value")'
+		describe "<select/option>", ->
+			select = optionA = optionB = null
+			it "can be created", ->
+				select = document.createElement("select")
+				optionA = document.createElement("option")
+				optionB = document.createElement("option")
+				assert.equal optionA.constructor.name, "HTMLOptionElement"
+				assert.equal optionA.constructor.__super__.constructor.name, "HTMLInputElement"
+			it "<option> can have value", ->
+				optionA.value = '1'
+				optionA.innerText = 'A'
+				optionB.innerText = 'B'
+				assert.equal optionA.value, '1', 'optionA.value'
+				assert.equal optionB.value, 'B', 'optionB.value'
+			it "<select> can have <option> children", ->
+				select.appendChild(optionA)
+				select.appendChild(optionB)
+			it ".selectedIndex is populated", ->
+				assert.equal select.selectedIndex, 0, 'select.selectedIndex'
+			it ".value is populated", ->
+				assert.equal select.value, '1', 'select.value'
+			it ".selectedIndex is settable and updates .value", ->
+				select.selectedIndex = 1
+				assert.equal select.selectedIndex, 1, 'select.selectedIndex * 2'
+				assert.equal select.value, 'B', 'select.value'
+	it "input_radio",  ->
+		test_doc = global.dom.createDocument()
+		test_doc.body.innerHTML = "<input type='radio' selected>"
+		input = test_doc.body.childNodes[0]
+		assert.equal input.constructor.name, "HTMLInputElement"
+		assert.equal input.hasAttribute('selected'), true, 'input.hasAttr'
+		assert.equal input.getAttribute('selected'), ''
+		assert.equal input.selected, true, 'input.selected'
+		input.removeAttribute('selected')
+		assert.equal input.selected, false, 'input.selected'
+		assert.equal input.value, "on"
+	it "input_checkbox",  ->
+		test_doc = global.dom.createDocument()
+		test_doc.body.innerHTML = "<input type='checkbox' checked >"
+		input = test_doc.body.childNodes[0]
+		assert.equal input.checked, true, 'input.checked'
+		assert.equal input.value, "on"
+	it "can create/render comments",  ->
+		comment_doc = global.dom.createDocument()
+		comment = comment_doc.createComment("comment text")
+		assert.equal comment.nodeValue, "comment text"
+		comment_doc.body.appendChild(comment)
+		assert.equal comment_doc.body.toString(), ''
+	it "can create/render conditional comments",  ->
+		doc = global.dom.createDocument()
+		comment = doc.createCComment("if lt IE 9")
+		script = doc.createElement('script')
+		script.setAttribute('src', 'ie.js')
+		comment.appendChild script
+		doc.body.appendChild(comment)
+		assert.equal doc.body.toString(), '


fetch me some kait

fetch me some kait

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

--- scripts/simpleResponses.coffee
+++ scripts/simpleResponses.coffee
@@ -0,0 +1,8 @@
+# Commands:
+#   hubot kait disapproves - Kait disapproves!
+
+
+
+module.exports = (robot) ->
+  robot.respond /kait disapproves/i, (msg) ->
+    msg.send "https://goo.gl/cTmPh7"


Remove nulled ivars

Remove nulled ivars

--- lib/fuzzy-finder.coffee
+++ lib/fuzzy-finder.coffee
@@ -1,8 +1,4 @@
 module.exports =
-  projectPaths: null
-  fuzzyFinderView: null
-  loadPathsTask: null
-
   activate: (state) ->
     atom.workspaceView.command 'fuzzy-finder:toggle-file-finder', =>
       @createProjectView().toggle()


Tweak period location in error messages

Tweak period location in error messages

--- src/tree-view.coffee
+++ src/tree-view.coffee
@@ -226,7 +226,7 @@
           fs.move(oldPath, newPath)
           dialog.close()
         catch e
-          dialog.showError("Error: #{e.message}. Try a different path")
+          dialog.showError("Error: #{e.message} Try a different path.")

     @rootView.append(dialog)

@@ -272,7 +272,7 @@
             @rootView.open(path)
             dialog.close()
         catch e
-          dialog.showError("Error: #{e.message}. Try a different path")
+          dialog.showError("Error: #{e.message} Try a different path.")

     @rootView.append(dialog)


Add name property.

Add name property.

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


add credentialdata.test.coffee

add credentialdata.test.coffee


Use user's email ad the unique identifier otherwise we get duplicates when the same user signs in from two devices.

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/muffin/tutorial-twitter-clone.git/'


Adds stubs for Event-browsing specs.

Adds stubs for Event-browsing specs.

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