{"version":3,"sources":["webpack://buildbot-console-view/webpack/universalModuleDefinition","webpack://buildbot-console-view/webpack/bootstrap","webpack://buildbot-console-view/./src/module/main.module.js","webpack://buildbot-console-view/external \"angular-animate\"","webpack://buildbot-console-view/external \"@uirouter/angularjs\"","webpack://buildbot-console-view/external \"guanlecoja-ui\"","webpack://buildbot-console-view/external \"buildbot-data-js\"","webpack://buildbot-console-view/./src/module/console.tpl.jade","webpack://buildbot-console-view/./src/module/view/modal/modal.tpl.jade","webpack://buildbot-console-view/./src/module/view/modal/modal.controller.js"],"names":["root","factory","exports","module","require","define","amd","self","this","__WEBPACK_EXTERNAL_MODULE__1__","__WEBPACK_EXTERNAL_MODULE__2__","__WEBPACK_EXTERNAL_MODULE__3__","__WEBPACK_EXTERNAL_MODULE__4__","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","__webpack_exports__","angular","config","ConsoleState","constructor","$stateProvider","glMenuServiceProvider","bbSettingsServiceProvider","addGroup","caption","icon","order","cfg","group","state","controller","concat","controllerAs","template","url","data","addSettingsGroup","items","type","default_value","Console","$scope","$q","$window","dataService","bbSettingsService","resultsService","$uibModal","$timeout","onChange","_onChange","matchBuildWithChange","makeFakeChange","extend","settings","getSettingsGroup","buildLimit","changeLimit","dataAccessor","open","closeOnDestroy","_infoIsExpanded","all_builders","getBuilders","builders","Intl","collator","Collator","undefined","numeric","sensitivity","strcompare","compare","a","b","builds","getBuilds","limit","changes","getChanges","buildrequests","getBuildrequests","buildsets","getBuildsets","length","$resolved","onchange_debounce","build","change","_i","_Array$from","Array","from","builderid","hasBuild","sortBuildersByTags","changesBySSID","changesByRevision","_i2","_Array$from2","sourcestamp","ssid","revision","populateChange","_i3","_Array$from3","filtered_changes","comments","subject","split","_i4","_Array$from4","push","builders_with_builds","builderids_with_builds","_i5","_Array$from5","builder","last_builderids_with_builds","tag_line","_sortBuildersByTags","tag_lines","sorted_builders","set_tag_line","depth","tag","colspan","_tag_line","last_tag","walk_tree","map","_tag","sort","_i6","_Array$from6","_i7","_Array$from7","builders_by_tags","_i8","_Array$from8","tags","_i12","_Array$from12","chosen_builderids","_i9","_Array$from9","excluded","_i13","_Array$from13","_i14","_Array$from14","remaining_builders","_i10","_Array$from10","_i11","_Array$from11","buildersById","_i15","_Array$from15","buildrequest","buildrequestid","buildset","buildsetid","sourcestamps","_i16","_Array$from16","properties","got_revision","rev","started_at","codebase","keys","buildid","when_timestamp","changeid","author","openAll","show_details","closeAll","getRowHeaderWidth","hasExpanded","getColHeaderHeight","max_buildername","_i17","_Array$from17","Math","max","isBigTable","padding","innerWidth","_i18","_Array$from18","infoIsExpanded","selectBuild","windowClass","resolve","selectedBuild","toggleInfo","window","T","ConsoleModal","$uibModalInstance","$on","close"],"mappings":"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","file":"scripts.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"angular-animate\"), require(\"@uirouter/angularjs\"), require(\"guanlecoja-ui\"), require(\"buildbot-data-js\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"buildbot-console-view\", [\"angular-animate\", \"@uirouter/angularjs\", \"guanlecoja-ui\", \"buildbot-data-js\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"buildbot-console-view\"] = factory(require(\"angular-animate\"), require(\"@uirouter/angularjs\"), require(\"guanlecoja-ui\"), require(\"buildbot-data-js\"));\n\telse\n\t\troot[\"buildbot-console-view\"] = factory(root[\"angular-animate\"], root[\"@uirouter/angularjs\"], root[\"guanlecoja-ui\"], root[\"buildbot-data-js\"]);\n})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__1__, __WEBPACK_EXTERNAL_MODULE__2__, __WEBPACK_EXTERNAL_MODULE__3__, __WEBPACK_EXTERNAL_MODULE__4__) {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","/*\n * decaffeinate suggestions:\n * DS101: Remove unnecessary use of Array.from\n * DS102: Remove unnecessary code created because of implicit returns\n * DS205: Consider reworking code to avoid use of IIFEs\n * DS207: Consider shorter variations of null checks\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\n\nimport 'angular-animate';\nimport '@uirouter/angularjs';\nimport 'guanlecoja-ui';\nimport 'buildbot-data-js';\n\nclass ConsoleState {\n constructor($stateProvider, glMenuServiceProvider, bbSettingsServiceProvider) {\n\n // Name of the state\n const name = 'console';\n\n // Menu configuration\n glMenuServiceProvider.addGroup({\n name,\n caption: 'Console View',\n icon: 'exclamation-circle',\n order: 5\n });\n\n // Configuration\n const cfg = {\n group: name,\n caption: 'Console View'\n };\n\n // Register new state\n const state = {\n controller: `${name}Controller`,\n controllerAs: \"c\",\n template: require('./console.tpl.jade'),\n name,\n url: `/${name}`,\n data: cfg\n };\n\n $stateProvider.state(state);\n\n bbSettingsServiceProvider.addSettingsGroup({\n name: 'Console',\n caption: 'Console related settings',\n items: [{\n type: 'integer',\n name: 'buildLimit',\n caption: 'Number of builds to fetch',\n default_value: 200\n }\n , {\n type: 'integer',\n name: 'changeLimit',\n caption: 'Number of changes to fetch',\n default_value: 30\n }\n ]});\n }\n}\n\nclass Console {\n constructor($scope, $q, $window, dataService, bbSettingsService, resultsService,\n $uibModal, $timeout) {\n this.onChange = this.onChange.bind(this);\n this._onChange = this._onChange.bind(this);\n this.matchBuildWithChange = this.matchBuildWithChange.bind(this);\n this.makeFakeChange = this.makeFakeChange.bind(this);\n this.$scope = $scope;\n this.$window = $window;\n this.$uibModal = $uibModal;\n this.$timeout = $timeout;\n angular.extend(this, resultsService);\n const settings = bbSettingsService.getSettingsGroup('Console');\n this.buildLimit = settings.buildLimit.value;\n this.changeLimit = settings.changeLimit.value;\n this.dataAccessor = dataService.open().closeOnDestroy(this.$scope);\n this._infoIsExpanded = {};\n this.$scope.all_builders = (this.all_builders = this.dataAccessor.getBuilders());\n this.$scope.builders = (this.builders = []);\n if (typeof Intl !== 'undefined' && Intl !== null) {\n const collator = new Intl.Collator(undefined, {numeric: true, sensitivity: 'base'});\n this.strcompare = collator.compare;\n } else {\n this.strcompare = function(a, b) {\n if (a < b) {\n return -1;\n }\n if (a === b) {\n return 0;\n }\n return 1;\n };\n }\n\n this.$scope.builds = (this.builds = this.dataAccessor.getBuilds({\n property: [\"got_revision\"],\n limit: this.buildLimit,\n order: '-started_at'\n }));\n this.changes = this.dataAccessor.getChanges({limit: this.changeLimit, order: '-changeid'});\n this.buildrequests = this.dataAccessor.getBuildrequests({limit: this.buildLimit, order: '-submitted_at'});\n this.buildsets = this.dataAccessor.getBuildsets({limit: this.buildLimit, order: '-submitted_at'});\n\n this.builds.onChange = this.onChange;\n this.changes.onChange = this.onChange;\n this.buildrequests.onChange = this.onChange;\n this.buildsets.onChange = this.onChange;\n }\n\n onChange(s) {\n // if there is no data, no need to try and build something.\n if ((this.builds.length === 0) || (this.all_builders.length === 0) || !this.changes.$resolved ||\n (this.buildsets.length === 0) || (this.buildrequests === 0)) {\n return;\n }\n if ((this.onchange_debounce == null)) {\n this.onchange_debounce = this.$timeout(this._onChange, 100);\n }\n }\n\n _onChange() {\n let build, change;\n this.onchange_debounce = undefined;\n // we only display builders who actually have builds\n for (build of Array.from(this.builds)) {\n this.all_builders.get(build.builderid).hasBuild = true;\n }\n\n this.sortBuildersByTags(this.all_builders);\n\n if (this.changesBySSID == null) { this.changesBySSID = {}; }\n if (this.changesByRevision == null) { this.changesByRevision = {}; }\n for (change of Array.from(this.changes)) {\n this.changesBySSID[change.sourcestamp.ssid] = change;\n this.changesByRevision[change.revision] = change;\n this.populateChange(change);\n }\n\n\n for (build of Array.from(this.builds)) {\n this.matchBuildWithChange(build);\n }\n\n this.filtered_changes = [];\n\n for (let ssid in this.changesBySSID) {\n change = this.changesBySSID[ssid];\n if (change.comments) {\n change.subject = change.comments.split(\"\\n\")[0];\n }\n for (let builder of Array.from(change.builders)) {\n if (builder.builds.length > 0) {\n this.filtered_changes.push(change);\n break;\n }\n }\n }\n }\n /*\n * Sort builders by tags\n * Buildbot eight has the category option, but it was only limited to one category per builder,\n * which make it easy to sort by category\n * Here, we have multiple tags per builder, we need to try to group builders with same tags together\n * The algorithm is rather twisted. It is a first try at the concept of grouping builders by tags..\n */\n\n sortBuildersByTags(all_builders) {\n // first we only want builders with builds\n let tag;\n const builders_with_builds = [];\n let builderids_with_builds = \"\";\n for (let builder of Array.from(all_builders)) {\n if (builder.hasBuild) {\n builders_with_builds.push(builder);\n builderids_with_builds += `.${builder.builderid}`;\n }\n }\n\n if (builderids_with_builds === this.last_builderids_with_builds) {\n // don't recalculate if it hasn't changed!\n return;\n }\n // we call recursive function, which finds non-overlapping groups\n let tag_line = this._sortBuildersByTags(builders_with_builds);\n // we get a tree of builders grouped by tags\n // we now need to flatten the tree, in order to build several lines of tags\n // (each line is representing a depth in the tag tree)\n // we walk the tree left to right and build the list of builders in the tree order, and the tag_lines\n // in the tree, there are groups of remaining builders, which could not be grouped together,\n // those have the empty tag ''\n const tag_lines = [];\n\n let sorted_builders = [];\n const set_tag_line = function(depth, tag, colspan) {\n // we build the tag lines by using a sparse array\n let _tag_line = tag_lines[depth];\n if ((_tag_line == null)) {\n // initialize the sparse array\n _tag_line = (tag_lines[depth] = []);\n } else {\n // if we were already initialized, look at the last tag if this is the same\n // we merge the two entries\n const last_tag = _tag_line[_tag_line.length - 1];\n if (last_tag.tag === tag) {\n last_tag.colspan += colspan;\n return;\n }\n }\n return _tag_line.push({tag, colspan});\n };\n const self = this;\n // recursive tree walking\n var walk_tree = function(tag, depth) {\n set_tag_line(depth, tag.tag, tag.builders.length);\n if ((tag.tag_line == null) || (tag.tag_line.length === 0)) {\n // this is the leaf of the tree, sort by buildername, and add them to the\n // list of sorted builders\n tag.builders.sort((a, b) => self.strcompare(a.name, b.name));\n sorted_builders = sorted_builders.concat(tag.builders);\n for (let i = 1; i <= 100; i++) { // set the remaining depth of the tree to the same colspan\n // (we hardcode the maximum depth for now :/ )\n set_tag_line(depth + i, '', tag.builders.length);\n }\n return;\n }\n return Array.from(tag.tag_line).map((_tag) =>\n walk_tree(_tag, depth + 1));\n };\n\n for (tag of Array.from(tag_line)) {\n walk_tree(tag, 0);\n }\n\n this.builders = sorted_builders;\n this.tag_lines = [];\n // make a new array to avoid it to be sparse, and to remove lines filled with null tags\n for (tag_line of Array.from(tag_lines)) {\n if (!((tag_line.length === 1) && (tag_line[0].tag === \"\"))) {\n this.tag_lines.push(tag_line);\n }\n }\n return this.last_builderids_with_builds = builderids_with_builds;\n }\n /*\n * recursive function which sorts the builders by tags\n * call recursively with groups of builders smaller and smaller\n */\n _sortBuildersByTags(all_builders) {\n\n // first find out how many builders there is by tags in that group\n let builder, builders, tag;\n const builders_by_tags = {};\n for (builder of Array.from(all_builders)) {\n if (builder.tags != null) {\n for (tag of Array.from(builder.tags)) {\n if ((builders_by_tags[tag] == null)) {\n builders_by_tags[tag] = [];\n }\n builders_by_tags[tag].push(builder);\n }\n }\n }\n const tags = [];\n for (tag in builders_by_tags) {\n // we don't want the tags that are on all the builders\n builders = builders_by_tags[tag];\n if (builders.length < all_builders.length) {\n tags.push({tag, builders});\n }\n }\n\n // sort the tags to first look at tags with the larger number of builders\n // @FIXME maybe this is not the best method to find the best groups\n tags.sort((a, b) => b.builders.length - a.builders.length);\n\n const tag_line = [];\n const chosen_builderids = {};\n // pick the tags one by one, by making sure we make non-overalaping groups\n for (tag of Array.from(tags)) {\n let excluded = false;\n for (builder of Array.from(tag.builders)) {\n if (chosen_builderids.hasOwnProperty(builder.builderid)) {\n excluded = true;\n break;\n }\n }\n if (!excluded) {\n for (builder of Array.from(tag.builders)) {\n chosen_builderids[builder.builderid] = tag.tag;\n }\n tag_line.push(tag);\n }\n }\n\n // some builders do not have tags, we put them in another group\n const remaining_builders = [];\n for (builder of Array.from(all_builders)) {\n if (!chosen_builderids.hasOwnProperty(builder.builderid)) {\n remaining_builders.push(builder);\n }\n }\n\n if (remaining_builders.length) {\n tag_line.push({tag: \"\", builders: remaining_builders});\n }\n\n // if there is more than one tag in this line, we need to recurse\n if (tag_line.length > 1) {\n for (tag of Array.from(tag_line)) {\n tag.tag_line = this._sortBuildersByTags(tag.builders);\n }\n }\n return tag_line;\n }\n\n /*\n * fill a change with a list of builders\n */\n populateChange(change) {\n change.builders = [];\n change.buildersById = {};\n for (let builder of Array.from(this.builders)) {\n builder = {builderid: builder.builderid, name: builder.name, builds: []};\n change.builders.push(builder);\n change.buildersById[builder.builderid] = builder;\n }\n }\n /*\n * Match builds with a change\n */\n matchBuildWithChange(build) {\n let change, revision;\n const buildrequest = this.buildrequests.get(build.buildrequestid);\n if ((buildrequest == null)) {\n return;\n }\n const buildset = this.buildsets.get(buildrequest.buildsetid);\n if ((buildset == null)) {\n return;\n }\n if ((buildset != null) && (buildset.sourcestamps != null)) {\n for (let sourcestamp of Array.from(buildset.sourcestamps)) {\n change = this.changesBySSID[sourcestamp.ssid];\n if (change != null) {\n break;\n }\n }\n }\n\n if ((change == null) && ((build.properties != null ? build.properties.got_revision : undefined) != null)) {\n const rev = build.properties.got_revision[0];\n // got_revision can be per codebase or just the revision string\n if (typeof(rev) === \"string\") {\n change = this.changesByRevision[rev];\n if ((change == null)) {\n change = this.makeFakeChange(\"\", rev, build.started_at);\n }\n } else {\n let codebase;\n for (codebase in rev) {\n revision = rev[codebase];\n change = this.changesByRevision[revision];\n if (change != null) {\n break;\n }\n }\n\n if ((change == null)) {\n revision = rev === {} ? \"\" : rev[Object.keys(rev)[0]];\n change = this.makeFakeChange(codebase, revision, build.started_at);\n }\n }\n }\n\n if ((change == null)) {\n revision = `unknown revision ${build.builderid}-${build.buildid}`;\n change = this.makeFakeChange(\"unknown codebase\", revision, build.started_at);\n }\n\n return change.buildersById[build.builderid].builds.push(build);\n }\n\n makeFakeChange(codebase, revision, when_timestamp) {\n let change = this.changesBySSID[revision];\n if ((change == null)) {\n change = {\n codebase,\n revision,\n changeid: revision,\n when_timestamp,\n author: `unknown author for ${revision}`,\n comments: revision + \"\\n\\nFake comment for revision: No change for this revision, please setup a changesource in Buildbot\"\n };\n this.changesBySSID[revision] = change;\n this.populateChange(change);\n }\n return change;\n }\n /*\n * Open all change row information\n */\n openAll() {\n return Array.from(this.filtered_changes).map((change) =>\n (change.show_details = true));\n }\n\n /*\n * Close all change row information\n */\n closeAll() {\n return Array.from(this.filtered_changes).map((change) =>\n (change.show_details = false));\n }\n\n /*\n * Calculate row header (aka first column) width\n * depending if we display commit comment, we reserve more space\n */\n getRowHeaderWidth() {\n if (this.hasExpanded()) {\n return 400; // magic value enough to hold 78 characters lines\n } else {\n return 200;\n }\n }\n /*\n * Calculate col header (aka first row) height\n * It depends on the length of the longest builder\n */\n getColHeaderHeight() {\n let max_buildername = 0;\n for (let builder of Array.from(this.builders)) {\n max_buildername = Math.max(builder.name.length, max_buildername);\n }\n return Math.max(100, max_buildername * 3);\n }\n\n /*\n *\n * Determine if we use a 100% width table or if we allow horizontal scrollbar\n * depending on number of builders, and size of window, we need a fixed column size or a 100% width table\n *\n */\n isBigTable() {\n const padding = this.getRowHeaderWidth();\n if (((this.$window.innerWidth - padding) / this.builders.length) < 40) {\n return true;\n }\n return false;\n }\n /*\n *\n * do we have at least one change expanded?\n *\n */\n hasExpanded() {\n for (let change of Array.from(this.changes)) {\n if (this.infoIsExpanded(change)) {\n return true;\n }\n }\n return false;\n }\n\n /*\n *\n * display build details\n *\n */\n selectBuild(build) {\n let modal;\n return modal = this.$uibModal.open({\n template: require('./view/modal/modal.tpl.jade'),\n controller: 'consoleModalController as modal',\n windowClass: 'modal-big',\n resolve: {\n selectedBuild() { return build; }\n }\n });\n }\n\n /*\n *\n * toggle display of additional info for that change\n *\n */\n toggleInfo(change) {\n return change.show_details = !change.show_details;\n }\n infoIsExpanded(change) {\n return change.show_details;\n }\n}\n\n\nangular.module('console_view', [\n 'ui.router', 'ui.bootstrap', 'ngAnimate', 'guanlecoja.ui', 'bbData'])\n.config(['$stateProvider', 'glMenuServiceProvider', 'bbSettingsServiceProvider', ConsoleState])\n.controller('consoleController', ['$scope', '$q', '$window', 'dataService', 'bbSettingsService', 'resultsService', '$uibModal', '$timeout', Console]);\n\nrequire('./view/modal/modal.controller.js');\n","module.exports = __WEBPACK_EXTERNAL_MODULE__1__;","module.exports = __WEBPACK_EXTERNAL_MODULE__2__;","module.exports = __WEBPACK_EXTERNAL_MODULE__3__;","module.exports = __WEBPACK_EXTERNAL_MODULE__4__;","module.exports = window.T['console_view/views/console.html'] || \"

loading

No changes. Console view needs changesource to be setup, andchangesto be in the system.

{{tag.tag}}
{{ build.number }}
\";","module.exports = window.T['console_view/views/modal.html'] || \"

Build summary

\";","/*\n * decaffeinate suggestions:\n * DS102: Remove unnecessary code created because of implicit returns\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\nclass ConsoleModal {\n constructor($scope, $uibModalInstance, selectedBuild) {\n this.$uibModalInstance = $uibModalInstance;\n this.selectedBuild = selectedBuild;\n $scope.$on('$stateChangeStart', () => {\n return this.close();\n });\n }\n\n close() {\n return this.$uibModalInstance.close();\n }\n}\n\n\nangular.module('console_view')\n.controller('consoleModalController', ['$scope', '$uibModalInstance', 'selectedBuild', ConsoleModal]);\n"],"sourceRoot":""}