{"action":"created","comment":{"url":"https://api.github.com/repos/sitn/crdppf_core/pulls/comments/27656231","id":27656231,"diff_hunk":"@@ -1,209 +1,219 @@\n ﻿Ext.namespace('Crdppf');\n-        \n-// create layer tree and append nodes & subnodes to it\n-Crdppf.LayerTree = function(labels, layerList, baseLayersList) {\n-    // create layer tree object\n-    overlaysList = [];\n \n-    var layerTree = new Ext.tree.TreePanel({\n-        title: labels.layerTreeTitle,\n-        collapsible:true,\n-        flex: 1.0,\n-        useArrows:true,\n-        animate:true,\n-        lines: true,\n-        enableDD:false,\n-        autoScroll: true,\n-        rootVisible: false,\n-        frame: true,\n-        id: 'layerTree'\n-    });\n-    \n-    // define root node\n-    var rootLayerTree = new Ext.tree.TreeNode({\n-        text: 'rootLayerTree',\n-        draggable:false,\n-        id:'rootLayerTree'});\n-    var ll = layerList.themes;\n-        \n-    // create a node on top of tree to select all nodes\n-    var checkAllNode = new Ext.tree.TreeNode({\n-        text: labels.selectAllLayerLabel,\n-        id: 'selectAllNode',\n-        draggable: false,\n-        cls:'checkAllNodeCls',\n-        checked: false,\n-        leaf: true,\n-        listeners: {\n-            'checkchange': function(node,checked){\n-                if(checked){\n-                    layerTree.expandAll();\n-                    for (n=1; n < rootLayerTree.childNodes.length; n++){\n-                        if( rootLayerTree.childNodes[n].id != 'baseLayers') {\n-                            rootLayerTree.childNodes[n].getUI().toggleCheck(true);\n-                        }\n-                    }\n-                    Ext.getCmp('infoButton').toggle(true);\n-                    MapO.setInfoControl();\n-                }else{\n-                    for (n=1; n < rootLayerTree.childNodes.length; n++){\n-                        if( rootLayerTree.childNodes[n].id != 'baseLayers') {\n-                            rootLayerTree.childNodes[n].getUI().toggleCheck(false);\n-                        }\n-                    }\n-                    layerTree.collapseAll();\n-                    Ext.getCmp('panButton').toggle(true);\n-                }\n-            }\n-        }\n-    });\n-    \n-    rootLayerTree.appendChild(checkAllNode);\n-    // iterate over themes and create nodes\n-    for (i=0;i<ll.length;i++){\n-        var themeId = ll[i].id;\n-        // fill tree with nodes relative to themes (level 1)\n-        var themeNode =  new Ext.tree.TreeNode({\n-            text: labels[ll[i].name],\n+Crdppf.LayerTreePanel = function(labels, layerList, baseLayersList){\n+    this.layerTree = this.init(labels, layerList, baseLayersList);\n+};\n+\n+Crdppf.LayerTreePanel.prototype = {\n+    /***\n+    * Property: list of all current overlays\n+    ***/\n+    overlaysList: [],\n+    /***\n+    * Object: Layer tree\n+    ***/\n+    layerTree: null,\n+    /***\n+    * Method: initialize the layerTree\n+    ***/\n+    init: function(labels, layerList, baseLayersList){\n+        var layerTree = new Ext.tree.TreePanel({\n+            title: labels.layerTreeTitle,\n+            collapsible:true,\n+            flex: 1.0,\n+            useArrows:true,\n+            animate:true,\n+            lines: true,\n+            enableDD:false,\n+            autoScroll: true,\n+            rootVisible: false,\n+            frame: true,\n+            id: 'layerTree'\n+        });\n+\n+        // define root node\n+        var rootLayerTree = new Ext.tree.TreeNode({\n+            text: 'rootLayerTree',\n+            draggable:false,\n+            id:'rootLayerTree'});\n+        var ll = layerList.themes;\n+\n+        // create a node on top of tree to select all nodes\n+        var checkAllNode = new Ext.tree.TreeNode({\n+            text: labels.selectAllLayerLabel,\n+            id: 'selectAllNode',\n             draggable: false,\n-            id: ll[i].id,\n-            leaf: false,\n+            cls:'checkAllNodeCls',\n             checked: false,\n+            leaf: true,\n             listeners: {\n-                'checkchange': function(node, checked){\n-                    MapO.disableInfoControl();\n-                    if (checked){\n-                        var filter = {};\n-                        filter[node.id] = checked;\n-                        Crdppf.docfilters({'topicfk':filter});\n-                        node.expand();\n-                        for (k=0; k < node.childNodes.length; k++){\n-                            node.childNodes[k].getUI().toggleCheck(true);\n+                'checkchange': function(node,checked){\n+                    if(checked){\n+                        layerTree.expandAll();\n+                        for (n=1; n < rootLayerTree.childNodes.length; n++){\n+                            if( rootLayerTree.childNodes[n].id != 'baseLayers') {\n+                                rootLayerTree.childNodes[n].getUI().toggleCheck(true);\n+                            }\n                         }\n-                    } else {\n-                        var filter = {};\n-                        filter[node.id] = checked;\n-                        Crdppf.docfilters({'topicfk':filter});                \n-                        node.collapse();\n-                        for (k=0; k < node.childNodes.length; k++){\n-                            node.childNodes[k].getUI().toggleCheck(false);\n+                        Ext.getCmp('infoButton').toggle(true);\n+                        Crdppf.FeaturePanel.setInfoControl();\n+                    }else{\n+                        for (n=1; n < rootLayerTree.childNodes.length; n++){\n+                            if( rootLayerTree.childNodes[n].id != 'baseLayers') {\n+                                rootLayerTree.childNodes[n].getUI().toggleCheck(false);\n+                            }\n                         }\n+                        layerTree.collapseAll();\n+                        Ext.getCmp('panButton').toggle(true);\n                     }\n                 }\n             }\n         });\n-        // fill each theme node with his contained node (level 2)\n \n-        for (var keys in ll[i].layers)\n-        {\n-            layerNode =  new Ext.tree.TreeNode({\n-                text: labels[keys],\n+        rootLayerTree.appendChild(checkAllNode);\n+        // iterate over themes and create nodes\n+        for (i=0;i<ll.length;i++){\n+            var themeId = ll[i].id;\n+            // fill tree with nodes relative to themes (level 1)\n+            var themeNode =  new Ext.tree.TreeNode({\n+                text: labels[ll[i].name],\n                 draggable: false,\n-                id: keys,\n-                cls:'layerNodeCls',\n-                leaf: true,\n-                checked:false,\n+                id: ll[i].id,\n+                leaf: false,\n+                checked: false,\n                 listeners: {\n-                        'checkchange': function(node, checked){\n-                            if(checked){\n-                                overlaysList.push(node.id);\n-                                MapO.setOverlays();\n-                                Ext.getCmp('infoButton').toggle(true);\n-                                MapO.setInfoControl();\n-                            }else{\n-                                overlaysList.remove(node.id);\n-                                MapO.setOverlays();\n-                                Ext.getCmp('panButton').toggle(true);\n+                    'checkchange': function(node, checked){\n+                        var filter = {};\n+                        if (checked){\n+                            filter[node.id] = checked;\n+                            Crdppf.docfilters({'topicfk':filter});\n+                            node.expand();\n+                            for (k=0; k < node.childNodes.length; k++){\n+                                node.childNodes[k].getUI().toggleCheck(true);\n+                            }\n+                        } else {\n+                            filter[node.id] = checked;\n+                            Crdppf.docfilters({'topicfk':filter});                \n+                            node.collapse();\n+                            for (k=0; k < node.childNodes.length; k++){\n+                                node.childNodes[k].getUI().toggleCheck(false);\n                             }\n                         }\n                     }\n-                });\n-            themeNode.appendChild(layerNode);\n-        }\n-        rootLayerTree.appendChild(themeNode);\n-    }\n-        \n-    // Top node of the base layers group\n-    var baseLayersNode = new Ext.tree.TreeNode({\n-        text: labels.baseLayerGroup,\n-        cls:'baseLayersNodeCls',\n-        id: 'baseLayers',\n-        draggable: false,\n-        leaf: false,\n-        expanded: true\n-    });\n-    \n-    // create nodes for base layers\n-    var baseLayers = baseLayersList.baseLayers;\n-    \n-    // iterate over base layers and create nodes\n-    for (var i=0;i<baseLayers.length;i++){\n-        // default: check first layer\n-        isChecked = false;\n-        if (i == 0){\n-            isChecked = true;\n-        }\n-        \n-        // fill tree with nodes relative to baseLayers\n-        var baseLayerItem =  new Ext.tree.TreeNode({\n-            text: labels[baseLayers[i].name],\n-            draggable:false,\n-            id: baseLayers[i].wmtsname,\n-            format: baseLayers[i].tile_format,\n-            leaf: true,\n-            checked: isChecked,\n-            cls: 'baseLayerNodeCls',\n-            listeners: {\n-                'checkchange': function(node, checked){\n-                    if(checked){\n-                        for (var k=0; k < node.parentNode.childNodes.length; k++){\n-                            if(node.parentNode.childNodes[k].id != node.id){\n-                                node.parentNode.childNodes[k].getUI().toggleCheck(false);\n-                            } else {\n-                                // set new backgound layer\n-                                var theBaseLayer = MapO.map.getLayersBy('id', 'baseLayer')[0];\n-                                \n-                                if(theBaseLayer) {\n-                                    theBaseLayer.destroy();\n-                                }\n-                                var formatSuffixMap;\n-                                 \n-                                if (node.attributes['format'] == 'image/png'){\n-                                     formatSuffixMap = {'image/png':'png'};\n-                                }\n-                                if (node.attributes['format'] == 'image/jpg'){\n-                                     formatSuffixMap = {'image/jpeg':'jpg'};\n-                                }\n-                                if (node.attributes['format'] == 'image/jpeg'){\n-                                     formatSuffixMap = {'image/jpeg':'jpeg'};\n+                }\n+            });\n+            // fill each theme node with his contained node (level 2)\n+            for (var keys in ll[i].layers)\n+            {\n+                var layerNode =  new Ext.tree.TreeNode({\n+                    text: labels[keys],\n+                    draggable: false,\n+                    id: keys,\n+                    cls:'layerNodeCls',\n+                    leaf: true,\n+                    checked:false,\n+                    listeners: {\n+                            'checkchange': function(node, checked){\n+                                if(checked){\n+                                    Crdppf.LayerTreePanel.overlaysList.push(node.id);\n+                                    Crdppf.Map.setOverlays();\n+                                    Ext.getCmp('infoButton').toggle(true);\n+                                    Crdppf.FeaturePanel.setInfoControl();\n+                                }else{\n+                                    Crdppf.LayerTreePanel.overlaysList.remove(node.id);\n+                                    Crdppf.Map.setOverlays();\n+                                    Ext.getCmp('panButton').toggle(true);\n                                 }\n-                                var layer = new OpenLayers.Layer.WMTS({\n-                                    name: \"Base layer\",\n-                                    url: Crdppf.mapproxyUrl,\n-                                    layer: node.id,\n-                                    matrixSet: Crdppf.mapMatrixSet,\n-                                    format: node.attributes['format'],\n-                                    formatSuffixMap: formatSuffixMap,\n-                                    isBaseLayer: true,\n-                                    style: 'default',\n-                                    fixedLayer: true,\n-                                    requestEncoding: 'REST'\n-                                }); \n+                            }\n+                        }\n+                    });\n+                themeNode.appendChild(layerNode);\n+            }\n+            rootLayerTree.appendChild(themeNode);\n+        }\n \n-                                layer.id = 'baseLayer';\n-                                MapO.map.addLayers([layer]);\n-                                layer.redraw();\n+        // Top node of the base layers group\n+        var baseLayersNode = new Ext.tree.TreeNode({\n+            text: labels.baseLayerGroup,\n+            cls:'baseLayersNodeCls',\n+            id: 'baseLayers',\n+            draggable: false,\n+            leaf: false,\n+            expanded: true\n+        });\n+\n+        // create nodes for base layers\n+        var baseLayers = baseLayersList.baseLayers;\n+\n+        // iterate over base layers and create nodes\n+        for (var i=0;i<baseLayers.length;i++){\n+            // default: check first layer\n+            isChecked = false;\n+            if (i === 0){\n+                isChecked = true;\n+            }\n+\n+            // fill tree with nodes relative to baseLayers\n+            var baseLayerItem =  new Ext.tree.TreeNode({\n+                text: labels[baseLayers[i].name],\n+                draggable:false,\n+                id: baseLayers[i].wmtsname,\n+                format: baseLayers[i].tile_format,\n+                leaf: true,\n+                checked: isChecked,\n+                cls: 'baseLayerNodeCls',\n+                listeners: {\n+                    'checkchange': function(node, checked){\n+                        if(checked){\n+                            for (var k=0; k < node.parentNode.childNodes.length; k++){\n+                                if(node.parentNode.childNodes[k].id != node.id){\n+                                    node.parentNode.childNodes[k].getUI().toggleCheck(false);\n+                                } else {\n+                                    // set new backgound layer\n+                                    var theBaseLayer = Crdppf.Map.map.getLayersBy('id', 'baseLayer')[0];\n+                                    \n+                                    if(theBaseLayer) {\n+                                        theBaseLayer.destroy();\n+                                    }\n+                                    var formatSuffixMap;\n+                                     \n+                                    if (node.attributes.format == 'image/png'){\n+                                         formatSuffixMap = {'image/png':'png'};\n+                                    }\n+                                    if (node.attributes.format == 'image/jpg'){\n+                                         formatSuffixMap = {'image/jpeg':'jpg'};\n+                                    }\n+                                    if (node.attributes.format == 'image/jpeg'){\n+                                         formatSuffixMap = {'image/jpeg':'jpeg'};\n+                                    }\n+                                    var layer = new OpenLayers.Layer.WMTS({\n+                                        name: \"Base layer\",\n+                                        url: Crdppf.mapproxyUrl,\n+                                        layer: node.id,\n+                                        matrixSet: Crdppf.mapMatrixSet,\n+                                        format: node.attributes.format,\n+                                        formatSuffixMap: formatSuffixMap,\n+                                        isBaseLayer: true,\n+                                        style: 'default',\n+                                        fixedLayer: true,\n+                                        requestEncoding: 'REST'\n+                                    }); \n+\n+                                    layer.id = 'baseLayer';","path":"crdppf/static/js/Crdppf/layerTree.js","position":378,"original_position":378,"commit_id":"df97af66b7dd4678c9b54778a3701b2c838ddbcd","original_commit_id":"3f1c306d00232f232f51a43bc0d95f41c20ff466","user":{"login":"monodo","id":3356536,"avatar_url":"https://avatars.githubusercontent.com/u/3356536?v=3","gravatar_id":"","url":"https://api.github.com/users/monodo","html_url":"https://github.com/monodo","followers_url":"https://api.github.com/users/monodo/followers","following_url":"https://api.github.com/users/monodo/following{/other_user}","gists_url":"https://api.github.com/users/monodo/gists{/gist_id}","starred_url":"https://api.github.com/users/monodo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/monodo/subscriptions","organizations_url":"https://api.github.com/users/monodo/orgs","repos_url":"https://api.github.com/users/monodo/repos","events_url":"https://api.github.com/users/monodo/events{/privacy}","received_events_url":"https://api.github.com/users/monodo/received_events","type":"User","site_admin":false},"body":"That's mystery to me, but if you do so, you'll get Openlayers will output a undefined layer error...","created_at":"2015-04-02T13:30:20Z","updated_at":"2015-04-02T13:30:20Z","html_url":"https://github.com/sitn/crdppf_core/pull/68#discussion_r27656231","pull_request_url":"https://api.github.com/repos/sitn/crdppf_core/pulls/68","_links":{"self":{"href":"https://api.github.com/repos/sitn/crdppf_core/pulls/comments/27656231"},"html":{"href":"https://github.com/sitn/crdppf_core/pull/68#discussion_r27656231"},"pull_request":{"href":"https://api.github.com/repos/sitn/crdppf_core/pulls/68"}}},"pull_request":{"url":"https://api.github.com/repos/sitn/crdppf_core/pulls/68","id":32508022,"html_url":"https://github.com/sitn/crdppf_core/pull/68","diff_url":"https://github.com/sitn/crdppf_core/pull/68.diff","patch_url":"https://github.com/sitn/crdppf_core/pull/68.patch","issue_url":"https://api.github.com/repos/sitn/crdppf_core/issues/68","number":68,"state":"open","locked":false,"title":"Client refactor","user":{"login":"monodo","id":3356536,"avatar_url":"https://avatars.githubusercontent.com/u/3356536?v=3","gravatar_id":"","url":"https://api.github.com/users/monodo","html_url":"https://github.com/monodo","followers_url":"https://api.github.com/users/monodo/followers","following_url":"https://api.github.com/users/monodo/following{/other_user}","gists_url":"https://api.github.com/users/monodo/gists{/gist_id}","starred_url":"https://api.github.com/users/monodo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/monodo/subscriptions","organizations_url":"https://api.github.com/users/monodo/orgs","repos_url":"https://api.github.com/users/monodo/repos","events_url":"https://api.github.com/users/monodo/events{/privacy}","received_events_url":"https://api.github.com/users/monodo/received_events","type":"User","site_admin":false},"body":"Here is a massive code refactoring of the front end. Admin remains is untouched:\r\n\r\n- Most objects are now in standard notation (MDN)\r\n- Whole project is now free of DOM polluting variables\r\n- Whole project has been checked with JSLint\r\n- Use of Ext.getCmp has been reduced\r\n\r\nThis PR also solves following issues:\r\n- #38  Refactoring of the layer tree. Still the metadata link has to be implemented. \r\n- #59 Keep selected feature when changing topic\r\n- #60 IE11 Crash. @voisardf please test as no IE11 is available to me\r\n\r\n@kalbermattenm please review \r\n\r\n\r\n","created_at":"2015-04-02T12:46:34Z","updated_at":"2015-04-02T13:30:20Z","closed_at":null,"merged_at":null,"merge_commit_sha":"ce5d00cfc8beb167f9744d96040f6b882407e05e","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/sitn/crdppf_core/pulls/68/commits","review_comments_url":"https://api.github.com/repos/sitn/crdppf_core/pulls/68/comments","review_comment_url":"https://api.github.com/repos/sitn/crdppf_core/pulls/comments{/number}","comments_url":"https://api.github.com/repos/sitn/crdppf_core/issues/68/comments","statuses_url":"https://api.github.com/repos/sitn/crdppf_core/statuses/df97af66b7dd4678c9b54778a3701b2c838ddbcd","head":{"label":"monodo:client_refactor","ref":"client_refactor","sha":"df97af66b7dd4678c9b54778a3701b2c838ddbcd","user":{"login":"monodo","id":3356536,"avatar_url":"https://avatars.githubusercontent.com/u/3356536?v=3","gravatar_id":"","url":"https://api.github.com/users/monodo","html_url":"https://github.com/monodo","followers_url":"https://api.github.com/users/monodo/followers","following_url":"https://api.github.com/users/monodo/following{/other_user}","gists_url":"https://api.github.com/users/monodo/gists{/gist_id}","starred_url":"https://api.github.com/users/monodo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/monodo/subscriptions","organizations_url":"https://api.github.com/users/monodo/orgs","repos_url":"https://api.github.com/users/monodo/repos","events_url":"https://api.github.com/users/monodo/events{/privacy}","received_events_url":"https://api.github.com/users/monodo/received_events","type":"User","site_admin":false},"repo":{"id":33175464,"name":"crdppf_core","full_name":"monodo/crdppf_core","owner":{"login":"monodo","id":3356536,"avatar_url":"https://avatars.githubusercontent.com/u/3356536?v=3","gravatar_id":"","url":"https://api.github.com/users/monodo","html_url":"https://github.com/monodo","followers_url":"https://api.github.com/users/monodo/followers","following_url":"https://api.github.com/users/monodo/following{/other_user}","gists_url":"https://api.github.com/users/monodo/gists{/gist_id}","starred_url":"https://api.github.com/users/monodo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/monodo/subscriptions","organizations_url":"https://api.github.com/users/monodo/orgs","repos_url":"https://api.github.com/users/monodo/repos","events_url":"https://api.github.com/users/monodo/events{/privacy}","received_events_url":"https://api.github.com/users/monodo/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/monodo/crdppf_core","description":"Core / generic parts of the CRDPPF project","fork":true,"url":"https://api.github.com/repos/monodo/crdppf_core","forks_url":"https://api.github.com/repos/monodo/crdppf_core/forks","keys_url":"https://api.github.com/repos/monodo/crdppf_core/keys{/key_id}","collaborators_url":"https://api.github.com/repos/monodo/crdppf_core/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/monodo/crdppf_core/teams","hooks_url":"https://api.github.com/repos/monodo/crdppf_core/hooks","issue_events_url":"https://api.github.com/repos/monodo/crdppf_core/issues/events{/number}","events_url":"https://api.github.com/repos/monodo/crdppf_core/events","assignees_url":"https://api.github.com/repos/monodo/crdppf_core/assignees{/user}","branches_url":"https://api.github.com/repos/monodo/crdppf_core/branches{/branch}","tags_url":"https://api.github.com/repos/monodo/crdppf_core/tags","blobs_url":"https://api.github.com/repos/monodo/crdppf_core/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/monodo/crdppf_core/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/monodo/crdppf_core/git/refs{/sha}","trees_url":"https://api.github.com/repos/monodo/crdppf_core/git/trees{/sha}","statuses_url":"https://api.github.com/repos/monodo/crdppf_core/statuses/{sha}","languages_url":"https://api.github.com/repos/monodo/crdppf_core/languages","stargazers_url":"https://api.github.com/repos/monodo/crdppf_core/stargazers","contributors_url":"https://api.github.com/repos/monodo/crdppf_core/contributors","subscribers_url":"https://api.github.com/repos/monodo/crdppf_core/subscribers","subscription_url":"https://api.github.com/repos/monodo/crdppf_core/subscription","commits_url":"https://api.github.com/repos/monodo/crdppf_core/commits{/sha}","git_commits_url":"https://api.github.com/repos/monodo/crdppf_core/git/commits{/sha}","comments_url":"https://api.github.com/repos/monodo/crdppf_core/comments{/number}","issue_comment_url":"https://api.github.com/repos/monodo/crdppf_core/issues/comments{/number}","contents_url":"https://api.github.com/repos/monodo/crdppf_core/contents/{+path}","compare_url":"https://api.github.com/repos/monodo/crdppf_core/compare/{base}...{head}","merges_url":"https://api.github.com/repos/monodo/crdppf_core/merges","archive_url":"https://api.github.com/repos/monodo/crdppf_core/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/monodo/crdppf_core/downloads","issues_url":"https://api.github.com/repos/monodo/crdppf_core/issues{/number}","pulls_url":"https://api.github.com/repos/monodo/crdppf_core/pulls{/number}","milestones_url":"https://api.github.com/repos/monodo/crdppf_core/milestones{/number}","notifications_url":"https://api.github.com/repos/monodo/crdppf_core/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/monodo/crdppf_core/labels{/name}","releases_url":"https://api.github.com/repos/monodo/crdppf_core/releases{/id}","created_at":"2015-03-31T09:01:28Z","updated_at":"2015-03-31T09:01:34Z","pushed_at":"2015-04-02T13:13:16Z","git_url":"git://github.com/monodo/crdppf_core.git","ssh_url":"git@github.com:monodo/crdppf_core.git","clone_url":"https://github.com/monodo/crdppf_core.git","svn_url":"https://github.com/monodo/crdppf_core","homepage":null,"size":154595,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"sitn:master","ref":"master","sha":"08d31868d88378fe4a5c555dd23e20c6623cda67","user":{"login":"sitn","id":4532493,"avatar_url":"https://avatars.githubusercontent.com/u/4532493?v=3","gravatar_id":"","url":"https://api.github.com/users/sitn","html_url":"https://github.com/sitn","followers_url":"https://api.github.com/users/sitn/followers","following_url":"https://api.github.com/users/sitn/following{/other_user}","gists_url":"https://api.github.com/users/sitn/gists{/gist_id}","starred_url":"https://api.github.com/users/sitn/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sitn/subscriptions","organizations_url":"https://api.github.com/users/sitn/orgs","repos_url":"https://api.github.com/users/sitn/repos","events_url":"https://api.github.com/users/sitn/events{/privacy}","received_events_url":"https://api.github.com/users/sitn/received_events","type":"Organization","site_admin":false},"repo":{"id":21165948,"name":"crdppf_core","full_name":"sitn/crdppf_core","owner":{"login":"sitn","id":4532493,"avatar_url":"https://avatars.githubusercontent.com/u/4532493?v=3","gravatar_id":"","url":"https://api.github.com/users/sitn","html_url":"https://github.com/sitn","followers_url":"https://api.github.com/users/sitn/followers","following_url":"https://api.github.com/users/sitn/following{/other_user}","gists_url":"https://api.github.com/users/sitn/gists{/gist_id}","starred_url":"https://api.github.com/users/sitn/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sitn/subscriptions","organizations_url":"https://api.github.com/users/sitn/orgs","repos_url":"https://api.github.com/users/sitn/repos","events_url":"https://api.github.com/users/sitn/events{/privacy}","received_events_url":"https://api.github.com/users/sitn/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/sitn/crdppf_core","description":"Core / generic parts of the CRDPPF project","fork":false,"url":"https://api.github.com/repos/sitn/crdppf_core","forks_url":"https://api.github.com/repos/sitn/crdppf_core/forks","keys_url":"https://api.github.com/repos/sitn/crdppf_core/keys{/key_id}","collaborators_url":"https://api.github.com/repos/sitn/crdppf_core/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/sitn/crdppf_core/teams","hooks_url":"https://api.github.com/repos/sitn/crdppf_core/hooks","issue_events_url":"https://api.github.com/repos/sitn/crdppf_core/issues/events{/number}","events_url":"https://api.github.com/repos/sitn/crdppf_core/events","assignees_url":"https://api.github.com/repos/sitn/crdppf_core/assignees{/user}","branches_url":"https://api.github.com/repos/sitn/crdppf_core/branches{/branch}","tags_url":"https://api.github.com/repos/sitn/crdppf_core/tags","blobs_url":"https://api.github.com/repos/sitn/crdppf_core/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/sitn/crdppf_core/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/sitn/crdppf_core/git/refs{/sha}","trees_url":"https://api.github.com/repos/sitn/crdppf_core/git/trees{/sha}","statuses_url":"https://api.github.com/repos/sitn/crdppf_core/statuses/{sha}","languages_url":"https://api.github.com/repos/sitn/crdppf_core/languages","stargazers_url":"https://api.github.com/repos/sitn/crdppf_core/stargazers","contributors_url":"https://api.github.com/repos/sitn/crdppf_core/contributors","subscribers_url":"https://api.github.com/repos/sitn/crdppf_core/subscribers","subscription_url":"https://api.github.com/repos/sitn/crdppf_core/subscription","commits_url":"https://api.github.com/repos/sitn/crdppf_core/commits{/sha}","git_commits_url":"https://api.github.com/repos/sitn/crdppf_core/git/commits{/sha}","comments_url":"https://api.github.com/repos/sitn/crdppf_core/comments{/number}","issue_comment_url":"https://api.github.com/repos/sitn/crdppf_core/issues/comments{/number}","contents_url":"https://api.github.com/repos/sitn/crdppf_core/contents/{+path}","compare_url":"https://api.github.com/repos/sitn/crdppf_core/compare/{base}...{head}","merges_url":"https://api.github.com/repos/sitn/crdppf_core/merges","archive_url":"https://api.github.com/repos/sitn/crdppf_core/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/sitn/crdppf_core/downloads","issues_url":"https://api.github.com/repos/sitn/crdppf_core/issues{/number}","pulls_url":"https://api.github.com/repos/sitn/crdppf_core/pulls{/number}","milestones_url":"https://api.github.com/repos/sitn/crdppf_core/milestones{/number}","notifications_url":"https://api.github.com/repos/sitn/crdppf_core/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/sitn/crdppf_core/labels{/name}","releases_url":"https://api.github.com/repos/sitn/crdppf_core/releases{/id}","created_at":"2014-06-24T13:41:58Z","updated_at":"2015-03-31T12:54:13Z","pushed_at":"2015-04-02T13:13:17Z","git_url":"git://github.com/sitn/crdppf_core.git","ssh_url":"git@github.com:sitn/crdppf_core.git","clone_url":"https://github.com/sitn/crdppf_core.git","svn_url":"https://github.com/sitn/crdppf_core","homepage":null,"size":154595,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":3,"mirror_url":null,"open_issues_count":23,"forks":3,"open_issues":23,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/sitn/crdppf_core/pulls/68"},"html":{"href":"https://github.com/sitn/crdppf_core/pull/68"},"issue":{"href":"https://api.github.com/repos/sitn/crdppf_core/issues/68"},"comments":{"href":"https://api.github.com/repos/sitn/crdppf_core/issues/68/comments"},"review_comments":{"href":"https://api.github.com/repos/sitn/crdppf_core/pulls/68/comments"},"review_comment":{"href":"https://api.github.com/repos/sitn/crdppf_core/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/sitn/crdppf_core/pulls/68/commits"},"statuses":{"href":"https://api.github.com/repos/sitn/crdppf_core/statuses/df97af66b7dd4678c9b54778a3701b2c838ddbcd"}}}}