All Downloads are FREE. Search and download functionalities are using the official Maven repository.

web-interface.assets.26.26.362ba12fc38f8705dbe5.js Maven / Gradle / Ivy

There is a newer version: 6.0.2
Show newest version
webpackJsonp([26],{259:function(module,exports,__webpack_require__){eval("/* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require(\"/var/lib/jenkins/jobs/graylog-release/workspace/target/checkout/graylog2-web-interface/node_modules/react-hot-api/modules/index.js\"), RootInstanceProvider = require(\"/var/lib/jenkins/jobs/graylog-release/workspace/target/checkout/graylog2-web-interface/node_modules/react-hot-loader/RootInstanceProvider.js\"), ReactMount = require(\"react/lib/ReactMount\"), React = require(\"react\"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () {\n\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar SourceTitle = _react2['default'].createClass({\n  displayName: 'SourceTitle',\n\n  propTypes: {\n    className: _react.PropTypes.string,\n    resetFilters: _react.PropTypes.func.isRequired,\n    resetFilterId: _react.PropTypes.string,\n    children: _react.PropTypes.oneOfType([_react.PropTypes.array, _react.PropTypes.element, _react.PropTypes.string]).isRequired\n  },\n  render: function render() {\n    return _react2['default'].createElement(\n      'h3',\n      { className: 'sources-title' },\n      this.props.children,\n      _react2['default'].createElement(\n        'span',\n        { style: { marginLeft: 10 } },\n        _react2['default'].createElement(\n          'button',\n          { id: this.props.resetFilterId, className: 'btn btn-info btn-xs ' + this.props.className,\n            onClick: this.props.resetFilters, title: 'Reset filter', style: { display: 'none' } },\n          'Reset'\n        )\n      )\n    );\n  }\n});\n\nexports['default'] = SourceTitle;\nmodule.exports = exports['default'];\n\n/* REACT HOT LOADER */ }).call(this); } finally { if (false) { (function () { var foundReactClasses = module.hot.data && module.hot.data.foundReactClasses || false; if (module.exports && module.makeHot) { var makeExportsHot = require(\"/var/lib/jenkins/jobs/graylog-release/workspace/target/checkout/graylog2-web-interface/node_modules/react-hot-loader/makeExportsHot.js\"); if (makeExportsHot(module, require(\"react\"))) { foundReactClasses = true; } var shouldAcceptModule = true && foundReactClasses; if (shouldAcceptModule) { module.hot.accept(function (err) { if (err) { console.error(\"Cannot not apply hot update to \" + \"SourceTitle.jsx\" + \": \" + err.message); } }); } } module.hot.dispose(function (data) { data.makeHot = module.makeHot; data.foundReactClasses = foundReactClasses; }); })(); } }\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/components/sources/SourceTitle.jsx\n ** module id = 259\n ** module chunks = 26\n **/\n//# sourceURL=webpack:///./src/components/sources/SourceTitle.jsx?")},901:function(module,exports,__webpack_require__){eval("/* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require(\"/var/lib/jenkins/jobs/graylog-release/workspace/target/checkout/graylog2-web-interface/node_modules/react-hot-api/modules/index.js\"), RootInstanceProvider = require(\"/var/lib/jenkins/jobs/graylog-release/workspace/target/checkout/graylog2-web-interface/node_modules/react-hot-loader/RootInstanceProvider.js\"), ReactMount = require(\"react/lib/ReactMount\"), React = require(\"react\"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () {\n\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _jquery = __webpack_require__(15);\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nvar _d3 = __webpack_require__(49);\n\nvar _d32 = _interopRequireDefault(_d3);\n\nvar _dc = __webpack_require__(75);\n\nvar _dc2 = _interopRequireDefault(_dc);\n\nvar _numeral = __webpack_require__(18);\n\nvar _numeral2 = _interopRequireDefault(_numeral);\n\nvar _SourceTitle = __webpack_require__(259);\n\nvar _SourceTitle2 = _interopRequireDefault(_SourceTitle);\n\nvar _logicSearchUniversalSearch = __webpack_require__(121);\n\nvar _logicSearchUniversalSearch2 = _interopRequireDefault(_logicSearchUniversalSearch);\n\nvar _utilStringUtils = __webpack_require__(44);\n\nvar _utilStringUtils2 = _interopRequireDefault(_utilStringUtils);\n\nvar _injectionStoreProvider = __webpack_require__(3);\n\nvar _injectionStoreProvider2 = _interopRequireDefault(_injectionStoreProvider);\n\nvar SearchStore = _injectionStoreProvider2['default'].getStore('Search');\n\nvar SourceDataTable = _react2['default'].createClass({\n  displayName: 'SourceDataTable',\n\n  propTypes: {\n    numberOfTopValues: _react.PropTypes.number.isRequired,\n    resetFilters: _react.PropTypes.func.isRequired,\n    setSearchFilter: _react.PropTypes.func.isRequired\n  },\n\n  getInitialState: function getInitialState() {\n    return {\n      numberOfSources: 100\n    };\n  },\n\n  _getAddToSearchButton: function _getAddToSearchButton(source) {\n    var addToSearchButton = document.createElement('button');\n    addToSearchButton.className = 'btn btn-xs btn-default dc-search-button';\n    addToSearchButton.title = 'Add to search query';\n    addToSearchButton.setAttribute('data-source', _utilStringUtils2['default'].unescapeHTML(source));\n    addToSearchButton.innerHTML = \"\";\n\n    return addToSearchButton.outerHTML;\n  },\n\n  renderDataTable: function renderDataTable(dimension, group, onDataFiltered) {\n    var _this = this;\n\n    var dataTableDomNode = (0, _jquery2['default'])('#dc-sources-result')[0];\n    this._dataTable = _dc2['default'].dataTable(dataTableDomNode);\n    this._dataTable.dimension(dimension).group(function (d) {\n      var topValues = group.top(_this.props.numberOfTopValues);\n      var dInTopValues = topValues.some(function (value) {\n        return d.name.localeCompare(value.key) === 0;\n      });\n      return dInTopValues ? 'Top sources' : 'Others';\n    }).size(this.state.numberOfSources).columns([function (d) {\n      return '' + d.name + '';\n    }, function (d) {\n      return d.percentage.toFixed(2) + '%';\n    }, function (d) {\n      return (0, _numeral2['default'])(d.message_count).format('0,0');\n    }, function (d) {\n      return _this._getAddToSearchButton(d.name);\n    }]).sortBy(function (d) {\n      return d.message_count;\n    }).order(_d32['default'].descending).on('renderlet', function (table) {\n      table.selectAll('.dc-table-group').classed('info', true);\n      _this._addSourceToSearchBarListener(table);\n      _this._filterSourceListener(table, onDataFiltered);\n    });\n  },\n\n  _addSourceToSearchBarListener: function _addSourceToSearchBarListener(table) {\n    table.selectAll('td.dc-table-column .dc-search-button').on('click', function () {\n      var source = (0, _jquery2['default'])(_d32['default'].event.target).closest('button').data('source');\n      SearchStore.addSearchTerm('source', source, _logicSearchUniversalSearch2['default'].orOperator());\n    });\n  },\n\n  _filterSourceListener: function _filterSourceListener(table, onDataFiltered) {\n    table.selectAll('td.dc-table-column a.dc-filter-link').on('click', function () {\n      var parentTdElement = (0, _jquery2['default'])(_d32['default'].event.target).parents('td.dc-table-column._0');\n      var datum = _d32['default'].selectAll(parentTdElement).datum();\n\n      onDataFiltered(datum.name);\n    });\n  },\n\n  redraw: function redraw() {\n    this._dataTable.redraw();\n  },\n\n  clearFilters: function clearFilters() {\n    this._dataTable.filterAll();\n  },\n\n  getFilters: function getFilters() {\n    return this._dataTable ? this._dataTable.filters() : [];\n  },\n\n  setFilter: function setFilter(filter) {\n    this._dataTable.filter(filter);\n  },\n\n  changeNumberOfSources: function changeNumberOfSources(numberOfSources) {\n    this._dataTable.size(numberOfSources).redraw();\n  },\n\n  _onNumberOfSourcesChanged: function _onNumberOfSourcesChanged(event) {\n    var _this2 = this;\n\n    this.setState({ numberOfSources: event.target.value }, function () {\n      _this2.changeNumberOfSources(_this2.state.numberOfSources);\n    });\n  },\n\n  _onFilterChanged: function _onFilterChanged(event) {\n    this.props.setSearchFilter(event.target.value);\n  },\n\n  render: function render() {\n    var resultTable = _react2['default'].createElement(\n      'table',\n      { id: 'dc-sources-result', className: 'sources table table-hover' },\n      _react2['default'].createElement(\n        'thead',\n        null,\n        _react2['default'].createElement(\n          'tr',\n          null,\n          _react2['default'].createElement(\n            'th',\n            { style: { width: '60%' } },\n            'Name'\n          ),\n          _react2['default'].createElement(\n            'th',\n            null,\n            'Percentage'\n          ),\n          _react2['default'].createElement(\n            'th',\n            null,\n            'Message count'\n          ),\n          _react2['default'].createElement('th', { style: { width: 10 } })\n        )\n      )\n    );\n\n    return _react2['default'].createElement(\n      'div',\n      null,\n      _react2['default'].createElement(\n        _SourceTitle2['default'],\n        { resetFilterId: 'dc-sources-result-reset', resetFilters: this.props.resetFilters },\n        'Selected sources'\n      ),\n      _react2['default'].createElement(\n        'div',\n        { className: 'row sources-filtering' },\n        _react2['default'].createElement(\n          'div',\n          { className: 'col-md-6' },\n          _react2['default'].createElement(\n            'div',\n            { className: 'form-inline' },\n            _react2['default'].createElement(\n              'div',\n              { className: 'form-group' },\n              _react2['default'].createElement('input', { type: 'text', className: 'form-control input-sm', onChange: this._onFilterChanged,\n                placeholder: 'Search' })\n            )\n          )\n        ),\n        _react2['default'].createElement(\n          'div',\n          { className: 'col-md-6' },\n          _react2['default'].createElement(\n            'div',\n            { className: 'form-inline text-right' },\n            _react2['default'].createElement(\n              'div',\n              { className: 'form-group' },\n              _react2['default'].createElement(\n                'label',\n                { htmlFor: 'no-results' },\n                'Show:'\n              ),\n              _react2['default'].createElement(\n                'select',\n                { id: 'no-results', className: 'form-control input-sm', onChange: this._onNumberOfSourcesChanged,\n                  value: this.state.numberOfSources },\n                _react2['default'].createElement(\n                  'option',\n                  { value: '10' },\n                  '10'\n                ),\n                _react2['default'].createElement(\n                  'option',\n                  { value: '50' },\n                  '50'\n                ),\n                _react2['default'].createElement(\n                  'option',\n                  { value: '100' },\n                  '100'\n                ),\n                _react2['default'].createElement(\n                  'option',\n                  { value: '500' },\n                  '500'\n                )\n              )\n            )\n          )\n        )\n      ),\n      resultTable\n    );\n  }\n});\n\nexports['default'] = SourceDataTable;\nmodule.exports = exports['default'];\n\n/* REACT HOT LOADER */ }).call(this); } finally { if (false) { (function () { var foundReactClasses = module.hot.data && module.hot.data.foundReactClasses || false; if (module.exports && module.makeHot) { var makeExportsHot = require(\"/var/lib/jenkins/jobs/graylog-release/workspace/target/checkout/graylog2-web-interface/node_modules/react-hot-loader/makeExportsHot.js\"); if (makeExportsHot(module, require(\"react\"))) { foundReactClasses = true; } var shouldAcceptModule = true && foundReactClasses; if (shouldAcceptModule) { module.hot.accept(function (err) { if (err) { console.error(\"Cannot not apply hot update to \" + \"SourceDataTable.jsx\" + \": \" + err.message); } }); } } module.hot.dispose(function (data) { data.makeHot = module.makeHot; data.foundReactClasses = foundReactClasses; }); })(); } }\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/components/sources/SourceDataTable.jsx\n ** module id = 901\n ** module chunks = 26\n **/\n//# sourceURL=webpack:///./src/components/sources/SourceDataTable.jsx?")},902:function(module,exports,__webpack_require__){eval("/* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require(\"/var/lib/jenkins/jobs/graylog-release/workspace/target/checkout/graylog2-web-interface/node_modules/react-hot-api/modules/index.js\"), RootInstanceProvider = require(\"/var/lib/jenkins/jobs/graylog-release/workspace/target/checkout/graylog2-web-interface/node_modules/react-hot-loader/RootInstanceProvider.js\"), ReactMount = require(\"react/lib/ReactMount\"), React = require(\"react\"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () {\n\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _jquery = __webpack_require__(15);\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\n__webpack_require__(182);\n\nvar _dc = __webpack_require__(75);\n\nvar _dc2 = _interopRequireDefault(_dc);\n\nvar _d3 = __webpack_require__(49);\n\nvar _d32 = _interopRequireDefault(_d3);\n\nvar _logicSearchUniversalSearch = __webpack_require__(121);\n\nvar _logicSearchUniversalSearch2 = _interopRequireDefault(_logicSearchUniversalSearch);\n\nvar _SourceTitle = __webpack_require__(259);\n\nvar _SourceTitle2 = _interopRequireDefault(_SourceTitle);\n\nvar _utilD3Utils = __webpack_require__(95);\n\nvar _utilD3Utils2 = _interopRequireDefault(_utilD3Utils);\n\nvar _legacyGraphHelper = __webpack_require__(120);\n\nvar _legacyGraphHelper2 = _interopRequireDefault(_legacyGraphHelper);\n\nvar SourceLineChart = _react2['default'].createClass({\n  displayName: 'SourceLineChart',\n\n  propTypes: {\n    histogramDataAvailable: _react.PropTypes.bool.isRequired,\n    reloadingHistogram: _react.PropTypes.bool.isRequired,\n    resetFilters: _react.PropTypes.func.isRequired,\n    resolution: _react.PropTypes.string.isRequired\n  },\n\n  getInitialState: function getInitialState() {\n    return {\n      lineChartWidth: '100%'\n    };\n  },\n\n  getFilters: function getFilters() {\n    return this._lineChart ? this._lineChart.filters() : [];\n  },\n\n  setFilter: function setFilter(filter) {\n    this._lineChart.filter(filter);\n  },\n\n  clearFilters: function clearFilters() {\n    this._lineChart.filterAll();\n  },\n\n  _configureWidth: function _configureWidth(lineChartWidth) {\n    this._lineChart.width(lineChartWidth);\n    this.setState({ lineChartWidth: String(lineChartWidth) + 'px' });\n  },\n\n  updateWidth: function updateWidth() {\n    var $lineChartDomNode = (0, _jquery2['default'])('#dc-sources-line-chart');\n    var lineChartWidth = $lineChartDomNode.width();\n    this._configureWidth(lineChartWidth);\n  },\n\n  renderLineChart: function renderLineChart(dimension, group, onDataFiltered) {\n    var lineChartDomNode = (0, _jquery2['default'])('#dc-sources-line-chart')[0];\n    var width = (0, _jquery2['default'])(lineChartDomNode).width();\n    (0, _jquery2['default'])(document).on('mouseup', '#dc-sources-line-chart svg', function (event) {\n      (0, _jquery2['default'])('.timerange-selector-container').effect('bounce', {\n        complete: function complete() {\n          // Submit search directly if alt key is pressed.\n          if (event.altKey) {\n            _logicSearchUniversalSearch2['default'].submit();\n          }\n        }\n      });\n    });\n    this._lineChart = _dc2['default'].lineChart(lineChartDomNode);\n    this._lineChart.height(200).margins({ left: 35, right: 20, top: 20, bottom: 20 }).dimension(dimension).group(group).x(_d32['default'].time.scale()).renderHorizontalGridLines(true)\n    // FIXME: causes those nasty exceptions when rendering data (one per x axis tick)\n    .elasticX(true).elasticY(true).transitionDuration(30).colors(_utilD3Utils2['default'].glColourPalette()).on('filtered', function (chart) {\n      _dc2['default'].events.trigger(function () {\n        var filter = chart.filter();\n        onDataFiltered(filter);\n      });\n    });\n    this._configureWidth(width);\n    this._lineChart.xAxis().ticks(_legacyGraphHelper2['default'].customTickInterval()).tickFormat(_legacyGraphHelper2['default'].customDateTimeFormat());\n    this._lineChart.yAxis().ticks(6).tickFormat(_d32['default'].format('s'));\n  },\n\n  render: function render() {\n    var loadingSpinnerStyle = {\n      display: this.props.reloadingHistogram ? 'block' : 'none',\n      width: this.state.lineChartWidth\n    };\n    var loadingSpinner = _react2['default'].createElement(\n      'div',\n      { className: 'sources overlay', style: loadingSpinnerStyle },\n      _react2['default'].createElement('i', { className: 'fa fa-spin fa-refresh spinner' })\n    );\n\n    var noDataOverlayStyle = {\n      display: this.props.histogramDataAvailable ? 'none' : 'block',\n      width: this.state.lineChartWidth\n    };\n    var noDataOverlay = _react2['default'].createElement(\n      'div',\n      { className: 'sources overlay', style: noDataOverlayStyle },\n      'Not enough data'\n    );\n    return _react2['default'].createElement(\n      'div',\n      { id: 'dc-sources-line-chart', className: 'col-md-12' },\n      _react2['default'].createElement(\n        _SourceTitle2['default'],\n        { className: 'reset', resetFilters: this.props.resetFilters },\n        'Messages per ',\n        this.props.resolution\n      ),\n      loadingSpinner,\n      noDataOverlay\n    );\n  }\n});\n\nexports['default'] = SourceLineChart;\nmodule.exports = exports['default'];\n\n/* REACT HOT LOADER */ }).call(this); } finally { if (false) { (function () { var foundReactClasses = module.hot.data && module.hot.data.foundReactClasses || false; if (module.exports && module.makeHot) { var makeExportsHot = require(\"/var/lib/jenkins/jobs/graylog-release/workspace/target/checkout/graylog2-web-interface/node_modules/react-hot-loader/makeExportsHot.js\"); if (makeExportsHot(module, require(\"react\"))) { foundReactClasses = true; } var shouldAcceptModule = true && foundReactClasses; if (shouldAcceptModule) { module.hot.accept(function (err) { if (err) { console.error(\"Cannot not apply hot update to \" + \"SourceLineChart.jsx\" + \": \" + err.message); } }); } } module.hot.dispose(function (data) { data.makeHot = module.makeHot; data.foundReactClasses = foundReactClasses; }); })(); } }\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/components/sources/SourceLineChart.jsx\n ** module id = 902\n ** module chunks = 26\n **/\n//# sourceURL=webpack:///./src/components/sources/SourceLineChart.jsx?")},903:function(module,exports,__webpack_require__){eval("/* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require(\"/var/lib/jenkins/jobs/graylog-release/workspace/target/checkout/graylog2-web-interface/node_modules/react-hot-api/modules/index.js\"), RootInstanceProvider = require(\"/var/lib/jenkins/jobs/graylog-release/workspace/target/checkout/graylog2-web-interface/node_modules/react-hot-loader/RootInstanceProvider.js\"), ReactMount = require(\"react/lib/ReactMount\"), React = require(\"react\"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () {\n\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _jquery = __webpack_require__(15);\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nvar _crossfilter = __webpack_require__(86);\n\nvar _crossfilter2 = _interopRequireDefault(_crossfilter);\n\nvar _dc = __webpack_require__(75);\n\nvar _dc2 = _interopRequireDefault(_dc);\n\nvar _qs = __webpack_require__(76);\n\nvar _qs2 = _interopRequireDefault(_qs);\n\nvar _moment = __webpack_require__(21);\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nvar _SourceDataTable = __webpack_require__(901);\n\nvar _SourceDataTable2 = _interopRequireDefault(_SourceDataTable);\n\nvar _SourcePieChart = __webpack_require__(904);\n\nvar _SourcePieChart2 = _interopRequireDefault(_SourcePieChart);\n\nvar _SourceLineChart = __webpack_require__(902);\n\nvar _SourceLineChart2 = _interopRequireDefault(_SourceLineChart);\n\nvar _componentsSupportSupportLink = __webpack_require__(72);\n\nvar _componentsSupportSupportLink2 = _interopRequireDefault(_componentsSupportSupportLink);\n\nvar _componentsCommon = __webpack_require__(5);\n\nvar _logicDatetimesDateTime = __webpack_require__(35);\n\nvar _logicDatetimesDateTime2 = _interopRequireDefault(_logicDatetimesDateTime);\n\nvar _logicSearchUniversalSearch = __webpack_require__(121);\n\nvar _logicSearchUniversalSearch2 = _interopRequireDefault(_logicSearchUniversalSearch);\n\nvar _utilEventHandlersThrottler = __webpack_require__(122);\n\nvar _utilEventHandlersThrottler2 = _interopRequireDefault(_utilEventHandlersThrottler);\n\nvar _injectionStoreProvider = __webpack_require__(3);\n\nvar _injectionStoreProvider2 = _interopRequireDefault(_injectionStoreProvider);\n\nvar _injectionActionsProvider = __webpack_require__(6);\n\nvar _injectionActionsProvider2 = _interopRequireDefault(_injectionActionsProvider);\n\nvar SourcesStore = _injectionStoreProvider2['default'].getStore('Sources');\nvar HistogramDataStore = _injectionStoreProvider2['default'].getStore('HistogramData');\nvar SearchStore = _injectionStoreProvider2['default'].getStore('Search');\n\nvar HistogramDataActions = _injectionActionsProvider2['default'].getActions('HistogramData');\n\nvar daysToSeconds = function daysToSeconds(days) {\n  return _moment2['default'].duration(days, 'days').as('seconds');\n};\nvar hoursToSeconds = function hoursToSeconds(hours) {\n  return _moment2['default'].duration(hours, 'hours').as('seconds');\n};\n\nvar DEFAULT_RANGE_IN_SECS = hoursToSeconds(1);\nvar SUPPORTED_RANGES_IN_SECS = [hoursToSeconds(1), daysToSeconds(1), daysToSeconds(7), daysToSeconds(31), daysToSeconds(365), 0];\n\nvar SCREEN_RESOLUTION = (0, _jquery2['default'])(window).width();\n\nvar SourceOverview = _react2['default'].createClass({\n  displayName: 'SourceOverview',\n\n  getInitialState: function getInitialState() {\n    this.sourcesData = (0, _crossfilter2['default'])();\n    this.filterDimension = this.sourcesData.dimension(function (d) {\n      return d.name;\n    });\n    this.nameDimension = this.sourcesData.dimension(function (d) {\n      return d.name;\n    });\n    this.nameMessageGroup = this.nameDimension.group().reduceSum(function (d) {\n      return d.message_count;\n    });\n\n    this.messageCountDimension = this.sourcesData.dimension(function (d) {\n      return d.message_count;\n    });\n\n    this.histogramData = (0, _crossfilter2['default'])();\n    this.valueDimension = this.histogramData.dimension(function (d) {\n      return new Date(d.x);\n    });\n    this.valueGroup = this.valueDimension.group().reduceSum(function (d) {\n      return d.y;\n    });\n\n    return {\n      range: null,\n      resolution: 'minute',\n      filter: '',\n      loading: false,\n      renderResultTable: true,\n      histogramDataAvailable: true,\n      reloadingHistogram: false\n    };\n  },\n\n  componentDidMount: function componentDidMount() {\n    var _this = this;\n\n    var onDataTableFiltered = function onDataTableFiltered(sourceName) {\n      _this.refs.sourcePieChart.setFilter(sourceName);\n      _this._toggleResetButtons();\n      _dc2['default'].redrawAll();\n      _this.loadHistogramData();\n    };\n\n    var onPieChartFiltered = function onPieChartFiltered() {\n      _this.loadHistogramData();\n      _this._toggleResetButtons();\n    };\n\n    var onLineChartFiltered = function onLineChartFiltered(filter) {\n      if (filter) {\n        SearchStore.changeTimeRange('absolute', {\n          from: new _logicDatetimesDateTime2['default'](filter[0]).toString(),\n          to: new _logicDatetimesDateTime2['default'](filter[1]).toString()\n        });\n      } else {\n        _this.syncRangeWithQuery();\n      }\n    };\n\n    this.refs.sourceDataTable.renderDataTable(this.messageCountDimension, this.nameMessageGroup, onDataTableFiltered);\n    this.refs.sourcePieChart.renderPieChart(this.nameDimension, this.nameMessageGroup, onPieChartFiltered);\n    this.refs.sourceLineChart.renderLineChart(this.valueDimension, this.valueGroup, onLineChartFiltered);\n    this.applyRangeParameter();\n    _dc2['default'].renderAll();\n    window.addEventListener('resize', this._resizeCallback);\n    (0, _jquery2['default'])(window).on('hashchange', this._applyRangeFromHash);\n    // register them live as we do not know if those buttons are currently in the DOM\n    (0, _jquery2['default'])(document).on('click', '.sidebar-hide', this._updateWidth);\n    (0, _jquery2['default'])(document).on('click', '.sidebar-show', this._updateWidth);\n    _logicSearchUniversalSearch2['default'].init();\n  },\n\n  componentWillUnmount: function componentWillUnmount() {\n    window.removeEventListener('resize', this._resizeCallback);\n    (0, _jquery2['default'])(window).off('hashchange', this._applyRangeFromHash);\n    (0, _jquery2['default'])(document).off('click', '.sidebar-hide', this._updateWidth);\n    (0, _jquery2['default'])(document).off('click', '.sidebar-show', this._updateWidth);\n  },\n\n  setSearchFilter: function setSearchFilter(filter) {\n    var _this2 = this;\n\n    this.setState({ filter: filter }, function () {\n      _this2._filterSources();\n      _this2.refs.sourceDataTable.redraw();\n      _this2.refs.sourcePieChart.redraw();\n    });\n  },\n\n  NUMBER_OF_TOP_VALUES: 10,\n  eventThrottler: new _utilEventHandlersThrottler2['default'](),\n\n  loadData: function loadData() {\n    this.loadSources();\n    this.loadHistogramData();\n  },\n\n  loadSources: function loadSources() {\n    var _this3 = this;\n\n    var onLoaded = function onLoaded(sources) {\n      _this3._resetSources(sources);\n      _this3.setState({ renderResultTable: _this3.sourcesData.size() !== 0, loading: false });\n      _this3._updateWidth();\n    };\n\n    SourcesStore.loadSources(this.state.range, onLoaded);\n  },\n\n  _resetSources: function _resetSources(sources) {\n    var _this4 = this;\n\n    /*\n     * http://stackoverflow.com/questions/23500546/replace-crossfilter-data-restore-dimensions-and-groups\n     * It looks like dc interacts with crossfilter to represent the graphs and apply some filters\n     * on the crossfilter dimension, but it also stores those filters internally. That means that\n     * we need to remove the dimension and graphs filters, but we only need to reapply filters to the\n     * graphs, dc will propagate that to the crossfilter dimension.\n     */\n    var pieChartFilters = this.refs.sourcePieChart.getFilters();\n    var dataTableFilters = this.refs.sourceDataTable.getFilters();\n    this.nameDimension.filterAll();\n    this.filterDimension.filterAll();\n    this.refs.sourcePieChart.clearFilters();\n    this.refs.sourceDataTable.clearFilters();\n    this.sourcesData.remove();\n    this.sourcesData.add(sources);\n\n    pieChartFilters.forEach(function (filter) {\n      return _this4.refs.sourcePieChart.setFilter(filter);\n    });\n    dataTableFilters.forEach(function (filter) {\n      return _this4.refs.sourceDataTable.setFilter(filter);\n    });\n    this._filterSources();\n\n    _dc2['default'].redrawAll();\n  },\n\n  loadHistogramData: function loadHistogramData() {\n    var _this5 = this;\n\n    var filters = undefined;\n\n    if (this.refs.sourcePieChart.getFilters().length !== 0 || this.refs.sourceDataTable.getFilters().length !== 0) {\n      filters = this.nameDimension.top(Infinity).map(function (source) {\n        return _logicSearchUniversalSearch2['default'].escape(source.name);\n      });\n    }\n\n    HistogramDataActions.load(this.state.range, filters, SCREEN_RESOLUTION).then(function (histogramData) {\n      _this5.setState({\n        resolution: histogramData.interval,\n        reloadingHistogram: false,\n        histogramDataAvailable: histogramData.histogram.length >= 2\n      });\n      _this5._resetHistogram(histogramData.histogram);\n    });\n\n    this.setState({ reloadingHistogram: true });\n  },\n\n  _resetHistogram: function _resetHistogram(histogram) {\n    var _this6 = this;\n\n    var lineChartFilters = this.refs.sourceLineChart.getFilters();\n    this.valueDimension.filterAll();\n    this.refs.sourceLineChart.clearFilters();\n    this.histogramData.remove();\n    this.histogramData.add(histogram);\n\n    lineChartFilters.forEach(function (filter) {\n      return _this6.refs.sourceLineChart.setFilter(filter);\n    });\n\n    _dc2['default'].redrawAll();\n  },\n\n  _resizeCallback: function _resizeCallback() {\n    var _this7 = this;\n\n    this.eventThrottler.throttle(function () {\n      return _this7._updateWidth();\n    });\n  },\n\n  // redirect old range format (as query parameter) to new format (deep link)\n  _redirectToRange: function _redirectToRange(range) {\n    // if range is ill formatted, we take care of it in the deep link handling\n    window.location.replace('sources#' + range);\n  },\n\n  _getRangeFromOldQueryFormat: function _getRangeFromOldQueryFormat() {\n    var query = window.location.search;\n    if (query) {\n      if (query.indexOf('?') === 0 && query.length > 1) {\n        query = query.substr(1, query.length - 1);\n        var range = _qs2['default'].parse(query).range;\n        if (range) {\n          return range;\n        }\n      }\n    }\n    return null;\n  },\n\n  _applyRangeFromHash: function _applyRangeFromHash() {\n    var range = this._getRangeFromHash();\n    this.changeRange(range, false);\n  },\n\n  applyRangeParameter: function applyRangeParameter() {\n    var range = this._getRangeFromOldQueryFormat();\n    if (range) {\n      this._redirectToRange(range);\n    } else {\n      this._applyRangeFromHash();\n    }\n  },\n\n  _getRangeFromHash: function _getRangeFromHash() {\n    var hash = window.location.hash;\n    if (hash.indexOf('#') !== 0) {\n      return DEFAULT_RANGE_IN_SECS;\n    } else {\n      var hashContent = hash.substring(1);\n      if (hash.indexOf('&') < 0) {\n        // If there is only one param in the hash, return it\n        return hashContent;\n      }\n      // If there are more than one params in the hash, return the numeric one\n      var match = hashContent.match(/(\\d+)=&/);\n      return match && match.length > 0 ? match[1] : DEFAULT_RANGE_IN_SECS;\n    }\n  },\n\n  resetSourcesFilters: function resetSourcesFilters() {\n    this.refs.sourcePieChart.clearFilters();\n    this.nameDimension.filterAll();\n    this.loadHistogramData();\n    this._toggleResetButtons();\n    _dc2['default'].redrawAll();\n  },\n\n  resetHistogramFilters: function resetHistogramFilters() {\n    this.valueDimension.filterAll();\n    this.refs.sourceLineChart.clearFilters();\n    _dc2['default'].redrawAll();\n  },\n\n  _updateWidth: function _updateWidth() {\n    SCREEN_RESOLUTION = (0, _jquery2['default'])(window).width();\n    this.refs.sourcePieChart.updateWidth();\n    this.refs.sourceLineChart.updateWidth();\n    _dc2['default'].renderAll();\n  },\n\n  syncRangeWithQuery: function syncRangeWithQuery() {\n    var rangeSelectBox = this.refs.rangeSelector;\n    if (Number(rangeSelectBox.value) === 0) {\n      SearchStore.changeTimeRange('relative', { relative: 0 });\n    } else {\n      var $selectedOptions = (0, _jquery2['default'])(':selected', rangeSelectBox);\n      var text = $selectedOptions && $selectedOptions[0] && $selectedOptions[0].text;\n      SearchStore.changeTimeRange('keyword', { keyword: text });\n    }\n  },\n\n  _toggleResetButtons: function _toggleResetButtons() {\n    // We only need to toggle the datatable reset button, dc will take care of the other reset buttons\n    if (this.refs.sourcePieChart.getFilters().length !== 0) {\n      (0, _jquery2['default'])('#dc-sources-result-reset').show();\n    } else {\n      (0, _jquery2['default'])('#dc-sources-result-reset').hide();\n    }\n  },\n\n  changeRange: function changeRange(range, keepChangeInHistory) {\n    var _this8 = this;\n\n    var effectiveRange = range;\n\n    if (effectiveRange !== undefined) {\n      effectiveRange = Number(effectiveRange);\n    }\n\n    if (typeof effectiveRange === 'undefined' || SUPPORTED_RANGES_IN_SECS.indexOf(effectiveRange) === -1) {\n      effectiveRange = DEFAULT_RANGE_IN_SECS;\n    }\n\n    if (this.state.range === effectiveRange) {\n      return;\n    }\n\n    // when range is changed the filter in line chart (corresponding to the brush) does not make any sense any more\n    this.valueDimension.filterAll();\n    this.refs.sourceLineChart.clearFilters();\n    this.syncRangeWithQuery();\n    if (keepChangeInHistory) {\n      window.location.hash = '#' + effectiveRange;\n    } else {\n      window.location.replace('#' + effectiveRange);\n    }\n    this.setState({ range: effectiveRange, histogramDataAvailable: true, loading: true }, function () {\n      return _this8.loadData();\n    });\n  },\n\n  _onRangeChanged: function _onRangeChanged(event) {\n    var value = event.target.value;\n    this.changeRange(value, true);\n  },\n\n  _filterSources: function _filterSources() {\n    var _this9 = this;\n\n    this.filterDimension.filter(function (name) {\n      return name.indexOf(_this9.state.filter) !== -1;\n    });\n  },\n\n  render: function render() {\n    var emptySources = _react2['default'].createElement(\n      'div',\n      { className: 'row content' },\n      _react2['default'].createElement(\n        'div',\n        { className: 'col-md-12' },\n        _react2['default'].createElement(\n          'div',\n          { className: 'alert alert-info' },\n          'No message sources found for this time range. Did you try using a different one?'\n        )\n      )\n    );\n\n    var resultsStyle = this.state.renderResultTable ? null : { display: 'none' };\n    var results = _react2['default'].createElement(\n      'div',\n      { style: resultsStyle },\n      _react2['default'].createElement(\n        'div',\n        { className: 'row content' },\n        _react2['default'].createElement(_SourceLineChart2['default'], { ref: 'sourceLineChart',\n          reloadingHistogram: this.state.reloadingHistogram,\n          histogramDataAvailable: this.state.histogramDataAvailable,\n          resolution: this.state.resolution,\n          resetFilters: this.resetHistogramFilters })\n      ),\n      this.state.loading ? _react2['default'].createElement(\n        'div',\n        { className: 'row content' },\n        _react2['default'].createElement(\n          'div',\n          { style: { marginLeft: 10 } },\n          _react2['default'].createElement(_componentsCommon.Spinner, null)\n        )\n      ) : null,\n      _react2['default'].createElement(\n        'div',\n        { className: 'row content', style: { display: this.state.loading ? 'none' : 'block' } },\n        _react2['default'].createElement(\n          'div',\n          { className: 'col-md-7' },\n          _react2['default'].createElement(_SourceDataTable2['default'], { ref: 'sourceDataTable', resetFilters: this.resetSourcesFilters,\n            setSearchFilter: this.setSearchFilter, numberOfTopValues: this.NUMBER_OF_TOP_VALUES })\n        ),\n        _react2['default'].createElement(\n          'div',\n          { className: 'col-md-3 col-md-offset-1' },\n          _react2['default'].createElement(_SourcePieChart2['default'], { ref: 'sourcePieChart', resetFilters: this.resetSourcesFilters,\n            numberOfTopValues: this.NUMBER_OF_TOP_VALUES })\n        )\n      )\n    );\n\n    return _react2['default'].createElement(\n      'div',\n      null,\n      _react2['default'].createElement(\n        'div',\n        { className: 'row content' },\n        _react2['default'].createElement(\n          'div',\n          { className: 'col-md-12' },\n          _react2['default'].createElement(\n            'div',\n            null,\n            _react2['default'].createElement(\n              'div',\n              { className: 'pull-right' },\n              _react2['default'].createElement(\n                'select',\n                { ref: 'rangeSelector', className: 'sources-range form-control input-sm', value: this.state.range,\n                  onChange: this._onRangeChanged },\n                _react2['default'].createElement(\n                  'option',\n                  { value: hoursToSeconds(1) },\n                  'Last Hour'\n                ),\n                _react2['default'].createElement(\n                  'option',\n                  { value: daysToSeconds(1) },\n                  'Last Day'\n                ),\n                _react2['default'].createElement(\n                  'option',\n                  { value: daysToSeconds(7) },\n                  'Last Week'\n                ),\n                _react2['default'].createElement(\n                  'option',\n                  { value: daysToSeconds(31) },\n                  'Last Month'\n                ),\n                _react2['default'].createElement(\n                  'option',\n                  { value: daysToSeconds(365) },\n                  'Last Year'\n                ),\n                _react2['default'].createElement(\n                  'option',\n                  { value: '0' },\n                  'All'\n                )\n              )\n            ),\n            _react2['default'].createElement(\n              'h1',\n              null,\n              'Sources'\n            )\n          ),\n          _react2['default'].createElement(\n            'p',\n            { className: 'description' },\n            'This is a list of all sources that sent in messages to Graylog. Note that the list is cached for a few seconds so you might have to wait a bit until a new source appears.'\n          ),\n          _react2['default'].createElement(\n            _componentsSupportSupportLink2['default'],\n            null,\n            ' Use your mouse to interact with the table and graphs on this page, and get a better ' + 'overview of the sources sending data into Graylog.'\n          )\n        )\n      ),\n      this.state.renderResultTable ? null : emptySources,\n      results\n    );\n  }\n});\n\nexports['default'] = SourceOverview;\nmodule.exports = exports['default'];\n\n/* REACT HOT LOADER */ }).call(this); } finally { if (false) { (function () { var foundReactClasses = module.hot.data && module.hot.data.foundReactClasses || false; if (module.exports && module.makeHot) { var makeExportsHot = require(\"/var/lib/jenkins/jobs/graylog-release/workspace/target/checkout/graylog2-web-interface/node_modules/react-hot-loader/makeExportsHot.js\"); if (makeExportsHot(module, require(\"react\"))) { foundReactClasses = true; } var shouldAcceptModule = true && foundReactClasses; if (shouldAcceptModule) { module.hot.accept(function (err) { if (err) { console.error(\"Cannot not apply hot update to \" + \"SourceOverview.jsx\" + \": \" + err.message); } }); } } module.hot.dispose(function (data) { data.makeHot = module.makeHot; data.foundReactClasses = foundReactClasses; }); })(); } }\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/components/sources/SourceOverview.jsx\n ** module id = 903\n ** module chunks = 26\n **/\n//# sourceURL=webpack:///./src/components/sources/SourceOverview.jsx?");
},904:function(module,exports,__webpack_require__){eval("/* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require(\"/var/lib/jenkins/jobs/graylog-release/workspace/target/checkout/graylog2-web-interface/node_modules/react-hot-api/modules/index.js\"), RootInstanceProvider = require(\"/var/lib/jenkins/jobs/graylog-release/workspace/target/checkout/graylog2-web-interface/node_modules/react-hot-loader/RootInstanceProvider.js\"), ReactMount = require(\"react/lib/ReactMount\"), React = require(\"react\"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () {\n\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _jquery = __webpack_require__(15);\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nvar _dc = __webpack_require__(75);\n\nvar _dc2 = _interopRequireDefault(_dc);\n\nvar _numeral = __webpack_require__(18);\n\nvar _numeral2 = _interopRequireDefault(_numeral);\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _SourceTitle = __webpack_require__(259);\n\nvar _SourceTitle2 = _interopRequireDefault(_SourceTitle);\n\nvar _utilD3Utils = __webpack_require__(95);\n\nvar _utilD3Utils2 = _interopRequireDefault(_utilD3Utils);\n\nvar SourcePieChart = _react2['default'].createClass({\n  displayName: 'SourcePieChart',\n\n  propTypes: {\n    resetFilters: _react.PropTypes.func.isRequired,\n    numberOfTopValues: _react.PropTypes.number.isRequired\n  },\n\n  getFilters: function getFilters() {\n    return this._pieChart ? this._pieChart.filters() : [];\n  },\n\n  setFilter: function setFilter(filter) {\n    this._pieChart.filter(filter);\n  },\n\n  clearFilters: function clearFilters() {\n    this._pieChart.filterAll();\n  },\n\n  redraw: function redraw() {\n    this._pieChart.redraw();\n  },\n\n  _configureWidth: function _configureWidth(pieChartWidth) {\n    this._pieChart.width(pieChartWidth).height(pieChartWidth).radius(pieChartWidth / 2 - 10).innerRadius(pieChartWidth / 5);\n  },\n\n  updateWidth: function updateWidth() {\n    var $pieChartDomNode = (0, _jquery2['default'])('#dc-sources-pie-chart').parent();\n    var pieChartWidth = $pieChartDomNode.width();\n    this._configureWidth(pieChartWidth);\n  },\n\n  renderPieChart: function renderPieChart(dimension, group, onDataFiltered) {\n    var pieChartDomNode = (0, _jquery2['default'])('#dc-sources-pie-chart')[0];\n    var pieChartWidth = (0, _jquery2['default'])(pieChartDomNode).width();\n    this._pieChart = _dc2['default'].pieChart(pieChartDomNode);\n    this._pieChart.renderLabel(false).dimension(dimension).group(group).colors(_utilD3Utils2['default'].glColourPalette()).slicesCap(this.props.numberOfTopValues).title(function (d) {\n      return d.key + ': ' + (0, _numeral2['default'])(d.value).format('0,0');\n    }).on('renderlet', function (chart) {\n      chart.selectAll('.pie-slice').on('click', function () {\n        onDataFiltered();\n      });\n    });\n    this._configureWidth(pieChartWidth);\n  },\n\n  render: function render() {\n    return _react2['default'].createElement(\n      'div',\n      { id: 'dc-sources-pie-chart', ref: 'sourcePieChart' },\n      _react2['default'].createElement(\n        _SourceTitle2['default'],\n        { className: 'reset', resetFilters: this.props.resetFilters },\n        'Messages per source'\n      )\n    );\n  }\n});\n\nexports['default'] = SourcePieChart;\nmodule.exports = exports['default'];\n\n/* REACT HOT LOADER */ }).call(this); } finally { if (false) { (function () { var foundReactClasses = module.hot.data && module.hot.data.foundReactClasses || false; if (module.exports && module.makeHot) { var makeExportsHot = require(\"/var/lib/jenkins/jobs/graylog-release/workspace/target/checkout/graylog2-web-interface/node_modules/react-hot-loader/makeExportsHot.js\"); if (makeExportsHot(module, require(\"react\"))) { foundReactClasses = true; } var shouldAcceptModule = true && foundReactClasses; if (shouldAcceptModule) { module.hot.accept(function (err) { if (err) { console.error(\"Cannot not apply hot update to \" + \"SourcePieChart.jsx\" + \": \" + err.message); } }); } } module.hot.dispose(function (data) { data.makeHot = module.makeHot; data.foundReactClasses = foundReactClasses; }); })(); } }\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/components/sources/SourcePieChart.jsx\n ** module id = 904\n ** module chunks = 26\n **/\n//# sourceURL=webpack:///./src/components/sources/SourcePieChart.jsx?")},992:function(module,exports,__webpack_require__){eval("/* REACT HOT LOADER */ if (false) { (function () { var ReactHotAPI = require(\"/var/lib/jenkins/jobs/graylog-release/workspace/target/checkout/graylog2-web-interface/node_modules/react-hot-api/modules/index.js\"), RootInstanceProvider = require(\"/var/lib/jenkins/jobs/graylog-release/workspace/target/checkout/graylog2-web-interface/node_modules/react-hot-loader/RootInstanceProvider.js\"), ReactMount = require(\"react/lib/ReactMount\"), React = require(\"react\"); module.makeHot = module.hot.data ? module.hot.data.makeHot : ReactHotAPI(function () { return RootInstanceProvider.getRootInstances(ReactMount); }, React); })(); } try { (function () {\n\n'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n  value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _react = __webpack_require__(1);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _componentsSourcesSourceOverview = __webpack_require__(903);\n\nvar _componentsSourcesSourceOverview2 = _interopRequireDefault(_componentsSourcesSourceOverview);\n\nvar SourcesPage = _react2['default'].createClass({\n  displayName: 'SourcesPage',\n\n  render: function render() {\n    return _react2['default'].createElement(_componentsSourcesSourceOverview2['default'], null);\n  }\n});\n\nexports['default'] = SourcesPage;\nmodule.exports = exports['default'];\n\n/* REACT HOT LOADER */ }).call(this); } finally { if (false) { (function () { var foundReactClasses = module.hot.data && module.hot.data.foundReactClasses || false; if (module.exports && module.makeHot) { var makeExportsHot = require(\"/var/lib/jenkins/jobs/graylog-release/workspace/target/checkout/graylog2-web-interface/node_modules/react-hot-loader/makeExportsHot.js\"); if (makeExportsHot(module, require(\"react\"))) { foundReactClasses = true; } var shouldAcceptModule = true && foundReactClasses; if (shouldAcceptModule) { module.hot.accept(function (err) { if (err) { console.error(\"Cannot not apply hot update to \" + \"SourcesPage.jsx\" + \": \" + err.message); } }); } } module.hot.dispose(function (data) { data.makeHot = module.makeHot; data.foundReactClasses = foundReactClasses; }); })(); } }\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/react-hot-loader!./~/babel-loader!./src/pages/SourcesPage.jsx\n ** module id = 992\n ** module chunks = 26\n **/\n//# sourceURL=webpack:///./src/pages/SourcesPage.jsx?./~/react-hot-loader!./~/babel-loader")}});




© 2015 - 2024 Weber Informatics LLC | Privacy Policy