add tests for @b-text

add tests for @b-text

--- test/index-test.coffee
+++ test/index-test.coffee
@@ -298,3 +298,49 @@
         ]
         template = bHtml source
         assert.deepEqual template(context), expected
+
+  context '@b-text', ->
+    context 'simple', ->
+      it 'works', ->
+        source = '''
+          <p
+            @b-text message
+        '''
+        context =
+          message: 'hello!'
+        expected = [
+          tag: 'p'
+          attrs: {}
+          children: [
+            'hello!'
+          ]
+        ]
+        template = bHtml source
+        assert.deepEqual template(context), expected
+
+    context 'complex', ->
+      it 'works', ->
+        source = '''
+          <p
+            @class user
+            <span
+              @class user-name
+              @b-text user.name
+              dummy text
+        '''
+        context =
+          user:
+            name: 'bouzuya'
+        expected = [
+          tag: 'p'
+          attrs:
+            class: 'user'
+          children: [
+            tag: 'span'
+            attrs:
+              class: 'user-name'
+            children: ['bouzuya']
+          ]
+        ]
+        template = bHtml source
+        assert.deepEqual template(context), expected


Backbone View abstraction that automates sliding on/off the stack of views

error: pathspec 'js/mobile/backbone.screen.coffee' did not match any file(s) known to git

--- js/mobile/backbone.screen.coffee
+++ js/mobile/backbone.screen.coffee
@@ -0,0 +1,33 @@
+# Since every view transition in Splash is done with a sliding motion we want to
+# define a new type Backbone.Screen that inherits from Backbone.View but has the
+# necessary sliding mechanisms built in.
+class Backbone.Screen extends Backbone.View
+  # Brings a view onto the screen by putting its el into the passed selector and
+  # then animating it onto the screen with the given `dir`.  This can be either
+  # `rtl` or `ltr`.  After it's on the screen a little clean-up is performed.
+  construct: (_el, dir) =>
+    cls = 'new-' + dir
+    ($ @el).addClass 'animatable ' + cls
+    _el.append @el
+
+    # This is a little hack to delay the removing of the class.  If it was
+    # removed straight out then the animation doesn't show up and the view just
+    # appears in its final position unanimated.  By delaying the removal of the
+    # class a millisecond we get the desired effect of the view animating onto
+    # the screen with a sliding motion.
+    setTimeout @finish, 1, cls
+
+  finish: (cls) =>
+    ($ @el).removeClass cls
+    ($ @el).addClass 'finish' # Fixes a bug with absolute positioned elements
+
+  # Destroys this view by sliding it off the screen in the direction passed in
+  # `dir`.  This can be either `rtl` or `ltr`.  After the animation is finished
+  # the view is unbound and removed from the DOM.
+  destruct: (dir) =>
+    ($ @el).on 'webkitTransitionEnd', =>
+      @unbind()
+      @remove()
+
+    # Now add the required transformation via a CSS class to this view
+    ($ @el).addClass 'old-' + dir


Added hasAttributes tests

Added hasAttributes tests

error: pathspec 'tests/jasmine/server/unit/hasAttributesSpec.coffee' did not match any file(s) known to git

--- tests/jasmine/server/unit/hasAttributesSpec.coffee
+++ tests/jasmine/server/unit/hasAttributesSpec.coffee
@@ -0,0 +1,20 @@
+describe "hasAttributes utility function", ->
+
+    obj2 =
+        name: "Bob"
+        age: 10
+
+    obj4 =
+        name: "Fred"
+        age: 100
+        language: "Frerman"
+        atHome: true
+
+    it "returns true if the object has (only) all the attributes", ->
+        expect(hasAttributes obj2, ["name", "age"]).toBe true
+
+    it "returns true if the object has (more than) all the attributes", ->
+        expect(hasAttributes obj4, ["name", "age"]).toBe true
+
+    it "returns true if the object does not have all the attributes", ->
+        expect(hasAttributes obj2, ["name", "age", "gender"]).toBe false


check in the draft of the pinpoint concept implementation

error: pathspec 'library/exposure/pinpoint.coffee' did not match any file(s) known to git

--- library/exposure/pinpoint.coffee
+++ library/exposure/pinpoint.coffee
@@ -0,0 +1,91 @@
+###
+Copyright (c) 2013, Alexander Cherniuk <ts33kr@gmail.com>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+   list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+###
+
+_ = require "lodash"
+assert = require "assert"
+asciify = require "asciify"
+connect = require "connect"
+request = require "request"
+logger = require "winston"
+colors = require "colors"
+async = require "async"
+nconf = require "nconf"
+https = require "https"
+http = require "http"
+util = require "util"
+
+{external} = require "../membrane/remote"
+{Barebones} = require "../membrane/skeleton"
+{Preflight} = require "../membrane/preflight"
+
+# This abstract compound provides the curious functionality that is
+# greatly improving the way you would construct the client side code
+# that is responsible for rendering UI elements. It allows you to run
+# client side (external) code once the specified selector is available.
+# All of this lets you easily implement the viewport/slow architecture.
+# It also allows you to react on when selector changes or disappears.
+module.exports.Pinpoint = class Pinpoint extends Preflight
+
+    # This is a marker that indicates to some internal subsystems
+    # that this class has to be considered abstract and therefore
+    # can not be treated as a complete class implementation. This
+    # mainly is used to exclude or account for abstract classes.
+    # Once inherited from, the inheritee is not abstract anymore.
+    @abstract yes
+
+    # This block here defines a set of Bower dependencies that are
+    # required by the client site part of the code that constitutes
+    # this service or compound. Dependencies can be restricted to a
+    # certain version and also they can have customized entrypoint.
+    # Refer to `BowerSupport` class implementation for information.
+    @bower "mutation-summary", "src/mutation-summary.js"
+
+    # Pinpoint when the specified selector appears (or if it already
+    # exists) and then invoke the supplied rendering function, which
+    # will receive the newly pinpointed node as its first argument.
+    # If multiple nodes with this selector is found, then renderer
+    # will be invoked once for every discovered node of a selector.
+    # Selectors must conform to the strict subset of CSS selectors.
+    @pinpoint: @transferred (selector, renderer) ->
+        noSelector = "no valid CSS selector is supplied"
+        noRenderer = "no valid rendering function given"
+        noLibrary = "mutation-summary library is missing"
+        assert _.isFunction(MutationSummary), noLibrary
+        assert _.isFunction(renderer or no), noRenderer
+        assert _.isString(selector or null), noSelector
+        assert instruct = queries: [element: selector]
+        pp = "pinpointing %s selector for a #{@service}"
+        try logger.info pp.toString(), selector.toString()
+        go = (n) => try $(n).data("owners") or new Array()
+        make = -> observer = new MutationSummary instruct
+        callback = (fn) -> instruct.callback = fn; make()
+        return callback (sum) => _.each sum, (summary) =>
+            na = "missing the element addition summary"
+            pe = "pinpointed %s elements for %s service"
+            assert _.isArray(added = summary.added), na
+            logger.info pe, added.length, this.service
+            $(nod).data owners: go(nod) for nod in added
+            go(nod).push this for nod in added or Array()
+            _.each added, (nod) -> renderer n, go(nod)


Helpers tests

Helpers tests

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/weber/compound-ex4.git/'


fix project list

fix project list

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


remove trailing space

remove trailing space

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/rremizov/github-notifier.git/'


Include option to not scroll the page

Include option to not scroll the page

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


sets nav bar title

sets nav bar title

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