)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"5c38f16d4f7ba4af0506955382b653ef68181f06","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Metadata update modal dialog used by dependant patches."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Implemenents: blueprint angularize-metadata-update-modals"},{"line_number":12,"context_line":"Change-Id: I36bfb91f8b6bbba49fed6bb01cd1dd266261cfdb"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"ba3cc151_3bf0d790","line":11,"updated":"2015-07-01 22:43:23.000000000","message":"Partially-Implements:","commit_id":"f0adc5ef445946c76a0a5eaae00a21e4e690f059"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"2e7467dc5a685d45cb2a6c1813cb25576c1f709a","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Metadata update modal dialog used by dependant patches."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Implemenents: blueprint angularize-metadata-update-modals"},{"line_number":12,"context_line":"Change-Id: I36bfb91f8b6bbba49fed6bb01cd1dd266261cfdb"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"ba3cc151_d20bbe28","line":11,"in_reply_to":"ba3cc151_3bf0d790","updated":"2015-07-02 08:18:40.000000000","message":"Done","commit_id":"f0adc5ef445946c76a0a5eaae00a21e4e690f059"}],"horizon/static/framework/widgets/metadata-modal/metadata-modal-helper.controller.js":[{"author":{"_account_id":9622,"name":"Cindy Lu","email":"clu@us.ibm.com","username":"clu14"},"change_message_id":"57ac238e814c4ed4ea03fddf1cc41760fee6438e","unresolved":false,"context_lines":[{"line_number":8,"context_line":"   * Helper controller used by Horizon part written in Django."},{"line_number":9,"context_line":"   */"},{"line_number":10,"context_line":"  angular.module(\u0027horizon.framework.widgets.metadata-modal\u0027)"},{"line_number":11,"context_line":"  .controller(\u0027MetadataModalHelperCtrl\u0027, MetadataModalHelperCtrl);"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"  MetadataModalHelperCtrl.$inject \u003d ["},{"line_number":14,"context_line":"    \u0027$window\u0027,"}],"source_content_type":"text/javascript","patch_set":9,"id":"3afb71cf_5f1f8cb7","line":11,"updated":"2015-06-11 18:05:19.000000000","message":"angular\n     .module(\u0027horizon.framework.widgets.metadata-modal\u0027)\n     .controller(\u0027MetadataModalHelperCtrl\u0027, MetadataModalHelperCtrl);","commit_id":"d737fc7f0e301c9f6e6dc63bbef40af5fdfb954b"},{"author":{"_account_id":13785,"name":"Kelly Domico","email":"kelly.domico@hp.com","username":"kdomico"},"change_message_id":"e8e81879b1e35bbca60c952512c8d26536c9a15a","unresolved":false,"context_lines":[{"line_number":9,"context_line":"   */"},{"line_number":10,"context_line":"  angular"},{"line_number":11,"context_line":"    .module(\u0027horizon.framework.widgets.metadata-modal\u0027)"},{"line_number":12,"context_line":"    .controller(\u0027MetadataModalHelperCtrl\u0027, MetadataModalHelperCtrl);"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"  MetadataModalHelperCtrl.$inject \u003d ["},{"line_number":15,"context_line":"    \u0027$window\u0027,"}],"source_content_type":"text/javascript","patch_set":10,"id":"fa32b979_fd5e8075","line":12,"updated":"2015-06-13 15:03:32.000000000","message":"Change \u0027Ctrl\u0027 to be \u0027Controller\u0027 to match filename. We\u0027ve been cleaning up a few things following John Papa\u0027s Angular style guide.","commit_id":"a36d1ad137b082f0617560b0b9ebff8e2b312966"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"09e92a8aa249b1bc71d4d536b554dcfddbc6a40c","unresolved":false,"context_lines":[{"line_number":9,"context_line":"   */"},{"line_number":10,"context_line":"  angular"},{"line_number":11,"context_line":"    .module(\u0027horizon.framework.widgets.metadata-modal\u0027)"},{"line_number":12,"context_line":"    .controller(\u0027MetadataModalHelperCtrl\u0027, MetadataModalHelperCtrl);"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"  MetadataModalHelperCtrl.$inject \u003d ["},{"line_number":15,"context_line":"    \u0027$window\u0027,"}],"source_content_type":"text/javascript","patch_set":10,"id":"fa32b979_34b6218b","line":12,"in_reply_to":"fa32b979_fd5e8075","updated":"2015-06-15 12:06:07.000000000","message":"Done","commit_id":"a36d1ad137b082f0617560b0b9ebff8e2b312966"}],"horizon/static/framework/widgets/metadata-modal/metadata-modal.controller.js":[{"author":{"_account_id":9622,"name":"Cindy Lu","email":"clu@us.ibm.com","username":"clu14"},"change_message_id":"57ac238e814c4ed4ea03fddf1cc41760fee6438e","unresolved":false,"context_lines":[{"line_number":7,"context_line":"   * @description"},{"line_number":8,"context_line":"   * Controller used by `MetadataModalService`"},{"line_number":9,"context_line":"   */"},{"line_number":10,"context_line":"  angular.module(\u0027horizon.framework.widgets.metadata-modal\u0027)"},{"line_number":11,"context_line":"  .controller(\u0027MetadataModalCtrl\u0027, MetadataModalCtrl);"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"  MetadataModalCtrl.$inject \u003d ["}],"source_content_type":"text/javascript","patch_set":9,"id":"3afb71cf_7fc6c84a","line":10,"updated":"2015-06-11 18:05:19.000000000","message":"angular\n    .module(\u0027horizon.framework.widgets.metadata-modal\u0027)\n    .controller(\u0027MetadataModalCtrl\u0027, MetadataModalCtrl);","commit_id":"d737fc7f0e301c9f6e6dc63bbef40af5fdfb954b"},{"author":{"_account_id":13785,"name":"Kelly Domico","email":"kelly.domico@hp.com","username":"kdomico"},"change_message_id":"e8e81879b1e35bbca60c952512c8d26536c9a15a","unresolved":false,"context_lines":[{"line_number":11,"context_line":"    .module(\u0027horizon.framework.widgets.metadata-modal\u0027)"},{"line_number":12,"context_line":"    .controller(\u0027MetadataModalCtrl\u0027, MetadataModalCtrl);"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"  MetadataModalCtrl.$inject \u003d ["},{"line_number":15,"context_line":"    \u0027$modalInstance\u0027,"},{"line_number":16,"context_line":"    \u0027horizon.framework.widgets.metadata-tree.service\u0027,"},{"line_number":17,"context_line":"    // Dependencies injected with resolve by $modal.open"}],"source_content_type":"text/javascript","patch_set":10,"id":"fa32b979_ddd05ccc","line":14,"updated":"2015-06-13 15:03:32.000000000","message":"Ctrl to Controller","commit_id":"a36d1ad137b082f0617560b0b9ebff8e2b312966"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"09e92a8aa249b1bc71d4d536b554dcfddbc6a40c","unresolved":false,"context_lines":[{"line_number":11,"context_line":"    .module(\u0027horizon.framework.widgets.metadata-modal\u0027)"},{"line_number":12,"context_line":"    .controller(\u0027MetadataModalCtrl\u0027, MetadataModalCtrl);"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"  MetadataModalCtrl.$inject \u003d ["},{"line_number":15,"context_line":"    \u0027$modalInstance\u0027,"},{"line_number":16,"context_line":"    \u0027horizon.framework.widgets.metadata-tree.service\u0027,"},{"line_number":17,"context_line":"    // Dependencies injected with resolve by $modal.open"}],"source_content_type":"text/javascript","patch_set":10,"id":"fa32b979_f4b0b98d","line":14,"in_reply_to":"fa32b979_ddd05ccc","updated":"2015-06-15 12:06:07.000000000","message":"Done","commit_id":"a36d1ad137b082f0617560b0b9ebff8e2b312966"}],"horizon/static/framework/widgets/metadata-modal/metadata-modal.js":[{"author":{"_account_id":14307,"name":"Tyr Johanson","email":"tyr@hpe.com","username":"tyr"},"change_message_id":"cd2b43b0421577c3c9d2aef4980b65faa8eb9581","unresolved":false,"context_lines":[{"line_number":8,"context_line":"  .constant(\u0027horizon.framework.widgets.metadata-modal.defaults\u0027, {"},{"line_number":9,"context_line":"    modalOptions : {"},{"line_number":10,"context_line":"      backdrop: \u0027static\u0027,"},{"line_number":11,"context_line":"      controller: \u0027MetadataModalInstanceCtrl\u0027,"},{"line_number":12,"context_line":"      windowClass: \u0027modal-dialog-metadata\u0027"},{"line_number":13,"context_line":"    },"},{"line_number":14,"context_line":"    text: {"}],"source_content_type":"text/javascript","patch_set":3,"id":"7a016987_a4a13748","line":11,"updated":"2015-05-20 16:19:43.000000000","message":"Use controllerAs where possible to make the controller more clear what data it provides, versus expecting to find on $scope.","commit_id":"47bd4c702f9e121883bc1be6be2a8067be0d8bd7"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"3781942c109373ade478b35e168bb7e59984495e","unresolved":false,"context_lines":[{"line_number":8,"context_line":"  .constant(\u0027horizon.framework.widgets.metadata-modal.defaults\u0027, {"},{"line_number":9,"context_line":"    modalOptions : {"},{"line_number":10,"context_line":"      backdrop: \u0027static\u0027,"},{"line_number":11,"context_line":"      controller: \u0027MetadataModalInstanceCtrl\u0027,"},{"line_number":12,"context_line":"      windowClass: \u0027modal-dialog-metadata\u0027"},{"line_number":13,"context_line":"    },"},{"line_number":14,"context_line":"    text: {"}],"source_content_type":"text/javascript","patch_set":3,"id":"7a016987_d45ccf7e","line":11,"in_reply_to":"7a016987_a4a13748","updated":"2015-05-21 14:43:31.000000000","message":"Done, but for controllerAs to work angular-ui-bootstrap\u003e\u003d0.13.0 is required.\nFor now only code below works:\n\n  controller: \u0027MetadataModalInstanceCtrl as modal\u0027,","commit_id":"47bd4c702f9e121883bc1be6be2a8067be0d8bd7"},{"author":{"_account_id":14307,"name":"Tyr Johanson","email":"tyr@hpe.com","username":"tyr"},"change_message_id":"cd2b43b0421577c3c9d2aef4980b65faa8eb9581","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    \u0027$scope\u0027, \u0027$modalInstance\u0027,"},{"line_number":91,"context_line":"    \u0027horizon.framework.widgets.metadata-tree.service\u0027,"},{"line_number":92,"context_line":"    \u0027horizon.framework.widgets.metadata-modal.defaults\u0027,"},{"line_number":93,"context_line":"    \u0027available\u0027, \u0027existing\u0027, \u0027save\u0027,"},{"line_number":94,"context_line":"    function MetadataModalInstanceCtrl("},{"line_number":95,"context_line":"      $scope, $modalInstance,"},{"line_number":96,"context_line":"      metadataTreeService, defaults,"}],"source_content_type":"text/javascript","patch_set":3,"id":"7a016987_44f04391","line":93,"updated":"2015-05-20 16:19:43.000000000","message":"It took me awhile to understand where available, existing and save were coming from. The modal service provides them from the \"resolve\" property of the modal options...but just looking at line 93 it is difficult to easily see that.\n\nWhat do you think about moving available, existing and save into \"values\" such as \"horizon.framework.widgets.metadata-modal.available\"? This would remove the need to pass them in as modalOptions and might make the controller dependencies more clear.\n\nnit: Consider putting each dependency on its own line","commit_id":"47bd4c702f9e121883bc1be6be2a8067be0d8bd7"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"3781942c109373ade478b35e168bb7e59984495e","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    \u0027$scope\u0027, \u0027$modalInstance\u0027,"},{"line_number":91,"context_line":"    \u0027horizon.framework.widgets.metadata-tree.service\u0027,"},{"line_number":92,"context_line":"    \u0027horizon.framework.widgets.metadata-modal.defaults\u0027,"},{"line_number":93,"context_line":"    \u0027available\u0027, \u0027existing\u0027, \u0027save\u0027,"},{"line_number":94,"context_line":"    function MetadataModalInstanceCtrl("},{"line_number":95,"context_line":"      $scope, $modalInstance,"},{"line_number":96,"context_line":"      metadataTreeService, defaults,"}],"source_content_type":"text/javascript","patch_set":3,"id":"7a016987_f9c7c695","line":93,"in_reply_to":"7a016987_44f04391","updated":"2015-05-21 14:43:31.000000000","message":"@Tyr: I know that \"resolve\" makes it quite unclear, but it has this awesome feature - when given promises it\u0027ll resolve them first before launching modal. If something goes wrong you\u0027ll only see message, rather than modal with widget without data.\n\nAlso \"existing\" and \"save\" are promise and function respectively, prepared only for specific modal that work on specific image/flavor/... . Think about those as parameters, so I don\u0027t think it\u0027s wise to pass them as global variables.\n\n@Travis: Done","commit_id":"47bd4c702f9e121883bc1be6be2a8067be0d8bd7"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"a2a9acba9f1ffb95626fe212c70eac5380523ba0","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    \u0027$scope\u0027, \u0027$modalInstance\u0027,"},{"line_number":91,"context_line":"    \u0027horizon.framework.widgets.metadata-tree.service\u0027,"},{"line_number":92,"context_line":"    \u0027horizon.framework.widgets.metadata-modal.defaults\u0027,"},{"line_number":93,"context_line":"    \u0027available\u0027, \u0027existing\u0027, \u0027save\u0027,"},{"line_number":94,"context_line":"    function MetadataModalInstanceCtrl("},{"line_number":95,"context_line":"      $scope, $modalInstance,"},{"line_number":96,"context_line":"      metadataTreeService, defaults,"}],"source_content_type":"text/javascript","patch_set":3,"id":"7a016987_dd8bddc1","line":93,"in_reply_to":"7a016987_44f04391","updated":"2015-05-21 07:27:03.000000000","message":"To be honest, I\u0027m going to start advocating this syntax:\n\nhttps://github.com/johnpapa/angular-styleguide#style-y091","commit_id":"47bd4c702f9e121883bc1be6be2a8067be0d8bd7"},{"author":{"_account_id":14307,"name":"Tyr Johanson","email":"tyr@hpe.com","username":"tyr"},"change_message_id":"bb9154b7aa3a93abda0934ae250112f79a6800c0","unresolved":false,"context_lines":[{"line_number":11,"context_line":"  var MetadataModalDefaults \u003d {"},{"line_number":12,"context_line":"    modalOptions: {"},{"line_number":13,"context_line":"      backdrop: \u0027static\u0027,"},{"line_number":14,"context_line":"      controller: \u0027MetadataModalInstanceCtrl as modal\u0027,"},{"line_number":15,"context_line":"      //todo(bluex): angular-ui-bootstrap\u003e\u003d0.13.0 required for syntax below"},{"line_number":16,"context_line":"      //controller: MetadataModalInstanceCtrl,"},{"line_number":17,"context_line":"      //controllerAs: \u0027modal\u0027,"}],"source_content_type":"text/javascript","patch_set":5,"id":"7a016987_0dbed5fe","line":14,"updated":"2015-05-21 18:41:51.000000000","message":"I\u0027m curious why \"modal\" instead of \"ctrl\" in this case?","commit_id":"3ab6a5b89f9c4fd0dfab8f8484beab82009fe891"},{"author":{"_account_id":14307,"name":"Tyr Johanson","email":"tyr@hpe.com","username":"tyr"},"change_message_id":"bb9154b7aa3a93abda0934ae250112f79a6800c0","unresolved":false,"context_lines":[{"line_number":28,"context_line":"  MetadataModalService.$inject \u003d ["},{"line_number":29,"context_line":"  \u0027$modal\u0027,"},{"line_number":30,"context_line":"  \u0027horizon.framework.widgets.basePath\u0027"},{"line_number":31,"context_line":"  ];"},{"line_number":32,"context_line":"  function MetadataModalService($modal, path) {"},{"line_number":33,"context_line":"    function open(resource, id) {"},{"line_number":34,"context_line":"      var resourceMapping \u003d {"}],"source_content_type":"text/javascript","patch_set":5,"id":"7a016987_2dd071f5","line":31,"updated":"2015-05-21 18:41:51.000000000","message":"I know the style guide suggests this, and Travis is thinking of advocating it...but maybe the correct direction is to begin using ng-annotate with ng-strict-di?\n\nPersonally, I think the in-line array syntax works well, linking the function definition with the exact injections and allowing injection of our \"blah.blah\" services.\n\nI\u0027m a little nervous about separating the list of injectables from the function definition.  When someone forgets to include the service.$inject, then Angular will fall back on the parameter names which will not survive minification. And since we are used to seeing functions with simple parameters (instead of array syntax) reviewers are less likely to notice.\n\nThis will lead to a series of difficult to understand bugs","commit_id":"3ab6a5b89f9c4fd0dfab8f8484beab82009fe891"},{"author":{"_account_id":14307,"name":"Tyr Johanson","email":"tyr@hpe.com","username":"tyr"},"change_message_id":"bb9154b7aa3a93abda0934ae250112f79a6800c0","unresolved":false,"context_lines":[{"line_number":94,"context_line":"  MetadataModalInstanceCtrl.$inject \u003d ["},{"line_number":95,"context_line":"    \u0027$modalInstance\u0027,"},{"line_number":96,"context_line":"    \u0027horizon.framework.widgets.metadata-tree.service\u0027,"},{"line_number":97,"context_line":"    // Dependencies injected by $modal.open"},{"line_number":98,"context_line":"    \u0027available\u0027,"},{"line_number":99,"context_line":"    \u0027existing\u0027,"},{"line_number":100,"context_line":"    \u0027update\u0027"}],"source_content_type":"text/javascript","patch_set":5,"id":"7a016987_6d37894d","line":97,"updated":"2015-05-21 18:41:51.000000000","message":"This helps, but maybe more clear if:\n\n// Dependencies injected using properties in modalOptions.resolve by $modal.open.","commit_id":"3ab6a5b89f9c4fd0dfab8f8484beab82009fe891"},{"author":{"_account_id":13805,"name":"Shaoquan Chen","email":"sean.chen2@hp.com","username":"SeanChen"},"change_message_id":"bb5c70e212f160b7815e43c14129071e5147014a","unresolved":false,"context_lines":[{"line_number":4,"context_line":"  angular.module(\u0027horizon.framework.widgets.metadata-modal\u0027, ["},{"line_number":5,"context_line":"    \u0027horizon.framework.widgets.metadata-tree\u0027"},{"line_number":6,"context_line":"  ])"},{"line_number":7,"context_line":"  .factory(\u0027horizon.framework.widgets.metadata-modal.service\u0027, MetadataModalService)"},{"line_number":8,"context_line":"  .controller(\u0027MetadataModalCtrl\u0027, MetadataModalCtrl)"},{"line_number":9,"context_line":"  .controller(\u0027MetadataModalInstanceCtrl\u0027, MetadataModalInstanceCtrl);"},{"line_number":10,"context_line":""}],"source_content_type":"text/javascript","patch_set":7,"id":"3afb71cf_32390ca5","line":7,"updated":"2015-06-09 19:58:41.000000000","message":"Do we want to have separate file for each service/controller?","commit_id":"66e899d72f32edca5dc62dd630a3de63a4ebbcad"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"f1713d9c7415335e0d4b22369884b211abc8a105","unresolved":false,"context_lines":[{"line_number":4,"context_line":"  angular.module(\u0027horizon.framework.widgets.metadata-modal\u0027, ["},{"line_number":5,"context_line":"    \u0027horizon.framework.widgets.metadata-tree\u0027"},{"line_number":6,"context_line":"  ])"},{"line_number":7,"context_line":"  .factory(\u0027horizon.framework.widgets.metadata-modal.service\u0027, MetadataModalService)"},{"line_number":8,"context_line":"  .controller(\u0027MetadataModalCtrl\u0027, MetadataModalCtrl)"},{"line_number":9,"context_line":"  .controller(\u0027MetadataModalInstanceCtrl\u0027, MetadataModalInstanceCtrl);"},{"line_number":10,"context_line":""}],"source_content_type":"text/javascript","patch_set":7,"id":"3afb71cf_486dcdca","line":7,"in_reply_to":"3afb71cf_32390ca5","updated":"2015-06-10 16:58:33.000000000","message":"File is quite short, don\u0027t really see need to split it.","commit_id":"66e899d72f32edca5dc62dd630a3de63a4ebbcad"},{"author":{"_account_id":13805,"name":"Shaoquan Chen","email":"sean.chen2@hp.com","username":"SeanChen"},"change_message_id":"bb5c70e212f160b7815e43c14129071e5147014a","unresolved":false,"context_lines":[{"line_number":26,"context_line":"  };"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"  MetadataModalService.$inject \u003d ["},{"line_number":29,"context_line":"  \u0027$modal\u0027,"},{"line_number":30,"context_line":"  \u0027horizon.framework.widgets.basePath\u0027"},{"line_number":31,"context_line":"  ];"},{"line_number":32,"context_line":"  function MetadataModalService($modal, path) {"}],"source_content_type":"text/javascript","patch_set":7,"id":"3afb71cf_12a290fd","line":29,"updated":"2015-06-09 19:58:41.000000000","message":"nit: indentation here got the array.","commit_id":"66e899d72f32edca5dc62dd630a3de63a4ebbcad"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"f1713d9c7415335e0d4b22369884b211abc8a105","unresolved":false,"context_lines":[{"line_number":26,"context_line":"  };"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"  MetadataModalService.$inject \u003d ["},{"line_number":29,"context_line":"  \u0027$modal\u0027,"},{"line_number":30,"context_line":"  \u0027horizon.framework.widgets.basePath\u0027"},{"line_number":31,"context_line":"  ];"},{"line_number":32,"context_line":"  function MetadataModalService($modal, path) {"}],"source_content_type":"text/javascript","patch_set":7,"id":"3afb71cf_c88f7d73","line":29,"in_reply_to":"3afb71cf_12a290fd","updated":"2015-06-10 16:58:33.000000000","message":"Will fix with next patch.","commit_id":"66e899d72f32edca5dc62dd630a3de63a4ebbcad"},{"author":{"_account_id":9622,"name":"Cindy Lu","email":"clu@us.ibm.com","username":"clu14"},"change_message_id":"3ff03025cd457e424af668b591f881039c9a3fb2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"(function () {"},{"line_number":2,"context_line":"  \u0027use strict\u0027;"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"  angular.module(\u0027horizon.framework.widgets.metadata-modal\u0027, ["},{"line_number":5,"context_line":"    \u0027horizon.framework.widgets.metadata-tree\u0027"},{"line_number":6,"context_line":"  ])"}],"source_content_type":"text/javascript","patch_set":8,"id":"3afb71cf_e36b7a1c","line":3,"updated":"2015-06-10 18:14:49.000000000","message":"We are using John Papa style guide: https://github.com/johnpapa/angular-styleguide\n\n- one component per file, so separate out factory, controllers","commit_id":"840f7302613954b0733f717d80726aff3d85e6ac"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"f1115a34fc79e82df9e002fbfc0458a144af79d7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"(function () {"},{"line_number":2,"context_line":"  \u0027use strict\u0027;"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"  angular.module(\u0027horizon.framework.widgets.metadata-modal\u0027, ["},{"line_number":5,"context_line":"    \u0027horizon.framework.widgets.metadata-tree\u0027"},{"line_number":6,"context_line":"  ])"}],"source_content_type":"text/javascript","patch_set":8,"id":"3afb71cf_8cae192c","line":3,"in_reply_to":"3afb71cf_e36b7a1c","updated":"2015-06-11 14:50:55.000000000","message":"Done","commit_id":"840f7302613954b0733f717d80726aff3d85e6ac"},{"author":{"_account_id":9622,"name":"Cindy Lu","email":"clu@us.ibm.com","username":"clu14"},"change_message_id":"3ff03025cd457e424af668b591f881039c9a3fb2","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    function openMetadataModal(resource, id, reload) {"},{"line_number":147,"context_line":"      metadataModalService.open(resource, id).result.then(function () {"},{"line_number":148,"context_line":"        if(reload){"},{"line_number":149,"context_line":"          $window.location.reload();"},{"line_number":150,"context_line":"          //TODO(bluex): remove when reload is no longer needed"},{"line_number":151,"context_line":"        }"}],"source_content_type":"text/javascript","patch_set":8,"id":"3afb71cf_d571510d","line":148,"updated":"2015-06-10 18:14:49.000000000","message":"space after if and before {\n\nrun jscs on this file (https://review.openstack.org/#/c/185725/)","commit_id":"840f7302613954b0733f717d80726aff3d85e6ac"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"f1115a34fc79e82df9e002fbfc0458a144af79d7","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    function openMetadataModal(resource, id, reload) {"},{"line_number":147,"context_line":"      metadataModalService.open(resource, id).result.then(function () {"},{"line_number":148,"context_line":"        if(reload){"},{"line_number":149,"context_line":"          $window.location.reload();"},{"line_number":150,"context_line":"          //TODO(bluex): remove when reload is no longer needed"},{"line_number":151,"context_line":"        }"}],"source_content_type":"text/javascript","patch_set":8,"id":"3afb71cf_ec6b4def","line":148,"in_reply_to":"3afb71cf_d571510d","updated":"2015-06-11 14:50:55.000000000","message":"Done","commit_id":"840f7302613954b0733f717d80726aff3d85e6ac"}],"horizon/static/framework/widgets/metadata-tree/metadata-tree-service.js":[{"author":{"_account_id":13805,"name":"Shaoquan Chen","email":"sean.chen2@hp.com","username":"SeanChen"},"change_message_id":"bb5c70e212f160b7815e43c14129071e5147014a","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    /**"},{"line_number":93,"context_line":"     * Serialize {@link Property#value} and returns it"},{"line_number":94,"context_line":"     *"},{"line_number":95,"context_line":"     * @returns {*}"},{"line_number":96,"context_line":"     */"},{"line_number":97,"context_line":"    Property.prototype.getValue \u003d function () {"},{"line_number":98,"context_line":"      switch (this.type) {"}],"source_content_type":"text/javascript","patch_set":7,"id":"3afb71cf_1265f0b3","line":95,"updated":"2015-06-09 19:58:41.000000000","message":"now the return type is string?","commit_id":"66e899d72f32edca5dc62dd630a3de63a4ebbcad"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"f1713d9c7415335e0d4b22369884b211abc8a105","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    /**"},{"line_number":93,"context_line":"     * Serialize {@link Property#value} and returns it"},{"line_number":94,"context_line":"     *"},{"line_number":95,"context_line":"     * @returns {*}"},{"line_number":96,"context_line":"     */"},{"line_number":97,"context_line":"    Property.prototype.getValue \u003d function () {"},{"line_number":98,"context_line":"      switch (this.type) {"}],"source_content_type":"text/javascript","patch_set":7,"id":"3afb71cf_52958184","line":95,"in_reply_to":"3afb71cf_1265f0b3","updated":"2015-06-10 16:58:33.000000000","message":"Yup, done","commit_id":"66e899d72f32edca5dc62dd630a3de63a4ebbcad"}],"horizon/static/framework/widgets/metadata-tree/metadata-tree.module.js":[{"author":{"_account_id":13805,"name":"Shaoquan Chen","email":"sean.chen2@hp.com","username":"SeanChen"},"change_message_id":"272dba9f6c2a07b5e09a7c3ea9d5497c7a32c270","unresolved":false,"context_lines":[{"line_number":68,"context_line":"   * @param {object\u003d} text Text override"},{"line_number":69,"context_line":"   * @param {object\u003d} form Existing items form binding"},{"line_number":70,"context_line":"   */"},{"line_number":71,"context_line":"  .directive(\u0027hzMetadataTree\u0027, [ \u0027horizon.framework.widgets.basePath\u0027,"},{"line_number":72,"context_line":"    function (path) {"},{"line_number":73,"context_line":"      return {"},{"line_number":74,"context_line":"        scope: {"}],"source_content_type":"text/javascript","patch_set":21,"id":"ba3cc151_bf6bf784","line":71,"updated":"2015-07-06 11:06:15.000000000","message":"since you already breaking up some git files into smaller ones for each type in this patch, can you do the same for this file as well? By that I means moving the directive definition into its own .directive.js file.","commit_id":"d7de951707bd2d3bc07eea1f9ef6d43eeb7ff86a"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"7fcb199085920bc8b18697b3507d20cca5911036","unresolved":false,"context_lines":[{"line_number":68,"context_line":"   * @param {object\u003d} text Text override"},{"line_number":69,"context_line":"   * @param {object\u003d} form Existing items form binding"},{"line_number":70,"context_line":"   */"},{"line_number":71,"context_line":"  .directive(\u0027hzMetadataTree\u0027, [ \u0027horizon.framework.widgets.basePath\u0027,"},{"line_number":72,"context_line":"    function (path) {"},{"line_number":73,"context_line":"      return {"},{"line_number":74,"context_line":"        scope: {"}],"source_content_type":"text/javascript","patch_set":21,"id":"ba3cc151_fb014c07","line":71,"in_reply_to":"ba3cc151_bf6bf784","updated":"2015-07-07 16:44:24.000000000","message":"I\u0027m not splitting any files in this patch. I agree it should be done, but in another patch. This one is big enough.","commit_id":"d7de951707bd2d3bc07eea1f9ef6d43eeb7ff86a"},{"author":{"_account_id":13805,"name":"Shaoquan Chen","email":"sean.chen2@hp.com","username":"SeanChen"},"change_message_id":"2cdedaef415d2287ae83f6d50b5b67907f976e13","unresolved":false,"context_lines":[{"line_number":68,"context_line":"   * @param {object\u003d} text Text override"},{"line_number":69,"context_line":"   * @param {object\u003d} form Existing items form binding"},{"line_number":70,"context_line":"   */"},{"line_number":71,"context_line":"  .directive(\u0027hzMetadataTree\u0027, [ \u0027horizon.framework.widgets.basePath\u0027,"},{"line_number":72,"context_line":"    function (path) {"},{"line_number":73,"context_line":"      return {"},{"line_number":74,"context_line":"        scope: {"}],"source_content_type":"text/javascript","patch_set":21,"id":"ba3cc151_bf867a63","line":71,"in_reply_to":"ba3cc151_bf6bf784","updated":"2015-07-06 19:54:49.000000000","message":"Typo in the comment:  git files \u003d\u003d\u003e big files\nsorry for that.","commit_id":"d7de951707bd2d3bc07eea1f9ef6d43eeb7ff86a"}],"openstack_dashboard/api/rest/glance.py":[{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"eb92a895dfc232c1b24630c7eca8cec543aecb8f","unresolved":false,"context_lines":[{"line_number":45,"context_line":"class ImageMetadata(generic.View):"},{"line_number":46,"context_line":"    \"\"\"API for retrieving a single image metadata definitions"},{"line_number":47,"context_line":"    \"\"\""},{"line_number":48,"context_line":"    url_regex \u003d r\u0027glance/images/(?P\u003cimage_id\u003e.+)/metadefs$\u0027"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @rest_utils.ajax()"},{"line_number":51,"context_line":"    def get(self, request, image_id):"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa32b979_bdbf98fb","line":48,"updated":"2015-06-26 00:19:12.000000000","message":"This isn\u0027t returning image metadata definitions. It is returning the extra raw image metadata properties that aren\u0027t defined in the base schema, not the definitions.  I think it should be at a URL of \n\nglance/images/(?P\u003cimage_id\u003e.+)/properties$\n\nor\n\nglance/images/(?P\u003cimage_id\u003e.+)/custom-properties$\n\nThe description should also change to reflect that  Technically, everything you get from the call above (Image class) is metadata.  This is really just a specialization returning just the custom properties. I think that nuance is really hard for people to understand, though.\n\nThis all gets a little more confusing when we get to v1 / v2 differences.\n\nhttp://developer.openstack.org/api-ref-image-v2.html\nhttp://developer.openstack.org/api-ref-image-v1.html\n\nThose are summarized at the bottom of the whiteboard here:\nhttps://blueprints.launchpad.net/horizon/+spec/horizon-glance-v2\nand in this patch:\nhttps://review.openstack.org/#/c/150084/4/openstack_dashboard/api/glance.py\n\nWe haven\u0027t migrated to v2 glance yet and I don\u0027t know if that will get in this release, so you don\u0027t have to deal with that here.","commit_id":"21c2a435bed50e970081ceee6d36e5fda50df560"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"cd31253408439bb58b6928cb977ce4e16384d7d0","unresolved":false,"context_lines":[{"line_number":45,"context_line":"class ImageMetadata(generic.View):"},{"line_number":46,"context_line":"    \"\"\"API for retrieving a single image metadata definitions"},{"line_number":47,"context_line":"    \"\"\""},{"line_number":48,"context_line":"    url_regex \u003d r\u0027glance/images/(?P\u003cimage_id\u003e.+)/metadefs$\u0027"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @rest_utils.ajax()"},{"line_number":51,"context_line":"    def get(self, request, image_id):"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa32b979_331cfe12","line":48,"in_reply_to":"fa32b979_bdbf98fb","updated":"2015-06-26 14:35:30.000000000","message":"Done","commit_id":"21c2a435bed50e970081ceee6d36e5fda50df560"},{"author":{"_account_id":13805,"name":"Shaoquan Chen","email":"sean.chen2@hp.com","username":"SeanChen"},"change_message_id":"272dba9f6c2a07b5e09a7c3ea9d5497c7a32c270","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @rest_utils.ajax()"},{"line_number":51,"context_line":"    def get(self, request, image_id):"},{"line_number":52,"context_line":"        \"\"\"Get a custom properties of specific image."},{"line_number":53,"context_line":"        \"\"\""},{"line_number":54,"context_line":"        return api.glance.image_get(request, image_id).properties"},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"ba3cc151_3fdcc745","line":52,"updated":"2015-07-06 11:06:15.000000000","message":"Should remove `a`?","commit_id":"d7de951707bd2d3bc07eea1f9ef6d43eeb7ff86a"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"7fcb199085920bc8b18697b3507d20cca5911036","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @rest_utils.ajax()"},{"line_number":51,"context_line":"    def get(self, request, image_id):"},{"line_number":52,"context_line":"        \"\"\"Get a custom properties of specific image."},{"line_number":53,"context_line":"        \"\"\""},{"line_number":54,"context_line":"        return api.glance.image_get(request, image_id).properties"},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"ba3cc151_b17c43ec","line":52,"in_reply_to":"ba3cc151_3fdcc745","updated":"2015-07-07 16:44:24.000000000","message":"ok","commit_id":"d7de951707bd2d3bc07eea1f9ef6d43eeb7ff86a"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"b01c8256e5099ae590f0ef216a7ad81a317e221a","unresolved":false,"context_lines":[{"line_number":30,"context_line":"class Image(generic.View):"},{"line_number":31,"context_line":"    \"\"\"API for retrieving a single image"},{"line_number":32,"context_line":"    \"\"\""},{"line_number":33,"context_line":"    url_regex \u003d r\u0027glance/images/(?P\u003cimage_id\u003e.+|default)/$\u0027"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    @rest_utils.ajax()"},{"line_number":36,"context_line":"    def get(self, request, image_id):"}],"source_content_type":"text/x-python","patch_set":37,"id":"fa1b9901_a83e7927","line":33,"updated":"2015-08-21 23:16:54.000000000","message":"seems like we have a few other places in the REST api where we don\u0027t have trailing / , we should make this a consistent behavior. Understandably outside the scope of this patch.","commit_id":"15335d275cd3528db5e4cd02be37718f5c8d28f4"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"b01c8256e5099ae590f0ef216a7ad81a317e221a","unresolved":false,"context_lines":[{"line_number":45,"context_line":"class ImageProperties(generic.View):"},{"line_number":46,"context_line":"    \"\"\"API for retrieving only a custom properties of single image."},{"line_number":47,"context_line":"    \"\"\""},{"line_number":48,"context_line":"    url_regex \u003d r\u0027glance/images/(?P\u003cimage_id\u003e.+)/properties\u0027"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @rest_utils.ajax()"},{"line_number":51,"context_line":"    def get(self, request, image_id):"}],"source_content_type":"text/x-python","patch_set":37,"id":"fa1b9901_e881d1c4","line":48,"updated":"2015-08-21 23:16:54.000000000","message":"need consistency here, end with / as well","commit_id":"15335d275cd3528db5e4cd02be37718f5c8d28f4"}],"openstack_dashboard/api/rest/nova.py":[{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"b01c8256e5099ae590f0ef216a7ad81a317e221a","unresolved":false,"context_lines":[{"line_number":304,"context_line":"class AggregateExtraSpecs(generic.View):"},{"line_number":305,"context_line":"    \"\"\"API for managing aggregate extra specs"},{"line_number":306,"context_line":"    \"\"\""},{"line_number":307,"context_line":"    url_regex \u003d r\u0027nova/aggregates/(?P\u003caggregate_id\u003e.+)/extra-specs$\u0027"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    @rest_utils.ajax()"},{"line_number":310,"context_line":"    def get(self, request, aggregate_id):"}],"source_content_type":"text/x-python","patch_set":37,"id":"fa1b9901_6880618c","line":307,"updated":"2015-08-21 23:16:54.000000000","message":"same here, use consistent url pattern.","commit_id":"15335d275cd3528db5e4cd02be37718f5c8d28f4"}],"openstack_dashboard/enabled/_10_project.py":[{"author":{"_account_id":12826,"name":"Rob Cresswell","display_name":"robcresswell","email":"robert.cresswell@outlook.com","username":"rob-cresswell"},"change_message_id":"9545670a78c75a4eea5cb2eb5f3f660ec03496d0","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    \u0027dashboard/metadata/modal/modal.module.js\u0027,"},{"line_number":55,"context_line":"    \u0027dashboard/metadata/modal/modal.service.js\u0027,"},{"line_number":56,"context_line":"    \u0027dashboard/metadata/modal/modal.controller.js\u0027,"},{"line_number":57,"context_line":"    \u0027dashboard/metadata/modal/modal-helper.controller.js\u0027,"},{"line_number":58,"context_line":"]"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"ADD_JS_SPEC_FILES \u003d ["}],"source_content_type":"text/x-python","patch_set":21,"id":"ba3cc151_8b615207","line":57,"updated":"2015-07-03 07:38:05.000000000","message":"Can this not be done with the auto file discovery?","commit_id":"d7de951707bd2d3bc07eea1f9ef6d43eeb7ff86a"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"7fcb199085920bc8b18697b3507d20cca5911036","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    \u0027dashboard/metadata/modal/modal.module.js\u0027,"},{"line_number":55,"context_line":"    \u0027dashboard/metadata/modal/modal.service.js\u0027,"},{"line_number":56,"context_line":"    \u0027dashboard/metadata/modal/modal.controller.js\u0027,"},{"line_number":57,"context_line":"    \u0027dashboard/metadata/modal/modal-helper.controller.js\u0027,"},{"line_number":58,"context_line":"]"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"ADD_JS_SPEC_FILES \u003d ["}],"source_content_type":"text/x-python","patch_set":21,"id":"ba3cc151_71cd5bb6","line":57,"in_reply_to":"ba3cc151_8b615207","updated":"2015-07-07 16:44:24.000000000","message":"Sadly, no. Auto file discovery is not enabled for js files in dashboard.","commit_id":"d7de951707bd2d3bc07eea1f9ef6d43eeb7ff86a"}],"openstack_dashboard/enabled/_20_admin.py":[{"author":{"_account_id":12826,"name":"Rob Cresswell","display_name":"robcresswell","email":"robert.cresswell@outlook.com","username":"rob-cresswell"},"change_message_id":"9545670a78c75a4eea5cb2eb5f3f660ec03496d0","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    \u0027dashboard/metadata/modal/modal.module.js\u0027,"},{"line_number":31,"context_line":"    \u0027dashboard/metadata/modal/modal.service.js\u0027,"},{"line_number":32,"context_line":"    \u0027dashboard/metadata/modal/modal.controller.js\u0027,"},{"line_number":33,"context_line":"    \u0027dashboard/metadata/modal/modal-helper.controller.js\u0027,"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":21,"id":"ba3cc151_2b37e6ff","line":33,"updated":"2015-07-03 07:38:05.000000000","message":"I\u0027d have thought this could also use the auto file discovery","commit_id":"d7de951707bd2d3bc07eea1f9ef6d43eeb7ff86a"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"7fcb199085920bc8b18697b3507d20cca5911036","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    \u0027dashboard/metadata/modal/modal.module.js\u0027,"},{"line_number":31,"context_line":"    \u0027dashboard/metadata/modal/modal.service.js\u0027,"},{"line_number":32,"context_line":"    \u0027dashboard/metadata/modal/modal.controller.js\u0027,"},{"line_number":33,"context_line":"    \u0027dashboard/metadata/modal/modal-helper.controller.js\u0027,"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":21,"id":"ba3cc151_91dd7f16","line":33,"in_reply_to":"ba3cc151_2b37e6ff","updated":"2015-07-07 16:44:24.000000000","message":"ditto","commit_id":"d7de951707bd2d3bc07eea1f9ef6d43eeb7ff86a"}],"openstack_dashboard/karma.conf.js":[{"author":{"_account_id":12826,"name":"Rob Cresswell","display_name":"robcresswell","email":"robert.cresswell@outlook.com","username":"rob-cresswell"},"change_message_id":"9545670a78c75a4eea5cb2eb5f3f660ec03496d0","unresolved":false,"context_lines":[{"line_number":84,"context_line":"      // TODO: These should be mocked."},{"line_number":85,"context_line":"      \u0027../../horizon/static/horizon/js/horizon.js\u0027,"},{"line_number":86,"context_line":"      \u0027../../horizon/static/framework/util/http/http.js\u0027,"},{"line_number":87,"context_line":"      \u0027../../horizon/static/framework/widgets/metadata-tree/metadata-tree.module.js\u0027,"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"      /**"},{"line_number":90,"context_line":"       * First, list all the files that defines application\u0027s angular modules."}],"source_content_type":"text/javascript","patch_set":21,"id":"ba3cc151_cbb43a83","line":87,"updated":"2015-07-03 07:38:05.000000000","message":"Why are we adding code directly into a todo? Feels like we should do this as part of this patch, unless there are dependants to solve this?","commit_id":"d7de951707bd2d3bc07eea1f9ef6d43eeb7ff86a"}],"openstack_dashboard/static/app/core/core.module.js":[{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"23961843a9c1e3d9adb4b0728473b5062814e322","unresolved":false,"context_lines":[{"line_number":31,"context_line":"      \u0027horizon.app.core.workflow\u0027,"},{"line_number":32,"context_line":"      \u0027horizon.app.core.metadata\u0027"},{"line_number":33,"context_line":"    ])"},{"line_number":34,"context_line":"    .constant(\u0027horizon.app.core.basePath\u0027, \u0027/static/app/core/\u0027);"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"})();"}],"source_content_type":"text/javascript","patch_set":26,"id":"3a50d1a3_1e6d2c32","line":34,"updated":"2015-07-24 22:31:27.000000000","message":"Needs to change to be config from $windowProvider\n\nSee:\nhttps://review.openstack.org/#/c/201661/15/horizon/static/framework/widgets/headers/headers.module.js","commit_id":"dccf531335e0db0225bc582a7e3815abdedf3258"},{"author":{"_account_id":15742,"name":"Paulo Ewerton Gomes Fragoso","email":"pauloewerton@lsd.ufcg.edu.br","username":"pauloewerton"},"change_message_id":"ae1dd6be72af2c61cfac8cb4e636bc301a5de7bf","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"  function config($provide, $windowProvider) {"},{"line_number":42,"context_line":"    var path \u003d $windowProvider.$get().STATIC_URL + \u0027app/core/\u0027;"},{"line_number":43,"context_line":"    $provide.constant(\u0027horizon.app.core.basePath\u0027, path);"},{"line_number":44,"context_line":"  }"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"})();"}],"source_content_type":"text/javascript","patch_set":32,"id":"1a4dcd0f_7805d30e","line":43,"updated":"2015-08-06 21:01:55.000000000","message":"please add a test to the module spec to cover the constant definition.","commit_id":"b7607a949e7035c8080ff45c955d711e3627baa2"},{"author":{"_account_id":13805,"name":"Shaoquan Chen","email":"sean.chen2@hp.com","username":"SeanChen"},"change_message_id":"f17c5bdcbbb4a26d3e9ad15db5b84a77d05ffe77","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"  function config($provide, $windowProvider) {"},{"line_number":42,"context_line":"    var path \u003d $windowProvider.$get().STATIC_URL + \u0027app/core/\u0027;"},{"line_number":43,"context_line":"    $provide.constant(\u0027horizon.app.core.basePath\u0027, path);"},{"line_number":44,"context_line":"  }"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"})();"}],"source_content_type":"text/javascript","patch_set":32,"id":"1a4dcd0f_81ccbe62","line":43,"in_reply_to":"1a4dcd0f_7805d30e","updated":"2015-08-13 17:04:38.000000000","message":"Done","commit_id":"b7607a949e7035c8080ff45c955d711e3627baa2"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"5c9babf04c696ebcf9dc6407ba6abe965c6c1489","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"  function config($provide, $windowProvider) {"},{"line_number":42,"context_line":"    var path \u003d $windowProvider.$get().STATIC_URL + \u0027app/core/\u0027;"},{"line_number":43,"context_line":"    $provide.constant(\u0027horizon.app.core.basePath\u0027, path);"},{"line_number":44,"context_line":"  }"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"})();"}],"source_content_type":"text/javascript","patch_set":32,"id":"1a4dcd0f_f081bcc4","line":43,"in_reply_to":"1a4dcd0f_7805d30e","updated":"2015-08-08 05:47:22.000000000","message":"Yes, please see: https://github.com/openstack/horizon/blob/a1d5fb4844e8dc2dd1ccab35d2dc36c325ad72b5/horizon/static/framework/widgets/headers/headers.module.spec.js#L36","commit_id":"b7607a949e7035c8080ff45c955d711e3627baa2"},{"author":{"_account_id":13805,"name":"Shaoquan Chen","email":"sean.chen2@hp.com","username":"SeanChen"},"change_message_id":"f17c5bdcbbb4a26d3e9ad15db5b84a77d05ffe77","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"  function config($provide, $windowProvider) {"},{"line_number":42,"context_line":"    var path \u003d $windowProvider.$get().STATIC_URL + \u0027app/core/\u0027;"},{"line_number":43,"context_line":"    $provide.constant(\u0027horizon.app.core.basePath\u0027, path);"},{"line_number":44,"context_line":"  }"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"})();"}],"source_content_type":"text/javascript","patch_set":32,"id":"1a4dcd0f_21fa8a44","line":43,"in_reply_to":"1a4dcd0f_f081bcc4","updated":"2015-08-13 17:04:38.000000000","message":"Thanks Travis.","commit_id":"b7607a949e7035c8080ff45c955d711e3627baa2"}],"openstack_dashboard/static/app/core/metadata/metadata.module.spec.js":[{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"23961843a9c1e3d9adb4b0728473b5062814e322","unresolved":false,"context_lines":[{"line_number":21,"context_line":"      expect(angular.module(\u0027horizon.app.core.metadata\u0027)).toBeDefined();"},{"line_number":22,"context_line":"    });"},{"line_number":23,"context_line":"  });"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"})();"}],"source_content_type":"text/javascript","patch_set":26,"id":"3a50d1a3_3e6a681b","line":24,"updated":"2015-07-24 22:31:27.000000000","message":"Should have a test for the constant.\n\nSee:\n\nhttps://review.openstack.org/#/c/201661/15/horizon/static/framework/widgets/headers/headers.module.spec.js","commit_id":"dccf531335e0db0225bc582a7e3815abdedf3258"}],"openstack_dashboard/static/app/core/metadata/metadata.service.js":[{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"a1c61280fe19fb08569afe51e40a87b268fcfe1a","unresolved":false,"context_lines":[{"line_number":14,"context_line":" * limitations under the License."},{"line_number":15,"context_line":" */"},{"line_number":16,"context_line":"(function () {"},{"line_number":17,"context_line":"  \u0027use strict\u0027;"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"  angular"},{"line_number":20,"context_line":"    .module(\u0027horizon.app.core.metadata\u0027)"}],"source_content_type":"text/javascript","patch_set":33,"id":"1a4dcd0f_389e30b9","line":17,"updated":"2015-08-14 18:04:02.000000000","message":"where is the spec file for this service?","commit_id":"5a880058795c08758f80f7dd564c7b57ec21975b"}],"openstack_dashboard/static/app/core/metadata/modal/modal-helper.controller.js":[{"author":{"_account_id":15742,"name":"Paulo Ewerton Gomes Fragoso","email":"pauloewerton@lsd.ufcg.edu.br","username":"pauloewerton"},"change_message_id":"ae1dd6be72af2c61cfac8cb4e636bc301a5de7bf","unresolved":false,"context_lines":[{"line_number":44,"context_line":"     * @param {boolean\u003d} requireReload Whether to reload page when metadata successfully updated"},{"line_number":45,"context_line":"     */"},{"line_number":46,"context_line":"    function openMetadataModal(resource, id, requireReload) {"},{"line_number":47,"context_line":"      metadataModalService.open(resource, id).result.then(function () {"},{"line_number":48,"context_line":"        if (requireReload) {"},{"line_number":49,"context_line":"          $window.location.reload();"},{"line_number":50,"context_line":"          //TODO(bluex): remove when reload is no longer needed"}],"source_content_type":"text/javascript","patch_set":32,"id":"1a4dcd0f_181fef5b","line":47,"updated":"2015-08-06 21:01:55.000000000","message":"is it possible to get rid of the anonymous function to handle the promise?","commit_id":"b7607a949e7035c8080ff45c955d711e3627baa2"},{"author":{"_account_id":13805,"name":"Shaoquan Chen","email":"sean.chen2@hp.com","username":"SeanChen"},"change_message_id":"f17c5bdcbbb4a26d3e9ad15db5b84a77d05ffe77","unresolved":false,"context_lines":[{"line_number":44,"context_line":"     * @param {boolean\u003d} requireReload Whether to reload page when metadata successfully updated"},{"line_number":45,"context_line":"     */"},{"line_number":46,"context_line":"    function openMetadataModal(resource, id, requireReload) {"},{"line_number":47,"context_line":"      metadataModalService.open(resource, id).result.then(function () {"},{"line_number":48,"context_line":"        if (requireReload) {"},{"line_number":49,"context_line":"          $window.location.reload();"},{"line_number":50,"context_line":"          //TODO(bluex): remove when reload is no longer needed"}],"source_content_type":"text/javascript","patch_set":32,"id":"1a4dcd0f_c47094a7","line":47,"in_reply_to":"1a4dcd0f_105ea876","updated":"2015-08-13 17:04:38.000000000","message":"Done","commit_id":"b7607a949e7035c8080ff45c955d711e3627baa2"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"5c9babf04c696ebcf9dc6407ba6abe965c6c1489","unresolved":false,"context_lines":[{"line_number":44,"context_line":"     * @param {boolean\u003d} requireReload Whether to reload page when metadata successfully updated"},{"line_number":45,"context_line":"     */"},{"line_number":46,"context_line":"    function openMetadataModal(resource, id, requireReload) {"},{"line_number":47,"context_line":"      metadataModalService.open(resource, id).result.then(function () {"},{"line_number":48,"context_line":"        if (requireReload) {"},{"line_number":49,"context_line":"          $window.location.reload();"},{"line_number":50,"context_line":"          //TODO(bluex): remove when reload is no longer needed"}],"source_content_type":"text/javascript","patch_set":32,"id":"1a4dcd0f_105ea876","line":47,"in_reply_to":"1a4dcd0f_181fef5b","updated":"2015-08-08 05:47:22.000000000","message":"yes, .then(reload);\n\nfunction reload(...\n\nor just .then(function reload(...\n\nStyle guide issues.","commit_id":"b7607a949e7035c8080ff45c955d711e3627baa2"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"b01c8256e5099ae590f0ef216a7ad81a317e221a","unresolved":false,"context_lines":[{"line_number":18,"context_line":"  \u0027use strict\u0027;"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"  angular"},{"line_number":21,"context_line":"    .module(\u0027horizon.app.core.metadata.modal\u0027)"},{"line_number":22,"context_line":"    .controller(\u0027ModalHelperController\u0027, ModalHelperController);"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"  ModalHelperController.$inject \u003d ["}],"source_content_type":"text/javascript","patch_set":37,"id":"fa1b9901_2b2a63e8","line":21,"updated":"2015-08-21 23:16:54.000000000","message":"same here, possible naming collision","commit_id":"15335d275cd3528db5e4cd02be37718f5c8d28f4"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"b01c8256e5099ae590f0ef216a7ad81a317e221a","unresolved":false,"context_lines":[{"line_number":32,"context_line":"   * @description"},{"line_number":33,"context_line":"   * Helper controller used by Horizon part written in Django."},{"line_number":34,"context_line":"   */"},{"line_number":35,"context_line":"  function ModalHelperController($window, metadataModalService) {"},{"line_number":36,"context_line":"    var ctrl \u003d this;"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    ctrl.openMetadataModal \u003d openMetadataModal;"}],"source_content_type":"text/javascript","patch_set":37,"id":"fa1b9901_0b48bf86","line":35,"updated":"2015-08-21 23:16:54.000000000","message":"might have missed something, but where/how is this use? I can see that the requireReload is the value-add, otherwise, there is no point in having this controller. I\u0027m not clear on why it is needed?","commit_id":"15335d275cd3528db5e4cd02be37718f5c8d28f4"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"4f99279807b9c62d11209802d357a7008eae0317","unresolved":false,"context_lines":[{"line_number":32,"context_line":"   * @description"},{"line_number":33,"context_line":"   * Helper controller used by Horizon part written in Django."},{"line_number":34,"context_line":"   */"},{"line_number":35,"context_line":"  function ModalHelperController($window, metadataModalService) {"},{"line_number":36,"context_line":"    var ctrl \u003d this;"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    ctrl.openMetadataModal \u003d openMetadataModal;"}],"source_content_type":"text/javascript","patch_set":37,"id":"fa1b9901_6bb3540b","line":35,"in_reply_to":"fa1b9901_0b48bf86","updated":"2015-08-24 14:07:18.000000000","message":"It\u0027s used by dependent patch (#184275), in parts written in Python. The only reason this controller exist is requirement to reload content of some pages after metadata modal is closed.","commit_id":"15335d275cd3528db5e4cd02be37718f5c8d28f4"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"81a7fe90904a2e3dcc1b05089fe8933374171111","unresolved":false,"context_lines":[{"line_number":32,"context_line":"   * @description"},{"line_number":33,"context_line":"   * Helper controller used by Horizon part written in Django."},{"line_number":34,"context_line":"   */"},{"line_number":35,"context_line":"  function ModalHelperController($window, metadataModalService) {"},{"line_number":36,"context_line":"    var ctrl \u003d this;"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    ctrl.openMetadataModal \u003d openMetadataModal;"}],"source_content_type":"text/javascript","patch_set":37,"id":"fa1b9901_7313345d","line":35,"in_reply_to":"fa1b9901_6bb3540b","updated":"2015-08-24 16:57:27.000000000","message":"Thai, just to add a little clarity... for example, on the image details django page, if you don\u0027t reload the page afterwards, the modal will dismiss and the details page doesn\u0027t reflect the updated properties.","commit_id":"15335d275cd3528db5e4cd02be37718f5c8d28f4"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"0feb2265ce6c88d616b52ed5446020a77024c173","unresolved":false,"context_lines":[{"line_number":32,"context_line":"   * @description"},{"line_number":33,"context_line":"   * Helper controller used by Horizon part written in Django."},{"line_number":34,"context_line":"   */"},{"line_number":35,"context_line":"  function ModalHelperController($window, metadataModalService) {"},{"line_number":36,"context_line":"    var ctrl \u003d this;"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    ctrl.openMetadataModal \u003d openMetadataModal;"}],"source_content_type":"text/javascript","patch_set":37,"id":"fa1b9901_a408a029","line":35,"in_reply_to":"fa1b9901_7313345d","updated":"2015-08-24 18:00:49.000000000","message":"Ah... ok got it, basically we\u0027re using an angular modal on a legacy page and need the reload to trigger updated values in the table.","commit_id":"15335d275cd3528db5e4cd02be37718f5c8d28f4"}],"openstack_dashboard/static/app/core/metadata/modal/modal-helper.controller.spec.js":[{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"b01c8256e5099ae590f0ef216a7ad81a317e221a","unresolved":false,"context_lines":[{"line_number":45,"context_line":"      $controller \u003d _$controller_;"},{"line_number":46,"context_line":"    }));"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    it(\u0027should reload window if required\u0027, function () {"},{"line_number":49,"context_line":"      var controller \u003d $controller(\u0027ModalHelperController\u0027, {$window: $window, \u0027horizon.app.core.metadata.modal.service\u0027: metadataModalService});"},{"line_number":50,"context_line":"      controller.openMetadataModal(\u0027aggregate\u0027, \u0027123\u0027, true);"},{"line_number":51,"context_line":"      expect($window.location.reload).toHaveBeenCalled();"}],"source_content_type":"text/javascript","patch_set":37,"id":"fa1b9901_8e305dea","line":48,"updated":"2015-08-21 23:16:54.000000000","message":"break {$window:.....} object out, its too long\n\n  var params \u003d {\n    .....\n  };\n  var controller \u003d $controller(\u0027ModalHelperController\u0027, params);","commit_id":"15335d275cd3528db5e4cd02be37718f5c8d28f4"}],"openstack_dashboard/static/app/core/metadata/modal/modal.controller.js":[{"author":{"_account_id":15742,"name":"Paulo Ewerton Gomes Fragoso","email":"pauloewerton@lsd.ufcg.edu.br","username":"pauloewerton"},"change_message_id":"ae1dd6be72af2c61cfac8cb4e636bc301a5de7bf","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"      metadataService.editMetadata("},{"line_number":71,"context_line":"        params.resource, params.id, updated, Object.keys(removed)"},{"line_number":72,"context_line":"      ).then("},{"line_number":73,"context_line":"        function () {"},{"line_number":74,"context_line":"          $modalInstance.close();"},{"line_number":75,"context_line":"        },"}],"source_content_type":"text/javascript","patch_set":32,"id":"1a4dcd0f_d89987c5","line":72,"updated":"2015-08-06 21:01:55.000000000","message":"please consider changing these promise handlers to named functions.","commit_id":"b7607a949e7035c8080ff45c955d711e3627baa2"},{"author":{"_account_id":13805,"name":"Shaoquan Chen","email":"sean.chen2@hp.com","username":"SeanChen"},"change_message_id":"f17c5bdcbbb4a26d3e9ad15db5b84a77d05ffe77","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"      metadataService.editMetadata("},{"line_number":71,"context_line":"        params.resource, params.id, updated, Object.keys(removed)"},{"line_number":72,"context_line":"      ).then("},{"line_number":73,"context_line":"        function () {"},{"line_number":74,"context_line":"          $modalInstance.close();"},{"line_number":75,"context_line":"        },"}],"source_content_type":"text/javascript","patch_set":32,"id":"1a4dcd0f_64f740d5","line":72,"in_reply_to":"1a4dcd0f_b053346c","updated":"2015-08-13 17:04:38.000000000","message":"Done","commit_id":"b7607a949e7035c8080ff45c955d711e3627baa2"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"5c9babf04c696ebcf9dc6407ba6abe965c6c1489","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"      metadataService.editMetadata("},{"line_number":71,"context_line":"        params.resource, params.id, updated, Object.keys(removed)"},{"line_number":72,"context_line":"      ).then("},{"line_number":73,"context_line":"        function () {"},{"line_number":74,"context_line":"          $modalInstance.close();"},{"line_number":75,"context_line":"        },"}],"source_content_type":"text/javascript","patch_set":32,"id":"1a4dcd0f_b053346c","line":72,"in_reply_to":"1a4dcd0f_d89987c5","updated":"2015-08-08 05:47:22.000000000","message":"+1","commit_id":"b7607a949e7035c8080ff45c955d711e3627baa2"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"a1c61280fe19fb08569afe51e40a87b268fcfe1a","unresolved":false,"context_lines":[{"line_number":15,"context_line":" * limitations under the License."},{"line_number":16,"context_line":" */"},{"line_number":17,"context_line":"(function () {"},{"line_number":18,"context_line":"  \u0027use strict\u0027;"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"  angular"},{"line_number":21,"context_line":"    .module(\u0027horizon.app.core.metadata.modal\u0027)"}],"source_content_type":"text/javascript","patch_set":33,"id":"1a4dcd0f_1f2448c4","line":18,"updated":"2015-08-14 18:04:02.000000000","message":"spec file?","commit_id":"5a880058795c08758f80f7dd564c7b57ec21975b"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"b01c8256e5099ae590f0ef216a7ad81a317e221a","unresolved":false,"context_lines":[{"line_number":18,"context_line":"  \u0027use strict\u0027;"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"  angular"},{"line_number":21,"context_line":"    .module(\u0027horizon.app.core.metadata.modal\u0027)"},{"line_number":22,"context_line":"    .controller(\u0027ModalController\u0027, ModalController);"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"  ModalController.$inject \u003d ["}],"source_content_type":"text/javascript","patch_set":37,"id":"fa1b9901_cbf40789","line":21,"updated":"2015-08-21 23:16:54.000000000","message":"name likely to run into collision. consider naming it metadata.modal.controller or MetadataModalController","commit_id":"15335d275cd3528db5e4cd02be37718f5c8d28f4"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"b01c8256e5099ae590f0ef216a7ad81a317e221a","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    \u0027$modalInstance\u0027,"},{"line_number":26,"context_line":"    \u0027horizon.framework.widgets.metadata.tree.service\u0027,"},{"line_number":27,"context_line":"    \u0027horizon.app.core.metadata.service\u0027,"},{"line_number":28,"context_line":"    // Dependencies injected with resolve by $modal.open"},{"line_number":29,"context_line":"    \u0027available\u0027,"},{"line_number":30,"context_line":"    \u0027existing\u0027,"},{"line_number":31,"context_line":"    \u0027params\u0027"}],"source_content_type":"text/javascript","patch_set":37,"id":"fa1b9901_cb3ba737","line":28,"updated":"2015-08-21 23:16:54.000000000","message":"nice! comment here is useful","commit_id":"15335d275cd3528db5e4cd02be37718f5c8d28f4"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"b01c8256e5099ae590f0ef216a7ad81a317e221a","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    ctrl.cancel \u003d cancel;"},{"line_number":47,"context_line":"    ctrl.save \u003d save;"},{"line_number":48,"context_line":"    ctrl.saving \u003d false;"},{"line_number":49,"context_line":"    ctrl.text \u003d {"},{"line_number":50,"context_line":"      cancel: gettext(\u0027Cancel\u0027),"},{"line_number":51,"context_line":"      save: gettext(\u0027Save\u0027),"}],"source_content_type":"text/javascript","patch_set":37,"id":"fa1b9901_2bbb4377","line":48,"updated":"2015-08-21 23:16:54.000000000","message":"https://github.com/johnpapa/angular-styleguide#style-y033\n\nassignments to ctrl should ideally be one liners for readability. if it is more than that, consider breaking into a separate object that you can just point to.","commit_id":"15335d275cd3528db5e4cd02be37718f5c8d28f4"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"b01c8256e5099ae590f0ef216a7ad81a317e221a","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    ctrl.cancel \u003d cancel;"},{"line_number":47,"context_line":"    ctrl.save \u003d save;"},{"line_number":48,"context_line":"    ctrl.saving \u003d false;"},{"line_number":49,"context_line":"    ctrl.text \u003d {"},{"line_number":50,"context_line":"      cancel: gettext(\u0027Cancel\u0027),"},{"line_number":51,"context_line":"      save: gettext(\u0027Save\u0027),"},{"line_number":52,"context_line":"      title: {"}],"source_content_type":"text/javascript","patch_set":37,"id":"fa1b9901_0b5e7f76","line":49,"updated":"2015-08-21 23:16:54.000000000","message":"remove this from controller.","commit_id":"15335d275cd3528db5e4cd02be37718f5c8d28f4"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"b01c8256e5099ae590f0ef216a7ad81a317e221a","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        aggregate: gettext(\u0027Update Aggregate Metadata\u0027),"},{"line_number":54,"context_line":"        flavor: gettext(\u0027Update Flavor Metadata\u0027),"},{"line_number":55,"context_line":"        image: gettext(\u0027Update Image Metadata\u0027)"},{"line_number":56,"context_line":"      }[params.resource]"},{"line_number":57,"context_line":"    };"},{"line_number":58,"context_line":"    ctrl.tree \u003d new metadataTreeService.Tree("},{"line_number":59,"context_line":"      available.data.items,"}],"source_content_type":"text/javascript","patch_set":37,"id":"fa1b9901_abdaf3e7","line":56,"updated":"2015-08-21 23:16:54.000000000","message":"ctrl.resourceType \u003d resource; then in your HTML, you use ng-if to show the correct translated texts.","commit_id":"15335d275cd3528db5e4cd02be37718f5c8d28f4"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"b01c8256e5099ae590f0ef216a7ad81a317e221a","unresolved":false,"context_lines":[{"line_number":72,"context_line":"          Object.keys(removed))"},{"line_number":73,"context_line":"        .then(onEditSuccess, onEditFailure);"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"      function onEditSuccess() {"},{"line_number":76,"context_line":"        $modalInstance.close();"},{"line_number":77,"context_line":"      }"},{"line_number":78,"context_line":""}],"source_content_type":"text/javascript","patch_set":37,"id":"fa1b9901_cb73a7e6","line":75,"updated":"2015-08-21 23:16:54.000000000","message":"optional nit, can move both of these functions out.","commit_id":"15335d275cd3528db5e4cd02be37718f5c8d28f4"}],"openstack_dashboard/static/app/core/metadata/modal/modal.controller.spec.js":[{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"b01c8256e5099ae590f0ef216a7ad81a317e221a","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"      controller.save();"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"      expect(modalInstance.close).toHaveBeenCalled();"},{"line_number":63,"context_line":"      expect(metadataService.editMetadata).toHaveBeenCalledWith(\u0027aggregate\u0027, \u0027123\u0027, {someProperty:\u0027someValue\u0027}, []);"},{"line_number":64,"context_line":"    });"},{"line_number":65,"context_line":""}],"source_content_type":"text/javascript","patch_set":37,"id":"fa1b9901_4e780590","line":62,"updated":"2015-08-21 23:16:54.000000000","message":"some lines in here are too long, need to make better use of indents.","commit_id":"15335d275cd3528db5e4cd02be37718f5c8d28f4"}],"openstack_dashboard/static/app/core/metadata/modal/modal.html":[{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"b01c8256e5099ae590f0ef216a7ad81a317e221a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003cdiv class\u003d\"modal-header\"\u003e"},{"line_number":2,"context_line":"  \u003ch3 class\u003d\"modal-title\"\u003e"},{"line_number":3,"context_line":"    \u003cspan ng-bind\u003d\"::modal.text.title\"\u003e\u003c/span\u003e"},{"line_number":4,"context_line":"  \u003c/h3\u003e"}],"source_content_type":"text/html","patch_set":37,"id":"fa1b9901_2b5fc376","line":1,"updated":"2015-08-21 23:16:54.000000000","message":"consider using translate directive instead of gettext in the controller. two examples provided below.","commit_id":"15335d275cd3528db5e4cd02be37718f5c8d28f4"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"b01c8256e5099ae590f0ef216a7ad81a317e221a","unresolved":false,"context_lines":[{"line_number":9,"context_line":"\u003cdiv class\u003d\"modal-footer\"\u003e"},{"line_number":10,"context_line":"  \u003cbutton class\u003d\"btn btn-default\" ng-click\u003d\"modal.cancel()\"\u003e"},{"line_number":11,"context_line":"    \u003ci class\u003d\"fa fa-close\"\u003e\u003c/i\u003e"},{"line_number":12,"context_line":"    \u003cspan ng-bind\u003d\"::modal.text.cancel\"\u003e\u003c/span\u003e"},{"line_number":13,"context_line":"  \u003c/button\u003e"},{"line_number":14,"context_line":"  \u003cbutton class\u003d\"btn btn-primary\""},{"line_number":15,"context_line":"          ng-click\u003d\"modal.save()\""}],"source_content_type":"text/html","patch_set":37,"id":"fa1b9901_6b761b08","line":12,"updated":"2015-08-21 23:16:54.000000000","message":"\u003cspan translate\u003eCancel\u003c/span\u003e","commit_id":"15335d275cd3528db5e4cd02be37718f5c8d28f4"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"b01c8256e5099ae590f0ef216a7ad81a317e221a","unresolved":false,"context_lines":[{"line_number":15,"context_line":"          ng-click\u003d\"modal.save()\""},{"line_number":16,"context_line":"          ng-disabled\u003d\"form.$invalid\"\u003e"},{"line_number":17,"context_line":"    \u003ci class\u003d\"fa\" ng-class\u003d\"modal.saving ? \u0027fa-spinner fa-spin\u0027 : \u0027fa-save\u0027\"\u003e\u003c/i\u003e"},{"line_number":18,"context_line":"    \u003cspan ng-bind\u003d\"::modal.text.save\"\u003e\u003c/span\u003e"},{"line_number":19,"context_line":"  \u003c/button\u003e"},{"line_number":20,"context_line":"\u003c/div\u003e"}],"source_content_type":"text/html","patch_set":37,"id":"fa1b9901_2b7823f8","line":18,"updated":"2015-08-21 23:16:54.000000000","message":"\u003cspan translate\u003eSave\u003c/span\u003e","commit_id":"15335d275cd3528db5e4cd02be37718f5c8d28f4"}],"openstack_dashboard/static/app/core/metadata/modal/modal.module.js":[{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"b01c8256e5099ae590f0ef216a7ad81a317e221a","unresolved":false,"context_lines":[{"line_number":28,"context_line":"   * Requires {@link http://angular-ui.github.io/bootstrap/ `Angular-bootstrap`}"},{"line_number":29,"context_line":"   *"},{"line_number":30,"context_line":"   * | Components                                                                                  |"},{"line_number":31,"context_line":"   * |---------------------------------------------------------------------------------------------|"},{"line_number":32,"context_line":"   * | {@link horizon.app.core.metadata.modal.service:modalService `modalService`}                |"},{"line_number":33,"context_line":"   * | {@link horizon.app.core.metadata.modal.controller:ModalController `ModalController`}       |"},{"line_number":34,"context_line":"   * | {@link horizon.app.core.metadata.modal.controller:ModalHelperController `ModalHelperController`} |"}],"source_content_type":"text/javascript","patch_set":37,"id":"fa1b9901_8bba8f09","line":31,"updated":"2015-08-21 23:16:54.000000000","message":"nit, space not align","commit_id":"15335d275cd3528db5e4cd02be37718f5c8d28f4"}],"openstack_dashboard/static/app/core/metadata/modal/modal.service.js":[{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"11c50fcf66432ad2d1a752d7f5291013e6207e5d","unresolved":false,"context_lines":[{"line_number":39,"context_line":"     */"},{"line_number":40,"context_line":"    function open(resource, id) {"},{"line_number":41,"context_line":"      // TODO(bluex): Replace with proper constant when available"},{"line_number":42,"context_line":"      var path \u003d \u0027/static/app/core/\u0027;"},{"line_number":43,"context_line":"      return $modal.open(angular.extend({"},{"line_number":44,"context_line":"        resolve: {"},{"line_number":45,"context_line":"          available: function() {"}],"source_content_type":"text/javascript","patch_set":22,"id":"9a41bdd9_f91b6071","line":42,"updated":"2015-07-14 23:33:20.000000000","message":"Don\u0027t hardcode this.  It will cause lots of issues.  I think you can just go ahead and create a constant with your other constants:\n\nLike here: line 38\n\nhttps://review.openstack.org/#/c/200385/20/openstack_dashboard/static/app/core/images/images.module.js","commit_id":"4918b375a6327d885b850e489eb1592c19933f06"},{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"b01c8256e5099ae590f0ef216a7ad81a317e221a","unresolved":false,"context_lines":[{"line_number":46,"context_line":"     */"},{"line_number":47,"context_line":"    function open(resource, id) {"},{"line_number":48,"context_line":"      return $modal.open("},{"line_number":49,"context_line":"        angular.extend("},{"line_number":50,"context_line":"          {"},{"line_number":51,"context_line":"            resolve: {"},{"line_number":52,"context_line":"              available: function() {"}],"source_content_type":"text/javascript","patch_set":37,"id":"fa1b9901_cb1c0716","line":49,"updated":"2015-08-21 23:16:54.000000000","message":"would be much more readable if you move the object out\n\n  var defaults \u003d { resolve: resolve, existing: existing.... };\n  angular.extend(defaults, modalConstants);\n\nOptionally, adding a name for those functions is a plus but not required.\n\n  function resolve(){ ..... }\n  function existing(){ ......}","commit_id":"15335d275cd3528db5e4cd02be37718f5c8d28f4"}],"openstack_dashboard/static/app/core/metadata/modal/modal.service.spec.js":[{"author":{"_account_id":9576,"name":"Thai Tran","email":"tqtran@us.ibm.com","username":"tqtran"},"change_message_id":"b01c8256e5099ae590f0ef216a7ad81a317e221a","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        modalService.open(\u0027resource\u0027, \u0027id\u0027);"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        expect($modal.open).toHaveBeenCalled();"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        expect($modal.open.calls.argsFor(0)[0].templateUrl).toEqual(\u0027/a/sample/path/metadata/modal/modal.html\u0027);"},{"line_number":55,"context_line":"        expect($modal.open.calls.argsFor(0)[0].resolve.params()).toEqual({resource: \u0027resource\u0027, id: \u0027id\u0027});"},{"line_number":56,"context_line":"      });"}],"source_content_type":"text/javascript","patch_set":37,"id":"fa1b9901_ebe54bdc","line":53,"updated":"2015-08-21 23:16:54.000000000","message":"more readable if you assign to a variable\n\n  var args \u003d $modal.open.calls.argsFor(0)[0];\n  expect(args.templateUrl).toEqual....\n  expect(args.resolve.params()).toEqual....","commit_id":"15335d275cd3528db5e4cd02be37718f5c8d28f4"}],"openstack_dashboard/static/dashboard/dashboard.module.js":[{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"eb92a895dfc232c1b24630c7eca8cec543aecb8f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"(function () {"},{"line_number":2,"context_line":"  \u0027use strict\u0027;"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"  angular.module(\u0027hz.dashboard\u0027, ["}],"source_content_type":"text/javascript","patch_set":18,"id":"fa32b979_1d29e4f2","line":1,"updated":"2015-06-26 00:19:12.000000000","message":"Copyright header should be at top of file.","commit_id":"21c2a435bed50e970081ceee6d36e5fda50df560"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"cd31253408439bb58b6928cb977ce4e16384d7d0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"(function () {"},{"line_number":2,"context_line":"  \u0027use strict\u0027;"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"  angular.module(\u0027hz.dashboard\u0027, ["}],"source_content_type":"text/javascript","patch_set":18,"id":"fa32b979_73b366ea","line":1,"in_reply_to":"fa32b979_1d29e4f2","updated":"2015-06-26 14:35:30.000000000","message":"Done","commit_id":"21c2a435bed50e970081ceee6d36e5fda50df560"}],"openstack_dashboard/static/dashboard/metadata/metadata.module.js":[{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"eb92a895dfc232c1b24630c7eca8cec543aecb8f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"(function () {"},{"line_number":2,"context_line":"  \u0027use strict\u0027;"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"  /**"}],"source_content_type":"text/javascript","patch_set":18,"id":"fa32b979_5df0cc91","line":1,"updated":"2015-06-26 00:19:12.000000000","message":"Copyright header should be at top of file.","commit_id":"21c2a435bed50e970081ceee6d36e5fda50df560"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"cd31253408439bb58b6928cb977ce4e16384d7d0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"(function () {"},{"line_number":2,"context_line":"  \u0027use strict\u0027;"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"  /**"}],"source_content_type":"text/javascript","patch_set":18,"id":"fa32b979_33e39e07","line":1,"in_reply_to":"fa32b979_5df0cc91","updated":"2015-06-26 14:35:30.000000000","message":"Done","commit_id":"21c2a435bed50e970081ceee6d36e5fda50df560"},{"author":{"_account_id":13805,"name":"Shaoquan Chen","email":"sean.chen2@hp.com","username":"SeanChen"},"change_message_id":"272dba9f6c2a07b5e09a7c3ea9d5497c7a32c270","unresolved":false,"context_lines":[{"line_number":32,"context_line":"   */"},{"line_number":33,"context_line":"  angular"},{"line_number":34,"context_line":"    .module(\u0027horizon.dashboard.metadata\u0027, ["},{"line_number":35,"context_line":"      \u0027horizon.openstack-service-api\u0027,"},{"line_number":36,"context_line":"      \u0027horizon.dashboard.metadata.modal\u0027"},{"line_number":37,"context_line":"    ]);"},{"line_number":38,"context_line":""}],"source_content_type":"text/javascript","patch_set":21,"id":"ba3cc151_3c11355e","line":35,"updated":"2015-07-06 11:06:15.000000000","message":"\u0027horizon.openstack-service-api\u0027, is not a child of \u0027horizon.dashboard.metadata\u0027. Dependency should be managed as a tree.","commit_id":"d7de951707bd2d3bc07eea1f9ef6d43eeb7ff86a"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"7fcb199085920bc8b18697b3507d20cca5911036","unresolved":false,"context_lines":[{"line_number":32,"context_line":"   */"},{"line_number":33,"context_line":"  angular"},{"line_number":34,"context_line":"    .module(\u0027horizon.dashboard.metadata\u0027, ["},{"line_number":35,"context_line":"      \u0027horizon.openstack-service-api\u0027,"},{"line_number":36,"context_line":"      \u0027horizon.dashboard.metadata.modal\u0027"},{"line_number":37,"context_line":"    ]);"},{"line_number":38,"context_line":""}],"source_content_type":"text/javascript","patch_set":21,"id":"ba3cc151_1dd8d91c","line":35,"in_reply_to":"ba3cc151_3c11355e","updated":"2015-07-07 16:44:24.000000000","message":"Citing https://docs.angularjs.org/guide/module :\n\"Depending on a module implies that the required module needs to be loaded before the requiring module is loaded.\"\n\nhorizon.dashboard.metadata is using services from horizon.openstack-service-api and expects that they are loaded before this module, what\u0027s wrong with that?","commit_id":"d7de951707bd2d3bc07eea1f9ef6d43eeb7ff86a"}],"openstack_dashboard/static/dashboard/metadata/metadata.service.js":[{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"eb92a895dfc232c1b24630c7eca8cec543aecb8f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"(function () {"},{"line_number":2,"context_line":"  \u0027use strict\u0027;"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"  /**"}],"source_content_type":"text/javascript","patch_set":18,"id":"fa32b979_9df6548f","line":1,"updated":"2015-06-26 00:19:12.000000000","message":"Copyright header should be at top of file.","commit_id":"21c2a435bed50e970081ceee6d36e5fda50df560"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"cd31253408439bb58b6928cb977ce4e16384d7d0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"(function () {"},{"line_number":2,"context_line":"  \u0027use strict\u0027;"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"  /**"}],"source_content_type":"text/javascript","patch_set":18,"id":"fa32b979_93b86aea","line":1,"in_reply_to":"fa32b979_9df6548f","updated":"2015-06-26 14:35:30.000000000","message":"Done","commit_id":"21c2a435bed50e970081ceee6d36e5fda50df560"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"eb92a895dfc232c1b24630c7eca8cec543aecb8f","unresolved":false,"context_lines":[{"line_number":12,"context_line":"  metadataService.$inject \u003d ["},{"line_number":13,"context_line":"    \u0027horizon.openstack-service-api.nova\u0027,"},{"line_number":14,"context_line":"    \u0027horizon.openstack-service-api.glance\u0027"},{"line_number":15,"context_line":"  ];"},{"line_number":16,"context_line":"  function metadataService(nova, glance) {"},{"line_number":17,"context_line":"    return {"},{"line_number":18,"context_line":"      getMetadata: getMetadata,"}],"source_content_type":"text/javascript","patch_set":18,"id":"fa32b979_3d92a84c","line":15,"updated":"2015-06-26 00:19:12.000000000","message":"nit: should be a space here","commit_id":"21c2a435bed50e970081ceee6d36e5fda50df560"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"cd31253408439bb58b6928cb977ce4e16384d7d0","unresolved":false,"context_lines":[{"line_number":12,"context_line":"  metadataService.$inject \u003d ["},{"line_number":13,"context_line":"    \u0027horizon.openstack-service-api.nova\u0027,"},{"line_number":14,"context_line":"    \u0027horizon.openstack-service-api.glance\u0027"},{"line_number":15,"context_line":"  ];"},{"line_number":16,"context_line":"  function metadataService(nova, glance) {"},{"line_number":17,"context_line":"    return {"},{"line_number":18,"context_line":"      getMetadata: getMetadata,"}],"source_content_type":"text/javascript","patch_set":18,"id":"fa32b979_f3c3f655","line":15,"in_reply_to":"fa32b979_3d92a84c","updated":"2015-06-26 14:35:30.000000000","message":"Done","commit_id":"21c2a435bed50e970081ceee6d36e5fda50df560"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"eb92a895dfc232c1b24630c7eca8cec543aecb8f","unresolved":false,"context_lines":[{"line_number":13,"context_line":"    \u0027horizon.openstack-service-api.nova\u0027,"},{"line_number":14,"context_line":"    \u0027horizon.openstack-service-api.glance\u0027"},{"line_number":15,"context_line":"  ];"},{"line_number":16,"context_line":"  function metadataService(nova, glance) {"},{"line_number":17,"context_line":"    return {"},{"line_number":18,"context_line":"      getMetadata: getMetadata,"},{"line_number":19,"context_line":"      editMetadata: editMetadata,"}],"source_content_type":"text/javascript","patch_set":18,"id":"fa32b979_fd9be064","line":16,"updated":"2015-06-26 00:19:12.000000000","message":"a little ngdoc here would be nice.","commit_id":"21c2a435bed50e970081ceee6d36e5fda50df560"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"cd31253408439bb58b6928cb977ce4e16384d7d0","unresolved":false,"context_lines":[{"line_number":13,"context_line":"    \u0027horizon.openstack-service-api.nova\u0027,"},{"line_number":14,"context_line":"    \u0027horizon.openstack-service-api.glance\u0027"},{"line_number":15,"context_line":"  ];"},{"line_number":16,"context_line":"  function metadataService(nova, glance) {"},{"line_number":17,"context_line":"    return {"},{"line_number":18,"context_line":"      getMetadata: getMetadata,"},{"line_number":19,"context_line":"      editMetadata: editMetadata,"}],"source_content_type":"text/javascript","patch_set":18,"id":"fa32b979_25c831a8","line":16,"in_reply_to":"fa32b979_fd9be064","updated":"2015-06-26 14:35:30.000000000","message":"Done","commit_id":"21c2a435bed50e970081ceee6d36e5fda50df560"},{"author":{"_account_id":13805,"name":"Shaoquan Chen","email":"sean.chen2@hp.com","username":"SeanChen"},"change_message_id":"272dba9f6c2a07b5e09a7c3ea9d5497c7a32c270","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        aggregate: nova.getAggregateExtraSpecs,"},{"line_number":51,"context_line":"        flavor: nova.getFlavorExtraSpecs,"},{"line_number":52,"context_line":"        image: glance.getImageProps"},{"line_number":53,"context_line":"      }[resource](id);"},{"line_number":54,"context_line":"    }"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    /**"}],"source_content_type":"text/javascript","patch_set":21,"id":"ba3cc151_7f948fe7","line":53,"updated":"2015-07-06 11:06:15.000000000","message":"Is it possible to make this code more readable?\n\nThe same to other two methods.","commit_id":"d7de951707bd2d3bc07eea1f9ef6d43eeb7ff86a"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"7fcb199085920bc8b18697b3507d20cca5911036","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        aggregate: nova.getAggregateExtraSpecs,"},{"line_number":51,"context_line":"        flavor: nova.getFlavorExtraSpecs,"},{"line_number":52,"context_line":"        image: glance.getImageProps"},{"line_number":53,"context_line":"      }[resource](id);"},{"line_number":54,"context_line":"    }"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    /**"}],"source_content_type":"text/javascript","patch_set":21,"id":"ba3cc151_888109fe","line":53,"in_reply_to":"ba3cc151_7f948fe7","updated":"2015-07-07 16:44:24.000000000","message":"It returns the result of execution of one of the functions, selected based on the resource. Could you elaborate on what exactly should be changed here?","commit_id":"d7de951707bd2d3bc07eea1f9ef6d43eeb7ff86a"}],"openstack_dashboard/static/dashboard/metadata/modal/modal-helper.controller.js":[{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"eb92a895dfc232c1b24630c7eca8cec543aecb8f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"(function () {"},{"line_number":2,"context_line":"  \u0027use strict\u0027;"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"  /**"}],"source_content_type":"text/javascript","patch_set":18,"id":"fa32b979_fd00c068","line":1,"updated":"2015-06-26 00:19:12.000000000","message":"Copyright header should be at top of file.","commit_id":"21c2a435bed50e970081ceee6d36e5fda50df560"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"cd31253408439bb58b6928cb977ce4e16384d7d0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"(function () {"},{"line_number":2,"context_line":"  \u0027use strict\u0027;"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"  /**"}],"source_content_type":"text/javascript","patch_set":18,"id":"fa32b979_d3ab5274","line":1,"in_reply_to":"fa32b979_fd00c068","updated":"2015-06-26 14:35:30.000000000","message":"Done","commit_id":"21c2a435bed50e970081ceee6d36e5fda50df560"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"eb92a895dfc232c1b24630c7eca8cec543aecb8f","unresolved":false,"context_lines":[{"line_number":14,"context_line":"  ModalHelperController.$inject \u003d ["},{"line_number":15,"context_line":"    \u0027$window\u0027,"},{"line_number":16,"context_line":"    \u0027horizon.dashboard.metadata.modal.service\u0027"},{"line_number":17,"context_line":"  ];"},{"line_number":18,"context_line":"  function ModalHelperController($window, mms) {"},{"line_number":19,"context_line":"    var vm \u003d this;"},{"line_number":20,"context_line":""}],"source_content_type":"text/javascript","patch_set":18,"id":"fa32b979_bdc5583e","line":17,"updated":"2015-06-26 00:19:12.000000000","message":"nit a space here would be nice.","commit_id":"21c2a435bed50e970081ceee6d36e5fda50df560"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"cd31253408439bb58b6928cb977ce4e16384d7d0","unresolved":false,"context_lines":[{"line_number":14,"context_line":"  ModalHelperController.$inject \u003d ["},{"line_number":15,"context_line":"    \u0027$window\u0027,"},{"line_number":16,"context_line":"    \u0027horizon.dashboard.metadata.modal.service\u0027"},{"line_number":17,"context_line":"  ];"},{"line_number":18,"context_line":"  function ModalHelperController($window, mms) {"},{"line_number":19,"context_line":"    var vm \u003d this;"},{"line_number":20,"context_line":""}],"source_content_type":"text/javascript","patch_set":18,"id":"fa32b979_739cc65d","line":17,"in_reply_to":"fa32b979_bdc5583e","updated":"2015-06-26 14:35:30.000000000","message":"Done","commit_id":"21c2a435bed50e970081ceee6d36e5fda50df560"},{"author":{"_account_id":13805,"name":"Shaoquan Chen","email":"sean.chen2@hp.com","username":"SeanChen"},"change_message_id":"272dba9f6c2a07b5e09a7c3ea9d5497c7a32c270","unresolved":false,"context_lines":[{"line_number":43,"context_line":"     * @param {string} id Object identifier to retrieve metadata from"},{"line_number":44,"context_line":"     * @param {boolean\u003d} reload Whether to reload page when metadata successfully updated"},{"line_number":45,"context_line":"     */"},{"line_number":46,"context_line":"    function openMetadataModal(resource, id, reload) {"},{"line_number":47,"context_line":"      mms.open(resource, id).result.then(function () {"},{"line_number":48,"context_line":"        if (reload) {"},{"line_number":49,"context_line":"          $window.location.reload();"}],"source_content_type":"text/javascript","patch_set":21,"id":"ba3cc151_7f49ef8d","line":46,"updated":"2015-07-06 11:06:15.000000000","message":"is it more readable to change the name to `requireReload`?","commit_id":"d7de951707bd2d3bc07eea1f9ef6d43eeb7ff86a"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"7fcb199085920bc8b18697b3507d20cca5911036","unresolved":false,"context_lines":[{"line_number":43,"context_line":"     * @param {string} id Object identifier to retrieve metadata from"},{"line_number":44,"context_line":"     * @param {boolean\u003d} reload Whether to reload page when metadata successfully updated"},{"line_number":45,"context_line":"     */"},{"line_number":46,"context_line":"    function openMetadataModal(resource, id, reload) {"},{"line_number":47,"context_line":"      mms.open(resource, id).result.then(function () {"},{"line_number":48,"context_line":"        if (reload) {"},{"line_number":49,"context_line":"          $window.location.reload();"}],"source_content_type":"text/javascript","patch_set":21,"id":"ba3cc151_547cc571","line":46,"in_reply_to":"ba3cc151_7f49ef8d","updated":"2015-07-07 16:44:24.000000000","message":"Sure.","commit_id":"d7de951707bd2d3bc07eea1f9ef6d43eeb7ff86a"}],"openstack_dashboard/static/dashboard/metadata/modal/modal.controller.js":[{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"eb92a895dfc232c1b24630c7eca8cec543aecb8f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"(function () {"},{"line_number":2,"context_line":"  \u0027use strict\u0027;"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"  /**"}],"source_content_type":"text/javascript","patch_set":18,"id":"fa32b979_ddfb7c7a","line":1,"updated":"2015-06-26 00:19:12.000000000","message":"Copyright header should be at top of file.","commit_id":"21c2a435bed50e970081ceee6d36e5fda50df560"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"cd31253408439bb58b6928cb977ce4e16384d7d0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"(function () {"},{"line_number":2,"context_line":"  \u0027use strict\u0027;"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"  /**"}],"source_content_type":"text/javascript","patch_set":18,"id":"fa32b979_f3a8d679","line":1,"in_reply_to":"fa32b979_ddfb7c7a","updated":"2015-06-26 14:35:30.000000000","message":"Done","commit_id":"21c2a435bed50e970081ceee6d36e5fda50df560"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"eb92a895dfc232c1b24630c7eca8cec543aecb8f","unresolved":false,"context_lines":[{"line_number":19,"context_line":"    \u0027available\u0027,"},{"line_number":20,"context_line":"    \u0027existing\u0027,"},{"line_number":21,"context_line":"    \u0027params\u0027"},{"line_number":22,"context_line":"  ];"},{"line_number":23,"context_line":"  function ModalController("},{"line_number":24,"context_line":"    $modalInstance, mts, ms,"},{"line_number":25,"context_line":"    available, existing, params"}],"source_content_type":"text/javascript","patch_set":18,"id":"fa32b979_5dc20c36","line":22,"updated":"2015-06-26 00:19:12.000000000","message":"nit: space","commit_id":"21c2a435bed50e970081ceee6d36e5fda50df560"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"cd31253408439bb58b6928cb977ce4e16384d7d0","unresolved":false,"context_lines":[{"line_number":19,"context_line":"    \u0027available\u0027,"},{"line_number":20,"context_line":"    \u0027existing\u0027,"},{"line_number":21,"context_line":"    \u0027params\u0027"},{"line_number":22,"context_line":"  ];"},{"line_number":23,"context_line":"  function ModalController("},{"line_number":24,"context_line":"    $modalInstance, mts, ms,"},{"line_number":25,"context_line":"    available, existing, params"}],"source_content_type":"text/javascript","patch_set":18,"id":"fa32b979_93b4ead4","line":22,"in_reply_to":"fa32b979_5dc20c36","updated":"2015-06-26 14:35:30.000000000","message":"Done","commit_id":"21c2a435bed50e970081ceee6d36e5fda50df560"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"9c76ec0a606848c46aec9e51e7be0958564af0d3","unresolved":false,"context_lines":[{"line_number":74,"context_line":"          $modalInstance.close();"},{"line_number":75,"context_line":"        },"},{"line_number":76,"context_line":"        function () {"},{"line_number":77,"context_line":"          vm.saving \u003d false;"},{"line_number":78,"context_line":"        }"},{"line_number":79,"context_line":"      );"},{"line_number":80,"context_line":"    }"}],"source_content_type":"text/javascript","patch_set":19,"id":"ba3cc151_f7af5be1","line":77,"updated":"2015-06-29 21:08:45.000000000","message":"This spinner action could be proposed for inclusion on the common modal in a separate patch:\n\nhttps://github.com/openstack/horizon/tree/master/horizon/static/framework/widgets/modal","commit_id":"2cc39986c06b1a311b4a4e5e72cb08e9868b284a"},{"author":{"_account_id":13805,"name":"Shaoquan Chen","email":"sean.chen2@hp.com","username":"SeanChen"},"change_message_id":"272dba9f6c2a07b5e09a7c3ea9d5497c7a32c270","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    \u0027$modalInstance\u0027,"},{"line_number":31,"context_line":"    \u0027horizon.framework.widgets.metadata-tree.service\u0027,"},{"line_number":32,"context_line":"    \u0027horizon.dashboard.metadata.service\u0027,"},{"line_number":33,"context_line":"    // Dependencies injected with resolve by $modal.open"},{"line_number":34,"context_line":"    \u0027available\u0027,"},{"line_number":35,"context_line":"    \u0027existing\u0027,"},{"line_number":36,"context_line":"    \u0027params\u0027"}],"source_content_type":"text/javascript","patch_set":21,"id":"ba3cc151_ff241fc7","line":33,"updated":"2015-07-06 11:06:15.000000000","message":"Why leave dead code here?","commit_id":"d7de951707bd2d3bc07eea1f9ef6d43eeb7ff86a"},{"author":{"_account_id":13805,"name":"Shaoquan Chen","email":"sean.chen2@hp.com","username":"SeanChen"},"change_message_id":"762b960acfd5cd4f968f98ef15470170fc1dca8d","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    \u0027$modalInstance\u0027,"},{"line_number":31,"context_line":"    \u0027horizon.framework.widgets.metadata-tree.service\u0027,"},{"line_number":32,"context_line":"    \u0027horizon.dashboard.metadata.service\u0027,"},{"line_number":33,"context_line":"    // Dependencies injected with resolve by $modal.open"},{"line_number":34,"context_line":"    \u0027available\u0027,"},{"line_number":35,"context_line":"    \u0027existing\u0027,"},{"line_number":36,"context_line":"    \u0027params\u0027"}],"source_content_type":"text/javascript","patch_set":21,"id":"ba3cc151_be9e7952","line":33,"in_reply_to":"ba3cc151_ff241fc7","updated":"2015-07-06 21:45:03.000000000","message":"never mind.","commit_id":"d7de951707bd2d3bc07eea1f9ef6d43eeb7ff86a"}],"openstack_dashboard/static/dashboard/metadata/modal/modal.html":[{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"9c76ec0a606848c46aec9e51e7be0958564af0d3","unresolved":false,"context_lines":[{"line_number":14,"context_line":"  \u003cbutton class\u003d\"btn btn-primary\""},{"line_number":15,"context_line":"          ng-click\u003d\"modal.save()\""},{"line_number":16,"context_line":"          ng-disabled\u003d\"form.$invalid\"\u003e"},{"line_number":17,"context_line":"    \u003ci class\u003d\"fa\" ng-class\u003d\"modal.saving ? \u0027fa-spinner fa-spin\u0027 : \u0027fa-save\u0027\"\u003e\u003c/i\u003e"},{"line_number":18,"context_line":"    \u003cspan ng-bind\u003d\"modal.text.save\"\u003e\u003c/span\u003e"},{"line_number":19,"context_line":"  \u003c/button\u003e"},{"line_number":20,"context_line":"\u003c/div\u003e"}],"source_content_type":"text/html","patch_set":19,"id":"ba3cc151_bcef7aaf","line":17,"updated":"2015-06-29 21:08:45.000000000","message":"I rather like this saving spinner on the button, but it is a little different experience.  I\u0027m okay with doing this, will have to see what others think. Could go on the common modal as well.","commit_id":"2cc39986c06b1a311b4a4e5e72cb08e9868b284a"},{"author":{"_account_id":13805,"name":"Shaoquan Chen","email":"sean.chen2@hp.com","username":"SeanChen"},"change_message_id":"272dba9f6c2a07b5e09a7c3ea9d5497c7a32c270","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003cdiv class\u003d\"modal-header\"\u003e"},{"line_number":2,"context_line":"  \u003ch3 class\u003d\"modal-title\"\u003e"},{"line_number":3,"context_line":"    \u003cspan ng-bind\u003d\"modal.text.title\"\u003e\u003c/span\u003e"},{"line_number":4,"context_line":"  \u003c/h3\u003e"},{"line_number":5,"context_line":"\u003c/div\u003e"},{"line_number":6,"context_line":"\u003cdiv class\u003d\"modal-body\"\u003e"}],"source_content_type":"text/html","patch_set":21,"id":"ba3cc151_ff0bbf29","line":3,"updated":"2015-07-06 11:06:15.000000000","message":"one time binding.","commit_id":"d7de951707bd2d3bc07eea1f9ef6d43eeb7ff86a"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"7fcb199085920bc8b18697b3507d20cca5911036","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003cdiv class\u003d\"modal-header\"\u003e"},{"line_number":2,"context_line":"  \u003ch3 class\u003d\"modal-title\"\u003e"},{"line_number":3,"context_line":"    \u003cspan ng-bind\u003d\"modal.text.title\"\u003e\u003c/span\u003e"},{"line_number":4,"context_line":"  \u003c/h3\u003e"},{"line_number":5,"context_line":"\u003c/div\u003e"},{"line_number":6,"context_line":"\u003cdiv class\u003d\"modal-body\"\u003e"}],"source_content_type":"text/html","patch_set":21,"id":"ba3cc151_5435a543","line":3,"in_reply_to":"ba3cc151_ff0bbf29","updated":"2015-07-07 16:44:24.000000000","message":"ok","commit_id":"d7de951707bd2d3bc07eea1f9ef6d43eeb7ff86a"},{"author":{"_account_id":13805,"name":"Shaoquan Chen","email":"sean.chen2@hp.com","username":"SeanChen"},"change_message_id":"272dba9f6c2a07b5e09a7c3ea9d5497c7a32c270","unresolved":false,"context_lines":[{"line_number":15,"context_line":"          ng-click\u003d\"modal.save()\""},{"line_number":16,"context_line":"          ng-disabled\u003d\"form.$invalid\"\u003e"},{"line_number":17,"context_line":"    \u003ci class\u003d\"fa\" ng-class\u003d\"modal.saving ? \u0027fa-spinner fa-spin\u0027 : \u0027fa-save\u0027\"\u003e\u003c/i\u003e"},{"line_number":18,"context_line":"    \u003cspan ng-bind\u003d\"modal.text.save\"\u003e\u003c/span\u003e"},{"line_number":19,"context_line":"  \u003c/button\u003e"},{"line_number":20,"context_line":"\u003c/div\u003e"}],"source_content_type":"text/html","patch_set":21,"id":"ba3cc151_0213aa5d","line":18,"updated":"2015-07-06 11:06:15.000000000","message":"one time binding.","commit_id":"d7de951707bd2d3bc07eea1f9ef6d43eeb7ff86a"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"7fcb199085920bc8b18697b3507d20cca5911036","unresolved":false,"context_lines":[{"line_number":15,"context_line":"          ng-click\u003d\"modal.save()\""},{"line_number":16,"context_line":"          ng-disabled\u003d\"form.$invalid\"\u003e"},{"line_number":17,"context_line":"    \u003ci class\u003d\"fa\" ng-class\u003d\"modal.saving ? \u0027fa-spinner fa-spin\u0027 : \u0027fa-save\u0027\"\u003e\u003c/i\u003e"},{"line_number":18,"context_line":"    \u003cspan ng-bind\u003d\"modal.text.save\"\u003e\u003c/span\u003e"},{"line_number":19,"context_line":"  \u003c/button\u003e"},{"line_number":20,"context_line":"\u003c/div\u003e"}],"source_content_type":"text/html","patch_set":21,"id":"ba3cc151_14407da4","line":18,"in_reply_to":"ba3cc151_0213aa5d","updated":"2015-07-07 16:44:24.000000000","message":"ok","commit_id":"d7de951707bd2d3bc07eea1f9ef6d43eeb7ff86a"}],"openstack_dashboard/static/dashboard/metadata/modal/modal.module.js":[{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"eb92a895dfc232c1b24630c7eca8cec543aecb8f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"(function () {"},{"line_number":2,"context_line":"  \u0027use strict\u0027;"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"  /**"}],"source_content_type":"text/javascript","patch_set":18,"id":"fa32b979_1d024473","line":1,"updated":"2015-06-26 00:19:12.000000000","message":"Copyright header should be at top of file.","commit_id":"21c2a435bed50e970081ceee6d36e5fda50df560"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"cd31253408439bb58b6928cb977ce4e16384d7d0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"(function () {"},{"line_number":2,"context_line":"  \u0027use strict\u0027;"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"  /**"}],"source_content_type":"text/javascript","patch_set":18,"id":"fa32b979_53fc2272","line":1,"in_reply_to":"fa32b979_1d024473","updated":"2015-06-26 14:35:30.000000000","message":"Done","commit_id":"21c2a435bed50e970081ceee6d36e5fda50df560"},{"author":{"_account_id":13805,"name":"Shaoquan Chen","email":"sean.chen2@hp.com","username":"SeanChen"},"change_message_id":"272dba9f6c2a07b5e09a7c3ea9d5497c7a32c270","unresolved":false,"context_lines":[{"line_number":36,"context_line":"   */"},{"line_number":37,"context_line":"  angular"},{"line_number":38,"context_line":"    .module(\u0027horizon.dashboard.metadata.modal\u0027, ["},{"line_number":39,"context_line":"      \u0027horizon.framework.widgets.metadata-tree\u0027,"},{"line_number":40,"context_line":"      \u0027horizon.dashboard.metadata\u0027"},{"line_number":41,"context_line":"    ])"},{"line_number":42,"context_line":"    .constant(\u0027horizon.dashboard.metadata.modal.constant\u0027, {"}],"source_content_type":"text/javascript","patch_set":21,"id":"ba3cc151_c26142d5","line":39,"updated":"2015-07-06 11:06:15.000000000","message":"\u0027horizon.framework.widgets.metadata-tree\u0027, is not a child of \u0027horizon.dashboard.metadata.modal\u0027, we want to manage the dependency as a tree. It should have been loaded by \u0027horizon.framework.widgets\u0027","commit_id":"d7de951707bd2d3bc07eea1f9ef6d43eeb7ff86a"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"7fcb199085920bc8b18697b3507d20cca5911036","unresolved":false,"context_lines":[{"line_number":36,"context_line":"   */"},{"line_number":37,"context_line":"  angular"},{"line_number":38,"context_line":"    .module(\u0027horizon.dashboard.metadata.modal\u0027, ["},{"line_number":39,"context_line":"      \u0027horizon.framework.widgets.metadata-tree\u0027,"},{"line_number":40,"context_line":"      \u0027horizon.dashboard.metadata\u0027"},{"line_number":41,"context_line":"    ])"},{"line_number":42,"context_line":"    .constant(\u0027horizon.dashboard.metadata.modal.constant\u0027, {"}],"source_content_type":"text/javascript","patch_set":21,"id":"ba3cc151_0334fadb","line":39,"in_reply_to":"ba3cc151_c26142d5","updated":"2015-07-07 16:44:24.000000000","message":"Citing https://docs.angularjs.org/guide/module :\n\"Depending on a module implies that the required module needs to be loaded before the requiring module is loaded.\"\n\nhorizon.dashboard.metadata.modal is using services from horizon.framework.widgets.metadata-tree and expects that they are loaded before this module, what\u0027s wrong with that?","commit_id":"d7de951707bd2d3bc07eea1f9ef6d43eeb7ff86a"},{"author":{"_account_id":13805,"name":"Shaoquan Chen","email":"sean.chen2@hp.com","username":"SeanChen"},"change_message_id":"272dba9f6c2a07b5e09a7c3ea9d5497c7a32c270","unresolved":false,"context_lines":[{"line_number":37,"context_line":"  angular"},{"line_number":38,"context_line":"    .module(\u0027horizon.dashboard.metadata.modal\u0027, ["},{"line_number":39,"context_line":"      \u0027horizon.framework.widgets.metadata-tree\u0027,"},{"line_number":40,"context_line":"      \u0027horizon.dashboard.metadata\u0027"},{"line_number":41,"context_line":"    ])"},{"line_number":42,"context_line":"    .constant(\u0027horizon.dashboard.metadata.modal.constant\u0027, {"},{"line_number":43,"context_line":"      backdrop: \u0027static\u0027,"}],"source_content_type":"text/javascript","patch_set":21,"id":"ba3cc151_a2ed1e27","line":40,"updated":"2015-07-06 11:06:15.000000000","message":"\u0027horizon.dashboard.metadata\u0027 is a `parent` module, child module should not have dependency on parent module. Instead, parent module depends on child modules.","commit_id":"d7de951707bd2d3bc07eea1f9ef6d43eeb7ff86a"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"7fcb199085920bc8b18697b3507d20cca5911036","unresolved":false,"context_lines":[{"line_number":37,"context_line":"  angular"},{"line_number":38,"context_line":"    .module(\u0027horizon.dashboard.metadata.modal\u0027, ["},{"line_number":39,"context_line":"      \u0027horizon.framework.widgets.metadata-tree\u0027,"},{"line_number":40,"context_line":"      \u0027horizon.dashboard.metadata\u0027"},{"line_number":41,"context_line":"    ])"},{"line_number":42,"context_line":"    .constant(\u0027horizon.dashboard.metadata.modal.constant\u0027, {"},{"line_number":43,"context_line":"      backdrop: \u0027static\u0027,"}],"source_content_type":"text/javascript","patch_set":21,"id":"ba3cc151_749c695d","line":40,"in_reply_to":"ba3cc151_a2ed1e27","updated":"2015-07-07 16:44:24.000000000","message":"This explanation is not clear for me. Why should parent module depend on it\u0027s children?","commit_id":"d7de951707bd2d3bc07eea1f9ef6d43eeb7ff86a"},{"author":{"_account_id":13805,"name":"Shaoquan Chen","email":"sean.chen2@hp.com","username":"SeanChen"},"change_message_id":"272dba9f6c2a07b5e09a7c3ea9d5497c7a32c270","unresolved":false,"context_lines":[{"line_number":39,"context_line":"      \u0027horizon.framework.widgets.metadata-tree\u0027,"},{"line_number":40,"context_line":"      \u0027horizon.dashboard.metadata\u0027"},{"line_number":41,"context_line":"    ])"},{"line_number":42,"context_line":"    .constant(\u0027horizon.dashboard.metadata.modal.constant\u0027, {"},{"line_number":43,"context_line":"      backdrop: \u0027static\u0027,"},{"line_number":44,"context_line":"      controller: \u0027ModalController as modal\u0027,"},{"line_number":45,"context_line":"      windowClass: \u0027modal-dialog-metadata\u0027"}],"source_content_type":"text/javascript","patch_set":21,"id":"ba3cc151_02416a39","line":42,"updated":"2015-07-06 11:06:15.000000000","message":"Can we get a better name?","commit_id":"d7de951707bd2d3bc07eea1f9ef6d43eeb7ff86a"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"7fcb199085920bc8b18697b3507d20cca5911036","unresolved":false,"context_lines":[{"line_number":39,"context_line":"      \u0027horizon.framework.widgets.metadata-tree\u0027,"},{"line_number":40,"context_line":"      \u0027horizon.dashboard.metadata\u0027"},{"line_number":41,"context_line":"    ])"},{"line_number":42,"context_line":"    .constant(\u0027horizon.dashboard.metadata.modal.constant\u0027, {"},{"line_number":43,"context_line":"      backdrop: \u0027static\u0027,"},{"line_number":44,"context_line":"      controller: \u0027ModalController as modal\u0027,"},{"line_number":45,"context_line":"      windowClass: \u0027modal-dialog-metadata\u0027"}],"source_content_type":"text/javascript","patch_set":21,"id":"ba3cc151_d466a028","line":42,"in_reply_to":"ba3cc151_02416a39","updated":"2015-07-07 16:44:24.000000000","message":"Yes, we can, any suggestions?","commit_id":"d7de951707bd2d3bc07eea1f9ef6d43eeb7ff86a"}],"openstack_dashboard/static/dashboard/metadata/modal/modal.service.js":[{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"eb92a895dfc232c1b24630c7eca8cec543aecb8f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"(function () {"},{"line_number":2,"context_line":"  \u0027use strict\u0027;"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"  /**"}],"source_content_type":"text/javascript","patch_set":18,"id":"fa32b979_bdcc7862","line":1,"updated":"2015-06-26 00:19:12.000000000","message":"Copyright header should be at top of file.","commit_id":"21c2a435bed50e970081ceee6d36e5fda50df560"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"cd31253408439bb58b6928cb977ce4e16384d7d0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"(function () {"},{"line_number":2,"context_line":"  \u0027use strict\u0027;"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"  /**"}],"source_content_type":"text/javascript","patch_set":18,"id":"fa32b979_d3f03294","line":1,"in_reply_to":"fa32b979_bdcc7862","updated":"2015-06-26 14:35:30.000000000","message":"Done","commit_id":"21c2a435bed50e970081ceee6d36e5fda50df560"},{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"eb92a895dfc232c1b24630c7eca8cec543aecb8f","unresolved":false,"context_lines":[{"line_number":14,"context_line":"    \u0027dashboardBasePath\u0027,"},{"line_number":15,"context_line":"    \u0027horizon.dashboard.metadata.service\u0027,"},{"line_number":16,"context_line":"    \u0027horizon.dashboard.metadata.modal.constant\u0027"},{"line_number":17,"context_line":"  ];"},{"line_number":18,"context_line":"  function modalService($modal, path, ms, mmc) {"},{"line_number":19,"context_line":"    /**"},{"line_number":20,"context_line":"     * Open modal allowing to edit metadata"}],"source_content_type":"text/javascript","patch_set":18,"id":"fa32b979_fde9a0b8","line":17,"updated":"2015-06-26 00:19:12.000000000","message":"nit: space","commit_id":"21c2a435bed50e970081ceee6d36e5fda50df560"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"cd31253408439bb58b6928cb977ce4e16384d7d0","unresolved":false,"context_lines":[{"line_number":14,"context_line":"    \u0027dashboardBasePath\u0027,"},{"line_number":15,"context_line":"    \u0027horizon.dashboard.metadata.service\u0027,"},{"line_number":16,"context_line":"    \u0027horizon.dashboard.metadata.modal.constant\u0027"},{"line_number":17,"context_line":"  ];"},{"line_number":18,"context_line":"  function modalService($modal, path, ms, mmc) {"},{"line_number":19,"context_line":"    /**"},{"line_number":20,"context_line":"     * Open modal allowing to edit metadata"}],"source_content_type":"text/javascript","patch_set":18,"id":"fa32b979_f3ed36b8","line":17,"in_reply_to":"fa32b979_fde9a0b8","updated":"2015-06-26 14:35:30.000000000","message":"Done","commit_id":"21c2a435bed50e970081ceee6d36e5fda50df560"},{"author":{"_account_id":13805,"name":"Shaoquan Chen","email":"sean.chen2@hp.com","username":"SeanChen"},"change_message_id":"272dba9f6c2a07b5e09a7c3ea9d5497c7a32c270","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    \u0027horizon.dashboard.metadata.modal.constant\u0027"},{"line_number":32,"context_line":"  ];"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"  function modalService($modal, path, ms, mmc) {"},{"line_number":35,"context_line":"    /**"},{"line_number":36,"context_line":"     * Open modal allowing to edit metadata"},{"line_number":37,"context_line":"     *"}],"source_content_type":"text/javascript","patch_set":21,"id":"ba3cc151_62b876e6","line":34,"updated":"2015-07-06 11:06:15.000000000","message":"can you make the parameters readable?","commit_id":"d7de951707bd2d3bc07eea1f9ef6d43eeb7ff86a"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"7fcb199085920bc8b18697b3507d20cca5911036","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    \u0027horizon.dashboard.metadata.modal.constant\u0027"},{"line_number":32,"context_line":"  ];"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"  function modalService($modal, path, ms, mmc) {"},{"line_number":35,"context_line":"    /**"},{"line_number":36,"context_line":"     * Open modal allowing to edit metadata"},{"line_number":37,"context_line":"     *"}],"source_content_type":"text/javascript","patch_set":21,"id":"ba3cc151_745d4978","line":34,"in_reply_to":"ba3cc151_62b876e6","updated":"2015-07-07 16:44:24.000000000","message":"Any specific example? Something like modalConstant or metadataModalConstant?","commit_id":"d7de951707bd2d3bc07eea1f9ef6d43eeb7ff86a"},{"author":{"_account_id":13805,"name":"Shaoquan Chen","email":"sean.chen2@hp.com","username":"SeanChen"},"change_message_id":"272dba9f6c2a07b5e09a7c3ea9d5497c7a32c270","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    function open(resource, id) {"},{"line_number":42,"context_line":"      return $modal.open(angular.extend({"},{"line_number":43,"context_line":"        resolve: {"},{"line_number":44,"context_line":"          available: function() {return ms.getNamespaces(resource);},"},{"line_number":45,"context_line":"          existing: function() {return ms.getMetadata(resource, id);},"},{"line_number":46,"context_line":"          params: function() {return {resource: resource, id: id};}"},{"line_number":47,"context_line":"        },"}],"source_content_type":"text/javascript","patch_set":21,"id":"ba3cc151_e251e6d9","line":44,"updated":"2015-07-06 11:06:15.000000000","message":"The formatting of these three function look add in the code base. Can you make each function three line?","commit_id":"d7de951707bd2d3bc07eea1f9ef6d43eeb7ff86a"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"7fcb199085920bc8b18697b3507d20cca5911036","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    function open(resource, id) {"},{"line_number":42,"context_line":"      return $modal.open(angular.extend({"},{"line_number":43,"context_line":"        resolve: {"},{"line_number":44,"context_line":"          available: function() {return ms.getNamespaces(resource);},"},{"line_number":45,"context_line":"          existing: function() {return ms.getMetadata(resource, id);},"},{"line_number":46,"context_line":"          params: function() {return {resource: resource, id: id};}"},{"line_number":47,"context_line":"        },"}],"source_content_type":"text/javascript","patch_set":21,"id":"ba3cc151_d44e95c0","line":44,"in_reply_to":"ba3cc151_e251e6d9","updated":"2015-07-07 16:44:24.000000000","message":"Sure.","commit_id":"d7de951707bd2d3bc07eea1f9ef6d43eeb7ff86a"}],"openstack_dashboard/static/openstack-service-api/glance.service.js":[{"author":{"_account_id":7665,"name":"Travis Tripp","email":"os.travis.tripp@gmail.com","username":"travis.tripp"},"change_message_id":"eb92a895dfc232c1b24630c7eca8cec543aecb8f","unresolved":false,"context_lines":[{"line_number":51,"context_line":"     * @description"},{"line_number":52,"context_line":"     * Get an image metadata definitions by image ID"},{"line_number":53,"context_line":"     * @param {string} id Specifies the id of the image to request."},{"line_number":54,"context_line":"     */"},{"line_number":55,"context_line":"    this.getImageMetadefs \u003d function(id) {"},{"line_number":56,"context_line":"      return apiService.get(\u0027/api/glance/images/\u0027 + id + \u0027/metadefs\u0027)"},{"line_number":57,"context_line":"        .error(function () {"}],"source_content_type":"text/javascript","patch_set":18,"id":"fa32b979_1d86c416","line":54,"updated":"2015-06-26 00:19:12.000000000","message":"Same naming comments here as on the python side code.","commit_id":"21c2a435bed50e970081ceee6d36e5fda50df560"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"cd31253408439bb58b6928cb977ce4e16384d7d0","unresolved":false,"context_lines":[{"line_number":51,"context_line":"     * @description"},{"line_number":52,"context_line":"     * Get an image metadata definitions by image ID"},{"line_number":53,"context_line":"     * @param {string} id Specifies the id of the image to request."},{"line_number":54,"context_line":"     */"},{"line_number":55,"context_line":"    this.getImageMetadefs \u003d function(id) {"},{"line_number":56,"context_line":"      return apiService.get(\u0027/api/glance/images/\u0027 + id + \u0027/metadefs\u0027)"},{"line_number":57,"context_line":"        .error(function () {"}],"source_content_type":"text/javascript","patch_set":18,"id":"fa32b979_f34456b8","line":54,"in_reply_to":"fa32b979_1d86c416","updated":"2015-06-26 14:35:30.000000000","message":"Done","commit_id":"21c2a435bed50e970081ceee6d36e5fda50df560"}],"openstack_dashboard/static/openstack-service-api/openstack-service-api.module.js":[{"author":{"_account_id":13805,"name":"Shaoquan Chen","email":"sean.chen2@hp.com","username":"SeanChen"},"change_message_id":"272dba9f6c2a07b5e09a7c3ea9d5497c7a32c270","unresolved":false,"context_lines":[{"line_number":17,"context_line":"  \u0027use strict\u0027;"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"  angular"},{"line_number":20,"context_line":"    .module(\u0027horizon.openstack-service-api\u0027, ["},{"line_number":21,"context_line":"      \u0027horizon.framework.util.http\u0027"},{"line_number":22,"context_line":"    ]);"},{"line_number":23,"context_line":"}());"}],"source_content_type":"text/javascript","patch_set":21,"id":"ba3cc151_e2c0062d","line":20,"updated":"2015-07-06 11:06:15.000000000","message":"\u0027horizon.framework.util.http\u0027 is not a child module of \u0027horizon.openstack-service-api\u0027, and shouldn\u0027t be loaded here. Dependency should be managed as a tree in Horizon.","commit_id":"d7de951707bd2d3bc07eea1f9ef6d43eeb7ff86a"}]}
