{"action":"created","comment":{"url":"https://api.github.com/repos/ecomfe/ub-ria-ui/pulls/comments/23824534","id":23824534,"diff_hunk":"@@ -0,0 +1,457 @@\n+/**\n+ * 输入控件自动提示扩展\n+ * @file: AutoComplete.js\n+ * @author: liwei\n+ *\n+ */\n+\n+define(function (require) {\n+\n+    var lib = require('esui/lib');\n+    var Layer = require('esui/Layer');\n+    var helper = new (require('esui/Helper'));\n+    var Extension = require('esui/Extension');\n+    var eoo = require('eoo');\n+    var cursorHelper = require('helper/CursorPositionHelper');\n+\n+    var MAIN_CLASS = helper.getPrefixClass('autocomplete');\n+    var ITEM_CLASS = helper.getPrefixClass('autocomplete-item');\n+    var ITEM_HOVER_CLASS = helper.getPrefixClass('autocomplete-item-hover');\n+    var CHAR_SELECTED_CLASS = helper.getPrefixClass('autocomplete-item-char-selected');\n+    var TEXT_LINE = 'TextLine';\n+    var TEXT_BOX = 'TextBox';\n+    var INPUT = 'input';\n+    var TEXT = 'text';\n+\n+    function filter(value, datasource) {\n+        var ret = [];\n+        for (var i = 0, len = datasource.length; i < len; i++) {\n+            var data = datasource[i];\n+            if (data.indexOf(value) === 0) {\n+                ret.push(data);\n+            }\n+        }\n+        return ret;\n+    }\n+\n+    function escapeRegex(value) {\n+        return value.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, '\\\\$&');\n+    }\n+\n+    function repaintSuggest(value) {\n+        if (!value) {\n+            renderSuggest.call(this);\n+            return;\n+        }\n+        var me = this;\n+        if (typeof this.target.datasource === 'function') {\n+            this.target.datasource.call(this, value, function (data) {\n+                // renderSuggest.call(me, filter(value, data), value);\n+                renderSuggest.call(me, data, value);\n+            });\n+        }\n+        else if (this.target.datasource && this.target.datasource.length) {\n+            renderSuggest.call(me, filter(value, this.target.datasource), value);\n+        }\n+    }\n+\n+    function renderSuggest(data, value) {\n+        var ret = '';\n+        if (data && data.length) {\n+            for (var i = 0, len = data.length; i < len; i++) {\n+                ret += '<li class=\"'\n+                    + ITEM_CLASS\n+                    + (i === 0 ? ' ' + ITEM_HOVER_CLASS : '')\n+                    + ' \"><span>'\n+                    + data[i].replace(new RegExp('^' + value), '<i class=\"'\n+                    + CHAR_SELECTED_CLASS + '\">' + value + '</i>') + '</span></li>';\n+            }\n+        }\n+        this.layer.repaint(ret);\n+        ret ? lib.bind(showSuggest, this)() : lib.bind(hideSuggest, this)();\n+    }\n+\n+    var obj = {};\n+\n+    function initMain() {\n+        var element = this.getElement();\n+        lib.addClass(element, helper.getPrefixClass('dropdown'));\n+\n+        this.addCustomClasses([MAIN_CLASS]);\n+        this.control.main.appendChild(element);\n+    }\n+\n+    function initEvents() {\n+        var me = this;\n+        var layerElement = me.layer.getElement(false);\n+        var target = me.target;\n+        var helper = target.helper;\n+        var inputElement;\n+\n+        this.inputElement =\n+            helper.getPart(target.type === TEXT_LINE ? TEXT : INPUT);\n+        inputElement = this.inputElement;\n+\n+        helper.addDOMEvent(layerElement, 'click', obj.selectItem = function (e) {\n+            lib.bind(setTargetValue, me)(e.target.textContent);\n+            lib.bind(hideSuggest, me)();\n+        });\n+\n+        helper.addDOMEvent(inputElement, 'keydown', obj.keyboard = function (e) {\n+            if (me.layer.isHidden()) {\n+                return;\n+            }\n+\n+            switch (e.keyCode) {\n+                // up\n+                case 38:\n+                    e.preventDefault();\n+                    lib.bind(moveTo, me)(-1);\n+                    break;\n+                    // down\n+                case 40:\n+                    e.preventDefault();\n+                    lib.bind(moveTo, me)(1);\n+                    break;\n+                    // esc\n+                case 27:\n+                    lib.bind(hideSuggest, me)();\n+                    break;\n+                    // enter\n+                case 13:\n+                    {\n+                        e.preventDefault();\n+                        var selectedItem = lib.bind(getSelectedItem, me)();\n+                        if (!selectedItem) {\n+                            return;\n+                        }\n+                        lib.bind(setTargetValue, me)(selectedItem.textContent);\n+                        lib.bind(hideSuggest, me)();\n+                        break;\n+                    }\n+            }\n+        });\n+\n+        helper.addDOMEvent(inputElement, INPUT, obj.oninput = function oninput(e) {\n+            var elementValue = inputElement.value;\n+\n+            if (!elementValue || me.endWithClosefireCharRE.test(elementValue)) {\n+                lib.bind(repaintSuggest, me)('');\n+                lib.bind(hideSuggest, me)();\n+                return;\n+            }\n+\n+            if (me.splitchar !== ' ') {\n+                if (/\\s$/.test(elementValue)) {\n+                    return;\n+                }\n+            }\n+\n+            if (me.endWithSplitCharRE.test(elementValue)) {\n+                return;\n+            }\n+\n+            elementValue = lib.bind(extractMatchingWord, me)(elementValue);\n+\n+            if (!elementValue) {\n+                return;\n+            }\n+\n+            repaintSuggest.call(me, elementValue);\n+        });\n+\n+        helper.addDOMEvent(inputElement, 'blur', obj.blurinput = function (e) {\n+            if (obj.blurInputTimer) {\n+                clearTimeout(obj.blurInputTimer);\n+                obj.blurInputTimer = null;\n+            }\n+            obj.blurInputTimer = setTimeout(function () {\n+                lib.bind(hideSuggest, me)();\n+            }, 250);\n+        });\n+    }\n+\n+    function setTargetValue(value) {\n+        var targetValue = this.target.getValue();\n+        targetValue = lib.trim(targetValue);\n+\n+        if (/\\n/.test(targetValue)) {\n+            var arr = targetValue.split(/\\n/);\n+            targetValue = arr && arr.pop();\n+        }\n+\n+        if (this.splitCharRE) {\n+            if (this.fireCharRE.test(targetValue)) {\n+                value = targetValue.replace(this.fireCharRE, value);\n+            }\n+            else if (this.splitCharRE.test(targetValue)) {\n+                value = targetValue.replace(this.splitCharRE, this.splitchar + value);\n+            }\n+        }\n+        else if (this.fireCharRE.test(targetValue)) {\n+            value = targetValue.replace(this.fireCharRE, value);\n+        }\n+\n+        if (arr && arr.length) {\n+            arr.push(value);\n+            value = arr.join('\\n');\n+        }\n+        this.target.setValue(value);\n+    }\n+\n+    function extractMatchingWord(value) {\n+        if (this.splitCharRE && this.splitCharRE.test(value)) {\n+            var arr = this.splitCharRE.exec(value);\n+            value = arr && arr[1];\n+        }\n+\n+        if (value) {\n+            if (this.fireCharRE.test(value)) {\n+                arr = this.fireCharRE.exec(value);\n+                value = arr && arr[1];\n+            }\n+            else if (/\\n/.test(value)) {\n+                arr = value.split(/\\n/);\n+                value = arr && arr[arr.length - 1];\n+            }\n+        }\n+        return value;\n+    }\n+\n+    function removemain() {\n+        this.target.main.removeChild(this.layer.getElement(false));\n+    }\n+\n+    function showSuggest() {\n+        this.layer.show();\n+        var input = this.inputElement;\n+        var style = this.layer.getElement(false).style;\n+        var offset = lib.getOffset(this.target.main);\n+        if (input.nodeName.toLowerCase() === 'textarea') {\n+            // TODO: 这里计算光标的像素坐标还是没有非常精确\n+            var pos = cursorHelper.getInputPositon(input);\n+            var scrollTop = input.scrollTop;\n+            var scrollLeft = input.scrollLeft;\n+            style.left = pos.left - offset.left - scrollLeft + 'px';\n+            style.top = pos.top - offset.top - scrollTop + parseInt(lib.getStyle(input, 'fontSize'), 10) + 'px';\n+        }\n+        else {\n+            style.left = 0;\n+            style.top = offset.height + 'px';\n+        }\n+    }\n+\n+    function hideSuggest() {\n+        this.layer.hide();\n+    }\n+\n+    // 1: down  -1: up\n+    function moveTo(updown) {\n+        var element = this.layer.getElement(false);\n+        var items = element.children;\n+        var selectedItemIndex = lib.bind(getSelectedItemIndex, this)();\n+\n+        if (selectedItemIndex !== -1) {\n+            var selectedItem = items[selectedItemIndex];\n+            selectedItem && lib.removeClass(selectedItem, ITEM_HOVER_CLASS);\n+        }\n+\n+\n+        if (updown === -1) {\n+            if (selectedItemIndex === -1 || selectedItemIndex === 0) {\n+                selectedItemIndex = items.length - 1;\n+            }\n+            else {\n+                selectedItemIndex--;\n+            }\n+        }\n+        else if (updown === 1) {\n+            if (selectedItemIndex === -1 || selectedItemIndex === items.length - 1) {\n+                selectedItemIndex = 0;\n+            }\n+            else {\n+                selectedItemIndex++;\n+            }\n+        }\n+        selectedItem = items[selectedItemIndex];\n+        selectedItem && lib.addClass(selectedItem, ITEM_HOVER_CLASS);\n+    }\n+\n+    function getSelectedItemIndex() {\n+        var element = this.layer.getElement(false);\n+        var items = element.children;\n+        var selectedItemIndex = -1;\n+        for (var i = 0, len = items.length; i < len; i++) {\n+            if (lib.hasClass(items[i], ITEM_HOVER_CLASS)) {\n+                selectedItemIndex = i;\n+                break;\n+            }\n+        }\n+        return selectedItemIndex;\n+    }\n+\n+    function getSelectedItem() {\n+        var element = this.layer.getElement(false);\n+        var selectedItem;\n+        var selectedItemIndex = lib.bind(getSelectedItemIndex, this)();\n+        if (selectedItemIndex !== -1) {\n+            selectedItem = element.children[selectedItemIndex];\n+        }\n+        return selectedItem;\n+    }\n+\n+    var layerExports = {};\n+    /**\n+     * 自动提示层构造器\n+     * @param {Object} [control] TextBox控件\n+     */\n+    layerExports.constructor = function (control) {\n+        this.$super(arguments);\n+        var helper = control.helper;\n+        var controlType = control.type === TEXT_LINE ? TEXT : INPUT;\n+        var ele = helper.getPart(controlType);\n+        if (ele.tagName.toLowerCase() === INPUT) {\n+            this.dock = {\n+                strictWidth: true\n+            };\r\n+        }\n+        this.initStructure();\n+    };\n+\n+    layerExports.type = 'AutoCompleteLayer';\n+\n+    layerExports.initStructure = function () {\n+        lib.bind(initMain, this)();\n+    };\n+\n+    layerExports.repaint = function (value) {\n+        var element = this.getElement(false);\n+        if (element) {\n+            this.render(element, value);\n+        }\n+    };\n+\n+    layerExports.render = function (element, value) {\n+        if (value != null) {\n+            element.innerHTML = value;\n+        }\n+    };\n+\n+    layerExports.isHidden = function () {\n+        var element = this.getElement();\n+        var ret;\n+        if (!element || this.control.helper.isPart(element, 'layer-hidden')) {\n+            ret = true;\n+        }\n+        else {\n+            ret = false;\n+        }\n+        return ret;\n+    };\n+\n+    layerExports.nodeName = 'ol';\n+\n+    var AutoCompleteLayer = eoo.create(Layer, layerExports);\n+\n+    var exports = {};\n+\n+    /**\n+     * 输入控件自动提示扩展\n+     *\n+     * 当输入控件加上此扩展后，其自动提示功能将由扩展自动提供\n+     *\n+     * @class extension.AutoComplete\n+     * @extends Extension\n+     * @constructor\n+     */\n+    exports.constructor = function () {\n+        /**\n+         * @property 只作为分隔符, 不作为匹配word的成分参与匹配, 建议使用逗号或空格作为分隔符\n+         */\n+        this.splitchar;\n+        /**\n+         * @property 触发新的匹配动作, 并作为匹配word的一部分参与匹配\n+         */\n+        this.firechar = '{';\n+        /**\n+         * @property 结束匹配动作\n+         */\n+        this.closefirechar = '}';\n+\n+        this.$super(arguments);\n+\n+        if (this.splitchar) {\n+            this.escapedSplitchar = escapeRegex(this.splitchar);\n+            this.splitCharRE = new RegExp(this.escapedSplitchar + '([^' + this.escapedSplitchar + '\\\\s' + ']+)$');\n+        }\n+        this.escapedFirechar = escapeRegex(this.firechar);\n+        this.escapedClosefirechar = escapeRegex(this.closefirechar);\n+        this.endWithSplitCharRE = new RegExp(this.escapedSplitchar + '$');\n+        this.endWithClosefireCharRE = new RegExp(this.escapedClosefirechar + '$');\n+\n+        this.fireCharRE = new RegExp('('\n+            + this.escapedFirechar\n+            + '[^' + this.escapedSplitchar\n+            + this.escapedClosefirechar\n+            + this.escapedFirechar + '\\\\s'\n+            + ']*)$');\n+    };\n+\n+    /**\n+     * 指定扩展类型，始终为`\"AutoComplete\"`\n+     *\n+     * @type {string}\n+     */\n+    exports.type = 'AutoComplete';\n+\n+    exports.attachTo = function () {\n+        this.$super(arguments);\n+\n+        var me = this;","path":"src/AutoComplete.js","position":410,"original_position":410,"commit_id":"4d65d3e6a9b596fbf5ae6654554515eb6d59f073","original_commit_id":"4d65d3e6a9b596fbf5ae6654554515eb6d59f073","user":{"login":"otakustay","id":639549,"avatar_url":"https://avatars.githubusercontent.com/u/639549?v=3","gravatar_id":"","url":"https://api.github.com/users/otakustay","html_url":"https://github.com/otakustay","followers_url":"https://api.github.com/users/otakustay/followers","following_url":"https://api.github.com/users/otakustay/following{/other_user}","gists_url":"https://api.github.com/users/otakustay/gists{/gist_id}","starred_url":"https://api.github.com/users/otakustay/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/otakustay/subscriptions","organizations_url":"https://api.github.com/users/otakustay/orgs","repos_url":"https://api.github.com/users/otakustay/repos","events_url":"https://api.github.com/users/otakustay/events{/privacy}","received_events_url":"https://api.github.com/users/otakustay/received_events","type":"User","site_admin":false},"body":"不要`me`","created_at":"2015-01-30T05:13:13Z","updated_at":"2015-01-30T05:13:13Z","html_url":"https://github.com/ecomfe/ub-ria-ui/pull/66#discussion_r23824534","pull_request_url":"https://api.github.com/repos/ecomfe/ub-ria-ui/pulls/66","_links":{"self":{"href":"https://api.github.com/repos/ecomfe/ub-ria-ui/pulls/comments/23824534"},"html":{"href":"https://github.com/ecomfe/ub-ria-ui/pull/66#discussion_r23824534"},"pull_request":{"href":"https://api.github.com/repos/ecomfe/ub-ria-ui/pulls/66"}}},"pull_request":{"url":"https://api.github.com/repos/ecomfe/ub-ria-ui/pulls/66","id":28336361,"html_url":"https://github.com/ecomfe/ub-ria-ui/pull/66","diff_url":"https://github.com/ecomfe/ub-ria-ui/pull/66.diff","patch_url":"https://github.com/ecomfe/ub-ria-ui/pull/66.patch","issue_url":"https://api.github.com/repos/ecomfe/ub-ria-ui/issues/66","number":66,"state":"open","locked":false,"title":"AutoCompleteInput Extension","user":{"login":"yankun01","id":6520754,"avatar_url":"https://avatars.githubusercontent.com/u/6520754?v=3","gravatar_id":"","url":"https://api.github.com/users/yankun01","html_url":"https://github.com/yankun01","followers_url":"https://api.github.com/users/yankun01/followers","following_url":"https://api.github.com/users/yankun01/following{/other_user}","gists_url":"https://api.github.com/users/yankun01/gists{/gist_id}","starred_url":"https://api.github.com/users/yankun01/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yankun01/subscriptions","organizations_url":"https://api.github.com/users/yankun01/orgs","repos_url":"https://api.github.com/users/yankun01/repos","events_url":"https://api.github.com/users/yankun01/events{/privacy}","received_events_url":"https://api.github.com/users/yankun01/received_events","type":"User","site_admin":false},"body":"@iamweilee 添加的输入提示组件。","created_at":"2015-01-30T03:47:14Z","updated_at":"2015-01-30T05:13:13Z","closed_at":null,"merged_at":null,"merge_commit_sha":"b286f38b1acdf3fdf9cd3b8c7baf4c487c9541d7","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/ecomfe/ub-ria-ui/pulls/66/commits","review_comments_url":"https://api.github.com/repos/ecomfe/ub-ria-ui/pulls/66/comments","review_comment_url":"https://api.github.com/repos/ecomfe/ub-ria-ui/pulls/comments/{number}","comments_url":"https://api.github.com/repos/ecomfe/ub-ria-ui/issues/66/comments","statuses_url":"https://api.github.com/repos/ecomfe/ub-ria-ui/statuses/4d65d3e6a9b596fbf5ae6654554515eb6d59f073","head":{"label":"yankun01:1.0/feature/measures-2nd","ref":"1.0/feature/measures-2nd","sha":"4d65d3e6a9b596fbf5ae6654554515eb6d59f073","user":{"login":"yankun01","id":6520754,"avatar_url":"https://avatars.githubusercontent.com/u/6520754?v=3","gravatar_id":"","url":"https://api.github.com/users/yankun01","html_url":"https://github.com/yankun01","followers_url":"https://api.github.com/users/yankun01/followers","following_url":"https://api.github.com/users/yankun01/following{/other_user}","gists_url":"https://api.github.com/users/yankun01/gists{/gist_id}","starred_url":"https://api.github.com/users/yankun01/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yankun01/subscriptions","organizations_url":"https://api.github.com/users/yankun01/orgs","repos_url":"https://api.github.com/users/yankun01/repos","events_url":"https://api.github.com/users/yankun01/events{/privacy}","received_events_url":"https://api.github.com/users/yankun01/received_events","type":"User","site_admin":false},"repo":{"id":28176101,"name":"ub-ria-ui","full_name":"yankun01/ub-ria-ui","owner":{"login":"yankun01","id":6520754,"avatar_url":"https://avatars.githubusercontent.com/u/6520754?v=3","gravatar_id":"","url":"https://api.github.com/users/yankun01","html_url":"https://github.com/yankun01","followers_url":"https://api.github.com/users/yankun01/followers","following_url":"https://api.github.com/users/yankun01/following{/other_user}","gists_url":"https://api.github.com/users/yankun01/gists{/gist_id}","starred_url":"https://api.github.com/users/yankun01/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yankun01/subscriptions","organizations_url":"https://api.github.com/users/yankun01/orgs","repos_url":"https://api.github.com/users/yankun01/repos","events_url":"https://api.github.com/users/yankun01/events{/privacy}","received_events_url":"https://api.github.com/users/yankun01/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/yankun01/ub-ria-ui","description":"UI components for ub ria applications - standardized & implemented","fork":true,"url":"https://api.github.com/repos/yankun01/ub-ria-ui","forks_url":"https://api.github.com/repos/yankun01/ub-ria-ui/forks","keys_url":"https://api.github.com/repos/yankun01/ub-ria-ui/keys{/key_id}","collaborators_url":"https://api.github.com/repos/yankun01/ub-ria-ui/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/yankun01/ub-ria-ui/teams","hooks_url":"https://api.github.com/repos/yankun01/ub-ria-ui/hooks","issue_events_url":"https://api.github.com/repos/yankun01/ub-ria-ui/issues/events{/number}","events_url":"https://api.github.com/repos/yankun01/ub-ria-ui/events","assignees_url":"https://api.github.com/repos/yankun01/ub-ria-ui/assignees{/user}","branches_url":"https://api.github.com/repos/yankun01/ub-ria-ui/branches{/branch}","tags_url":"https://api.github.com/repos/yankun01/ub-ria-ui/tags","blobs_url":"https://api.github.com/repos/yankun01/ub-ria-ui/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/yankun01/ub-ria-ui/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/yankun01/ub-ria-ui/git/refs{/sha}","trees_url":"https://api.github.com/repos/yankun01/ub-ria-ui/git/trees{/sha}","statuses_url":"https://api.github.com/repos/yankun01/ub-ria-ui/statuses/{sha}","languages_url":"https://api.github.com/repos/yankun01/ub-ria-ui/languages","stargazers_url":"https://api.github.com/repos/yankun01/ub-ria-ui/stargazers","contributors_url":"https://api.github.com/repos/yankun01/ub-ria-ui/contributors","subscribers_url":"https://api.github.com/repos/yankun01/ub-ria-ui/subscribers","subscription_url":"https://api.github.com/repos/yankun01/ub-ria-ui/subscription","commits_url":"https://api.github.com/repos/yankun01/ub-ria-ui/commits{/sha}","git_commits_url":"https://api.github.com/repos/yankun01/ub-ria-ui/git/commits{/sha}","comments_url":"https://api.github.com/repos/yankun01/ub-ria-ui/comments{/number}","issue_comment_url":"https://api.github.com/repos/yankun01/ub-ria-ui/issues/comments/{number}","contents_url":"https://api.github.com/repos/yankun01/ub-ria-ui/contents/{+path}","compare_url":"https://api.github.com/repos/yankun01/ub-ria-ui/compare/{base}...{head}","merges_url":"https://api.github.com/repos/yankun01/ub-ria-ui/merges","archive_url":"https://api.github.com/repos/yankun01/ub-ria-ui/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/yankun01/ub-ria-ui/downloads","issues_url":"https://api.github.com/repos/yankun01/ub-ria-ui/issues{/number}","pulls_url":"https://api.github.com/repos/yankun01/ub-ria-ui/pulls{/number}","milestones_url":"https://api.github.com/repos/yankun01/ub-ria-ui/milestones{/number}","notifications_url":"https://api.github.com/repos/yankun01/ub-ria-ui/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/yankun01/ub-ria-ui/labels{/name}","releases_url":"https://api.github.com/repos/yankun01/ub-ria-ui/releases{/id}","created_at":"2014-12-18T09:04:49Z","updated_at":"2014-12-18T09:04:49Z","pushed_at":"2015-01-30T03:43:03Z","git_url":"git://github.com/yankun01/ub-ria-ui.git","ssh_url":"git@github.com:yankun01/ub-ria-ui.git","clone_url":"https://github.com/yankun01/ub-ria-ui.git","svn_url":"https://github.com/yankun01/ub-ria-ui","homepage":null,"size":363,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":3,"mirror_url":null,"open_issues_count":0,"forks":3,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"ecomfe:1.0/feature/measures-2nd","ref":"1.0/feature/measures-2nd","sha":"a4207f34b036ef8620cb9528aa906f9dde2e1212","user":{"login":"ecomfe","id":2268460,"avatar_url":"https://avatars.githubusercontent.com/u/2268460?v=3","gravatar_id":"","url":"https://api.github.com/users/ecomfe","html_url":"https://github.com/ecomfe","followers_url":"https://api.github.com/users/ecomfe/followers","following_url":"https://api.github.com/users/ecomfe/following{/other_user}","gists_url":"https://api.github.com/users/ecomfe/gists{/gist_id}","starred_url":"https://api.github.com/users/ecomfe/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ecomfe/subscriptions","organizations_url":"https://api.github.com/users/ecomfe/orgs","repos_url":"https://api.github.com/users/ecomfe/repos","events_url":"https://api.github.com/users/ecomfe/events{/privacy}","received_events_url":"https://api.github.com/users/ecomfe/received_events","type":"Organization","site_admin":false},"repo":{"id":23924615,"name":"ub-ria-ui","full_name":"ecomfe/ub-ria-ui","owner":{"login":"ecomfe","id":2268460,"avatar_url":"https://avatars.githubusercontent.com/u/2268460?v=3","gravatar_id":"","url":"https://api.github.com/users/ecomfe","html_url":"https://github.com/ecomfe","followers_url":"https://api.github.com/users/ecomfe/followers","following_url":"https://api.github.com/users/ecomfe/following{/other_user}","gists_url":"https://api.github.com/users/ecomfe/gists{/gist_id}","starred_url":"https://api.github.com/users/ecomfe/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ecomfe/subscriptions","organizations_url":"https://api.github.com/users/ecomfe/orgs","repos_url":"https://api.github.com/users/ecomfe/repos","events_url":"https://api.github.com/users/ecomfe/events{/privacy}","received_events_url":"https://api.github.com/users/ecomfe/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ecomfe/ub-ria-ui","description":"UI components for ub ria applications - standardized & implemented","fork":false,"url":"https://api.github.com/repos/ecomfe/ub-ria-ui","forks_url":"https://api.github.com/repos/ecomfe/ub-ria-ui/forks","keys_url":"https://api.github.com/repos/ecomfe/ub-ria-ui/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ecomfe/ub-ria-ui/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ecomfe/ub-ria-ui/teams","hooks_url":"https://api.github.com/repos/ecomfe/ub-ria-ui/hooks","issue_events_url":"https://api.github.com/repos/ecomfe/ub-ria-ui/issues/events{/number}","events_url":"https://api.github.com/repos/ecomfe/ub-ria-ui/events","assignees_url":"https://api.github.com/repos/ecomfe/ub-ria-ui/assignees{/user}","branches_url":"https://api.github.com/repos/ecomfe/ub-ria-ui/branches{/branch}","tags_url":"https://api.github.com/repos/ecomfe/ub-ria-ui/tags","blobs_url":"https://api.github.com/repos/ecomfe/ub-ria-ui/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ecomfe/ub-ria-ui/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ecomfe/ub-ria-ui/git/refs{/sha}","trees_url":"https://api.github.com/repos/ecomfe/ub-ria-ui/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ecomfe/ub-ria-ui/statuses/{sha}","languages_url":"https://api.github.com/repos/ecomfe/ub-ria-ui/languages","stargazers_url":"https://api.github.com/repos/ecomfe/ub-ria-ui/stargazers","contributors_url":"https://api.github.com/repos/ecomfe/ub-ria-ui/contributors","subscribers_url":"https://api.github.com/repos/ecomfe/ub-ria-ui/subscribers","subscription_url":"https://api.github.com/repos/ecomfe/ub-ria-ui/subscription","commits_url":"https://api.github.com/repos/ecomfe/ub-ria-ui/commits{/sha}","git_commits_url":"https://api.github.com/repos/ecomfe/ub-ria-ui/git/commits{/sha}","comments_url":"https://api.github.com/repos/ecomfe/ub-ria-ui/comments{/number}","issue_comment_url":"https://api.github.com/repos/ecomfe/ub-ria-ui/issues/comments/{number}","contents_url":"https://api.github.com/repos/ecomfe/ub-ria-ui/contents/{+path}","compare_url":"https://api.github.com/repos/ecomfe/ub-ria-ui/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ecomfe/ub-ria-ui/merges","archive_url":"https://api.github.com/repos/ecomfe/ub-ria-ui/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ecomfe/ub-ria-ui/downloads","issues_url":"https://api.github.com/repos/ecomfe/ub-ria-ui/issues{/number}","pulls_url":"https://api.github.com/repos/ecomfe/ub-ria-ui/pulls{/number}","milestones_url":"https://api.github.com/repos/ecomfe/ub-ria-ui/milestones{/number}","notifications_url":"https://api.github.com/repos/ecomfe/ub-ria-ui/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ecomfe/ub-ria-ui/labels{/name}","releases_url":"https://api.github.com/repos/ecomfe/ub-ria-ui/releases{/id}","created_at":"2014-09-11T15:43:21Z","updated_at":"2014-09-19T09:41:57Z","pushed_at":"2014-12-30T05:47:54Z","git_url":"git://github.com/ecomfe/ub-ria-ui.git","ssh_url":"git@github.com:ecomfe/ub-ria-ui.git","clone_url":"https://github.com/ecomfe/ub-ria-ui.git","svn_url":"https://github.com/ecomfe/ub-ria-ui","homepage":null,"size":685,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":11,"mirror_url":null,"open_issues_count":30,"forks":11,"open_issues":30,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/ecomfe/ub-ria-ui/pulls/66"},"html":{"href":"https://github.com/ecomfe/ub-ria-ui/pull/66"},"issue":{"href":"https://api.github.com/repos/ecomfe/ub-ria-ui/issues/66"},"comments":{"href":"https://api.github.com/repos/ecomfe/ub-ria-ui/issues/66/comments"},"review_comments":{"href":"https://api.github.com/repos/ecomfe/ub-ria-ui/pulls/66/comments"},"review_comment":{"href":"https://api.github.com/repos/ecomfe/ub-ria-ui/pulls/comments/{number}"},"commits":{"href":"https://api.github.com/repos/ecomfe/ub-ria-ui/pulls/66/commits"},"statuses":{"href":"https://api.github.com/repos/ecomfe/ub-ria-ui/statuses/4d65d3e6a9b596fbf5ae6654554515eb6d59f073"}}}}