{"version":3,"file":"static/js/application.async.landing~f00be207.5db456cb.chunk.js","mappings":"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","sources":["../webpack/bootstrap","../webpack-src:/backbone-schema/index.js","../webpack-src:/backbone-schema/src/index.es","../../../../../../../../external/@bingads-webui/viewmodel-schema","../webpack-src:/backbone-schema/src/factory.es","../webpack-src:/backbone-schema/src/validator.es","../webpack-src:/backbone-schema/src/converter.es","../../../../../../../../external/underscore","../../../../../../../../external/backbone","../../../../../../../../external/pug-runtime","../webpack-src:/bid-adjustment-opt/index.js","../webpack-src:/bid-adjustment-opt/src/view/index.es","../../../../../../../../external/knockout","../webpack-src:/bid-adjustment-opt/src/viewmodel/index.es","../webpack-src:/bid-adjustment-opt/src/mapper/index.es","../webpack-src:/bid-adjustment-opt/src/template/location-description.pug","../webpack-src:/bid-adjustment-opt/src/template/scheduling-description.pug","../webpack-src:/bid-adjustment-opt/src/template/keyword-description.pug","../webpack-src:/bid-adjustment-opt/src/config/index.es","../webpack-src:/bid-adjustment-opt/src/formatter/index.es","../webpack-src:/bid-adjustment-opt/src/template/strong.pug","../webpack-src:/bid-adjustment-opt/src/template/index.pug","../../../../../../../../external/jquery","../webpack-src:/bid-landscape/index.js","../webpack-src:/bid-landscape/src/index.es","../webpack-src:/bid-landscape/src/keyword-bidlandscape/view.es","../webpack-src:/bid-landscape/src/template/keyword-bidlandscape.pug","../webpack-src:/bid-landscape/src/template/bidlandscape-table.pug","../webpack-src:/bid-landscape/src/template/action-panel.pug","../webpack-src:/bid-landscape/src/keyword-bidlandscape/viewmodel.es","../webpack-src:/bid-landscape/src/base-viewmodel.es","../webpack-src:/bid-landscape/src/base-view.es","../../../../../../../../external/@bingads-webui/knockout-view","../../../../../../../../external/highcharts","../webpack-src:/bid-landscape/src/highcharts-config.es","../webpack-src:/bid-landscape/src/adgroup-bidlandscape/view.es","../webpack-src:/bid-landscape/src/template/adgroup-bidlandscape.pug","../webpack-src:/bid-landscape/src/adgroup-bidlandscape/viewmodel.es","../webpack-src:/bid-landscape/src/adgroup-bidlandscape/bid-mode.es","../webpack-src:/bid-landscape/src/adgroup-bidlandscape/adgroup-bid-type-names.es","../webpack-src:/bid-landscape/src/product-group/view.es","../webpack-src:/bid-landscape/src/product-group/viewmodel.es","../webpack-src:/bid-landscape/src/campaign-bidlandscape/view.es","../webpack-src:/bid-landscape/src/template/campaign-bidlandscape.pug","../webpack-src:/bid-landscape/src/template/campaign-bidlandscape-table.pug","../webpack-src:/bid-landscape/src/campaign-bidlandscape/viewmodel.es","../webpack-src:/bid-landscape/src/campaign-bidlandscape/bid-mode.es","../webpack/universalModuleDefinition","../webpack-src:/cron-formatter/index.js","../webpack-src:/cron-formatter/src/cron-formatter.js","../webpack-src:/cron-formatter/src/number-is-nan.js","../webpack-src:/cron-formatter/src/cron-parser-wrapper.js","../../../../../../../../external/cron-parser","../../../../../../../../external/@bingads-webui-universal/primitive-utilities","../../../../../../../../external/@bingads-webui/deterministic-view","../webpack-src:/date-filter/index.js","../webpack-src:/date-filter/src/date-filter/date-filter.es","../webpack-src:/date-filter/src/dropdown/date-filter-dropdown-view.es","../../../../../../../../external/@bingads-webui/date-ranges","../webpack-src:/date-filter/src/dropdown/date-filter-dropdown-template.pug","../webpack-src:/date-filter/src/panels-container/date-filter-panels-container.es","../webpack-src:/date-filter/src/panels/primary/primary-date-range-panel.es","../webpack-src:/date-filter/src/panels/base/date-range-panel-base.es","../webpack-src:/date-filter/src/panels/base/date-range-panel-base-template.pug","../webpack-src:/date-filter/src/panels/custom-date-range/custom-date-range-selection-view.es","../../../../../../../../external/@bingads-webui/date-picker","../webpack-src:/date-filter/src/panels/custom-date-range/custom-date-range-selection-view-template.pug","../webpack-src:/date-filter/src/panels/custom-time-range/custom-time-range-selection-view.es","../../../../../../../../external/@bingads-webui/time-picker","../webpack-src:/date-filter/src/panels/custom-time-range/custom-time-range-selection-view-template.pug","../webpack-src:/date-filter/src/panels/compared/compared-date-range-panel.es","../webpack-src:/date-filter/src/panels-container/date-filter-panels-container-template.pug","../webpack-src:/date-filter/src/date-filter/date-filter-template.pug","../webpack-src:/date-ranges/index.js","../webpack-src:/date-ranges/src/date-ranges-factory.es","../webpack-src:/date-ranges/src/compared-date-ranges.es","../webpack-src:/date-ranges/src/constants.es","../webpack-src:/date-ranges/src/primary-date-ranges.es"],"sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 51);\n","\r\n\r\nexport { BackboneSchema } from './src/index';\r\n","import { ViewmodelSchema } from '@bingads-webui/viewmodel-schema';\r\nimport { createBackboneModel } from './factory';\r\n\r\n/**\r\n * Viewmodel schema, generated from schema file. It provides auto generated\r\n * default value, validation rules and conversions\r\n * @param {JsonSchema} schema - an object which contains property 'properties',\r\n * @param {I18n} i18n - provide callback getString to get message\r\n * @param {Array} fields - list of fields to read from schema\r\n * @param {Object} model - raw model with default values\r\n * @param {Object} override - optional override object that changes auto-generated fields\r\n * @param {Object} baseClass - optional baseClass other than default backbone model\r\n * @returns {Object} - return default values merged from both inputs\r\n */\r\n\r\nexport function BackboneSchema(schema, i18n, fields, model = null, override = null) {\r\n const vmSchema = new ViewmodelSchema(schema, i18n, fields, override);\r\n const odataType = fields.indexOf('@odata.type') >= 0 ? `#Model.${schema.name}` : null;\r\n\r\n return createBackboneModel(vmSchema, schema, model, odataType);\r\n}\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__54__;","import Backbone from 'backbone';\r\nimport _ from 'underscore';\r\nimport { Validator } from './validator';\r\nimport { Converter } from './converter';\r\n\r\n/**\r\n * Viewmodel schema, generated from schema file. It provides auto generated\r\n * default value, validation rules and conversions\r\n * @param {Object} vmSchema - viewmodel-schema instance created from schema\r\n * @param {JsonSchema} schema - original entity schema\r\n * @param {Object} model - raw model with default values\r\n * @param {String} odataType - odatatype string used for odata calls\r\n * @returns {Object} - return default values merged from both inputs\r\n */\r\nexport function createBackboneModel(vmSchema, schema, model, odataType) {\r\n return Backbone.Model.extend({\r\n constructor: function constructor(...params) {\r\n this.validator = new Validator(vmSchema, this);\r\n this.errors = this.validator.errors;\r\n this.converter = new Converter(vmSchema, this);\r\n this.vmSchema = vmSchema;\r\n Backbone.Model.apply(this, params);\r\n },\r\n\r\n /**\r\n * get default value for backbone model.\r\n * this method is called internally by backbone to fetch initial value.\r\n * @param {Object} vmSchema - viewmodel-schema that contains default values\r\n * @param {Object} model - raw model that contains default values\r\n * @returns {Object} - return default values merged from both inputs\r\n */\r\n defaults() {\r\n return _.mapObject(vmSchema, (schemaField, name) => {\r\n if (schemaField.prop.type === 'object') {\r\n const childType = odataType ? `#Model.${schema.name}` : null;\r\n const NestedModel = createBackboneModel(_.omit(schemaField, 'prop'), schema, model, childType);\r\n\r\n return new NestedModel();\r\n }\r\n\r\n const modelValue = _.result(model, name, schemaField.default);\r\n const converted = schemaField.conversion.fromModel(modelValue);\r\n\r\n return _.isUndefined(converted) ? '' : converted;\r\n });\r\n },\r\n\r\n /**\r\n * validate field attributes for backbone model.\r\n * this method is called internally by backbone when isValid and save are called.\r\n * @param {Array} attrs - array of field attributes\r\n * @returns {Object} - error object if any, undefined if validation is successful\r\n */\r\n validate(attrs) {\r\n return this.validator.validate(attrs);\r\n },\r\n\r\n /**\r\n * parse values from raw model and fills backbone model.\r\n * this method is exposed as external api of backbone model.\r\n * @param {Object} response - the plain object to parse\r\n * @returns {undefined}\r\n */\r\n parse(response) {\r\n return this.converter.parse(response);\r\n },\r\n\r\n /**\r\n * convert backbone model to plain object.\r\n * this method is exposed as external api of backbone model.\r\n * @returns {Object} - plain object that contains converted field values\r\n */\r\n toJSON() {\r\n const json = this.converter.toJSON();\r\n\r\n if (odataType) {\r\n json['@odata.type'] = odataType;\r\n }\r\n\r\n return json;\r\n },\r\n });\r\n}\r\n","import _ from 'underscore';\r\nimport Backbone from 'backbone';\r\n\r\n/**\r\n * Validator for native field based on viewmodel-schema\r\n * @param {String} name - name of field\r\n * @param {Object} schemaField - viewmodel field property\r\n * @param {Object} viewModel - the backbone model\r\n * @param {Object} errors - error object to store field errors\r\n */\r\nclass FieldValidator {\r\n constructor(name, schemaField, viewModel, errors) {\r\n this.name = name;\r\n this.validators = schemaField.validation;\r\n this.convertors = schemaField.conversion;\r\n this.errors = errors;\r\n\r\n viewModel.on(`change:${name}`, (vm, value) => {\r\n this.validate(value);\r\n });\r\n }\r\n\r\n /**\r\n * validate field value based on viewmodel-schema.\r\n * @param {Object} value - field value\r\n * @returns {undefined}\r\n */\r\n validate(value) {\r\n this.errors.unset(this.name);\r\n\r\n const modelValue = this.convertors.toModel(value);\r\n const failedValidators = _.pick(this.validators, v => !v.isValid(modelValue));\r\n\r\n if (!_.isEmpty(failedValidators)) {\r\n this.errors.set(this.name, this.errorMessages(failedValidators, value));\r\n }\r\n }\r\n\r\n /**\r\n * Get error messages from validators for value\r\n * @param {Validator[]} validators - array of validator\r\n * @param {any} value - the value to be validated with validators\r\n * @returns {string[]} - list error message of failed validators\r\n */\r\n errorMessages(validators, value) {\r\n let errors = [];\r\n\r\n _.each(validators, (failed) => {\r\n const messages = _.isFunction(failed.message) ? failed.message(value) : failed.message;\r\n\r\n if (_.isArray(messages)) {\r\n errors = errors.concat(messages);\r\n } else {\r\n errors.push(messages);\r\n }\r\n });\r\n\r\n return errors;\r\n }\r\n}\r\n\r\n/**\r\n * Validator for nested entity field based on viewmodel-schema\r\n * @param {String} name - name of field\r\n * @param {Object} errors - error object to store field errors\r\n */\r\nclass NestedValidator {\r\n constructor(name, errors) {\r\n this.name = name;\r\n this.errors = errors;\r\n }\r\n\r\n /**\r\n * validate field value based on viewmodel-schema.\r\n * @param {Object} value - field value\r\n * @returns {undefined}\r\n */\r\n validate(value) {\r\n this.errors.unset(this.name);\r\n\r\n if (!_.isEmpty(value.errors.toJSON())) {\r\n this.errors.set(this.name, value.errors);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Validator based on viewmodel-schema\r\n * @param {Object} schemaField - viewmodel field property\r\n * @param {Object} viewModel - the backbone\r\n */\r\nexport class Validator {\r\n constructor(vmSchema, viewModel) {\r\n this.errors = new Backbone.Model();\r\n this.fieldValidators = _.mapObject(vmSchema, (field, name) => (field.prop.type === 'object' ?\r\n new NestedValidator(name, this.errors) :\r\n new FieldValidator(name, field, viewModel, this.errors)));\r\n }\r\n\r\n /**\r\n * validate field attributes for backbone model.\r\n * @param {Array} fields - array of field attributes\r\n * @returns {Object} - error object if any, undefined if validation is successful\r\n */\r\n validate(fields) {\r\n _.each(fields, (value, name) => {\r\n if (_.has(this.fieldValidators, name)) {\r\n this.fieldValidators[name].validate(value);\r\n }\r\n });\r\n\r\n const result = this.errors.toJSON();\r\n\r\n return _.isEmpty(result) ? null : result;\r\n }\r\n}\r\n","import _ from 'underscore';\r\n\r\n/**\r\n * value converter for native field\r\n * @param {String} name - name of field\r\n * @param {Object} schemaField - viewmodel field property\r\n * @param {Object} viewModel - current backbone model\r\n */\r\nclass FieldConverter {\r\n constructor(name, schemaField, viewModel) {\r\n this.name = name;\r\n this.schemaField = schemaField;\r\n this.viewModel = viewModel;\r\n }\r\n\r\n parse(field) {\r\n this.viewModel.set(this.name, this.schemaField.conversion.fromModel(field));\r\n }\r\n\r\n toJSON() {\r\n return this.schemaField.conversion.toModel(this.viewModel.get(this.name));\r\n }\r\n}\r\n\r\n/**\r\n * value converter for nested entity field\r\n * @param {String} name - name of field\r\n * @param {Object} viewModel - current backbone model\r\n */\r\nclass NestedConverter {\r\n constructor(name, viewModel) {\r\n this.name = name;\r\n this.viewModel = viewModel;\r\n }\r\n\r\n parse(field) {\r\n this.viewModel.get(this.name).parse(field);\r\n }\r\n\r\n toJSON() {\r\n return this.viewModel.get(this.name).toJSON();\r\n }\r\n}\r\n\r\n/**\r\n * value converter for backbone model. Converter is loaded from viewmodel-schema field\r\n * @param {Object} vmSchema - viewmodel-schema that contains default values\r\n * @param {Object} viewModel - current backbone model\r\n */\r\nexport class Converter {\r\n constructor(vmSchema, viewModel) {\r\n this.fieldConverters = _.mapObject(vmSchema, (schemaField, name) =>\r\n (schemaField.prop.type === 'object' ?\r\n new NestedConverter(name, viewModel) :\r\n new FieldConverter(name, schemaField, viewModel)));\r\n }\r\n\r\n /**\r\n * parse values from raw model. Overrides default backbone implementation\r\n * @param {Object} model - raw model that contains field values\r\n * @returns {undefined}\r\n */\r\n parse(model) {\r\n _.each(this.fieldConverters, fc => fc.parse(_.result(model, fc.name)));\r\n }\r\n\r\n /**\r\n * convert backbone model to raw model (plain object). Overrides default backbone implementation\r\n * @returns {Object} - returns raw model\r\n */\r\n toJSON() {\r\n return _.mapObject(this.fieldConverters, fc => fc.toJSON());\r\n }\r\n}\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__8__;","module.exports = __WEBPACK_EXTERNAL_MODULE__9__;","module.exports = __WEBPACK_EXTERNAL_MODULE__8__;","import BidAdjustmentOptView from './src/view/index';\r\n\r\n\r\nexport { BidAdjustmentOptView };\r\n","import _ from 'underscore';\r\nimport Backbone from 'backbone';\r\nimport ko from 'knockout';\r\nimport ViewModel from '../viewmodel/index';\r\nimport template from '../template/index.pug';\r\nimport { getHeaderDesc } from '../config/index';\r\n\r\nfunction getSelectedIds() {\r\n return _.map(this.viewModel.selected(), opportunity => opportunity.id);\r\n}\r\n\r\nfunction triggerEvent(event) {\r\n this.trigger(event, getSelectedIds.call(this));\r\n}\r\n\r\nfunction back() {\r\n triggerEvent.call(this, 'back');\r\n}\r\n\r\nfunction apply() {\r\n triggerEvent.call(this, 'apply');\r\n}\r\n\r\nfunction dismiss() {\r\n triggerEvent.call(this, 'dismiss');\r\n}\r\n\r\nconst biDataNames = ['conversion', 'costPerConversion', 'cost'];\r\n\r\nexport default class BidAdjustmentOptView extends Backbone.View {\r\n /**\r\n * @param {string} type - which type of your bid adjustment opt. e.g. location, scheduling\r\n * @param {Object} i18n - i18n object.\r\n * @param {Boolean} showBackBtn - display the Back button or not.\r\n * @param {Object[]} details - same as param of\r\n * {@link BidAdjustmentOptView#setRaiseOrLowerDetails}\r\n * @param {Object} campaignBIData - same as param of\r\n * {@link BidAdjustmentOptView#setRaiseOrLowerDetails}\r\n * @return {void} void\r\n */\r\n initialize({\r\n type,\r\n i18n,\r\n showBackBtn = false,\r\n details,\r\n campaignBIData,\r\n }) {\r\n this.type = type;\r\n this.i18n = i18n;\r\n this.showBackBtn = showBackBtn;\r\n this.viewModel = new ViewModel({\r\n type,\r\n i18n,\r\n details,\r\n campaignBIData,\r\n });\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click .back': back,\r\n 'click .apply': apply,\r\n 'click .dismiss': dismiss,\r\n };\r\n }\r\n\r\n render() {\r\n const model = _.extend({\r\n i18n: this.i18n,\r\n showBackBtn: this.showBackBtn,\r\n biDataNames,\r\n raiseHeader: '',\r\n raiseSubtitle: '',\r\n lowerHeader: '',\r\n lowerSubtitle: '',\r\n biDataDescriptions: {\r\n conversion: this.i18n.getString('BidAdjustmentOpt_Conversion'),\r\n costPerConversion: this.i18n.getString('BidAdjustmentOpt_CostPerConversion'),\r\n cost: this.i18n.getString('BidAdjustmentOpt_Cost'),\r\n },\r\n }, getHeaderDesc(this.type, this.i18n));\r\n\r\n this.$el.html(template(model));\r\n ko.applyBindings(this.viewModel, this.el);\r\n return this;\r\n }\r\n\r\n /**\r\n * set a list of raise/lower bid adjstument details object to the view,\r\n * causing the view to render data.\r\n * @param {Object[]} details - a list of detail object\r\n * @param {string} details[].id - opportunity id\r\n * @param {number} details[].cost - cost\r\n * @param {number} details[].costDelta - cost delta\r\n * @param {number} details[].conversion - conversion\r\n * @param {number} details[].conversionDelta - conversion delta\r\n * @param {number} details[].bidMultiplier - bid adjustment multiplier,\r\n * could be positive or negative number. Negative value means lower bid adjustment.\r\n * @param {string[]} details[].locationNames - only for location type.\r\n a list of strings representing the locations.\r\n * @param {number} details[].geoLevelId - only for location type. geo-location level id (integer),\r\n * could be 0 (country), 1 (state), 2 (metro area), 3 (city), 4 (postal code).\r\n * Values greater than 4 does not have location level name.\r\n * @param {string} details[].dateAndTime - only for scheduling type. date and time\r\n * @param {Object} campaignBIData - overview KPI object\r\n * @param {number} campaignBIData.cost - cost of the current campaign\r\n * @param {number} campaignBIData.conversion - conversions of the current campaign\r\n * @returns {BidAdjustmentOptView} - return this for chanining purposes.\r\n */\r\n setRaiseOrLowerDetails(details, campaignBIData) {\r\n this.viewModel.setRaiseOrLowerDetails(details, campaignBIData);\r\n return this;\r\n }\r\n}\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__19__;","import _ from 'underscore';\r\nimport ko from 'knockout';\r\nimport { getMapper } from '../mapper/index';\r\nimport { Formatter } from '../formatter/index';\r\nimport { isRaiseOpportunity } from '../config/index';\r\n\r\nfunction sumBy(array, iteratee = _.identity) {\r\n return _.reduce(array, (memo, item) => memo + _.iteratee(iteratee)(item), 0);\r\n}\r\n\r\nfunction getCostPerConversion(cost, conversion) {\r\n return conversion === 0 ? 0 : cost / conversion;\r\n}\r\n\r\nexport default class ViewModel {\r\n constructor({\r\n type,\r\n i18n,\r\n details,\r\n campaignBIData = { cost: 0, conversion: 0 },\r\n }) {\r\n this.type = type;\r\n this.i18n = i18n;\r\n this.formatter = new Formatter(i18n);\r\n\r\n this.all = ko.observableArray(getMapper(this.type, details, this.i18n));\r\n\r\n this.raiseBidAdjustments = ko.pureComputed(() =>\r\n _.filter(this.all(), opportunity => isRaiseOpportunity(opportunity, this.type)));\r\n\r\n this.lowerBidAdjustments = ko.pureComputed(() =>\r\n _.filter(this.all(), opportunity => !isRaiseOpportunity(opportunity, this.type)));\r\n\r\n this.selectedRaiseBidAdjustments = ko.observableArray(this.raiseBidAdjustments());\r\n this.selectedLowerBidAdjustments = ko.observableArray(this.lowerBidAdjustments());\r\n\r\n this.selected = ko.pureComputed(() =>\r\n this.selectedRaiseBidAdjustments().concat(this.selectedLowerBidAdjustments()));\r\n\r\n this.old = {};\r\n this.delta = {};\r\n this.new = {};\r\n\r\n this.campaignBIData = ko.observable(campaignBIData);\r\n\r\n _.each(['conversion', 'cost'], (biData) => {\r\n this.old[biData] = ko.pureComputed(() => this.campaignBIData()[biData]);\r\n this.delta[biData] = ko.pureComputed(() => sumBy(this.selected(), `${biData}Delta`));\r\n this.new[biData] = ko.pureComputed(() => this.old[biData]() + this.delta[biData]());\r\n });\r\n\r\n _.each(['old', 'new'], (scope) => {\r\n this[scope].costPerConversion = ko.pureComputed(() =>\r\n getCostPerConversion(this[scope].cost(), this[scope].conversion()));\r\n });\r\n\r\n this.delta.costPerConversion = ko.pureComputed(() =>\r\n this.new.costPerConversion() - this.old.costPerConversion());\r\n\r\n this.formatedRange = {};\r\n this.formatedDelta = {};\r\n this.biSymbol = {};\r\n _.each(['conversion', 'costPerConversion', 'cost'], (biData) => {\r\n const dataType = biData;\r\n\r\n this.formatedRange[biData] = ko.pureComputed(() =>\r\n this.i18n.getString('BidAdjustmentOpt_Range', {\r\n from: this.formatter.formatValueWithType(this.old[biData](), dataType),\r\n to: this.formatter.formatValueWithType(this.new[biData](), dataType),\r\n }));\r\n\r\n this.formatedDelta[biData] = ko.pureComputed(() => {\r\n const delta = this.delta[biData]();\r\n\r\n if (delta) {\r\n return delta === 0 ? '--' : this.formatter.formatValueWithType(delta, `${dataType}Delta`);\r\n }\r\n return '--';\r\n });\r\n\r\n this.biSymbol[biData] = ko.pureComputed(() => {\r\n const delta = this.delta[biData]();\r\n\r\n if (delta) {\r\n return delta > 0 ? 'opportunity-detail-asc-icon' : 'opportunity-detail-des-icon';\r\n }\r\n return '';\r\n });\r\n });\r\n }\r\n\r\n setRaiseOrLowerDetails(details, campaignBIData) {\r\n if (campaignBIData) {\r\n this.campaignBIData(campaignBIData);\r\n }\r\n this.all(getMapper(this.type, details, this.i18n));\r\n\r\n this.selectedRaiseBidAdjustments(this.raiseBidAdjustments());\r\n this.selectedLowerBidAdjustments(this.lowerBidAdjustments());\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport locationDescriptionTemplate from '../template/location-description.pug';\r\nimport schedulingDescriptionTemplate from '../template/scheduling-description.pug';\r\nimport keywordDescriptionTemplate from '../template/keyword-description.pug';\r\nimport { isRaiseOpportunity } from '../config/index';\r\n\r\nimport { Formatter } from '../formatter/index';\r\n\r\nfunction mapLocationLevel(level, i18n) {\r\n const levelNames = [\r\n i18n.getString('BidAdjustmentOpt_Country'),\r\n i18n.getString('BidAdjustmentOpt_State'),\r\n i18n.getString('BidAdjustmentOpt_MetroArea'),\r\n i18n.getString('BidAdjustmentOpt_City'),\r\n i18n.getString('BidAdjustmentOpt_PostalCode'),\r\n ];\r\n\r\n return levelNames[level];\r\n}\r\n\r\nfunction getFormatDetail(isRaise, costDelta, conversionDelta, i18n, formatter) {\r\n let i18nKey;\r\n const conversionDeltaRound = Math.round(conversionDelta);\r\n\r\n if (isRaise) {\r\n i18nKey = conversionDeltaRound === 0 ?\r\n 'BidAdjustmentOpt_RaiseBidAdjustmentDetail_With_Zero_Conversion' :\r\n 'BidAdjustmentOpt_RaiseBidAdjustmentDetail';\r\n } else {\r\n i18nKey = conversionDeltaRound === 0 ?\r\n 'BidAdjustmentOpt_LowerBidAdjustmentDetail_With_Zero_Conversion' :\r\n 'BidAdjustmentOpt_LowerBidAdjustmentDetail';\r\n }\r\n const formatedDetail = isRaise ?\r\n i18n.getString(i18nKey, {\r\n costDelta: formatter.formatCostDelta(costDelta),\r\n conversionDelta: formatter.formatConversionDelta(conversionDelta),\r\n }) :\r\n i18n.getString(i18nKey, {\r\n negatedCostDelta: formatter.formatCostDelta(costDelta),\r\n negatedConversionDelta: formatter.formatConversionDelta(conversionDelta),\r\n });\r\n\r\n return formatedDetail;\r\n}\r\n\r\nfunction getLocationMapper(details, i18n, formatter) {\r\n return _.chain(details)\r\n .filter(item => item.bidMultiplier && !_.isEmpty(item.locationNames))\r\n .map((item) => {\r\n const isRaise = isRaiseOpportunity(item, 'Location');\r\n const [firstLocationPart, ...restLocationsParts] = item.locationNames;\r\n const levelName = mapLocationLevel(item.geoLevelId, i18n);\r\n const formatedDetail = getFormatDetail(\r\n isRaise, item.costDelta,\r\n item.conversionDelta, i18n, formatter\r\n );\r\n const description = locationDescriptionTemplate({\r\n firstLocationPart: `${firstLocationPart}, `,\r\n restLocationParts: `${restLocationsParts.join(', ')} (${levelName})`,\r\n isRaise,\r\n formatedBidMultiplierRange:\r\n formatter.formatBidMultiplierRange(item.currentBidMultiplier, item.bidMultiplier),\r\n formatedDetail,\r\n });\r\n\r\n return _.extend({}, item, { description });\r\n }).value();\r\n}\r\n\r\nfunction getSchedulingMapper(details, i18n, formatter) {\r\n return _.map(details, (item) => {\r\n const isRaise = isRaiseOpportunity(item, 'Scheduling');\r\n const formatedDetail = getFormatDetail(\r\n isRaise, item.costDelta,\r\n item.conversionDelta, i18n, formatter\r\n );\r\n const description = schedulingDescriptionTemplate({\r\n isRaise,\r\n dateAndTime: formatter.formatSchedulingDatetime(item.periodType, item.fromHour, item.toHour),\r\n formatedBidMultiplierRange:\r\n formatter.formatBidMultiplierRange(item.currentBidMultiplier, item.bidMultiplier),\r\n formatedDetail,\r\n });\r\n\r\n return _.extend({}, item, { description });\r\n });\r\n}\r\n\r\nfunction getKeywordMapper(details, i18n, formatter) {\r\n return _.map(details, (item) => {\r\n const formatedDetail = i18n.getString('BidAdjustmentOpt_Keyword_BidAdjustmentDetail', {\r\n conversionRate: formatter.formatConversionRate(item.conversionRate),\r\n });\r\n\r\n const description = keywordDescriptionTemplate({\r\n isRaise: isRaiseOpportunity(item, 'Keyword'),\r\n adgroupName: item.adgroupName,\r\n keywordName: formatter.formatKeyword(item.keywordName, item.keywordMatchType),\r\n formatedDetail,\r\n formatedBidRange: formatter.formatBidRange(item.currentBid, item.suggestedBid),\r\n });\r\n\r\n return _.extend({}, item, { description });\r\n });\r\n}\r\n\r\nexport function getMapper(type, details, i18n) {\r\n const formatter = new Formatter(i18n);\r\n const map = {\r\n Location: getLocationMapper,\r\n Scheduling: getSchedulingMapper,\r\n Keyword: getKeywordMapper,\r\n };\r\n\r\n return map[type](details, i18n, formatter);\r\n}\r\n","var pug = require(\"!../../../../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (firstLocationPart, formatedBidMultiplierRange, formatedDetail, isRaise, restLocationParts) {pug_html = pug_html + \"\\u003Cstrong\\u003E\" + (pug.escape(null == (pug_interp = firstLocationPart) ? \"\" : pug_interp)) + \"\\u003C\\u002Fstrong\\u003E\" + (pug.escape(null == (pug_interp = restLocationParts) ? \"\" : pug_interp)) + \" \";\nif (isRaise) {\npug_html = pug_html + \"\\u003Cspan class=\\\"ba-opt-raise-bid\\\"\\u003E\" + (null == (pug_interp = formatedBidMultiplierRange) ? \"\" : pug_interp) + \"\\u003C\\u002Fspan\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cspan class=\\\"ba-opt-lower-bid\\\"\\u003E\" + (null == (pug_interp = formatedBidMultiplierRange) ? \"\" : pug_interp) + \"\\u003C\\u002Fspan\\u003E\";\n}\npug_html = pug_html + \"\\u003Cdiv class=\\\"ba-opt-estimation\\\"\\u003E\" + (null == (pug_interp = formatedDetail) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\";}.call(this,\"firstLocationPart\" in locals_for_with?locals_for_with.firstLocationPart:typeof firstLocationPart!==\"undefined\"?firstLocationPart:undefined,\"formatedBidMultiplierRange\" in locals_for_with?locals_for_with.formatedBidMultiplierRange:typeof formatedBidMultiplierRange!==\"undefined\"?formatedBidMultiplierRange:undefined,\"formatedDetail\" in locals_for_with?locals_for_with.formatedDetail:typeof formatedDetail!==\"undefined\"?formatedDetail:undefined,\"isRaise\" in locals_for_with?locals_for_with.isRaise:typeof isRaise!==\"undefined\"?isRaise:undefined,\"restLocationParts\" in locals_for_with?locals_for_with.restLocationParts:typeof restLocationParts!==\"undefined\"?restLocationParts:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (dateAndTime, formatedBidMultiplierRange, formatedDetail, isRaise) {pug_html = pug_html + \"\\u003Cstrong\\u003E\" + (pug.escape(null == (pug_interp = dateAndTime) ? \"\" : pug_interp)) + \"\\u003C\\u002Fstrong\\u003E \";\nif (isRaise) {\npug_html = pug_html + \"\\u003Cspan class=\\\"ba-opt-raise-bid\\\"\\u003E\" + (null == (pug_interp = formatedBidMultiplierRange) ? \"\" : pug_interp) + \"\\u003C\\u002Fspan\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cspan class=\\\"ba-opt-lower-bid\\\"\\u003E\" + (null == (pug_interp = formatedBidMultiplierRange) ? \"\" : pug_interp) + \"\\u003C\\u002Fspan\\u003E\";\n}\npug_html = pug_html + \"\\u003Cdiv class=\\\"estimation\\\"\\u003E\" + (null == (pug_interp = formatedDetail) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\";}.call(this,\"dateAndTime\" in locals_for_with?locals_for_with.dateAndTime:typeof dateAndTime!==\"undefined\"?dateAndTime:undefined,\"formatedBidMultiplierRange\" in locals_for_with?locals_for_with.formatedBidMultiplierRange:typeof formatedBidMultiplierRange!==\"undefined\"?formatedBidMultiplierRange:undefined,\"formatedDetail\" in locals_for_with?locals_for_with.formatedDetail:typeof formatedDetail!==\"undefined\"?formatedDetail:undefined,\"isRaise\" in locals_for_with?locals_for_with.isRaise:typeof isRaise!==\"undefined\"?isRaise:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (adgroupName, formatedBidRange, formatedDetail, isRaise, keywordName) {pug_html = pug_html + (\"\\u003Cstrong\\u003E\" + (pug.escape(null == (pug_interp = keywordName) ? \"\" : pug_interp)) + \"\\u003C\\u002Fstrong\\u003E\" + (pug.escape(null == (pug_interp = \", \") ? \"\" : pug_interp)) + \"\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = adgroupName) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\" + (pug.escape(null == (pug_interp = \": \") ? \"\" : pug_interp)));\nif (isRaise) {\npug_html = pug_html + \"\\u003Cspan class=\\\"ba-opt-raise-bid\\\"\\u003E\" + (null == (pug_interp = formatedBidRange) ? \"\" : pug_interp) + \"\\u003C\\u002Fspan\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cspan class=\\\"ba-opt-lower-bid\\\"\\u003E\" + (null == (pug_interp = formatedBidRange) ? \"\" : pug_interp) + \"\\u003C\\u002Fspan\\u003E\";\n}\npug_html = pug_html + \"\\u003Cdiv class=\\\"estimation\\\"\\u003E\" + (null == (pug_interp = formatedDetail) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\";}.call(this,\"adgroupName\" in locals_for_with?locals_for_with.adgroupName:typeof adgroupName!==\"undefined\"?adgroupName:undefined,\"formatedBidRange\" in locals_for_with?locals_for_with.formatedBidRange:typeof formatedBidRange!==\"undefined\"?formatedBidRange:undefined,\"formatedDetail\" in locals_for_with?locals_for_with.formatedDetail:typeof formatedDetail!==\"undefined\"?formatedDetail:undefined,\"isRaise\" in locals_for_with?locals_for_with.isRaise:typeof isRaise!==\"undefined\"?isRaise:undefined,\"keywordName\" in locals_for_with?locals_for_with.keywordName:typeof keywordName!==\"undefined\"?keywordName:undefined));;return pug_html;};\nmodule.exports = template;","export function getHeaderDesc(type, i18n) {\r\n const descriptions = {\r\n Location: {\r\n raiseHeader: i18n.getString('BidAdjustmentOpt_RaiseBidHeader'),\r\n raiseSubtitle: i18n.getString('BidAdjustmentOpt_Location_RaiseBidSubTitle'),\r\n lowerHeader: i18n.getString('BidAdjustmentOpt_LowerBidHeader'),\r\n lowerSubtitle: i18n.getString('BidAdjustmentOpt_Location_LowerBidSubTitle'),\r\n },\r\n Scheduling: {\r\n raiseHeader: i18n.getString('BidAdjustmentOpt_RaiseBidHeader'),\r\n raiseSubtitle: i18n.getString('BidAdjustmentOpt_Scheduling_RaiseBidSubTitle'),\r\n lowerHeader: i18n.getString('BidAdjustmentOpt_LowerBidHeader'),\r\n lowerSubtitle: i18n.getString('BidAdjustmentOpt_Scheduling_LowerBidSubTitle'),\r\n },\r\n Keyword: {\r\n raiseHeader: i18n.getString('BidAdjustmentOpt_Keyword_RaiseBidHeader'),\r\n raiseSubtitle: '',\r\n lowerHeader: i18n.getString('BidAdjustmentOpt_Keyword_LowerBidHeader'),\r\n lowerSubtitle: '',\r\n },\r\n };\r\n\r\n return descriptions[type];\r\n}\r\n\r\nexport function isRaiseOpportunity(opportunity, type) {\r\n switch (type) {\r\n case 'Keyword':\r\n return opportunity.suggestedBid > opportunity.currentBid;\r\n case 'Scheduling':\r\n case 'Location':\r\n return opportunity.bidMultiplier > opportunity.currentBidMultiplier;\r\n default:\r\n throw new Error(`Please implement the check code for the type: ${type}`);\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport strongTemplate from '../template/strong.pug';\r\n\r\n/* @this Fomatter */\r\nfunction formatInteger(v) {\r\n return this.i18n.formatDecimal(v, {\r\n maximumFractionDigits: 0,\r\n minimumFractionDigits: 0,\r\n });\r\n}\r\n\r\n/* @this Fomatter */\r\nfunction formatDecimal(v) {\r\n return this.i18n.formatDecimal(v, {\r\n maximumFractionDigits: 2,\r\n minimumFractionDigits: 2,\r\n });\r\n}\r\n\r\n/* @this Fomatter */\r\nfunction formatIntegerPercent(v) {\r\n return this.i18n.formatPercent(v / 100, {\r\n maximumFractionDigits: 0,\r\n minimumFractionDigits: 0,\r\n });\r\n}\r\n\r\n/* @this Fomatter */\r\nfunction formatDecimalPercent(v) {\r\n return this.i18n.formatPercent(v / 100, {\r\n maximumFractionDigits: 2,\r\n minimumFractionDigits: 2,\r\n });\r\n}\r\n\r\n/* @this Fomatter */\r\nfunction addSign(v) {\r\n return this.value > 0 ? `+${v}` : v;\r\n}\r\n\r\n/* @this Fomatter */\r\nfunction toStrong(v) {\r\n return strongTemplate({ text: v });\r\n}\r\n\r\n/* @this Fomatter */\r\nfunction format(value, functions) {\r\n this.value = value;\r\n return _.reduce(\r\n functions,\r\n (memo, func) => func.call(this, memo),\r\n value\r\n );\r\n}\r\n\r\nexport class Formatter {\r\n constructor(i18n) {\r\n this.i18n = i18n;\r\n this.value = null;\r\n }\r\n\r\n formatValueWithType(value, type) {\r\n const typeMethodMap = {\r\n conversion: this.formatConversion,\r\n conversionDelta: this.formatConversionDelta,\r\n cost: this.formatCost,\r\n costDelta: this.formatCostDelta,\r\n costPerConversion: this.formatCostPerConversion,\r\n costPerConversionDelta: this.formatCostPerConversionDelta,\r\n };\r\n\r\n if (_.isUndefined(typeMethodMap[type])) {\r\n throw new Error(`Can not format. You should add configuration of this type. The type is: ${type}`);\r\n }\r\n return typeMethodMap[type].call(this, value);\r\n }\r\n\r\n formatConversionRate(value) {\r\n return format.call(this, value, [formatDecimalPercent, toStrong]);\r\n }\r\n\r\n formatConversion(value) {\r\n return format.call(this, value, [formatInteger, toStrong]);\r\n }\r\n formatConversionDelta(value) {\r\n return format.call(this, value, [Math.abs, formatInteger, toStrong]);\r\n }\r\n\r\n formatCost(value) {\r\n return format.call(this, value, [formatDecimal, toStrong]);\r\n }\r\n formatCostDelta(value) {\r\n return format.call(this, value, [Math.abs, formatDecimal, toStrong]);\r\n }\r\n\r\n formatCostPerConversion(value) {\r\n return format.call(this, value, [formatDecimal, toStrong]);\r\n }\r\n formatCostPerConversionDelta(value) {\r\n return format.call(this, value, [Math.abs, formatDecimal, toStrong]);\r\n }\r\n\r\n formatBidMultiplierRange(fromValue, toValue) {\r\n return this.i18n.getString('BidAdjustmentOpt_Range', {\r\n from: format.call(this, fromValue, [formatIntegerPercent, addSign, toStrong]),\r\n to: format.call(this, toValue, [formatIntegerPercent, addSign, toStrong]),\r\n });\r\n }\r\n\r\n formatBidRange(fromValue, toValue) {\r\n return this.i18n.getString('BidAdjustmentOpt_Range', {\r\n from: format.call(this, fromValue, [formatDecimal, toStrong]),\r\n to: format.call(this, toValue, [formatDecimal, toStrong]),\r\n });\r\n }\r\n\r\n formatKeyword(value, type) {\r\n if (type === 'ExactMatch') {\r\n return `[${value}]`;\r\n } else if (type === 'PhraseMatch') {\r\n return `\"${value}\"`;\r\n }\r\n return value;\r\n }\r\n\r\n formatSchedulingDatetime(periodType, fromHour, toHour) {\r\n let i18nKey;\r\n const startHourStr = this.i18n.formatDate(new Date(new Date().setHours(fromHour)), {\r\n skeleton: 'h',\r\n timeZone: null,\r\n });\r\n const endHourStr = this.i18n.formatDate(new Date(new Date().setHours(toHour)), {\r\n skeleton: 'h',\r\n timeZone: null,\r\n });\r\n const model = {\r\n startHour: startHourStr,\r\n endHour: endHourStr,\r\n };\r\n\r\n if (periodType === 'Workday') {\r\n i18nKey = 'BidAdjustmentOpt_Scheduling_Datetime_Range_Workday';\r\n } else if (periodType === 'Weekend') {\r\n i18nKey = 'BidAdjustmentOpt_Scheduling_Datetime_Range_Weekend';\r\n }\r\n\r\n return this.i18n.getString(i18nKey, model);\r\n }\r\n}\r\n","var pug = require(\"!../../../../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (text) {pug_html = pug_html + \"\\u003Cstrong\\u003E\" + (pug.escape(null == (pug_interp = text) ? \"\" : pug_interp)) + \"\\u003C\\u002Fstrong\\u003E\";}.call(this,\"text\" in locals_for_with?locals_for_with.text:typeof text!==\"undefined\"?text:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (biDataDescriptions, biDataNames, i18n, lowerHeader, lowerSubtitle, raiseHeader, raiseSubtitle, showBackBtn) {pug_html = pug_html + \"\\u003Cdiv class=\\\"ba-detail\\\"\\u003E\\u003Cdiv class=\\\"container-fluid\\\"\\u003E\\u003Cdiv class=\\\"row ba-detail-overview\\\"\\u003E\";\n// iterate biDataNames\n;(function(){\n var $$obj = biDataNames;\n if ('number' == typeof $$obj.length) {\n for (var pug_index0 = 0, $$l = $$obj.length; pug_index0 < $$l; pug_index0++) {\n var biDataName = $$obj[pug_index0];\npug_html = pug_html + \"\\u003Cdiv class=\\\"ba-detail-overview-item\\\"\\u003E\\u003Cdiv class=\\\"ba-detail-desc\\\"\\u003E\" + (pug.escape(null == (pug_interp = biDataDescriptions[biDataName]) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"ba-detail-desc\\\"\\u003E\\u003Cdiv\" + (\" class=\\\"ba-detail-estvalue\\\"\"+pug.attr(\"data-bind\", 'html: formatedDelta.' + biDataName, true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (\" class=\\\"ba-symbol\\\"\"+pug.attr(\"data-bind\", \"css: biSymbol.\" + biDataName, true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (\" class=\\\"ba-detail-desc\\\"\"+pug.attr(\"data-bind\", 'html: formatedRange.' + biDataName, true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n }\n } else {\n var $$l = 0;\n for (var pug_index0 in $$obj) {\n $$l++;\n var biDataName = $$obj[pug_index0];\npug_html = pug_html + \"\\u003Cdiv class=\\\"ba-detail-overview-item\\\"\\u003E\\u003Cdiv class=\\\"ba-detail-desc\\\"\\u003E\" + (pug.escape(null == (pug_interp = biDataDescriptions[biDataName]) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"ba-detail-desc\\\"\\u003E\\u003Cdiv\" + (\" class=\\\"ba-detail-estvalue\\\"\"+pug.attr(\"data-bind\", 'html: formatedDelta.' + biDataName, true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (\" class=\\\"ba-symbol\\\"\"+pug.attr(\"data-bind\", \"css: biSymbol.\" + biDataName, true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (\" class=\\\"ba-detail-desc\\\"\"+pug.attr(\"data-bind\", 'html: formatedRange.' + biDataName, true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n }\n }\n}).call(this);\n\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"ba-detail-actions\\\"\\u003E\";\nif (showBackBtn) {\npug_html = pug_html + \"\\u003Cbutton class=\\\"btn btn-default back\\\"\\u003E\\u003Cspan class=\\\"spritedimage toolbar-icon toolbar-icon-left back_icon\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BidAdjustmentOpt_Back')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fbutton\\u003E\";\n}\npug_html = pug_html + \"\\u003Cbutton class=\\\"btn btn-hero apply\\\" data-bind=\\\"enable:selected().length>0\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BidAdjustmentOpt_Apply')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fbutton\\u003E\\u003Cbutton class=\\\"btn btn-default dismiss\\\" data-bind=\\\"enable:selected().length>0\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BidAdjustmentOpt_Dismiss')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"container-fluid\\\"\\u003E\\u003Cdiv class=\\\"row ba-opt\\\"\\u003E\\u003Cdiv class=\\\"col-xs-6\\\" data-bind=\\\"visible: raiseBidAdjustments().length > 0\\\"\\u003E\\u003Cdiv class=\\\"ba-opt-header\\\"\\u003E\" + (pug.escape(null == (pug_interp = raiseHeader) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"ba-opt-desc\\\"\\u003E\" + (pug.escape(null == (pug_interp = raiseSubtitle) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cul class=\\\"ba-opt-list\\\" data-bind=\\\"foreach: raiseBidAdjustments\\\"\\u003E\\u003Cli\\u003E\\u003Clabel class=\\\"checkbox\\\"\\u003E\\u003Cinput type=\\\"checkbox\\\" data-bind=\\\"checkedValue: $data, checked: $parent.selectedRaiseBidAdjustments, attr: {"aria-checked": !!$parent.selectedRaiseBidAdjustments()}\\\"\\u003E\\u003Cspan data-bind=\\\"html: description\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Flabel\\u003E\\u003C\\u002Fli\\u003E\\u003C\\u002Ful\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-xs-6\\\" data-bind=\\\"visible: lowerBidAdjustments().length > 0\\\"\\u003E\\u003Cdiv class=\\\"ba-opt-header\\\"\\u003E\" + (pug.escape(null == (pug_interp = lowerHeader) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"ba-opt-desc\\\"\\u003E\" + (pug.escape(null == (pug_interp = lowerSubtitle) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cul class=\\\"ba-opt-list\\\" data-bind=\\\"foreach: lowerBidAdjustments\\\"\\u003E\\u003Cli\\u003E\\u003Clabel class=\\\"checkbox\\\"\\u003E\\u003Cinput type=\\\"checkbox\\\" data-bind=\\\"checkedValue: $data, checked: $parent.selectedLowerBidAdjustments, attr: {"aria-checked": !!$parent.selectedRaiseBidAdjustments()}\\\"\\u003E\\u003Cspan data-bind=\\\"html: description\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Flabel\\u003E\\u003C\\u002Fli\\u003E\\u003C\\u002Ful\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"biDataDescriptions\" in locals_for_with?locals_for_with.biDataDescriptions:typeof biDataDescriptions!==\"undefined\"?biDataDescriptions:undefined,\"biDataNames\" in locals_for_with?locals_for_with.biDataNames:typeof biDataNames!==\"undefined\"?biDataNames:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"lowerHeader\" in locals_for_with?locals_for_with.lowerHeader:typeof lowerHeader!==\"undefined\"?lowerHeader:undefined,\"lowerSubtitle\" in locals_for_with?locals_for_with.lowerSubtitle:typeof lowerSubtitle!==\"undefined\"?lowerSubtitle:undefined,\"raiseHeader\" in locals_for_with?locals_for_with.raiseHeader:typeof raiseHeader!==\"undefined\"?raiseHeader:undefined,\"raiseSubtitle\" in locals_for_with?locals_for_with.raiseSubtitle:typeof raiseSubtitle!==\"undefined\"?raiseSubtitle:undefined,\"showBackBtn\" in locals_for_with?locals_for_with.showBackBtn:typeof showBackBtn!==\"undefined\"?showBackBtn:undefined));;return pug_html;};\nmodule.exports = template;","module.exports = __WEBPACK_EXTERNAL_MODULE__43__;","export * from './src/index';\r\n","export { KeywordBidLandscape } from './keyword-bidlandscape/view';\r\nexport { AdGroupBidLandscape } from './adgroup-bidlandscape/view';\r\nexport { ProductGroupBidLandscape } from './product-group/view';\r\nexport { CampaignBidLandscape } from './campaign-bidlandscape/view';\r\n","import _ from 'underscore';\r\nimport template from '../template/keyword-bidlandscape.pug';\r\nimport { KeywordBidLandscapeViewModel } from './viewmodel';\r\nimport { BidLandscapeBaseView } from '../base-view';\r\n\r\n/**\r\n * Keyword bid landscape\r\n * Display bid with estimated KPIs (click /impression) using both table & line chart\r\n */\r\nexport class KeywordBidLandscape extends BidLandscapeBaseView {\r\n get ViewModel() {\r\n return KeywordBidLandscapeViewModel;\r\n }\r\n\r\n get template() {\r\n return () => template(_.extend(this.viewModel, {\r\n isForVNext: this.isForVNext,\r\n }));\r\n }\r\n}\r\n","var pug = require(\"!../../../../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (bidlandscapeId, entityName, entityType, i18n) {pug_mixins[\"fwLink\"] = pug_interp = function(linkId, displayText, ariaLabelContext){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\nvar ariaLabel= ariaLabelContext || '';\npug_html = pug_html + \"\\u003Ca\" + (\" class=\\\"fwLink\\\"\"+pug.attr(\"href\", `https://go.microsoft.com/fwlink/?linkid=${linkId}`, true, true)+\" target=\\\"_blank\\\"\"+pug.attr(\"aria-label\", `$(ariaLabel) ${displayText}`, true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = displayText) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\";\n};\npug_html = pug_html + (\"\\u003Cdiv\" + (\" class=\\\"bid-landscape\\\"\"+pug.attr(\"id\", bidlandscapeId, true, true)+pug.attr(\"data-type\", entityType, true, true)+\" data-bind=\\\"css :{"bidlandscape-smiple-version":inSimpleMode() && hasData(), "panel-form modal-body bid-landscape-normal-version":!inSimpleMode()&& hasData()}\\\"\") + \"\\u003E\\u003Cdiv data-bind=\\\"visible: !inSimpleMode() && hasData()\\\"\\u003E\\u003Cdiv class=\\\"bidlandscape-title type-bold col-xs-9 padding-zero\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BidLandscape_Title').replace('{0}', entityName)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (\" class=\\\"iconba iconba-Cancel close closeimage clickable\\\"\"+\" onclick=\\\"$(document).click()\\\" tabindex=\\\"0\\\" role=\\\"button\\\"\"+pug.attr(\"aria-label\", i18n.getString('Close'), true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"clear bidlandscape-subTitle\\\" data-bind=\\\"visible: hasData()\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Bidlandscape_SubTitleText')) ? \"\" : pug_interp)));\npug_mixins[\"fwLink\"]('863840', i18n.getString('LearnMore'), i18n.getString('Bidlandscape_SubTitleText'));\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"bidlandscape-data-panel\\\" data-bind=\\\"visible:hasData()\\\"\\u003E\\u003Cdiv class=\\\"bidlandscape-left-div pull-left col-xs-7 bid-landscape__table\\\"\\u003E\" + (null == (pug_interp = require(\"./bidlandscape-table.pug\").call(this, locals)) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"bidlandscape-right-div padding-zero col-xs-4 pull-left bid-landscape__chart\\\"\\u003E\\u003Cdiv class=\\\"bidlandscape-chart\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"bidlandscape-nodata-panel reasonDiv radius5px\\\" data-bind=\\\"visible:!hasData(), css:{'display-inline-block':!hasData()}\\\"\\u003E\\u003Cdiv\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Keyword_NoBidLandscapeText')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\" + (null == (pug_interp = require(\"./action-panel.pug\").call(this, locals)) ? \"\" : pug_interp) + \"\\u003Cdiv class=\\\"clear bidlandscape-footer type-normal\\\" data-bind=\\\"visible: !inSimpleMode() && hasData(), html: footerText\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"bidlandscapeId\" in locals_for_with?locals_for_with.bidlandscapeId:typeof bidlandscapeId!==\"undefined\"?bidlandscapeId:undefined,\"entityName\" in locals_for_with?locals_for_with.entityName:typeof entityName!==\"undefined\"?entityName:undefined,\"entityType\" in locals_for_with?locals_for_with.entityType:typeof entityType!==\"undefined\"?entityType:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (bidType, bidlandscapeId, campaignType, entityType, i18n, radionName) {var noProductPartition = entityType !== 'product-partition'\nvar radioName = bidlandscapeId + '_radio'\nvar isNotAudienceCampaign = campaignType !== 'Audience'\npug_html = pug_html + \"\\u003Ctable class=\\\"bidlandscape-detail-table table-full text-right vertical-align-middle\\\" data-bind=\\\"css: {"table-hover": isForVNext === true}\\\"\\u003E\\u003Ccolgroup\\u003E\\u003Ccol class=\\\"bid-landscape__col bid-landscape__col--radio\\\"\\u003E\\u003Ccol class=\\\"bid-landscape__col bid-landscape__col--bid\\\"\\u003E\\u003C!-- ko if: $root.isClickGraph()--\\u003E\\u003Ccol class=\\\"bid-landscape__col bid-landscape__col--bi\\\"\\u003E\\u003Ccol class=\\\"bid-landscape__col bid-landscape__col--bi\\\"\\u003E\\u003C!-- \\u002Fko--\\u003E\\u003C!-- ko if: $root.needCostColumn()--\\u003E\\u003Ccol class=\\\"bid-landscape__col bid-landscape__col--bi\\\"\\u003E\\u003C!-- \\u002Fko--\\u003E\\u003Ccol class=\\\"bid-landscape__col bid-landscape__col--bi\\\"\\u003E\";\nif (noProductPartition && isNotAudienceCampaign) {\npug_html = pug_html + \"\\u003Ccol class=\\\"bid-landscape__col bid-landscape__col--bi\\\"\\u003E\";\n}\npug_html = pug_html + \"\\u003Ccol class=\\\"bid-landscape__col bid-landscape__col--extra\\\"\\u003E\\u003C\\u002Fcolgroup\\u003E\\u003Cthead\\u003E\\u003Ctr class=\\\"bidlandscape-table-row\\\"\\u003E\\u003Cth class=\\\"text-right bidlandscape-firstColumn\\\"\\u003E\\u003C\\u002Fth\\u003E\\u003Cth class=\\\"text-left\\\"\\u003E\\u003Clabel class=\\\"bidlandscape-label bold\\\" data-bind=\\\"text: tableBidText()\\\"\\u003E\\u003C\\u002Flabel\\u003E\\u003C\\u002Fth\\u003E\\u003C!-- ko if: $root.isClickGraph()--\\u003E\\u003Cth class=\\\"text-right bold\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('KPI_EstCost')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fth\\u003E\\u003Cth class=\\\"text-right bold\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('KPI_EstClick')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fth\\u003E\\u003C!-- \\u002Fko--\\u003E\\u003C!-- ko if: $root.needCostColumn()--\\u003E\\u003Cth class=\\\"text-right bold\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('KPI_EstCost')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fth\\u003E\\u003C!-- \\u002Fko--\\u003E\";\nif (entityType === 'adgroup' && bidType === 'CPV') {\npug_html = pug_html + \"\\u003Cth class=\\\"text-right bold\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('KPI_EstView')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fth\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cth class=\\\"text-right bold\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('KPI_EstImp')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fth\\u003E\";\n}\nif (noProductPartition && isNotAudienceCampaign) {\npug_html = pug_html + \"\\u003Cth class=\\\"text-right bold\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('KPI_EstMlImp')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fth\\u003E\";\n}\npug_html = pug_html + \"\\u003Cth\\u003E\\u003C\\u002Fth\\u003E\\u003C\\u002Ftr\\u003E\\u003C\\u002Fthead\\u003E\\u003Ctbody data-bind=\\\"foreach: dataArray()\\\"\\u003E\\u003C!-- ko if: $index() === 0 && $root.entityType === 'adgroup' && $root.clearBid() && $root.customBidCurrentPoint() && Object.keys($root.customBidCurrentPoint()).length \\u003E 0--\\u003E\\u003Ctr class=\\\"bidlandscape-table-row cursor-pointer col-xs-12\\\" onclick=\\\"return false;\\\"\\u003E\\u003Ctd\\u003E\\u003C\\u002Ftd\\u003E\\u003Ctd class=\\\"text-left\\\"\\u003E\\u003Clabel class=\\\"bidlandscape-label vertical-align-middle type-normal\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Current')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Ftd\\u003E\\u003C!-- ko if: $root.isClickGraph()--\\u003E\\u003Ctd data-bind=\\\"text:$root.customBidCurrentPoint().costStr\\\"\\u003E\\u003C\\u002Ftd\\u003E\\u003Ctd data-bind=\\\"text:$root.customBidCurrentPoint().clicksStr\\\"\\u003E\\u003C\\u002Ftd\\u003E\\u003C!-- \\u002Fko--\\u003E\\u003C!-- ko if: $root.needCostColumn()--\\u003E\\u003Ctd data-bind=\\\"text:$root.customBidCurrentPoint().costStr\\\"\\u003E\\u003C\\u002Ftd\\u003E\\u003C!-- \\u002Fko--\\u003E\";\nif (entityType === 'adgroup' && bidType === 'CPV') {\npug_html = pug_html + \"\\u003Ctd data-bind=\\\"text: $root.customBidCurrentPoint().viewStr\\\"\\u003E\\u003C\\u002Ftd\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Ctd data-bind=\\\"text: $root.customBidCurrentPoint().impressionsStr\\\"\\u003E\\u003C\\u002Ftd\\u003E\";\n}\nif (noProductPartition && isNotAudienceCampaign) {\npug_html = pug_html + \"\\u003Ctd data-bind=\\\"text:$root.customBidCurrentPoint().mlImpressionsStr\\\"\\u003E\\u003C\\u002Ftd\\u003E\";\n}\npug_html = pug_html + \"\\u003Ctd\\u003E\\u003C\\u002Ftd\\u003E\\u003C\\u002Ftr\\u003E\\u003C!-- \\u002Fko--\\u003E\\u003Ctr class=\\\"bidlandscape-table-row cursor-pointer col-xs-12\\\" data-bind=\\\"click: $root.updatedSelectedIndex.bind($data, $index()), css:{'bid-current-row':$index() == $root.currentSelectedId()}\\\"\\u003E\\u003Ctd\\u003E\\u003Cinput\" + (\" class=\\\"bidlandscape-firstColumn cursor-pointer bid-landscape__radio\\\"\"+\" type=\\\"radio\\\"\"+pug.attr(\"name\", radionName, true, true)+\" id=\\\"radioName_$index()\\\" data-bind=\\\"value: $index(), checked: $root.currentSelectedId(), attr:{"aria-label": "Bid "+bidStr}\\\"\") + \"\\u003E\\u003C\\u002Ftd\\u003E\\u003Ctd class=\\\"text-left\\\"\\u003E\\u003Clabel\" + (\" class=\\\"bidlandscape-label vertical-align-middle type-normal\\\"\"+pug.attr(\"id\", radioName + \"_$index()\", true, true)+\" data-bind=\\\"text: bidStr + comment\\\"\") + \"\\u003E\\u003C\\u002Flabel\\u003E\\u003C\\u002Ftd\\u003E\\u003C!-- ko if: $root.isClickGraph()--\\u003E\\u003Ctd data-bind=\\\"text: costStr\\\"\\u003E\\u003C\\u002Ftd\\u003E\\u003Ctd data-bind=\\\"text: clicksStr\\\"\\u003E\\u003C\\u002Ftd\\u003E\\u003C!-- \\u002Fko--\\u003E\\u003C!-- ko if: $root.needCostColumn()--\\u003E\\u003Ctd data-bind=\\\"text: costStr\\\"\\u003E\\u003C\\u002Ftd\\u003E\\u003C!-- \\u002Fko--\\u003E\";\nif (entityType === 'adgroup' && bidType === 'CPV') {\npug_html = pug_html + \"\\u003Ctd data-bind=\\\"text: viewStr\\\"\\u003E\\u003C\\u002Ftd\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Ctd data-bind=\\\"text: impressionsStr\\\"\\u003E\\u003C\\u002Ftd\\u003E\";\n}\nif (noProductPartition && isNotAudienceCampaign) {\npug_html = pug_html + \"\\u003Ctd data-bind=\\\"text: mlImpressionsStr\\\"\\u003E\\u003C\\u002Ftd\\u003E\";\n}\npug_html = pug_html + \"\\u003Ctd\\u003E\\u003C\\u002Ftd\\u003E\\u003C\\u002Ftr\\u003E\\u003C\\u002Ftbody\\u003E\\u003Ctr class=\\\"bidlandscape-table-row cursor-pointer col-xs-12\\\" data-bind=\\\"click: $root.updatedSelectedIndex.bind($data, landscapePointsLength()),css:{'bid-current-row':landscapePointsLength() == currentSelectedId()}\\\"\\u003E\\u003Ctd\\u003E\\u003Cinput\" + (\" class=\\\"cursor-pointer bid-landscape__radio\\\"\"+\" type=\\\"radio\\\"\"+pug.attr(\"name\", radionName, true, true)+\" data-bind=\\\"value:landscapePointsLength(), checked:currentSelectedId()\\\"\") + \"\\u003E\\u003C\\u002Ftd\\u003E\\u003Ctd class=\\\"bid-landscape__td--input\\\" data-bind=\\\"attr:{colspan:dataArray().length+1}\\\"\\u003E\\u003Cdiv class=\\\"bid-landscape__input-group\\\"\\u003E\\u003Clabel class=\\\"bidlandscape-label vertical-align-middle type-normal bidlandscape-user-input-label pull-left\\\" data-bind=\\\"attr:{for:dataArray().length}\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BidLandscape_CustomInputText')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003Cinput\" + (\" class=\\\"bid-landscape__input form-control\\\"\"+pug.attr(\"id\", radioName + \"_RadioInput\", true, true)+\" aria-labelledby=\\\"otherbidlabel\\\" data-bind=\\\"hasFocus: landscapePointsLength() == currentSelectedId(), value: userInput, valueUpdate:'keyup'\\\" name=\\\"newValue\\\" type=\\\"text\\\"\") + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Ftd\\u003E\\u003C\\u002Ftr\\u003E\\u003C\\u002Ftable\\u003E\\u003Cdiv class=\\\"error clear\\\" data-bind=\\\"visible: !inputValid(), text: inputErrorMessage()\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"bidType\" in locals_for_with?locals_for_with.bidType:typeof bidType!==\"undefined\"?bidType:undefined,\"bidlandscapeId\" in locals_for_with?locals_for_with.bidlandscapeId:typeof bidlandscapeId!==\"undefined\"?bidlandscapeId:undefined,\"campaignType\" in locals_for_with?locals_for_with.campaignType:typeof campaignType!==\"undefined\"?campaignType:undefined,\"entityType\" in locals_for_with?locals_for_with.entityType:typeof entityType!==\"undefined\"?entityType:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"radionName\" in locals_for_with?locals_for_with.radionName:typeof radionName!==\"undefined\"?radionName:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n, isCampaignLevel) {var save = isCampaignLevel?'Campaign_Save':'Save'\npug_html = pug_html + \"\\u003Cdiv class=\\\"clear\\\" data-bind=\\\"visible: !inSimpleMode() && hasData()\\\"\\u003E\\u003Cdiv class=\\\"bidlandscape-action padding-bottom-fifteen\\\"\\u003E\\u003Cinput\" + (\" class=\\\"btn btn-primary\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"value\", i18n.getString(save), true, true)+\" data-bind=\\\"enable:inputValid()\\\"\") + \"\\u003E\\u003Cinput\" + (\" class=\\\"btn btn-default\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"value\", i18n.getString('Cancel'), true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"isCampaignLevel\" in locals_for_with?locals_for_with.isCampaignLevel:typeof isCampaignLevel!==\"undefined\"?isCampaignLevel:undefined));;return pug_html;};\nmodule.exports = template;","import ko from 'knockout';\r\nimport { BidLandscapeBaseViewModel } from '../base-viewmodel';\r\n\r\nexport class KeywordBidLandscapeViewModel extends BidLandscapeBaseViewModel {\r\n constructor({\r\n parentItem,\r\n parentView,\r\n i18n,\r\n entityType,\r\n inSimpleMode,\r\n dataToShow,\r\n }) {\r\n super({\r\n parentItem, parentView, entityType, i18n, inSimpleMode, dataToShow,\r\n });\r\n this.tableBidText = ko.computed(() => i18n.getString('BidLandscape_kpiMaxCpC'));\r\n }\r\n}\r\n","import ko from 'knockout';\r\nimport _ from 'underscore';\r\n\r\nexport class BidLandscapeBaseViewModel {\r\n constructor({\r\n parentItem,\r\n i18n,\r\n inSimpleMode,\r\n entityType,\r\n dataToShow,\r\n }) {\r\n this.i18n = i18n;\r\n this.entityType = entityType;\r\n this.entityName = _.result(parentItem, 'EntityName', '');\r\n this.entityId = _.result(parentItem, 'Id', '');\r\n this.suggestedNewValue = ko.observable(_.result(parentItem, 'SuggestedNewValue', ''));\r\n this.currentValue = ko.observable(_.result(parentItem, 'CurrentValue', ''));\r\n this.dataArray = ko.observable([]);\r\n\r\n this.userInput = ko.observable('');\r\n this.valueToApply = ko.observable('');\r\n this.currentSelectedId = ko.observable(-1);\r\n this.currentSelectedId.subscribe(() => {\r\n this.selectedValueUpdated();\r\n });\r\n this.userInput.subscribe(() => {\r\n this.selectedValueUpdated();\r\n });\r\n\r\n this.landscapePointsLength = ko.pureComputed(() => _.size(this.dataArray()));\r\n this.currentSelectedId.extend({ notify: 'always' });\r\n this.valueToApply.extend({ notify: 'always' });\r\n this.invalidMsgByUser = ko.observable('');\r\n this.selectedValueUpdated = () => {\r\n this.inputErrorMessage('');\r\n if (this.currentSelectedId() === this.landscapePointsLength()) {\r\n const value = this.userInput();\r\n if (_.isEmpty(value) || !i18n.isValidDecimal(value, true)) {\r\n this.inputErrorMessage(i18n.getString('ErrorMessage_InputNumericValue'));\r\n } else if (i18n.parseDecimal(value) <= 0) {\r\n this.inputErrorMessage(i18n.getString('InputValueGreaterThanZero'));\r\n } else {\r\n this.valueToApply(this.userInput());\r\n }\r\n } else if (this.currentSelectedId() >= 0) {\r\n this.valueToApply(this.dataArray()[this.currentSelectedId()].bidStr);\r\n }\r\n };\r\n this.inputErrorMessage = ko.observable('');\r\n\r\n this.inputValid = ko.computed({\r\n read: () => this.inputErrorMessage() === '',\r\n write: _.noop,\r\n });\r\n\r\n this.bidlandscapeId = `${_.uniqueId()}_${this.entityId}`;\r\n this.hasData = ko.pureComputed(() => !_.isEmpty(this.dataArray()));\r\n\r\n this.startDateString = ko.observable('');\r\n this.endDateString = ko.observable('');\r\n this.inSimpleMode = ko.observable(inSimpleMode);\r\n this.isClickGraph = ko.observable(false);\r\n this.needCostColumn = ko.observable(false);\r\n\r\n this.footerText = ko.computed({\r\n read: () => i18n.getString('bidlandscapeHelpText').replace('{0}', '')\r\n .replace('{1}', '')\r\n .replace('{2}', `${this.startDateString()}`)\r\n .replace('{3}', `${this.endDateString()}`),\r\n });\r\n\r\n this.updatedSelectedIndex = (index) => {\r\n this.currentSelectedId(index);\r\n return true; // so that the action can spread to its radio\r\n };\r\n\r\n // Convert data for bidlanscape, default work on one set of data senario\r\n this.convertDataForBidLandscape = () => {\r\n if (!_.isEmpty(dataToShow) && !dataToShow.Nodata) {\r\n const data = this.convertDataForChart(dataToShow.ChartData, false);\r\n\r\n this.isClickGraph(data.showClick);\r\n this.dataArray(data.dataArray);\r\n this.currentSelectedId(data.selectedIndex);\r\n this.startDateString(dataToShow.ChartData.StartDateString);\r\n this.endDateString(dataToShow.ChartData.EndDateString);\r\n }\r\n };\r\n\r\n this.convertDataForChart = (data, hasZeroCurrentPoint) => {\r\n let landscapePoints = [];\r\n let selectedIndex = -1;\r\n let showClick = false;\r\n const currentBid = _.isNumber(this.currentValue()) ?\r\n this.currentValue() : i18n.parseDecimal(this.currentValue());\r\n const suggestedBid = _.isNumber(this.suggestedNewValue()) ?\r\n this.suggestedNewValue() : i18n.parseDecimal(this.suggestedNewValue());\r\n\r\n if (!_.isEmpty(data) && !_.isEmpty(data.BidLandscapePoints)) {\r\n // CurveType === 2 or CurveType === 16\r\n const hasClick = (data.CurveType & 18) > 0; // eslint-disable-line\r\n const bidlandscapePoints = data.BidLandscapePoints;\r\n\r\n landscapePoints = _.chain(bidlandscapePoints)\r\n .sortBy(point => -point.Bid)\r\n .uniq(point => point.Bid)\r\n .map((point, id) => {\r\n const result = {\r\n impressions: point.Impressions,\r\n impressionsStr: i18n.formatDecimalToInteger(point.Impressions),\r\n mlImpressions: point.MLImpressions,\r\n mlImpressionsStr: i18n.formatDecimalToInteger(point.MLImpressions),\r\n bid: point.Bid,\r\n bidStr: i18n.formatDecimalToFixed(point.Bid, 2),\r\n comment: '',\r\n index: id,\r\n clicks: point.Clicks || 0,\r\n clicksStr: i18n.formatDecimalToInteger(point.Clicks || 0),\r\n cost: point.Cost || 0,\r\n costStr: i18n.formatDecimalToFixed(point.Cost || 0, 2),\r\n view: point.View || 0,\r\n viewStr: i18n.formatDecimalToInteger(point.View || 0),\r\n };\r\n\r\n if (!hasZeroCurrentPoint && point.Bid === currentBid) {\r\n selectedIndex = selectedIndex < 0 ? id : selectedIndex;\r\n result.comment = ` (${i18n.getString('Current')})`;\r\n } else if (this.suggestedNewValue() > 0 && point.Bid === suggestedBid) {\r\n selectedIndex = id;\r\n result.comment = ` ${i18n.getString('Suggested')}`;\r\n }\r\n\r\n showClick = hasClick && point.Clicks > 0 ? true : showClick;\r\n return result;\r\n })\r\n .filter((point) => {\r\n // for adgroup bid landscape, bid 0 means current\r\n if (point.bid === 0 && hasZeroCurrentPoint) {\r\n this.customBidCurrentPoint(point);\r\n return false;\r\n }\r\n return true;\r\n })\r\n .value();\r\n\r\n selectedIndex = selectedIndex < 0 && !_.isEmpty(bidlandscapePoints) ? 0 : selectedIndex;\r\n }\r\n\r\n return {\r\n dataArray: landscapePoints,\r\n selectedIndex,\r\n showClick,\r\n };\r\n };\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { PureKnockoutView } from '@bingads-webui/knockout-view';\r\nimport 'highcharts';\r\nimport { BidLandscapeBaseViewModel } from './base-viewmodel';\r\nimport highchartsConfig from './highcharts-config';\r\n\r\nfunction percentileCeil(original) {\r\n const floor = Math.floor(original * 100) / 100;\r\n\r\n return floor + 0.01;\r\n}\r\n\r\n/**\r\n * @fires update\r\n * @fires input\r\n * @fires apply\r\n * @fires cancel\r\n */\r\nexport class BidLandscapeBaseView extends PureKnockoutView {\r\n get events() {\r\n return {\r\n 'click .btn-primary': 'onApply',\r\n 'click .btn-default': 'onCancel',\r\n 'click .closeimage': 'onCancel',\r\n };\r\n }\r\n\r\n /**\r\n * Initialize\r\n *\r\n * @param {object} params the option.\r\n * @param {object} params.entityType - the entity type of the entity\r\n * @param {object} params.parentItem - the enity info which showing the lanscape for\r\n * @param {String} params.parentItem.entityName - entityName of the entity\r\n * @param {String} params.parentItem.Id - the id of the entity\r\n * @param {boolean} params.parentItem.isDSA - whether belong to a DSA\r\n * @param {String} params.parentItem.campaignType - campaign's type\r\n * @param {integer} params.parentItem.SuggestedNewValue - suggested bid value\r\n * will mark as (suggested) at landscape graph, and selected by default\r\n * if landscape points contains this bid value\r\n * @param {integer} params.parentItem.CurrentValue - current bid value,\r\n * will mark as (current) at landscape graph, and selected when no suggested point\r\n * if landscape points contains this bid value\r\n * @param {boolean} params.inSimpleMode - whether to show it in simple mode\r\n * style in simple mode will be different\r\n * @param {object} params.dataToShow - the dataToShow for bid landscape,\r\n * different type of bid landscape may have different data structure\r\n * @param {object} params.i18n - the localization support for bid landscape\r\n * @param {object} params.i18n.getString - function to get localized string\r\n * @param {object} params.i18n.formatDecimalToInteger - format decimal to localized integer\r\n * @param {object} params.i18n.formatDecimalToFixed - format decimal to 2 digits localized integer\r\n * @param {object} params.i18n.parseDecimal - convert localized number to decimal\r\n * @param {object} params.i18n.isValidDecimal - return whether string is valid decimal\r\n * @return {Void} void\r\n */\r\n initialize({\r\n parentItem = {\r\n entityName: '',\r\n Id: 0,\r\n SuggestedNewValue: -1,\r\n CurrentValue: -1,\r\n isDSA: false,\r\n campaignType: 'Default',\r\n },\r\n inSimpleMode = false,\r\n dataToShow = {},\r\n enityType = '',\r\n i18n = { getString: _.identity },\r\n isForVNext = false,\r\n }) {\r\n this.options = {\r\n parentItem,\r\n i18n,\r\n inSimpleMode,\r\n enityType,\r\n dataToShow,\r\n };\r\n\r\n super.initialize(this.options);\r\n\r\n this.isForVNext = isForVNext;\r\n this.slideChartOptions = null;\r\n this.viewModel.valueToApply.subscribe((value) => {\r\n /**\r\n * update event.\r\n *\r\n * @event BidLandscape#update\r\n * @type {object}\r\n * @property {?string} valueToApply - the bid value to apply.\r\n * @property {boolean} inputValid - the bid is valid or not.\r\n */\r\n this.trigger('update', {\r\n valueToApply: value,\r\n inputValid: this.inputValid(),\r\n });\r\n\r\n if (this.viewModel.currentSelectedId() === this.viewModel.landscapePointsLength()) {\r\n /**\r\n * user input event.\r\n *\r\n * @event BidLandscape#input\r\n * @type {string}\r\n */\r\n this.trigger('input', this.viewModel.userInput());\r\n }\r\n });\r\n\r\n this.viewModel.currentSelectedId.subscribe(() => {\r\n this.onSelectionUpdate();\r\n });\r\n this.initBidLandscapeChartsOptions();\r\n\r\n this.on('rendered', () => {\r\n // trigger highcharts render for the first time\r\n this.renderSlideChart();\r\n });\r\n }\r\n\r\n get ViewModel() {\r\n return BidLandscapeBaseViewModel;\r\n }\r\n\r\n /**\r\n * Need extra chart series preparation or not, if need, this is an series data array.\r\n * @abstract\r\n * @returns {?array} - extra chart series data.\r\n */\r\n prepareExtraSeries() {\r\n return null;\r\n }\r\n\r\n onApply() {\r\n /**\r\n * apply event.\r\n *\r\n * @event BidLandscape#apply.\r\n */\r\n this.trigger('apply');\r\n }\r\n\r\n onCancel() {\r\n /**\r\n * cancel event.\r\n *\r\n * @event BidLandscape#cancel.\r\n */\r\n this.trigger('cancel');\r\n }\r\n\r\n /**\r\n * Mark input value as invalid, to stop the apply action\r\n * provided for user to apply customized logic checking on input value\r\n * for example, mark input as invalid when it's too big for specific senario\r\n * @param {String} msg - invalid message to show in graph\r\n * input will be mark as invalid when it is not null\r\n * @returns {void}\r\n */\r\n markInputValueInvalid(msg) {\r\n this.viewModel.inputErrorMessage(msg);\r\n }\r\n\r\n close() {\r\n this.remove();\r\n }\r\n\r\n // get table index for specific highcharts point\r\n getTableKpiIndex4Point(data, clickEvent) {\r\n const kpiIndexInSortOrder = clickEvent && clickEvent === 'true' ? data.index : data.point.index;\r\n\r\n return this.viewModel.landscapePointsLength() - 1 - kpiIndexInSortOrder;\r\n }\r\n\r\n // event handler when user selection (on graph or table) update\r\n // it will refresh the graph and updated the table selection accordingly\r\n onSelectionUpdate() {\r\n // trigger keydown each time when select custom input row\r\n if (this.viewModel.currentSelectedId() >= this.viewModel.landscapePointsLength()) {\r\n this.$('.bid-landscape__input').trigger('keydown');\r\n }\r\n\r\n this.renderSlideChart();\r\n }\r\n\r\n // render highcharts\r\n renderSlideChart() {\r\n this.$('.bidlandscape-chart').highcharts(this.prepareChartData());\r\n }\r\n\r\n // Refresh table when point clicked in highchart graph\r\n landscapePointClicked(event, pointClicked) {\r\n const tableKPiIndex = this.getTableKpiIndex4Point(pointClicked, 'true');\r\n\r\n if (_.isNumber(tableKPiIndex)) {\r\n this.viewModel.currentSelectedId(tableKPiIndex);\r\n }\r\n }\r\n\r\n // intialize for the high charts\r\n initBidLandscapeChartsOptions(options) {\r\n this.slideChartOptions = options ||\r\n highchartsConfig.getBidlandscapeChartOptions(\r\n this.viewModel.isClickGraph(),\r\n this.options.i18n\r\n );\r\n\r\n const self = this;\r\n\r\n // Need this to be point clicked in this function, let self be the view instance\r\n this.slideChartOptions.plotOptions.series.point.events.click = function pointClicked(event) {\r\n event.stopImmediatePropagation();\r\n self.landscapePointClicked(event, this);\r\n };\r\n }\r\n\r\n // Extract original logic here for children to override\r\n prepareChartTitles() {\r\n // set chart xAxis/yAxis title by graph click/impression type\r\n if (this.viewModel.isClickGraph()) {\r\n this.slideChartOptions.xAxis.title.text = this.options.i18n.getString('KPI_EstClick').toUpperCase();\r\n this.slideChartOptions.yAxis.title.text = this.options.i18n.getString('KPI_EstCost').toUpperCase();\r\n } else {\r\n this.slideChartOptions.xAxis.title.text = this.viewModel.tableBidText().toUpperCase();\r\n this.slideChartOptions.yAxis.title.text = this.options.i18n.getString('KPI_EstImp').toUpperCase();\r\n }\r\n }\r\n\r\n // Extract original logic here for children to override\r\n convertPoint(point, isCampaign = false, selectedCol = 'clicks') {\r\n return {\r\n bid: point.bidStr,\r\n x: this.viewModel.isClickGraph() || isCampaign ? point[selectedCol] : point.bid,\r\n y: this.viewModel.isClickGraph() || isCampaign ? point.cost : point.impressions,\r\n yStr: this.viewModel.isClickGraph() || isCampaign ? point.costStr : point.impressionsStr,\r\n };\r\n }\r\n\r\n // prepare data for chart to render\r\n prepareChartData(isCampaign = false, selectedCol = 'clicks', extraPoint = {}) {\r\n if (!this.viewModel.hasData()) {\r\n // let the viewmodel finish convert logic when there is no data\r\n this.viewModel.convertDataForBidLandscape();\r\n }\r\n\r\n // draw chart\r\n this.prepareChartTitles();\r\n\r\n let maxX = 0;\r\n let maxY = 0;\r\n let minX = -1;\r\n let minY = -1;\r\n let graphPoint;\r\n\r\n // prepare chart series data\r\n const seriesData = _.map(this.viewModel.dataArray(), (point, index) => {\r\n if (point.bid > 0 || isCampaign) {\r\n // for click graph, showing clicks/clost\r\n // for impression graph, showing bid/impressions\r\n graphPoint = {\r\n ...this.convertPoint(point, isCampaign, selectedCol),\r\n index, // index in tableData\r\n ...extraPoint,\r\n };\r\n\r\n // maintain the min & max for x and y axis\r\n maxX = Math.max(maxX, graphPoint.x);\r\n maxY = Math.max(maxY, graphPoint.y);\r\n minX = minX > 0 ? Math.min(minX, graphPoint.x) : graphPoint.x;\r\n minY = minY > 0 ? Math.min(minY, graphPoint.y) : graphPoint.y;\r\n\r\n // mark the selected point\r\n if (index === this.viewModel.currentSelectedId()) {\r\n graphPoint = _.extend(graphPoint, highchartsConfig.getMakerSetting(isCampaign));\r\n }\r\n }\r\n return graphPoint;\r\n });\r\n\r\n this.slideChartOptions.series = [{\r\n name: this.slideChartOptions.xAxis.title.text,\r\n data: seriesData.reverse(),\r\n }];\r\n\r\n // if there are extra seris, prepare it\r\n const extraSeries = this.prepareExtraSeries();\r\n\r\n if (_.isObject(extraSeries)) {\r\n this.slideChartOptions.series.push({\r\n data: extraSeries,\r\n });\r\n }\r\n\r\n this.slideChartOptions.xAxis.min = minX;\r\n this.slideChartOptions.yAxis.min = minY;\r\n this.slideChartOptions.xAxis.max = percentileCeil(maxX);\r\n this.slideChartOptions.yAxis.max = percentileCeil(maxY);\r\n\r\n return this.slideChartOptions;\r\n }\r\n\r\n /**\r\n * Return whether landscape graph has data\r\n * @returns {boolean} true when has data\r\n */\r\n hasData() {\r\n return this.viewModel.hasData();\r\n }\r\n\r\n /**\r\n * Get the value that will be used in apply\r\n * it is either point in graph or custom input one\r\n * @returns {integer} value to apply\r\n */\r\n valueToApply() {\r\n return this.viewModel.valueToApply();\r\n }\r\n\r\n /**\r\n * Get whether input is valid\r\n * it can be invalid either by no integer or negetive input\r\n * or invalid by user using markInputValueInvalid\r\n * @returns {boolean} rue when valid\r\n */\r\n inputValid() {\r\n return this.viewModel.inputValid();\r\n }\r\n}\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__81__;","module.exports = __WEBPACK_EXTERNAL_MODULE__82__;","const colorsDefault = {\r\n labelColor: '#B3B3B3',\r\n lineColor: '#EAECEE',\r\n pointHoverColor: 'rgb(230, 110, 0)',\r\n makerColor: '#E66400',\r\n makerFillColor: '#FFFFFF',\r\n seriesColor: '#009AD9',\r\n adgroupCurrentPointColor: '#606060',\r\n markerPointColor: '#aaff99',\r\n};\r\n\r\nconst colorsCampaign = {\r\n labelColor: '#333',\r\n lineColor: '#EAECEE',\r\n pointHoverColor: 'rgb(230, 110, 0)',\r\n makerColor: '#0178d6',\r\n makerFillColor: '#FFFFFF',\r\n seriesColor: '#0178d6',\r\n campaignCurrentPointColor: '#606060',\r\n markerPointColor: '#aaff99',\r\n crosshairsColor: '#E66400',\r\n};\r\n\r\nfunction getAdgroupCurrentPointSetting() {\r\n return {\r\n color: colorsDefault.markerPointColor,\r\n marker: {\r\n enable: true,\r\n symbol: 'circle',\r\n radius: 4.5,\r\n lineWidth: 1,\r\n lineColor: colorsDefault.adgroupCurrentPointColor,\r\n fillColor: colorsDefault.adgroupCurrentPointColor,\r\n },\r\n };\r\n}\r\n\r\nfunction axisValueFormater(value, clickGraph, i18n) {\r\n if (value) {\r\n return clickGraph ?\r\n i18n.formatDecimalToInteger(value) :\r\n i18n.formatDecimalToFixed(value);\r\n }\r\n return '';\r\n}\r\n\r\nfunction getSlideChartOptions(clickGraph, i18n, coloroptions) {\r\n const colors = coloroptions || colorsDefault;\r\n return {\r\n series: { animation: false },\r\n chart: {\r\n type: 'line',\r\n animation: false,\r\n },\r\n title: { text: null },\r\n xAxis: {\r\n allowDecimals: !clickGraph,\r\n labels: {\r\n enabled: true,\r\n align: 'left',\r\n y: 20,\r\n style: {\r\n color: colors.labelColor,\r\n fontWeight: 'bold',\r\n fontSize: '12px',\r\n },\r\n formatter() {\r\n return axisValueFormater(this.value, clickGraph, i18n);\r\n },\r\n },\r\n title: { text: null },\r\n categories: null,\r\n showGridlines: true,\r\n gridLineWidth: 1,\r\n gridLineColor: colors.lineColor,\r\n lineWidth: 1,\r\n lineColor: colors.lineColor,\r\n startOnTick: true,\r\n endOnTick: true,\r\n tickPositioner() {\r\n const positions = [];\r\n let tick = this.dataMin;\r\n const increment = (this.dataMax - this.dataMin) / 3;\r\n\r\n positions.push(this.dataMin); // eslint-disable-line\r\n for (let i = 1; i <= 2; i += 1) {\r\n tick += increment;\r\n positions.push(clickGraph ? Math.ceil(tick) : Math.ceil(tick * 100) / 100);\r\n }\r\n\r\n positions.push(clickGraph ? Math.ceil(this.dataMax) : Math.ceil(this.dataMax * 100) / 100); // eslint-disable-line\r\n return positions;\r\n },\r\n },\r\n yAxis: {\r\n allowDecimals: true,\r\n opposite: true,\r\n title: { text: null },\r\n tickPositioner() {\r\n const positions = [];\r\n const increment = (this.dataMax - this.dataMin) / 2;\r\n\r\n positions.push(this.dataMin); // eslint-disable-line\r\n\r\n positions.push(this.dataMin + increment); // eslint-disable-line\r\n positions.push(this.dataMax - 0.01); // eslint-disable-line\r\n return positions;\r\n },\r\n labels: {\r\n enabled: true,\r\n step: 2,\r\n formatter() {\r\n return axisValueFormater(this.value, false, i18n);\r\n },\r\n style: {\r\n color: colors.labelColor,\r\n fontWeight: 'bold',\r\n fontSize: '12px',\r\n },\r\n align: 'left',\r\n },\r\n showGridlines: true,\r\n gridLineWidth: 1,\r\n gridLineColor: colors.lineColor,\r\n lineWidth: 1,\r\n lineColor: colors.lineColor,\r\n startOnTick: true,\r\n endOnTick: false,\r\n },\r\n legend: { enabled: false },\r\n credits: { enabled: false }, // //get rid of hightcharts.com\r\n tooltip: {\r\n enabled: false,\r\n crosshairs: {\r\n enabled: true,\r\n color: '#E66400',\r\n dashStyle: 'longdash',\r\n },\r\n },\r\n plotOptions: {\r\n line: {\r\n dataLabels: {\r\n enabled: false,\r\n },\r\n marker: {\r\n enabled: true,\r\n },\r\n enableMouseTracking: true,\r\n },\r\n series: {\r\n animation: false,\r\n grouping: false,\r\n shadow: false,\r\n marker: {\r\n fillColor: colors.makerColor,\r\n radius: 3,\r\n lineWidth: 1,\r\n lineColor: colors.makerColor,\r\n states: {\r\n hover: {\r\n radius: 4.5,\r\n },\r\n },\r\n },\r\n color: colors.seriesColor,\r\n borderWidth: 0,\r\n pointWidth: 1,\r\n lineWidth: 2,\r\n states: {\r\n hover: {\r\n color: colors.pointHoverColor,\r\n },\r\n },\r\n point: { events: {} },\r\n },\r\n },\r\n };\r\n}\r\n\r\nfunction getBidlandscapeChartOptions(isClickGraph, i18n) {\r\n return getSlideChartOptions(isClickGraph, i18n);\r\n}\r\n\r\nfunction getMakerSetting(isCampaign) {\r\n const colors = isCampaign ? colorsCampaign : colorsDefault;\r\n return {\r\n marker: {\r\n enable: true,\r\n radius: 4.5,\r\n lineWidth: 1,\r\n lineColor: colors.makerColor,\r\n fillColor: colors.makerFillColor,\r\n },\r\n color: colors.markerPointColor,\r\n };\r\n}\r\n\r\nfunction getCampaignSlideChartOptions(clickGraph, i18n) {\r\n const options = getSlideChartOptions(clickGraph, i18n, colorsCampaign);\r\n\r\n options.tooltip = {\r\n shared: true,\r\n crosshairs: {\r\n enabled: true,\r\n color: colorsCampaign.crosshairsColor,\r\n dashStyle: 'longdash',\r\n },\r\n useHTML: true,\r\n headerFormat: '',\r\n pointFormat: '
{point.bidName}:{point.bid}
' +\r\n '
{point.name}: {point.x}
' +\r\n '
{point.costName}: {point.yStr}
',\r\n footerFormat: '',\r\n valueDecimals: 2,\r\n };\r\n options.title = {\r\n text: null,\r\n style: {\r\n color: colorsCampaign.labelColor,\r\n fontWeight: 'bold',\r\n fontSize: '12px',\r\n },\r\n align: 'left',\r\n margin: 15,\r\n };\r\n options.xAxis.title = {\r\n text: null,\r\n style: {\r\n color: colorsCampaign.labelColor,\r\n fontWeight: 'bold',\r\n fontSize: '12px',\r\n },\r\n margin: 10,\r\n };\r\n options.xAxis.labels.style = {\r\n color: colorsCampaign.labelColor,\r\n fontWeight: 'normal',\r\n fontSize: '12px',\r\n };\r\n options.yAxis.opposite = false;\r\n options.yAxis.labels.align = 'right';\r\n options.yAxis.labels.style = {\r\n color: colorsCampaign.labelColor,\r\n fontWeight: 'normal',\r\n fontSize: '12px',\r\n };\r\n return options;\r\n}\r\n\r\nexport default {\r\n getCampaignSlideChartOptions,\r\n getBidlandscapeChartOptions,\r\n getMakerSetting,\r\n getAdgroupCurrentPointSetting,\r\n};\r\n\r\n","import _ from 'underscore';\r\nimport $ from 'jquery';\r\nimport highchartsConfig from '../highcharts-config';\r\nimport template from '../template/adgroup-bidlandscape.pug';\r\n\r\nimport { AdGroupBidLandscapeViewModel } from './viewmodel';\r\nimport { BidLandscapeBaseView } from '../base-view';\r\nimport { BID_MODE } from './bid-mode';\r\n\r\n\r\n/**\r\n * Keyword bid landscape\r\n * Display bid with estimated KPIs (click /impression) using both table & line chart.\r\n * It support display of two mode of data:\r\n * default mode: update default adgroup bid without touching keyword cutomized bid\r\n * uniform mode: update bid will override all cutomized keyword bid too\r\n */\r\nexport class AdGroupBidLandscape extends BidLandscapeBaseView {\r\n get events() {\r\n return _.defaults({\r\n 'click .adgroup-bid-update-mode-div [data-value]': 'updateAdgroupSelectedMode',\r\n }, BidLandscapeBaseView.prototype.events);\r\n }\r\n\r\n /**\r\n * Initialize\r\n *\r\n * @param {object} params the params.\r\n * @param {object} params.entityType - the entity type of the entity\r\n * @param {object} params.parentItem - the enity info which showing the lanscape for\r\n * @param {String} params.parentItem.EntityName - EntityName of the entity, default 'adgroup'\r\n * @param {String} params.parentItem.Id - the id of the entity\r\n * @param {boolean} params.parentItem.isDSA - whether parent is belong to DSA campaign\r\n * @param {integer} params.parentItem.SuggestedNewValue - suggested bid value\r\n * will mark as (suggested) at landscape graph, and selected by default\r\n * if landscape points contains this bid value\r\n * @param {integer} params.parentItem.CurrentValue - current bid value,\r\n * will mark as (current) at landscape graph, and selected when no suggested point\r\n * if landscape points contains this bid value\r\n * @param {boolean} params.inSimpleMode - whether to show it in simple mode\r\n * style in simple mode will be different\r\n * @param {object} params.dataToShow - the dataToShow for bid landscape,\r\n * different type of bid landscape may have different data structure\r\n * @param {object} params.i18n - the localization support for bid landscape\r\n * @param {object} params.i18n.getString - function to get localized string\r\n * @param {object} params.i18n.formatDecimalToInteger - format decimal to localized integer\r\n * @param {object} params.i18n.formatDecimalToFixed - format decimal to 2 digits localized integer\r\n * @param {object} params.i18n.parseDecimal - convert localized number to decimal\r\n * @param {object} params.i18n.isValidDecimal - return whether string is valid decimal\r\n * @param {boolean} inKeywordCreationWorkflow -\r\n * indicate if this component show on keyword creation workflow\r\n * @return {Void} void\r\n */\r\n initialize({\r\n parentItem = {},\r\n i18n,\r\n helpId = null,\r\n entityType = 'adgroup',\r\n inSimpleMode = false,\r\n dataToShow = {},\r\n isForVNext,\r\n inKeywordCreationWorkflow = false,\r\n }) {\r\n super.initialize({\r\n parentItem,\r\n i18n,\r\n entityType,\r\n inSimpleMode,\r\n dataToShow,\r\n isForVNext,\r\n inKeywordCreationWorkflow,\r\n });\r\n\r\n this.helpId = helpId;\r\n this.i18n = i18n;\r\n this.isDSA = parentItem.isDSA;\r\n this.campaignType = parentItem.campaignType || 'Default';\r\n this.inKeywordCreationWorkflow = inKeywordCreationWorkflow;\r\n\r\n this.viewModel.adgroupSelectMode.subscribe(() => {\r\n this.trigger('selectModeChange');\r\n });\r\n }\r\n\r\n get ViewModel() {\r\n return AdGroupBidLandscapeViewModel;\r\n }\r\n\r\n get template() {\r\n return () => template(_.extend(this.viewModel, {\r\n isForVNext: this.isForVNext,\r\n helpId: this.helpId,\r\n updateWithOverWriteWarning: this.i18n.getString(this.isDSA ? 'Adgroup_BidLandscape_UpdateWithOverwrite_DSA' : 'Adgroup_BidLandscape_UpdateWithOverwrite')\r\n .replace('{0}', this.i18n.formatDecimalToInteger(1000)),\r\n BID_MODE,\r\n updateWithoutOverWrite: this.i18n.getString(this.isDSA ? 'Adgroup_BidLandscape_UpdateWithOutOverwrite_DSA' : 'Adgroup_BidLandscape_UpdateWithOutOverwrite'),\r\n uniformSaveWarnFooter: this.i18n.getString(this.isDSA ? 'AdGroupBidLandscape_Uniform_SaveWarnFooter_DSA' : 'AdGroupBidLandscape_Uniform_SaveWarnFooter'),\r\n campaignType: this.campaignType,\r\n inKeywordCreationWorkflow: this.inKeywordCreationWorkflow,\r\n subTitle: this.inKeywordCreationWorkflow ?\r\n this.i18n.getString('Creation_Workflow_Bid_Landscape_Description') :\r\n this.i18n.getString('SelectOrInputValueText'),\r\n }));\r\n }\r\n\r\n // update selected mode\r\n updateAdgroupSelectedMode(event) {\r\n this.viewModel.updateAdgroupSelectedMode($(event.currentTarget).attr('data-value'));\r\n }\r\n\r\n isAudienceAdgroupCPMCPV() {\r\n return this.viewModel.bidType === 'CPM' || this.viewModel.bidType === 'CPV';\r\n }\r\n\r\n // override base for CPM/CPV\r\n prepareChartTitles() {\r\n if (this.isAudienceAdgroupCPMCPV()) {\r\n this.slideChartOptions.yAxis.title.text = this.options.i18n.getString('KPI_EstCost').toUpperCase();\r\n if (this.viewModel.bidType === 'CPM') {\r\n this.slideChartOptions.xAxis.title.text = this.options.i18n.getString('KPI_EstImp').toUpperCase();\r\n } else {\r\n this.slideChartOptions.xAxis.title.text = this.options.i18n.getString('KPI_EstView').toUpperCase();\r\n }\r\n } else {\r\n super.prepareChartTitles();\r\n }\r\n }\r\n\r\n // override base for CPM/CPV\r\n convertPoint(point) {\r\n const graphPoint = super.convertPoint(point);\r\n\r\n if (this.isAudienceAdgroupCPMCPV()) {\r\n graphPoint.y = point.cost;\r\n graphPoint.yStr = point.costStr;\r\n if (this.viewModel.bidType === 'CPM') {\r\n graphPoint.x = point.impressions;\r\n } else {\r\n graphPoint.x = point.view;\r\n }\r\n }\r\n\r\n return graphPoint;\r\n }\r\n\r\n prepareExtraSeries() {\r\n if (this.viewModel.clearBid()) {\r\n const graphPoint = _.extend(highchartsConfig.getAdgroupCurrentPointSetting(), {\r\n x: this.viewModel.isClickGraph() ?\r\n this.viewModel.customBidCurrentPoint().clicks :\r\n this.viewModel.customBidCurrentPoint().bid,\r\n y: this.viewModel.isClickGraph() ?\r\n this.viewModel.customBidCurrentPoint().cost :\r\n this.viewModel.customBidCurrentPoint().impressions,\r\n index: 0, // index in tableData\r\n });\r\n if (this.isAudienceAdgroupCPMCPV()) {\r\n graphPoint.y = this.viewModel.customBidCurrentPoint().cost;\r\n graphPoint.yStr = this.viewModel.customBidCurrentPoint().costStr;\r\n if (this.viewModel.bidType === 'CPM') {\r\n graphPoint.x = this.viewModel.customBidCurrentPoint().impressions;\r\n } else {\r\n graphPoint.x = this.viewModel.customBidCurrentPoint().view;\r\n }\r\n }\r\n\r\n return [graphPoint];\r\n }\r\n\r\n return null;\r\n }\r\n\r\n clearBid() {\r\n return this.viewModel.clearBid();\r\n }\r\n}\r\n","var pug = require(\"!../../../../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (BID_MODE, bidlandscapeId, campaignType, entityName, helpId, i18n, inKeywordCreationWorkflow, isForVNext, subTitle, uniformSaveWarnFooter, updateWithOverWriteWarning, updateWithoutOverWrite) {var radioName = `adgroupBidUpdateMode_${bidlandscapeId}`\npug_html = pug_html + (\"\\u003Cdiv\" + (\" class=\\\"bid-landscape\\\"\"+pug.attr(\"id\", bidlandscapeId, true, true)+\" data-bind=\\\"css :{"panel-form modal-body bid-landscape-normal-version": hasData()}\\\"\") + \"\\u003E\\u003Cdiv data-bind=\\\"visible: hasData()\\\"\\u003E\\u003Cdiv class=\\\"bidlandscape-title type-bold col-xs-9 padding-zero\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BidLandscape_Title').replace('{0}', entityName)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (\" class=\\\"iconba iconba-Cancel close closeimage clickable\\\"\"+\" onclick=\\\"$(document).click()\\\" tabindex=\\\"0\\\" role=\\\"button\\\"\"+pug.attr(\"aria-label\", i18n.getString('Close'), true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"clear bidlandscape-subTitle\\\" data-bind=\\\"visible:hasData()\\\"\\u003E\" + (pug.escape(null == (pug_interp = subTitle) ? \"\" : pug_interp)));\nif (helpId) {\npug_html = pug_html + \"\\u003Ca\" + (\" class=\\\"HelpTopic\\\"\"+pug.attr(\"query\", `help:${helpId}`, true, true)+\" href=\\\"javascript:void(0);\\\"\") + \"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('LearnMore')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\nif (campaignType !== 'Audience' && !inKeywordCreationWorkflow) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"clear adgroup-bid-update-mode-div\\\"\\u003E\\u003Cdiv\" + (\" class=\\\"radio-inline col-xs-12 adgroup-bid-update-leave-custom-bid-mode padding-bottom-fifteen\\\"\"+pug.attr(\"data-value\", BID_MODE.UPDATE_DEFAULT, true, true)+\" data-bind=\\\"css: {'inactive':!hasDefaultBidData()}\\\"\") + \"\\u003E\\u003Clabel class=\\\"vertical-align-middle margin-zero cursor-pointer\\\"\\u003E\\u003Cinput\" + (\" class=\\\"cursor-pointer\\\"\"+\" type=\\\"radio\\\"\"+pug.attr(\"value\", BID_MODE.UPDATE_DEFAULT, true, true)+pug.attr(\"name\", radioName, true, true)+\" data-bind=\\\"checked:hasDefaultBidData() && adgroupSelectMode(), enable: hasDefaultBidData\\\"\") + \"\\u003E\" + (pug.escape(null == (pug_interp = updateWithoutOverWrite) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (\" class=\\\"radio-inline col-xs-12 adgroup-bid-update-clear-custom-bid-mode padding-bottom-fifteen\\\"\"+pug.attr(\"data-value\", BID_MODE.CLEAR_KEYWORD, true, true)+\" data-bind=\\\"css: {'inactive':!hasUnformBidData()}\\\"\") + \"\\u003E\\u003Clabel class=\\\"vertical-align-middle margin-zero cursor-pointer\\\"\\u003E\\u003Cinput\" + (\" class=\\\"cursor-pointer\\\"\"+\" type=\\\"radio\\\"\"+pug.attr(\"value\", BID_MODE.CLEAR_KEYWORD, true, true)+pug.attr(\"name\", radioName , true, true)+\" data-bind=\\\"checked:hasUnformBidData()&& adgroupSelectMode(), enable: hasUnformBidData\\\"\") + \"\\u003E\" + (pug.escape(null == (pug_interp = updateWithOverWriteWarning) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"bidlandscape-data-panel\\\" data-bind=\\\"visible:hasData()\\\"\\u003E\\u003Cdiv class=\\\"bidlandscape-left-div col-xs-7 pull-left margin-top-ten\\\"\\u003E\" + (null == (pug_interp = require(\"./bidlandscape-table.pug\").call(this, locals)) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"bidlandscape-right-div col-xs-4 padding-zero pull-left\\\"\\u003E\\u003Cdiv class=\\\"bidlandscape-chart col-xs-12 padding-zero margin-zero\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"bidlandscape-nodata-panel reasonDiv radius5px\\\" data-bind=\\\"visible:!hasData(), css:{'display-inline-block':!hasData()}\\\"\\u003E\\u003Cdiv\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Adgroup_NoBidLandscapeText')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\nif (!isForVNext) {\npug_html = pug_html + (null == (pug_interp = require(\"./action-panel.pug\").call(this, locals)) ? \"\" : pug_interp) + \"\\u003Cdiv class=\\\"clear bidlandscape-footer-warning\\\" data-bind=\\\"visible:clearBid()\\\"\\u003E\" + (pug.escape(null == (pug_interp = uniformSaveWarnFooter) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"clear bidlandscape-footer type-normal\\\" data-bind=\\\"visible: hasData(), html: footerText\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nif (isForVNext) {\npug_html = pug_html + (\"\\u003Cdiv class=\\\"clear bidlandscape-footer type-normal\\\" data-bind=\\\"visible: hasData(), html: footerText\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"clear bidlandscape-footer-warning\\\" data-bind=\\\"visible:clearBid()\\\"\\u003E\" + (pug.escape(null == (pug_interp = uniformSaveWarnFooter) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\" + (null == (pug_interp = require(\"./action-panel.pug\").call(this, locals)) ? \"\" : pug_interp));\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";}.call(this,\"BID_MODE\" in locals_for_with?locals_for_with.BID_MODE:typeof BID_MODE!==\"undefined\"?BID_MODE:undefined,\"bidlandscapeId\" in locals_for_with?locals_for_with.bidlandscapeId:typeof bidlandscapeId!==\"undefined\"?bidlandscapeId:undefined,\"campaignType\" in locals_for_with?locals_for_with.campaignType:typeof campaignType!==\"undefined\"?campaignType:undefined,\"entityName\" in locals_for_with?locals_for_with.entityName:typeof entityName!==\"undefined\"?entityName:undefined,\"helpId\" in locals_for_with?locals_for_with.helpId:typeof helpId!==\"undefined\"?helpId:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"inKeywordCreationWorkflow\" in locals_for_with?locals_for_with.inKeywordCreationWorkflow:typeof inKeywordCreationWorkflow!==\"undefined\"?inKeywordCreationWorkflow:undefined,\"isForVNext\" in locals_for_with?locals_for_with.isForVNext:typeof isForVNext!==\"undefined\"?isForVNext:undefined,\"subTitle\" in locals_for_with?locals_for_with.subTitle:typeof subTitle!==\"undefined\"?subTitle:undefined,\"uniformSaveWarnFooter\" in locals_for_with?locals_for_with.uniformSaveWarnFooter:typeof uniformSaveWarnFooter!==\"undefined\"?uniformSaveWarnFooter:undefined,\"updateWithOverWriteWarning\" in locals_for_with?locals_for_with.updateWithOverWriteWarning:typeof updateWithOverWriteWarning!==\"undefined\"?updateWithOverWriteWarning:undefined,\"updateWithoutOverWrite\" in locals_for_with?locals_for_with.updateWithoutOverWrite:typeof updateWithoutOverWrite!==\"undefined\"?updateWithoutOverWrite:undefined));;return pug_html;};\nmodule.exports = template;","import _ from 'underscore';\r\nimport ko from 'knockout';\r\nimport { BID_MODE } from './bid-mode';\r\nimport { BidLandscapeBaseViewModel } from '../base-viewmodel';\r\nimport { AdGroupBidTypeNames } from './adgroup-bid-type-names';\r\n\r\nexport class AdGroupBidLandscapeViewModel extends BidLandscapeBaseViewModel {\r\n constructor({\r\n parentItem,\r\n parentView,\r\n i18n,\r\n entityType = 'adgroup',\r\n inSimpleMode,\r\n dataToShow,\r\n inKeywordCreationWorkflow,\r\n }) {\r\n super({\r\n parentItem, parentView, i18n, entityType, inSimpleMode, dataToShow,\r\n });\r\n\r\n this.uniformData = ko.observable({ dataArray: [], selectedIndex: 0 });\r\n this.defaultData = ko.observable({ dataArray: [], selectedIndex: 0 });\r\n\r\n this.inKeywordCreationWorkflow = inKeywordCreationWorkflow;\r\n\r\n this.hasUnformBidData = ko.pureComputed(() => !_.isEmpty(this.uniformData().dataArray));\r\n\r\n this.hasDefaultBidData = ko.pureComputed(() =>\r\n (!_.isEmpty(this.defaultData().dataArray) && !this.inKeywordCreationWorkflow));\r\n\r\n this.adgroupSelectMode = ko.observable(BID_MODE.NONE);\r\n this.customBidCurrentPoint = ko.observable({});\r\n this.clearBid = ko.observable(false);\r\n\r\n const dataForBidType = dataToShow.DefaultResult || dataToShow.UniformData;\r\n const bidType = dataForBidType ? dataForBidType.AdGroupBidType : 0;\r\n this.bidType = AdGroupBidTypeNames[bidType];\r\n\r\n this.adgroupSelectMode.subscribe((newValue) => {\r\n if (newValue === BID_MODE.UPDATE_DEFAULT) {\r\n this.dataArray(this.defaultData().dataArray);\r\n this.clearBid(false);\r\n this.currentSelectedId(this.defaultData().selectedIndex);\r\n } else if (newValue === BID_MODE.CLEAR_KEYWORD) {\r\n this.dataArray(this.uniformData().dataArray);\r\n this.clearBid(true);\r\n this.currentSelectedId(this.uniformData().selectedIndex);\r\n }\r\n });\r\n\r\n this.tableBidText = ko.computed(() => {\r\n if (this.clearBid()) {\r\n return i18n.getString(parentItem.isDSA ? 'Adgroup_kpiMaxCpc4Uniform_DSA' : 'Adgroup_kpiMaxCpc4Uniform');\r\n }\r\n return i18n.getString('Adgroup_kpiMaxCpC');\r\n });\r\n\r\n // Override the convert data for bidlanscape function\r\n // adgroup bid landscape support two kinds of data & selection to jump between them\r\n this.convertDataForBidLandscape = () => {\r\n if (!this.inKeywordCreationWorkflow) {\r\n this.defaultData(this.convertDataForChart(dataToShow.DefaultResult));\r\n }\r\n this.uniformData(this.convertDataForChart(dataToShow.UniformData, true));\r\n\r\n if (this.hasDefaultBidData() || this.hasUnformBidData()) {\r\n const data = this.hasDefaultBidData() ? this.defaultData() : this.uniformData();\r\n const dataToShowForLandscape = this.hasDefaultBidData() ?\r\n dataToShow.DefaultResult :\r\n dataToShow.UniformData;\r\n\r\n this.adgroupSelectMode(this.hasDefaultBidData() ?\r\n BID_MODE.UPDATE_DEFAULT :\r\n BID_MODE.CLEAR_KEYWORD);\r\n this.isClickGraph(data.showClick);\r\n this.startDateString(dataToShowForLandscape.StartDateString);\r\n this.endDateString(dataToShowForLandscape.EndDateString);\r\n }\r\n };\r\n\r\n this.needCostColumn = ko.computed(() => this.bidType === 'CPM' || (this.bidType === 'CPV' && !this.isClickGraph()));\r\n }\r\n\r\n updateAdgroupSelectedMode(newSelction) {\r\n const updateDefault = newSelction === BID_MODE.UPDATE_DEFAULT && this.hasDefaultBidData();\r\n const updateUniform = newSelction === BID_MODE.CLEAR_KEYWORD && this.hasUnformBidData();\r\n\r\n if (updateDefault || updateUniform) {\r\n this.adgroupSelectMode(newSelction);\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n","export const BID_MODE = {\r\n NONE: 'None',\r\n UPDATE_DEFAULT: 'UpdateDefault',\r\n CLEAR_KEYWORD: 'ClearKeyword',\r\n};\r\n","export const AdGroupBidTypeNames = {\r\n 0: 'CPC',\r\n 1: 'CPM',\r\n 2: 'CPV',\r\n};\r\n","import _ from 'underscore';\r\nimport template from '../template/keyword-bidlandscape.pug';\r\nimport { ProductGroupBidLandscapeViewModel } from './viewmodel';\r\nimport { BidLandscapeBaseView } from '../base-view';\r\n\r\nexport class ProductGroupBidLandscape extends BidLandscapeBaseView {\r\n get ViewModel() {\r\n return ProductGroupBidLandscapeViewModel;\r\n }\r\n\r\n get template() {\r\n return () => template(_.extend(this.viewModel, {\r\n isForVNext: this.isForVNext,\r\n }));\r\n }\r\n}\r\n","import ko from 'knockout';\r\nimport { BidLandscapeBaseViewModel } from '../base-viewmodel';\r\n\r\nexport class ProductGroupBidLandscapeViewModel extends BidLandscapeBaseViewModel {\r\n constructor({\r\n parentItem,\r\n parentView,\r\n i18n,\r\n entityType,\r\n inSimpleMode,\r\n dataToShow,\r\n }) {\r\n super({\r\n parentItem, parentView, entityType, i18n, inSimpleMode, dataToShow,\r\n });\r\n this.tableBidText = ko.computed(() => i18n.getString('BidLandscape_kpiMaxCpC'));\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport template from '../template/campaign-bidlandscape.pug';\r\nimport { CampaignBidLandscapeViewModel } from './viewmodel';\r\nimport { BidLandscapeBaseView } from '../base-view';\r\nimport { BID_MODE, SYMBOL_PERCENT, STRING_MAP } from './bid-mode';\r\nimport highchartsConfig from '../highcharts-config';\r\n\r\nexport class CampaignBidLandscape extends BidLandscapeBaseView {\r\n initialize({\r\n parentItem = {},\r\n i18n,\r\n dataToShow = {},\r\n isForVNext,\r\n }) {\r\n super.initialize({\r\n parentItem,\r\n i18n,\r\n dataToShow,\r\n isForVNext,\r\n });\r\n\r\n this.viewModel.currentSelectedColomn.subscribe(() => {\r\n this.onSelectionUpdate();\r\n });\r\n\r\n this.viewModel.campaignSelectMode.subscribe(() => {\r\n this.trigger('selectModeChange');\r\n });\r\n }\r\n get ViewModel() {\r\n return CampaignBidLandscapeViewModel;\r\n }\r\n\r\n get template() {\r\n return () => template(_.extend(this.viewModel, {\r\n BID_MODE,\r\n SYMBOL_PERCENT,\r\n isForVNext: this.isForVNext,\r\n isCampaignLevel: true,\r\n }));\r\n }\r\n campaignSelectMode() {\r\n return this.viewModel.campaignSelectMode();\r\n }\r\n additionalBuget() {\r\n return this.viewModel.additionalBuget();\r\n }\r\n keepCurrentBudget() {\r\n return this.viewModel.keepCurrentBudget();\r\n }\r\n hash() {\r\n return this.viewModel.hash();\r\n }\r\n initBidLandscapeChartsOptions() {\r\n const options = highchartsConfig.getCampaignSlideChartOptions(\r\n this.viewModel.isClickGraph(),\r\n this.options.i18n,\r\n this.viewModel.currencySymbol()\r\n );\r\n super.initBidLandscapeChartsOptions(options);\r\n }\r\n prepareChartData() {\r\n if (!this.viewModel.hasData()) {\r\n this.viewModel.convertDataForBidLandscape();\r\n }\r\n const selectedCol = this.viewModel.currentSelectedColomn();\r\n const xAlixTitle = this.options.i18n.getString(STRING_MAP[selectedCol]);\r\n const yAxisTitle = this.options.i18n.getString(STRING_MAP.cost);\r\n this.slideChartOptions = super.prepareChartData(true, selectedCol, {\r\n name: xAlixTitle,\r\n bidName: this.options.i18n.getString('KPI_Campaign_Bid'),\r\n costName: yAxisTitle,\r\n });\r\n\r\n this.slideChartOptions.xAxis.title.text = xAlixTitle;\r\n this.slideChartOptions.title.text = yAxisTitle;\r\n this.slideChartOptions.yAxis.title.text = null;\r\n return this.slideChartOptions;\r\n }\r\n}\r\n","var pug = require(\"!../../../../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (BID_MODE, bidlandscapeId, campaignName, disabledBid, disabledCPC, entityType, i18n) {pug_mixins[\"fwLink\"] = pug_interp = function(linkId, displayText, ariaLabelContext){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\nvar ariaLabel= ariaLabelContext || '';\npug_html = pug_html + \"\\u003Ca\" + (\" class=\\\"fwLink\\\"\"+pug.attr(\"href\", `https://go.microsoft.com/fwlink/?linkid=${linkId}`, true, true)+\" target=\\\"_blank\\\"\"+pug.attr(\"aria-label\", `$(ariaLabel) ${displayText}`, true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = displayText) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\";\n};\nvar radioNameSelectModel = `campaignBidSelectModel_${bidlandscapeId}`\nvar radioNameAdditionalBudget = `campaignBidAdditionalBudget_${bidlandscapeId}`\npug_html = pug_html + \"\\u003Cdiv\" + (\" class=\\\"bid-landscape\\\"\"+pug.attr(\"id\", bidlandscapeId, true, true)+pug.attr(\"data-type\", entityType, true, true)+\" data-bind=\\\"css :{"bidlandscape-smiple-version":inSimpleMode() && hasData(),"bid-landscape-normal-version": !inSimpleMode() &&hasData(), "campaign-bid-landscape": hasData()}\\\"\") + \"\\u003E\\u003Cdiv\" + (\" class=\\\"iconba iconba-Cancel close closeimage clickable\\\"\"+\" onclick=\\\"$(document).click()\\\" tabindex=\\\"0\\\" role=\\\"button\\\"\"+pug.attr(\"aria-label\", i18n.getString('Close'), true, true)+\" data-bind=\\\"visible: hasData()\\\"\") + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv data-bind=\\\"visible: !inSimpleMode() && hasData()\\\"\\u003E\\u003Cdiv class=\\\"bidlandscape-title type-bold padding-zero\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Campaign_BidLandscape_Title')+campaignName) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"clear bidlandscape-subTitle\\\" data-bind=\\\"visible: hasData()\\\"\\u003E\\u003Cspan data-bind=\\\"text: descrpition()\\\"\\u003E\\u003C\\u002Fspan\\u003E\";\npug_mixins[\"fwLink\"]('863840', i18n.getString('LearnMore'), i18n.getString('Bidlandscape_SubTitleText'));\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"bidlandscape-campaign-type\\\" data-bind=\\\"visible: hasData()\\\"\\u003E\\u003Cspan class=\\\"title\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Radio_Campaign_Type_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\nif (!disabledCPC) {\npug_html = pug_html + \"\\u003Cdiv\" + (\" class=\\\"radio-inline\\\"\"+pug.attr(\"data-value\", BID_MODE.BID_SCALING, true, true)) + \"\\u003E\\u003Clabel class=\\\"vertical-align-middle cursor-pointer\\\"\\u003E\\u003Cinput\" + (\" class=\\\"cursor-pointer radio-campaign-scaling\\\"\"+\" type=\\\"radio\\\"\"+pug.attr(\"value\", BID_MODE.BID_SCALING, true, true)+pug.attr(\"name\", radioNameSelectModel , true, true)+\" data-bind=\\\"checked:campaignSelectMode\\\"\") + \"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Radio_Bid_Scaling')) ? \"\" : pug_interp)) + \"\\u003Ca class=\\\"helpbutton\\\" type=\\\"helppopup\\\" topic=\\\"pop_BA_BidLandscape_BidScaling\\\" data-help onclick=\\\"PopupController.PopupJsClick(this)\\\" href=\\\"javascript:void(0);\\\"\\u003E\\u003C\\u002Fa\\u003E\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nif (!disabledBid) {\npug_html = pug_html + \"\\u003Cdiv\" + (\" class=\\\"radio-inline\\\"\"+pug.attr(\"data-value\", BID_MODE.CAMPAIGN_WIDE_BID, true, true)) + \"\\u003E\\u003Clabel class=\\\"vertical-align-middle cursor-pointer\\\"\\u003E\\u003Cinput\" + (\" class=\\\"cursor-pointer radio-campaign-widebid\\\"\"+\" type=\\\"radio\\\"\"+pug.attr(\"value\", BID_MODE.CAMPAIGN_WIDE_BID, true, true)+pug.attr(\"name\", radioNameSelectModel, true, true)+\" data-bind=\\\"checked:campaignSelectMode\\\"\") + \"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Radio_Campaign_Wide_Bid')) ? \"\" : pug_interp)) + \"\\u003Ca class=\\\"helpbutton\\\" type=\\\"helppopup\\\" topic=\\\"pop_BA_BidLandscape_CampaignWideBid\\\" data-help onclick=\\\"PopupController.PopupJsClick(this)\\\" href=\\\"javascript:void(0);\\\"\\u003E\\u003C\\u002Fa\\u003E\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"bidlandscape-data-panel\\\" data-bind=\\\"visible:hasData()\\\"\\u003E\\u003Cdiv class=\\\"bidlandscape-left-div pull-left col-xs-7 bid-landscape__table\\\"\\u003E\" + (null == (pug_interp = require(\"./campaign-bidlandscape-table.pug\").call(this, locals)) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"bidlandscape-right-div col-xs-4 pull-left bid-landscape__chart\\\"\\u003E\\u003Cdiv class=\\\"bidlandscape-chart\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"clear\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"bidlandscape-campaign-additionalbudget padding-bottom-fifteen\\\" data-bind=\\\"visible:showAdditionalBudgetPanel\\\"\\u003E\\u003Cdiv class=\\\"title\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Campaign_BidLandscape_AdditionalBudget_Title')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"desc\\\" data-bind=\\\"text: additionalBudgetDescrpition()\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"radio-inline\\\"\\u003E\\u003Clabel class=\\\"vertical-align-middle cursor-pointer\\\"\\u003E\\u003Cinput\" + (\" type=\\\"radio\\\"\"+pug.attr(\"name\", radioNameAdditionalBudget, true, true)+\" data-bind=\\\"value:false,checked:keepCurrentBudget\\\"\") + \"\\u003E\\u003Cspan data-bind=\\\"html:increseBudgetText\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"radio-inline\\\"\\u003E\\u003Clabel class=\\\"vertical-align-middle cursor-pointer\\\"\\u003E\\u003Cinput\" + (\" type=\\\"radio\\\"\"+pug.attr(\"name\", radioNameAdditionalBudget , true, true)+\" data-bind=\\\"value:true,checked:keepCurrentBudget\\\"\") + \"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Campaign_BidLandscape_AdditionalBudget_Keep')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"warning\\\" data-bind=\\\"visible:keepCurrentBudget\\\"\\u003E\\u003Cspan class=\\\"status_warning spritedimagealign\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Campaign_BidLandscape_AdditionalBudget_Warning')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"bidlandscape-nodata-panel reasonDiv radius5px\\\" data-bind=\\\"visible:!hasData(), css:{'display-inline-block':!hasData()}\\\"\\u003E\\u003Cdiv\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Campaign_NoBidLandscapeText')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\" + (null == (pug_interp = require(\"./action-panel.pug\").call(this, locals)) ? \"\" : pug_interp) + \"\\u003Cdiv class=\\\"clear bidlandscape-footer type-normal\\\" data-bind=\\\"visible: !inSimpleMode() && hasData(), html: footerText\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"BID_MODE\" in locals_for_with?locals_for_with.BID_MODE:typeof BID_MODE!==\"undefined\"?BID_MODE:undefined,\"bidlandscapeId\" in locals_for_with?locals_for_with.bidlandscapeId:typeof bidlandscapeId!==\"undefined\"?bidlandscapeId:undefined,\"campaignName\" in locals_for_with?locals_for_with.campaignName:typeof campaignName!==\"undefined\"?campaignName:undefined,\"disabledBid\" in locals_for_with?locals_for_with.disabledBid:typeof disabledBid!==\"undefined\"?disabledBid:undefined,\"disabledCPC\" in locals_for_with?locals_for_with.disabledCPC:typeof disabledCPC!==\"undefined\"?disabledCPC:undefined,\"entityType\" in locals_for_with?locals_for_with.entityType:typeof entityType!==\"undefined\"?entityType:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (bidlandscapeId, i18n, radionName) {var radioName = bidlandscapeId + '_radio'\npug_html = pug_html + \"\\u003Ctable class=\\\"bidlandscape-detail-table table-full text-right vertical-align-middle\\\" data-bind=\\\"click:$root.updatedSelectedColumn.bind($data,event)\\\"\\u003E\\u003Ccolgroup\\u003E\\u003Ccol class=\\\"bid-landscape__col bid-landscape__col--radio\\\"\\u003E\\u003Ccol class=\\\"bid-landscape__col bid-landscape__col--bi\\\"\\u003E\\u003Ccol class=\\\"bid-landscape__col bid-landscape__col--bi\\\"\\u003E\\u003Ccol class=\\\"bid-landscape__col bid-landscape__col--bi\\\" data-bind=\\\"visible:$root.isClickGraph\\\"\\u003E\\u003Ccol class=\\\"bid-landscape__col bid-landscape__col--bi\\\" data-bind=\\\"visible:$root.showImpr\\\"\\u003E\\u003Ccol class=\\\"bid-landscape__col bid-landscape__col--bi\\\" data-bind=\\\"visible:$root.showImprTop\\\"\\u003E\\u003Ccol class=\\\"bid-landscape__col bid-landscape__col--bi\\\" data-bind=\\\"visible:$root.showConv\\\"\\u003E\\u003Ccol class=\\\"bid-landscape__col bid-landscape__col--bi\\\" data-bind=\\\"visible:$root.showConvValue\\\"\\u003E\\u003Ccol class=\\\"bid-landscape__col bid-landscape__col--bi\\\"\\u003E\\u003C\\u002Fcolgroup\\u003E\\u003Cthead\\u003E\\u003Ctr class=\\\"bidlandscape-table-row\\\"\\u003E\\u003Cth class=\\\"text-right bidlandscape-firstColumn\\\"\\u003E\\u003C\\u002Fth\\u003E\\u003Cth class=\\\"text-left\\\"\\u003E\\u003Clabel class=\\\"bidlandscape-label\\\" data-bind=\\\"text: targetTitle()\\\"\\u003E\\u003C\\u002Flabel\\u003E\\u003C\\u002Fth\\u003E\\u003Cth class=\\\"text-right\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('KPI_Campaign_Cost')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fth\\u003E\\u003Cth class=\\\"text-right\\\" data-name=\\\"clicks\\\" data-bind=\\\"visible:$root.isClickGraph,css:{selected: "clicks"===$root.currentSelectedColomn()}\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('KPI_Campaign_Click')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fth\\u003E\\u003Cth class=\\\"text-right\\\" data-name=\\\"impressions\\\" data-bind=\\\"visible:$root.showImpr,css:{selected: "impressions"===$root.currentSelectedColomn()}\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('KPI_Campaign_Imp')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fth\\u003E\\u003Cth class=\\\"text-right\\\" data-name=\\\"mlImpressions\\\" data-bind=\\\"visible:$root.showImprTop,css:{selected: "mlImpressions"===$root.currentSelectedColomn()}\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('KPI_Campaign_MlImp')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fth\\u003E\\u003Cth class=\\\"text-right\\\" data-name=\\\"conversion\\\" data-bind=\\\"visible:$root.showConv,css:{selected: "conversion"===$root.currentSelectedColomn()}\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('KPI_Campaign_Conversion')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fth\\u003E\\u003Cth class=\\\"text-right\\\" data-name=\\\"conversionValue\\\" data-bind=\\\"visible:$root.showConvValue,css:{selected: "conversionValue"===$root.currentSelectedColomn()}\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('KPI_Campaign_ConversionValue')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fth\\u003E\\u003Cth class=\\\"text-right\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('KPI_Campaign_AdditionalBugetNeeds')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fth\\u003E\\u003C\\u002Ftr\\u003E\\u003C\\u002Fthead\\u003E\\u003Ctbody data-bind=\\\"foreach: $root.dataArray()\\\"\\u003E\\u003Ctr class=\\\"bidlandscape-table-row cursor-pointer col-xs-12\\\" data-bind=\\\"click: $root.updatedSelectedIndex.bind($data, $index()), css:{"bid-current-row":$index() == $root.currentSelectedId()}\\\"\\u003E\\u003Ctd\\u003E\\u003Cinput\" + (\" class=\\\"bidlandscape-firstColumn cursor-pointer bid-landscape__radio\\\"\"+\" type=\\\"radio\\\"\"+pug.attr(\"name\", radionName, true, true)+\" id=\\\"radioName_$index()\\\" data-bind=\\\"value: $index(), checked: $root.currentSelectedId(), attr:{"aria-label": "Bid "+bidStr}\\\"\") + \"\\u003E\\u003C\\u002Ftd\\u003E\\u003Ctd class=\\\"text-left\\\"\\u003E\\u003Clabel class=\\\"bidlandscape-label vertical-align-middle type-normal\\\" data-bind=\\\"text: bidStr + comment\\\"\\u003E\\u003C\\u002Flabel\\u003E\\u003C\\u002Ftd\\u003E\\u003Ctd data-bind=\\\"text: costStr\\\"\\u003E\\u003C\\u002Ftd\\u003E\\u003Ctd data-name=\\\"clicks\\\" data-bind=\\\"visible:$root.isClickGraph,text: clicksStr, css:{selected: "clicks"===$root.currentSelectedColomn()}\\\"\\u003E\\u003C\\u002Ftd\\u003E\\u003Ctd data-name=\\\"impressions\\\" data-bind=\\\"visible:$root.showImpr,text: impressionsStr, css:{selected: "impressions"===$root.currentSelectedColomn()}\\\"\\u003E\\u003C\\u002Ftd\\u003E\\u003Ctd data-name=\\\"mlImpressions\\\" data-bind=\\\"visible:$root.showImprTop,text: mlImpressionsStr, css:{selected: "mlImpressions"===$root.currentSelectedColomn()}\\\"\\u003E\\u003C\\u002Ftd\\u003E\\u003Ctd data-name=\\\"conversion\\\" data-bind=\\\"visible:$root.showConv,text:conversionStr, css:{selected: "conversion"===$root.currentSelectedColomn()}\\\"\\u003E\\u003C\\u002Ftd\\u003E\\u003Ctd data-name=\\\"conversionValue\\\" data-bind=\\\"visible:$root.showConvValue,text:conversionValueStr, css:{selected: "conversionValue"===$root.currentSelectedColomn()}\\\"\\u003E\\u003C\\u002Ftd\\u003E\\u003Ctd data-bind=\\\"text:additionalBugetNeedsStr\\\"\\u003E\\u003C\\u002Ftd\\u003E\\u003C\\u002Ftr\\u003E\\u003C\\u002Ftbody\\u003E\\u003Ctr class=\\\"bidlandscape-table-row cursor-pointer col-xs-12\\\" data-bind=\\\"click: $root.updatedSelectedIndex.bind($data, $root.landscapePointsLength()),css:{"bid-current-row": $root.landscapePointsLength() == $root.currentSelectedId()}\\\"\\u003E\\u003Ctd\\u003E\\u003Cinput\" + (\" class=\\\"cursor-pointer bid-landscape__radio\\\"\"+\" type=\\\"radio\\\"\"+pug.attr(\"name\", radionName, true, true)+\" data-bind=\\\"value:$root.landscapePointsLength(), checked:$root.currentSelectedId()\\\"\") + \"\\u003E\\u003C\\u002Ftd\\u003E\\u003Ctd class=\\\"bid-landscape__td--input text-left\\\" colspan=\\\"9\\\"\\u003E\\u003Cdiv class=\\\"bid-landscape-input-group\\\" data-bind=\\\"css:{inputerror:!$root.inputValid()},visible:$root.showBid\\\"\\u003E\\u003Cspan class=\\\"bid-landscape__input symbol-currency\\\" data-bind=\\\"text:$root.currencySymbol,visible:$root.showCurrencySymbol()\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cinput\" + (\" class=\\\"bid-landscape__input form-inline text-left\\\"\"+\" autocomplete=\\\"off\\\"\"+pug.attr(\"id\", radioName + \"_RadioInput\", true, true)+\" aria-labelledby=\\\"otherbidlabel\\\" data-bind=\\\"hasFocus:$root.focusInput(), value: $root.userInput, valueUpdate:"keyup", attr: {placeholder: inputPlaceholder()}\\\" name=\\\"newValue\\\" type=\\\"text\\\"\") + \"\\u003E\\u003Cspan class=\\\"percent-symbol\\\" data-bind=\\\"visible:!$root.showCurrencySymbol()\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BidStrategySetting_TargetROASPercent')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"bid-landscape-input-group\\\" data-bind=\\\"css:{inputerror:!$root.inputValid()},visible:$root.showCPC\\\"\\u003E\\u003Cselect class=\\\"bid-landscape__select\\\" data-bind=\\\"options:$root.percentOptions,optionsValue:'value',optionsText:'text',value:$root.cpcSymbol\\\"\\u003E\\u003C\\u002Fselect\\u003E\\u003Cinput\" + (\" class=\\\"bid-landscape__input form-inline text-right\\\"\"+\" autocomplete=\\\"off\\\"\"+pug.attr(\"id\", radioName + \"_RadioInput\", true, true)+\" aria-labelledby=\\\"otherbidlabel\\\" data-bind=\\\"value: $root.userInput, valueUpdate:"keyup", attr: {placeholder: inputPlaceholder()}\\\" name=\\\"newValue\\\" type=\\\"text\\\"\") + \"\\u003E\\u003Cspan class=\\\"bid-landscape__input symbol-percent\\\"\\u003E\" + (pug.escape(null == (pug_interp = '%') ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Ftd\\u003E\\u003C\\u002Ftr\\u003E\\u003C\\u002Ftable\\u003E\\u003Cdiv class=\\\"error clear\\\" data-bind=\\\"visible: !inputValid(), text: inputErrorMessage()\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"bidlandscapeId\" in locals_for_with?locals_for_with.bidlandscapeId:typeof bidlandscapeId!==\"undefined\"?bidlandscapeId:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"radionName\" in locals_for_with?locals_for_with.radionName:typeof radionName!==\"undefined\"?radionName:undefined));;return pug_html;};\nmodule.exports = template;","import ko from 'knockout';\r\nimport _ from 'underscore';\r\nimport $ from 'jquery';\r\nimport { BidLandscapeBaseViewModel } from '../base-viewmodel';\r\nimport { BID_MODE, SYMBOL_PERCENT, TARGET_VALUE_MAP, DESC_MAP, TARGET_TITLE_MAP, INPUTPLACEHOLDER_MAP, ADDBUDGET_DESC_MAP } from './bid-mode';\r\n\r\nconst fractionDigits = {\r\n maximumFractionDigits: 2,\r\n minimumFractionDigits: 2,\r\n};\r\n\r\nexport class CampaignBidLandscapeViewModel extends BidLandscapeBaseViewModel {\r\n constructor({\r\n parentItem,\r\n parentView,\r\n i18n,\r\n entityType,\r\n inSimpleMode,\r\n dataToShow,\r\n }) {\r\n super({\r\n parentItem, parentView, entityType, i18n, inSimpleMode, dataToShow,\r\n });\r\n this.cpcSymbol = ko.observable(SYMBOL_PERCENT.INCREASE);\r\n this.disabledBid = !dataToShow[BID_MODE.CAMPAIGN_WIDE_BID] || false;\r\n this.disabledCPC = !dataToShow[BID_MODE.BID_SCALING] || false;\r\n this.campaignSelectMode = ko.observable(dataToShow[BID_MODE.BID_SCALING] ?\r\n BID_MODE.BID_SCALING :\r\n (_.filter(_.values(BID_MODE), key => !!dataToShow[key])[0] || BID_MODE.CAMPAIGN_WIDE_BID));\r\n this.hash = ko.computed(() => {\r\n if (dataToShow[this.campaignSelectMode()]) {\r\n return dataToShow[this.campaignSelectMode()].Hash;\r\n }\r\n return '';\r\n });\r\n this.showBid = ko.computed(() => this.campaignSelectMode() !== BID_MODE.BID_SCALING);\r\n this.showCPC = ko.computed(() => this.campaignSelectMode() === BID_MODE.BID_SCALING);\r\n this.showCurrencySymbol = ko.computed(() => this.campaignSelectMode() !== BID_MODE.TARGET_ROAS);\r\n this.showAdditionalBudgetPanel = ko.observable(false);\r\n this.keepCurrentBudget = ko.observable(true);\r\n this.currentBudget = ko.observable('');\r\n this.currencyCode = parentItem.CurrencyCode;\r\n this.campaignName = parentItem.EntityName;\r\n this.currentTargetValue = parentItem.CurrentTargetValue;\r\n this.currencySymbol = ko.observable(i18n.getCurrencySymbol(this.currencyCode));\r\n this.needBudget = ko.observable('');\r\n this.additionalBuget = ko.observable('');\r\n this.showImpr = ko.observable(false);\r\n this.showImprTop = ko.observable(false);\r\n this.showConv = ko.observable(false);\r\n this.showConvValue = ko.observable(false);\r\n this.focusInput = ko.computed(() => this.landscapePointsLength() === this.currentSelectedId());\r\n this.percentOptions = [\r\n { text: i18n.getString('Symbol_Percent_Increase'), value: SYMBOL_PERCENT.INCREASE },\r\n { text: i18n.getString('Symbol_Percent_Decrease'), value: SYMBOL_PERCENT.DECREASE },\r\n ];\r\n this.descrpition = ko.computed(() => i18n.getString(DESC_MAP[this.campaignSelectMode()]));\r\n this.additionalBudgetDescrpition = ko.computed(() => i18n.getString(ADDBUDGET_DESC_MAP[this.campaignSelectMode()]));\r\n this.targetTitle = ko.computed(() => i18n.getString(TARGET_TITLE_MAP[this.campaignSelectMode()]));\r\n this.inputPlaceholder = ko.computed(() => i18n.getString(INPUTPLACEHOLDER_MAP[this.campaignSelectMode()]));\r\n this.tableBidText = ko.computed(() => {\r\n const mode = this.campaignSelectMode() === BID_MODE.CAMPAIGN_WIDE_BID;\r\n return mode ?\r\n i18n.getString('KPI_Campaign_Bid') :\r\n i18n.getString('KPI_Campaign_MarginalCPC');\r\n });\r\n\r\n this.increseBudgetText = ko.computed({\r\n read: () => i18n.getString('Campaign_BidLandscape_AdditionalBudget_Increase')\r\n .replace('{0}', `${this.currentBudget()}`)\r\n .replace('{1}', `${this.needBudget()}`),\r\n });\r\n\r\n this.footerText = ko.computed({\r\n read: () => i18n.getString('Campaign_BidlandscapeHelpText')\r\n .replace('{0}', `${this.startDateString()}`)\r\n .replace('{1}', `${this.endDateString()}`),\r\n });\r\n\r\n this.currentSelectedColomn = ko.observable('clicks');\r\n\r\n this.updatedSelectedColumn = (event) => {\r\n const colName = $(event.target).data('name');\r\n if (colName) {\r\n this.currentSelectedColomn(colName);\r\n }\r\n return true;\r\n };\r\n\r\n this.campaignSelectMode.subscribe(() => {\r\n this.userInput('');\r\n this.cpcSymbol(SYMBOL_PERCENT.INCREASE);\r\n this.currentSelectedId(-1);\r\n this.convertDataForBidLandscape();\r\n });\r\n\r\n this.currentSelectedId.subscribe((newValue) => {\r\n const item = this.dataArray()[newValue];\r\n if (item && item.additionalBugetNeeds > 0) {\r\n this.showAdditionalBudgetPanel(true);\r\n this.keepCurrentBudget(false);\r\n this.currentBudget(i18n.formatCurrency(\r\n item.currentBudget,\r\n this.currencyCode,\r\n fractionDigits\r\n ));\r\n this.additionalBuget(item.currentBudget + item.additionalBugetNeeds);\r\n this.needBudget(i18n.formatCurrency(\r\n item.currentBudget + item.additionalBugetNeeds,\r\n this.currencyCode,\r\n fractionDigits\r\n ));\r\n } else {\r\n this.showAdditionalBudgetPanel(false);\r\n this.keepCurrentBudget(true);\r\n }\r\n });\r\n\r\n this.selectedValueUpdated = () => {\r\n this.inputErrorMessage('');\r\n if (this.currentSelectedId() === this.landscapePointsLength()) {\r\n let value = this.userInput();\r\n if (_.isEmpty(value) || !i18n.isValidDecimal(value, true)) {\r\n this.inputErrorMessage(i18n.getString('ErrorMessage_InputNumericValue'));\r\n } else if (i18n.parseDecimal(value) <= 0) {\r\n this.inputErrorMessage(i18n.getString('InputValueGreaterThanZero'));\r\n } else {\r\n value = i18n.parseDecimal(value);\r\n if (this.campaignSelectMode() === BID_MODE.BID_SCALING) {\r\n value = this.cpcSymbol() === SYMBOL_PERCENT.INCREASE ? value : -value;\r\n } else if (this.campaignSelectMode() === BID_MODE.TARGET_ROAS) {\r\n value /= 100;\r\n }\r\n this.valueToApply(value);\r\n }\r\n } else if (this.currentSelectedId() >= 0) {\r\n this.valueToApply(this.dataArray()[this.currentSelectedId()].bid);\r\n }\r\n };\r\n\r\n this.formatDateObj = obj => `${obj.Month}/${obj.Day}/${obj.Year}`;\r\n\r\n this.convertDataForBidLandscape = () => {\r\n if (!_.isEmpty(dataToShow) && !dataToShow.Nodata) {\r\n const dataType = dataToShow[this.campaignSelectMode()];\r\n const data = this.convertDataForChart(dataType);\r\n\r\n if (this.campaignSelectMode() === BID_MODE.TARGET_CPA) {\r\n this.currentSelectedColomn('conversion');\r\n } else if (this.campaignSelectMode() === BID_MODE.TARGET_ROAS) {\r\n this.currentSelectedColomn(data.showConvValue ? 'conversionValue' : 'conversion');\r\n } else if (!data.showClick) {\r\n this.currentSelectedColomn('impressions');\r\n }\r\n this.isClickGraph(data.showClick);\r\n this.showImpr(data.showImpr);\r\n this.showImprTop(data.showImprTop);\r\n this.showConv(data.showConv);\r\n this.showConvValue(data.showConvValue);\r\n this.dataArray(data.dataArray);\r\n if (this.currentSelectedId() === -1) {\r\n this.currentSelectedId(data.selectedIndex);\r\n }\r\n this.startDateString(this.formatDateObj(dataType.StartDate));\r\n this.endDateString(this.formatDateObj(dataType.EndDate));\r\n }\r\n };\r\n\r\n this.convertDataForChart = (data) => {\r\n let landscapePoints = [];\r\n let selectedIndex = -1;\r\n let showClick = false;\r\n let showImpr = false;\r\n let showImprTop = false;\r\n let showConv = false;\r\n let showConvValue = false;\r\n\r\n if (!_.isEmpty(data) && !_.isEmpty(data.BidLandscapePoints)) {\r\n const hasClick = this.campaignSelectMode() !== BID_MODE.TARGET_CPA;\r\n const hasImpressions = this.campaignSelectMode() !== BID_MODE.TARGET_CPA;\r\n const hasImpressionsTop = this.campaignSelectMode() !== BID_MODE.TARGET_CPA;\r\n const hasConversionValue = this.campaignSelectMode() === BID_MODE.TARGET_ROAS;\r\n const bidlandscapePoints = data.BidLandscapePoints;\r\n const target = TARGET_VALUE_MAP[this.campaignSelectMode()];\r\n landscapePoints = _.chain(bidlandscapePoints)\r\n .sortBy(point => -point[target])\r\n .uniq(point => point[target])\r\n .map((point, id) => {\r\n let bid = '';\r\n if (this.campaignSelectMode() === BID_MODE.CAMPAIGN_WIDE_BID || this.campaignSelectMode() === BID_MODE.TARGET_CPA) {\r\n bid = i18n.formatCurrency(point[target], this.currencyCode, fractionDigits);\r\n } else if (this.campaignSelectMode() === BID_MODE.TARGET_ROAS) {\r\n bid = `${i18n.formatDecimalToFixed(point[target] * 100)}%`;\r\n } else {\r\n const cpcSymbol = point[target] >= 0 ? '+' : '';\r\n bid = `${cpcSymbol}${i18n.formatDecimalToFixed(point[target] || 0)}%`;\r\n }\r\n const result = {\r\n impressions: point.Impressions || 0,\r\n impressionsStr: i18n.formatDecimalToInteger(point.Impressions || 0),\r\n mlImpressions: point.MLImpressions || 0,\r\n mlImpressionsStr: i18n.formatDecimalToInteger(point.MLImpressions || 0),\r\n bid: point[target],\r\n bidStr: bid,\r\n comment: '',\r\n index: id,\r\n clicks: point.Clicks || 0,\r\n clicksStr: i18n.formatDecimalToInteger(point.Clicks || 0),\r\n cost: point.Cost || 0,\r\n costStr: i18n.formatCurrency(point.Cost, this.currencyCode, fractionDigits),\r\n conversion: point.Conversion || 0,\r\n conversionStr: i18n.formatDecimalToInteger(point.Conversion || 0),\r\n conversionValue: point.ConversionValue || 0,\r\n conversionValueStr: i18n.formatDecimalToInteger(point.ConversionValue || 0),\r\n additionalBugetNeeds: point.AdditionalBugetNeeds || 0,\r\n additionalBugetNeedsStr: point.AdditionalBugetNeeds === null ?\r\n '-' :\r\n i18n.formatCurrency(point.AdditionalBugetNeeds, this.currencyCode, fractionDigits),\r\n currency: point.Currency,\r\n currentBudget: point.CurrentBudget,\r\n };\r\n\r\n if (this.showCPC() && point.Bid === 0) {\r\n selectedIndex = selectedIndex < 0 ? id : selectedIndex;\r\n result.comment = ` (${i18n.getString('Campaign_BidLandscape_Current')})`;\r\n }\r\n\r\n if (this.campaignSelectMode() === BID_MODE.TARGET_ROAS || this.campaignSelectMode() === BID_MODE.TARGET_CPA) {\r\n if (point[target] === this.currentTargetValue) {\r\n selectedIndex = selectedIndex < 0 ? id : selectedIndex;\r\n result.comment = ` (${i18n.getString('Campaign_BidLandscape_Current')})`;\r\n }\r\n }\r\n\r\n showClick = hasClick && point.Clicks > 0 ? true : showClick;\r\n showImpr = hasImpressions && point.Impressions > 0 ? true : showImpr;\r\n showImprTop = hasImpressionsTop && point.MLImpressions > 0 ? true : showImprTop;\r\n showConv = point.Conversion > 0 ? true : showConv;\r\n showConvValue = hasConversionValue && point.ConversionValue !== null ? true : showConvValue;\r\n return result;\r\n })\r\n .value();\r\n\r\n selectedIndex = selectedIndex < 0 && !_.isEmpty(bidlandscapePoints) ? 0 : selectedIndex;\r\n }\r\n return {\r\n dataArray: landscapePoints,\r\n selectedIndex,\r\n showClick,\r\n showImpr,\r\n showImprTop,\r\n showConv,\r\n showConvValue,\r\n };\r\n };\r\n }\r\n}\r\n","export const BID_MODE = {\r\n CAMPAIGN_WIDE_BID: 'CampaignWideBid',\r\n BID_SCALING: 'BidScaling',\r\n TARGET_ROAS: 'TROAS',\r\n TARGET_CPA: 'TCPA',\r\n};\r\nexport const SYMBOL_PERCENT = {\r\n INCREASE: 0,\r\n DECREASE: 1,\r\n};\r\n\r\nexport const STRING_MAP = {\r\n cost: 'KPI_Campaign_Cost',\r\n clicks: 'KPI_Campaign_Click',\r\n impressions: 'KPI_Campaign_Imp',\r\n mlImpressions: 'KPI_Campaign_MlImp',\r\n conversion: 'KPI_Campaign_Conversion',\r\n conversionValue: 'KPI_Campaign_ConversionValue',\r\n};\r\n\r\nexport const TARGET_VALUE_MAP = {\r\n CampaignWideBid: 'Bid',\r\n BidScaling: 'Bid',\r\n TROAS: 'TargetROAS',\r\n TCPA: 'TargetCPA',\r\n};\r\n\r\nexport const DESC_MAP = {\r\n CampaignWideBid: 'Campaign_BidLandscape_Desc',\r\n BidScaling: 'Campaign_BidLandscape_Desc',\r\n TCPA: 'Campaign_BidLandscape_TCPA_Desc',\r\n TROAS: 'Campaign_BidLandscape_TROAS_Desc',\r\n};\r\n\r\nexport const ADDBUDGET_DESC_MAP = {\r\n CampaignWideBid: 'Campaign_BidLandscape_AdditionalBudget_Desc',\r\n BidScaling: 'Campaign_BidLandscape_AdditionalBudget_Desc',\r\n TCPA: 'Campaign_BidLandscape_AdditionalBudget_Target_Desc',\r\n TROAS: 'Campaign_BidLandscape_AdditionalBudget_Target_Desc',\r\n};\r\n\r\nexport const TARGET_TITLE_MAP = {\r\n CampaignWideBid: 'KPI_Campaign_Bid',\r\n BidScaling: 'KPI_Campaign_Bid',\r\n TCPA: 'KPI_Campaign_TargetCPA',\r\n TROAS: 'KPI_Campaign_TargetROAS',\r\n};\r\n\r\nexport const INPUTPLACEHOLDER_MAP = {\r\n CampaignWideBid: 'Campaign_BidlandscapeInputPlaceholder',\r\n BidScaling: 'Campaign_BidlandscapeInputPlaceholder_Scaling',\r\n TCPA: 'Campaign_BidlandscapeInputPlaceholder_Target',\r\n TROAS: 'Campaign_BidlandscapeInputPlaceholder_Target',\r\n};\r\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"underscore\"), require(\"cron-parser\"), require(\"@bingads-webui-universal/primitive-utilities\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"underscore\", \"cron-parser\", \"@bingads-webui-universal/primitive-utilities\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"underscore\"), require(\"cron-parser\"), require(\"@bingads-webui-universal/primitive-utilities\")) : factory(root[\"underscore\"], root[\"cron-parser\"], root[\"@bingads-webui-universal/primitive-utilities\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__7__, __WEBPACK_EXTERNAL_MODULE__13__, __WEBPACK_EXTERNAL_MODULE__14__) {\nreturn ","export { CronFormatter } from './src/cron-formatter';\r\nexport { frequency as CRON_FREQUENCY } from './src/cron-parser-wrapper';\r\n","import _ from 'underscore';\r\nimport './number-is-nan';\r\nimport * as cron from './cron-parser-wrapper';\r\n\r\nconst FREQUENCY_KEYS_UPPER = {\r\n [cron.frequency.NONE]: 'CronFormatter_FrequencyGrain_DropdownMenu_None',\r\n [cron.frequency.MONTHLY]: 'CronFormatter_FrequencyGrain_DropdownMenu_Monthly',\r\n [cron.frequency.WEEKLY]: 'CronFormatter_FrequencyGrain_DropdownMenu_Weekly',\r\n [cron.frequency.DAILY]: 'CronFormatter_FrequencyGrain_DropdownMenu_Daily',\r\n [cron.frequency.ONCE]: 'CronFormatter_FrequencyGrain_DropdownMenu_Once',\r\n [cron.frequency.HOURLY]: 'CronFormatter_FrequencyGrain_DropdownMenu_Hourly',\r\n [cron.frequency.EVERY_6_HOURS]: 'CronFormatter_FrequencyGrain_DropdownMenu_Every_6_Hours',\r\n [cron.frequency.EVERY_12_HOURS]: 'CronFormatter_FrequencyGrain_DropdownMenu_Every_12_Hours',\r\n};\r\nconst FREQUENCY_KEYS_LOWER = {\r\n [cron.frequency.NONE]: 'CronFormatter_FrequencyGrain_Runs_None',\r\n [cron.frequency.MONTHLY]: 'CronFormatter_FrequencyGrain_Runs_Monthly',\r\n [cron.frequency.WEEKLY]: 'CronFormatter_FrequencyGrain_Runs_Weekly',\r\n [cron.frequency.DAILY]: 'CronFormatter_FrequencyGrain_Runs_Daily',\r\n [cron.frequency.ONCE]: 'CronFormatter_FrequencyGrain_Runs_Once',\r\n [cron.frequency.HOURLY]: 'CronFormatter_FrequencyGrain_Runs_Hourly',\r\n [cron.frequency.EVERY_6_HOURS]: 'CronFormatter_FrequencyGrain_Runs_Every_6_Hours',\r\n [cron.frequency.EVERY_12_HOURS]: 'CronFormatter_FrequencyGrain_Runs_Every_12_Hours',\r\n};\r\n\r\nconst TEMPLATE_KEYS = {\r\n [cron.frequency.MONTHLY]: 'CronFormatter_Frequency_MonthlyTemplate',\r\n [cron.frequency.WEEKLY]: 'CronFormatter_Frequency_WeeklyTemplate',\r\n [cron.frequency.DAILY]: 'CronFormatter_Frequency_DailyTemplate',\r\n [cron.frequency.EVERY_6_HOURS]: 'CronFormatter_Frequency_Template_Every_N_Hours',\r\n [cron.frequency.EVERY_12_HOURS]: 'CronFormatter_Frequency_Template_Every_N_Hours',\r\n};\r\n\r\nconst BACKWARD_COMPATIBLE_ENABLED_FREQUENCIES = [\r\n cron.frequency.NONE,\r\n cron.frequency.MONTHLY,\r\n cron.frequency.WEEKLY,\r\n cron.frequency.DAILY,\r\n];\r\n\r\nfunction stringToDate(startedAt) {\r\n let startedAtDateTime = startedAt;\r\n\r\n if (_.isString(startedAt)) {\r\n startedAtDateTime = new Date(startedAt);\r\n }\r\n\r\n if (!_.isDate(startedAtDateTime) || _.isNaN(startedAtDateTime.valueOf())) {\r\n throw Error('Expected startedAt to be a valid date.');\r\n }\r\n\r\n return startedAtDateTime;\r\n}\r\n\r\n/**\r\n * Formats cron strings and enumerates date ranges for building cron strings.\r\n */\r\nexport class CronFormatter {\r\n /**\r\n * Construct a CronFormatter object.\r\n * @param {Object} i18n - the I18nModel object which can format dates, units, etc.\r\n */\r\n constructor({\r\n i18n,\r\n }) {\r\n this.i18n = i18n;\r\n }\r\n\r\n /**\r\n * Localize a cron model.\r\n *\r\n * @param {Object} cronModel - a model object which is a result from called cron.parse().\r\n * @param {Integer} [cronModel.frequency] - the frequency of the schedule.\r\n * @param {Integer} [cronModel.dayOfMonth] - the day of the month of the schedule.\r\n * @param {Integer} [cronModel.dayOfWeek] - the day of the week of the schedule.\r\n * @param {Integer} [cronModel.hour] - the hour of the schedule.\r\n * @returns {Object} the cron model with supported files replaced by localized values.\r\n */\r\n formatCronModel(cronModel) {\r\n const LOCALIZERS = {\r\n dayOfMonth: this.formatDayOfMonth.bind(this),\r\n dayOfWeek: this.formatDayOfWeek.bind(this),\r\n frequency: this.formatCronFrequency.bind(this),\r\n hour: this.formatHourOfDay.bind(this),\r\n };\r\n\r\n const localizedCronModel = {};\r\n\r\n _.each(_.keys(cronModel), (key) => {\r\n if (_.has(LOCALIZERS, key)) {\r\n const value = cronModel[key];\r\n const localizer = LOCALIZERS[key];\r\n const localizedValue = localizer(value, this.i18n);\r\n\r\n localizedCronModel[key] = localizedValue;\r\n } else {\r\n throw new Error(`No localizer for key: ${key}`);\r\n }\r\n });\r\n\r\n return localizedCronModel;\r\n }\r\n\r\n /**\r\n * Localize a raw cron string.\r\n *\r\n * @param {String} cronString - the raw cron string, e.g. \"0 16 * * * *\"\r\n * @returns {String} a human-readable, localized representation of the cron string,\r\n * e.g. \"Daily at 4 PM\"\r\n */\r\n formatCronString(cronString) {\r\n const cronModel = cron.parse(cronString);\r\n const { frequency } = cronModel;\r\n const localizedCronModel = this.formatCronModel(cronModel);\r\n\r\n const templateKey = TEMPLATE_KEYS[frequency];\r\n\r\n if (!templateKey) {\r\n throw new Error(`No template key for frequency: ${frequency}`);\r\n }\r\n\r\n const localizedCronString = this.i18n.getString(templateKey, localizedCronModel);\r\n\r\n if (!localizedCronString) {\r\n throw new Error('localizedCronString was empty, is i18n configured correctly?');\r\n }\r\n\r\n return localizedCronString;\r\n }\r\n\r\n /**\r\n * Localize a date time into full format. E.g. \"Monday, January 29, 2018 at 4:37:26 PM GMT-05:00\"\r\n *\r\n * @param {String|Date} startedAt - the datetime to be formatted.\r\n * @param {Object} options - globalize date format options.\r\n * @returns {String} the formated \"started at\" string.\r\n */\r\n formatDateTimeLong(startedAt, options) {\r\n const startedAtDateTime = stringToDate(startedAt);\r\n\r\n return this.i18n.formatDate(startedAtDateTime, _.defaults({}, options, { datetime: 'long' }));\r\n }\r\n\r\n /**\r\n * Localize a date time into short format. E.g. \"1/29/18, 4:44 PM\"\r\n *\r\n * @param {String|Date} startedAt - the datetime to be formatted.\r\n * @param {Object} options - globalize date format options.\r\n * @returns {String} the formated \"started at\" string.\r\n */\r\n formatDateTimeShort(startedAt, options) {\r\n const startedAtDateTime = stringToDate(startedAt);\r\n\r\n return this.i18n.formatDate(startedAtDateTime, _.defaults({}, options, { datetime: 'short' }));\r\n }\r\n\r\n /**\r\n * Localize the day of month.\r\n *\r\n * @param {String|Integer} dayOfMonth - the day of month (1-31).\r\n * @returns {String} the human-readable, localized representation of the day of the month.\r\n */\r\n formatDayOfMonth(dayOfMonth) {\r\n return String(dayOfMonth);\r\n }\r\n\r\n /**\r\n * Localize the day of week.\r\n *\r\n * @param {String|Integer} dayOfWeek - the day of week (0 - 6) (Sunday=0).\r\n * @returns {String} the human-readable, localized representation of the day of the week.\r\n */\r\n formatDayOfWeek(dayOfWeek) {\r\n return this.i18n.formatDate(new Date(Date.UTC(2017, 0, dayOfWeek + 1)), { skeleton: 'EEEE', timeZone: 'UTC' });\r\n }\r\n\r\n /**\r\n * Localizes a duration of a task. E.g. \"30 sec.\"\r\n *\r\n * @param {Number} durationInSeconds The duration in seconds the task ran.\r\n * @returns {String} the localized duration string.\r\n */\r\n formatDuration(durationInSeconds) {\r\n const SECONDS_PER_MINUTE = 60;\r\n\r\n if (!_.isNumber(durationInSeconds) || durationInSeconds < 0) {\r\n throw Error('Expected durationInSeconds to be a positive Number');\r\n }\r\n\r\n let localizedDuration;\r\n const durationInMinutes = durationInSeconds / SECONDS_PER_MINUTE;\r\n\r\n if (durationInMinutes >= 1) {\r\n // If it is 1 minute or greater\r\n const flooredMinutes = Math.floor(durationInMinutes);\r\n\r\n localizedDuration = this.i18n.formatUnit(flooredMinutes, 'minute', { form: 'short' });\r\n } else {\r\n // It is less than 1 minute\r\n const flooredSeconds = Math.floor(durationInSeconds);\r\n\r\n localizedDuration = this.i18n.formatUnit(flooredSeconds, 'second', { form: 'short' });\r\n }\r\n\r\n return localizedDuration;\r\n }\r\n\r\n /**\r\n * Localize the hour of day.\r\n *\r\n * @param {String|Integer} hour - the hour of day (0 - 23).\r\n * @returns {String} the human-readable, localized representation of the hour of day.\r\n */\r\n formatHourOfDay(hour) {\r\n return this.i18n.formatDate(new Date(Date.UTC(2017, 0, 1, hour)), { skeleton: 'h', timeZone: 'UTC' });\r\n }\r\n\r\n /**\r\n * Localize a cron frequency enum defined in cron lib.\r\n *\r\n * @param {String|Integer} frequency - the frequency enum value (defined in the cron lib).\r\n * @returns {String} the human-readable, localized representation of the frequency enum.\r\n */\r\n formatCronFrequency(frequency) {\r\n const frequencyKey = FREQUENCY_KEYS_LOWER[frequency];\r\n\r\n const localizedFrequencyString = this.i18n.getString(frequencyKey);\r\n\r\n return localizedFrequencyString;\r\n }\r\n\r\n formatCronFrequencyUpperCase(frequency) {\r\n const frequencyKey = FREQUENCY_KEYS_UPPER[frequency];\r\n\r\n return this.i18n.getString(frequencyKey);\r\n }\r\n\r\n /**\r\n * Enumerates localized frequency grains.\r\n * @param {Number[]} [enabledFrequencies=BACKWARD_COMPATIBLE_ENABLED_FREQUENCIES]\r\n * array of frequencies to include\r\n * @returns {Object} map of cron frequency enum to localized frequencies.\r\n */\r\n getCronFrequencies(enabledFrequencies = BACKWARD_COMPATIBLE_ENABLED_FREQUENCIES) {\r\n return _.chain(FREQUENCY_KEYS_UPPER)\r\n .pick(enabledFrequencies)\r\n .mapObject(key => this.i18n.getString(key))\r\n .value();\r\n }\r\n\r\n /**\r\n * Returns the enum for all possible cron frequencies.\r\n * @returns {Object} Enum of keys (e.g. None) to integers (e.g. -1).\r\n */\r\n getCronFrequenciesEnum() {\r\n return _.clone(cron.frequency);\r\n }\r\n\r\n /**\r\n * Enumerates localized days of the month.\r\n * @returns {Object} map of day index (1 - 31) to formatted days.\r\n */\r\n getDaysOfMonth() {\r\n const dayRange = _.range(1, 32);\r\n const dayRangeStrings = _.map(dayRange, index => this.formatDayOfMonth(index));\r\n const localizedDaysOfMonth = _.object(dayRange, dayRangeStrings);\r\n\r\n return localizedDaysOfMonth;\r\n }\r\n\r\n /**\r\n * Enumerates localized days of the week.\r\n * @returns {Object} map of index (0 - 6, 0=Sunday) to localized days of the week\r\n * (Sunday, Monday ...).\r\n */\r\n getDaysOfWeek() {\r\n const indexArray = _.range(0, 7);\r\n const daysOfWeekArray = _.map(indexArray, index => this.formatDayOfWeek(index));\r\n const daysOfWeek = _.object(indexArray, daysOfWeekArray);\r\n\r\n return daysOfWeek;\r\n }\r\n\r\n /**\r\n * Enumerates localized hours of day.\r\n * @returns {Object} map of hour index (0 - 23) to localized (12-hour-format) hours of the day.\r\n */\r\n getHoursOfDay() {\r\n const indexArray = _.range(0, 24);\r\n const hoursOfDayArray = _.map(indexArray, index => this.formatHourOfDay(index));\r\n const hoursOfDay = _.object(indexArray, hoursOfDayArray);\r\n\r\n return hoursOfDay;\r\n }\r\n\r\n /**\r\n * Parse a cron string into a cron model.\r\n *\r\n * @param {String} cronString - a raw cron string.\r\n * @returns {Object} a cron model which may contain fields min, hour, dayOfWeek, dayOfMonth,\r\n * month, and year.\r\n */\r\n parse(cronString) {\r\n return cron.parse(cronString);\r\n }\r\n\r\n /**\r\n * Converts a cron model into a cron string.\r\n *\r\n * @param {Object} cronModel - a model which is the result of cron.parse().\r\n * @returns {String} a raw cron string.\r\n */\r\n toCronString(cronModel) {\r\n return cron.toCronString(cronModel);\r\n }\r\n}\r\n","/* istanbul ignore file */\r\n/* eslint-disable no-self-compare */\r\n/* eslint-disable eqeqeq */\r\nimport _ from 'underscore';\r\n\r\nfunction isNaN(value) {\r\n return value !== null && (value != value || +value != value);\r\n}\r\n\r\n// Polyfill for cronparser component which is not published by us\r\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Polyfill\r\nif (!_.has(Number, 'isNaN')) {\r\n _.extend(Number, { isNaN });\r\n}\r\n","/* eslint-disable no-underscore-dangle */\r\n\r\n// This file was ported from AdsAppUI repo.\r\n\r\n// / Supported expression(s):\r\n// / * * * * * *\r\n// / - - - - - -\r\n// / | | | | | |\r\n// / | | | | | +----- year (1 - 9999)\r\n// / | | | | +----- day of week (0 - 6) (Sunday=0)\r\n// / | | | +------- month (1 - 12)\r\n// / | | +--------- day of month (1 - 31)\r\n// / | +----------- hour (0 - 23)\r\n// / +------------- min (0 - 59)\r\n// /\r\n// / Valid scenarios:\r\n// / a. \"1 2 07 01 * 2015\": Run at \"07/01/2015 02:01\"\r\n// / b. \"0 16 * * * *\": Run daily at 4:00 pm\r\n// / c. \"0 16 * * 3 *\": Run weekly, every Wed at 4:00 pm\r\n// / d. \"0 16 1 * * *\": Run monthly, every 1st of the month\r\n// / Note: If the year is not specified (i.e. \"0 16 1 * *\"), the year is defaulted to any.\r\n\r\nimport _ from 'underscore';\r\nimport { parseExpressionSync } from 'cron-parser';\r\nimport { curlyTemplate } from '@bingads-webui-universal/primitive-utilities';\r\n\r\n/**\r\n * Enumerates possible schedule frequencies.\r\n */\r\nexport const frequency = {\r\n NONE: -1,\r\n DAILY: 0,\r\n WEEKLY: 1,\r\n MONTHLY: 2,\r\n ONCE: 3,\r\n HOURLY: 4,\r\n EVERY_6_HOURS: 5,\r\n EVERY_12_HOURS: 6,\r\n};\r\n\r\nfunction isEqualInterval(range, interval, values) {\r\n if (_.size(values) < 2) return false;\r\n const valuesToNextRange = [...values, range + values[0]];\r\n for (let i = 0; i < valuesToNextRange.length - 1; i += 1) {\r\n if (valuesToNextRange[i + 1] - valuesToNextRange[i] !== interval) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\n\r\nfunction getFrequency(cron) {\r\n if (cron.year.length > 1) {\r\n // run once, year value is not *\r\n return frequency.ONCE;\r\n } else if (cron._fields.dayOfMonth.length === 1) {\r\n // monthly\r\n return frequency.MONTHLY;\r\n } else if (cron._fields.dayOfWeek.length === 1) {\r\n // Weekly\r\n return frequency.WEEKLY;\r\n } else if (cron._fields.hour.length === 1) {\r\n // daily\r\n return frequency.DAILY;\r\n } else if (cron._fields.minute.length === 1 &&\r\n cron._fields.hour.length === 4 &&\r\n isEqualInterval(24, 6, cron._fields.hour)) {\r\n // every 6-hour\r\n return frequency.EVERY_6_HOURS;\r\n } else if (cron._fields.minute.length === 1 &&\r\n cron._fields.hour.length === 2 &&\r\n isEqualInterval(24, 12, cron._fields.hour)) {\r\n // every 12-hour\r\n return frequency.EVERY_12_HOURS;\r\n }\r\n\r\n // hourly\r\n return frequency.HOURLY;\r\n}\r\n\r\n\r\n// Input string is expected to have year component init\r\n// we strip the year component first and pass the rest of\r\n// the standard cron string to the library\r\nfunction init(cronString) {\r\n if (!cronString) {\r\n return null;\r\n }\r\n\r\n const tokens = cronString.split(' ');\r\n let year;\r\n let modifiedCronString = cronString;\r\n\r\n if (tokens.length > 5) {\r\n // Year is added to the cron string\r\n year = _.last(tokens);\r\n modifiedCronString = _.initial(tokens).join(' ');\r\n }\r\n\r\n // adding padding for seconds, which is required by the 3rd-party library cron-parser.\r\n modifiedCronString = `* ${modifiedCronString}`;\r\n\r\n // eslint-disable-next-line\r\n const cronResult = parseExpressionSync(modifiedCronString);\r\n\r\n cronResult.year = year;\r\n\r\n return cronResult;\r\n}\r\n\r\n/**\r\n * Parse a cron string into a cron model.\r\n *\r\n * @param {String} cronString - a raw cron string.\r\n * @returns {Object} a cron model which may contain fields min, hour, dayOfWeek, dayOfMonth,\r\n * month, and year.\r\n */\r\nexport function parse(cronString) {\r\n if (!cronString) {\r\n throw new Error(`Empty cron string: ${cronString}`);\r\n }\r\n\r\n const cron = init(cronString);\r\n\r\n if (!cron) {\r\n throw new Error(`Unable to parse cron string: ${cronString}`);\r\n }\r\n\r\n const {\r\n minute,\r\n hour,\r\n dayOfWeek,\r\n dayOfMonth,\r\n month,\r\n } = cron._fields;\r\n\r\n const cronModel = {\r\n frequency: getFrequency(cron),\r\n };\r\n\r\n switch (cronModel.frequency) {\r\n case frequency.ONCE:\r\n cronModel.year = parseInt(cron.year, 10);\r\n [cronModel.month] = month;\r\n [cronModel.dayOfMonth] = dayOfMonth;\r\n [cronModel.hour] = hour;\r\n break;\r\n case frequency.MONTHLY:\r\n [cronModel.dayOfMonth] = dayOfMonth;\r\n [cronModel.hour] = hour;\r\n break;\r\n case frequency.WEEKLY:\r\n [cronModel.dayOfWeek] = dayOfWeek;\r\n [cronModel.hour] = hour;\r\n break;\r\n case frequency.DAILY:\r\n [cronModel.hour] = hour;\r\n break;\r\n case frequency.HOURLY:\r\n [cronModel.min] = minute;\r\n break;\r\n case frequency.EVERY_6_HOURS:\r\n case frequency.EVERY_12_HOURS:\r\n // TODO: add min and hour to support min and hour offsets\r\n // [cronModel.min] = minute;\r\n // [cronModel.hour] = hour;\r\n break;\r\n default:\r\n throw new Error(`Unknown frequency: ${cronModel.frequency}`);\r\n }\r\n\r\n return cronModel;\r\n}\r\n\r\n/**\r\n * Converts a cron model into a cron string.\r\n *\r\n * @param {Object} cronModel - a model which is the result of cron.parse().\r\n * @returns {String} a raw cron string.\r\n */\r\nexport function toCronString(cronModel) {\r\n const defaultCronModel = {\r\n min: '0',\r\n hour: '*',\r\n dayOfWeek: '*',\r\n dayOfMonth: '*',\r\n month: '*',\r\n year: '*',\r\n };\r\n\r\n const finalCronModel = _.defaults(cronModel, defaultCronModel);\r\n\r\n if (finalCronModel.frequency === frequency.EVERY_6_HOURS ||\r\n finalCronModel.frequency === frequency.EVERY_12_HOURS) {\r\n const startHour = finalCronModel.hour ? finalCronModel.hour : '*';\r\n const interval = finalCronModel.frequency === frequency.EVERY_6_HOURS ?\r\n 6 : 12;\r\n finalCronModel.hour = `${startHour}/${interval}`;\r\n }\r\n\r\n return curlyTemplate('{{min}} {{hour}} {{dayOfMonth}} {{month}} {{dayOfWeek}} {{year}}')(finalCronModel);\r\n}\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__13__;","module.exports = __WEBPACK_EXTERNAL_MODULE__14__;","module.exports = __WEBPACK_EXTERNAL_MODULE__19__;","import { DateFilter } from './src/date-filter/date-filter';\r\n\r\nexport {\r\n DateFilter,\r\n};\r\n","import _ from 'underscore';\r\nimport { DeterministicView, helpers } from '@bingads-webui/deterministic-view';\r\nimport $ from 'jquery';\r\n\r\nimport { DateFilterDropdownView } from '../dropdown/date-filter-dropdown-view';\r\nimport { DateFilterPanelsContainer } from '../panels-container/date-filter-panels-container';\r\n\r\nimport template from './date-filter-template.pug';\r\n\r\nconst { updateView, ensureChildView } = helpers;\r\n\r\n/**\r\n * The date filter component\r\n *\r\n * @class DateFilter\r\n * @param {Object} [DropdownView] - The view to show the selected date ranges\r\n * and open or close panels\r\n * @param {Object} i18n - The i18n component. It should have method formatDate for formatting\r\n * dates and getString for getting localized strings\r\n * @param {string} dateFormat - The skeleton date format. Eg: yMd, which corresponds to\r\n * M/d/y in en-us locale\r\n * @param {Boolean} isComparisonEnabled - Whether compared date range panel is enabled or not\r\n * @param {Function} [getDateRanges] - The optional function to get primary date ranges\r\n * @param {Function} [enabledRangesPredicate] - The optional function to filter primary date ranges\r\n * It is passed each date range in turn and should return true for the ranges to use\r\n * @param {Function} [getComparedDateRanges] - The optional function to get compared date ranges\r\n * @extends {View}\r\n */\r\nexport class DateFilter extends DeterministicView {\r\n initialize(options) {\r\n this.options = options;\r\n this.DropdownView = this.options.DropdownView || DateFilterDropdownView;\r\n this.customCloseMenuSelector = this.options.datePickerSelector || '.k-calendar';\r\n $('body').on('click', e => this.closeMenuOnOutsideClick(e));\r\n }\r\n\r\n closeMenuOnOutsideClick(e) {\r\n const clickedEl = $(e.target);\r\n if (!clickedEl.closest('.dropdown-menu', this.$el).length &&\r\n !clickedEl.closest('.dropdown-toggle', this.$el).length &&\r\n // click on calender of date picker\r\n !clickedEl.closest(this.customCloseMenuSelector).length &&\r\n // click on list of time picker\r\n !clickedEl.closest('.k-list').length &&\r\n // click on month selector of date picker\r\n !clickedEl.closest('.k-content').length\r\n ) {\r\n this.$('.dropdown-toggle').parent().removeClass('open');\r\n }\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click .dropdown-toggle': () => this.toggle(),\r\n };\r\n }\r\n\r\n /**\r\n * Sets the state of the date filter\r\n *\r\n * @param {Object} newState - The new state of the component\r\n * @param {Date} newState.today - The date for today to be used in calculating date ranges\r\n * @param {Object} newState.selection - The date filter preference to use by default\r\n * @param {Object} newState.selection.primaryRange - The primary range selected\r\n * @param {Date} newState.selection.primaryRange.start - The primary range start date\r\n * @param {Date} newState.selection.primaryRange.end - The primary range end date\r\n * @param {Number} [newState.selection.primaryRange.grain] - The grain for the primary range\r\n * @param {string} newState.selection.primaryRange.key - The key for the primary range selected\r\n * @param {Object} [newState.selection.comparedRange] - The compared/PoP range selected\r\n * @param {Date} newState.selection.comparedRange.start - The compared range start date\r\n * @param {Date} newState.selection.comparedRange.end - The compared range end date\r\n * @param {string} newState.selection.comparedRange.key - The key for the compared range\r\n * @returns {DateFilter} this\r\n */\r\n setState({ selection, today }) {\r\n const datePanelsContainer = ensureChildView(\r\n this,\r\n 'date-filter-panels-container',\r\n DateFilterPanelsContainer,\r\n _.defaults({ today }, _.omit(this.options, 'model')),\r\n { 'date-range-selected': 'apply' }\r\n ).setState({\r\n checkedSelection: selection,\r\n comparisonToggleChecked: this.options.isComparisonEnabled && selection.comparedRange,\r\n });\r\n\r\n const { checkedSelection } = datePanelsContainer.getState();\r\n const appliedSelection = _.mapObject(checkedSelection, range => this.cloneDateRange(range));\r\n\r\n ensureChildView(this, 'dropdown-view', this.DropdownView, {\r\n i18n: this.options.i18n,\r\n dateFormat: this.options.dateFormat,\r\n timeFormat: this.options.timeFormat,\r\n }).setState({ selection: appliedSelection });\r\n\r\n this.model.set({\r\n selection: appliedSelection, today,\r\n });\r\n\r\n return this;\r\n }\r\n\r\n cloneDateRange(range) {\r\n if (range) {\r\n const retValue = _.clone(range);\r\n const { start, end } = range;\r\n retValue.start = start ? new Date(start) : start;\r\n retValue.end = end ? new Date(end) : end;\r\n return retValue;\r\n }\r\n return range;\r\n }\r\n\r\n /**\r\n * Apply the selected date filter preference and trigger event\r\n *\r\n * @private\r\n * @param {Object} checkedSelection - The selected date ranges\r\n * @param {Object} checkedSelection.primaryRange - The primary range selected\r\n * @param {Date} checkedSelection.primaryRange.start - The primary range start date\r\n * @param {Date} checkedSelection.primaryRange.end - The primary range end date\r\n * @param {Number} [checkedSelection.primaryRange.grain] - The grain for the primary range\r\n * @param {string} checkedSelection.primaryRange.key - The key for the primary range selected\r\n * @param {Object} [checkedSelection.comparedRange] - The compared/PoP range selected\r\n * @param {Date} checkedSelection.comparedRange.start - The compared range start date\r\n * @param {Date} checkedSelection.comparedRange.end - The compared range end date\r\n * @param {string} checkedSelection.comparedRange.key - The key for the compared range\r\n * @returns {undefined}\r\n */\r\n apply(checkedSelection) {\r\n const appliedSelection = _.mapObject(checkedSelection, range => this.cloneDateRange(range));\r\n updateView(this, {\r\n selection: appliedSelection,\r\n });\r\n this.trigger('date-range-selected', appliedSelection);\r\n this.getChild('dropdown-view').setState({\r\n selection: appliedSelection,\r\n });\r\n this.toggle();\r\n }\r\n\r\n /**\r\n * Gets the selected date filter preference\r\n * @returns {Object} selection - The selected date ranges\r\n */\r\n getSelection() {\r\n const { selection } = this.getState();\r\n const state = {\r\n primaryRange: _.pick(selection.primaryRange, 'start', 'end', 'grain', 'key'),\r\n };\r\n if (selection.comparedRange) {\r\n state.comparedRange = _.pick(selection.comparedRange, 'start', 'end', 'key');\r\n }\r\n return state;\r\n }\r\n\r\n /**\r\n * Toggles the date filter panels visibility\r\n * @returns {undefined}\r\n */\r\n toggle() {\r\n this.$('.dropdown-toggle').parent().toggleClass('open');\r\n }\r\n\r\n /**\r\n * Gets the template for the date filter view\r\n * @returns {Function} - The template function\r\n */\r\n get template() {\r\n return template;\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { DeterministicView } from '@bingads-webui/deterministic-view';\r\nimport { RANGES } from '@bingads-webui/date-ranges';\r\nimport template from './date-filter-dropdown-template.pug';\r\n\r\n/**\r\n * The dropdown view that will show the date\r\n * range selections made by the user.\r\n * @class DateFilterDropdownView\r\n * @extends {View}\r\n * @param {Object} selection - The selected date ranges\r\n */\r\nexport class DateFilterDropdownView extends DeterministicView {\r\n /**\r\n * Initialize the DateFilterDropdownView\r\n * @param {Object} options - View constructor options\r\n * @returns {void}\r\n */\r\n initialize(options) {\r\n this.options = options;\r\n this.RANGES = RANGES;\r\n }\r\n\r\n /**\r\n * Set the state of the dropdown view\r\n * @param {Object} selection - The selected date ranges\r\n * @returns {Object} this\r\n */\r\n setState({ selection }) {\r\n const { primaryRange } = selection;\r\n const comparedRange = {\r\n start: _.result(selection.comparedRange, 'start'),\r\n end: _.result(selection.comparedRange, 'end'),\r\n text: _.result(selection.comparedRange, 'text'),\r\n };\r\n this.model.set({ primaryRange, comparedRange });\r\n return this;\r\n }\r\n\r\n get template() {\r\n return template;\r\n }\r\n}\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__243__;","var pug = require(\"!../../../../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (model, view) {var i18n = view.options.i18n\nvar dateFormat = {skeleton: view.options.dateFormat}\nvar timeFormat = {skeleton: view.options.timeFormat}\nvar RANGES = view.RANGES\npug_html = pug_html + \"\\u003Cdiv class=\\\"text-left col-xs-11\\\"\\u003E\\u003Cdiv class=\\\"type-bold primary-range\\\"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = model.primaryRange.text) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('DateFilter_RangeSeparator')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.formatDate(model.primaryRange.start, dateFormat)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\nif (model.primaryRange.key === RANGES.CUSTOM_TIME) {\npug_html = pug_html + \" \\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.formatDate(model.primaryRange.start, timeFormat)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('DateFilter_StartEndDateSeparator')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.formatDate(model.primaryRange.end, timeFormat)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\n}\nelse\nif (model.primaryRange.end-model.primaryRange.start!=0) {\npug_html = pug_html + \"\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('DateFilter_StartEndDateSeparator')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.formatDate(model.primaryRange.end, dateFormat)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\nif (model.comparedRange.start) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"text-muted type-normal compared-range\\\"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('DateFilter_Label_CompareTo')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('DateFilter_RangeSeparator')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.formatDate(model.comparedRange.start, dateFormat)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\nif (model.comparedRange.end-model.comparedRange.start!=0) {\npug_html = pug_html + \"\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('DateFilter_StartEndDateSeparator')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.formatDate(model.comparedRange.end, dateFormat)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"icon-right glyphicon glyphicon-triangle-bottom\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"model\" in locals_for_with?locals_for_with.model:typeof model!==\"undefined\"?model:undefined,\"view\" in locals_for_with?locals_for_with.view:typeof view!==\"undefined\"?view:undefined));;return pug_html;};\nmodule.exports = template;","import _ from 'underscore';\r\nimport { DeterministicView, helpers } from '@bingads-webui/deterministic-view';\r\nimport { PrimaryDateRangePanel } from '../panels/primary/primary-date-range-panel';\r\nimport { ComparedDateRangePanel } from '../panels/compared/compared-date-range-panel';\r\n\r\nimport template from './date-filter-panels-container-template.pug';\r\n\r\nconst { updateView } = helpers;\r\n\r\n/**\r\n * Container class for the panels to show in the date filter\r\n * @class DateFilterPanelsContainer\r\n * @extends {View}\r\n * @param {Date} today - The date for today to be used in calculating date ranges\r\n * @param {Object} i18n - The date for today to be used in calculating date ranges\r\n * @param {string} dateFormat - The date for today to be used in calculating date ranges\r\n * @param {Boolean} isComparisonEnabled - Whether compared date range panel is enabled or not\r\n * @param {Function} [getDateRanges] - The optional function to get primary date ranges\r\n * @param {Function} [enabledRangesPredicate] - The optional function to filter primary date ranges\r\n * It is passed each date range in turn and should return true for the ranges to use\r\n * @param {Function} [getComparedDateRanges] - The optional function to get compared date ranges\r\n\r\n */\r\nexport class DateFilterPanelsContainer extends DeterministicView {\r\n initialize(options) {\r\n this.options = options;\r\n const {\r\n i18n,\r\n dateFormat,\r\n today,\r\n getDateRanges,\r\n getComparedDateRanges,\r\n enabledRangesPredicate,\r\n isComparisonEnabled,\r\n minDate,\r\n maxDate,\r\n defaultTimeRange = {},\r\n } = this.options;\r\n\r\n _.defaults(defaultTimeRange, {\r\n start: new Date('2017/01/01 8:00'),\r\n end: new Date('2017/01/01 17:00'),\r\n });\r\n this.setChild('primary-date-range-panel', new PrimaryDateRangePanel({\r\n dateRangesAccessor: getDateRanges,\r\n enabledRangesPredicate,\r\n i18n,\r\n dateFormat,\r\n today,\r\n showDates: true,\r\n minDate,\r\n maxDate,\r\n defaultTimeRange,\r\n }));\r\n\r\n const primaryDateRangePanel = this.getChild('primary-date-range-panel');\r\n primaryDateRangePanel.on('range-checked', (checked) => {\r\n this.rangeChecked(checked);\r\n });\r\n\r\n if (isComparisonEnabled) {\r\n this.setChild(\r\n 'compared-date-range-panel',\r\n new ComparedDateRangePanel({\r\n dateRangesAccessor: getComparedDateRanges,\r\n i18n,\r\n dateFormat,\r\n today,\r\n showDates: false,\r\n })\r\n );\r\n const comparedDateRangePanel = this.getChild('compared-date-range-panel');\r\n\r\n comparedDateRangePanel.on('range-checked', checked => this.rangeChecked(checked));\r\n primaryDateRangePanel.on('range-checked', checked => comparedDateRangePanel.onPrimaryRangeChanged(checked));\r\n }\r\n }\r\n\r\n /**\r\n * Events fired by the date filter panels container\r\n */\r\n get events() {\r\n return {\r\n 'click .apply': () => {\r\n this.apply();\r\n },\r\n 'click .toggle-button': (e) => {\r\n this.model.set({\r\n comparisonToggleChecked: !this.model.get('comparisonToggleChecked'),\r\n });\r\n e.stopPropagation();\r\n },\r\n };\r\n }\r\n\r\n /**\r\n * Sets the state of the panels container\r\n * @param {Object} newState.checkedSelection - Date filter preference to use by default\r\n * @param {Object} newState.checkedSelection.primaryRange - Primary range selected\r\n * @param {Date} newState.checkedSelection.primaryRange.start - Primary range start date\r\n * @param {Date} newState.checkedSelection.primaryRange.end - Primary range end date\r\n * @param {Number} [newState.checkedSelection.primaryRange.grain] - Grain for the primary range\r\n * @param {string} newState.checkedSelection.primaryRange.key - Key for the primary range\r\n * @param {Object} [newState.checkedSelection.comparedRange] - Compared date range selected\r\n * @param {Date} newState.checkedSelection.comparedRange.start - Compared range start date\r\n * @param {Date} newState.checkedSelection.comparedRange.end - Compared range end date\r\n * @param {string} newState.checkedSelection.comparedRange.key - Key for the compared range\r\n * @returns {Object} this\r\n */\r\n setState({\r\n checkedSelection,\r\n comparisonToggleChecked,\r\n }) {\r\n this.model.set({ comparisonToggleChecked });\r\n\r\n this.getChild('primary-date-range-panel')\r\n .setState({ selection: checkedSelection.primaryRange });\r\n\r\n if (this.options.isComparisonEnabled && comparisonToggleChecked) {\r\n this.getChild('compared-date-range-panel')\r\n .setState({\r\n selection: checkedSelection.comparedRange || {},\r\n primaryRange: checkedSelection.primaryRange,\r\n });\r\n }\r\n\r\n const selectedRanges = this.getCheckedRanges();\r\n\r\n this.model.set({\r\n checkedSelection: selectedRanges,\r\n });\r\n return this;\r\n }\r\n\r\n /**\r\n * Callback function for when a date range has been checked\r\n * @returns {undefined}\r\n */\r\n rangeChecked() {\r\n const checkedSelection = this.getCheckedRanges();\r\n updateView(this, { checkedSelection });\r\n\r\n const customDateRangeChecked = _.some(checkedSelection, range => range.isCustom);\r\n if (!customDateRangeChecked && !this.getState().comparisonToggleChecked) {\r\n this.apply();\r\n }\r\n }\r\n\r\n /**\r\n * Gets the state of the date filter panels\r\n * @returns {state} - The selected date ranges\r\n */\r\n getCheckedRanges() {\r\n const state = {\r\n primaryRange: this.getChild('primary-date-range-panel').getCheckedRange(),\r\n };\r\n if (this.getState().comparisonToggleChecked) {\r\n _.extend(state, {\r\n comparedRange: this.getChild('compared-date-range-panel').getCheckedRange(),\r\n });\r\n }\r\n return state;\r\n }\r\n\r\n /**\r\n * Apply the currently selected date ranges, and trigger change event if they're valid\r\n * @returns {undefined}\r\n */\r\n apply() {\r\n let checkedSelection = this.getCheckedRanges();\r\n if (checkedSelection.primaryRange.invalid) {\r\n return;\r\n }\r\n if (checkedSelection.comparedRange) {\r\n this.getChild('compared-date-range-panel').onPrimaryRangeChanged(checkedSelection.primaryRange);\r\n }\r\n\r\n checkedSelection = this.getCheckedRanges();\r\n\r\n if (checkedSelection.comparedRange && checkedSelection.comparedRange.invalid) {\r\n return;\r\n }\r\n\r\n updateView(this, { checkedSelection });\r\n const appliedSelection = this.getState().comparisonToggleChecked ?\r\n checkedSelection : _.pick(checkedSelection, 'primaryRange');\r\n this.trigger('date-range-selected', appliedSelection);\r\n }\r\n\r\n get template() {\r\n return template;\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { getDateRanges, RANGES } from '@bingads-webui/date-ranges';\r\nimport { DateRangePanelBase } from '../base/date-range-panel-base';\r\n\r\n/**\r\n * The primary date range panel allows user to select the\r\n * main date range.\r\n * @param {Function} [dateRangesAccessor] - The optional function to get primary date ranges\r\n * @param {Function} [enabledRangesPredicate] - The optional function to filter primary date ranges\r\n * @param {Date} today - The date for today to be used in calculating date ranges\r\n * @param {Object} i18n - The i18n component. It should have method formatDate for formatting\r\n * dates and getString for getting localized strings\r\n * @extends {DateRangePanelBase}\r\n */\r\nexport class PrimaryDateRangePanel extends DateRangePanelBase {\r\n initialize(options) {\r\n super.initialize(options);\r\n this.showDateRanges = true;\r\n this.dateRangesAccessor = this.options.dateRangesAccessor || getDateRanges;\r\n this.enabledRangesPredicate = this.options.enabledRangesPredicate || this.getCommonDateRanges();\r\n }\r\n\r\n getCommonDateRanges() {\r\n const commonRanges = [RANGES.TODAY, RANGES.YESTERDAY, RANGES.THIS_WEEK_SUNDAY,\r\n RANGES.THIS_WEEK_MONDAY, RANGES.LAST_SEVEN_DAYS, RANGES.LAST_WEEK_SUNDAY,\r\n RANGES.LAST_WEEK_MONDAY, RANGES.LAST_FOURTEEN_DAYS, RANGES.LAST_THIRTY_DAYS,\r\n RANGES.THIS_MONTH, RANGES.LAST_MONTH, RANGES.LAST_THREE_MONTHS, RANGES.LAST_SIX_MONTHS,\r\n RANGES.THIS_YEAR, RANGES.LAST_YEAR, RANGES.ALL_TIME];\r\n return range => _.contains(commonRanges, range.key);\r\n }\r\n\r\n /**\r\n * Sets the state of the panels container\r\n * @param {Object} selection - The selected primary date range\r\n * @param {Date} selection.start - Primary range start date\r\n * @param {Date} selection.end - Primary range end date\r\n * @param {string} selection.key - Key for the primary range\r\n * @returns {PrimaryDateRangePanel} this\r\n */\r\n setState({ selection }) {\r\n if (selection.isCustom || !this.model.get('dateRanges')) {\r\n this.updateDateRanges(selection);\r\n }\r\n this.model.set({ selectedKey: selection.key });\r\n this.showDatePickersIfCustomSelected();\r\n return this;\r\n }\r\n\r\n /**\r\n * Update the date ranges that can be selected\r\n * @private\r\n * @param {any} [start] - The custom start end for the primary date range\r\n * @param {any} [end] - The custom end end for the primary date range\r\n * @returns {undefined}\r\n */\r\n updateDateRanges({ start, end }) {\r\n const { today, i18n } = this.options;\r\n\r\n const allDateRanges = this.dateRangesAccessor({\r\n today,\r\n i18n,\r\n customStart: start,\r\n customEnd: end,\r\n });\r\n\r\n const dateRanges = _.chain(allDateRanges)\r\n .mapObject(range => (this.enabledRangesPredicate(range) ? range : null))\r\n .omit(_.isNull)\r\n .value();\r\n this.model.set({ dateRanges });\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { DeterministicView, helpers } from '@bingads-webui/deterministic-view';\r\nimport { RANGES } from '@bingads-webui/date-ranges';\r\nimport template from './date-range-panel-base-template.pug';\r\nimport { CustomDateRangeSelectionPanel } from '../custom-date-range/custom-date-range-selection-view';\r\nimport { CustomTimeRangeSelectionPanel } from '../custom-time-range/custom-time-range-selection-view';\r\n\r\nconst { updateView, ensureChildView } = helpers;\r\n/**\r\n * The base class for the date range panels\r\n * @extends {View}\r\n */\r\nexport class DateRangePanelBase extends DeterministicView {\r\n /**\r\n * Initialize the DateRangePanelBase\r\n * @param {Object} options - View construction options\r\n * @returns {void}\r\n */\r\n initialize(options) {\r\n this.options = options;\r\n this.RANGES = RANGES;\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click .dropdown-item': (e) => {\r\n const key = this.$(e.target).closest('.dropdown-item').first().attr('data-key');\r\n if (!key) {\r\n throw new Error('No key found');\r\n }\r\n const dateRanges = this.model.get('dateRanges');\r\n if (dateRanges[key].isCustom) {\r\n e.stopPropagation();\r\n }\r\n if (key === this.model.get('selectedKey')) return;\r\n\r\n updateView(this, { selection: dateRanges[key], selectedKey: key });\r\n this.showDatePickersIfCustomSelected();\r\n\r\n this.trigger('range-checked', dateRanges[key]);\r\n },\r\n };\r\n }\r\n\r\n /**\r\n * Shows the date pickers if a custom range has been selected\r\n * @returns {undefined}\r\n */\r\n showDatePickersIfCustomSelected() {\r\n const { selectedKey, dateRanges } = this.model.attributes;\r\n const selectedRange = dateRanges[selectedKey];\r\n if (selectedRange.isCustom) {\r\n if (selectedKey === RANGES.CUSTOM) {\r\n ensureChildView(\r\n this, 'customDateRangeSelectionPanel', CustomDateRangeSelectionPanel,\r\n {\r\n startDate: selectedRange.start,\r\n endDate: selectedRange.end,\r\n i18n: this.options.i18n,\r\n minDate: this.options.minDate,\r\n maxDate: this.options.maxDate,\r\n }\r\n );\r\n } else if (selectedKey === RANGES.CUSTOM_TIME) {\r\n let childView = this.getChild('customTimeRangeSelectionPanel');\r\n if (!childView) {\r\n childView = new CustomTimeRangeSelectionPanel({\r\n i18n: this.options.i18n,\r\n minDate: this.options.minDate,\r\n maxDate: this.options.maxDate,\r\n }).setState({\r\n date: selectedRange.start,\r\n startTime: this.options.defaultTimeRange.start,\r\n endTime: this.options.defaultTimeRange.end,\r\n });\r\n this.setChild('customTimeRangeSelectionPanel', childView);\r\n }\r\n }\r\n }\r\n }\r\n\r\n get template() {\r\n return template;\r\n }\r\n\r\n /**\r\n * Gets the checked date range\r\n * @returns {Object} - The checked date range\r\n */\r\n getCheckedRange() {\r\n const { dateRanges, selectedKey } = this.model.attributes;\r\n\r\n if (dateRanges[selectedKey].isCustom) {\r\n if (selectedKey === RANGES.CUSTOM) {\r\n _.extend(dateRanges[selectedKey], this.getChild('customDateRangeSelectionPanel').getSelection());\r\n } else if (selectedKey === RANGES.CUSTOM_TIME) {\r\n _.extend(dateRanges[selectedKey], this.getChild('customTimeRangeSelectionPanel').getSelection());\r\n }\r\n }\r\n return dateRanges[selectedKey];\r\n }\r\n}\r\n","var pug = require(\"!../../../../../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (model, view) {var i18n = view.options.i18n\nvar i18nOptions = {skeleton: view.options.dateFormat}\nvar RANGES = view.RANGES\nif (model.dateRanges) {\n// iterate model.dateRanges\n;(function(){\n var $$obj = model.dateRanges;\n if ('number' == typeof $$obj.length) {\n for (var key = 0, $$l = $$obj.length; key < $$l; key++) {\n var range = $$obj[key];\npug_html = pug_html + \"\\u003Cli\" + (pug.attr(\"class\", pug.classes([\"date-range\",model.selectedKey===range.key ? 'selected': ''], [false,true]), false, true)) + \"\\u003E\\u003Ca\" + (\" class=\\\"dropdown-item\\\"\"+\" role=\\\"menuitem\\\" href=\\\"javascript:void(0);\\\"\"+pug.attr(\"data-key\", key, true, true)) + \"\\u003E\\u003Cdiv class=\\\"pull-right\\\"\\u003E\";\nif (key === RANGES.CUSTOM) {\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"customDateRangePanel\",\"form-inline\",model.selectedKey===key? '': 'hidden'], [false,false,true]), false, true)) + \"\\u003E\\u003Cdiv data-ref=\\\"customDateRangeSelectionPanel\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse\nif (key === RANGES.CUSTOM_TIME) {\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"customTimeRangePanel\",\"form-inline\",model.selectedKey===key? '' : 'hidden'], [false,false,true]), false, true)) + \"\\u003E\\u003Cdiv data-ref=\\\"customTimeRangeSelectionPanel\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse\nif (view.options.showDates) {\npug_html = pug_html + \"\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.formatDate(range.start, i18nOptions)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\nif ((range.end - range.start > 0)) {\npug_html = pug_html + \"\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('DateFilter_StartEndDateSeparator')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.formatDate(range.end, i18nOptions)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\n}\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"glyphicon\",\"glyphicon-offset-left5\",\"glyphicon-ok\",model.selectedKey===range.key ? '': 'invisible'], [false,false,false,true]), false, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = range.text) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fa\\u003E\\u003C\\u002Fli\\u003E\";\n }\n } else {\n var $$l = 0;\n for (var key in $$obj) {\n $$l++;\n var range = $$obj[key];\npug_html = pug_html + \"\\u003Cli\" + (pug.attr(\"class\", pug.classes([\"date-range\",model.selectedKey===range.key ? 'selected': ''], [false,true]), false, true)) + \"\\u003E\\u003Ca\" + (\" class=\\\"dropdown-item\\\"\"+\" role=\\\"menuitem\\\" href=\\\"javascript:void(0);\\\"\"+pug.attr(\"data-key\", key, true, true)) + \"\\u003E\\u003Cdiv class=\\\"pull-right\\\"\\u003E\";\nif (key === RANGES.CUSTOM) {\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"customDateRangePanel\",\"form-inline\",model.selectedKey===key? '': 'hidden'], [false,false,true]), false, true)) + \"\\u003E\\u003Cdiv data-ref=\\\"customDateRangeSelectionPanel\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse\nif (key === RANGES.CUSTOM_TIME) {\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"customTimeRangePanel\",\"form-inline\",model.selectedKey===key? '' : 'hidden'], [false,false,true]), false, true)) + \"\\u003E\\u003Cdiv data-ref=\\\"customTimeRangeSelectionPanel\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse\nif (view.options.showDates) {\npug_html = pug_html + \"\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.formatDate(range.start, i18nOptions)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\nif ((range.end - range.start > 0)) {\npug_html = pug_html + \"\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('DateFilter_StartEndDateSeparator')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.formatDate(range.end, i18nOptions)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\n}\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"glyphicon\",\"glyphicon-offset-left5\",\"glyphicon-ok\",model.selectedKey===range.key ? '': 'invisible'], [false,false,false,true]), false, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = range.text) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fa\\u003E\\u003C\\u002Fli\\u003E\";\n }\n }\n}).call(this);\n\n}}.call(this,\"model\" in locals_for_with?locals_for_with.model:typeof model!==\"undefined\"?model:undefined,\"view\" in locals_for_with?locals_for_with.view:typeof view!==\"undefined\"?view:undefined));;return pug_html;};\nmodule.exports = template;","import _ from 'underscore';\r\n\r\nimport { DatePicker } from '@bingads-webui/date-picker';\r\nimport { validateDateRange } from '@bingads-webui-universal/primitive-utilities';\r\nimport { DeterministicView, helpers } from '@bingads-webui/deterministic-view';\r\n\r\nimport template from './custom-date-range-selection-view-template.pug';\r\n\r\nconst { updateView, ensureChildView } = helpers;\r\n\r\n/**\r\n * This panel allows selection of a custom date range\r\n * @param {Date} startDate - the start date of the date range\r\n * @param {Date} endDate - the end date of the date range\r\n * @param {Date} minDate - the minimum date of the date range\r\n * @param {Date} maxDate - the maximum date of the date range\r\n * @extends {View}\r\n */\r\nexport class CustomDateRangeSelectionPanel extends DeterministicView {\r\n initialize(options) {\r\n this.options = options;\r\n updateView(this, {\r\n startDateErrors: [],\r\n endDateErrors: [],\r\n generalErrors: [],\r\n });\r\n updateView(this, { startDate: this.options.startDate });\r\n updateView(this, { endDate: this.options.endDate });\r\n this.showDatePickers();\r\n }\r\n\r\n showDatePickers() {\r\n const { minDate, maxDate } = this.options;\r\n\r\n ensureChildView(this, 'startDatePicker', DatePicker, {\r\n selectedDate: this.model.get('startDate'),\r\n minDate,\r\n maxDate,\r\n }, {\r\n rendered() {\r\n const finalStartDate = new Date(Math.min(maxDate, this.model.get('endDate')));\r\n this.getChild('startDatePicker').datePicker.max(finalStartDate);\r\n },\r\n dateChanged: (startDate) => {\r\n updateView(this, { startDate });\r\n this.getChild('endDatePicker').datePicker.min(startDate);\r\n this.validate();\r\n },\r\n });\r\n ensureChildView(this, 'endDatePicker', DatePicker, {\r\n selectedDate: this.model.get('endDate'),\r\n minDate,\r\n maxDate,\r\n }, {\r\n rendered() {\r\n const finalEndDate = new Date(Math.max(minDate, this.model.get('startDate')));\r\n this.getChild('endDatePicker').datePicker.min(finalEndDate);\r\n },\r\n dateChanged: (endDate) => {\r\n updateView(this, { endDate });\r\n this.getChild('startDatePicker').datePicker.max(endDate);\r\n this.validate();\r\n },\r\n });\r\n }\r\n\r\n validate() {\r\n const { minDate, maxDate, i18n } = this.options;\r\n const { startDate, endDate } = this.model.attributes;\r\n\r\n const generalErrors = (endDate < startDate) ? [i18n.getString('StartDate_GreaterThan_EndDate')] : [];\r\n const startDateErrors = _.map(validateDateRange(minDate, maxDate, this.model.get('startDate')), key => i18n.getString(key));\r\n const endDateErrors = _.map(validateDateRange(minDate, maxDate, this.model.get('endDate')), key => i18n.getString(key));\r\n\r\n updateView(this, { generalErrors, startDateErrors, endDateErrors });\r\n return _.union(generalErrors, startDateErrors, endDateErrors);\r\n }\r\n\r\n getSelection() {\r\n const errors = this.validate();\r\n const { startDate, endDate } = this.getState();\r\n return {\r\n start: startDate,\r\n end: endDate,\r\n invalid: errors.length > 0,\r\n };\r\n }\r\n\r\n get template() {\r\n return template;\r\n }\r\n}\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__250__;","var pug = require(\"!../../../../../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (model, view) {pug_mixins[\"showErrors\"] = pug_interp = function(errors){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\n// iterate errors\n;(function(){\n var $$obj = errors;\n if ('number' == typeof $$obj.length) {\n for (var pug_index0 = 0, $$l = $$obj.length; pug_index0 < $$l; pug_index0++) {\n var error = $$obj[pug_index0];\npug_html = pug_html + \"\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = error) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\n }\n } else {\n var $$l = 0;\n for (var pug_index0 in $$obj) {\n $$l++;\n var error = $$obj[pug_index0];\npug_html = pug_html + \"\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = error) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\n }\n }\n}).call(this);\n\n};\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"datePicker\",\"startDatePicker\",model.startDateErrors.length || model.generalErrors.length ? 'error': ''], [false,false,true]), false, true)) + \"\\u003E\\u003Cdiv data-ref=\\\"startDatePicker\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = view.options.i18n.getString('DateFilter_StartEndDateSeparator')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"datePicker\",\"endDatePicker\",model.endDateErrors.length || model.generalErrors.length ? 'error': ''], [false,false,true]), false, true)) + \"\\u003E\\u003Cdiv data-ref=\\\"endDatePicker\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"errors\\\"\\u003E\";\npug_mixins[\"showErrors\"](model.startDateErrors);\npug_mixins[\"showErrors\"](model.endDateErrors);\npug_mixins[\"showErrors\"](model.generalErrors);\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";}.call(this,\"model\" in locals_for_with?locals_for_with.model:typeof model!==\"undefined\"?model:undefined,\"view\" in locals_for_with?locals_for_with.view:typeof view!==\"undefined\"?view:undefined));;return pug_html;};\nmodule.exports = template;","import _ from 'underscore';\r\nimport ko from 'knockout';\r\n\r\nimport { DatePicker } from '@bingads-webui/date-picker';\r\nimport { TimePicker } from '@bingads-webui/time-picker';\r\nimport { validateDateRange } from '@bingads-webui-universal/primitive-utilities';\r\nimport { helpers } from '@bingads-webui/deterministic-view';\r\nimport { KnockoutView } from '@bingads-webui/knockout-view';\r\n\r\nimport template from './custom-time-range-selection-view-template.pug';\r\n\r\nconst { ensureChildView } = helpers;\r\n\r\n\r\nfunction joinDateAndTime(date, time) {\r\n return new Date(\r\n date.getFullYear(),\r\n date.getMonth(),\r\n date.getDate(),\r\n time.getHours(),\r\n time.getMinutes(),\r\n time.getSeconds()\r\n );\r\n}\r\n\r\nfunction initializeChildView(view) {\r\n const { minDate, maxDate } = view.options;\r\n\r\n ensureChildView(view, 'datePicker', DatePicker, {\r\n minDate,\r\n maxDate,\r\n }, {\r\n dateChanged: (date) => {\r\n view.setState({ date });\r\n },\r\n });\r\n ensureChildView(view, 'startTimePicker', TimePicker, {}, {\r\n timeChanged: ({ time }) => {\r\n view.setState({ startTime: time });\r\n },\r\n });\r\n ensureChildView(view, 'endTimePicker', TimePicker, {}, {\r\n timeChanged: ({ time }) => {\r\n view.setState({ endTime: time });\r\n },\r\n });\r\n}\r\n\r\nfunction getDateRange(view) {\r\n const { date, startTime, endTime } = view.getState();\r\n const startDate = joinDateAndTime(date, startTime);\r\n const endDate = joinDateAndTime(date, endTime);\r\n\r\n return { startDate, endDate };\r\n}\r\n\r\nfunction validate(view) {\r\n const { minDate, maxDate, i18n } = view.options;\r\n const { startDate, endDate } = getDateRange(view);\r\n\r\n const generalErrors = (endDate <= startDate) ? [i18n.getString('StartTime_GreaterThanOrEqual_EndTime')] : [];\r\n const startDateErrors = _.map(\r\n validateDateRange(minDate, maxDate, startDate),\r\n key => i18n.getString(key)\r\n );\r\n const endDateErrors = _.map(\r\n validateDateRange(minDate, maxDate, endDate),\r\n key => i18n.getString(key)\r\n );\r\n\r\n view.viewModel.generalErrors(generalErrors);\r\n view.viewModel.startDateErrors(startDateErrors);\r\n view.viewModel.endDateErrors(endDateErrors);\r\n}\r\n\r\nclass CustomTimeRangeSelectionPanelViewModel {\r\n constructor({\r\n generalErrors,\r\n startDateErrors,\r\n endDateErrors,\r\n } = {}) {\r\n this.generalErrors = ko.observable(generalErrors);\r\n this.startDateErrors = ko.observable(startDateErrors);\r\n this.endDateErrors = ko.observable(endDateErrors);\r\n this.errors = ko.computed(() => [].concat(\r\n this.generalErrors(),\r\n this.startDateErrors(),\r\n this.endDateErrors()\r\n ));\r\n }\r\n}\r\n\r\n/**\r\n * This panel allows selection of a custom time range\r\n * @param {Object} i18n - the i18n model\r\n * @param {Date} minDate - the minimum value of date\r\n * @param {Date} maxDate - the maximum value of date\r\n * @extends {View}\r\n */\r\nexport class CustomTimeRangeSelectionPanel extends KnockoutView {\r\n initialize({\r\n i18n,\r\n minDate,\r\n maxDate,\r\n }) {\r\n super.initialize();\r\n this.options = { i18n, minDate, maxDate };\r\n initializeChildView(this);\r\n }\r\n\r\n setState({\r\n date,\r\n startTime,\r\n endTime,\r\n }) {\r\n if (date) {\r\n this.getChild('datePicker').setState({ selectedDate: date });\r\n }\r\n if (startTime) {\r\n this.getChild('startTimePicker').setState({ time: startTime });\r\n }\r\n if (endTime) {\r\n this.getChild('endTimePicker').setState({ time: endTime });\r\n }\r\n validate(this);\r\n return this;\r\n }\r\n\r\n getState() {\r\n const date = this.getChild('datePicker').getState().selectedDate;\r\n const startTime = this.getChild('startTimePicker').getState().time;\r\n const endTime = this.getChild('endTimePicker').getState().time;\r\n\r\n return { date, startTime, endTime };\r\n }\r\n\r\n\r\n getSelection() {\r\n const errors = this.viewModel.errors();\r\n const { startDate, endDate } = getDateRange(this);\r\n\r\n return {\r\n start: startDate,\r\n end: endDate,\r\n invalid: errors.length > 0,\r\n };\r\n }\r\n\r\n get template() {\r\n return template;\r\n }\r\n\r\n get ViewModel() {\r\n return CustomTimeRangeSelectionPanelViewModel;\r\n }\r\n}\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__253__;","var pug = require(\"!../../../../../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (view) {pug_html = pug_html + \"\\u003Cdiv class=\\\"datePicker\\\"\\u003E\\u003Cdiv data-ref=\\\"datePicker\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cspan\\u003E\\u003C\\u002Fspan\\u003E\\u003Cdiv class=\\\"timePicker startTimePicker\\\" data-bind=\\\"css: { error: startDateErrors.length || generalErrors.length }\\\"\\u003E\\u003Cdiv data-ref=\\\"startTimePicker\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = view.options.i18n.getString('DateFilter_StartEndDateSeparator')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cdiv class=\\\"timePicker endTimePicker\\\" data-bind=\\\"css: { error: endDateErrors.length || generalErrors.length }\\\"\\u003E\\u003Cdiv data-ref=\\\"endTimePicker\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"errors\\\" data-bind=\\\"foreach: errors\\\"\\u003E\\u003Cspan data-bind=\\\"text: $data\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"view\" in locals_for_with?locals_for_with.view:typeof view!==\"undefined\"?view:undefined));;return pug_html;};\nmodule.exports = template;","import _ from 'underscore';\r\nimport { getComparedDateRanges } from '@bingads-webui/date-ranges';\r\nimport { DateRangePanelBase } from '../base/date-range-panel-base';\r\n\r\n/**\r\n * The compared date range panel allows user to select the\r\n * date range to compare the data against.\r\n * @param {Function} [dateRangesAccessor] - The optional function to get compared date ranges\r\n * @param {Function} [enabledRangesPredicate] - The optional function to filter compared date ranges\r\n * @param {Date} today - The date for today to be used in calculating date ranges\r\n * @param {Object} i18n - The i18n component. It should have method formatDate for formatting\r\n * dates and getString for getting localized strings\r\n * @extends {DateRangePanelBase}\r\n */\r\nexport class ComparedDateRangePanel extends DateRangePanelBase {\r\n initialize(options) {\r\n super.initialize(options);\r\n this.dateRangesAccessor = this.options.dateRangesAccessor || getComparedDateRanges;\r\n }\r\n\r\n /**\r\n * Sets the state of the panels container\r\n * @param {Object} selection - The selected compared date range\r\n * @param {Date} selection.start - Primary range start date\r\n * @param {Date} selection.end - Primary range end date\r\n * @param {string} selection.key - Key for the primary range\r\n * @param {Object} primaryRange - The selected primary date range\r\n * @param {Date} primaryRange.start - Primary range start date\r\n * @param {Date} primaryRange.end - Primary range end date\r\n * @param {string} primaryRange.key - Key for the primary range\r\n * @param {string} primaryRange.key - Key for the primary range\r\n * @returns {ComparedDateRangePanel} this\r\n */\r\n setState({ selection, primaryRange }) {\r\n // if (primaryRange) {\r\n // const oldPrimaryRange = this.model.get('primaryRange') || {};\r\n // if (primaryRange.start !== oldPrimaryRange.start ||\r\n // primaryRange.end !== oldPrimaryRange.end) {\r\n // this.updateDateRanges(primaryRange, selection);\r\n // }\r\n // }\r\n if (selection) {\r\n this.model.set({ selectedKey: selection.key });\r\n }\r\n this.updateDateRanges(primaryRange, selection);\r\n\r\n this.showDatePickersIfCustomSelected();\r\n return this;\r\n }\r\n\r\n onPrimaryRangeChanged(primaryRange) {\r\n const { dateRanges, selectedKey } = this.getState();\r\n this.updateDateRanges(primaryRange, dateRanges[selectedKey]);\r\n }\r\n\r\n /**\r\n * Update the date ranges that can be selected\r\n * @private\r\n * @param {Object} primaryRange - The selected primary date range\r\n * @param {Object} selection - The selected compared date range\r\n * @returns {undefined}\r\n */\r\n updateDateRanges(primaryRange, selection = {}) {\r\n const { today, i18n } = this.options;\r\n\r\n const newDateRanges = this.dateRangesAccessor({\r\n today,\r\n i18n,\r\n primaryRange,\r\n comparedCustomStart: selection.start,\r\n comparedCustomEnd: selection.end,\r\n });\r\n\r\n // Retain the existing custom date ranges\r\n _.extend(newDateRanges, _.pick(this.model.get('dateRanges') || {}, value => value.isCustom));\r\n\r\n this.model.set({ dateRanges: newDateRanges, primaryRange });\r\n }\r\n}\r\n","var pug = require(\"!../../../../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (model, view) {var isComparedCustomRangeSelected = model.checkedSelection.comparedRange && model.checkedSelection.comparedRange.isCustom\nvar isPrimaryCustomRangeSelected = model.checkedSelection.primaryRange.isCustom\nvar isCustomRangeSelected = isComparedCustomRangeSelected || isPrimaryCustomRangeSelected\nvar i18n = view.options.i18n\npug_mixins[\"toggleButton\"] = pug_interp = function(isChecked){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cdiv class=\\\"toggle-switch pull-right\\\"\\u003E\\u003Ca\" + (pug.attr(\"class\", pug.classes([\"toggle\",isChecked? 'toggle-on': 'toggle-off'], [false,true]), false, true)+\" role=\\\"checkbox\\\"\"+pug.attr(\"aria-checked\", isChecked, true, true)) + \"\\u003E\\u003Cbutton class=\\\"toggle-button\\\"\\u003E\\u003Cspan class=\\\"toggle-handle\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fbutton\\u003E\";\nif (isChecked) {\npug_html = pug_html + \"\\u003Cspan class=\\\"toggle-text\\\" aria-hidden=\\\"true\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('DateFilter_Toggle_On')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cspan class=\\\"toggle-text\\\" aria-hidden=\\\"true\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('DateFilter_Toggle_Off')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\";\n};\npug_mixins[\"applyButton\"] = pug_interp = function(){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cdiv class=\\\"glyphicon glyphicon-offset-left5\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cbutton class=\\\"btn btn-primary apply\\\" type=\\\"button\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('DateFilter_Button_Apply')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fbutton\\u003E\";\n};\npug_html = pug_html + \"\\u003Cdiv data-ref=\\\"primary-date-range-panel\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\nif (view.options.isComparisonEnabled || isCustomRangeSelected) {\npug_html = pug_html + \"\\u003Cli class=\\\"divider divider-line\\\"\\u003E\\u003C\\u002Fli\\u003E\\u003Cdiv class=\\\"dividerPanel\\\"\\u003E\";\nif (view.options.isComparisonEnabled) {\nif (model.comparisonToggleChecked) {\npug_mixins[\"applyButton\"]();\n}\npug_mixins[\"toggleButton\"](model.comparisonToggleChecked);\n}\nif (isCustomRangeSelected && !model.comparisonToggleChecked) {\npug_mixins[\"applyButton\"]();\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([model.comparisonToggleChecked? '': 'hidden'], [true]), false, true)) + \"\\u003E\\u003Cdiv data-ref=\\\"compared-date-range-panel\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}}.call(this,\"model\" in locals_for_with?locals_for_with.model:typeof model!==\"undefined\"?model:undefined,\"view\" in locals_for_with?locals_for_with.view:typeof view!==\"undefined\"?view:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"date-filter dropdown\\\"\\u003E\\u003Cbutton class=\\\"row btn btn-default dropdown-toggle\\\" type=\\\"button\\\" role=\\\"menu\\\"\\u003E\\u003Cdiv data-ref=\\\"dropdown-view\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fbutton\\u003E\\u003Cul class=\\\"dropdown-menu\\\"\\u003E\\u003Cdiv data-ref=\\\"date-filter-panels-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Ful\\u003E\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;","import * as putil from '@bingads-webui-universal/primitive-utilities';\r\nimport { DateRangesFactory } from './src/date-ranges-factory';\r\n\r\nconst factory = new DateRangesFactory(putil);\r\n\r\nexport const getDateRanges = factory.makePrimaryDateRangesAccessor(putil);\r\nexport const getComparedDateRanges = factory.makeComparedDateRangesAccessor(putil);\r\nexport * from './src/constants';\r\n","import _ from 'underscore';\r\nimport { comparedDateRanges } from './compared-date-ranges';\r\nimport { primaryDateRanges } from './primary-date-ranges';\r\n\r\nexport class DateRangesFactory {\r\n constructor(putil) {\r\n this.putil = putil;\r\n }\r\n\r\n makePrimaryDateRangesAccessor() {\r\n return (options) => {\r\n _.extend(options, { putil: this.putil });\r\n return primaryDateRanges(options);\r\n };\r\n }\r\n\r\n makeComparedDateRangesAccessor() {\r\n return (options) => {\r\n _.extend(options, { putil: this.putil });\r\n return comparedDateRanges(options);\r\n };\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { RANGES, COMPARISON_RANGES } from './constants';\r\n\r\n/**\r\n * Get the difference between two dates in number of days (date1-date2)\r\n * @param {Date} date1 - First date, date to subtract from\r\n * @param {Date} date2 - Second date, date to be subtracted\r\n * @returns {Number} - the number of days, rounded to closest value\r\n */\r\nfunction dayDiff(date1, date2) {\r\n return Math.round((date1 - date2) / 86400000);\r\n}\r\n\r\n/**\r\n * Gets the date ranges that can be selected in the compared comparison panel.\r\n * @param {Object} putil - Date utilities\r\n * @param {Date} today - Today's date. This is used to generate the date ranges correctly.\r\n * @param {Object} i18n - i18n object for the date range strings\r\n * @param {Object} primaryRange - The date range to compare against.\r\n * It should have the following properties:\r\n * @param {Date} primaryRange.start - The start date for the checked primary range.\r\n * @param {Date} primaryRange.end - The end date for the checked primary range.\r\n * @param {string} primaryRange.key - The key for the checked range.\r\n * @param {Date} [comparedCustomStart] - The custom start date for the checked compared range.\r\n * @param {Date} [comparedCustomEnd] - The custom end date for the checked compared range.\r\n * @returns {Object} comparedDateRanges - The object keys are the date range keys\r\n * and the value will have following properties:\r\n * start - The start date for the custom date range period\r\n * end - The end date for the custom date range period\r\n * text - The text for the custom date range period\r\n */\r\nexport function comparedDateRanges({\r\n putil,\r\n today,\r\n i18n,\r\n primaryRange,\r\n comparedCustomStart = new Date(primaryRange.start),\r\n comparedCustomEnd = new Date(primaryRange.end),\r\n}) {\r\n let previousStart = null;\r\n let previousEnd = null;\r\n const lastYearStart = putil.todayNYearsAgo(primaryRange.start, 1);\r\n const lastYearEnd = putil.todayNYearsAgo(primaryRange.end, 1);\r\n\r\n switch (primaryRange.key) {\r\n case RANGES.CUSTOM:\r\n previousEnd = putil.lastNDate(primaryRange.start, 1);\r\n previousStart = putil.lastNDate(previousEnd, dayDiff(primaryRange.end, primaryRange.start));\r\n break;\r\n case RANGES.TODAY:\r\n case RANGES.YESTERDAY:\r\n previousStart = putil.lastNDate(primaryRange.start, 1);\r\n previousEnd = putil.lastNDate(primaryRange.end, 1);\r\n break;\r\n case RANGES.THIS_WEEK_SUNDAY:\r\n case RANGES.THIS_WEEK_MONDAY:\r\n case RANGES.LAST_WEEK_MONDAY:\r\n case RANGES.LAST_WEEK_SUNDAY:\r\n case RANGES.LAST_SEVEN_DAYS:\r\n previousStart = putil.lastNDate(primaryRange.start, 7);\r\n previousEnd = putil.lastNDate(primaryRange.end, 7);\r\n break;\r\n case RANGES.LAST_FOURTEEN_DAYS:\r\n previousStart = putil.lastNDate(primaryRange.start, 14);\r\n previousEnd = putil.lastNDate(primaryRange.end, 14);\r\n break;\r\n case RANGES.LAST_THIRTY_DAYS:\r\n previousStart = putil.lastNDate(primaryRange.start, 30);\r\n previousEnd = putil.lastNDate(primaryRange.end, 30);\r\n break;\r\n case RANGES.THIS_MONTH:\r\n previousStart = putil.firstDateNMonthsAgo(primaryRange.start, 1);\r\n previousEnd = putil.lastNDate(previousStart, -primaryRange.end.getDate() + 1);\r\n if (previousEnd >= primaryRange.start) {\r\n previousEnd = putil.lastNDate(primaryRange.start, 1);\r\n }\r\n break;\r\n case RANGES.LAST_MONTH:\r\n previousStart = putil.firstDateNMonthsAgo(primaryRange.start, 1);\r\n previousEnd = putil.lastDateNMonthsAgo(primaryRange.end, 1);\r\n break;\r\n case RANGES.LAST_THREE_MONTHS:\r\n previousStart = putil.firstDateNMonthsAgo(primaryRange.start, 3);\r\n previousEnd = putil.lastDateNMonthsAgo(primaryRange.end, 3);\r\n break;\r\n case RANGES.LAST_SIX_MONTHS:\r\n previousStart = putil.firstDateNMonthsAgo(primaryRange.start, 6);\r\n previousEnd = putil.lastDateNMonthsAgo(primaryRange.end, 6);\r\n break;\r\n case RANGES.TWELVE_MONTHS_TO_DATE:\r\n previousStart = putil.todayNYearsAgo(primaryRange.start, 1);\r\n previousEnd = putil.lastNDate(putil.firstDateNYearsAgo(today), 1);\r\n break;\r\n case RANGES.THIS_YEAR:\r\n previousStart = putil.firstDateNYearsAgo(today, 1);\r\n previousEnd = putil.lastNDate(putil.firstDateNYearsAgo(today), 1);\r\n break;\r\n case RANGES.LAST_YEAR:\r\n previousStart = putil.firstDateNYearsAgo(today, 2);\r\n previousEnd = putil.lastNDate(putil.firstDateNYearsAgo(today, 1), 1);\r\n break;\r\n case RANGES.ALL_TIME:\r\n default:\r\n break;\r\n }\r\n\r\n const dateRanges = {\r\n [COMPARISON_RANGES.PREVIOUS_PERIOD]: {\r\n text: i18n.getString('DateFilter_Option_PreviousPeriod'),\r\n start: previousStart,\r\n end: previousEnd,\r\n invalid: primaryRange.key === RANGES.ALL_TIME,\r\n },\r\n [COMPARISON_RANGES.SAME_PERIOD_LAST_YEAR]: {\r\n text: i18n.getString('DateFilter_Option_SamePeriodLastYear'),\r\n start: lastYearStart,\r\n end: lastYearEnd,\r\n invalid: primaryRange.key === RANGES.ALL_TIME,\r\n },\r\n [COMPARISON_RANGES.CUSTOM]: {\r\n text: i18n.getString('DateFilter_Option_CustomPeriod'),\r\n start: comparedCustomStart,\r\n end: comparedCustomEnd,\r\n isCustom: true,\r\n },\r\n };\r\n\r\n // If \"all time\" is selected then mark the compared periods as invalid\r\n if (primaryRange.key === RANGES.ALL_TIME) {\r\n _.each(dateRanges, range => _.extend(range, { invalid: true }));\r\n }\r\n\r\n // Add the key to each date range\r\n _.each(dateRanges, (range, key) => _.extend(range, { key }));\r\n return dateRanges;\r\n}\r\n","export const COMPARISON_RANGES = {\r\n PREVIOUS_PERIOD: 'previousPeriod',\r\n SAME_PERIOD_LAST_YEAR: 'samePeriodLastYear',\r\n CUSTOM: 'customPeriod',\r\n LAST_MONTH: 'lastMonth',\r\n};\r\n\r\nexport const RANGES = {\r\n TODAY: 'today',\r\n YESTERDAY: 'yesterday',\r\n THIS_WEEK_SUNDAY: 'thisWeekSunday',\r\n THIS_WEEK_MONDAY: 'thisWeekMonday',\r\n LAST_SEVEN_DAYS: 'lastSevenDays',\r\n LAST_WEEK_SUNDAY: 'lastWeekSunday',\r\n LAST_WEEK_MONDAY: 'lastWeekMonday',\r\n LAST_FOURTEEN_DAYS: 'lastFourteenDays',\r\n LAST_THIRTY_DAYS: 'last30Days',\r\n THIS_MONTH: 'thisMonth',\r\n LAST_MONTH: 'lastMonth',\r\n LAST_THREE_MONTHS: 'last3Months',\r\n LAST_SIX_MONTHS: 'last6Months',\r\n TWELVE_MONTHS_TO_DATE: 'twelveMonthsToDate',\r\n THIS_YEAR: 'thisYear',\r\n LAST_YEAR: 'lastYear',\r\n ALL_TIME: 'allTime',\r\n ALL_TIME_FIVE_YEARS: 'allTimeFiveYears',\r\n CUSTOM: 'custom',\r\n CUSTOM_TIME: 'customTime',\r\n};\r\n\r\n","import _ from 'underscore';\r\nimport { RANGES } from './constants';\r\n\r\n/**\r\n * Gets the date ranges that can be selected in the main date range panel.\r\n * @param {Object} putil - Date utilities\r\n * @param { Date } today - Today's date. This is used to generate the date ranges correctly.\r\n * @param {Object} i18n - i18n object for the date range strings\r\n * @param {Date} customStart - The start date for the custom date range\r\n * @param {Date} customEnd - The end date for the custom date range\r\n * @returns {Object} dateRanges - The object keys are the date range keys\r\n * and the value will have following properties:\r\n * start - The start date for the custom date range period\r\n * end - The end date for the custom date range period\r\n * text - The text for the custom date range period\r\n */\r\nexport function primaryDateRanges({\r\n putil,\r\n today,\r\n i18n,\r\n customStart = putil.lastNDate(today, 7),\r\n customEnd = putil.lastNDate(today, 1),\r\n}) {\r\n const dateRanges = {\r\n [RANGES.CUSTOM]: {\r\n grain: 4,\r\n text: i18n.getString('DateFilter_Option_Custom'),\r\n start: customStart,\r\n end: customEnd,\r\n isCustom: true,\r\n },\r\n [RANGES.CUSTOM_TIME]: {\r\n grain: 23,\r\n text: i18n.getString('DateFilter_Option_CustomTime'),\r\n start: customStart,\r\n end: customEnd,\r\n isCustom: true,\r\n },\r\n [RANGES.TODAY]: {\r\n grain: 3,\r\n text: i18n.getString('DateFilter_Option_Today'),\r\n start: today,\r\n end: today,\r\n },\r\n [RANGES.YESTERDAY]: {\r\n grain: 1,\r\n text: i18n.getString('DateFilter_Option_Yesterday'),\r\n start: putil.lastNDate(today, 1),\r\n end: putil.lastNDate(today, 1),\r\n },\r\n [RANGES.THIS_WEEK_SUNDAY]: {\r\n grain: 7,\r\n text: i18n.getString('DateFilter_Option_ThisWeekSunday'),\r\n start: putil.lastNDate(today, today.getDay()),\r\n end: today,\r\n },\r\n [RANGES.THIS_WEEK_MONDAY]: {\r\n grain: 8,\r\n text: i18n.getString('DateFilter_Option_ThisWeekMonday'),\r\n start: today.getDay() === 0 ?\r\n putil.lastNDate(today, 6) :\r\n putil.lastNDate(today, today.getDay() - 1),\r\n end: today,\r\n },\r\n [RANGES.LAST_SEVEN_DAYS]: {\r\n grain: 2,\r\n text: i18n.getString('DateFilter_Option_Last7days'),\r\n start: putil.lastNDate(today, 7),\r\n end: putil.lastNDate(today, 1),\r\n },\r\n [RANGES.LAST_WEEK_SUNDAY]: {\r\n grain: 9,\r\n text: i18n.getString('DateFilter_Option_LastWeekSunday'),\r\n start: putil.lastNDate(today, today.getDay() + 7),\r\n end: putil.lastNDate(today, today.getDay() + 1),\r\n },\r\n [RANGES.LAST_WEEK_MONDAY]: {\r\n grain: 14,\r\n text: i18n.getString('DateFilter_Option_LastWeekMonday'),\r\n start: putil.lastNDate(today, today.getDay() + 6),\r\n end: putil.lastNDate(today, today.getDay()),\r\n },\r\n [RANGES.LAST_FOURTEEN_DAYS]: {\r\n grain: 6,\r\n text: i18n.getString('DateFilter_Option_Last14Days'),\r\n start: putil.lastNDate(today, 14),\r\n end: putil.lastNDate(today, 1),\r\n },\r\n [RANGES.THIS_MONTH]: {\r\n grain: 10,\r\n text: i18n.getString('DateFilter_Option_ThisMonth'),\r\n start: putil.firstDateNMonthsAgo(today),\r\n end: today,\r\n },\r\n [RANGES.LAST_MONTH]: {\r\n grain: 11,\r\n text: i18n.getString('DateFilter_Option_LastMonth'),\r\n start: putil.firstDateNMonthsAgo(today, 1),\r\n end: putil.lastNDate(putil.firstDateNMonthsAgo(today), 1),\r\n },\r\n [RANGES.LAST_THIRTY_DAYS]: {\r\n grain: 5,\r\n text: i18n.getString('DateFilter_Option_Last30Days'),\r\n start: putil.lastNDate(today, 30),\r\n end: putil.lastNDate(today, 1),\r\n },\r\n [RANGES.LAST_THREE_MONTHS]: {\r\n grain: 12,\r\n text: i18n.getString('DateFilter_Option_Last3Months'),\r\n start: putil.firstDateNMonthsAgo(today, 3),\r\n end: putil.lastNDate(putil.firstDateNMonthsAgo(today), 1),\r\n },\r\n [RANGES.LAST_SIX_MONTHS]: {\r\n grain: 13,\r\n text: i18n.getString('DateFilter_Option_Last6Months'),\r\n start: putil.firstDateNMonthsAgo(today, 6),\r\n end: putil.lastNDate(putil.firstDateNMonthsAgo(today), 1),\r\n },\r\n [RANGES.TWELVE_MONTHS_TO_DATE]: {\r\n grain: 15,\r\n text: i18n.getString('DateFilter_Option_TwelveMonthsToDate'),\r\n start: putil.todayNYearsAgo(today, 1),\r\n end: today,\r\n },\r\n [RANGES.THIS_YEAR]: {\r\n grain: 20,\r\n text: i18n.getString('DateFilter_Option_ThisYear'),\r\n start: putil.firstDateNYearsAgo(today),\r\n end: today,\r\n },\r\n [RANGES.LAST_YEAR]: {\r\n grain: 21,\r\n text: i18n.getString('DateFilter_Option_LastYear'),\r\n start: putil.firstDateNYearsAgo(today, 1),\r\n end: putil.lastNDate(putil.firstDateNYearsAgo(today), 1),\r\n },\r\n [RANGES.ALL_TIME]: {\r\n grain: 22,\r\n text: i18n.getString('DateFilter_Option_AllTime'),\r\n start: putil.todayNYearsAgo(today, 3),\r\n end: today,\r\n },\r\n [RANGES.ALL_TIME_FIVE_YEARS]: {\r\n grain: 24,\r\n text: i18n.getString('DateFilter_Option_AllTime'),\r\n start: putil.todayNYearsAgo(today, 5),\r\n end: today,\r\n },\r\n };\r\n\r\n _.each(dateRanges, (range, key) => _.extend(range, { key }));\r\n return dateRanges;\r\n}\r\n"],"names":["installedModules","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","schema","i18n","fields","model","override","vmSchema","ViewmodelSchema","odataType","indexOf","createBackboneModel","__WEBPACK_EXTERNAL_MODULE__54__","Backbone","Model","extend","constructor","params","this","validator","Validator","errors","converter","Converter","apply","defaults","_","mapObject","schemaField","prop","type","childType","omit","modelValue","result","default","converted","conversion","fromModel","isUndefined","validate","attrs","parse","response","toJSON","json","FieldValidator","viewModel","validators","validation","convertors","on","vm","unset","toModel","failedValidators","pick","v","isValid","isEmpty","set","errorMessages","each","failed","messages","isFunction","message","isArray","concat","push","NestedValidator","fieldValidators","field","has","FieldConverter","NestedConverter","fieldConverters","fc","__WEBPACK_EXTERNAL_MODULE__8__","__WEBPACK_EXTERNAL_MODULE__9__","getSelectedIds","map","selected","opportunity","id","triggerEvent","event","trigger","back","dismiss","biDataNames","BidAdjustmentOptView","showBackBtn","details","campaignBIData","ViewModel","raiseHeader","raiseSubtitle","lowerHeader","lowerSubtitle","biDataDescriptions","getString","costPerConversion","cost","getHeaderDesc","$el","html","ko","applyBindings","el","setRaiseOrLowerDetails","View","__WEBPACK_EXTERNAL_MODULE__19__","formatter","Formatter","all","observableArray","getMapper","raiseBidAdjustments","pureComputed","filter","isRaiseOpportunity","lowerBidAdjustments","selectedRaiseBidAdjustments","selectedLowerBidAdjustments","old","delta","new","observable","biData","array","iteratee","identity","reduce","memo","item","sumBy","scope","formatedRange","formatedDelta","biSymbol","dataType","from","formatValueWithType","to","Location","getLocationMapper","Scheduling","getSchedulingMapper","Keyword","getKeywordMapper","getFormatDetail","isRaise","costDelta","conversionDelta","i18nKey","conversionDeltaRound","Math","round","formatCostDelta","formatConversionDelta","negatedCostDelta","negatedConversionDelta","chain","bidMultiplier","locationNames","firstLocationPart","restLocationsParts","levelName","level","mapLocationLevel","geoLevelId","formatedDetail","description","restLocationParts","join","formatedBidMultiplierRange","formatBidMultiplierRange","currentBidMultiplier","dateAndTime","formatSchedulingDatetime","periodType","fromHour","toHour","conversionRate","formatConversionRate","adgroupName","keywordName","formatKeyword","keywordMatchType","formatedBidRange","formatBidRange","currentBid","suggestedBid","pug","require","locals","pug_interp","pug_html","locals_for_with","escape","undefined","Error","formatInteger","formatDecimal","maximumFractionDigits","minimumFractionDigits","formatIntegerPercent","formatPercent","formatDecimalPercent","addSign","toStrong","text","format","functions","func","typeMethodMap","formatConversion","formatCost","formatCostPerConversion","costPerConversionDelta","formatCostPerConversionDelta","abs","fromValue","toValue","startHour","formatDate","Date","setHours","skeleton","timeZone","endHour","$$obj","length","pug_index0","$$l","biDataName","attr","__WEBPACK_EXTERNAL_MODULE__43__","KeywordBidLandscape","BidLandscapeBaseView","KeywordBidLandscapeViewModel","template","isForVNext","pug_mixins","bidlandscapeId","entityName","entityType","linkId","displayText","ariaLabelContext","block","attributes","replace","bidType","campaignType","radionName","noProductPartition","radioName","isNotAudienceCampaign","isCampaignLevel","save","BidLandscapeBaseViewModel","parentItem","parentView","inSimpleMode","dataToShow","super","tableBidText","computed","entityId","suggestedNewValue","currentValue","dataArray","userInput","valueToApply","currentSelectedId","subscribe","selectedValueUpdated","landscapePointsLength","size","notify","invalidMsgByUser","inputErrorMessage","isValidDecimal","parseDecimal","bidStr","inputValid","read","write","noop","uniqueId","hasData","startDateString","endDateString","isClickGraph","needCostColumn","footerText","updatedSelectedIndex","index","convertDataForBidLandscape","Nodata","data","convertDataForChart","ChartData","showClick","selectedIndex","StartDateString","EndDateString","hasZeroCurrentPoint","landscapePoints","isNumber","BidLandscapePoints","hasClick","CurveType","bidlandscapePoints","sortBy","point","Bid","uniq","impressions","Impressions","impressionsStr","formatDecimalToInteger","mlImpressions","MLImpressions","mlImpressionsStr","bid","formatDecimalToFixed","comment","clicks","Clicks","clicksStr","Cost","costStr","view","viewStr","customBidCurrentPoint","percentileCeil","original","floor","PureKnockoutView","events","initialize","Id","SuggestedNewValue","CurrentValue","isDSA","enityType","options","slideChartOptions","onSelectionUpdate","initBidLandscapeChartsOptions","renderSlideChart","prepareExtraSeries","onApply","onCancel","markInputValueInvalid","msg","close","remove","getTableKpiIndex4Point","clickEvent","kpiIndexInSortOrder","$","highcharts","prepareChartData","landscapePointClicked","pointClicked","tableKPiIndex","highchartsConfig","getBidlandscapeChartOptions","self","plotOptions","series","click","stopImmediatePropagation","prepareChartTitles","xAxis","title","toUpperCase","yAxis","convertPoint","isCampaign","selectedCol","x","y","yStr","extraPoint","graphPoint","maxX","maxY","minX","minY","seriesData","max","min","getMakerSetting","reverse","extraSeries","isObject","__WEBPACK_EXTERNAL_MODULE__81__","__WEBPACK_EXTERNAL_MODULE__82__","colorsDefault","labelColor","lineColor","pointHoverColor","makerColor","makerFillColor","seriesColor","adgroupCurrentPointColor","markerPointColor","colorsCampaign","campaignCurrentPointColor","crosshairsColor","axisValueFormater","clickGraph","getSlideChartOptions","coloroptions","colors","animation","chart","allowDecimals","labels","enabled","align","style","color","fontWeight","fontSize","categories","showGridlines","gridLineWidth","gridLineColor","lineWidth","startOnTick","endOnTick","tickPositioner","positions","tick","dataMin","increment","dataMax","ceil","opposite","step","legend","credits","tooltip","crosshairs","dashStyle","line","dataLabels","marker","enableMouseTracking","grouping","shadow","fillColor","radius","states","hover","borderWidth","pointWidth","getCampaignSlideChartOptions","shared","useHTML","headerFormat","pointFormat","footerFormat","valueDecimals","margin","enable","getAdgroupCurrentPointSetting","symbol","AdGroupBidLandscape","helpId","inKeywordCreationWorkflow","adgroupSelectMode","AdGroupBidLandscapeViewModel","updateWithOverWriteWarning","BID_MODE","updateWithoutOverWrite","uniformSaveWarnFooter","subTitle","updateAdgroupSelectedMode","currentTarget","isAudienceAdgroupCPMCPV","clearBid","UPDATE_DEFAULT","CLEAR_KEYWORD","uniformData","defaultData","hasUnformBidData","hasDefaultBidData","NONE","dataForBidType","DefaultResult","UniformData","AdGroupBidType","AdGroupBidTypeNames","newValue","dataToShowForLandscape","newSelction","updateDefault","updateUniform","ProductGroupBidLandscape","ProductGroupBidLandscapeViewModel","CampaignBidLandscape","currentSelectedColomn","campaignSelectMode","CampaignBidLandscapeViewModel","SYMBOL_PERCENT","additionalBuget","keepCurrentBudget","hash","currencySymbol","xAlixTitle","STRING_MAP","yAxisTitle","bidName","costName","campaignName","disabledBid","disabledCPC","radioNameSelectModel","radioNameAdditionalBudget","BID_SCALING","CAMPAIGN_WIDE_BID","fractionDigits","cpcSymbol","INCREASE","values","Hash","showBid","showCPC","showCurrencySymbol","TARGET_ROAS","showAdditionalBudgetPanel","currentBudget","currencyCode","CurrencyCode","EntityName","currentTargetValue","CurrentTargetValue","getCurrencySymbol","needBudget","showImpr","showImprTop","showConv","showConvValue","focusInput","percentOptions","DECREASE","descrpition","DESC_MAP","additionalBudgetDescrpition","ADDBUDGET_DESC_MAP","targetTitle","TARGET_TITLE_MAP","inputPlaceholder","INPUTPLACEHOLDER_MAP","increseBudgetText","updatedSelectedColumn","colName","target","additionalBugetNeeds","formatCurrency","formatDateObj","obj","Month","Day","Year","TARGET_CPA","StartDate","EndDate","hasImpressions","hasImpressionsTop","hasConversionValue","TARGET_VALUE_MAP","Conversion","conversionStr","conversionValue","ConversionValue","conversionValueStr","AdditionalBugetNeeds","additionalBugetNeedsStr","currency","Currency","CurrentBudget","CampaignWideBid","BidScaling","TROAS","TCPA","factory","__WEBPACK_EXTERNAL_MODULE__7__","__WEBPACK_EXTERNAL_MODULE__13__","__WEBPACK_EXTERNAL_MODULE__14__","FREQUENCY_KEYS_UPPER","cron","frequency","MONTHLY","WEEKLY","DAILY","ONCE","HOURLY","EVERY_6_HOURS","EVERY_12_HOURS","FREQUENCY_KEYS_LOWER","TEMPLATE_KEYS","BACKWARD_COMPATIBLE_ENABLED_FREQUENCIES","stringToDate","startedAt","startedAtDateTime","isString","isDate","isNaN","valueOf","formatCronModel","cronModel","LOCALIZERS","dayOfMonth","formatDayOfMonth","dayOfWeek","formatDayOfWeek","formatCronFrequency","hour","formatHourOfDay","localizedCronModel","keys","localizedValue","localizer","formatCronString","cronString","templateKey","localizedCronString","formatDateTimeLong","datetime","formatDateTimeShort","String","UTC","formatDuration","durationInSeconds","localizedDuration","durationInMinutes","flooredMinutes","formatUnit","form","flooredSeconds","frequencyKey","formatCronFrequencyUpperCase","getCronFrequencies","enabledFrequencies","getCronFrequenciesEnum","clone","getDaysOfMonth","dayRange","range","dayRangeStrings","getDaysOfWeek","indexArray","daysOfWeekArray","getHoursOfDay","hoursOfDayArray","toCronString","Number","tokens","split","year","modifiedCronString","last","initial","cronResult","parseExpressionSync","init","_fields","minute","month","getFrequency","parseInt","finalCronModel","interval","curlyTemplate","isEqualInterval","valuesToNextRange","updateView","helpers","ensureChildView","DateFilter","DeterministicView","DropdownView","DateFilterDropdownView","customCloseMenuSelector","datePickerSelector","e","closeMenuOnOutsideClick","clickedEl","closest","parent","removeClass","toggle","setState","selection","today","checkedSelection","DateFilterPanelsContainer","comparisonToggleChecked","isComparisonEnabled","comparedRange","getState","appliedSelection","cloneDateRange","dateFormat","timeFormat","retValue","start","end","getChild","getSelection","state","primaryRange","toggleClass","RANGES","__WEBPACK_EXTERNAL_MODULE__243__","CUSTOM_TIME","getDateRanges","getComparedDateRanges","enabledRangesPredicate","minDate","maxDate","defaultTimeRange","setChild","PrimaryDateRangePanel","dateRangesAccessor","showDates","primaryDateRangePanel","checked","rangeChecked","ComparedDateRangePanel","comparedDateRangePanel","onPrimaryRangeChanged","stopPropagation","selectedRanges","getCheckedRanges","some","isCustom","getCheckedRange","invalid","DateRangePanelBase","showDateRanges","getCommonDateRanges","commonRanges","TODAY","YESTERDAY","THIS_WEEK_SUNDAY","THIS_WEEK_MONDAY","LAST_SEVEN_DAYS","LAST_WEEK_SUNDAY","LAST_WEEK_MONDAY","LAST_FOURTEEN_DAYS","LAST_THIRTY_DAYS","THIS_MONTH","LAST_MONTH","LAST_THREE_MONTHS","LAST_SIX_MONTHS","THIS_YEAR","LAST_YEAR","ALL_TIME","contains","updateDateRanges","selectedKey","showDatePickersIfCustomSelected","allDateRanges","customStart","customEnd","dateRanges","isNull","first","selectedRange","CUSTOM","CustomDateRangeSelectionPanel","startDate","endDate","childView","CustomTimeRangeSelectionPanel","date","startTime","endTime","i18nOptions","classes","startDateErrors","endDateErrors","generalErrors","showDatePickers","DatePicker","selectedDate","rendered","finalStartDate","datePicker","dateChanged","finalEndDate","validateDateRange","union","__WEBPACK_EXTERNAL_MODULE__250__","error","joinDateAndTime","time","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getDateRange","CustomTimeRangeSelectionPanelViewModel","KnockoutView","TimePicker","timeChanged","initializeChildView","__WEBPACK_EXTERNAL_MODULE__253__","newDateRanges","comparedCustomStart","comparedCustomEnd","isComparedCustomRangeSelected","isPrimaryCustomRangeSelected","isCustomRangeSelected","isChecked","DateRangesFactory","putil","makePrimaryDateRangesAccessor","makeComparedDateRangesAccessor","primaryDateRanges","comparedDateRanges","previousStart","previousEnd","lastYearStart","todayNYearsAgo","lastYearEnd","lastNDate","date1","date2","firstDateNMonthsAgo","lastDateNMonthsAgo","TWELVE_MONTHS_TO_DATE","firstDateNYearsAgo","COMPARISON_RANGES","PREVIOUS_PERIOD","SAME_PERIOD_LAST_YEAR","ALL_TIME_FIVE_YEARS","grain","getDay"],"sourceRoot":""}