{"action":"created","comment":{"url":"https://api.github.com/repos/medic/medic-webapp/pulls/comments/60209827","id":60209827,"diff_hunk":"@@ -327,16 +327,13 @@ angular.module('inboxServices').service('EnketoTranslation', [\n       return res;\n     };\n \n-    self.bindJsonToXml = function(elem, data) {\n-      // Pairs get sorted so that values are bound before objects:\n-      // - data is bound to any decendents of the given elem\n-      // - least specific (in terms of path) get bound first\n-      // - more specific get to bind *over* potentially too unspecific values\n-      _.sortBy(_.pairs(data), function(pair) {\n-        return _.isObject(pair[1]);\n-      }).forEach(function(pair) {\n-        var current = elem.find(pair[0]);\n+    // NB: childMatcher intentionally does not recurse.\n+    //     It exists to allow the initial layer of binding to be flexible.\n+    self.bindJsonToXml = function(elem, data, childMatcher) {\n+      _.pairs(data).forEach(function(pair) {\n+        var current = childMatcher ? elem.find(childMatcher([pair[0]])) : elem.children(pair[0]);\n         var value = pair[1];\n+\n         if (_.isObject(value)) {\n           if(current.children().length) {\n             self.bindJsonToXml(current, value);","path":"static/js/services/enketo-translation.js","position":22,"original_position":22,"commit_id":"b9b6a63261f697c49263827189ec87daf6b79c4b","original_commit_id":"b9b6a63261f697c49263827189ec87daf6b79c4b","user":{"login":"SCdF","id":583851,"avatar_url":"https://avatars.githubusercontent.com/u/583851?v=3","gravatar_id":"","url":"https://api.github.com/users/SCdF","html_url":"https://github.com/SCdF","followers_url":"https://api.github.com/users/SCdF/followers","following_url":"https://api.github.com/users/SCdF/following{/other_user}","gists_url":"https://api.github.com/users/SCdF/gists{/gist_id}","starred_url":"https://api.github.com/users/SCdF/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SCdF/subscriptions","organizations_url":"https://api.github.com/users/SCdF/orgs","repos_url":"https://api.github.com/users/SCdF/repos","events_url":"https://api.github.com/users/SCdF/events{/privacy}","received_events_url":"https://api.github.com/users/SCdF/received_events","type":"User","site_admin":false},"body":"@garethbowen Yeah that's a great question.\r\n\r\nOn the one hand, that's what the old code does. so we've been living with it for some time now. I also am not entirely sure what we'd do if the `find` came up with more than one option: error out? Pick the first one? Attempt to somehow pick the most specific one? Just log a warn and call it a day?\r\n\r\nFor now I'll just log it, but if you think any of the other options listed (or one I didn't list) is better we should definitely change it, I just don't really have the confidence to do anything more shocking.\r\n\r\nI think / hope that this is mostly dealt with by the flexibility of find only occurring on the first bind level, which should make it reasonably easy to avoid.","created_at":"2016-04-19T10:50:22Z","updated_at":"2016-04-19T10:50:22Z","html_url":"https://github.com/medic/medic-webapp/pull/2208#discussion_r60209827","pull_request_url":"https://api.github.com/repos/medic/medic-webapp/pulls/2208","_links":{"self":{"href":"https://api.github.com/repos/medic/medic-webapp/pulls/comments/60209827"},"html":{"href":"https://github.com/medic/medic-webapp/pull/2208#discussion_r60209827"},"pull_request":{"href":"https://api.github.com/repos/medic/medic-webapp/pulls/2208"}}},"pull_request":{"url":"https://api.github.com/repos/medic/medic-webapp/pulls/2208","id":66867391,"html_url":"https://github.com/medic/medic-webapp/pull/2208","diff_url":"https://github.com/medic/medic-webapp/pull/2208.diff","patch_url":"https://github.com/medic/medic-webapp/pull/2208.patch","issue_url":"https://api.github.com/repos/medic/medic-webapp/issues/2208","number":2208,"state":"open","locked":false,"title":"Make binding stricter","user":{"login":"SCdF","id":583851,"avatar_url":"https://avatars.githubusercontent.com/u/583851?v=3","gravatar_id":"","url":"https://api.github.com/users/SCdF","html_url":"https://github.com/SCdF","followers_url":"https://api.github.com/users/SCdF/followers","following_url":"https://api.github.com/users/SCdF/following{/other_user}","gists_url":"https://api.github.com/users/SCdF/gists{/gist_id}","starred_url":"https://api.github.com/users/SCdF/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SCdF/subscriptions","organizations_url":"https://api.github.com/users/SCdF/orgs","repos_url":"https://api.github.com/users/SCdF/repos","events_url":"https://api.github.com/users/SCdF/events{/privacy}","received_events_url":"https://api.github.com/users/SCdF/received_events","type":"User","site_admin":false},"body":"Allows the first layer of binding to be a bit looser (at the callers\r\ndescription); all layers of binding after that are strict 1:1 mappings between\r\nthe data and the XML.\r\n\r\nIssue: #2164","created_at":"2016-04-18T14:55:57Z","updated_at":"2016-04-19T10:50:22Z","closed_at":null,"merged_at":null,"merge_commit_sha":"69debec880195364ccd43c2e316f562c41c2ed5f","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/medic/medic-webapp/pulls/2208/commits","review_comments_url":"https://api.github.com/repos/medic/medic-webapp/pulls/2208/comments","review_comment_url":"https://api.github.com/repos/medic/medic-webapp/pulls/comments{/number}","comments_url":"https://api.github.com/repos/medic/medic-webapp/issues/2208/comments","statuses_url":"https://api.github.com/repos/medic/medic-webapp/statuses/b9b6a63261f697c49263827189ec87daf6b79c4b","head":{"label":"medic:2164_strict_binding","ref":"2164_strict_binding","sha":"b9b6a63261f697c49263827189ec87daf6b79c4b","user":{"login":"medic","id":474424,"avatar_url":"https://avatars.githubusercontent.com/u/474424?v=3","gravatar_id":"","url":"https://api.github.com/users/medic","html_url":"https://github.com/medic","followers_url":"https://api.github.com/users/medic/followers","following_url":"https://api.github.com/users/medic/following{/other_user}","gists_url":"https://api.github.com/users/medic/gists{/gist_id}","starred_url":"https://api.github.com/users/medic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/medic/subscriptions","organizations_url":"https://api.github.com/users/medic/orgs","repos_url":"https://api.github.com/users/medic/repos","events_url":"https://api.github.com/users/medic/events{/privacy}","received_events_url":"https://api.github.com/users/medic/received_events","type":"Organization","site_admin":false},"repo":{"id":2698821,"name":"medic-webapp","full_name":"medic/medic-webapp","owner":{"login":"medic","id":474424,"avatar_url":"https://avatars.githubusercontent.com/u/474424?v=3","gravatar_id":"","url":"https://api.github.com/users/medic","html_url":"https://github.com/medic","followers_url":"https://api.github.com/users/medic/followers","following_url":"https://api.github.com/users/medic/following{/other_user}","gists_url":"https://api.github.com/users/medic/gists{/gist_id}","starred_url":"https://api.github.com/users/medic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/medic/subscriptions","organizations_url":"https://api.github.com/users/medic/orgs","repos_url":"https://api.github.com/users/medic/repos","events_url":"https://api.github.com/users/medic/events{/privacy}","received_events_url":"https://api.github.com/users/medic/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/medic/medic-webapp","description":"The Medic Mobile web application combines SMS messaging, data collection, and analytics for health workers and health systems in hard-to-reach areas with or without internet connectivity.","fork":false,"url":"https://api.github.com/repos/medic/medic-webapp","forks_url":"https://api.github.com/repos/medic/medic-webapp/forks","keys_url":"https://api.github.com/repos/medic/medic-webapp/keys{/key_id}","collaborators_url":"https://api.github.com/repos/medic/medic-webapp/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/medic/medic-webapp/teams","hooks_url":"https://api.github.com/repos/medic/medic-webapp/hooks","issue_events_url":"https://api.github.com/repos/medic/medic-webapp/issues/events{/number}","events_url":"https://api.github.com/repos/medic/medic-webapp/events","assignees_url":"https://api.github.com/repos/medic/medic-webapp/assignees{/user}","branches_url":"https://api.github.com/repos/medic/medic-webapp/branches{/branch}","tags_url":"https://api.github.com/repos/medic/medic-webapp/tags","blobs_url":"https://api.github.com/repos/medic/medic-webapp/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/medic/medic-webapp/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/medic/medic-webapp/git/refs{/sha}","trees_url":"https://api.github.com/repos/medic/medic-webapp/git/trees{/sha}","statuses_url":"https://api.github.com/repos/medic/medic-webapp/statuses/{sha}","languages_url":"https://api.github.com/repos/medic/medic-webapp/languages","stargazers_url":"https://api.github.com/repos/medic/medic-webapp/stargazers","contributors_url":"https://api.github.com/repos/medic/medic-webapp/contributors","subscribers_url":"https://api.github.com/repos/medic/medic-webapp/subscribers","subscription_url":"https://api.github.com/repos/medic/medic-webapp/subscription","commits_url":"https://api.github.com/repos/medic/medic-webapp/commits{/sha}","git_commits_url":"https://api.github.com/repos/medic/medic-webapp/git/commits{/sha}","comments_url":"https://api.github.com/repos/medic/medic-webapp/comments{/number}","issue_comment_url":"https://api.github.com/repos/medic/medic-webapp/issues/comments{/number}","contents_url":"https://api.github.com/repos/medic/medic-webapp/contents/{+path}","compare_url":"https://api.github.com/repos/medic/medic-webapp/compare/{base}...{head}","merges_url":"https://api.github.com/repos/medic/medic-webapp/merges","archive_url":"https://api.github.com/repos/medic/medic-webapp/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/medic/medic-webapp/downloads","issues_url":"https://api.github.com/repos/medic/medic-webapp/issues{/number}","pulls_url":"https://api.github.com/repos/medic/medic-webapp/pulls{/number}","milestones_url":"https://api.github.com/repos/medic/medic-webapp/milestones{/number}","notifications_url":"https://api.github.com/repos/medic/medic-webapp/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/medic/medic-webapp/labels{/name}","releases_url":"https://api.github.com/repos/medic/medic-webapp/releases{/id}","deployments_url":"https://api.github.com/repos/medic/medic-webapp/deployments","created_at":"2011-11-02T23:19:55Z","updated_at":"2016-04-08T15:11:43Z","pushed_at":"2016-04-19T10:02:42Z","git_url":"git://github.com/medic/medic-webapp.git","ssh_url":"git@github.com:medic/medic-webapp.git","clone_url":"https://github.com/medic/medic-webapp.git","svn_url":"https://github.com/medic/medic-webapp","homepage":"http://medicmobile.org/tools","size":30132,"stargazers_count":56,"watchers_count":56,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":32,"mirror_url":null,"open_issues_count":368,"forks":32,"open_issues":368,"watchers":56,"default_branch":"develop"}},"base":{"label":"medic:develop","ref":"develop","sha":"52485a34bf7d5759bb146da1fb8f19003189c6e8","user":{"login":"medic","id":474424,"avatar_url":"https://avatars.githubusercontent.com/u/474424?v=3","gravatar_id":"","url":"https://api.github.com/users/medic","html_url":"https://github.com/medic","followers_url":"https://api.github.com/users/medic/followers","following_url":"https://api.github.com/users/medic/following{/other_user}","gists_url":"https://api.github.com/users/medic/gists{/gist_id}","starred_url":"https://api.github.com/users/medic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/medic/subscriptions","organizations_url":"https://api.github.com/users/medic/orgs","repos_url":"https://api.github.com/users/medic/repos","events_url":"https://api.github.com/users/medic/events{/privacy}","received_events_url":"https://api.github.com/users/medic/received_events","type":"Organization","site_admin":false},"repo":{"id":2698821,"name":"medic-webapp","full_name":"medic/medic-webapp","owner":{"login":"medic","id":474424,"avatar_url":"https://avatars.githubusercontent.com/u/474424?v=3","gravatar_id":"","url":"https://api.github.com/users/medic","html_url":"https://github.com/medic","followers_url":"https://api.github.com/users/medic/followers","following_url":"https://api.github.com/users/medic/following{/other_user}","gists_url":"https://api.github.com/users/medic/gists{/gist_id}","starred_url":"https://api.github.com/users/medic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/medic/subscriptions","organizations_url":"https://api.github.com/users/medic/orgs","repos_url":"https://api.github.com/users/medic/repos","events_url":"https://api.github.com/users/medic/events{/privacy}","received_events_url":"https://api.github.com/users/medic/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/medic/medic-webapp","description":"The Medic Mobile web application combines SMS messaging, data collection, and analytics for health workers and health systems in hard-to-reach areas with or without internet connectivity.","fork":false,"url":"https://api.github.com/repos/medic/medic-webapp","forks_url":"https://api.github.com/repos/medic/medic-webapp/forks","keys_url":"https://api.github.com/repos/medic/medic-webapp/keys{/key_id}","collaborators_url":"https://api.github.com/repos/medic/medic-webapp/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/medic/medic-webapp/teams","hooks_url":"https://api.github.com/repos/medic/medic-webapp/hooks","issue_events_url":"https://api.github.com/repos/medic/medic-webapp/issues/events{/number}","events_url":"https://api.github.com/repos/medic/medic-webapp/events","assignees_url":"https://api.github.com/repos/medic/medic-webapp/assignees{/user}","branches_url":"https://api.github.com/repos/medic/medic-webapp/branches{/branch}","tags_url":"https://api.github.com/repos/medic/medic-webapp/tags","blobs_url":"https://api.github.com/repos/medic/medic-webapp/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/medic/medic-webapp/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/medic/medic-webapp/git/refs{/sha}","trees_url":"https://api.github.com/repos/medic/medic-webapp/git/trees{/sha}","statuses_url":"https://api.github.com/repos/medic/medic-webapp/statuses/{sha}","languages_url":"https://api.github.com/repos/medic/medic-webapp/languages","stargazers_url":"https://api.github.com/repos/medic/medic-webapp/stargazers","contributors_url":"https://api.github.com/repos/medic/medic-webapp/contributors","subscribers_url":"https://api.github.com/repos/medic/medic-webapp/subscribers","subscription_url":"https://api.github.com/repos/medic/medic-webapp/subscription","commits_url":"https://api.github.com/repos/medic/medic-webapp/commits{/sha}","git_commits_url":"https://api.github.com/repos/medic/medic-webapp/git/commits{/sha}","comments_url":"https://api.github.com/repos/medic/medic-webapp/comments{/number}","issue_comment_url":"https://api.github.com/repos/medic/medic-webapp/issues/comments{/number}","contents_url":"https://api.github.com/repos/medic/medic-webapp/contents/{+path}","compare_url":"https://api.github.com/repos/medic/medic-webapp/compare/{base}...{head}","merges_url":"https://api.github.com/repos/medic/medic-webapp/merges","archive_url":"https://api.github.com/repos/medic/medic-webapp/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/medic/medic-webapp/downloads","issues_url":"https://api.github.com/repos/medic/medic-webapp/issues{/number}","pulls_url":"https://api.github.com/repos/medic/medic-webapp/pulls{/number}","milestones_url":"https://api.github.com/repos/medic/medic-webapp/milestones{/number}","notifications_url":"https://api.github.com/repos/medic/medic-webapp/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/medic/medic-webapp/labels{/name}","releases_url":"https://api.github.com/repos/medic/medic-webapp/releases{/id}","deployments_url":"https://api.github.com/repos/medic/medic-webapp/deployments","created_at":"2011-11-02T23:19:55Z","updated_at":"2016-04-08T15:11:43Z","pushed_at":"2016-04-19T10:02:42Z","git_url":"git://github.com/medic/medic-webapp.git","ssh_url":"git@github.com:medic/medic-webapp.git","clone_url":"https://github.com/medic/medic-webapp.git","svn_url":"https://github.com/medic/medic-webapp","homepage":"http://medicmobile.org/tools","size":30132,"stargazers_count":56,"watchers_count":56,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":32,"mirror_url":null,"open_issues_count":368,"forks":32,"open_issues":368,"watchers":56,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/medic/medic-webapp/pulls/2208"},"html":{"href":"https://github.com/medic/medic-webapp/pull/2208"},"issue":{"href":"https://api.github.com/repos/medic/medic-webapp/issues/2208"},"comments":{"href":"https://api.github.com/repos/medic/medic-webapp/issues/2208/comments"},"review_comments":{"href":"https://api.github.com/repos/medic/medic-webapp/pulls/2208/comments"},"review_comment":{"href":"https://api.github.com/repos/medic/medic-webapp/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/medic/medic-webapp/pulls/2208/commits"},"statuses":{"href":"https://api.github.com/repos/medic/medic-webapp/statuses/b9b6a63261f697c49263827189ec87daf6b79c4b"}}}}