{"action":"created","comment":{"url":"https://api.github.com/repos/geoext/geoext/pulls/comments/26039643","id":26039643,"diff_hunk":"@@ -0,0 +1,374 @@\n+/**\n+ * Copyright (c) 2008-2012 The Open Source Geospatial Foundation\n+ *\n+ * Published under the BSD license.\n+ * See http://svn.geoext.org/core/trunk/geoext/license.txt for the full text\n+ * of the license.\n+ */\n+\n+/**\n+ * @require GeoExt/data/PrintProviderBase.js\n+ */\n+\n+/** api: (define)\n+ *  module = GeoExt.data\n+ *  class = PrintProvider\n+ *  base_link = `Ext.util.Observable <http://dev.sencha.com/deploy/dev/docs/?class=Ext.util.Observable>`_\n+ */\n+Ext.namespace(\"GeoExt.data\");\n+\n+/** api: example\n+ *  Minimal code to print as much of the current map extent as possible as\n+ *  soon as the print service capabilities are loaded, using the first layout\n+ *  reported by the print service:\n+ *\n+ *  .. code-block:: javascript\n+ *\n+ *      var mapPanel = new GeoExt.MapPanel({\n+ *          renderTo: \"mappanel\",\n+ *          layers: [new OpenLayers.Layer.WMS(\"wms\", \"/geoserver/wms\",\n+ *              {layers: \"topp:tasmania_state_boundaries\"})],\n+ *          center: [146.56, -41.56],\n+ *          zoom: 7\n+ *      });\n+ *      var printProvider = new GeoExt.data.Print3Provider({\n+ *          url: \"/geoserver/pdf\",\n+ *          listeners: {\n+ *              \"loadcapabilities\": function() {\n+ *                  var printPage = new GeoExt.data.PrintPage({\n+ *                      printProvider: printProvider\n+ *                  });\n+ *                  printPage.fit(mapPanel, true);\n+ *                  printProvider.print(mapPanel, printPage);\n+ *              }\n+ *          }\n+ *      });\n+ */\n+\n+/** api: constructor\n+ *  .. class:: PrintProvider\n+ *\n+ *  Provides an interface to a Mapfish print module version 3.\n+ */\n+GeoExt.data.Print3Provider = Ext.extend(GeoExt.data.PrintProviderBase, {\n+\n+    /** private: method[buildStores]\n+     *\n+     *  Build the JSON stores\n+     */\n+    buildStores: function() {\n+        this.scales = new Ext.data.JsonStore({\n+            sortInfo: {field: \"value\", direction: \"DESC\"},\n+            fields: ['name', {name: \"value\", type: \"float\"}]\n+        });\n+\n+        this.dpis = new Ext.data.JsonStore({\n+            sortInfo: {field: \"value\", direction: \"ASC\"},\n+            fields: ['name', {name: \"value\", type: \"int\"}]\n+        });\n+\n+        // Optional outputformats\n+        if (this.outputFormatsEnabled === true) {\n+            this.outputFormats = new Ext.data.JsonStore({\n+                root: \"formats\",\n+                sortInfo: {field: \"name\", direction: \"ASC\"},\n+                fields: [\"name\"]\n+            });\n+        }\n+\n+        this.layouts = new Ext.data.JsonStore({\n+            root: \"layouts\",\n+            fields: [\"name\", \"attributes\", \"size\", \"rotation\"]\n+        });\n+    },\n+\n+    /** private: method[getCapabilitiesURL]\n+     *\n+     *  Get capabilities URL.\n+     */\n+    getCapabilitiesURL: function() {\n+        return this.url + \"/capabilities.json\";\n+    },\n+\n+    /** private: method[toObject]\n+     */\n+    toObject: function(array) {\n+        var result = [];\n+        Ext.each(array, function(value) {\n+            result.push({\n+                'value': value\n+            });\n+        });\n+        return result;\n+    },\n+\n+    /** private: method[viewAlert]\n+     */\n+    viewAlert: function(message) {\n+        window.alert(message);\n+        throw message;\n+    },\n+\n+    /** private: method[arrayToObjects]\n+     */\n+    arrayToObjects: function(array) {\n+        objects = [];\n+        Ext.each(array, function(item) {\n+            objects.push({\n+                value: item,\n+                name: item\n+            });\n+        });\n+        return objects;\n+    },\n+\n+    /** api: method[setLayout]\n+     *  :param layout: ``Ext.data.Record`` the record of the layout.\n+     *\n+     *  Sets the layout for this printProvider.\n+     */\n+    setLayout: function(layout) {\n+        this.setAttributes(layout.get('attributes'));\n+\n+        var mapAttributes = this.getAttributesByType('MapAttributeValues');\n+        if (!mapAttributes) {\n+            this.viewAlert(\"This layout doesn't contains any map\");\n+        }\n+        if (mapAttributes.length != 1) {\n+            this.viewAlert(\"This layout contains more than one map\");\n+        }\n+        var overviewMapAttributes = this.getAttributesByType('OverviewMapAttributeValues');\n+        if (overviewMapAttributes && overviewMapAttributes.length != 1) {\n+            this.viewAlert(\"This layout contains more than one overview map\");\n+        }\n+        var legendAttributes = this.getAttributesByType('LegendAttributeValue');\n+        if (legendAttributes && legendAttributes.length != 1) {\n+            this.viewAlert(\"This layout contains more than one legend\");\n+        }\n+\n+        layout.set('size', {\n+            width: mapAttributes[0].clientInfo.width,\n+            height: mapAttributes[0].clientInfo.height\n+        });\n+        layout.set('rotation', 0);\n+        this.scales.loadData(this.arrayToObjects(mapAttributes[0].clientInfo.scales));\n+        this.dpis.loadData(this.arrayToObjects(mapAttributes[0].clientInfo.dpiSuggestions));\n+        this.setDpi(this.dpis.getAt(0));\n+\n+        GeoExt.data.Print3Provider.superclass.setLayout.apply(this, arguments);\n+    },\n+\n+    /** private: method[loadStores]\n+     */\n+    loadStores: function() {\n+        this.layouts.loadData(this.capabilities);\n+        this.setLayout(this.layouts.getAt(0));\n+\n+        // In rare cases (YAML+MFP-dependent) no Output Formats are returned\n+        if (this.outputFormatsEnabled && this.capabilities.outputFormats) {\n+            this.outputFormats.loadData(this.capabilities);\n+            var defaultOutputIndex = this.outputFormats.find('name', this.defaultOutputFormatName);\n+            this.setOutputFormat(defaultOutputIndex > -1 ? this.outputFormats.getAt(defaultOutputIndex) : this.outputFormats.getAt(0));\n+        }\n+        this.fireEvent(\"loadcapabilities\", this, this.capabilities);\n+    },\n+\n+    /** private: method[validatePrintOptions]\n+     */\n+    validatePrintOptions: function(map, pages, options) {\n+        if (pages.length != 1) {\n+            this.fireEvent(\"printexception\", this, response);\n+            return false;\n+        }\n+        return true;\n+    },\n+\n+    /** api: method[requestPrint]\n+     */\n+    requestPrint: function(map, pages, encodedLayers, encodedOverviewLayers, encodedLegends, callback) {\n+        var outputFormat = this.outputFormat ? this.outputFormat.get(\"name\") : this.defaultOutputFormatName;\n+        var page = pages[0];\n+\n+        var jsonData = {\n+            layout: this.layout.get(\"name\"),\n+            outputFormat: outputFormat,\n+            attributes: this.customParams\n+        };\n+\n+        var mapAttributes = this.getAttributesByType(\"MapAttributeValues\");\n+        var overviewMapAttributes = this.getAttributesByType(\"OverviewMapAttributeValues\");\n+        var legendAttributes = this.getAttributesByType(\"LegendAttributeValue\");\n+\n+        jsonData.attributes[mapAttributes[0].name] = {\n+            projection: map.getProjection(),\n+            dpi: this.dpi.get(\"value\"),\n+            rotation: page.rotation,\n+            center: [page.center.lon, page.center.lat],\n+            scale: page.scale.get(\"value\"),\n+            longitudeFirst: true,\n+            layers: encodedLayers\n+        };\n+\n+        if (overviewMapAttributes && encodedOverviewLayers) {\n+            jsonData.attributes[overviewMapAttributes[0].name] = {\n+                layers: encodedOverviewLayers\n+            };\n+        }\n+\n+        if (legendAttributes) {\n+            jsonData.attributes[legendAttributes[0].name] = {\n+                \"classes\": encodedLegends\n+            };\n+        }\n+\n+        Ext.Ajax.request({\n+            url: this.url + \"/report.\" + outputFormat,\n+            method: 'POST',\n+            jsonData: jsonData,\n+            headers: { \"Content-Type\": \"application/json; charset=\" + this.encoding },\n+            success: function(response) {\n+                var ref = Ext.decode(response.responseText).ref;\n+                callback(ref);\n+            },\n+            failure: function(response) {\n+                this.fireEvent(\"printexception\", this, response);\n+            },\n+            params: this.baseParams,\n+            scope: this\n+        });\n+    },\n+\n+    getStatus: function(ref, callback) {\n+        Ext.Ajax.request({\n+            url: this.url + '/status/' + ref + '.json',\n+            method: 'GET',\n+            success: function(response) {\n+                var current_status = Ext.decode(response.responseText);\n+                callback(ref, true, current_status);\n+            },\n+            failure: function(response) {\n+                callback(ref, false);\n+                this.fireEvent(\"printexception\", this, response);\n+            },\n+            params: this.baseParams,\n+            scope: this\n+        });\n+    },\n+\n+    getDownloadURL: function(ref) {\n+        return this.url + '/report/' + ref;\n+    },\n+\n+    /** private: property[encodersOverride]\n+     *  ``Object`` Encoders override for all print content\n+     */\n+    encodersOverride: {\n+        \"layers\": {\n+            \"WMS\": function(layer) {\n+                var enc = this.encoders.layers._HTTPRequest.call(this, layer);\n+                Ext.apply(enc, {\n+                    type: layer.singleTile ? 'wms' : \"tiledwms\",\n+                    layers: [layer.params.LAYERS].join(\",\").split(\",\"),\n+                    imageFormat: layer.params.FORMAT,\n+                    styles: [layer.params.STYLES].join(\",\").split(\",\")\n+                });\n+                var param;\n+                for (var p in layer.params) {\n+                    param = p.toLowerCase();\n+                    if (layer.params[p] != null && !layer.DEFAULT_PARAMS[param] &&\n+                    \"layers,styles,width,height,srs\".indexOf(param) == -1) {\n+                        if (!enc.customParams) {\n+                            enc.customParams = {};\n+                        }\n+                        enc.customParams[p] = layer.params[p];\n+                    }\n+                }\n+                return enc;\n+            },\n+            \"WMTS\": function(layer) {\n+                var enc = this.encoders.layers._HTTPRequest.call(this, layer);\n+                enc = Ext.apply(enc, {\n+                    type: 'wmts',\n+                    layer: layer.layer,\n+                    version: layer.version,\n+                    requestEncoding: layer.requestEncoding,\n+                    style: layer.style,\n+                    dimensions: layer.dimensions,\n+                    dimensionParams: layer.params,\n+                    matrixSet: layer.matrixSet,\n+                    imageFormat: layer.format,\n+                    matrices: []\n+                });\n+                if (layer.matrixIds) {\n+                    Ext.each(layer.matrixIds, function(matrixId) {\n+                        enc.matrices.push({\n+                            identifier: matrixId.identifier,\n+                            matrixSize: [matrixId.matrixWidth,\n+                                    matrixId.matrixHeight],\n+                            scaleDenominator: matrixId.scaleDenominator,\n+                            tileSize: [matrixId.tileWidth, matrixId.tileHeight],\n+                            topLeftCorner: [matrixId.topLeftCorner.lon,\n+                                    matrixId.topLeftCorner.lat]\n+                        });\n+                    })\n+                }\n+                else {\n+                    Ext.each(layer.resolutions, function(resolution, index) {\n+                        enc.matrices.push({\n+                            identifier: index,\n+                            matrixSize: [\n+                                Math.ceil((layer.maxExtent.right - layer.maxExtent.left) / resolution / layer.tileSize.w),\n+                                Math.ceil((layer.maxExtent.top - layer.maxExtent.bottom) / resolution / layer.tileSize.h)\n+                            ],\n+                            scaleDenominator: resolution / 0.28E-3 \n+                                * OpenLayers.METERS_PER_INCH\n+                                * OpenLayers.INCHES_PER_UNIT[layer.units],\n+                            tileSize: [layer.tileSize.w, layer.tileSize.h],\n+                            topLeftCorner: [layer.tileOrigin.lon, layer.tileOrigin.lat]\n+                        });\n+                    });\n+                }\n+                return enc;\n+            },\n+            \"OSM\": function(layer) {\n+                var enc = this.encoders.layers._HTTPRequest.call(this, layer);\n+                return Ext.apply(enc, {\n+                    type: 'osm',\n+                    baseURL: enc.baseURL.substr(0, enc.baseURL.indexOf(\"$\")),\n+                    layer: layer.layername,\n+                    maxExtent: layer.maxExtent.toArray(),\n+                    tileSize: [layer.tileSize.w, layer.tileSize.h],\n+                    resolutions: layer.serverResolutions || layer.resolutions\n+                });\n+            },\n+            \"Vector\": function(layer, bounds) {\n+                var enc = this.encoders.features.GeoJsonWithStyle(layer, bounds);\n+                // don't send empty layer\n+                if (!enc.geoJson.features.length === 0) {\n+                    return;\n+                }\n+\n+                enc = {\n+                    type: \"geojson\",\n+                    style: Ext.apply(enc.styles, {\n+                        version: \"1\",\n+                        styleProperty: \"_gx_style\"\n+                    }),\n+                    geoJson: enc.geoJson\n+                }\n+\n+                Ext.apply(enc, this.encoders.layers._Layer.call(this, layer));\n+\n+                return enc;\n+            }\n+        },\n+        \"legends\": {}\n+    },\n+\n+    /** public: method[supportProgress]","path":"lib/GeoExt/data/Print3Provider.js","position":368,"original_position":368,"commit_id":"3b44c353729245106d0aac03f8a2fd306b9bb7a0","original_commit_id":"3b44c353729245106d0aac03f8a2fd306b9bb7a0","user":{"login":"bartvde","id":319678,"avatar_url":"https://avatars.githubusercontent.com/u/319678?v=3","gravatar_id":"","url":"https://api.github.com/users/bartvde","html_url":"https://github.com/bartvde","followers_url":"https://api.github.com/users/bartvde/followers","following_url":"https://api.github.com/users/bartvde/following{/other_user}","gists_url":"https://api.github.com/users/bartvde/gists{/gist_id}","starred_url":"https://api.github.com/users/bartvde/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bartvde/subscriptions","organizations_url":"https://api.github.com/users/bartvde/orgs","repos_url":"https://api.github.com/users/bartvde/repos","events_url":"https://api.github.com/users/bartvde/events{/privacy}","received_events_url":"https://api.github.com/users/bartvde/received_events","type":"User","site_admin":false},"body":"public or api?","created_at":"2015-03-09T14:33:40Z","updated_at":"2015-03-09T14:33:40Z","html_url":"https://github.com/geoext/geoext/pull/105#discussion_r26039643","pull_request_url":"https://api.github.com/repos/geoext/geoext/pulls/105","_links":{"self":{"href":"https://api.github.com/repos/geoext/geoext/pulls/comments/26039643"},"html":{"href":"https://github.com/geoext/geoext/pull/105#discussion_r26039643"},"pull_request":{"href":"https://api.github.com/repos/geoext/geoext/pulls/105"}}},"pull_request":{"url":"https://api.github.com/repos/geoext/geoext/pulls/105","id":30300748,"html_url":"https://github.com/geoext/geoext/pull/105","diff_url":"https://github.com/geoext/geoext/pull/105.diff","patch_url":"https://github.com/geoext/geoext/pull/105.patch","issue_url":"https://api.github.com/repos/geoext/geoext/issues/105","number":105,"state":"open","locked":false,"title":"Add MapFish Print V3 support","user":{"login":"sbrunner","id":353872,"avatar_url":"https://avatars.githubusercontent.com/u/353872?v=3","gravatar_id":"","url":"https://api.github.com/users/sbrunner","html_url":"https://github.com/sbrunner","followers_url":"https://api.github.com/users/sbrunner/followers","following_url":"https://api.github.com/users/sbrunner/following{/other_user}","gists_url":"https://api.github.com/users/sbrunner/gists{/gist_id}","starred_url":"https://api.github.com/users/sbrunner/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sbrunner/subscriptions","organizations_url":"https://api.github.com/users/sbrunner/orgs","repos_url":"https://api.github.com/users/sbrunner/repos","events_url":"https://api.github.com/users/sbrunner/events{/privacy}","received_events_url":"https://api.github.com/users/sbrunner/received_events","type":"User","site_admin":false},"body":"","created_at":"2015-03-02T17:07:09Z","updated_at":"2015-03-09T14:33:40Z","closed_at":null,"merged_at":null,"merge_commit_sha":"6f1bc676c6ccd86ae40c63940f37895a4b33dc21","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/geoext/geoext/pulls/105/commits","review_comments_url":"https://api.github.com/repos/geoext/geoext/pulls/105/comments","review_comment_url":"https://api.github.com/repos/geoext/geoext/pulls/comments{/number}","comments_url":"https://api.github.com/repos/geoext/geoext/issues/105/comments","statuses_url":"https://api.github.com/repos/geoext/geoext/statuses/3b44c353729245106d0aac03f8a2fd306b9bb7a0","head":{"label":"sbrunner:printV3","ref":"printV3","sha":"3b44c353729245106d0aac03f8a2fd306b9bb7a0","user":{"login":"sbrunner","id":353872,"avatar_url":"https://avatars.githubusercontent.com/u/353872?v=3","gravatar_id":"","url":"https://api.github.com/users/sbrunner","html_url":"https://github.com/sbrunner","followers_url":"https://api.github.com/users/sbrunner/followers","following_url":"https://api.github.com/users/sbrunner/following{/other_user}","gists_url":"https://api.github.com/users/sbrunner/gists{/gist_id}","starred_url":"https://api.github.com/users/sbrunner/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sbrunner/subscriptions","organizations_url":"https://api.github.com/users/sbrunner/orgs","repos_url":"https://api.github.com/users/sbrunner/repos","events_url":"https://api.github.com/users/sbrunner/events{/privacy}","received_events_url":"https://api.github.com/users/sbrunner/received_events","type":"User","site_admin":false},"repo":{"id":3257792,"name":"geoext","full_name":"sbrunner/geoext","owner":{"login":"sbrunner","id":353872,"avatar_url":"https://avatars.githubusercontent.com/u/353872?v=3","gravatar_id":"","url":"https://api.github.com/users/sbrunner","html_url":"https://github.com/sbrunner","followers_url":"https://api.github.com/users/sbrunner/followers","following_url":"https://api.github.com/users/sbrunner/following{/other_user}","gists_url":"https://api.github.com/users/sbrunner/gists{/gist_id}","starred_url":"https://api.github.com/users/sbrunner/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sbrunner/subscriptions","organizations_url":"https://api.github.com/users/sbrunner/orgs","repos_url":"https://api.github.com/users/sbrunner/repos","events_url":"https://api.github.com/users/sbrunner/events{/privacy}","received_events_url":"https://api.github.com/users/sbrunner/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/sbrunner/geoext","description":"","fork":true,"url":"https://api.github.com/repos/sbrunner/geoext","forks_url":"https://api.github.com/repos/sbrunner/geoext/forks","keys_url":"https://api.github.com/repos/sbrunner/geoext/keys{/key_id}","collaborators_url":"https://api.github.com/repos/sbrunner/geoext/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/sbrunner/geoext/teams","hooks_url":"https://api.github.com/repos/sbrunner/geoext/hooks","issue_events_url":"https://api.github.com/repos/sbrunner/geoext/issues/events{/number}","events_url":"https://api.github.com/repos/sbrunner/geoext/events","assignees_url":"https://api.github.com/repos/sbrunner/geoext/assignees{/user}","branches_url":"https://api.github.com/repos/sbrunner/geoext/branches{/branch}","tags_url":"https://api.github.com/repos/sbrunner/geoext/tags","blobs_url":"https://api.github.com/repos/sbrunner/geoext/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/sbrunner/geoext/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/sbrunner/geoext/git/refs{/sha}","trees_url":"https://api.github.com/repos/sbrunner/geoext/git/trees{/sha}","statuses_url":"https://api.github.com/repos/sbrunner/geoext/statuses/{sha}","languages_url":"https://api.github.com/repos/sbrunner/geoext/languages","stargazers_url":"https://api.github.com/repos/sbrunner/geoext/stargazers","contributors_url":"https://api.github.com/repos/sbrunner/geoext/contributors","subscribers_url":"https://api.github.com/repos/sbrunner/geoext/subscribers","subscription_url":"https://api.github.com/repos/sbrunner/geoext/subscription","commits_url":"https://api.github.com/repos/sbrunner/geoext/commits{/sha}","git_commits_url":"https://api.github.com/repos/sbrunner/geoext/git/commits{/sha}","comments_url":"https://api.github.com/repos/sbrunner/geoext/comments{/number}","issue_comment_url":"https://api.github.com/repos/sbrunner/geoext/issues/comments{/number}","contents_url":"https://api.github.com/repos/sbrunner/geoext/contents/{+path}","compare_url":"https://api.github.com/repos/sbrunner/geoext/compare/{base}...{head}","merges_url":"https://api.github.com/repos/sbrunner/geoext/merges","archive_url":"https://api.github.com/repos/sbrunner/geoext/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/sbrunner/geoext/downloads","issues_url":"https://api.github.com/repos/sbrunner/geoext/issues{/number}","pulls_url":"https://api.github.com/repos/sbrunner/geoext/pulls{/number}","milestones_url":"https://api.github.com/repos/sbrunner/geoext/milestones{/number}","notifications_url":"https://api.github.com/repos/sbrunner/geoext/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/sbrunner/geoext/labels{/name}","releases_url":"https://api.github.com/repos/sbrunner/geoext/releases{/id}","created_at":"2012-01-24T17:12:08Z","updated_at":"2014-04-08T09:56:15Z","pushed_at":"2015-03-02T17:05:46Z","git_url":"git://github.com/sbrunner/geoext.git","ssh_url":"git@github.com:sbrunner/geoext.git","clone_url":"https://github.com/sbrunner/geoext.git","svn_url":"https://github.com/sbrunner/geoext","homepage":"http://geoext.org","size":2992,"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":"geoext:master","ref":"master","sha":"8a5d3f753c9dd950a8588a045fdb60743ef872ea","user":{"login":"geoext","id":507290,"avatar_url":"https://avatars.githubusercontent.com/u/507290?v=3","gravatar_id":"","url":"https://api.github.com/users/geoext","html_url":"https://github.com/geoext","followers_url":"https://api.github.com/users/geoext/followers","following_url":"https://api.github.com/users/geoext/following{/other_user}","gists_url":"https://api.github.com/users/geoext/gists{/gist_id}","starred_url":"https://api.github.com/users/geoext/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/geoext/subscriptions","organizations_url":"https://api.github.com/users/geoext/orgs","repos_url":"https://api.github.com/users/geoext/repos","events_url":"https://api.github.com/users/geoext/events{/privacy}","received_events_url":"https://api.github.com/users/geoext/received_events","type":"Organization","site_admin":false},"repo":{"id":2766626,"name":"geoext","full_name":"geoext/geoext","owner":{"login":"geoext","id":507290,"avatar_url":"https://avatars.githubusercontent.com/u/507290?v=3","gravatar_id":"","url":"https://api.github.com/users/geoext","html_url":"https://github.com/geoext","followers_url":"https://api.github.com/users/geoext/followers","following_url":"https://api.github.com/users/geoext/following{/other_user}","gists_url":"https://api.github.com/users/geoext/gists{/gist_id}","starred_url":"https://api.github.com/users/geoext/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/geoext/subscriptions","organizations_url":"https://api.github.com/users/geoext/orgs","repos_url":"https://api.github.com/users/geoext/repos","events_url":"https://api.github.com/users/geoext/events{/privacy}","received_events_url":"https://api.github.com/users/geoext/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/geoext/geoext","description":"","fork":false,"url":"https://api.github.com/repos/geoext/geoext","forks_url":"https://api.github.com/repos/geoext/geoext/forks","keys_url":"https://api.github.com/repos/geoext/geoext/keys{/key_id}","collaborators_url":"https://api.github.com/repos/geoext/geoext/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/geoext/geoext/teams","hooks_url":"https://api.github.com/repos/geoext/geoext/hooks","issue_events_url":"https://api.github.com/repos/geoext/geoext/issues/events{/number}","events_url":"https://api.github.com/repos/geoext/geoext/events","assignees_url":"https://api.github.com/repos/geoext/geoext/assignees{/user}","branches_url":"https://api.github.com/repos/geoext/geoext/branches{/branch}","tags_url":"https://api.github.com/repos/geoext/geoext/tags","blobs_url":"https://api.github.com/repos/geoext/geoext/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/geoext/geoext/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/geoext/geoext/git/refs{/sha}","trees_url":"https://api.github.com/repos/geoext/geoext/git/trees{/sha}","statuses_url":"https://api.github.com/repos/geoext/geoext/statuses/{sha}","languages_url":"https://api.github.com/repos/geoext/geoext/languages","stargazers_url":"https://api.github.com/repos/geoext/geoext/stargazers","contributors_url":"https://api.github.com/repos/geoext/geoext/contributors","subscribers_url":"https://api.github.com/repos/geoext/geoext/subscribers","subscription_url":"https://api.github.com/repos/geoext/geoext/subscription","commits_url":"https://api.github.com/repos/geoext/geoext/commits{/sha}","git_commits_url":"https://api.github.com/repos/geoext/geoext/git/commits{/sha}","comments_url":"https://api.github.com/repos/geoext/geoext/comments{/number}","issue_comment_url":"https://api.github.com/repos/geoext/geoext/issues/comments{/number}","contents_url":"https://api.github.com/repos/geoext/geoext/contents/{+path}","compare_url":"https://api.github.com/repos/geoext/geoext/compare/{base}...{head}","merges_url":"https://api.github.com/repos/geoext/geoext/merges","archive_url":"https://api.github.com/repos/geoext/geoext/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/geoext/geoext/downloads","issues_url":"https://api.github.com/repos/geoext/geoext/issues{/number}","pulls_url":"https://api.github.com/repos/geoext/geoext/pulls{/number}","milestones_url":"https://api.github.com/repos/geoext/geoext/milestones{/number}","notifications_url":"https://api.github.com/repos/geoext/geoext/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/geoext/geoext/labels{/name}","releases_url":"https://api.github.com/repos/geoext/geoext/releases{/id}","created_at":"2011-11-13T14:18:13Z","updated_at":"2015-01-06T13:42:13Z","pushed_at":"2015-01-06T13:42:12Z","git_url":"git://github.com/geoext/geoext.git","ssh_url":"git@github.com:geoext/geoext.git","clone_url":"https://github.com/geoext/geoext.git","svn_url":"https://github.com/geoext/geoext","homepage":"http://geoext.org","size":3548,"stargazers_count":87,"watchers_count":87,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":48,"mirror_url":null,"open_issues_count":25,"forks":48,"open_issues":25,"watchers":87,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/geoext/geoext/pulls/105"},"html":{"href":"https://github.com/geoext/geoext/pull/105"},"issue":{"href":"https://api.github.com/repos/geoext/geoext/issues/105"},"comments":{"href":"https://api.github.com/repos/geoext/geoext/issues/105/comments"},"review_comments":{"href":"https://api.github.com/repos/geoext/geoext/pulls/105/comments"},"review_comment":{"href":"https://api.github.com/repos/geoext/geoext/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/geoext/geoext/pulls/105/commits"},"statuses":{"href":"https://api.github.com/repos/geoext/geoext/statuses/3b44c353729245106d0aac03f8a2fd306b9bb7a0"}}}}