{"action":"created","comment":{"url":"https://api.github.com/repos/zotero/translators/pulls/comments/31833190","id":31833190,"diff_hunk":"@@ -34,98 +37,1043 @@\n \t***** END LICENSE BLOCK *****\n */\n \n-function getData(doc, checkOnly) {\n-\tvar data = {},\n-\t\twidgets = doc.getElementsByClassName('MetaDataWidget'),\n-\t\ttopWidget = null, topZIndex;\n-\t\n-\t// Dtermine the top metadata window\n-\tfor (var i=0; i<widgets.length; i++) {\n-\t\t\n-\t\tvar zindex = doc.defaultView.getComputedStyle(widgets[i], null)\n-\t\t\t.getPropertyValue('z-index');\n-\t\tif (!zindex && zindex !== 0) continue;\n-\t\t\n-\t\tif (!topWidget || topZIndex < zindex) {\n-\t\t\ttopWidget = widgets[i];\n-\t\t\ttopZIndex = zindex;\n-\t\t}\n-\t}\n-\t\n-\tif (!topWidget) return false;\n-\t\n-\tvar fields = topWidget.getElementsByClassName('field'),\n-\t\tfound = false;\n-\tfor (var i=0; i<fields.length; i++) {\n-\t\tvar field = ZU.trimInternal(fields[i].textContent);\n-\t\t\n-\t\tvar value = fields[i].nextElementSibling;\n-\t\tif (!value || !value.classList.contains('data')) continue;\n-\t\tvalue = ZU.unescapeHTML(ZU.cleanTags(value.innerHTML));\n-\t\t\n-\t\tif (!field || !value.trim()) continue;\n-\t\t\n-\t\tif (checkOnly) return true;\n-\t\t\n-\t\tfound = true;\n-\t\tdata[field] = value;\n-\t}\n-\t\n-\treturn found ? data : false;\n-}\n-\n function detectWeb(doc, url) {\n-\t//monitor changes to body's direct children. That's where the metadata popup is added\n-\tZotero.monitorDOMChanges(doc.body, {childList: true});\n \n-\tif (getData(doc, true)) {\n-\t\treturn \"artwork\";\n-\t}\n+    if (url.match(/iv2/)) {\n+\n+        return \"artwork\";\n+    }\n+    if (url.match(/imagegroup/) && doc.getElementById(\"ssContentWrap\").style.display == \"inline\") {\n+\n+        return false;\n+    }\n+    if (url.match(/imagegroup/) && doc.getElementById(\"thumbNavSave1\").style.display == \"block\") {\n+        Zotero.debug(\"Save on\");\n+        return false;\n+    }\n+    if (url.match(/(S|s)earch/) || url.match(/categories/) || url.match(/imagegroup/) || url.match(/collections/) || url.match(/collaboratoryfiltering/) || url.match(/cluster/)) {\n+        if (doc.getElementsByClassName('MetaDataWidgetRoot').length > 0) {\n+            return \"artwork\";\n+\n+        } else\n+        if (doc.getElementById(\"floatingPlaceHolder\").style.display == \"block\") {\n+            return false;\n+\n+        }\n+        return \"multiple\";\n+    } else {\n+        return false;\n+    }\n+\n }\n \n-function associateData(newItem, value, field) {\n-\tif (!value) return;\n-\tif (typeof value == 'string') value = ZU.trimInternal(value);\n-\tif (!value) return;\n-\t\n-\tnewItem[field] = value;\n+function decodeSearchData(str) {\n+    var searchParam = str;\n+    searchParam = searchParam.replace(/(&gt;)/, \":\");\n+    var param = searchParam.split('&');\n+    var searchData = new Object();\n+    var item;\n+    var sparam;\n+    var id;\n+    var value;\n+    for (var i = 0; i < param.length; i = i + 1) {\n+        item = param[i];\n+        sparam = item.split('=');\n+        id = sparam[0];\n+        value = sparam[1];\n+\n+        if (id === 'type') {\n+            searchData[id] = parseInt(value);\n+        } else\n+            searchData[id] = value;\n+    }\n+    return searchData;\n }\n \n function doWeb(doc, url) {\n-\tvar newItem = new Zotero.Item(\"artwork\"),\n-\t\tdata = getData(doc),\n-\t\tcontent;\n-\t\n-\tif (data.Creator) {\n-\t\tcontent = data.Creator.replace(/\\s*\\(.*/, '');\n-\t\tassociateData(newItem,\n-\t\t\tZU.cleanAuthor(content, \"artist\", artist.indexOf(',') != -1),\n-\t\t\t'creators'\n-\t\t);\n-\t}\n-\t\n-\tif (data.Date) {\n-\t\tcontent = data.Date.replace(/^Photographed (?:in )?/, '');\n-\t\tassociateData(newItem, content, \"date\");\n-\t}\n-\t\n-\tif (data.Rights) {\n-\t\tvar m = data.Rights.match(/^.*(©.*)$/m);\n-\t\tif (m) associateData(newItem, m[1], \"rights\");\n-\t}\n-\t\n-\tif (data.Subject) {\n-\t\tcontent = data.Subject.split(/\\s*;\\s*/);\n-\t\tassociateData(newItem, content, 'tags');\n-\t}\n-\t\n-   //these might not be complete - it's pretty straightforward to add more\n-\tassociateData(newItem, data.Title, \"title\");\n-\tassociateData(newItem, data.Measurements, \"artworkSize\");\n-\tassociateData(newItem, data.Material, \"artworkMedium\");\n-\tassociateData(newItem, data.Repository, \"archive\");\n-\tassociateData(newItem, data['ID Number'], \"archiveLocation\");\n-\tassociateData(newItem, data.Description, \"abstractNote\");\n-\t\n-\tnewItem.complete();\n-}\n\\ No newline at end of file\n+    var docType = detectWeb(doc, url);\n+    if (docType == \"multiple\") {\n+        scrape(doc, url);\n+    } else if (docType == \"artwork\") {\n+        if (url.match(/iv2/)) {\n+            scrapeIV(doc, url);\n+        } else {\n+            scrapeMetaWindow(doc, url);\n+        }\n+    }\n+}\n+\n+\n+var decodeMap = {\n+    '20': ' ',\n+    '21': '!',\n+    '22': '\"',\n+    '23': '#',\n+    '24': '$',\n+    '25': '%',\n+    '26': '&',\n+    '27': \"'\",\n+    '28': '(',\n+    '29': ')',\n+    '2A': '*',\n+    '2B': '+',\n+    '2C': ',',\n+    '2D': '-',\n+    '2E': '.',\n+    '2F': '/',\n+    '30': '0',\n+    '31': '1',\n+    '32': '2',\n+    '33': '3',\n+    '34': '4',\n+    '35': '5',\n+    '36': '6',\n+    '37': '7',\n+    '38': '8',\n+    '39': '9',\n+    '3A': ':',\n+    '3B': ';',\n+    '3C': '<',\n+    '3D': '=',\n+    '3E': '>',\n+    '3F': '?',\n+    '5B': '[',\n+    //\t\t\t\t'5C' : '\\\\',\n+    '5D': ']',\n+    '5E': '^',\n+    '5F': '_',\n+    '60': '`',\n+    '7B': '{',\n+    '7C': '|',\n+    '7D': '}',\n+    '7E': '~'\n+};\n+\n+function decrypt(s) {\n+\n+    var len = s.length;\n+    var i = 0;\n+    var newS = '';\n+    var key;\n+    while (i < len) {\n+        var ch = s.charAt(i);\n+        if ((ch >= '0') && (ch <= '9')) {\n+            key = s.slice(i, i + 2);\n+            newS = newS + decodeMap[key];\n+            i = i + 2;\n+        } else {\n+            if (ch == \"!\") {\n+                var nCh = '';\n+                if ((i + 1) < len) {\n+                    nCh = s.charAt(i + 1);\n+                }\n+                if ((nCh >= '0') && (nCh <= '9')) {\n+                    var rStr = s.substr(i + 1);\n+                    var code = parseInt(rStr);\n+                    nCh = String.fromCharCode(code);\n+                    var nIdx = rStr.indexOf(\"!\");\n+                    if (nIdx > 0) {\n+                        i = i + nIdx + 2;\n+                        newS = newS + nCh;\n+                    }\n+                } else {\n+                    newS = newS + ch;\n+                    i++;\n+                }\n+            } else {\n+                newS = newS + ch;\n+                i++;\n+            }\n+        }\n+    }\n+    return newS;\n+}\n+\n+function encrypt(s) {\n+    var newS = '';\n+    if (s !== undefined) {\n+        //var eMap = _getEncodeMap();\n+        var len = s.length;\n+        i = 0;\n+        var ch;\n+        while (i < len) {\n+            ch = s.charAt(i);\n+            if (((ch >= 'a') && (ch <= 'z')) ||\n+                ((ch >= 'A') && (ch <= 'Z'))) {\n+                newS = newS + ch;\n+            } else {\n+                var eCh = encodeMap[ch];\n+                if (eCh === undefined) {\n+                    newS = newS + \"!\" + ch.charCodeAt(0) + \"!\";\n+                } else {\n+                    newS = newS + \"%\" + eCh;\n+                }\n+            }\n+            i++;\n+        }\n+    }\n+\n+    return newS;\n+}\n+\n+\n+encodeMap = {\n+    ' ': '20',\n+    '!': '21',\n+    '\"': '22',\n+    '#': '23',\n+    '$': '24',\n+    '%': '25',\n+    '&': '26',\n+    \"'\": '27',\n+    '(': '28',\n+    ')': '29',\n+    '*': '2A',\n+    '+': '2B',\n+    ',': '2C',\n+    '-': '2D',\n+    '.': '2E',\n+    '/': '2F',\n+    '0': '30',\n+    '1': '31',\n+    '2': '32',\n+    '3': '33',\n+    '4': '34',\n+    '5': '35',\n+    '6': '36',\n+    '7': '37',\n+    '8': '38',\n+    '9': '39',\n+    ':': '3A',\n+    ';': '3B',\n+    '<': '3C',\n+    '=': '3D',\n+    '>': '3E',\n+    '?': '3F',\n+    '[': '5B',\n+    //\t\t\t\t'\\\\' : '5C',\n+    ']': '5D',\n+    '^': '5E',\n+    '_': '5F',\n+    '`': '60',\n+    '{': '7B',\n+    '|': '7C',\n+    '}': '7D',\n+    '~': '7E'\n+};\n+\n+\n+function processIVURL(text1, artItem, serverURL, url) {\n+    Zotero.debug(\"processIVURL  text \" + text1);\n+    var text = text1;\n+    var service = text.substring(text.indexOf(\"secure\"));\n+\n+    service = service.substring(0, service.indexOf(\"</td>\"));\n+    //\tZotero.debug(\"processIVURL service1 \"+service);\n+    service = service.replace(/<wbr\\/>/g, \"\");\n+    service = service.substring(service.indexOf(\"?\"));\n+    service = service.trim();\n+    var ivURL = serverURL + \"secure/ViewImages\" + service + \"&zoomparams=&fs=true\";\n+\n+    if (url == \"\") {\n+        artItem.url = ivURL;\n+    } else {\n+        //\tartItem.url=url;\n+        artItem.url = ivURL;\n+    }\n+\n+    Zotero.debug(\"processIVURL service2 ivURL \" + ivURL);\n+}\n+\n+function getMetadata(itemsArray, serverURL, url, doc) {\n+    var serviceURL4Metadata = serverURL + \"secure/metadata/\";\n+\n+\n+    (function next() {\n+        if (!itemsArray.length) return;\n+        var objectIdMod = itemsArray.shift();\n+        var items = objectIdMod.split(\":\");\n+        var item = items[0];\n+        var objectTypeId = items[1];\n+        Zotero.debug(\"getMetadata  service URL  \" + serviceURL4Metadata + item);\n+        Zotero.debug(\"getMetadata  objectTypeId  \" + objectTypeId);\n+        Zotero.Utilities.HTTP.doGet(serviceURL4Metadata + item, function(text) {\n+\n+\n+            var artItem = processMetadata(text, item, doc, serverURL);\n+            artItem.attachments.push({\n+                title: \"Artstor Thumbnails\",\n+\n+                document: doc\n+\n+            });\n+            var server = serverURL.substring(0, serverURL.length - 8);\n+            switch (objectTypeId) {\n+                case \"13\":\n+                case \"10\":\n+                    var serviceURL4IVURL = serviceURL4Metadata + item + \"?_method=FpHtml\";\n+                    Zotero.Utilities.HTTP.doGet(serviceURL4IVURL, function(text) {\n+                        processIVURL(text, artItem, serverURL, url);\n+                    });\n+\n+                    break;\n+                case \"11\":\n+                    var serviceURL4QTVR = serverURL + \"secure/imagefpx/\" + item + \"/7\"; //QTVR\n+                    Zotero.Utilities.HTTP.doGet(serviceURL4QTVR, function(text) {\n+                        var jsonQTVR = eval('(' + text + ')');","path":"ARTstor.js","position":415,"original_position":415,"commit_id":"dd45b0e680bebf02a0e0a7b985630028cb92820c","original_commit_id":"dd45b0e680bebf02a0e0a7b985630028cb92820c","user":{"login":"aurimasv","id":1381759,"avatar_url":"https://avatars.githubusercontent.com/u/1381759?v=3","gravatar_id":"","url":"https://api.github.com/users/aurimasv","html_url":"https://github.com/aurimasv","followers_url":"https://api.github.com/users/aurimasv/followers","following_url":"https://api.github.com/users/aurimasv/following{/other_user}","gists_url":"https://api.github.com/users/aurimasv/gists{/gist_id}","starred_url":"https://api.github.com/users/aurimasv/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aurimasv/subscriptions","organizations_url":"https://api.github.com/users/aurimasv/orgs","repos_url":"https://api.github.com/users/aurimasv/repos","events_url":"https://api.github.com/users/aurimasv/events{/privacy}","received_events_url":"https://api.github.com/users/aurimasv/received_events","type":"User","site_admin":false},"body":"That's no good. Can't use `eval` just like that (it's not secure). Seems like you just need `JSON.parse()`","created_at":"2015-06-05T17:27:58Z","updated_at":"2015-06-05T17:27:58Z","html_url":"https://github.com/zotero/translators/pull/899#discussion_r31833190","pull_request_url":"https://api.github.com/repos/zotero/translators/pulls/899","_links":{"self":{"href":"https://api.github.com/repos/zotero/translators/pulls/comments/31833190"},"html":{"href":"https://github.com/zotero/translators/pull/899#discussion_r31833190"},"pull_request":{"href":"https://api.github.com/repos/zotero/translators/pulls/899"}}},"pull_request":{"url":"https://api.github.com/repos/zotero/translators/pulls/899","id":37034563,"html_url":"https://github.com/zotero/translators/pull/899","diff_url":"https://github.com/zotero/translators/pull/899.diff","patch_url":"https://github.com/zotero/translators/pull/899.patch","issue_url":"https://api.github.com/repos/zotero/translators/issues/899","number":899,"state":"open","locked":false,"title":"Enhanced support for new release of Artstor and Shared Shelf Commons","user":{"login":"venturi2k","id":1767476,"avatar_url":"https://avatars.githubusercontent.com/u/1767476?v=3","gravatar_id":"","url":"https://api.github.com/users/venturi2k","html_url":"https://github.com/venturi2k","followers_url":"https://api.github.com/users/venturi2k/followers","following_url":"https://api.github.com/users/venturi2k/following{/other_user}","gists_url":"https://api.github.com/users/venturi2k/gists{/gist_id}","starred_url":"https://api.github.com/users/venturi2k/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/venturi2k/subscriptions","organizations_url":"https://api.github.com/users/venturi2k/orgs","repos_url":"https://api.github.com/users/venturi2k/repos","events_url":"https://api.github.com/users/venturi2k/events{/privacy}","received_events_url":"https://api.github.com/users/venturi2k/received_events","type":"User","site_admin":false},"body":"This release provide enhanced support for Artstor and SSC (Shared Shelf Commons). ","created_at":"2015-06-05T14:09:46Z","updated_at":"2015-06-05T17:27:58Z","closed_at":null,"merged_at":null,"merge_commit_sha":"ff6c8ba3339695ffc25fb6f8b07db69460badc02","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/zotero/translators/pulls/899/commits","review_comments_url":"https://api.github.com/repos/zotero/translators/pulls/899/comments","review_comment_url":"https://api.github.com/repos/zotero/translators/pulls/comments{/number}","comments_url":"https://api.github.com/repos/zotero/translators/issues/899/comments","statuses_url":"https://api.github.com/repos/zotero/translators/statuses/dd45b0e680bebf02a0e0a7b985630028cb92820c","head":{"label":"venturi2k:master","ref":"master","sha":"dd45b0e680bebf02a0e0a7b985630028cb92820c","user":{"login":"venturi2k","id":1767476,"avatar_url":"https://avatars.githubusercontent.com/u/1767476?v=3","gravatar_id":"","url":"https://api.github.com/users/venturi2k","html_url":"https://github.com/venturi2k","followers_url":"https://api.github.com/users/venturi2k/followers","following_url":"https://api.github.com/users/venturi2k/following{/other_user}","gists_url":"https://api.github.com/users/venturi2k/gists{/gist_id}","starred_url":"https://api.github.com/users/venturi2k/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/venturi2k/subscriptions","organizations_url":"https://api.github.com/users/venturi2k/orgs","repos_url":"https://api.github.com/users/venturi2k/repos","events_url":"https://api.github.com/users/venturi2k/events{/privacy}","received_events_url":"https://api.github.com/users/venturi2k/received_events","type":"User","site_admin":false},"repo":{"id":36880548,"name":"translators","full_name":"venturi2k/translators","owner":{"login":"venturi2k","id":1767476,"avatar_url":"https://avatars.githubusercontent.com/u/1767476?v=3","gravatar_id":"","url":"https://api.github.com/users/venturi2k","html_url":"https://github.com/venturi2k","followers_url":"https://api.github.com/users/venturi2k/followers","following_url":"https://api.github.com/users/venturi2k/following{/other_user}","gists_url":"https://api.github.com/users/venturi2k/gists{/gist_id}","starred_url":"https://api.github.com/users/venturi2k/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/venturi2k/subscriptions","organizations_url":"https://api.github.com/users/venturi2k/orgs","repos_url":"https://api.github.com/users/venturi2k/repos","events_url":"https://api.github.com/users/venturi2k/events{/privacy}","received_events_url":"https://api.github.com/users/venturi2k/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/venturi2k/translators","description":"Zotero Translators","fork":true,"url":"https://api.github.com/repos/venturi2k/translators","forks_url":"https://api.github.com/repos/venturi2k/translators/forks","keys_url":"https://api.github.com/repos/venturi2k/translators/keys{/key_id}","collaborators_url":"https://api.github.com/repos/venturi2k/translators/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/venturi2k/translators/teams","hooks_url":"https://api.github.com/repos/venturi2k/translators/hooks","issue_events_url":"https://api.github.com/repos/venturi2k/translators/issues/events{/number}","events_url":"https://api.github.com/repos/venturi2k/translators/events","assignees_url":"https://api.github.com/repos/venturi2k/translators/assignees{/user}","branches_url":"https://api.github.com/repos/venturi2k/translators/branches{/branch}","tags_url":"https://api.github.com/repos/venturi2k/translators/tags","blobs_url":"https://api.github.com/repos/venturi2k/translators/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/venturi2k/translators/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/venturi2k/translators/git/refs{/sha}","trees_url":"https://api.github.com/repos/venturi2k/translators/git/trees{/sha}","statuses_url":"https://api.github.com/repos/venturi2k/translators/statuses/{sha}","languages_url":"https://api.github.com/repos/venturi2k/translators/languages","stargazers_url":"https://api.github.com/repos/venturi2k/translators/stargazers","contributors_url":"https://api.github.com/repos/venturi2k/translators/contributors","subscribers_url":"https://api.github.com/repos/venturi2k/translators/subscribers","subscription_url":"https://api.github.com/repos/venturi2k/translators/subscription","commits_url":"https://api.github.com/repos/venturi2k/translators/commits{/sha}","git_commits_url":"https://api.github.com/repos/venturi2k/translators/git/commits{/sha}","comments_url":"https://api.github.com/repos/venturi2k/translators/comments{/number}","issue_comment_url":"https://api.github.com/repos/venturi2k/translators/issues/comments{/number}","contents_url":"https://api.github.com/repos/venturi2k/translators/contents/{+path}","compare_url":"https://api.github.com/repos/venturi2k/translators/compare/{base}...{head}","merges_url":"https://api.github.com/repos/venturi2k/translators/merges","archive_url":"https://api.github.com/repos/venturi2k/translators/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/venturi2k/translators/downloads","issues_url":"https://api.github.com/repos/venturi2k/translators/issues{/number}","pulls_url":"https://api.github.com/repos/venturi2k/translators/pulls{/number}","milestones_url":"https://api.github.com/repos/venturi2k/translators/milestones{/number}","notifications_url":"https://api.github.com/repos/venturi2k/translators/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/venturi2k/translators/labels{/name}","releases_url":"https://api.github.com/repos/venturi2k/translators/releases{/id}","created_at":"2015-06-04T15:57:03Z","updated_at":"2015-06-04T15:57:05Z","pushed_at":"2015-06-05T14:05:02Z","git_url":"git://github.com/venturi2k/translators.git","ssh_url":"git@github.com:venturi2k/translators.git","clone_url":"https://github.com/venturi2k/translators.git","svn_url":"https://github.com/venturi2k/translators","homepage":"http://www.zotero.org/support/dev/translators","size":17418,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":false,"has_downloads":true,"has_wiki":false,"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":"zotero:master","ref":"master","sha":"6de7970e409e2bbacd100b0172eba626068491d8","user":{"login":"zotero","id":891917,"avatar_url":"https://avatars.githubusercontent.com/u/891917?v=3","gravatar_id":"","url":"https://api.github.com/users/zotero","html_url":"https://github.com/zotero","followers_url":"https://api.github.com/users/zotero/followers","following_url":"https://api.github.com/users/zotero/following{/other_user}","gists_url":"https://api.github.com/users/zotero/gists{/gist_id}","starred_url":"https://api.github.com/users/zotero/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zotero/subscriptions","organizations_url":"https://api.github.com/users/zotero/orgs","repos_url":"https://api.github.com/users/zotero/repos","events_url":"https://api.github.com/users/zotero/events{/privacy}","received_events_url":"https://api.github.com/users/zotero/received_events","type":"Organization","site_admin":false},"repo":{"id":1991863,"name":"translators","full_name":"zotero/translators","owner":{"login":"zotero","id":891917,"avatar_url":"https://avatars.githubusercontent.com/u/891917?v=3","gravatar_id":"","url":"https://api.github.com/users/zotero","html_url":"https://github.com/zotero","followers_url":"https://api.github.com/users/zotero/followers","following_url":"https://api.github.com/users/zotero/following{/other_user}","gists_url":"https://api.github.com/users/zotero/gists{/gist_id}","starred_url":"https://api.github.com/users/zotero/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zotero/subscriptions","organizations_url":"https://api.github.com/users/zotero/orgs","repos_url":"https://api.github.com/users/zotero/repos","events_url":"https://api.github.com/users/zotero/events{/privacy}","received_events_url":"https://api.github.com/users/zotero/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/zotero/translators","description":"Zotero Translators","fork":false,"url":"https://api.github.com/repos/zotero/translators","forks_url":"https://api.github.com/repos/zotero/translators/forks","keys_url":"https://api.github.com/repos/zotero/translators/keys{/key_id}","collaborators_url":"https://api.github.com/repos/zotero/translators/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/zotero/translators/teams","hooks_url":"https://api.github.com/repos/zotero/translators/hooks","issue_events_url":"https://api.github.com/repos/zotero/translators/issues/events{/number}","events_url":"https://api.github.com/repos/zotero/translators/events","assignees_url":"https://api.github.com/repos/zotero/translators/assignees{/user}","branches_url":"https://api.github.com/repos/zotero/translators/branches{/branch}","tags_url":"https://api.github.com/repos/zotero/translators/tags","blobs_url":"https://api.github.com/repos/zotero/translators/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/zotero/translators/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/zotero/translators/git/refs{/sha}","trees_url":"https://api.github.com/repos/zotero/translators/git/trees{/sha}","statuses_url":"https://api.github.com/repos/zotero/translators/statuses/{sha}","languages_url":"https://api.github.com/repos/zotero/translators/languages","stargazers_url":"https://api.github.com/repos/zotero/translators/stargazers","contributors_url":"https://api.github.com/repos/zotero/translators/contributors","subscribers_url":"https://api.github.com/repos/zotero/translators/subscribers","subscription_url":"https://api.github.com/repos/zotero/translators/subscription","commits_url":"https://api.github.com/repos/zotero/translators/commits{/sha}","git_commits_url":"https://api.github.com/repos/zotero/translators/git/commits{/sha}","comments_url":"https://api.github.com/repos/zotero/translators/comments{/number}","issue_comment_url":"https://api.github.com/repos/zotero/translators/issues/comments{/number}","contents_url":"https://api.github.com/repos/zotero/translators/contents/{+path}","compare_url":"https://api.github.com/repos/zotero/translators/compare/{base}...{head}","merges_url":"https://api.github.com/repos/zotero/translators/merges","archive_url":"https://api.github.com/repos/zotero/translators/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/zotero/translators/downloads","issues_url":"https://api.github.com/repos/zotero/translators/issues{/number}","pulls_url":"https://api.github.com/repos/zotero/translators/pulls{/number}","milestones_url":"https://api.github.com/repos/zotero/translators/milestones{/number}","notifications_url":"https://api.github.com/repos/zotero/translators/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/zotero/translators/labels{/name}","releases_url":"https://api.github.com/repos/zotero/translators/releases{/id}","created_at":"2011-07-03T17:40:38Z","updated_at":"2015-06-05T15:14:53Z","pushed_at":"2015-06-05T14:09:46Z","git_url":"git://github.com/zotero/translators.git","ssh_url":"git@github.com:zotero/translators.git","clone_url":"https://github.com/zotero/translators.git","svn_url":"https://github.com/zotero/translators","homepage":"http://www.zotero.org/support/dev/translators","size":17418,"stargazers_count":145,"watchers_count":145,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":123,"mirror_url":null,"open_issues_count":124,"forks":123,"open_issues":124,"watchers":145,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/zotero/translators/pulls/899"},"html":{"href":"https://github.com/zotero/translators/pull/899"},"issue":{"href":"https://api.github.com/repos/zotero/translators/issues/899"},"comments":{"href":"https://api.github.com/repos/zotero/translators/issues/899/comments"},"review_comments":{"href":"https://api.github.com/repos/zotero/translators/pulls/899/comments"},"review_comment":{"href":"https://api.github.com/repos/zotero/translators/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/zotero/translators/pulls/899/commits"},"statuses":{"href":"https://api.github.com/repos/zotero/translators/statuses/dd45b0e680bebf02a0e0a7b985630028cb92820c"}}}}