{"version":3,"sources":["webpack:///./vue_shared/components/ci_icon.vue?1179","webpack:///vue_shared/components/ci_icon.vue","webpack:///./vue_shared/components/ci_icon.vue?9d08","webpack:///./vue_shared/components/ci_icon.vue","webpack:///./lib/utils/poll.js","webpack:////home/git/gitlab/node_modules/visibilityjs/lib/visibility.core.js","webpack:////home/git/gitlab/node_modules/visibilityjs/lib/visibility.timers.js","webpack:///./blob/viewer/index.js","webpack:///./vue_shared/directives/tooltip.js","webpack:///./vue_shared/components/icon.vue?6516","webpack:///vue_shared/components/icon.vue","webpack:///./vue_shared/components/icon.vue?1c2e","webpack:///./vue_shared/components/icon.vue","webpack:///./blob/blob_fork_suggestion.js","webpack:///./line_highlighter.js","webpack:///./blob/blob_line_permalink_updater.js","webpack:///./shortcuts_blob.js","webpack:///./pages/projects/init_blob.js","webpack:///./projects/tree/components/commit_pipeline_status_component.vue?a574","webpack:///./projects/tree/services/commit_pipeline_service.js","webpack:///./projects/tree/components/commit_pipeline_status_component.vue?bf80","webpack:///projects/tree/components/commit_pipeline_status_component.vue","webpack:///./projects/tree/components/commit_pipeline_status_component.vue","webpack:////home/git/gitlab/node_modules/visibilityjs/index.js","webpack:///./lib/utils/http_status.js","webpack:///./pages/projects/blob/show/index.js"],"names":["validSizes","components_ci_iconvue_type_script_lang_js","components","Icon","props","status","type","Object","required","size","Number","default","validator","value","includes","borderless","Boolean","computed","cssClass","this","group","icon","component","componentNormalizer","_h","$createElement","_c","_self","class","attrs","name","__webpack_exports__","Poll","options","arguments","length","undefined","_classCallCheck","data","notificationCallback","intervalHeader","timeoutID","canPoll","response","_this","headers","_common_utils__WEBPACK_IMPORTED_MODULE_1__","pollInterval","parseInt","_http_status__WEBPACK_IMPORTED_MODULE_0__","OK","setTimeout","makeRequest","successCallback","_this2","_options","resource","method","errorCallback","then","checkConditions","catch","error","ABORTED","clearTimeout","global","lastId","self","onVisible","callback","support","isSupported","hidden","listener","change","e","state","unbind","number","_callbacks","_listen","id","afterPrerendering","_doc","webkitHidden","visibilityState","webkitVisibilityState","document","_change","event","i","call","_init","apply","addEventListener","attachEvent","module","exports","Visibility","window","lastTimer","install","every","interval","hiddenInterval","_time","_timers","visible","_run","stop","_stop","_timed","_wasHidden","_stopRun","runNow","timer","runner","last","Date","delay","setInterval","clearInterval","isHidden","wasHidden","__webpack_require__","BlobViewer","initAuxiliaryViewer","initRichViewer","initMainViewers","$fileHolder","jquery__WEBPACK_IMPORTED_MODULE_0___default","switcher","querySelector","switcherBtns","querySelectorAll","copySourceBtn","simpleViewer","richViewer","initBindings","switchToInitialViewer","initialViewerName","getAttribute","location","hash","indexOf","switchToViewer","Array","from","forEach","el","switchViewHandler","bind","classList","contains","blur","target","currentTarget","preventDefault","setAttribute","remove","activeViewer","add","tooltip","newViewer","oldButton","newButton","oldViewer","toggleCopyButtonState","loadViewer","viewer","renderGFM","trigger","_lib_utils_common_utils__WEBPACK_IMPORTED_MODULE_2__","_flash__WEBPACK_IMPORTED_MODULE_1__","auxiliaryViewer","dataset","richType","initViewer","promise","Promise","all","viewerParam","url","resolve","_lib_utils_axios_utils__WEBPACK_IMPORTED_MODULE_3__","get","_ref","innerHTML","html","componentUpdated","components_iconvue_type_script_lang_js","String","cssClasses","width","height","y","x","spriteHref","gon","sprite_icons","iconTestClass","iconSizeClass","_vm","_b","xlink:href","defaults","openButtons","forkButtons","cancelButtons","suggestionSections","actionTextPieces","BlobForkSuggestion","elementMap","assign","onOpenButtonClick","onCancelButtonClick","bindEvents","on","forkPath","action","removeClass","attr","text","addClass","showSuggestionSection","hideSuggestionSection","off","jquery__WEBPACK_IMPORTED_MODULE_0__","n","LineHighlighter","highlightLineClass","fileHolderSelector","scrollFileHolder","_hash","setHash","highlightLine","clickHandler","highlightHash","prototype","newHash","range","clearHighlight","hashToRange","highlightRange","lineSelector","scrollOptions","offset","scrollTo","a","current","lineNumber","closest","shiftKey","matches","match","ref","ref1","results","push","firstLineNumber","lastLineNumber","__setLocationHash__","history","pushState","title","lineNumberRe","blob_line_permalink_updater_updateLineNumbersOnBlobPermalinks","linksToUpdate","url_utility","test","hashUrlString","concat","slice","permalinkButton","href","baseHref","blob_line_permalink_updater","blobContentHolder","lineNumberSelector","elementsToUpdate","updateBlameAndBlobPermalinkCb","skipResetBindings","fileBlobPermalinkUrl","ShortcutsBlob","opts","_possibleConstructorReturn","__proto__","getPrototypeOf","mousetrap_default","moveToFilePermalink","shortcuts","visitUrl","line_highlighter","fileBlobPermalinkUrlElement","shortcuts_navigation","shortcuts_blob","blob_fork_suggestion","init","blob_bundle","CommitPipelineService","endpoint","axios_utils","components_commit_pipeline_status_componentvue_type_script_lang_js","directives","ciIcon","ci_icon","loadingIcon","loading_icon","ciStatus","isLoading","statusTitle","locale","commitText","mounted","service","commit_pipeline_service","initPolling","methods","res","pipelines","details","flash","poll","visibilityjs_default","fetchPipelineCommitData","restart","fetchData","destroy","label","details_path","rawName","aria-label","data-container","NO_CONTENT","MULTIPLE_CHOICES","BAD_REQUEST","_blob_viewer_index__WEBPACK_IMPORTED_MODULE_2__","_pages_projects_init_blob__WEBPACK_IMPORTED_MODULE_3__","CommitPipelineStatusEl","statusLink","vue__WEBPACK_IMPORTED_MODULE_0__","commitPipelineStatus","_projects_tree_components_commit_pipeline_status_component_vue__WEBPACK_IMPORTED_MODULE_1__","render","createElement"],"mappings":"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","file":"pages.projects.blob.show.52c1a424.chunk.js","sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{class:_vm.cssClass},[_c('icon',{attrs:{\"name\":_vm.icon,\"size\":_vm.size}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<script>\nimport Icon from '../../vue_shared/components/icon.vue';\n\n/**\n * Renders CI icon based on API response shared between all places where it is used.\n *\n * Receives status object containing:\n * status: {\n *   details_path: \"/gitlab-org/gitlab-ce/pipelines/8150156\" // url\n *   group:\"running\" // used for CSS class\n *   icon: \"icon_status_running\" // used to render the icon\n *   label:\"running\" // used for potential tooltip\n *   text:\"running\" // text rendered\n * }\n *\n * Used in:\n * - Pipelines table Badge\n * - Pipelines table mini graph\n * - Pipeline graph\n * - Pipeline show view badge\n * - Jobs table\n * - Jobs show view header\n * - Jobs show view sidebar\n */\nconst validSizes = [8, 12, 16, 18, 24, 32, 48, 72];\n\nexport default {\n  components: {\n    Icon,\n  },\n  props: {\n    status: {\n      type: Object,\n      required: true,\n    },\n    size: {\n      type: Number,\n      required: false,\n      default: 16,\n      validator(value) {\n        return validSizes.includes(value);\n      },\n    },\n    borderless: {\n      type: Boolean,\n      required: false,\n      default: false,\n    },\n  },\n  computed: {\n    cssClass() {\n      const status = this.status.group;\n      return `ci-status-icon ci-status-icon-${status} js-ci-status-icon-${status}`;\n    },\n    icon() {\n      return this.borderless ? `${this.status.icon}_borderless` : this.status.icon;\n    },\n  },\n};\n</script>\n<template>\n  <span :class=\"cssClass\">\n    <icon\n      :name=\"icon\"\n      :size=\"size\"\n    />\n  </span>\n</template>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??ref--0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ci_icon.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??ref--0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ci_icon.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./ci_icon.vue?vue&type=template&id=69ea14c1\"\nimport script from \"./ci_icon.vue?vue&type=script&lang=js\"\nexport * from \"./ci_icon.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","import httpStatusCodes from './http_status';\nimport { normalizeHeaders } from './common_utils';\n\n/**\n * Polling utility for handling realtime updates.\n * Requirements: Promise based HTTP client\n *\n * Service for promise based http client and method need to be provided as props\n *\n * @example\n * new Poll({\n *   resource: resource,\n *   method: 'name',\n *   data: {page: 1, scope: 'all'}, // optional\n *   successCallback: () => {},\n *   errorCallback: () => {},\n *   notificationCallback: () => {}, // optional\n * }).makeRequest();\n *\n * Usage in pipelines table with visibility lib:\n *\n * const poll = new Poll({\n *  resource: this.service,\n *  method: 'getPipelines',\n *  data: { page: pageNumber, scope },\n *  successCallback: this.successCallback,\n *  errorCallback: this.errorCallback,\n *  notificationCallback: this.updateLoading,\n * });\n *\n * if (!Visibility.hidden()) {\n *  poll.makeRequest();\n *  }\n *\n * Visibility.change(() => {\n *  if (!Visibility.hidden()) {\n *   poll.restart();\n *  } else {\n *   poll.stop();\n *  }\n* });\n *\n * 1. Checks for response and headers before start polling\n * 2. Interval is provided by `Poll-Interval` header.\n * 3. If `Poll-Interval` is -1, we stop polling\n * 4. If HTTP response is 200, we poll.\n * 5. If HTTP response is different from 200, we stop polling.\n *\n */\nexport default class Poll {\n  constructor(options = {}) {\n    this.options = options;\n    this.options.data = options.data || {};\n    this.options.notificationCallback = options.notificationCallback ||\n      function notificationCallback() {};\n\n    this.intervalHeader = 'POLL-INTERVAL';\n    this.timeoutID = null;\n    this.canPoll = true;\n  }\n\n  checkConditions(response) {\n    const headers = normalizeHeaders(response.headers);\n    const pollInterval = parseInt(headers[this.intervalHeader], 10);\n    if (pollInterval > 0 && response.status === httpStatusCodes.OK && this.canPoll) {\n      this.timeoutID = setTimeout(() => {\n        this.makeRequest();\n      }, pollInterval);\n    }\n    this.options.successCallback(response);\n  }\n\n  makeRequest() {\n    const { resource, method, data, errorCallback, notificationCallback } = this.options;\n\n    // It's called everytime a new request is made. Useful to update the status.\n    notificationCallback(true);\n\n    return resource[method](data)\n      .then((response) => {\n        this.checkConditions(response);\n        notificationCallback(false);\n      })\n      .catch((error) => {\n        notificationCallback(false);\n        if (error.status === httpStatusCodes.ABORTED) {\n          return;\n        }\n        errorCallback(error);\n      });\n  }\n\n  /**\n   * Stops the polling recursive chain\n   * and guarantees if the timeout is already running it won't make another request by\n   * cancelling the previously established timeout.\n   */\n  stop() {\n    this.canPoll = false;\n    clearTimeout(this.timeoutID);\n  }\n\n  /**\n   * Restarts polling after it has been stoped\n   */\n  restart(options) {\n    // update data\n    if (options && options.data) {\n      this.options.data = options.data;\n    }\n\n    this.canPoll = true;\n    this.makeRequest();\n  }\n}\n",";(function (global) {\n    \"use strict\";\n\n    var lastId = -1;\n\n    // Visibility.js allow you to know, that your web page is in the background\n    // tab and thus not visible to the user. This library is wrap under\n    // Page Visibility API. It fix problems with different vendor prefixes and\n    // add high-level useful functions.\n    var self = {\n\n        // Call callback only when page become to visible for user or\n        // call it now if page is visible now or Page Visibility API\n        // doesn’t supported.\n        //\n        // Return false if API isn’t supported, true if page is already visible\n        // or listener ID (you can use it in `unbind` method) if page isn’t\n        // visible now.\n        //\n        //   Visibility.onVisible(function () {\n        //       startIntroAnimation();\n        //   });\n        onVisible: function (callback) {\n            var support = self.isSupported();\n            if ( !support || !self.hidden() ) {\n                callback();\n                return support;\n            }\n\n            var listener = self.change(function (e, state) {\n                if ( !self.hidden() ) {\n                    self.unbind(listener);\n                    callback();\n                }\n            });\n            return listener;\n        },\n\n        // Call callback when visibility will be changed. First argument for\n        // callback will be original event object, second will be visibility\n        // state name.\n        //\n        // Return listener ID to unbind listener by `unbind` method.\n        //\n        // If Page Visibility API doesn’t supported method will be return false\n        // and callback never will be called.\n        //\n        //   Visibility.change(function(e, state) {\n        //       Statistics.visibilityChange(state);\n        //   });\n        //\n        // It is just proxy to `visibilitychange` event, but use vendor prefix.\n        change: function (callback) {\n            if ( !self.isSupported() ) {\n                return false;\n            }\n            lastId += 1;\n            var number = lastId;\n            self._callbacks[number] = callback;\n            self._listen();\n            return number;\n        },\n\n        // Remove `change` listener by it ID.\n        //\n        //   var id = Visibility.change(function(e, state) {\n        //       firstChangeCallback();\n        //       Visibility.unbind(id);\n        //   });\n        unbind: function (id) {\n            delete self._callbacks[id];\n        },\n\n        // Call `callback` in any state, expect “prerender”. If current state\n        // is “prerender” it will wait until state will be changed.\n        // If Page Visibility API doesn’t supported, it will call `callback`\n        // immediately.\n        //\n        // Return false if API isn’t supported, true if page is already after\n        // prerendering or listener ID (you can use it in `unbind` method)\n        // if page is prerended now.\n        //\n        //   Visibility.afterPrerendering(function () {\n        //       Statistics.countVisitor();\n        //   });\n        afterPrerendering: function (callback) {\n            var support   = self.isSupported();\n            var prerender = 'prerender';\n\n            if ( !support || prerender != self.state() ) {\n                callback();\n                return support;\n            }\n\n            var listener = self.change(function (e, state) {\n                if ( prerender != state ) {\n                    self.unbind(listener);\n                    callback();\n                }\n            });\n            return listener;\n        },\n\n        // Return true if page now isn’t visible to user.\n        //\n        //   if ( !Visibility.hidden() ) {\n        //       VideoPlayer.play();\n        //   }\n        //\n        // It is just proxy to `document.hidden`, but use vendor prefix.\n        hidden: function () {\n            return !!(self._doc.hidden || self._doc.webkitHidden);\n        },\n\n        // Return visibility state: 'visible', 'hidden' or 'prerender'.\n        //\n        //   if ( 'prerender' == Visibility.state() ) {\n        //       Statistics.pageIsPrerendering();\n        //   }\n        //\n        // Don’t use `Visibility.state()` to detect, is page visible, because\n        // visibility states can extend in next API versions.\n        // Use more simpler and general `Visibility.hidden()` for this cases.\n        //\n        // It is just proxy to `document.visibilityState`, but use\n        // vendor prefix.\n        state: function () {\n            return self._doc.visibilityState       ||\n                   self._doc.webkitVisibilityState ||\n                   'visible';\n        },\n\n        // Return true if browser support Page Visibility API.\n        //\n        //   if ( Visibility.isSupported() ) {\n        //       Statistics.startTrackingVisibility();\n        //       Visibility.change(function(e, state)) {\n        //           Statistics.trackVisibility(state);\n        //       });\n        //   }\n        isSupported: function () {\n            return !!(self._doc.visibilityState ||\n                      self._doc.webkitVisibilityState);\n        },\n\n        // Link to document object to change it in tests.\n        _doc: document || {},\n\n        // Callbacks from `change` method, that wait visibility changes.\n        _callbacks: { },\n\n        // Listener for `visibilitychange` event.\n        _change: function(event) {\n            var state = self.state();\n\n            for ( var i in self._callbacks ) {\n                self._callbacks[i].call(self._doc, event, state);\n            }\n        },\n\n        // Set listener for `visibilitychange` event.\n        _listen: function () {\n            if ( self._init ) {\n                return;\n            }\n\n            var event = 'visibilitychange';\n            if ( self._doc.webkitVisibilityState ) {\n                event = 'webkit' + event;\n            }\n\n            var listener = function () {\n                self._change.apply(self, arguments);\n            };\n            if ( self._doc.addEventListener ) {\n                self._doc.addEventListener(event, listener);\n            } else {\n                self._doc.attachEvent(event, listener);\n            }\n            self._init = true;\n        }\n\n    };\n\n    if ( typeof(module) != 'undefined' && module.exports ) {\n        module.exports = self;\n    } else {\n        global.Visibility = self;\n    }\n\n})(this);\n",";(function (window) {\n    \"use strict\";\n\n    var lastTimer = -1;\n\n    var install = function (Visibility) {\n\n        // Run callback every `interval` milliseconds if page is visible and\n        // every `hiddenInterval` milliseconds if page is hidden.\n        //\n        //   Visibility.every(60 * 1000, 5 * 60 * 1000, function () {\n        //       checkNewMails();\n        //   });\n        //\n        // You can skip `hiddenInterval` and callback will be called only if\n        // page is visible.\n        //\n        //   Visibility.every(1000, function () {\n        //       updateCountdown();\n        //   });\n        //\n        // It is analog of `setInterval(callback, interval)` but use visibility\n        // state.\n        //\n        // It return timer ID, that you can use in `Visibility.stop(id)` to stop\n        // timer (`clearInterval` analog).\n        // Warning: timer ID is different from interval ID from `setInterval`,\n        // so don’t use it in `clearInterval`.\n        //\n        // On change state from hidden to visible timers will be execute.\n        Visibility.every = function (interval, hiddenInterval, callback) {\n            Visibility._time();\n\n            if ( !callback ) {\n                callback = hiddenInterval;\n                hiddenInterval = null;\n            }\n\n            lastTimer += 1;\n            var number = lastTimer;\n\n            Visibility._timers[number] = {\n                visible:  interval,\n                hidden:   hiddenInterval,\n                callback: callback\n            };\n            Visibility._run(number, false);\n\n            if ( Visibility.isSupported() ) {\n                Visibility._listen();\n            }\n            return number;\n        };\n\n        // Stop timer from `every` method by it ID (`every` method return it).\n        //\n        //   slideshow = Visibility.every(5 * 1000, function () {\n        //       changeSlide();\n        //   });\n        //   $('.stopSlideshow').click(function () {\n        //       Visibility.stop(slideshow);\n        //   });\n        Visibility.stop = function(id) {\n            if ( !Visibility._timers[id] ) {\n                return false;\n            }\n            Visibility._stop(id);\n            delete Visibility._timers[id];\n            return true;\n        };\n\n        // Callbacks and intervals added by `every` method.\n        Visibility._timers = { };\n\n        // Initialize variables on page loading.\n        Visibility._time = function () {\n            if ( Visibility._timed ) {\n                return;\n            }\n            Visibility._timed     = true;\n            Visibility._wasHidden = Visibility.hidden();\n\n            Visibility.change(function () {\n                Visibility._stopRun();\n                Visibility._wasHidden = Visibility.hidden();\n            });\n        };\n\n        // Try to run timer from every method by it’s ID. It will be use\n        // `interval` or `hiddenInterval` depending on visibility state.\n        // If page is hidden and `hiddenInterval` is null,\n        // it will not run timer.\n        //\n        // Argument `runNow` say, that timers must be execute now too.\n        Visibility._run = function (id, runNow) {\n            var interval,\n                timer = Visibility._timers[id];\n\n            if ( Visibility.hidden() ) {\n                if ( null === timer.hidden ) {\n                    return;\n                }\n                interval = timer.hidden;\n            } else {\n                interval = timer.visible;\n            }\n\n            var runner = function () {\n                timer.last = new Date();\n                timer.callback.call(window);\n            }\n\n            if ( runNow ) {\n                var now  = new Date();\n                var last = now - timer.last ;\n\n                if ( interval > last ) {\n                    timer.delay = setTimeout(function () {\n                        timer.id = setInterval(runner, interval);\n                        runner();\n                    }, interval - last);\n                } else {\n                    timer.id = setInterval(runner, interval);\n                    runner();\n                }\n\n            } else {\n              timer.id = setInterval(runner, interval);\n            }\n        };\n\n        // Stop timer from `every` method by it’s ID.\n        Visibility._stop = function (id) {\n            var timer = Visibility._timers[id];\n            clearInterval(timer.id);\n            clearTimeout(timer.delay);\n            delete timer.id;\n            delete timer.delay;\n        };\n\n        // Listener for `visibilitychange` event.\n        Visibility._stopRun = function (event) {\n            var isHidden  = Visibility.hidden(),\n                wasHidden = Visibility._wasHidden;\n\n            if ( (isHidden && !wasHidden) || (!isHidden && wasHidden) ) {\n                for ( var i in Visibility._timers ) {\n                    Visibility._stop(i);\n                    Visibility._run(i, !isHidden);\n                }\n            }\n        };\n\n        return Visibility;\n    }\n\n    if ( typeof(module) != 'undefined' && module.exports ) {\n        module.exports = install(require('./visibility.core'));\n    } else {\n        install(window.Visibility)\n    }\n\n})(window);\n","import $ from 'jquery';\nimport Flash from '../../flash';\nimport { handleLocationHash } from '../../lib/utils/common_utils';\nimport axios from '../../lib/utils/axios_utils';\n\nexport default class BlobViewer {\n  constructor() {\n    BlobViewer.initAuxiliaryViewer();\n    BlobViewer.initRichViewer();\n\n    this.initMainViewers();\n  }\n\n  static initAuxiliaryViewer() {\n    const auxiliaryViewer = document.querySelector('.blob-viewer[data-type=\"auxiliary\"]');\n    if (!auxiliaryViewer) return;\n\n    BlobViewer.loadViewer(auxiliaryViewer);\n  }\n\n  static initRichViewer() {\n    const viewer = document.querySelector('.blob-viewer[data-type=\"rich\"]');\n    if (!viewer || !viewer.dataset.richType) return;\n\n    const initViewer = promise => promise\n      .then(module => module.default(viewer))\n      .catch((error) => {\n        Flash('Error loading file viewer.');\n        throw error;\n      });\n\n    switch (viewer.dataset.richType) {\n      case 'balsamiq':\n        initViewer(import(/* webpackChunkName: 'balsamiq_viewer' */ '../balsamiq_viewer'));\n        break;\n      case 'notebook':\n        initViewer(import(/* webpackChunkName: 'notebook_viewer' */ '../notebook_viewer'));\n        break;\n      case 'pdf':\n        initViewer(import(/* webpackChunkName: 'pdf_viewer' */ '../pdf_viewer'));\n        break;\n      case 'sketch':\n        initViewer(import(/* webpackChunkName: 'sketch_viewer' */ '../sketch_viewer'));\n        break;\n      case 'stl':\n        initViewer(import(/* webpackChunkName: 'stl_viewer' */ '../stl_viewer'));\n        break;\n      default:\n        break;\n    }\n  }\n\n  initMainViewers() {\n    this.$fileHolder = $('.file-holder');\n    if (!this.$fileHolder.length) return;\n\n    this.switcher = document.querySelector('.js-blob-viewer-switcher');\n    this.switcherBtns = document.querySelectorAll('.js-blob-viewer-switch-btn');\n    this.copySourceBtn = document.querySelector('.js-copy-blob-source-btn');\n\n    this.simpleViewer = this.$fileHolder[0].querySelector('.blob-viewer[data-type=\"simple\"]');\n    this.richViewer = this.$fileHolder[0].querySelector('.blob-viewer[data-type=\"rich\"]');\n\n    this.initBindings();\n\n    this.switchToInitialViewer();\n  }\n\n  switchToInitialViewer() {\n    const initialViewer = this.$fileHolder[0].querySelector('.blob-viewer:not(.hidden)');\n    let initialViewerName = initialViewer.getAttribute('data-type');\n\n    if (this.switcher && location.hash.indexOf('#L') === 0) {\n      initialViewerName = 'simple';\n    }\n\n    this.switchToViewer(initialViewerName);\n  }\n\n  initBindings() {\n    if (this.switcherBtns.length) {\n      Array.from(this.switcherBtns)\n        .forEach((el) => {\n          el.addEventListener('click', this.switchViewHandler.bind(this));\n        });\n    }\n\n    if (this.copySourceBtn) {\n      this.copySourceBtn.addEventListener('click', () => {\n        if (this.copySourceBtn.classList.contains('disabled')) return this.copySourceBtn.blur();\n\n        return this.switchToViewer('simple');\n      });\n    }\n  }\n\n  switchViewHandler(e) {\n    const target = e.currentTarget;\n\n    e.preventDefault();\n\n    this.switchToViewer(target.getAttribute('data-viewer'));\n  }\n\n  toggleCopyButtonState() {\n    if (!this.copySourceBtn) return;\n\n    if (this.simpleViewer.getAttribute('data-loaded')) {\n      this.copySourceBtn.setAttribute('title', 'Copy source to clipboard');\n      this.copySourceBtn.classList.remove('disabled');\n    } else if (this.activeViewer === this.simpleViewer) {\n      this.copySourceBtn.setAttribute('title', 'Wait for the source to load to copy it to the clipboard');\n      this.copySourceBtn.classList.add('disabled');\n    } else {\n      this.copySourceBtn.setAttribute('title', 'Switch to the source to copy it to the clipboard');\n      this.copySourceBtn.classList.add('disabled');\n    }\n\n    $(this.copySourceBtn).tooltip('_fixTitle');\n  }\n\n  switchToViewer(name) {\n    const newViewer = this.$fileHolder[0].querySelector(`.blob-viewer[data-type='${name}']`);\n    if (this.activeViewer === newViewer) return;\n\n    const oldButton = document.querySelector('.js-blob-viewer-switch-btn.active');\n    const newButton = document.querySelector(`.js-blob-viewer-switch-btn[data-viewer='${name}']`);\n    const oldViewer = this.$fileHolder[0].querySelector(`.blob-viewer:not([data-type='${name}'])`);\n\n    if (oldButton) {\n      oldButton.classList.remove('active');\n    }\n\n    if (newButton) {\n      newButton.classList.add('active');\n      newButton.blur();\n    }\n\n    if (oldViewer) {\n      oldViewer.classList.add('hidden');\n    }\n\n    newViewer.classList.remove('hidden');\n\n    this.activeViewer = newViewer;\n\n    this.toggleCopyButtonState();\n\n    BlobViewer.loadViewer(newViewer)\n    .then((viewer) => {\n      $(viewer).renderGFM();\n\n      this.$fileHolder.trigger('highlight:line');\n      handleLocationHash();\n\n      this.toggleCopyButtonState();\n    })\n    .catch(() => new Flash('Error loading viewer'));\n  }\n\n  static loadViewer(viewerParam) {\n    const viewer = viewerParam;\n    const url = viewer.getAttribute('data-url');\n\n    if (!url || viewer.getAttribute('data-loaded') || viewer.getAttribute('data-loading')) {\n      return Promise.resolve(viewer);\n    }\n\n    viewer.setAttribute('data-loading', 'true');\n\n    return axios.get(url)\n      .then(({ data }) => {\n        viewer.innerHTML = data.html;\n        viewer.setAttribute('data-loaded', 'true');\n\n        return viewer;\n      });\n  }\n}\n","import $ from 'jquery';\n\nexport default {\n  bind(el) {\n    $(el).tooltip({\n      trigger: 'hover',\n    });\n  },\n\n  componentUpdated(el) {\n    $(el).tooltip('_fixTitle');\n  },\n\n  unbind(el) {\n    $(el).tooltip('dispose');\n  },\n};\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('svg',{class:[_vm.iconSizeClass, _vm.iconTestClass, _vm.cssClasses],attrs:{\"width\":_vm.width,\"height\":_vm.height,\"x\":_vm.x,\"y\":_vm.y}},[_c('use',_vm._b({},'use',{ 'xlink:href':_vm.spriteHref },false))])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<script>\n/* This is a re-usable vue component for rendering a svg sprite\n  icon\n\n  Sample configuration:\n\n  <icon\n    name=\"retry\"\n    :size=\"32\"\n    css-classes=\"top\"\n  />\n\n*/\n// only allow classes in images.scss e.g. s12\nconst validSizes = [8, 12, 16, 18, 24, 32, 48, 72];\n\nexport default {\n  props: {\n    name: {\n      type: String,\n      required: true,\n    },\n\n    size: {\n      type: Number,\n      required: false,\n      default: 16,\n      validator(value) {\n        return validSizes.includes(value);\n      },\n    },\n\n    cssClasses: {\n      type: String,\n      required: false,\n      default: '',\n    },\n\n    width: {\n      type: Number,\n      required: false,\n      default: null,\n    },\n\n    height: {\n      type: Number,\n      required: false,\n      default: null,\n    },\n\n    y: {\n      type: Number,\n      required: false,\n      default: null,\n    },\n\n    x: {\n      type: Number,\n      required: false,\n      default: null,\n    },\n  },\n\n  computed: {\n    spriteHref() {\n      return `${gon.sprite_icons}#${this.name}`;\n    },\n    iconTestClass() {\n      return `ic-${this.name}`;\n    },\n    iconSizeClass() {\n      return this.size ? `s${this.size}` : '';\n    },\n  },\n};\n</script>\n\n<template>\n  <svg\n    :class=\"[iconSizeClass, iconTestClass, cssClasses]\"\n    :width=\"width\"\n    :height=\"height\"\n    :x=\"x\"\n    :y=\"y\"\n  >\n    <use v-bind=\"{ 'xlink:href':spriteHref }\" />\n  </svg>\n</template>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js??ref--0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./icon.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js??ref--0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./icon.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./icon.vue?vue&type=template&id=4bd8f44c\"\nimport script from \"./icon.vue?vue&type=script&lang=js\"\nexport * from \"./icon.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","import $ from 'jquery';\n\nconst defaults = {\n  // Buttons that will show the `suggestionSections`\n  // has `data-fork-path`, and `data-action`\n  openButtons: [],\n  // Update the href(from `openButton` -> `data-fork-path`)\n  // whenever a `openButton` is clicked\n  forkButtons: [],\n  // Buttons to hide the `suggestionSections`\n  cancelButtons: [],\n  // Section to show/hide\n  suggestionSections: [],\n  // Pieces of text that need updating depending on the action, `edit`, `replace`, `delete`\n  actionTextPieces: [],\n};\n\nclass BlobForkSuggestion {\n  constructor(options) {\n    this.elementMap = Object.assign({}, defaults, options);\n    this.onOpenButtonClick = this.onOpenButtonClick.bind(this);\n    this.onCancelButtonClick = this.onCancelButtonClick.bind(this);\n  }\n\n  init() {\n    this.bindEvents();\n\n    return this;\n  }\n\n  bindEvents() {\n    $(this.elementMap.openButtons).on('click', this.onOpenButtonClick);\n    $(this.elementMap.cancelButtons).on('click', this.onCancelButtonClick);\n  }\n\n  showSuggestionSection(forkPath, action = 'edit') {\n    $(this.elementMap.suggestionSections).removeClass('hidden');\n    $(this.elementMap.forkButtons).attr('href', forkPath);\n    $(this.elementMap.actionTextPieces).text(action);\n  }\n\n  hideSuggestionSection() {\n    $(this.elementMap.suggestionSections).addClass('hidden');\n  }\n\n  onOpenButtonClick(e) {\n    const forkPath = $(e.currentTarget).attr('data-fork-path');\n    const action = $(e.currentTarget).attr('data-action');\n    this.showSuggestionSection(forkPath, action);\n  }\n\n  onCancelButtonClick() {\n    this.hideSuggestionSection();\n  }\n\n  destroy() {\n    $(this.elementMap.openButtons).off('click', this.onOpenButtonClick);\n    $(this.elementMap.cancelButtons).off('click', this.onCancelButtonClick);\n  }\n}\n\nexport default BlobForkSuggestion;\n","/* eslint-disable func-names, space-before-function-paren, no-var, prefer-rest-params, wrap-iife, no-use-before-define, no-underscore-dangle, no-param-reassign, prefer-template, quotes, comma-dangle, prefer-arrow-callback, consistent-return, one-var, one-var-declaration-per-line, no-else-return, max-len */\n\nimport $ from 'jquery';\n\n// LineHighlighter\n//\n// Handles single- and multi-line selection and highlight for blob views.\n//\n//\n// ### Example Markup\n//\n//   <div id=\"blob-content-holder\">\n//     <div class=\"file-content\">\n//       <div class=\"line-numbers\">\n//         <a href=\"#L1\" id=\"L1\" data-line-number=\"1\">1</a>\n//         <a href=\"#L2\" id=\"L2\" data-line-number=\"2\">2</a>\n//         <a href=\"#L3\" id=\"L3\" data-line-number=\"3\">3</a>\n//         <a href=\"#L4\" id=\"L4\" data-line-number=\"4\">4</a>\n//         <a href=\"#L5\" id=\"L5\" data-line-number=\"5\">5</a>\n//       </div>\n//       <pre class=\"code highlight\">\n//         <code>\n//           <span id=\"LC1\" class=\"line\">...</span>\n//           <span id=\"LC2\" class=\"line\">...</span>\n//           <span id=\"LC3\" class=\"line\">...</span>\n//           <span id=\"LC4\" class=\"line\">...</span>\n//           <span id=\"LC5\" class=\"line\">...</span>\n//         </code>\n//       </pre>\n//     </div>\n//   </div>\n//\n\nconst LineHighlighter = function(options = {}) {\n  options.highlightLineClass = options.highlightLineClass || 'hll';\n  options.fileHolderSelector = options.fileHolderSelector || '.file-holder';\n  options.scrollFileHolder = options.scrollFileHolder || false;\n  options.hash = options.hash || location.hash;\n\n  this.options = options;\n  this._hash = options.hash;\n  this.highlightLineClass = options.highlightLineClass;\n  this.setHash = this.setHash.bind(this);\n  this.highlightLine = this.highlightLine.bind(this);\n  this.clickHandler = this.clickHandler.bind(this);\n  this.highlightHash = this.highlightHash.bind(this);\n\n  this.bindEvents();\n  this.highlightHash();\n};\n\nLineHighlighter.prototype.bindEvents = function() {\n  const $fileHolder = $(this.options.fileHolderSelector);\n\n  $fileHolder.on('click', 'a[data-line-number]', this.clickHandler);\n  $fileHolder.on('highlight:line', this.highlightHash);\n};\n\nLineHighlighter.prototype.highlightHash = function(newHash) {\n  let range;\n  if (newHash && typeof newHash === 'string') this._hash = newHash;\n\n  this.clearHighlight();\n\n  if (this._hash !== '') {\n    range = this.hashToRange(this._hash);\n    if (range[0]) {\n      this.highlightRange(range);\n      const lineSelector = `#L${range[0]}`;\n      const scrollOptions = {\n        // Scroll to the first highlighted line on initial load\n        // Offset -50 for the sticky top bar, and another -100 for some context\n        offset: -150\n      };\n      if (this.options.scrollFileHolder) {\n        $(this.options.fileHolderSelector).scrollTo(lineSelector, scrollOptions);\n      } else {\n        $.scrollTo(lineSelector, scrollOptions);\n      }\n    }\n  }\n};\n\nLineHighlighter.prototype.clickHandler = function(event) {\n  var current, lineNumber, range;\n  event.preventDefault();\n  this.clearHighlight();\n  lineNumber = $(event.target).closest('a').data('lineNumber');\n  current = this.hashToRange(this._hash);\n  if (!(current[0] && event.shiftKey)) {\n    // If there's no current selection, or there is but Shift wasn't held,\n    // treat this like a single-line selection.\n    this.setHash(lineNumber);\n    return this.highlightLine(lineNumber);\n  } else if (event.shiftKey) {\n    if (lineNumber < current[0]) {\n      range = [lineNumber, current[0]];\n    } else {\n      range = [current[0], lineNumber];\n    }\n    this.setHash(range[0], range[1]);\n    return this.highlightRange(range);\n  }\n};\n\nLineHighlighter.prototype.clearHighlight = function() {\n  return $(\".\" + this.highlightLineClass).removeClass(this.highlightLineClass);\n};\n\n// Convert a URL hash String into line numbers\n//\n// hash - Hash String\n//\n// Examples:\n//\n//   hashToRange('#L5')    # => [5, null]\n//   hashToRange('#L5-15') # => [5, 15]\n//   hashToRange('#foo')   # => [null, null]\n//\n// Returns an Array\nLineHighlighter.prototype.hashToRange = function(hash) {\n  var first, last, matches;\n  // ?L(\\d+)(?:-(\\d+))?$/)\n  matches = hash.match(/^#?L(\\d+)(?:-(\\d+))?$/);\n  if (matches && matches.length) {\n    first = parseInt(matches[1], 10);\n    last = matches[2] ? parseInt(matches[2], 10) : null;\n    return [first, last];\n  } else {\n    return [null, null];\n  }\n};\n\n// Highlight a single line\n//\n// lineNumber - Line number to highlight\nLineHighlighter.prototype.highlightLine = function(lineNumber) {\n  return $(\"#LC\" + lineNumber).addClass(this.highlightLineClass);\n};\n\n// Highlight all lines within a range\n//\n// range - Array containing the starting and ending line numbers\nLineHighlighter.prototype.highlightRange = function(range) {\n  var i, lineNumber, ref, ref1, results;\n  if (range[1]) {\n    results = [];\n    for (lineNumber = i = ref = range[0], ref1 = range[1]; ref <= ref1 ? i <= ref1 : i >= ref1; lineNumber = ref <= ref1 ? (i += 1) : (i -= 1)) {\n      results.push(this.highlightLine(lineNumber));\n    }\n    return results;\n  } else {\n    return this.highlightLine(range[0]);\n  }\n};\n\n// Set the URL hash string\nLineHighlighter.prototype.setHash = function(firstLineNumber, lastLineNumber) {\n  var hash;\n  if (lastLineNumber) {\n    hash = \"#L\" + firstLineNumber + \"-\" + lastLineNumber;\n  } else {\n    hash = \"#L\" + firstLineNumber;\n  }\n  this._hash = hash;\n  return this.__setLocationHash__(hash);\n};\n\n// Make the actual hash change in the browser\n//\n// This method is stubbed in tests.\nLineHighlighter.prototype.__setLocationHash__ = function(value) {\n  return history.pushState({\n    url: value\n  // We're using pushState instead of assigning location.hash directly to\n  // prevent the page from scrolling on the hashchange event\n  }, document.title, value);\n};\n\nexport default LineHighlighter;\n","import { getLocationHash } from '../lib/utils/url_utility';\n\nconst lineNumberRe = /^L[0-9]+/;\n\nconst updateLineNumbersOnBlobPermalinks = (linksToUpdate) => {\n  const hash = getLocationHash();\n  if (hash && lineNumberRe.test(hash)) {\n    const hashUrlString = `#${hash}`;\n\n    [].concat(Array.prototype.slice.call(linksToUpdate)).forEach((permalinkButton) => {\n      const baseHref = permalinkButton.getAttribute('data-original-href') || (() => {\n        const href = permalinkButton.getAttribute('href');\n        permalinkButton.setAttribute('data-original-href', href);\n        return href;\n      })();\n      permalinkButton.setAttribute('href', `${baseHref}${hashUrlString}`);\n    });\n  }\n};\n\nfunction BlobLinePermalinkUpdater(blobContentHolder, lineNumberSelector, elementsToUpdate) {\n  const updateBlameAndBlobPermalinkCb = () => {\n    // Wait for the hash to update from the LineHighlighter callback\n    setTimeout(() => {\n      updateLineNumbersOnBlobPermalinks(elementsToUpdate);\n    }, 0);\n  };\n\n  blobContentHolder.addEventListener('click', (e) => {\n    if (e.target.matches(lineNumberSelector)) {\n      updateBlameAndBlobPermalinkCb();\n    }\n  });\n  updateBlameAndBlobPermalinkCb();\n}\n\nexport default BlobLinePermalinkUpdater;\n","import Mousetrap from 'mousetrap';\nimport { getLocationHash, visitUrl } from './lib/utils/url_utility';\nimport Shortcuts from './shortcuts';\n\nconst defaults = {\n  skipResetBindings: false,\n  fileBlobPermalinkUrl: null,\n};\n\nexport default class ShortcutsBlob extends Shortcuts {\n  constructor(opts) {\n    const options = Object.assign({}, defaults, opts);\n    super(options.skipResetBindings);\n    this.options = options;\n\n    Mousetrap.bind('y', this.moveToFilePermalink.bind(this));\n  }\n\n  moveToFilePermalink() {\n    if (this.options.fileBlobPermalinkUrl) {\n      const hash = getLocationHash();\n      const hashUrlString = hash ? `#${hash}` : '';\n      visitUrl(`${this.options.fileBlobPermalinkUrl}${hashUrlString}`);\n    }\n  }\n}\n","import LineHighlighter from '~/line_highlighter';\nimport BlobLinePermalinkUpdater from '~/blob/blob_line_permalink_updater';\nimport ShortcutsNavigation from '~/shortcuts_navigation';\nimport ShortcutsBlob from '~/shortcuts_blob';\nimport BlobForkSuggestion from '~/blob/blob_fork_suggestion';\nimport initBlobBundle from '~/blob_edit/blob_bundle';\n\nexport default () => {\n  new LineHighlighter(); // eslint-disable-line no-new\n\n  new BlobLinePermalinkUpdater( // eslint-disable-line no-new\n    document.querySelector('#blob-content-holder'),\n    '.diff-line-num[data-line-number]',\n    document.querySelectorAll('.js-data-file-blob-permalink-url, .js-blob-blame-link'),\n  );\n\n  const fileBlobPermalinkUrlElement = document.querySelector('.js-data-file-blob-permalink-url');\n  const fileBlobPermalinkUrl = fileBlobPermalinkUrlElement && fileBlobPermalinkUrlElement.getAttribute('href');\n\n  new ShortcutsNavigation(); // eslint-disable-line no-new\n\n  new ShortcutsBlob({ // eslint-disable-line no-new\n    skipResetBindings: true,\n    fileBlobPermalinkUrl,\n  });\n\n  new BlobForkSuggestion({ // eslint-disable-line no-new\n    openButtons: document.querySelectorAll('.js-edit-blob-link-fork-toggler'),\n    forkButtons: document.querySelectorAll('.js-fork-suggestion-button'),\n    cancelButtons: document.querySelectorAll('.js-cancel-fork-suggestion-button'),\n    suggestionSections: document.querySelectorAll('.js-file-fork-suggestion-section'),\n    actionTextPieces: document.querySelectorAll('.js-file-fork-suggestion-section-action'),\n  }).init();\n\n  initBlobBundle();\n};\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.isLoading)?_c('loading-icon',{attrs:{\"label\":\"Loading pipeline status\",\"size\":\"3\"}}):_c('a',{attrs:{\"href\":_vm.ciStatus.details_path}},[_c('ci-icon',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\"}],attrs:{\"title\":_vm.statusTitle,\"aria-label\":_vm.statusTitle,\"data-container\":\"body\",\"status\":_vm.ciStatus}})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import axios from '~/lib/utils/axios_utils';\n\nexport default class CommitPipelineService {\n  constructor(endpoint) {\n    this.endpoint = endpoint;\n  }\n\n  fetchData() {\n    return axios.get(this.endpoint);\n  }\n}\n","import mod from \"-!../../../../../../node_modules/babel-loader/lib/index.js??ref--0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./commit_pipeline_status_component.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../../node_modules/babel-loader/lib/index.js??ref--0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./commit_pipeline_status_component.vue?vue&type=script&lang=js\"","<script>\n  import Visibility from 'visibilityjs';\n  import ciIcon from '~/vue_shared/components/ci_icon.vue';\n  import loadingIcon from '~/vue_shared/components/loading_icon.vue';\n  import Poll from '~/lib/utils/poll';\n  import Flash from '~/flash';\n  import { s__, sprintf } from '~/locale';\n  import tooltip from '~/vue_shared/directives/tooltip';\n  import CommitPipelineService from '../services/commit_pipeline_service';\n\n  export default {\n    directives: {\n      tooltip,\n    },\n    components: {\n      ciIcon,\n      loadingIcon,\n    },\n    props: {\n      endpoint: {\n        type: String,\n        required: true,\n      },\n      /* This prop can be used to replace some of the `render_commit_status`\n      used across GitLab, this way we could use this vue component and add a\n      realtime status where it makes sense\n      realtime: {\n        type: Boolean,\n        required: false,\n        default: true,\n      }, */\n    },\n    data() {\n      return {\n        ciStatus: {},\n        isLoading: true,\n      };\n    },\n    computed: {\n      statusTitle() {\n        return sprintf(s__('Commits|Commit: %{commitText}'), { commitText: this.ciStatus.text });\n      },\n    },\n    mounted() {\n      this.service = new CommitPipelineService(this.endpoint);\n      this.initPolling();\n    },\n    methods: {\n      successCallback(res) {\n        const pipelines = res.data.pipelines;\n        if (pipelines.length > 0) {\n          // The pipeline entity always keeps the latest pipeline info on the `details.status`\n          this.ciStatus = pipelines[0].details.status;\n        }\n        this.isLoading = false;\n      },\n      errorCallback() {\n        this.ciStatus = {\n          text: 'not found',\n          icon: 'status_notfound',\n          group: 'notfound',\n        };\n        this.isLoading = false;\n        Flash(s__('Something went wrong on our end'));\n      },\n      initPolling() {\n        this.poll = new Poll({\n          resource: this.service,\n          method: 'fetchData',\n          successCallback: response => this.successCallback(response),\n          errorCallback: this.errorCallback,\n        });\n\n        if (!Visibility.hidden()) {\n          this.isLoading = true;\n          this.poll.makeRequest();\n        } else {\n          this.fetchPipelineCommitData();\n        }\n\n        Visibility.change(() => {\n          if (!Visibility.hidden()) {\n            this.poll.restart();\n          } else {\n            this.poll.stop();\n          }\n        });\n      },\n      fetchPipelineCommitData() {\n        this.service.fetchData()\n          .then(this.successCallback)\n          .catch(this.errorCallback);\n      },\n    },\n    destroy() {\n      this.poll.stop();\n    },\n  };\n</script>\n<template>\n  <div>\n    <loading-icon\n      label=\"Loading pipeline status\"\n      size=\"3\"\n      v-if=\"isLoading\"\n    />\n    <a\n      v-else\n      :href=\"ciStatus.details_path\"\n    >\n      <ci-icon\n        v-tooltip\n        :title=\"statusTitle\"\n        :aria-label=\"statusTitle\"\n        data-container=\"body\"\n        :status=\"ciStatus\"\n      />\n    </a>\n  </div>\n</template>\n","import { render, staticRenderFns } from \"./commit_pipeline_status_component.vue?vue&type=template&id=26b48328\"\nimport script from \"./commit_pipeline_status_component.vue?vue&type=script&lang=js\"\nexport * from \"./commit_pipeline_status_component.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","module.exports = require('./lib/visibility.timers.js')\n","/**\n * exports HTTP status codes\n */\n\nexport default {\n  ABORTED: 0,\n  NO_CONTENT: 204,\n  OK: 200,\n  MULTIPLE_CHOICES: 300,\n  BAD_REQUEST: 400,\n};\n","import Vue from 'vue';\nimport commitPipelineStatus from '~/projects/tree/components/commit_pipeline_status_component.vue';\nimport BlobViewer from '~/blob/viewer/index';\nimport initBlob from '~/pages/projects/init_blob';\n\ndocument.addEventListener('DOMContentLoaded', () => {\n  new BlobViewer(); // eslint-disable-line no-new\n  initBlob();\n\n  const CommitPipelineStatusEl = document.querySelector('.js-commit-pipeline-status');\n  const statusLink = document.querySelector('.commit-actions .ci-status-link');\n  if (statusLink) {\n    statusLink.remove();\n    // eslint-disable-next-line no-new\n    new Vue({\n      el: CommitPipelineStatusEl,\n      components: {\n        commitPipelineStatus,\n      },\n      render(createElement) {\n        return createElement('commit-pipeline-status', {\n          props: {\n            endpoint: CommitPipelineStatusEl.dataset.endpoint,\n          },\n        });\n      },\n    });\n  }\n});\n"],"sourceRoot":""}