} columns - DEPRECATED: The override column config.\r\n * add your column-property mapping into @bingads-webui-campaign/inline-download-grids-metadata\r\n *\r\n * @deprecated\r\n * @typedef InlineDownloadColumns\r\n * @type {InlineDownloadColumnConfig|InlineDownloadColumnConfig[]}\r\n *\r\n * @deprecated\r\n * @typedef InlineDownloadColumnConfig\r\n * @type {object}\r\n * @property {string} property - The property path in form of 'foo/bar'.\r\n * @property {string} title - The localized column header string.\r\n */\r\n\r\nexport default wrapPlugin(inlineDownloadPlugin);\r\n\r\nexport const inlineDownloadWithoutSegmentPlugin = wrapPlugin(originalInlineDownloadWithoutSegmentPlugin);\r\n\r\nexport const inlineDownloadWithoutFilterStatePlugin = wrapPlugin(withoutFilterStatePlugin);\r\n","import _ from 'underscore';\r\nimport $ from 'jquery';\r\nimport React from 'react';\r\nimport ReactDom from 'react-dom';\r\nimport { getPrimaryContacts, postPrimaryContactUpdate } from '@bingads-webui-campaign-legacy/primary-contact/index';\r\nimport { defineGridPlugin } from '@bingads-webui/projection-grid-plugin';\r\nimport { EditPrimaryContact } from '@bingads-webui-cc-react/edit-primary-contact';\r\n\r\nconst i18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!@bingads-webui-cc-react/edit-primary-contact');\r\n\r\n// This plugin responds to the event of clicking \"bulk edit primary contacts\" in Management Grid\r\n// The plugin will first make a ajax call to CCUI to see if selected accounts are eligible to make the change\r\n// and get the primary contact list for submitting.\r\nexport default defineGridPlugin(\r\n 'primaryContactBulkEditor',\r\n ['gridView'], (gridView, pulginConfig ) => {\r\n\r\n const containerId = 'BulkEditContainer';\r\n let editorContainer;\r\n let toolbar;\r\n let isEditing = false;\r\n\r\n if (pulginConfig && pulginConfig.existingContainer && $(pulginConfig.existingContainer).length) {\r\n editorContainer = $(pulginConfig.existingContainer);\r\n } else {\r\n editorContainer = $(``);\r\n editorContainer.hide();\r\n $('.bingadsgrid').prepend(editorContainer);\r\n }\r\n editorContainer.empty();\r\n\r\n function showToolbar() {\r\n toolbar.show();\r\n // In Management tab the grid itself has fixed height so hide it here.\r\n // TODO: Bug#1895168 to see if we have better way to hide the toolbar.\r\n $('.grid-toolbar').show();\r\n }\r\n\r\n function hideToolbar() {\r\n // In Management tab the grid itself has fixed height so hide/show it here.\r\n // TODO: Bug#1895168 to see if we have better way to hide the toolbar.\r\n $('.grid-toolbar').hide();\r\n toolbar.hide();\r\n }\r\n\r\n function hide() {\r\n editorContainer.slideUp('normal', () => ReactDom.unmountComponentAtNode(editorContainer[0]));\r\n showToolbar();\r\n isEditing = false;\r\n }\r\n\r\n const afterUpdate = ({result, callBack}) => {\r\n if (result.IsSuccess) {\r\n window.App.views.alertCenter.showConfirmation(result.Message);\r\n hide();\r\n callBack();\r\n }\r\n };\r\n\r\n const renderPrimaryContactReactComponent = (props) => {\r\n ReactDom.render(\r\n React.createElement(EditPrimaryContact, props, null),\r\n editorContainer[0]\r\n );\r\n };\r\n\r\n const renderEditComponent = ({cid, uid, callBack, data}) => {\r\n let props = {\r\n contacts: data.contacts,\r\n selected: data.selectedUser || {},\r\n warning: data.warningMessage || '',\r\n i18n,\r\n };\r\n\r\n props.onSelect = (userId) => {\r\n props.selected = _.findWhere(data.contacts, { 'Value': userId });\r\n renderPrimaryContactReactComponent(props);\r\n };\r\n\r\n props.onSubmit = () => {\r\n const accountIds = _.pluck(gridView.selectedItems(), 'Id');\r\n\r\n postPrimaryContactUpdate(cid, uid, accountIds, props.selected.Value)\r\n .then((result) => afterUpdate({result, callBack}));\r\n };\r\n\r\n props.onCancel = () => hide();\r\n\r\n renderPrimaryContactReactComponent(props);\r\n hideToolbar();\r\n editorContainer.slideDown();\r\n isEditing = true;\r\n };\r\n\r\n function show({cid, uid, callBack}) {\r\n if (gridView.selectedItems().length) {\r\n if (toolbar === undefined) {\r\n throw new Error('Call registerToolbar of this plug in before show the editor.');\r\n }\r\n\r\n const accountIds = _.pluck(gridView.selectedItems(), 'Id');\r\n\r\n\r\n getPrimaryContacts(cid, uid, accountIds)\r\n .then(\r\n (data) => {\r\n if (data.Alert && data.AlertContent) {\r\n window.App.views.alertCenter.showWarning(data.AlertContent);\r\n } else {\r\n renderEditComponent({cid, uid, callBack, data});\r\n }\r\n }\r\n );\r\n } else {\r\n hide();\r\n }\r\n }\r\n\r\n function registerToolbar(targetToolbar) {\r\n toolbar = targetToolbar;\r\n }\r\n\r\n function isInEditing() {\r\n return isEditing;\r\n }\r\n\r\n return { registerToolbar, isInEditing, show };\r\n }\r\n);\r\n","import _ from 'underscore';\r\n\r\n// this function can only handle float or int as input\r\n// could not handle local numbers in string\r\nexport const countNumberOfDigits = (num) => {\r\n const decimal = num.toString().split('.')[1];\r\n\r\n return _.isUndefined(decimal) ? 0 : decimal.length;\r\n};\r\n","import config from '@bingads-webui-component-legacy/config/index';\r\n\r\nconst i18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/feature/competition-tab');\r\n\r\n/**\r\n * Monetary, always with two decimal places\r\n */\r\nconst monetaryOptions = {\r\n compact: 'short',\r\n minimumFractionDigits: 2,\r\n maximumFractionDigits: 2,\r\n};\r\nconst currencyCode = config.get('AccountCurrencyCode');\r\n\r\nexport const formatCost = (value) =>\r\n i18n.formatCurrency(value, currencyCode, monetaryOptions);\r\n","import _ from 'underscore';\r\nimport decimal from '@bingads-webui-component-legacy/humanize/decimal';\r\n\r\nexport function getTrafficEstimationOp(adGroup, bid, budget, locationIds = [190], languages = [] ) {\r\n let adGroupRequests;\r\n\r\n if (_.isArray(adGroup)) {\r\n adGroupRequests = _.map(adGroup, (item) => {\r\n return {\r\n 'AdGroupName': item.Name,\r\n 'KeywordTrafficEstimateParameters': _.map(item.Keywords, (keyword) => {\r\n return {\r\n 'MatchType': keyword.MatchType,\r\n 'Text': keyword.Text,\r\n };\r\n }),\r\n 'MaxCPC': decimal.fromLocalToFloat(item.Bid),\r\n };\r\n });\r\n } else {\r\n adGroupRequests = [{\r\n 'AdGroupName': adGroup.Name,\r\n 'KeywordTrafficEstimateParameters': _.map(adGroup.Keywords, (keyword) => {\r\n return {\r\n 'MatchType': keyword.MatchType,\r\n 'Text': keyword.Text,\r\n };\r\n }),\r\n 'MaxCPC': decimal.fromLocalToFloat(bid),\r\n }];\r\n }\r\n\r\n const targetings = _\r\n .chain(locationIds)\r\n .compact()\r\n .map((locationId) => {\r\n return {\r\n '@odata.type': '#Model.TrafficEstimate.LocationTargeting',\r\n 'LocationId': locationId,\r\n };\r\n }).value();\r\n\r\n // send it when trafficestimation support more than one language in multi-language pilot\r\n if (!_.isEmpty(languages)) {\r\n _.each(languages, (language) => {\r\n targetings.push({\r\n '@odata.type': '#Model.TrafficEstimate.LanguageTargeting',\r\n 'Language': language,\r\n });\r\n });\r\n }\r\n\r\n let op = {\r\n data: {\r\n 'CampaignTrafficEstimate': {\r\n 'AdGroupTrafficEstimateParameters': adGroupRequests,\r\n 'Budget': decimal.fromLocalToFloat(budget),\r\n 'Targetings': targetings,\r\n },\r\n },\r\n path: 'AdInsight/V2',\r\n // host: 'http://stcvm-607:823/', // for local debug only\r\n };\r\n\r\n return op;\r\n}\r\n\r\nexport function getDailyBudgetAmount(budgetObj) {\r\n return budgetObj.Type === 'Monthly' ? budgetObj.Amount / 30 : parseFloat(budgetObj.Amount);\r\n}\r\n","import _ from 'underscore';\r\n\r\nfunction extract(formattedEstimationOp) {\r\n const adGroups = _.map(\r\n formattedEstimationOp.data.CampaignTrafficEstimate.AdGroupTrafficEstimateParameters,\r\n (adGroup) => {\r\n return {\r\n Keywords: adGroup.KeywordTrafficEstimateParameters,\r\n Bid: adGroup.MaxCPC,\r\n };\r\n },\r\n );\r\n const adGroupsWithoutBid = _.map(\r\n formattedEstimationOp.data.CampaignTrafficEstimate.AdGroupTrafficEstimateParameters,\r\n (adGroup) => {\r\n return {\r\n Keywords: adGroup.KeywordTrafficEstimateParameters,\r\n };\r\n },\r\n );\r\n const targetings = formattedEstimationOp.data.CampaignTrafficEstimate.Targetings;\r\n const locationIds = _\r\n .chain(targetings)\r\n .map((targeting) => targeting.LocationId)\r\n .compact()\r\n .value();\r\n const languages = _\r\n .chain(targetings)\r\n .map((targeting) => targeting.Language)\r\n .compact()\r\n .value();\r\n\r\n return {\r\n adGroups,\r\n locationIds,\r\n languages,\r\n adGroupsWithoutBid,\r\n };\r\n}\r\n\r\nexport function budgetSuggestionOpFormatter(formattedEstimationOp, params) {\r\n const extractedOp = extract(formattedEstimationOp);\r\n\r\n return {\r\n data: {\r\n Request: {\r\n Campaigns: [{\r\n AdGroups: extractedOp.adGroups,\r\n CurrentBudget: params.budget,\r\n InitialBudget: params.initBudget,\r\n Languages: extractedOp.languages,\r\n LocationIds: extractedOp.locationIds,\r\n }],\r\n },\r\n },\r\n path: formattedEstimationOp.path,\r\n };\r\n}\r\n\r\nexport function bidSuggestionOpFormatter(formattedEstimationOp) {\r\n const extractedOp = extract(formattedEstimationOp);\r\n\r\n return {\r\n data: {\r\n Request: {\r\n AdGroups: extractedOp.adGroupsWithoutBid,\r\n Languages: extractedOp.languages,\r\n LocationIds: extractedOp.locationIds,\r\n },\r\n },\r\n path: formattedEstimationOp.path,\r\n };\r\n}\r\n","import getTrafficEstimation from '@bingads-webui-campaign-legacy/budget/shared/getTrafficEstimation';\r\nimport { bidSuggestionOpFormatter, budgetSuggestionOpFormatter } from '@bingads-webui-campaign-legacy/budget/shared/bidBudgetSuggestionFormatter';\r\n\r\nconst bidSuggestionEndpoint = '/Customers(:advertisercustomer_id)/Accounts(:account_id)/Default.CampaignTrafficEstimateWithSuggestedBid';\r\nconst budgetSuggestionEndpoint = '/Customers(:advertisercustomer_id)/Accounts(:account_id)/Default.GetEstimatedBudgetByCampaigns';\r\n\r\nfunction getSuggestion(params, callbacks, options, timestamp, isBid) {\r\n const endpoint = isBid ? bidSuggestionEndpoint : budgetSuggestionEndpoint;\r\n const formatter = isBid ? bidSuggestionOpFormatter : budgetSuggestionOpFormatter;\r\n\r\n return getTrafficEstimation(params, callbacks, options, endpoint, formatter, timestamp);\r\n}\r\n\r\nexport function getBidSuggestion(params, callbacks, options, timestamp) {\r\n return getSuggestion(params, callbacks, options, timestamp, true);\r\n}\r\n\r\nexport function getBudgetSuggestion(params, callbacks, options, timestamp) {\r\n return getSuggestion(params, callbacks, options, timestamp, false);\r\n}\r\n","import _ from 'underscore';\r\nimport odata from '@bingads-webui-component-legacy/http/channel/odata';\r\nimport uiBlocker from '@bingads-webui-component-legacy/uiblocker/index';\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\nimport { getTrafficEstimationOp } from '@bingads-webui-campaign-legacy/budget/shared/formatter';\r\nimport { getSupportedLocationIds } from '@bingads-webui-campaign-legacy/location-targets/util/filters';\r\n\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/campaign-creation-advanced');\r\n\r\nconst MAX_KEYWORDS_COUNT = 1000;\r\nconst MAX_KEYWORD_LENGTH = 100;\r\nconst MAX_LOCATION_IDS_COUNT = 2000;\r\nconst estimationEndpoint = '/Customers(:advertisercustomer_id)/Accounts(:account_id)/Default.CampaignTrafficEstimate';\r\n\r\n// adinsight has limitation: keyword's length < 200, but follows ui limitation which is 100\r\nfunction isKeywordLengthInvalid(op) {\r\n return _.some(op.data.CampaignTrafficEstimate.AdGroupTrafficEstimateParameters, (adgroup) => {\r\n return _.some(adgroup.KeywordTrafficEstimateParameters, (keyword) => {\r\n return keyword && keyword.Text && keyword.Text.length >= MAX_KEYWORD_LENGTH;\r\n });\r\n });\r\n}\r\n\r\nexport default function (params, callbacks, options, endPoint = estimationEndpoint, opTransformer, timestamp) {\r\n const odataHost = config.get('adinsight.odata.url');\r\n let locations = getSupportedLocationIds(params.locations);\r\n\r\n if (locations.supportedCount > MAX_LOCATION_IDS_COUNT && _.isFunction(callbacks.onServiceNotSupported)) {\r\n // this case is only for budget and bid suggestion and no notification will show, so no wording here\r\n // for \"Get performance estimates\", when count of location ids > 2000, the button will be hided\r\n callbacks.onServiceNotSupported('', timestamp);\r\n } else {\r\n let op = getTrafficEstimationOp(params.adGroup, params.bid, params.budget, locations.items, params.languages);\r\n\r\n // adinsight has limitation: keywords count < 1000\r\n if (_.sumBy(op.data.CampaignTrafficEstimate.AdGroupTrafficEstimateParameters, (adgroup) => adgroup.KeywordTrafficEstimateParameters.length) >= MAX_KEYWORDS_COUNT) {\r\n if (_.isFunction(callbacks.onServiceNotSupported)) {\r\n callbacks.onServiceNotSupported(i18n.get('Budget_TrafficEstimation_MoreKeywordRequestsThanServiceAllowed'), timestamp);\r\n }\r\n } else if (isKeywordLengthInvalid(op)) {\r\n if (_.isFunction(callbacks.onServiceNotSupported)) {\r\n callbacks.onServiceNotSupported(i18n.get('Budget_TrafficEstimation_MoreKeywordLengthRequestsThanServiceAllowed'), timestamp);\r\n }\r\n } else {\r\n if (_.isFunction(opTransformer)) {\r\n op = opTransformer(op, params);\r\n }\r\n\r\n const adGroupTrafficEstimateParameters = _.chain(op)\r\n .result('data')\r\n .result('CampaignTrafficEstimate')\r\n .result('AdGroupTrafficEstimateParameters')\r\n .value() || [];\r\n const isDSAMixedModeCampaignEnabled = _.result(config.get('Permissions'), 'IsDSAMixedModeCampaignEnabled', false);\r\n\r\n // if user enabled mixed mode campaign creation\r\n // there might be a scenario that all created ad groups are dynamic ad groups, and they don't have any keyword in it\r\n // after the parsing of opTransformer there should be no AdGroupTrafficEstimateParameters, which is not acceptable by trafficEstimation API\r\n // as a result we need to return an empty response manually\r\n if (adGroupTrafficEstimateParameters.length === 0 && isDSAMixedModeCampaignEnabled && params.campaignType === 'search') {\r\n callbacks.onSuccess([{ value: [] }], timestamp);\r\n } else {\r\n odata.post(endPoint, _.extend(op, {host: odataHost}),\r\n (dummy, response, textStatus, xhr) => {\r\n if (response && xhr && _.isFunction(xhr.getResponseHeader)) {\r\n response.suggestedBidRequestId = (xhr && xhr.getResponseHeader('x-ms-requestid')) || '';\r\n }\r\n },\r\n )\r\n .then((...args) => {\r\n if (_.isFunction(callbacks.onSuccess)) {\r\n callbacks.onSuccess(...args, timestamp );\r\n }\r\n })\r\n .catch((...args) => {\r\n if (_.isFunction(callbacks.onRequestError)) {\r\n callbacks.onRequestError(...args, timestamp);\r\n }\r\n })\r\n .finally(options.spinner ? uiBlocker(options.spinner) : _.noop);\r\n }\r\n }\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport pageContext from '@bingads-webui-static-legacy/page-context';\r\n\r\nexport function logBidView(adgroup, activity) {\r\n if (activity && _.isFunction(activity.trace)) {\r\n activity.trace(\r\n `View adgroup bid suggestion success for ${adgroup.Id} with suggested bid ${adgroup.suggestedBid} (from NKW: ${adgroup.isNKW}), Currency: ${pageContext.AccountCurrencyCode}`,\r\n 'SuggestionInCreationWorkflow/ViewBid'\r\n );\r\n }\r\n}\r\n\r\nexport function logBidAdoption(adgroup, activity) {\r\n if (activity && _.isFunction(activity.trace)) {\r\n activity.trace(\r\n `Apply adgroup bid suggestion success for ${adgroup.Id} with suggested bid ${adgroup.suggestedBid} (from NKW: ${adgroup.isNKW}) and saved bid ${adgroup.SearchBid}, viewedSuggestion: ${adgroup.viewedSuggestion}, Currency: ${pageContext.AccountCurrencyCode}`,\r\n 'SuggestionInCreationWorkflow/ApplyBid'\r\n );\r\n }\r\n}\r\n\r\nexport function logBudgetView(campaign, activity) {\r\n if (activity && _.isFunction(activity.trace)) {\r\n activity.trace(\r\n `View campaign budget suggestion success for ${campaign.Id} with suggested budget ${campaign.suggestedBudget} and init budget ${campaign.initBudget}, current budget ${campaign.budget}, Currency: ${pageContext.AccountCurrencyCode}`,\r\n 'SuggestionInCreationWorkflow/ViewBudget'\r\n );\r\n }\r\n}\r\n\r\nexport function logBudgetAdoption(campaign, activity) {\r\n if (activity && _.isFunction(activity.trace)) {\r\n activity.trace(\r\n `Apply campaign budget suggestion success for ${campaign.Id} with suggested budget ${campaign.suggestedBudget} and init budget ${campaign.initBudget}, saved budget ${campaign.budget}, Currency: ${pageContext.AccountCurrencyCode}`,\r\n 'SuggestionInCreationWorkflow/ApplyBudget'\r\n );\r\n }\r\n}\r\n\r\nexport function logBudgetLandScapeView(campaignId, clientName, optId, suggestedBudgetValue, currency, activity) {\r\n if (activity && _.isFunction(activity.trace)) {\r\n activity.trace(\r\n `View inline budget suggestion success for CampaignId:${campaignId}, ClientName:${clientName}, BudgetSuggestionId:${optId}, SuggestedBudget:${suggestedBudgetValue}, Currency:${currency}`,\r\n 'InlineBudgetEditor/ViewBudget'\r\n );\r\n }\r\n}\r\n\r\nexport function logBudgetLandScapeAdoption(campaignId, clientName, optId, suggestedBudgetValue, userInputBudgetValue, currency, activity) {\r\n if (activity && _.isFunction(activity.trace)) {\r\n activity.trace(\r\n `Apply inline budget suggestion success for CampaignId:${campaignId}, ClientName:${clientName}, BudgetSuggestionId:${optId}, SuggestedBudget:${suggestedBudgetValue}, SavedBudget:${userInputBudgetValue}, Currency:${currency}`,\r\n 'InlineBudgetEditor/ApplyBudget'\r\n );\r\n }\r\n}\r\n\r\nexport function logBudgetLandScapeForSharedBudgetCampaignView(budgetId, clientName, optId, suggestedBudgetValue, currency, activity) {\r\n if (activity && _.isFunction(activity.trace)) {\r\n activity.trace(\r\n `View inline shared budget suggestion success for BudgetId:${budgetId}, ClientName:${clientName}, BudgetSuggestionId:${optId}, SuggestedBudget:${suggestedBudgetValue}, Currency:${currency}`,\r\n 'InlineBudgetEditor/ViewBudget'\r\n );\r\n }\r\n}\r\n\r\nexport function logBudgetLandScapeForSharedBudgetCampaignAdoption(budgetId, clientName, optId, suggestedBudgetValue, userInputBudgetValue, currency, activity) {\r\n if (activity && _.isFunction(activity.trace)) {\r\n activity.trace(\r\n `Apply inline shared budget suggestion success for BudgetId:${budgetId}, ClientName:${clientName}, BudgetSuggestionId:${optId}, SuggestedBudget:${suggestedBudgetValue}, SavedBudget:${userInputBudgetValue}, Currency:${currency}`,\r\n 'InlineBudgetEditor/ApplyBudget'\r\n );\r\n }\r\n}\r\n","export const weekly2Monthly = (weeklyVal) => {\r\n return weeklyVal * 30.4 / 7;\r\n};\r\n\r\nexport const weekly2MonthlyInt = (weeklyVal) => {\r\n return Math.round(weekly2Monthly(weeklyVal));\r\n};\r\n","/* global _TL_ */\r\nimport ko from 'knockout';\r\nimport { formatCost } from '@bingads-webui-campaign-legacy/budget/shared/currencyFormatter';\r\nimport decimal from '@bingads-webui-component-legacy/humanize/decimal';\r\n\r\nexport default class ViewModel {\r\n constructor(i18n, suggestedBid, bidHintKey, suggestedClicks, impressionsMore, newI18n) {\r\n this.i18n = i18n;\r\n this.newI18n = newI18n;\r\n this.suggestedBid = ko.observable(decimal.fromLocalToFloat(suggestedBid));\r\n this.bidHintKey = ko.observable(bidHintKey);\r\n this.click = ko.observable(suggestedClicks);\r\n this.imporessionMore = ko.observable(impressionsMore);\r\n this.bidSuggestion = ko.computed(() => {\r\n return this.i18n.get('Creation_Workflow_Bid_Suggestion_Action', {\r\n bid: formatCost(this.suggestedBid()),\r\n });\r\n }, this);\r\n this.applyBtnText = ko.computed(() => {\r\n return newI18n.getString(_TL_('Apply'));\r\n }, this);\r\n this.lowBidBtnTitle = ko.computed(() => {\r\n return newI18n.getString(_TL_('Recommended ad group bid'));\r\n }, this);\r\n this.normalBidSuggestion = ko.computed(() => {\r\n return newI18n.getString(_TL_('The recommended bid is {{suggestedBid}}. You could get {{imporessionMore}} more impressions and {{click}} more clicks if you apply.'),\r\n {\r\n suggestedBid: this.suggestedBid(),\r\n imporessionMore: parseInt(this.imporessionMore()),\r\n click: parseInt(this.click()),\r\n }\r\n );\r\n }, this);\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport ko from 'knockout';\r\nimport template from '@bingads-webui-campaign-legacy/budget/template/bid-suggestion-popup.pug';\r\nimport ViewModel from '@bingads-webui-campaign-legacy/budget/viewmodel/bid-suggestion-popup';\r\n\r\nexport default class View extends Backbone.View {\r\n initialize(options) {\r\n this.i18n = options.i18n;\r\n this.options = options;\r\n this.koModel = new ViewModel(this.i18n, this.options.suggestedBid, this.options.bidHintKey, this.options.suggestedClicks, this.options.impressionsMore, this.options.newI18n);\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click .apply': 'apply',\r\n 'click .cancel': 'cancel',\r\n 'click .apply-link': 'apply',\r\n 'click .cancel-link': 'cancel',\r\n 'click .close': 'cancel',\r\n 'click .close-button': 'cancel',\r\n };\r\n }\r\n\r\n updateSuggestedBid(suggestedBid) {\r\n this.koModel.suggestedBid(suggestedBid);\r\n }\r\n\r\n cancel() {\r\n this.$el.hide();\r\n }\r\n\r\n apply() {\r\n this.options.callback(this.koModel.suggestedBid());\r\n if (this.activityLogger) {\r\n this.activityLogger.signal({\r\n Scenario: 'CampaignCreation',\r\n SuggestedBid: this.options.suggestedBid,\r\n OriginalInputBid: this.options.Bid,\r\n EventName: 'CreationFlowLowBidSuggestionApply',\r\n SuggestedBidRequestId: this.options.suggestedBidRequestId,\r\n }\r\n );\r\n }\r\n this.cancel();\r\n }\r\n\r\n render () {\r\n this.$el.html(template({ i18n: this.i18n }));\r\n ko.applyBindings(this.koModel, this.el);\r\n return this;\r\n }\r\n}\r\n","import ko from 'knockout';\r\n\r\nexport default class ViewModel {\r\n constructor(options = {\r\n Amount: '',\r\n isEditing: false,\r\n AccountCurrencyCode: '',\r\n }) {\r\n this.amount = ko.observable(options.Amount);\r\n this.accountCurrencyCode = options.AccountCurrencyCode;\r\n this.isEditing = ko.observable(options.isEditing);\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport Backbone from 'backbone';\r\nimport ko from 'knockout';\r\nimport pageContext from '@bingads-webui-static-legacy/page-context';\r\nimport BudgetView from '@bingads-webui-campaign-legacy/budget/view/budget';\r\nimport template from '@bingads-webui-campaign-legacy/budget/template/budget-panel.pug';\r\nimport ViewModel from '@bingads-webui-campaign-legacy/budget/viewmodel/budget-panel';\r\nimport decimal from '@bingads-webui-component-legacy/humanize/decimal';\r\n\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/campaign-creation-advanced');\r\n\r\nexport default class View extends Backbone.View {\r\n initialize(options = {}) {\r\n let self = this;\r\n\r\n self.options = options;\r\n\r\n self.koModel = new ViewModel({\r\n Amount: self.model.Amount,\r\n AccountCurrencyCode: pageContext.AccountCurrencyCode,\r\n isEditing: false,\r\n });\r\n\r\n self.budgetView = new BudgetView({\r\n model: self.model,\r\n initBudget: options.initBudget,\r\n haveBudgetSuggestion: options.haveBudgetSuggestion,\r\n languages: options.languages,\r\n campaignId: options.campaignId,\r\n activity: options.activity,\r\n isForVNext: options.isForVNext,\r\n activityLogger: options.activityLogger,\r\n });\r\n\r\n self.budgetView.on('budget.updated', (dailyBudget) => {\r\n self.trigger('budget.updated', dailyBudget);\r\n });\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click .link-edit > a': 'expandEditor',\r\n };\r\n }\r\n\r\n render() {\r\n this.$el.html(template({ i18n }));\r\n ko.applyBindings(this.koModel, this.el);\r\n this.$('.budget-editor').empty().append(this.budgetView.render().el);\r\n return this;\r\n }\r\n\r\n update(model) {\r\n if (_.isUndefined(model.Amount)) {\r\n // If there is no budget amount, then we should prompt the user for it instead of displaying a blank panel\r\n if (_.isUndefined(this.koModel.amount())) {\r\n this.koModel.isEditing(true);\r\n }\r\n } else {\r\n this.koModel.amount(decimal.fromFloatToString(model.Amount));\r\n }\r\n\r\n this.budgetView.update(model);\r\n }\r\n\r\n updateSuggestedBudget(adGroups, fromBudgetUpdate) {\r\n this.budgetView.updateSuggestedBudget(adGroups, fromBudgetUpdate);\r\n }\r\n\r\n validate() {\r\n return this.budgetView.validate();\r\n }\r\n\r\n getValues() {\r\n return this.budgetView.ko_model.toObject();\r\n }\r\n\r\n expandEditor() {\r\n this.koModel.isEditing(true);\r\n }\r\n\r\n enough() {\r\n return this.budgetView.enough();\r\n }\r\n\r\n getSuggestedBudget() {\r\n return this.budgetView.getSuggestedBudget();\r\n }\r\n}\r\n","/* eslint-disable */\r\nimport _ from 'underscore';\r\nimport ko from 'knockout';\r\nimport pageContext from '@bingads-webui-static-legacy/page-context';\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\nimport * as budgetRangeModule from '@bingads-webui-campaign-legacy/common-grid-config/budget/get-budget-range';\r\nimport decimalNumber from '@bingads-webui-component-legacy/humanize/decimal';\r\nimport humanizeNumber from '@bingads-webui-component-legacy/humanize/number';\r\nimport ko_schema from '@bingads-webui-component-legacy/ko-schema/index';\r\nimport * as _currenyFormatter from '@bingads-webui-campaign-legacy/budget/shared/currencyFormatter';\r\nimport '@bingads-webui-component-legacy/extension/underscore';\r\nvar i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/campaign-creation-advanced');\r\nvar s$Budget = window.globalLegacySchema.get('Budget');\r\nvar formatCost = _currenyFormatter.formatCost;\r\nvar BudgetTypes = {\r\n DailyStandard: 'DailyStandard',\r\n DailyAccelerated: 'DailyAccelerated',\r\n LifetimeBudgetStandard: 'LifetimeBudgetStandard'\r\n};\r\nvar BudgetScopes = {\r\n Daily: 'Daily',\r\n Lifetime: 'Lifetime'\r\n};\r\nvar BudgetTypesToBudgetScope = {\r\n [BudgetTypes.DailyStandard]: BudgetScopes.Daily,\r\n [BudgetTypes.DailyAccelerated]: BudgetScopes.Daily,\r\n [BudgetTypes.LifetimeBudgetStandard]: BudgetScopes.Lifetime\r\n};\r\nvar BudgetTypeSectionOptions = [{\r\n value: BudgetTypes.DailyStandard,\r\n text: i18n.get('BudgetLimitType_Daily')\r\n}, {\r\n value: BudgetTypes.LifetimeBudgetStandard,\r\n text: i18n.get('BudgetLimitType_Lifetime')\r\n}];\r\nvar currencyCode = config.get('AccountCurrencyCode');\r\nvar isDeprecateAcceleratedBudgetEnabled = pageContext.Permissions.IsDeprecateAcceleratedBudgetEnabled;\r\nvar isDeprecateAcceleratedBudgetOptout = pageContext.Permissions.IsDeprecateAcceleratedBudgetOptoutEnabled;\r\nvar ViewModel = function (options) {\r\n var budgetRangeNew = budgetRangeModule.getBudgetRange(currencyCode);\r\n var budgetRange = budgetRangeModule.getBudgetRangeOld(currencyCode);\r\n if (options.validationDailyMinBudget && !_.isEmpty(budgetRange)) {\r\n budgetRange.DailyRange.FloorValue = options.validationDailyMinBudget;\r\n }\r\n var USDefaultBudget = pageContext.Permissions.IsDefaultBudgetExperimentationEnabled ? 25 : 20;\r\n var realDefaultBudget = budgetRangeNew.Daily.Default;\r\n var defaultBudget = pageContext.AccountCurrencyCode && pageContext.AccountCurrencyCode === 'USD' ? USDefaultBudget : realDefaultBudget;\r\n if (options.validationDailyMinBudget && defaultBudget < options.validationDailyMinBudget) {\r\n defaultBudget = options.validationDailyMinBudget;\r\n }\r\n var budget = _.defaults({}, options.budget, {\r\n Amount: defaultBudget,\r\n Type: BudgetTypes.DailyStandard\r\n });\r\n this.suggestedBudget = ko.observable(0);\r\n this.clicksIncrease = ko.observable(0);\r\n this.isDailyBudgetExpanded = ko.observable(false);\r\n this.showFACHint = ko.observable(false);\r\n this.featureAdoptionCouponValue = ko.observable(0);\r\n this.budgetTypeSelectionOptions = BudgetTypeSectionOptions;\r\n this.selectedBudgetType = ko.observable(BudgetTypes.DailyStandard);\r\n this.showBudgetTypeSelectionOptions = options.showBudgetTypeSelection;\r\n this.allowBudgetTypeSelection = options.allowBudgetTypeSelection;\r\n this.budgetAmountPlaceholder = i18n.get('CampaignSetting_Placeholder_Budget').replace('{0}', decimalNumber.fromLocalToString(defaultBudget));\r\n ko_schema.properties(this, s$Budget, ['Amount', 'Type'], budget);\r\n this.BudgetScope = ko.observable(BudgetTypesToBudgetScope[budget.Type]);\r\n this.isDailyStandard = ko.observable(budget.Type === BudgetTypes.DailyStandard);\r\n this.hideDailyBudgetOptions = options.hideDailyBudgetOptions;\r\n this.readOnly = options.readOnly;\r\n this.hideAcceleratedBudgetOption = ko.computed(function () {\r\n return isDeprecateAcceleratedBudgetEnabled && budget.Type === BudgetTypes.DailyStandard;\r\n });\r\n this.showSuggestedBudget = ko.computed(function () {\r\n return this.Amount() < this.suggestedBudget() && this.clicksIncrease() > 0;\r\n }, this);\r\n this.showBudgetMinRecommend = ko.computed(function () {\r\n const showBudgetMinRecommend = options.showBudgetMinRecommend && options.minimumBudget && options.minimumBudget >= 0.05 && this.Amount() && this.Amount() < options.minimumBudget;\r\n if (options.activityLogger && showBudgetMinRecommend) {\r\n options.activityLogger.trace('BCCForBudgetMinimumRecommendation: show');\r\n }\r\n return showBudgetMinRecommend;\r\n }, this);\r\n this.budgetSuggestion = ko.computed(function () {\r\n return i18n.get('Creation_Workflow_Budget_Suggestion_Per_Month', {\r\n increasedClicks: humanizeNumber.format(this.clicksIncrease()),\r\n budget: formatCost(this.suggestedBudget())\r\n });\r\n }, this);\r\n this.isDailyStandard.forEditing = ko.computed({\r\n read: function () {\r\n return this.isDailyStandard().toString();\r\n },\r\n write: function (newValue) {\r\n return this.isDailyStandard(newValue === 'true');\r\n }\r\n }, this);\r\n this.budgetLimit = ko.computed(function () {\r\n if (!_.isEmpty(budgetRange)) {\r\n var budgetScope = this.BudgetScope();\r\n return budgetScope === BudgetScopes.Daily ? budgetRange.DailyRange : budgetRange.LifetimeRange;\r\n }\r\n }, this);\r\n this.featureAdoptionCouponHint = ko.computed(function () {\r\n return i18n.get('Coupon_applied_10days', {\r\n value: this.featureAdoptionCouponValue()\r\n });\r\n }, this);\r\n ko.computed(function () {\r\n if (this.showBudgetTypeSelectionOptions && this.allowBudgetTypeSelection) {\r\n this.Type(this.selectedBudgetType());\r\n this.BudgetScope(BudgetTypesToBudgetScope[this.selectedBudgetType()]);\r\n }\r\n }, this);\r\n var amountTypeValidator = _.result(this.Amount.validators, 'type');\r\n if (amountTypeValidator) {\r\n amountTypeValidator.message = i18n.get('Campaigns_InlineValidBudgetInputMsg');\r\n }\r\n var amountSizeValidator = _.result(this.Amount.validators, 'decimalLength');\r\n if (amountSizeValidator) {\r\n amountSizeValidator.message = i18n.get('Campaigns_InlineValidBudgetInputMsg');\r\n }\r\n (this.computeBudgetError = function () {\r\n var budget = this.Amount(), minValue = this.budgetLimit().FloorValue, maxValue = this.budgetLimit().CeilingValue;\r\n if (_.isNil(budget)) {\r\n return i18n.get('CampaignBudget_Validation_RequiredField');\r\n }\r\n if (_.isEmpty(budgetRange)) {\r\n return '';\r\n }\r\n if (this.Amount.isValid() && (budget < minValue || budget > maxValue)) {\r\n return this.BudgetScope() === BudgetScopes.Daily ? i18n.get('Budget_InputValueError_Daily').replace('{0}', options.accountCurrencyCode).replace('{1}', decimalNumber.fromFloatToString(this.budgetLimit().FloorValue)) : i18n.get('Budget_InputValueError_Lifetime').replace('{0}', options.accountCurrencyCode).replace('{1}', decimalNumber.fromFloatToString(this.budgetLimit().FloorValue)).replace('{2}', options.accountCurrencyCode).replace('{3}', decimalNumber.fromFloatToString(this.budgetLimit().CeilingValue));\r\n }\r\n return '';\r\n }, this.useSuggestedBudget = function () {\r\n this.Amount(this.suggestedBudget());\r\n });\r\n this.applySuggestedBudget = function () {\r\n if (options.minimumBudget) {\r\n if (options.activityLogger) {\r\n options.activityLogger.trace('BCCForBudgetMinimumRecommendation: apply');\r\n }\r\n this.Amount(options.minimumBudget * 1);\r\n }\r\n };\r\n this.budgetError = ko.computed(this.computeBudgetError, this);\r\n this.Amount.subscribe(() => {\r\n this.Amount.validate();\r\n });\r\n this.budgetInvalid = ko.computed(function () {\r\n return !_.isEmpty(this.budgetError()) || !this.Amount.isValid();\r\n }, this);\r\n this.budget = ko.computed(function () {\r\n return this.Amount();\r\n }, this);\r\n this.budgetType = ko.computed(function () {\r\n return this.Type();\r\n }, this);\r\n this.budgetLabel = ko.computed(function () {\r\n return this.budgetInvalid() ? i18n.get('Label_Budget') : i18n.get('Campaign budget per day by {{unit}}').replace('{{unit}}', options.accountCurrencyCode);\r\n }, this);\r\n this.budgetTypeLabel = ko.computed(function () {\r\n return i18n.get('Label_BudgetType');\r\n }, this);\r\n};\r\nViewModel.prototype.updateSuggestedBudget = function (suggestedBudget, clicksIncrease) {\r\n this.suggestedBudget(suggestedBudget ? suggestedBudget : 0);\r\n this.clicksIncrease(clicksIncrease ? clicksIncrease : 0);\r\n};\r\nViewModel.prototype.update = function (model) {\r\n if (_.isObject(model)) {\r\n if (this.Amount() !== model.Amount) {\r\n this.Amount(model.Amount);\r\n }\r\n this.Type(model.Type);\r\n this.BudgetScope(BudgetTypesToBudgetScope[model.Type]);\r\n this.isDailyStandard(model.Type === BudgetTypes.DailyStandard);\r\n this.selectedBudgetType(model.Type);\r\n }\r\n};\r\nViewModel.prototype.enough = function () {\r\n return this.Amount() >= this.suggestedBudget();\r\n};\r\nViewModel.prototype.updateFeatureAdoptionCoupon = function ({showFACHint, couponValue}) {\r\n this.showFACHint(showFACHint);\r\n this.featureAdoptionCouponValue(couponValue);\r\n};\r\nexport default ViewModel;\r\n","/* eslint-disable */\r\nimport _ from 'underscore';\r\nimport Backbone from 'backbone';\r\nimport ko from 'knockout';\r\nimport pageContext from '@bingads-webui-static-legacy/page-context';\r\nimport template from '@bingads-webui-campaign-legacy/budget/template/budget.pug';\r\nimport ViewModel from '@bingads-webui-campaign-legacy/budget/viewmodel/budget';\r\nimport jsdata from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport * as _getSuggestion from '@bingads-webui-campaign-legacy/budget/shared/getBudgetBidSuggestion';\r\nimport * as _logger from '@bingads-webui-campaign-legacy/budget/shared/log';\r\nimport * as _weeklyToMonthly from '@bingads-webui-campaign-legacy/budget/shared/weeklyToMonthly';\r\nvar i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/campaign-creation-advanced');\r\nvar getBudgetSuggestion = _getSuggestion.getBudgetSuggestion;\r\nvar logBudgetView = _logger.logBudgetView;\r\nvar weekly2MonthlyInt = _weeklyToMonthly.weekly2MonthlyInt;\r\nfunction formatAdGroupClickList(adGroupClickList) {\r\n return _.map(adGroupClickList, weekly2MonthlyInt);\r\n}\r\nfunction sumAdGroupClickList(adGroupClickList) {\r\n return _.reduce(formatAdGroupClickList(adGroupClickList), function (memo, num) {\r\n return memo + num;\r\n }, 0);\r\n}\r\nvar View = Backbone.View.extend({\r\n initialize: function (options) {\r\n options = options || ({});\r\n this.options = options;\r\n this.ko_model = new ViewModel({\r\n budget: this.model,\r\n showBudgetMinRecommend: this.options.showBudgetMinRecommend,\r\n minimumBudget: this.options.minimumBudget ? this.options.minimumBudget.toFixed(2) : undefined,\r\n showBudgetTypeSelection: this.options.showBudgetTypeSelection,\r\n allowBudgetTypeSelection: this.options.allowBudgetTypeSelection,\r\n accountCurrencyCode: pageContext.AccountCurrencyCode,\r\n activityLogger: this.options.activityLogger,\r\n hideDailyBudgetOptions: this.options.hideDailyBudgetOptions,\r\n validationDailyMinBudget: this.options.validationDailyMinBudget,\r\n currencySymbol: this.options.currencySymbol,\r\n readOnly: this.options.readOnly,\r\n });\r\n this.initBudget = options.initBudget;\r\n this.haveBudgetSuggestion = options.haveBudgetSuggestion;\r\n this.languages = options.languages;\r\n this.campaignId = options.campaignId;\r\n this.activity = options.activity;\r\n this.isForVNext = options.isForVNext;\r\n this.isDailyStandardName = _.uniqueId('isDailyStandard_');\r\n },\r\n events: {\r\n 'click .expander-dailyType': 'toggleDailyType',\r\n 'click .use-suggested-budget': 'useSuggestedBudget',\r\n 'change input.budget-amount': 'budgetChanged',\r\n 'click .apply-budget': 'applySuggestedBudget',\r\n 'change input.budget-type': 'budgetTypeChanged'\r\n },\r\n render: function () {\r\n this.$el.html(template({\r\n i18n: i18n,\r\n accountCurrencyCode: pageContext.AccountCurrencyCode,\r\n minimumBudget: this.options.minimumBudget ? this.options.minimumBudget.toFixed(2) : 'undefined',\r\n currencySymbol: this.options.currencySymbol || '',\r\n isForVNext: this.isForVNext,\r\n isDailyStandardName: this.isDailyStandardName\r\n }));\r\n this.ko_model.budget.subscribe((function (val) {\r\n if (!this.ko_model.budgetInvalid()) {\r\n this.trigger('budget.updated', val);\r\n }\r\n this.triggerChangeEvent();\r\n }).bind(this));\r\n this.ko_model.budgetType.subscribe((function (val) {\r\n this.triggerChangeEvent();\r\n }).bind(this));\r\n ko.applyBindings(this.ko_model, this.el);\r\n return this;\r\n },\r\n validate: function () {\r\n var valid = _.isEmpty(this.ko_model.budgetError());\r\n var isValid = this.ko_model.validate() && valid;\r\n if (!isValid) {\r\n if (this.options.activityLogger) {\r\n this.options.activityLogger.signal('budget is not valid', 'budget');\r\n }\r\n }\r\n return isValid;\r\n },\r\n triggerChangeEvent: function () {\r\n if (this.options.withRealTimeUpdates) {\r\n this.trigger('change', this.ko_model.toObject(), !this.ko_model.budgetInvalid());\r\n }\r\n },\r\n update: function (model) {\r\n this.ko_model.update(model);\r\n },\r\n toggleDailyType: function () {\r\n this.ko_model.isDailyBudgetExpanded(!this.ko_model.isDailyBudgetExpanded());\r\n this.$('#AdvancedBudgetOptions').toggleClass('displayNone');\r\n },\r\n useSuggestedBudget: function () {\r\n this.ko_model.useSuggestedBudget();\r\n },\r\n applySuggestedBudget: function () {\r\n this.ko_model.applySuggestedBudget();\r\n },\r\n budgetChanged: function () {\r\n if (this.options.activityLogger) {\r\n this.options.activityLogger.signal('budget change', 'budget');\r\n }\r\n },\r\n budgetTypeChanged: function () {\r\n if (this.options.activityLogger) {\r\n this.options.activityLogger.signal('budget type change', 'budgetType');\r\n }\r\n },\r\n getValues: function () {\r\n return this.ko_model.toObject();\r\n },\r\n enough: function () {\r\n return this.ko_model.enough();\r\n },\r\n getSuggestedBudget: function () {\r\n return this.ko_model.suggestedBudget();\r\n },\r\n updateSuggestedBudget: function (adGroups, fromBudgetUpdate) {\r\n var self = this;\r\n fromBudgetUpdate = !!fromBudgetUpdate;\r\n if (!this.validate()) {\r\n self.ko_model.updateSuggestedBudget(0, 0);\r\n } else if (this.haveBudgetSuggestion && adGroups.length > 0 && !(fromBudgetUpdate && self.ko_model.Amount() >= self.ko_model.suggestedBudget())) {\r\n getBudgetSuggestion({\r\n locations: jsdata.Intermediate.getAll('CampaignCriterion'),\r\n adGroup: adGroups,\r\n budget: this.ko_model.budget(),\r\n initBudget: this.initBudget,\r\n languages: this.languages\r\n }, {\r\n onSuccess: function (data) {\r\n if (data && data.value && data.value.length) {\r\n var clicksAsSuggestedBudget = sumAdGroupClickList(data.value[0].EstimatedAdGroupClicksAsSuggestedBudget);\r\n var clicksAsCurrentBudget = sumAdGroupClickList(data.value[0].EstimatedAdGroupClicksAsCurrentBudget);\r\n var EstimatedAmountAsSuggestedBudget = data.value[0].EstimatedAmountAsSuggestedBudget;\r\n var clicksIncrease = clicksAsSuggestedBudget - clicksAsCurrentBudget;\r\n var suggestedBudget = Math.ceil(EstimatedAmountAsSuggestedBudget.Amount);\r\n self.ko_model.updateSuggestedBudget(suggestedBudget, clicksIncrease);\r\n if (self.ko_model.showSuggestedBudget()) {\r\n logBudgetView({\r\n Id: self.campaignId,\r\n suggestedBudget: self.ko_model.suggestedBudget(),\r\n initBudget: self.initBudget,\r\n budget: self.ko_model.budget()\r\n }, self.activity);\r\n }\r\n } else {\r\n self.ko_model.updateSuggestedBudget(0, 0);\r\n }\r\n },\r\n onRequestError: function () {\r\n self.ko_model.updateSuggestedBudget(0, 0);\r\n }\r\n }, {});\r\n }\r\n }\r\n});\r\nexport default View;\r\n","/* eslint-disable */\r\nimport ko from 'knockout';\r\nimport ko_schema from '@bingads-webui-component-legacy/ko-schema/index';\r\nvar ViewModel = function () {\r\n this.isCampaignTargetsExpanded = ko.observable(false);\r\n this.BidStrategy = ko.observable();\r\n this.isCampaignLevelGoalEnabled = ko.observable(false);\r\n this.isbiddingStrategyTypeCPC = ko.observable(true);\r\n ko_schema.properties(this);\r\n this.hasChanges = ko.observable(false);\r\n this.estimateTrafficSupported = ko.observable(false);\r\n this.showPerformanceGrid = ko.computed(function () {\r\n return this.estimateTrafficSupported() && this.isbiddingStrategyTypeCPC();\r\n }, this);\r\n this.showAdgroupBidGrid = ko.computed(function () {\r\n return !this.showPerformanceGrid() && this.isbiddingStrategyTypeCPC();\r\n }, this);\r\n};\r\nexport default ViewModel;\r\n\r\n","import _ from 'underscore';\r\nimport ko from 'knockout';\r\nimport { appendLearnMoreLink } from '@bingads-webui-component-legacy/help/index';\r\n\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/campaign-creation-advanced');\r\n\r\nexport default class ViewModel {\r\n constructor() {\r\n this.errorMessage = ko.observable('');\r\n\r\n this.showError = ko.computed(() => {\r\n return !_.isEmpty(this.errorMessage());\r\n }, this);\r\n\r\n this.infoMessage = ko.observable('');\r\n\r\n this.showInfo = ko.computed(() => {\r\n return !_.isEmpty(this.infoMessage());\r\n }, this);\r\n\r\n this.hasUnsupportedLocations = ko.observable(false);\r\n this.showSearchBidValidationError = ko.observable(false);\r\n\r\n this.infoMessageWithLearnMore = ko.computed(() => {\r\n if (this.hasUnsupportedLocations()) {\r\n return appendLearnMoreLink(this.infoMessage(), 'app54508', {\r\n linkText: i18n.get('HelpLink_TrafficEstimate_UnsupportedLocations'),\r\n });\r\n }\r\n\r\n return this.infoMessage();\r\n });\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport decimal from '@bingads-webui-component-legacy/humanize/decimal';\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\nimport { countNumberOfDigits } from '@bingads-webui-campaign-legacy/budget/shared/countNumberOfDigits';\r\n\r\nconst bidLimitations = config.get('KeywordBidRange');\r\n\r\nexport const validate = function(adgroups) {\r\n return _.every(adgroups, (adGroup) => {\r\n let bid = decimal.fromLocalToFloat(adGroup.Bid);\r\n\r\n return decimal.isValid(adGroup.Bid, true) &&\r\n _.isFinite(bid) &&\r\n _.isNumber(bid) &&\r\n bid >= bidLimitations.FloorValue &&\r\n bid <= bidLimitations.CeilingValue &&\r\n countNumberOfDigits(bid) <= 2;\r\n });\r\n};\r\n","import _ from 'underscore';\r\nimport ko from 'knockout';\r\nimport Backbone from 'backbone';\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\nimport pgrid from '@bingads-webui-component-legacy/github/modules/projection-grid/module/projection-grid';\r\nimport paginationPlugin from '@bingads-webui-component-legacy/bingads-grid/plugin/pagination';\r\nimport { inlineErrorPlugin } from '@bingads-webui/projection-grid-inline-error';\r\nimport decimal from '@bingads-webui-component-legacy/humanize/decimal';\r\nimport template from '@bingads-webui-campaign-legacy/budget/template/base-bid-grid.pug';\r\nimport ViewModel from '@bingads-webui-campaign-legacy/budget/viewmodel/base-bid-grid';\r\nimport { validate as validateData } from '@bingads-webui-campaign-legacy/budget/shared/bidValidate';\r\nimport { countNumberOfDigits } from '@bingads-webui-campaign-legacy/budget/shared/countNumberOfDigits';\r\n\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/campaign-creation-advanced');\r\n\r\nconst bidRange = config.get('KeywordBidRange');\r\n\r\nexport class BaseAdGroupBidGrid extends Backbone.View {\r\n initialize({\r\n gridColumns = [],\r\n gridName,\r\n defaultBid = bidRange.FloorValue,\r\n newI18n,\r\n activityLogger,\r\n girdAriaLabel,\r\n } = {}) {\r\n this.gridColumns = gridColumns;\r\n this.defaultBid = defaultBid;\r\n this.gridName = gridName;\r\n this.activityLogger = activityLogger;\r\n this.isBidChanged = false;\r\n this.newI18n = newI18n;\r\n this.viewModel = new ViewModel();\r\n this.girdAriaLabel = girdAriaLabel;\r\n }\r\n\r\n render() {\r\n this.$el.append(template({i18n}));\r\n ko.applyBindings(this.viewModel, this.el);\r\n\r\n this.grid = pgrid.factory({ vnext: true })\r\n .use(paginationPlugin)\r\n .use(inlineErrorPlugin({\r\n errorIconClasses: ['grid-error', 'spritedimage'],\r\n }))\r\n .create({\r\n name: this.gridName,\r\n tableClasses: ['table', 'table-bordered'],\r\n tableAttributes: { 'aria-label': this.girdAriaLabel },\r\n dataSource: {\r\n type: 'memory',\r\n data: [],\r\n primaryKey: 'Id',\r\n },\r\n rows: {\r\n bodyRows: [{\r\n type: 'data-rows',\r\n classes: ['adgroup-bid-row'],\r\n }],\r\n },\r\n columns: this.gridColumns,\r\n events: {\r\n 'change .input-bid': (event) => {\r\n if (this.activityLogger) {\r\n this.activityLogger.signal(`adgroup bid changed: ${event.target && event.target.value}`);\r\n }\r\n this.bidUpdated(event);\r\n },\r\n },\r\n });\r\n\r\n this.$('.grid').html(this.grid.gridView.render().el);\r\n\r\n return this;\r\n }\r\n\r\n bidUpdated() {\r\n throw new Error('Should implement bidUpdated function');\r\n }\r\n\r\n patchError(newError) {\r\n const { errors } = this.grid.gridView.get('inlineError');\r\n\r\n this.grid.inlineError.setErrors(_.extend({}, errors, newError));\r\n }\r\n\r\n validateBid(item) {\r\n const newBidFloat = decimal.fromLocalToFloat(item.Bid);\r\n\r\n if (!decimal.isValid(item.Bid, true)) {\r\n this.patchError({\r\n [item.Id]: [i18n.get('Validation_BidFormatInvalid')],\r\n });\r\n\r\n return {\r\n isValid: false,\r\n bidHintKey: 'Validation_BidFormatInvalid',\r\n };\r\n } else if (newBidFloat < bidRange.FloorValue || newBidFloat > bidRange.CeilingValue) {\r\n const message = i18n.get('Budget_TrafficEstimation_BidLimitationError')\r\n .replace('{0}', bidRange.FloorValue)\r\n .replace('{1}', bidRange.CeilingValue);\r\n\r\n this.patchError({\r\n [item.Id]: [message],\r\n });\r\n\r\n return {\r\n isValid: false,\r\n bidHintKey: 'Budget_TrafficEstimation_BidLimitationError',\r\n };\r\n } else if (countNumberOfDigits(newBidFloat) > 2) {\r\n this.patchError({\r\n [item.Id]: [i18n.get('Validation_Number_Max_Length')],\r\n });\r\n\r\n return {\r\n isValid: false,\r\n bidHintKey: 'Validation_Number_Max_Length',\r\n };\r\n }\r\n\r\n this.patchError({\r\n [item.Id]: [],\r\n });\r\n\r\n return {\r\n isValid: true,\r\n };\r\n }\r\n\r\n resetMesages() {\r\n this.viewModel.errorMessage('');\r\n this.viewModel.infoMessage('');\r\n this.viewModel.hasUnsupportedLocations(false);\r\n this.viewModel.showSearchBidValidationError(false);\r\n }\r\n\r\n update({ adGroups, campaignId, budget, languages }) {\r\n this.resetMesages();\r\n\r\n if (_.isArray(adGroups)) {\r\n this.adGroups = adGroups;\r\n this.refreshGrid(adGroups);\r\n }\r\n\r\n if (!_.isUndefined(campaignId)) {\r\n this.campaignId = campaignId;\r\n }\r\n\r\n if (!_.isUndefined(languages)) {\r\n this.languages = languages;\r\n }\r\n\r\n // Always validate bid when switching from step 3 to step 4\r\n const isAllBidValid = _.reduce(this.adGroups, (memo, adGroup) => {\r\n return this.validateBid(adGroup).isValid && memo;\r\n }, true);\r\n\r\n if (!this.viewModel.showSearchBidValidationError()) {\r\n this.viewModel.showSearchBidValidationError(true);\r\n }\r\n\r\n if (!_.isUndefined(budget)) {\r\n this.updateBudget(budget, isAllBidValid);\r\n }\r\n }\r\n\r\n updateBudget() {\r\n //do nothing\r\n }\r\n\r\n refreshGrid(data) {\r\n this.grid.gridView.patch({\r\n dataSource: {\r\n data: _.map(data, (item) => {\r\n const defaultBid = item.suggestedAvgCpc ? Math.max(item.suggestedAvgCpc, this.defaultBid) : this.defaultBid;\r\n\r\n return _.defaults(item, {\r\n Bid: decimal.fromFloatToString(defaultBid),\r\n });\r\n }),\r\n },\r\n });\r\n }\r\n\r\n getAdGroups() {\r\n return _.map(this.grid.gridView.get('dataSource').data, (adGroup) => {\r\n return {\r\n Campaign: {\r\n Id: this.campaignId,\r\n },\r\n Id: adGroup.Id,\r\n SearchBid: decimal.fromLocalToFloat(adGroup.Bid),\r\n isNKW: adGroup.isNKW || false,\r\n suggestedBid: adGroup.suggestedBid,\r\n viewedSuggestion: adGroup.viewedSuggestion || false,\r\n suggestedBidRequestId: adGroup.suggestedBidRequestId,\r\n };\r\n }, this);\r\n }\r\n\r\n validate() {\r\n return validateData(this.grid.gridView.get('dataSource').data);\r\n }\r\n\r\n enough() {\r\n return true;\r\n }\r\n\r\n remove(...args) {\r\n this.grid.gridView.remove();\r\n this.grid.pagination.remove();\r\n\r\n super.remove(...args);\r\n }\r\n}\r\n","/* global _TL_ */\r\nimport _ from 'underscore';\r\nimport $ from 'jquery';\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\nimport jsdata from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport popoverExtender from '@bingads-webui-component-legacy/extension/bootstrap/popover';\r\nimport { bingadsGridColumn } from '@bingads-webui-component-legacy/bingads-grid/shared/column';\r\nimport { appendLearnMoreLink } from '@bingads-webui-component-legacy/help/index';\r\nimport bidToolTipLowBid from '@bingads-webui-campaign-legacy/budget/template/bidToolTipLowBid.pug';\r\nimport getTrafficEstimation from '@bingads-webui-campaign-legacy/budget/shared/getTrafficEstimation';\r\nimport bidEditorTemplate from '@bingads-webui-campaign-legacy/budget/template/bidEditor.pug';\r\nimport estimatedNumTemplate from '@bingads-webui-campaign-legacy/budget/template/estimatedNum.pug';\r\nimport { BaseAdGroupBidGrid } from '@bingads-webui-campaign-legacy/budget/view/base-bid-grid';\r\nimport PopupContentView from '@bingads-webui-campaign-legacy/budget/view/bid-suggestion-popup';\r\nimport { logBidView } from '@bingads-webui-campaign-legacy/budget/shared/log';\r\nimport { weekly2Monthly, weekly2MonthlyInt } from '@bingads-webui-campaign-legacy/budget/shared/weeklyToMonthly';\r\nimport decimal from '@bingads-webui-component-legacy/humanize/decimal';\r\nimport { adGroupTypeEnum } from '@bingads-webui-campaign-legacy/adgroup-create-advanced/util/adGroupTypeEnum';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\n\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/campaign-creation-advanced');\r\n\r\nconst maxKeywordsToEstimate = 1000;\r\nconst bidRange = config.get('KeywordBidRange');\r\nconst bidHintKey = {\r\n NoClicks: 'TrafficEstimation_Hint_NoClicks',\r\n CriticalLowBid: 'TrafficEstimation_Hint_CriticalLowBid',\r\n NormalLowBid: 'TrafficEstimation_Hint_NormalLowBid',\r\n BidInvalid: 'Validation_BidFormatInvalid',\r\n BidExceedRange: 'Budget_TrafficEstimation_BidLimitationError',\r\n BidExceedMaxLength: 'Validation_Number_Max_Length',\r\n Other: 'GenericErrorMessage',\r\n};\r\nconst bidStatus = {\r\n Error: 'error',\r\n Warning: 'warning',\r\n Suggesiton: 'suggestion',\r\n Good: 'ok',\r\n};\r\n\r\nfunction getBIValueByAdGroupType(item, value, campaignType) {\r\n if (item == null) {\r\n return null;\r\n }\r\n\r\n const isDSAMixedModeCampaignEnabled = _.result(config.get('Permissions'), 'IsDSAMixedModeCampaignEnabled', false);\r\n\r\n if (isDSAMixedModeCampaignEnabled && item.AdGroupType === adGroupTypeEnum.SearchDynamic && campaignType === 'search') {\r\n return null;\r\n }\r\n\r\n return value;\r\n}\r\n\r\nexport class PerformanceGridView extends BaseAdGroupBidGrid {\r\n initialize({\r\n defaultBid,\r\n isBidEditable,\r\n activity,\r\n suggestionEnabled,\r\n activityLogger,\r\n campaignType,\r\n campaignId,\r\n currencyCode,\r\n newI18n,\r\n } = {}) {\r\n this.campaignType = campaignType;\r\n this.defaultBid = defaultBid;\r\n this.activity = activity;\r\n this.suggestionEnabled = suggestionEnabled;\r\n this.campaignId = campaignId;\r\n this.currencyCode = currencyCode;\r\n this.newI18n = newI18n;\r\n const lowBidBtnText = newI18n.getString(_TL_('Low Bid'));\r\n\r\n setClarityTag({ PerformanceGridView: 'true' });\r\n\r\n const gridColumns = [{\r\n name: 'adGroup',\r\n title: i18n.get('ColumnHeader_AdGroup'),\r\n property: (item) => item.Name,\r\n width: 130,\r\n }, bingadsGridColumn({\r\n i18n,\r\n name: 'bid',\r\n title: 'ColumnHeader_Bid',\r\n headClasses: ['grid-header-bidEditor'],\r\n helpId: 'pop_BA_CampaignCreate_Budget_Bid',\r\n template: (local) => {\r\n return bidEditorTemplate({\r\n i18n,\r\n bid: local.value.Bid,\r\n currency: config.get('AccountCurrencyCode'),\r\n bidHintKey: local.value && local.value.bidHintKey,\r\n bidStatus: local.value && local.value.bidStatus,\r\n suggestedBid: local.value && local.value.suggestedBid,\r\n isBidEditable,\r\n suggestionEnabled,\r\n lowBidBtnText,\r\n bidStatusENUM: bidStatus,\r\n adGroupType: local.value && local.value.AdGroupType,\r\n });\r\n },\r\n property: (item) => item,\r\n }), bingadsGridColumn({\r\n i18n,\r\n name: 'click',\r\n title: 'EstimatedClicks',\r\n helpId: 'pop_BA_CampaignCreate_Budget_EstClicks',\r\n template: (local) => {\r\n return estimatedNumTemplate({\r\n i18n,\r\n estimatedNum: local.value && getBIValueByAdGroupType(local.value, weekly2MonthlyInt(local.value && local.value.Clicks), campaignType),\r\n bidHintKey: local.value && local.value.bidHintKey,\r\n adGroupType: local.value && local.value.AdGroupType,\r\n bidStatus: local.value && local.value.bidStatus,\r\n });\r\n },\r\n property: (item) => item,\r\n type: 'number',\r\n format: 'integer',\r\n }), bingadsGridColumn({\r\n i18n,\r\n name: 'impression',\r\n title: 'EstimatedImpressions',\r\n helpId: 'pop_BA_CampaignCreate_Budget_EstImpressions',\r\n headClasses: ['grid-header-EstimatedImpressions'],\r\n template: (local) => {\r\n return estimatedNumTemplate({\r\n i18n,\r\n estimatedNum: local.value && getBIValueByAdGroupType(local.value, weekly2MonthlyInt(local.value && local.value.Impressions), campaignType),\r\n bidHintKey: local.value && local.value.bidHintKey,\r\n adGroupType: local.value && local.value.AdGroupType,\r\n bidStatus: local.value && local.value.bidStatus,\r\n });\r\n },\r\n property: (item) => item,\r\n type: 'number',\r\n format: 'integer',\r\n }), bingadsGridColumn({\r\n i18n,\r\n name: 'spend',\r\n title: 'EstimatedSpend',\r\n helpId: 'pop_BA_CampaignCreate_Budget_EstSpend',\r\n property: (item) => getBIValueByAdGroupType(item, weekly2Monthly(item.TotalCost), campaignType),\r\n type: 'number',\r\n })];\r\n\r\n super.initialize({\r\n defaultBid,\r\n gridColumns,\r\n gridName: 'performanceGrid',\r\n activityLogger,\r\n girdAriaLabel: this.options.newI18n.getString(_TL_('Performance Grid')),\r\n });\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click .low_bid': 'raiseBidPopup',\r\n 'click .icon-info': 'toggleBidHint',\r\n 'mouseover .icon-info': 'toggleBidHint',\r\n };\r\n }\r\n\r\n checkLimitaion() {\r\n const count = _.reduce(this.adGroups, ( memo, num ) => memo + _.size(num.Keywords), 0);\r\n\r\n return count <= maxKeywordsToEstimate;\r\n }\r\n\r\n getAdGroupsData() {\r\n return this.grid.gridView.get('dataSource').data;\r\n }\r\n\r\n bidUpdated(e, bid) {\r\n const newBidString = _.isUndefined(bid) ? e.target.value : bid;\r\n const selectedItem = this.grid.gridView.itemOfElement(e.target);\r\n\r\n if (this.activityLogger) {\r\n this.activityLogger.signal(`get new bid from: ${_.isUndefined(bid) ? 'user input' : 'other/suggestion'}, new value: ${newBidString}`);\r\n }\r\n\r\n selectedItem.Bid = newBidString;\r\n const validateResult = this.validateBid(selectedItem);\r\n\r\n if (validateResult.isValid) {\r\n // input bid value is valid\r\n this.fetchEstimate();\r\n this.trigger('bid.updated', this.grid.gridView.get('dataSource').data);\r\n } else {\r\n // input bid value is not valid\r\n _.extend(selectedItem, {\r\n bidStatus: bidStatus.Error,\r\n bidHintKey: validateResult.bidHintKey,\r\n });\r\n\r\n this.refreshGrid(this.grid.gridView.get('dataSource').data);\r\n }\r\n }\r\n\r\n updateBudget(budget, isAllBidValid) {\r\n this.budget = budget;\r\n\r\n if (this.checkLimitaion() && isAllBidValid) {\r\n // fetch data when bid is valid and keyword count is within limitation\r\n if (_.isArray(this.adGroups) && !_.isEmpty(this.adGroups)) {\r\n this.fetchEstimate();\r\n }\r\n }\r\n }\r\n\r\n updateAdGroups(adGroup, data) {\r\n if (!_.isArray(adGroup)) {\r\n adGroup = [adGroup]; //eslint-disable-line\r\n }\r\n\r\n const adGroups = _.map(this.grid.gridView.get('dataSource').data, (item) => {\r\n const targetAdgroup = _.chain(adGroup).where({ Id: item.Id }).first().value();\r\n\r\n if (!_.isUndefined(targetAdgroup)) {\r\n return _.isEmpty(data) ? targetAdgroup : _.extend(targetAdgroup, this.calcTraffic(data, targetAdgroup), this.statusUpdate(targetAdgroup));\r\n }\r\n\r\n return item;\r\n }, this);\r\n\r\n this.refreshGrid(adGroups);\r\n }\r\n\r\n fetchEstimate(adGroup = this.adGroups, bid = null, spinner = this.$('.grid')) {\r\n this.resetMesages();\r\n\r\n if (!_.isArray(adGroup)) {\r\n adGroup = [adGroup]; //eslint-disable-line\r\n }\r\n\r\n getTrafficEstimation({\r\n locations: jsdata.Intermediate.getAll('CampaignCriterion'),\r\n adGroup,\r\n bid,\r\n budget: decimal.fromFloatToString(this.budget),\r\n languages: this.languages,\r\n campaignType: this.campaignType,\r\n }, {\r\n onNotAllSupported: (supportedCount, totalCount) => {\r\n this.viewModel.infoMessage(i18n.get('TarfficEstimation_PartiallyNonSupported')\r\n .replace('{0}', supportedCount)\r\n .replace('{1}', totalCount));\r\n this.viewModel.hasUnsupportedLocations(true);\r\n },\r\n onSuccess: (data) => {\r\n this.updateAdGroups(adGroup, data);\r\n },\r\n onRequestError: () => {\r\n this.viewModel.errorMessage(i18n.get('Budget_TrafficEstimation_RequestError'));\r\n\r\n _.each(adGroup, (item) => {\r\n _.extend(item, {\r\n bidStatus: bidStatus.Error,\r\n bidHintKey: bidHintKey.Other,\r\n });\r\n });\r\n\r\n this.updateAdGroups(adGroup);\r\n },\r\n onNonSupported: () => {\r\n // todo [yucongj] hint for no locations supported\r\n },\r\n onServiceNotSupported: (message) => {\r\n this.viewModel.errorMessage(message);\r\n },\r\n }, {\r\n spinner,\r\n }, undefined, (op) => {\r\n const isDSAMixedModeCampaignEnabled = _.result(config.get('Permissions'), 'IsDSAMixedModeCampaignEnabled', false);\r\n\r\n if (isDSAMixedModeCampaignEnabled) {\r\n const campaignTrafficEstimate = _.chain(op)\r\n .result('data')\r\n .result('CampaignTrafficEstimate')\r\n .value();\r\n\r\n // For mixed mode campaign, there may be dynamic ad groups created which don't have any keyword in it\r\n // we need to filter out these ad groups or trafficEstimate API will return error\r\n if (campaignTrafficEstimate && campaignTrafficEstimate.AdGroupTrafficEstimateParameters) {\r\n campaignTrafficEstimate.AdGroupTrafficEstimateParameters = _.filter(campaignTrafficEstimate.AdGroupTrafficEstimateParameters, (param) => {\r\n return param.KeywordTrafficEstimateParameters && param.KeywordTrafficEstimateParameters.length > 0;\r\n });\r\n }\r\n }\r\n\r\n return op;\r\n });\r\n }\r\n\r\n calcTraffic(response, adgroup) {\r\n try {\r\n const adGroupResult = _\r\n .chain(response.value)\r\n .where({\r\n AdGroupName: adgroup.Name,\r\n })\r\n .first()\r\n .result('AdGroupEstimatedTraffic')\r\n .pick('Clicks', 'Impressions', 'TotalCost', 'AveragePosition')\r\n .value();\r\n\r\n if (\r\n adgroup.Bid < adgroup.suggestedBid &&\r\n adgroup.Bid > adgroup.suggestedBid / 2 &&\r\n adgroup.suggestedClicks > adGroupResult.Clicks &&\r\n adgroup.suggestedImpressions > adGroupResult.Impressions) {\r\n _.extend(adGroupResult, {\r\n bidStatus: bidStatus.Warning,\r\n bidHintKey: bidHintKey.NormalLowBid,\r\n });\r\n\r\n if (this.activityLogger) {\r\n this.activityLogger.signal(JSON.stringify({\r\n Scenario: 'CampaignCreation',\r\n SuggestedBid: adgroup.suggestedBid,\r\n InputBid: adgroup.Bid,\r\n LowBidAlertType: 'Normal',\r\n EventName: 'CreationFlowLowBidAlertShow',\r\n SuggestedBidRequestId: adgroup.suggestedBidRequestId,\r\n CampaignId: this.campaignId,\r\n AdgroupId: adgroup.Id,\r\n CurrencyId: this.currencyCode,\r\n }));\r\n }\r\n } else if (\r\n adgroup.Bid < adgroup.suggestedBid / 2 &&\r\n adgroup.suggestedClicks > adGroupResult.Clicks &&\r\n adgroup.suggestedImpressions > adGroupResult.Impressions) {\r\n _.extend(adGroupResult, {\r\n bidStatus: bidStatus.Warning,\r\n bidHintKey: bidHintKey.CriticalLowBid,\r\n });\r\n\r\n if (this.activityLogger) {\r\n this.activityLogger.signal(JSON.stringify({\r\n Scenario: 'CampaignCreation',\r\n SuggestedBid: adgroup.suggestedBid,\r\n InputBid: adgroup.Bid,\r\n LowBidAlertType: 'Critical',\r\n EventName: 'CreationFlowLowBidAlertShow',\r\n SuggestedBidRequestId: adgroup.suggestedBidRequestId,\r\n CampaignId: this.campaignId,\r\n AdgroupId: adgroup.Id,\r\n CurrencyId: this.currencyCode,\r\n }));\r\n }\r\n } else {\r\n adGroupResult.bidStatus = bidStatus.Good;\r\n }\r\n return adGroupResult;\r\n } catch (e) {\r\n throw new Error('Exception happens when parsing the traffic estimations');\r\n }\r\n }\r\n\r\n statusUpdate(adgroup) {\r\n if (this.suggestionEnabled) {\r\n return {\r\n bidStatus:\r\n adgroup.suggestedBid > decimal.fromLocalToFloat(adgroup.Bid) ?\r\n bidStatus.Warning : bidStatus.Good,\r\n };\r\n } else {\r\n return {};\r\n }\r\n }\r\n\r\n toggleBidHint(e) {\r\n const hintKey = e.target.dataset.hintKey;\r\n // const forCriticalLowBid = hintKey === bidHintKey.CriticalLowBid || hintKey === bidHintKey.NormalLowBid;\r\n let contentText = i18n.get(hintKey || bidHintKey.Other);\r\n\r\n if (hintKey === bidHintKey.BidExceedRange) {\r\n contentText = contentText.replace('{0}', bidRange.FloorValue)\r\n .replace('{1}', bidRange.CeilingValue);\r\n }\r\n\r\n const selectedItem = this.grid.gridView.itemOfElement(e.target);\r\n\r\n const suggestionBid = selectedItem.suggestedBid;\r\n const click = weekly2MonthlyInt(selectedItem.suggestedClicks - selectedItem.Clicks);\r\n const impressionsMore = weekly2MonthlyInt(selectedItem.suggestedImpressions - selectedItem.Impressions);\r\n const lowBidBtnTitle = this.options.newI18n.getString(_TL_('Recommended ad group bid'));\r\n const lowBidBtnContent = this.options.newI18n.getString(_TL_('You could get {{impressionsMore}} more impressions and {{click}} more clicks if you adjust the bid to {{suggestionBid}}.'),\r\n {\r\n suggestionBid,\r\n impressionsMore,\r\n click,\r\n }\r\n );\r\n const applyBtnText = this.options.newI18n.getString(_TL_('Apply'));\r\n\r\n if (this.activityLogger) {\r\n this.activityLogger.signal(JSON.stringify([{\r\n Scenario: 'CampaignCreation',\r\n SuggestedBid: suggestionBid,\r\n InputBid: selectedItem.Bid,\r\n EventName: 'CreationFlowLowBidAlertClick',\r\n SuggestedBidRequestId: selectedItem.suggestedBidRequestId,\r\n CampaignId: this.campaignId,\r\n AdgroupId: selectedItem.Id,\r\n CurrencyId: this.currencyCode,\r\n }]));\r\n }\r\n\r\n const content = bidToolTipLowBid({\r\n appendLearnMoreLink,\r\n i18n,\r\n contentText,\r\n hintKey,\r\n bidHintKey,\r\n lowBidBtnTitle,\r\n lowBidBtnContent,\r\n applyBtnText,\r\n });\r\n\r\n $(e.target).popover({\r\n html: true,\r\n trigger: 'manual',\r\n content,\r\n placement: 'right',\r\n });\r\n\r\n popoverExtender.decorate($(e.target),\r\n this.excludeCb,\r\n _.bind(this.clickCb, this),\r\n _.bind(this.closeCb, this, null));\r\n\r\n $(e.target).popover('toggle');\r\n\r\n $('.close-button').click(() => {\r\n $(e.target).popover('destroy');\r\n $(this).closest('.popover').remove();\r\n });\r\n\r\n $('.cancel-link').click(() => {\r\n $(e.target).popover('destroy');\r\n $(this).closest('.popover').remove();\r\n });\r\n\r\n $('.apply-link').click(() => {\r\n if (this.activityLogger) {\r\n this.activityLogger.signal(JSON.stringify([{\r\n Scenario: 'CampaignCreation',\r\n SuggestedBid: suggestionBid,\r\n OriginalInputBid: selectedItem.Bid,\r\n EventName: 'CreationFlowLowBidSuggestionApply',\r\n SuggestedBidRequestId: selectedItem.suggestedBidRequestId,\r\n CampaignId: this.campaignId,\r\n AdgroupId: selectedItem.Id,\r\n CurrencyId: this.currencyCode,\r\n }]));\r\n }\r\n this.bidUpdated(e, decimal.fromFloatToString(suggestionBid));\r\n $(e.target).popover('destroy');\r\n $(this).closest('.popover').remove();\r\n });\r\n }\r\n\r\n raiseBidPopup(e) {\r\n const target = $(e.target);\r\n const popup = target.children('.raise-bid-popup-container');\r\n const content = popup.children('.raise-bid-popup-content');\r\n const visibleContent = popup.children('.raise-bid-popup-content:visible');\r\n const suggestedBid = popup.data('suggested_bid');\r\n const selectedItem = this.grid.gridView.itemOfElement(e.target);\r\n const suggestedClicks = weekly2MonthlyInt(selectedItem.suggestedClicks - selectedItem.Clicks);\r\n const impressionsMore = weekly2MonthlyInt(selectedItem.suggestedImpressions - selectedItem.Impressions);\r\n\r\n if (popup.length > 0 && visibleContent.length === 0) {\r\n $('.raise-bid-popup-container').hide();\r\n if (content.length === 0) {\r\n if (selectedItem.bidHintKey === 'TrafficEstimation_Hint_NormalLowBid') {\r\n const view = new PopupContentView({\r\n i18n,\r\n suggestedBid,\r\n bidHintKey: selectedItem.bidHintKey,\r\n suggestedClicks,\r\n impressionsMore,\r\n el: popup,\r\n newI18n: this.options.newI18n,\r\n callback: () => this.bidUpdated(e, decimal.fromFloatToString(suggestedBid)),\r\n });\r\n\r\n view.render();\r\n } else {\r\n const view = new PopupContentView({\r\n i18n,\r\n suggestedBid,\r\n bidHintKey: selectedItem.bidHintKey,\r\n el: popup,\r\n newI18n: this.options.newI18n,\r\n callback: () => this.bidUpdated(e, decimal.fromFloatToString(suggestedBid)),\r\n });\r\n\r\n view.render();\r\n }\r\n\r\n }\r\n logBidView(_.defaults(\r\n selectedItem,\r\n { campaignId: this.campaignId }\r\n ), this.activity);\r\n selectedItem.viewedSuggestion = true;\r\n popup.show();\r\n }\r\n }\r\n\r\n excludeCb($container, e) {\r\n const $target = $(e.target);\r\n\r\n return Boolean($target.closest('.popover').length > 0 || $target.closest('.bid-hint-text').length > 0);\r\n }\r\n\r\n clickCb() {\r\n $('.icon-info').popover('destroy');\r\n // $('.dismiss-link').closest('.popover').remove();\r\n $('.cancel-link').closest('.popover').remove();\r\n }\r\n\r\n closeCb() {\r\n _.noop();\r\n }\r\n\r\n enough() {\r\n return _.every(_.map(this.grid.gridView.get('dataSource').data, (adGroup) => {\r\n return adGroup.Bid >= adGroup.suggestedBid;\r\n }));\r\n }\r\n}\r\n","/* global _TL_ */\r\n\r\nimport _ from 'underscore';\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\nimport bidEditorTemplate from '@bingads-webui-campaign-legacy/budget/template/bidEditor-2.pug';\r\nimport { bingadsGridColumn } from '@bingads-webui-component-legacy/bingads-grid/shared/column';\r\nimport { BaseAdGroupBidGrid } from '@bingads-webui-campaign-legacy/budget/view/base-bid-grid';\r\n\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/campaign-creation-advanced');\r\n\r\nexport class AdgroupBidGridView extends BaseAdGroupBidGrid {\r\n initialize({\r\n defaultBid,\r\n isBidEditable,\r\n activityLogger,\r\n newI18n,\r\n }) {\r\n const gridColumns = [\r\n {\r\n name: 'adGroup',\r\n title: i18n.get('ColumnHeader_AdGroup'),\r\n width: 300,\r\n property: _.property('Name'),\r\n },\r\n bingadsGridColumn({\r\n i18n,\r\n name: 'Bid',\r\n title: 'ColumnHeader_Bid',\r\n template: bidEditorTemplate,\r\n helpId: 'pop_BA_CampaignCreate_Budget_Bid',\r\n property: (item) => {\r\n return {\r\n Bid: item.Bid,\r\n currency: config.get('AccountCurrencyCode'),\r\n isBidEditable,\r\n i18n,\r\n };\r\n },\r\n }),\r\n ];\r\n\r\n super.initialize({\r\n defaultBid,\r\n gridColumns,\r\n gridName: 'adgroupBidGrid',\r\n activityLogger,\r\n girdAriaLabel: newI18n.getString(_TL_('Ad Group Bid Grid')),\r\n });\r\n }\r\n\r\n bidUpdated(e) {\r\n const newBidString = e.target.value;\r\n const selectedItem = this.grid.gridView.itemOfElement(e.target);\r\n\r\n if (!selectedItem) {\r\n return;\r\n }\r\n selectedItem.Bid = newBidString;\r\n\r\n this.validateBid(selectedItem);\r\n\r\n this.refreshGrid(this.grid.gridView.get('dataSource').data);\r\n }\r\n}\r\n","/* eslint-disable */\r\nimport _ from 'underscore';\r\nimport Backbone from 'backbone';\r\nimport ko from 'knockout';\r\nimport pageContext from '@bingads-webui-static-legacy/page-context';\r\nimport * as i18nErrors from '@bingads-webui-component-legacy/api-errors-campaign/index';\r\nimport jsdata from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport withUiBlock from '@bingads-webui-component-legacy/uiblocker/index';\r\nimport * as scrollUtil from '@bingads-webui-component-legacy/extension/scrollTo';\r\nimport ViewModel from '@bingads-webui-campaign-legacy/budget/viewmodel/create';\r\nimport createTemplate from '@bingads-webui-campaign-legacy/budget/template/create.pug';\r\nimport * as _PerformanceGrid from '@bingads-webui-campaign-legacy/budget/view/performance-grid';\r\nimport * as _AdgroupBidGrid from '@bingads-webui-campaign-legacy/budget/view/adgroup-bid-grid';\r\nimport * as _AdvancedSettingsView from '@bingads-webui-campaign-legacy/advanced-settings/view/advancedSettings';\r\nimport * as _BudgetPanelView from '@bingads-webui-campaign-legacy/budget/view/budget-panel';\r\nimport * as _BiddingStrategyView from '@bingads-webui-campaign-legacy/bidding-strategy/view/setting';\r\nimport biddingStrategyType from '@bingads-webui-campaign-legacy/bidding-strategy/bidding-strategy-type';\r\nimport * as _SharedBudgetView from '@bingads-webui-campaign-legacy/shared-budget/view/shared-budget-switch-editor';\r\nimport * as trafficRequestFormatter from '@bingads-webui-campaign-legacy/budget/shared/formatter';\r\nimport * as DefaultBid from '@bingads-webui-campaign-legacy/budget/shared/defaultBid';\r\nimport * as locationFilters from '@bingads-webui-campaign-legacy/location-targets/util/filters';\r\nimport timeZoneMapper from '@bingads-webui-component-legacy/timezonemapper/index';\r\nimport instrumentation from '@bingads-webui-static-legacy/instrumentation/index';\r\nimport constants from '@bingads-webui-static-legacy/instrumentation/constants';\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\nimport * as audienceCampaignLoader from '@bingads-webui-campaign-legacy/audience-campaign/loader';\r\nimport * as locationTargetTypes from '@bingads-webui-campaign-legacy/location-targets/util/locationTargetTypes';\r\nimport * as _getBidSuggestion from '@bingads-webui-campaign-legacy/budget/shared/getBudgetBidSuggestion';\r\nimport * as _getTrafficEstimationWithSuggestedBid from '@bingads-webui-campaign-legacy/budget/shared/getTrafficEstimationWithSuggestedBid';\r\nimport * as _logger from '@bingads-webui-campaign-legacy/budget/shared/log';\r\nimport * as campaignInstrumentation from '@bingads-webui-campaign-legacy/instrumentation/index';\r\nimport decimal from '@bingads-webui-component-legacy/humanize/decimal';\r\nimport * as POUtils from '@bingads-webui-campaign/personalized-offer-shared';\r\nimport state from '@bingads-webui-component-legacy/state/index';\r\nimport * as goalSelector from '@bingads-webui-campaign-react/goal-selector';\r\nvar i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/campaign-creation-advanced');\r\nvar AdgroupBidGrid = _AdgroupBidGrid.AdgroupBidGridView;\r\nvar BudgetPanelView = _BudgetPanelView.default;\r\nvar BiddingStrategyView = _BiddingStrategyView.default;\r\nvar AdvancedSettingsView = _AdvancedSettingsView.default;\r\nvar SharedBudgetView = _SharedBudgetView.default;\r\nvar PerformanceGrid = _PerformanceGrid.PerformanceGridView;\r\nvar AudienceAdvancedTargetSettings = audienceCampaignLoader.AudienceAdvancedTargetSettings;\r\nvar AudienceTargetInfo = audienceCampaignLoader.AudienceTargetInfo;\r\nvar getBidSuggestion = _getBidSuggestion.getBidSuggestion;\r\nvar getTrafficEstimationWithSuggestedBid = _getTrafficEstimationWithSuggestedBid.default;\r\nvar IsSuggestionInCampaignCreationWorkflowEnabled = pageContext.Permissions.IsSuggestionInCampaignCreationWorkflowEnabled;\r\nvar IsSuggestionInCampaignCreationWorkflowVNextEnabled = pageContext.Permissions.IsSuggestionInCampaignCreationWorkflowVNextEnabled;\r\nvar dynamicPermissions = _.result(pageContext.Permissions, 'dynamic', {});\r\nvar showDisclaimerBanner = _.result(dynamicPermissions, 'AgeGenderDisclaimer', false);\r\nvar logBidAdoption = _logger.logBidAdoption;\r\nvar logBudgetAdoption = _logger.logBudgetAdoption;\r\nvar logBidView = _logger.logBidView;\r\nvar activity = campaignInstrumentation.default.suggestionInCreationWorkflow.create().campaignCreation.create();\r\nvar bidRange = config.get('KeywordBidRange');\r\nvar MAX_NUMBER_OF_KEYWORD = 1000;\r\nconst bidSugggestionNewApi = '/Customers(:advertisercustomer_id)/Accounts(:account_id)/Default.CampaignTrafficEstimateWithSuggestedBid';\r\nvar View = Backbone.View.extend({\r\n initialize: function (options) {\r\n this.options = options || ({});\r\n if (this.options && this.options.perfMarker) {\r\n this.showBudgetAndBidMarker = this.options.perfMarker.createChild('Show_Budget_And_Bid', {\r\n autoEnd: true\r\n });\r\n this.showBudgetAndBidMarker.willInit();\r\n }\r\n this.ko_model = new ViewModel();\r\n this.isSuggestionInCampaignCreationWorkflowEnabled = !!this.options.isForVNext && IsSuggestionInCampaignCreationWorkflowVNextEnabled || !this.options.isForVNext && IsSuggestionInCampaignCreationWorkflowEnabled;\r\n this.biddingStrategyView = new BiddingStrategyView({\r\n biddingStrategyType: biddingStrategyType.enhancedCPC,\r\n isInitialize: true,\r\n isCreation: true,\r\n campaignType: this.options.campaignType,\r\n activityLogger: this.options.activityLogger,\r\n i18nNewDesign: options.i18nNewDesign,\r\n ccJsData: options.ccJsData,\r\n isBroadMatchOnlyCampaign: false\r\n });\r\n this.supportCashbackSettings = options.supportCashbackSettings;\r\n var isBidEditable = (function () {\r\n var type = this.biddingStrategyView.getValues().Type;\r\n this.ko_model.isbiddingStrategyTypeCPC(type === biddingStrategyType.enhancedCPC);\r\n return type === biddingStrategyType.enhancedCPC || type === biddingStrategyType.manual;\r\n }).bind(this);\r\n this.defaultBid = DefaultBid.defaultBid();\r\n this.performanceGrid = new PerformanceGrid({\r\n defaultBid: this.defaultBid,\r\n isBidEditable: isBidEditable,\r\n activity: activity,\r\n suggestionEnabled: this.isSuggestionInCampaignCreationWorkflowEnabled,\r\n activityLogger: this.options.activityLogger,\r\n campaignType: this.options.campaignType,\r\n newI18n: this.options.i18nNewDesign\r\n });\r\n this.adgroupBidGrid = new AdgroupBidGrid({\r\n defaultBid: this.defaultBid,\r\n isBidEditable: isBidEditable,\r\n activityLogger: this.options.activityLogger,\r\n newI18n: this.options.i18nNewDesign\r\n });\r\n this.gridView = this.performanceGrid;\r\n this.performanceGrid.on('bid.updated', (function (adGroups) {\r\n if (this.performanceGrid.validate()) {\r\n this.budgetView.updateSuggestedBudget(adGroups);\r\n }\r\n }).bind(this));\r\n this.advancedSettingsView = new AdvancedSettingsView({\r\n campaignId: '',\r\n TimeZone: timeZoneMapper.getAccountTimeZone(),\r\n campaignType: this.options.campaignType,\r\n activityLogger: this.options.activityLogger,\r\n newI18n: this.options.i18nNewDesign\r\n });\r\n },\r\n updateGrid: function (adGroups, languages, removePreviousContent) {\r\n removePreviousContent = _.isUndefined(removePreviousContent) ? true : removePreviousContent;\r\n if (removePreviousContent) {\r\n adGroups = _.map(adGroups, function (adgroup) {\r\n return _.extend(adgroup, {\r\n suggestedBid: 0,\r\n isNKW: false,\r\n viewedSuggestion: false\r\n });\r\n });\r\n }\r\n this.gridView.update({\r\n adGroups: adGroups,\r\n campaignId: this.campaignId,\r\n budget: this.dailyBudget,\r\n languages: languages\r\n });\r\n },\r\n fetchSuggestedBid: function (adGroups, languages, spinner) {\r\n var self = this;\r\n getTrafficEstimationWithSuggestedBid({\r\n adGroup: adGroups,\r\n locations: jsdata.Intermediate.getAll('CampaignCriterion'),\r\n budget: parseFloat(this.dailyBudget),\r\n languages: languages\r\n }, {\r\n onSuccess: function (res) {\r\n if (res && res.value && res.value.length) {\r\n adGroups = _.map(adGroups, function (adgroup, index) {\r\n var defaultBid = adgroup.suggestedAvgCpc ? Math.max(adgroup.suggestedAvgCpc, self.defaultBid) : self.defaultBid;\r\n var nkwSuggestion = _.isNull(res.value[index]) ? 0 : res.value[index].Amount;\r\n var isNKW = nkwSuggestion >= defaultBid;\r\n var suggestedBid = parseFloat(res.value[index].SuggestedBid).toFixed(2);\r\n const clicks = parseInt(res.value[index].AdGroupEstimatedTraffic.Clicks);\r\n const impressions = parseInt(res.value[index].AdGroupEstimatedTraffic.Impressions);\r\n const reqId = res.suggestedBidRequestId;\r\n adgroup = _.extend(adgroup, {\r\n suggestedBid: suggestedBid,\r\n isNKW: isNKW,\r\n suggestedClicks: clicks,\r\n suggestedImpressions: impressions,\r\n suggestedBidRequestId: reqId\r\n });\r\n if (_.isUndefined(adgroup.Bid)) {\r\n logBidView(adgroup, activity);\r\n }\r\n if (_.isUndefined(adgroup.Bid)) {\r\n if (!_.isUndefined(suggestedBid) && suggestedBid > 0) {\r\n adgroup.Bid = decimal.fromFloatToString(suggestedBid, 2);\r\n adgroup.viewedSuggestion = true;\r\n } else {\r\n adgroup.Bid = self.defaultBid;\r\n adgroup.viewedSuggestion = true;\r\n }\r\n } else {\r\n adgroup.viewedSuggestion = false;\r\n }\r\n return adgroup;\r\n });\r\n self.updateGrid(adGroups, languages, false);\r\n } else {\r\n self.updateGrid(adGroups, languages);\r\n }\r\n },\r\n onRequestError: function () {\r\n self.updateGrid(adGroups, languages);\r\n },\r\n onServiceNotSupported: function () {\r\n self.updateGrid(adGroups, languages);\r\n },\r\n onNonSupported: function () {\r\n self.updateGrid(adGroups, languages);\r\n }\r\n }, {\r\n spinner: spinner\r\n }, bidSugggestionNewApi);\r\n },\r\n willShow: function () {\r\n var numKeywords = _.sumBy(this.options.context.get('AdGroups'), function (adgroup) {\r\n return _.isUndefined(adgroup.Keywords) ? 0 : adgroup.Keywords.length;\r\n });\r\n this.canFetchSuggestion = numKeywords <= MAX_NUMBER_OF_KEYWORD && this.isSuggestionInCampaignCreationWorkflowEnabled;\r\n window.scrollTo(0, 0);\r\n this.ko_model.hasChanges(false);\r\n var budgetFactory = SharedBudgetView.newFactory(BudgetPanelView);\r\n var languages;\r\n var campaignId;\r\n if (_.isObject(this.options.context)) {\r\n var campaignObj = this.options.context.get('Campaign');\r\n if (!_.isUndefined(campaignObj)) {\r\n if (_.isObject(campaignObj.Budget)) {\r\n this.initBudget = campaignObj.Budget.Amount;\r\n languages = campaignObj.Languages;\r\n campaignId = campaignObj.Id;\r\n }\r\n }\r\n }\r\n this.budgetView = budgetFactory({\r\n model: _.isObject(this.model) ? this.model.budget : {},\r\n initBudget: this.initBudget,\r\n haveBudgetSuggestion: this.canFetchSuggestion,\r\n languages: languages,\r\n campaignId: campaignId,\r\n activity: activity,\r\n perfMarker: this.showBudgetAndBidMarker,\r\n isForVNext: this.options.isForVNext,\r\n activityLogger: this.options.activityLogger\r\n });\r\n this.$('.budget').empty().html(this.budgetView.render().el);\r\n this.budgetView.on('budget.updated', (function (dailyBudget) {\r\n this.performanceGrid.update({\r\n budget: parseFloat(dailyBudget)\r\n });\r\n if (this.performanceGrid.validate()) {\r\n this.budgetView.updateSuggestedBudget(this.performanceGrid.getAdGroupsData(), true);\r\n }\r\n }).bind(this));\r\n if (_.isObject(this.options.context)) {\r\n var campaignObj = this.options.context.get('Campaign');\r\n if (!_.isUndefined(campaignObj)) {\r\n this.campaignId = campaignObj.Id;\r\n this.campaignName = campaignObj.Name;\r\n this.budgetView.update(campaignObj.Budget);\r\n this.initialBudget = campaignObj.Budget.Amount;\r\n this.dailyBudget = trafficRequestFormatter.getDailyBudgetAmount(campaignObj.Budget);\r\n this.ko_model.estimateTrafficSupported(true);\r\n this.gridView = this.ko_model.showAdgroupBidGrid() ? this.adgroupBidGrid : this.performanceGrid;\r\n this.canFetchSuggestion = this.canFetchSuggestion && this.ko_model.showPerformanceGrid();\r\n if (this.canFetchSuggestion) {\r\n if (this.options && this.options.perfMarker) {\r\n this.fetchSuggestedBidMarker = this.options.perfMarker.createChild('Fetch_Suggested_Bid');\r\n this.fetchSuggestedBidMarker.willInit();\r\n this.fetchSuggestedBidMarker.willFetchData();\r\n }\r\n this.fetchSuggestedBid(this.options.context.get('AdGroups'), campaignObj.Languages, this.$('.grid'));\r\n if (this.fetchSuggestedBidMarker) {\r\n this.fetchSuggestedBidMarker.done();\r\n }\r\n } else {\r\n this.fetchSuggestedBid(this.options.context.get('AdGroups'), campaignObj.Languages, this.$('.grid'));\r\n }\r\n if (!_.isEmpty(campaignObj.BiddingScheme)) {\r\n this.biddingStrategyView.update(campaignObj.BiddingScheme);\r\n }\r\n if (this.advancedSettingsView) {\r\n this.advancedSettingsView.update(campaignObj.Languages);\r\n }\r\n this.initCampaignTargets(_.defaults({\r\n CampaignType: this.options.campaignType\r\n }, campaignObj));\r\n this.updateCampaignTargets();\r\n if (pageContext.Permissions.IsPersonalizedOffersEnabled) {\r\n var subViewsNeedToUpdateCashbackColumn = _.compact([this.campaignTargetsView, this.advancedSettingsView.adScheduleView, this.advancedSettingsView.locationTargetsView]);\r\n var shouldShowCashbackColumn = POUtils.shouldSupportCashbackSettings(campaignObj, pageContext.Permissions);\r\n subViewsNeedToUpdateCashbackColumn.forEach(function (subView) {\r\n subView.toggleCashbackPercentColumns(shouldShowCashbackColumn, {\r\n level: 'Campaign',\r\n value: campaignObj.CampaignCashback && campaignObj.CampaignCashback.Percent\r\n });\r\n });\r\n if (pageContext.Permissions.IsPersonalizedOffersV2Enabled || pageContext.Permissions.IsPersonalizedOffersV3Enabled) {\r\n this.biddingStrategyView.setPersonalizedOffersOptionsAndValue({\r\n enabled: shouldShowCashbackColumn,\r\n campaignType: this.options.campaignType\r\n });\r\n }\r\n }\r\n const params = {\r\n queryParameters: {\r\n entitySet: campaignObj,\r\n expand: ['CampaignConversionGoal/Goals']\r\n },\r\n bypassCache: true\r\n };\r\n jsdata.Campaign.find(Number(campaignObj.Id), params).then(campaign => {\r\n const isSPA = campaign.CampaignSubType === 'ShoppingSponsoredProductAd';\r\n const isCPS = campaign.CampaignCashback != null && (campaign.CampaignCashback.PersonalizedOffersEnabled === true || campaign.CampaignCashback.MonthlyBudget > 0);\r\n const isSelectorEnabled = !isSPA && !isCPS;\r\n if (isSelectorEnabled) {\r\n this.campaignGoalSelectionView = new goalSelector.GoalSelectorView({\r\n i18n: i18n.realI18n,\r\n pageSize: 10,\r\n isMultiMode: true,\r\n isHideSaveBar: true,\r\n campaign,\r\n jsdata,\r\n state\r\n });\r\n this.$('.conversion-goal-selector').empty().html(this.campaignGoalSelectionView.render().el);\r\n this.ko_model.isCampaignLevelGoalEnabled(true);\r\n } else {\r\n this.ko_model.isCampaignLevelGoalEnabled(false);\r\n }\r\n if (pageContext.Permissions.dynamic.BroadOnly && !pageContext.Permissions.dynamic.PredictiveMatching) {\r\n this.biddingStrategyView.viewModel.isBroadMatchOnlyCampaign(campaign && campaign.IsBroadMatchOnlyCampaign);\r\n }\r\n });\r\n }\r\n }\r\n },\r\n hasChanges: function () {\r\n return this.ko_model.hasChanges();\r\n },\r\n events: {\r\n 'show.bs.collapse .campaign-targets': 'onShowCampaignTargets',\r\n 'hide.bs.collapse .campaign-targets': 'onHideCampaignTargets'\r\n },\r\n onShowCampaignTargets: function () {\r\n this.ko_model.isCampaignTargetsExpanded(true);\r\n },\r\n onHideCampaignTargets: function () {\r\n this.ko_model.isCampaignTargetsExpanded(false);\r\n },\r\n initCampaignTargets: function (campaign) {\r\n if (this.campaignTargetsView) {\r\n return;\r\n }\r\n var audienceTargetInfo = new AudienceTargetInfo({\r\n resourceName: 'CampaignCriterion',\r\n listenToLocationCriterion: false,\r\n useLocationControl: false,\r\n initAudienceAssociationView: false\r\n });\r\n this.campaignTargetsView = new AudienceAdvancedTargetSettings({\r\n viewContext: {\r\n accountCurrencyCode: pageContext.AccountCurrencyCode,\r\n currentCampaign: campaign,\r\n level: 'campaign'\r\n },\r\n scenario: 'campaign-creation',\r\n currentLevelTargetInfo: audienceTargetInfo,\r\n activityLogger: this.options.activityLogger\r\n });\r\n this.$('.campaign-targets').empty().html(this.campaignTargetsView.render().el);\r\n if (_.has(this.advancedSettingsView, 'locationTargetsView')) {\r\n this.campaignTargetsView.$('.location-setting-controller').append(this.advancedSettingsView.locationTargetsView.render().el);\r\n }\r\n },\r\n updateCampaignTargets: function () {\r\n if (!this.campaignTargetsView) {\r\n return;\r\n }\r\n var criterions = jsdata.Intermediate.getAll('CampaignCriterion');\r\n var shouldShow = _.find(criterions, function (criterion) {\r\n return criterion.SelectionStatus === locationTargetTypes.Included;\r\n });\r\n if (shouldShow) {\r\n this.campaignTargetsView.$('.selection-item-container[data-key=location]').removeClass('hide');\r\n this.campaignTargetsView.$('.location-target-setting-container').removeClass('hide');\r\n } else {\r\n this.campaignTargetsView.$('.selection-item-container[data-key=location]').addClass('hide');\r\n this.campaignTargetsView.$('.location-target-setting-container').addClass('hide');\r\n }\r\n },\r\n render: function () {\r\n this.$el.html(createTemplate({\r\n i18n: i18n,\r\n isShowDisclaimerBannerEnabled: showDisclaimerBanner\r\n }));\r\n ko.applyBindings(this.ko_model, this.el);\r\n this.$('.performance-grid').empty().html(this.performanceGrid.render().el);\r\n this.$('.adgroupbid-grid').empty().html(this.adgroupBidGrid.render().el);\r\n this.$('.bidding-strategy__container').empty().html(this.biddingStrategyView.render().el);\r\n this.$('.bidding-strategy__container')[0].addEventListener('change', (function () {\r\n this.gridView.grid.gridView.refresh(true);\r\n }).bind(this), false);\r\n this.$('.budget-bid-settings')[0].addEventListener('change', (function () {\r\n this.ko_model.hasChanges(true);\r\n }).bind(this), false);\r\n if (this.advancedSettingsView) {\r\n this.$('.advanced-settings-section').empty().html(this.advancedSettingsView.render().el);\r\n }\r\n this.biddingStrategyView.viewModel.selectedBidStrategy.subscribe(value => {\r\n this.advancedSettingsView.onSelectedBidStrategyChange(value);\r\n });\r\n return this;\r\n },\r\n shouldCancel: function () {\r\n return this.save();\r\n },\r\n shouldBack: function () {\r\n if (_.isObject(this.options.context)) {\r\n if (this.budgetView) {\r\n this.options.context.set('Draft.Budget', this.budgetView.getValues({}));\r\n }\r\n if (this.gridView) {\r\n var origin = this.options.context.get('AdGroups');\r\n var updated = this.gridView.getAdGroups();\r\n this.options.context.set('AdGroups', _.map(origin, function (adgroup) {\r\n _.each(updated, function (updatedAdgroup) {\r\n if (updatedAdgroup.Id === adgroup.Id) {\r\n adgroup.Bid = updatedAdgroup.SearchBid;\r\n }\r\n });\r\n return adgroup;\r\n }));\r\n }\r\n }\r\n return true;\r\n },\r\n validate: function () {\r\n return _.reduce([this.budgetView.validate(), this.advancedSettingsView.validate(), this.gridView ? this.gridView.validate() : true, this.biddingStrategyView.validate(), this.campaignTargetsView ? this.campaignTargetsView.validate() : true], function (memo, val) {\r\n return memo && val;\r\n }, true);\r\n },\r\n enough: function () {\r\n return _.every([this.budgetView.enough(), this.gridView ? this.gridView.enough() : true]);\r\n },\r\n errorElements: function () {\r\n return this.$('.budget-bid-settings .error, .budget-bid-settings .alert-danger').filter(':visible');\r\n },\r\n logBidAdoption: function (adGroups) {\r\n _.each(adGroups, function (adgroup) {\r\n logBidAdoption(adgroup, activity);\r\n });\r\n },\r\n logBidSuggestion: function (adGroups) {\r\n _.each(adGroups, function (adgroup) {\r\n instrumentation.logMessage([constants.LOGCATEGORY.SUBSTRATE], constants.LOGLEVEL.INFO, 'CreationFlowBidSave', JSON.stringify({\r\n Scenario: 'CampaignCreation',\r\n SuggestedBid: adgroup.suggestedBid,\r\n SaveBid: adgroup.SearchBid,\r\n EventName: 'CreationFlowBidSave',\r\n SuggestedBidRequestId: adgroup.suggestedBidRequestId,\r\n CampaignId: adgroup.Campaign.Id,\r\n AdgroupId: adgroup.Id,\r\n CurrencyId: pageContext.AccountCurrencyCode\r\n }));\r\n });\r\n },\r\n logBudgetAdoption: function (campaign, suggestedBudget) {\r\n if (_.isUndefined(campaign.BudgetId) || _.isNull(campaign.BudgetId)) {\r\n if (!_.isUndefined(suggestedBudget)) {\r\n logBudgetAdoption({\r\n Id: campaign.Id,\r\n suggestedBudget: suggestedBudget,\r\n budget: campaign.Budget.Amount,\r\n initBudget: this.initBudget\r\n }, activity);\r\n }\r\n }\r\n },\r\n save: function () {\r\n var self = this;\r\n if (!this.validate()) {\r\n scrollUtil.scrollAndCenter(this.errorElements());\r\n return false;\r\n }\r\n var saveBudgetAndBidMarker = null;\r\n if (this.options && this.options.perfMarker) {\r\n saveBudgetAndBidMarker = this.options.perfMarker.createChild('Save_Budget_And_Bid');\r\n saveBudgetAndBidMarker.willInit();\r\n }\r\n this.clearApiErrors();\r\n var adGroups = this.gridView.getAdGroups();\r\n var campaignToSave = {\r\n Id: this.campaignId,\r\n Name: this.campaignName,\r\n AdGroups: _.map(adGroups, function (adgroup) {\r\n adgroup.Status = 'Active';\r\n return _.omit(adgroup, ['isNKW', 'suggestedBid', 'viewedSuggestion', 'SuggestedBidRequestId']);\r\n })\r\n };\r\n campaignToSave.Budget = this.budgetView.getValues(campaignToSave);\r\n const biddingSchema = this.biddingStrategyView.getValues();\r\n campaignToSave['BiddingScheme'] = biddingSchema;\r\n if (pageContext.Permissions.dynamic.RSABidStrategyAutoTargeting && !pageContext.Permissions.dynamic.PredictiveMatching && this.options.campaignType === 'search') {\r\n campaignToSave.AutoTargetingEnabled = biddingSchema.AutoTargetingEnabled || false;\r\n }\r\n var advancedSettings = this.advancedSettingsView.getValues();\r\n if (pageContext.Permissions.dynamic.PredictiveMatching) {\r\n campaignToSave.AutoTargetingEnabled = advancedSettings.AutoTargetingEnabled || false;\r\n }\r\n var dateSettings = advancedSettings.dateSettings;\r\n var netWorkOptions = advancedSettings.netWorkOptions;\r\n _.each(campaignToSave.AdGroups, function (adGroup) {\r\n _.extend(adGroup, dateSettings, netWorkOptions);\r\n });\r\n this.populateCriterionCampaignIds(advancedSettings.deviceTargets);\r\n this.populateCriterionCampaignIds(advancedSettings.locationTargets);\r\n this.populateCriterionCampaignIds(advancedSettings.scheduling);\r\n campaignToSave.CampaignCriterions = advancedSettings.deviceTargets.concat(advancedSettings.locationTargets).concat(advancedSettings.scheduling);\r\n if (this.campaignTargetsView) {\r\n var campaignTargetsData = this.campaignTargetsView.getData();\r\n var campaignTargetsCriterions = _.result(campaignTargetsData, 'CampaignCriterions', []);\r\n campaignTargetsCriterions = _.map(campaignTargetsCriterions, function (criterion) {\r\n return _.defaults({\r\n Campaign: {\r\n Id: campaignToSave.Id\r\n }\r\n }, criterion);\r\n });\r\n campaignToSave.CampaignCriterions = campaignToSave.CampaignCriterions.concat(campaignTargetsCriterions);\r\n }\r\n _.extend(campaignToSave, advancedSettings.nativeAds);\r\n _.extend(campaignToSave, advancedSettings.multimediaAds);\r\n _.extend(campaignToSave, advancedSettings.vanityUrlSettings);\r\n if (this.advancedSettingsView && this.advancedSettingsView.adScheduleView) {\r\n campaignToSave.AdScheduleUseSearcherTimeZone = _.result(this.advancedSettingsView.adScheduleView, 'getAdScheduleUseSearcherTimeZone');\r\n }\r\n if (this.campaignGoalSelectionView) {\r\n campaignToSave.CampaignConversionGoalAssociations = this.campaignGoalSelectionView.convertToMTFormat(this.campaignId);\r\n }\r\n return jsdata.Campaign.update(this.campaignId, campaignToSave, {\r\n adapter: 'bulk'\r\n }).then(function (res) {\r\n var targetToCountMapping = {};\r\n _.each(res.CampaignCriterions, function (criterion) {\r\n var targetKey = criterion.Criterion.Type === 'Location' || criterion.Criterion.Type === 'Radius' ? 'update' + criterion.SelectionStatus + criterion.Criterion.Type + 'Targets' : 'create' + criterion.Criterion.Type + 'Targets';\r\n var count = targetToCountMapping[targetKey];\r\n targetToCountMapping[targetKey] = (_.isUndefined(count) ? 0 : count) + 1;\r\n });\r\n for (var target in targetToCountMapping) {\r\n var count = targetToCountMapping[target];\r\n if (count > 0) {\r\n instrumentation.logMessage([constants.LOGCATEGORY.TRACE], constants.LOGLEVEL.INFO, target, count);\r\n }\r\n }\r\n if (saveBudgetAndBidMarker) {\r\n saveBudgetAndBidMarker.done();\r\n }\r\n if (self.canFetchSuggestion) {\r\n self.logBidAdoption(adGroups);\r\n self.logBudgetAdoption(campaignToSave, self.budgetView.getSuggestedBudget());\r\n }\r\n self.logBidSuggestion(adGroups);\r\n return true;\r\n }).catch((function (response) {\r\n i18nErrors.getPartial(response, ['AdGroups', 'CampaignCriterions']);\r\n this.advancedSettingsView.setData(response);\r\n response.errors = this.advancedSettingsView.handleErrors(response);\r\n if (this.campaignTargetsView) {\r\n this.campaignTargetsView.fillCriterionsWithId(_.result(response.entity, 'CampaignCriterions'));\r\n }\r\n this.ko_model.errors.add(i18nErrors.getBulkApiErrors(response.errors));\r\n scrollUtil.scrollAndCenter(this.errorElements());\r\n if (this.options.activityLogger) {\r\n _.chain(response.errors).map(function (error) {\r\n return error.Error;\r\n }).uniq().each(function (error) {\r\n this.options.activityLogger.signal(error, 'campaign budget api error');\r\n }, this);\r\n }\r\n return false;\r\n }).bind(this)).finally(withUiBlock());\r\n },\r\n clearApiErrors: function () {\r\n this.advancedSettingsView.clearApiErrors();\r\n this.ko_model.errors.clear(i18nErrors.isCampaignApiError);\r\n },\r\n populateCriterionCampaignIds: function (criterions) {\r\n _.each(criterions, function (criterion) {\r\n criterion.Status = _.isEmpty(criterion.Status) ? 'Active' : criterion.Status;\r\n criterion.Campaign = {\r\n Id: this.campaignId\r\n };\r\n }, this);\r\n },\r\n remove: function () {\r\n if (this.performanceGrid) {\r\n this.performanceGrid.remove();\r\n }\r\n if (this.adgroupBidGrid) {\r\n this.adgroupBidGrid.remove();\r\n }\r\n if (this.biddingStrategyView) {\r\n this.biddingStrategyView.remove();\r\n }\r\n if (this.advancedSettingsView) {\r\n this.advancedSettingsView.remove();\r\n }\r\n if (this.campaignTargetsView) {\r\n this.campaignTargetsView.remove();\r\n }\r\n if (this.campaignGoalSelectionView) {\r\n this.campaignGoalSelectionView.remove();\r\n }\r\n Backbone.View.prototype.remove.apply(this, arguments);\r\n }\r\n});\r\nexport default View;\r\n\r\n","import getTrafficEstimation from '@bingads-webui-campaign-legacy/budget/shared/getTrafficEstimation';\r\nconst endpoint = '/Customers(:advertisercustomer_id)/Accounts(:account_id)/Default.CampaignTrafficEstimateWithSuggestedBid';\r\n\r\nexport default function (params, callbacks, options, timestamp) {\r\n return getTrafficEstimation(params, callbacks, options, endpoint, timestamp);\r\n}\r\n","import _ from 'underscore';\r\nimport ko from 'knockout';\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\nimport koSchema from '@bingads-webui-component-legacy/ko-schema/index';\r\nimport decimalNumber from '@bingads-webui-component-legacy/humanize/decimal';\r\nimport pageContext from '@bingads-webui-static-legacy/page-context';\r\nimport instrumentation from '@bingads-webui-campaign-legacy/instrumentation/index';\r\nimport { isXandrServing } from '@bingads-webui-campaign-react/constants';\r\n\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/campaign-creation-advanced');\r\nconst s$Budget = window.globalLegacySchema.get('Budget');\r\n\r\nconst accountCurrencyCode = config.get('AccountCurrencyCode');\r\n\r\nconst DAILY_BUDGET_TYPE = 'DailyStandard';\r\nconst DAILY_ACCELERATED_BUDGET_TYPE = 'DailyAccelerated';\r\nconst LIFETIME_BUDGET_TYPE = 'LifetimeBudgetStandard';\r\n\r\nconst dailyBudget = {\r\n text: i18n.get('BudgetType_DailyStandard'),\r\n value: DAILY_BUDGET_TYPE,\r\n};\r\n\r\nconst dailyAcceleratedBudget = {\r\n text: i18n.get('BudgetType_DailyAccelerated'),\r\n value: DAILY_ACCELERATED_BUDGET_TYPE,\r\n};\r\n\r\nconst lifetimeBudget = {\r\n text: i18n.get('BudgetType_LifetimeBudgetStandard'),\r\n value: LIFETIME_BUDGET_TYPE,\r\n};\r\n\r\nconst budgetTypes = [dailyBudget, dailyAcceleratedBudget, lifetimeBudget];\r\n\r\nexport default class ViewModel {\r\n constructor({\r\n Amount,\r\n Type,\r\n CampaignType,\r\n showBudgetMinRecommend,\r\n CampaignSubType,\r\n CampaignSettings,\r\n budgetRange,\r\n } = {}) {\r\n const { activity } = instrumentation.createScenarioAndActivity({\r\n scenarioName: 'InlineBudgetEdit',\r\n activityName: 'EditBudget',\r\n });\r\n\r\n koSchema.properties(this, s$Budget, ['Amount', 'Type'], { Amount, Type }, {\r\n Amount: {\r\n isValid: (value) => {\r\n if (_.isNumber(value)) {\r\n return value >= budgetRange.FloorValue && value <= budgetRange.CeilingValue;\r\n }\r\n\r\n return true;\r\n },\r\n message: Type === LIFETIME_BUDGET_TYPE ?\r\n i18n.get('Budget_InputValueError_Lifetime')\r\n .replace('{0}', accountCurrencyCode)\r\n .replace('{1}', decimalNumber.fromFloatToString(budgetRange.FloorValue))\r\n .replace('{2}', accountCurrencyCode)\r\n .replace('{3}', decimalNumber.fromFloatToString(budgetRange.CeilingValue)) :\r\n i18n.get('Budget_InputValueError_Daily')\r\n .replace('{0}', accountCurrencyCode)\r\n .replace('{1}', decimalNumber.fromFloatToString(budgetRange.FloorValue)),\r\n },\r\n });\r\n\r\n const requiredValidator = _.result(this.Amount.validators, 'required');\r\n\r\n requiredValidator.nullable = false;\r\n this.budgetTypes = ko.computed(() => {\r\n if (pageContext.Permissions.IsDeprecateAcceleratedBudgetEnabled &&\r\n Type === DAILY_BUDGET_TYPE) {\r\n return [dailyBudget];\r\n } else if (Type === LIFETIME_BUDGET_TYPE) {\r\n return [lifetimeBudget];\r\n }\r\n return budgetTypes;\r\n });\r\n this.campaignType = CampaignType;\r\n this.selectedType = ko.observable(_.find(budgetTypes, (type) => {\r\n return type.value === Type;\r\n }) || _.first(this.budgetTypes));\r\n ko.computed(() => {\r\n this.Type(this.selectedType().value); //eslint-disable-line\r\n });\r\n this.showBudgetMinRecommend = ko.computed(() => {\r\n // eslint-disable-next-line new-cap\r\n const showBudgetMinRecommendation = showBudgetMinRecommend && Amount && Amount >= 0.1 && this.Amount() && this.Amount() < (Amount * 0.5).toFixed(2) && !isXandrServing(CampaignSubType, CampaignSettings);\r\n\r\n if (showBudgetMinRecommendation) {\r\n activity.trace('BCCForBudgetMinimumRecommendation: show');\r\n }\r\n return showBudgetMinRecommendation;\r\n }, this);\r\n this.applySuggestedBudget = () => {\r\n activity.trace('BCCForBudgetMinimumRecommendation: apply');\r\n // eslint-disable-next-line new-cap\r\n this.Amount((Amount * 0.5).toFixed(2) * 1);\r\n };\r\n this.applySuggestedBudgetLog = () => {\r\n // eslint-disable-next-line new-cap\r\n if (Amount && Amount >= 0.1 && this.Amount() && this.Amount() < (Amount * 0.5).toFixed(2)) {\r\n // eslint-disable-next-line new-cap\r\n activity.trace(`Bid${this.Amount()} Less than 50% of current budget${Amount}`);\r\n\r\n }\r\n };\r\n }\r\n\r\n isValid() {\r\n this.errors.clear();\r\n return this.validate();\r\n }\r\n\r\n handleErrors(errors) {\r\n this.errors.clear();\r\n this.errors.add(errors);\r\n }\r\n}\r\n\r\n","/* eslint-disable */\r\nexport default function load(module) {\r\n switch(module) {\r\n case '@bingads-webui/i18n-amd-loader!campaignui/feature/competition-tab':\r\n return Promise.resolve(window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/feature/competition-tab'));\r\n case '@bingads-webui-component-legacy/http/channel/odata':\r\n return import(/* webpackChunkName: \"settings-page-dynamic-feature-odata\" */ '@bingads-webui-component-legacy/http/channel/odata').then(legacyModule => legacyModule.default);\r\n case '@bingads-webui-component-legacy/config/index':\r\n return import(/* webpackChunkName: \"settings-page-dynamic-feature-config\" */ '@bingads-webui-component-legacy/config/index').then(legacyModule => legacyModule.default);\r\n case '@bingads-webui-campaign-legacy/instrumentation/index':\r\n return import(/* webpackChunkName: \"settings-page-dynamic-feature-instrumentation\" */ '@bingads-webui-campaign-legacy/instrumentation/index');\r\n case '@bingads-webui-campaign/recommendation-inline-budget-view':\r\n return import(/* webpackChunkName: \"settings-page-dynamic-feature-inline-budget\" */ '@bingads-webui-campaign/recommendation-inline-budget-view');\r\n default:\r\n return new Promise(null);\r\n }\r\n}\r\n","import Promise from 'bluebird';\r\nimport _ from 'underscore';\r\nimport Backbone from 'backbone';\r\nimport ko from 'knockout';\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\nimport { getBulkApiErrors } from '@bingads-webui-component-legacy/api-errors-campaign/index';\r\nimport withUiBlock from '@bingads-webui-component-legacy/uiblocker/index';\r\nimport jsData from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport template from '@bingads-webui-campaign-legacy/budget/template/inline-budget-editor.pug';\r\nimport ViewModel from '@bingads-webui-campaign-legacy/budget/viewmodel/inline-budget-editor';\r\nimport templateWithLandscape from '@bingads-webui-campaign-legacy/budget/template/inline-budget-editor-with-landscape.pug';\r\nimport { logBudgetLandScapeView, logBudgetLandScapeAdoption } from '@bingads-webui-campaign-legacy/budget/shared/log';\r\nimport load from '@bingads-webui-campaign-legacy/budget/view/dynamic-require-es6-load';\r\nimport { MinXandrDailyBudgetRangePerCurrency, LinkedInBudgetRangePerCurrency, getBudgetRangeOld } from '@bingads-webui-campaign-legacy/common-grid-config/budget/get-budget-range';\r\nimport { isXandrServing } from '@bingads-webui-campaign-react/constants';\r\n\r\nconst accountCurrencyCode = config.get('AccountCurrencyCode');\r\nconst i18nGlobal = window.globalLegacyI18n.get('component/i18n/loader!legacy/global');\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/campaign-creation-advanced');\r\n\r\nconst BUDGET_SUGGESTION = 'BudgetSuggestions';\r\nconst LIFETIME_BUDGET_TYPE = 'LifetimeBudgetStandard';\r\n\r\nfunction getErrors(response) {\r\n const unexpectedError = [i18nGlobal.getString('ErrorNumber_-1')];\r\n\r\n if (!response || !response.errors) {\r\n return unexpectedError;\r\n }\r\n\r\n const errors = getBulkApiErrors(response.errors);\r\n\r\n if (!errors || !errors[0] || !errors[0].message) {\r\n return unexpectedError;\r\n }\r\n\r\n return errors;\r\n}\r\n\r\nfunction fetchBudgetLandscape(campaignId, odata) {\r\n const odataPath = config.get('adinsight.odata.url');\r\n const uri = `Customers(:customer_id)/Accounts(:account_id)/Campaigns(${campaignId})/Opportunity.GetBudgetLandscape`;\r\n\r\n return odata.get(uri, {\r\n path: 'AdInsight/V2/',\r\n host: odataPath,\r\n });\r\n}\r\n\r\nexport default class View extends Backbone.View {\r\n initialize({ item, $elToBlock, isForVNext, permissions, currencySymbol, clientName, perfMarker, showBudgetMinRecommend, importNotificationCallback }) {\r\n if (!item.Id || !item.Budget) {\r\n throw new Error('Campaign Id or Budget not found when update budget.');\r\n }\r\n\r\n this.item = item;\r\n this.$elToBlock = $elToBlock;\r\n this.isForVNext = isForVNext;\r\n this.permissions = permissions;\r\n this.currencySymbol = currencySymbol;\r\n this.clientName = clientName;\r\n this.perfMarker = perfMarker;\r\n this.landscapeEnabled = permissions.IsBudgetInlineSuggestionEnabled;\r\n this.importNotificationCallback = importNotificationCallback;\r\n\r\n const budgetRange = getBudgetRangeOld(accountCurrencyCode);\r\n const { Type: budgetType, Amount, LifetimeBudgetAmount } = item.Budget || {};\r\n\r\n this.budgetAmount = budgetType === LIFETIME_BUDGET_TYPE ? LifetimeBudgetAmount : Amount;\r\n\r\n this.budgetRange = {\r\n CeilingValue: budgetType === LIFETIME_BUDGET_TYPE ? budgetRange.LifetimeRange.CeilingValue : budgetRange.DailyRange.CeilingValue,\r\n FloorValue: budgetType === LIFETIME_BUDGET_TYPE ? budgetRange.LifetimeRange.FloorValue : budgetRange.DailyRange.FloorValue,\r\n };\r\n const { CampaignType, CampaignSubType, CampaignSettings } = item;\r\n\r\n if (isXandrServing(CampaignSubType, CampaignSettings) && MinXandrDailyBudgetRangePerCurrency[accountCurrencyCode]) {\r\n this.budgetRange.FloorValue = MinXandrDailyBudgetRangePerCurrency[accountCurrencyCode];\r\n }\r\n\r\n if (CampaignType === 'LinkedIn' && LinkedInBudgetRangePerCurrency[accountCurrencyCode]) {\r\n this.budgetRange.FloorValue = LinkedInBudgetRangePerCurrency[accountCurrencyCode].Min;\r\n this.budgetRange.CeilingValue = LinkedInBudgetRangePerCurrency[accountCurrencyCode].Max;\r\n }\r\n\r\n this.viewModel = new ViewModel(\r\n _.extend(\r\n _.pick(item.Budget, 'Type', 'CampaignType'),\r\n { showBudgetMinRecommend, CampaignSubType, CampaignSettings, budgetRange: this.budgetRange, Amount: this.budgetAmount },\r\n ));\r\n const hasBudgetLandscape = _.contains(this.item.DeliveryStatusDetails, BUDGET_SUGGESTION) ||\r\n this.item.DeliveryStatus === BUDGET_SUGGESTION;\r\n\r\n if (hasBudgetLandscape && this.landscapeEnabled) {\r\n const budgetSuggestionPerfMarker = this.createMarker('Open_BudgetSuggestion');\r\n\r\n budgetSuggestionPerfMarker('willFetchFile');\r\n\r\n const i18nForBudgetLandscapePromise = load('@bingads-webui/i18n-amd-loader!campaignui/feature/competition-tab');\r\n const odataPromise = load('@bingads-webui-component-legacy/http/channel/odata');\r\n const instrumentationPromise = load('@bingads-webui-campaign-legacy/instrumentation/index');\r\n const budgetLandScapeTablePromise = load('@bingads-webui-campaign/recommendation-inline-budget-view');\r\n\r\n Promise.all([i18nForBudgetLandscapePromise, odataPromise,\r\n instrumentationPromise, budgetLandScapeTablePromise,\r\n ]).then(([\r\n i18nForBudgetLandscape,\r\n odata,\r\n instrumentation,\r\n { BudgetLandScapeTable },\r\n ]) => {\r\n budgetSuggestionPerfMarker('willInit');\r\n this.activity = instrumentation.default.inlineBudgetEditor.create().recordBudgetLandscape.create();\r\n\r\n budgetSuggestionPerfMarker('willFetchData');\r\n fetchBudgetLandscape(item.Id, odata).then((res) => {\r\n const rawData = _.chain(res).result('value').first().value();\r\n\r\n if (rawData) {\r\n budgetSuggestionPerfMarker('willRender');\r\n this.tableView = new BudgetLandScapeTable({\r\n opportunityData: rawData,\r\n i18n: i18nForBudgetLandscape,\r\n conversionSummaryStatus: rawData.ConversionStatus,\r\n budgetRange: this.budgetRange,\r\n currentBudget: this.budgetAmount,\r\n fromBudgetColumn: true,\r\n fromCampaignTab: true,\r\n view: this,\r\n el: this.$('.landscape-table'),\r\n });\r\n\r\n this.tableView.render();\r\n budgetSuggestionPerfMarker('done');\r\n\r\n // landscape view log\r\n logBudgetLandScapeView(\r\n rawData.Target && rawData.Target.CampaignId,\r\n this.clientName,\r\n rawData.OpportunityId,\r\n this.tableView.ko_model.rawSuggestedBudget,\r\n i18nForBudgetLandscape.currency,\r\n this.activity,\r\n );\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click .save': 'save',\r\n 'click .cancel': 'cancel',\r\n 'click .apply-budget': 'applySuggestedBudget',\r\n };\r\n }\r\n\r\n render() {\r\n if (this.landscapeEnabled) {\r\n this.$el.html(templateWithLandscape({\r\n i18nGlobal,\r\n i18n,\r\n currencySymbol: this.currencySymbol,\r\n minimumBudget: this.item.Budget ? (this.budgetAmount * 0.5).toFixed(2) : 'undefined',\r\n currencySymbolClassName: `symbol-size-${this.currencySymbol.length}`,\r\n }));\r\n } else {\r\n this.$el.html(template({\r\n i18nGlobal,\r\n i18n,\r\n }));\r\n }\r\n\r\n ko.applyBindings(this.viewModel, this.el);\r\n return this;\r\n }\r\n\r\n save() {\r\n if (!this.viewModel.isValid()) {\r\n return;\r\n }\r\n\r\n let updatedBudget = _.defaults(this.viewModel.toObject(), this.item.Budget);\r\n\r\n // update budget by selecting value from landscape data\r\n if (this.tableView) {\r\n updatedBudget.Amount = this.tableView.getSelectedNewBudget();\r\n } else {\r\n this.viewModel.applySuggestedBudgetLog();\r\n }\r\n const updated = _.defaults({\r\n Budget: updatedBudget,\r\n }, _.pick(this.item, 'Id'));\r\n const $elToBlock = this.$elToBlock || this.$el.parent();\r\n\r\n jsData.Campaign\r\n .update(this.item.Id, updated, { adapter: 'bulk', cacheResponse: false })\r\n .finally(withUiBlock($elToBlock))\r\n .then(() => {\r\n this.trigger('close', updatedBudget);\r\n if (this.importNotificationCallback) {\r\n this.importNotificationCallback(updatedBudget);\r\n }\r\n if (this.tableView) {\r\n // landscape adopt log\r\n logBudgetLandScapeAdoption(\r\n this.tableView.campaignId,\r\n this.clientName,\r\n this.tableView.opportunityId,\r\n this.tableView.ko_model.rawSuggestedBudget,\r\n updatedBudget.Amount,\r\n this.tableView.i18n.currency,\r\n this.activity,\r\n );\r\n }\r\n })\r\n .catch((response) => {\r\n this.viewModel.handleErrors(getErrors(response));\r\n });\r\n }\r\n\r\n cancel() {\r\n this.trigger('close');\r\n }\r\n\r\n applySuggestedBudget() {\r\n this.viewModel.applySuggestedBudget();\r\n }\r\n\r\n createMarker(name) {\r\n let marker = () => { /* empty because don't have perfmarket in campaign new ui */ };\r\n\r\n if (this.perfMarker) {\r\n const childMarker = this.perfMarker.createChild(name);\r\n\r\n marker = (event) => {\r\n childMarker[event]();\r\n };\r\n }\r\n\r\n return marker;\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport { Dialog } from '@bingads-webui/dialog';\r\nimport messageTemplate from './template/bulk-delete-lightbox-message.pug';\r\n\r\nconst i18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/feature/bulk-action-accounts-grid');\r\n\r\nexport class MessageView extends Backbone.View {\r\n initialize({message}) {\r\n this.message = message;\r\n }\r\n\r\n render() {\r\n this.$el.html(messageTemplate({message: this.message}));\r\n return this;\r\n }\r\n}\r\n\r\nexport default class View extends Backbone.View {\r\n initialize({\r\n proceedButtonClickCallback,\r\n accountsCount,\r\n }) {\r\n this.proceedButtonClickCallback = proceedButtonClickCallback;\r\n this.accountsCount = accountsCount;\r\n let buttons = [{\r\n text: i18n.getString('BulkAccountDelete_Proceed'),\r\n name: 'primaryButton',\r\n class: 'btn btn-primary lightboxPrimary',\r\n disabled: accountsCount <= 0,\r\n }, {\r\n text: i18n.getString('BulkAccountDelete_Goback'),\r\n name: 'defaultButton',\r\n class: 'btn btn-default lightboxDefault',\r\n }];\r\n\r\n this.lightboxDiv = new Dialog({ className: 'bulk-delete-dialog', showCloseButton: false });\r\n this.lightboxDiv.setContent(new MessageView({message: i18n.getString('BulkAccountDelete_Body')}));\r\n this.lightboxDiv.setState({\r\n title: i18n.getString('BulkAccountDelete_Title'),\r\n buttons,\r\n });\r\n this.lightboxDiv.on('clickedButton', (name) => {\r\n if (name === 'primaryButton') {\r\n this.proceedButtonClickCallback();\r\n }\r\n this.lightboxDiv.remove();\r\n });\r\n document.body.appendChild(this.lightboxDiv.el);\r\n }\r\n\r\n render() {\r\n this.lightboxDiv.show();\r\n return this;\r\n }\r\n}\r\n","/* eslint-disable no-undef */\r\nimport Backbone from 'backbone';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\n\r\nimport { CommonDialog } from '@bingads-webui-cc-react/dialogs';\r\n\r\nconst { AlertDialog } = CommonDialog;\r\n\r\nconst dialogContent = ({ i18n, accountNumbersList }) =>\r\n <>\r\n \r\n {i18n.getString(_TL_('The reactivation action is successful but due to not having required account business location (ABL) information, the following account(s) can’t serve ads until ABL is completed. Please notify the customer to fill in corresponding fields on their account setting page.')) }\r\n
\r\n \r\n {accountNumbersList}\r\n
\r\n >;\r\n\r\nexport default class View extends Backbone.View {\r\n initialize({\r\n i18n,\r\n accountNumbers,\r\n onAction,\r\n }) {\r\n this.i18n = i18n;\r\n this.accountNumbersList = accountNumbers.join(', ');\r\n this.onAction = onAction;\r\n }\r\n\r\n hide() {\r\n ReactDOM.unmountComponentAtNode(this.el);\r\n this.remove();\r\n }\r\n\r\n render() {\r\n ReactDOM.render(React.createElement(\r\n AlertDialog,\r\n {\r\n name: 'bulk-reactivate-abl-missing',\r\n onAction: () => {\r\n this.hide();\r\n this.onAction();\r\n },\r\n title: this.i18n.getString(_TL_('Account business location (ABL) required')),\r\n content: dialogContent({ i18n: this.i18n, accountNumbersList: this.accountNumbersList }),\r\n alertButtonText: this.i18n.getString(_TL_('OK')),\r\n },\r\n ), this.el);\r\n return this;\r\n }\r\n}\r\n","export const AccountHoldStatus = {\r\n AccountHoldStatusInvalid: 'AccountHoldStatusInvalid',\r\n AccountHoldStatusUpdateFailure: 'AccountHoldStatusUpdateFailure',\r\n};\r\n\r\nexport const AccountInactiveReasons = {\r\n AccountMissingABL: 19,\r\n};\r\n","import _ from 'underscore';\r\nimport $ from 'jquery';\r\nimport 'jquery.redirect';\r\nimport instrument from '@bingads-webui-static-legacy/instrumentation/index';\r\nimport instrumentConsts from '@bingads-webui-static-legacy/instrumentation/constants';\r\nimport BulkDeleteLightbox from './bulk-delete-lightbox';\r\nimport BulkReactivateABLMisssingLightbox from './bulk-reactivate-abl-missing-lightbox';\r\nimport { getCCUrl } from '@bingads-webui-component-legacy/bingads-grid/shared/clientcenter-url-helper';\r\nimport { AccountHoldStatus, AccountInactiveReasons } from './constants';\r\n\r\nconst i18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/feature/bulk-action-accounts-grid');\r\n\r\nconst alertCenter = window.App.views.alertCenter;\r\n\r\nconst postRequestWithErrorHandled = ({ url, data, successCallback, logMethodName }) => {\r\n $.advertiser.ajaxPost({\r\n url,\r\n xhrFields: {\r\n withCredentials: true,\r\n },\r\n contentType: 'application/json',\r\n dataType: 'json',\r\n data: JSON.stringify(data),\r\n onSuccess: (response) => {\r\n if (response) {\r\n if (response.IsSuccess === true) {\r\n successCallback(response);\r\n } else {\r\n // else: Error messages from a onSuccess ajax call are handled in $.advertiser.ajaxPost, so no need to display them to the user at this moment\r\n instrument.logMessage(instrumentConsts.LOGCATEGORY.INFO, instrumentConsts.LOGLEVEL.INFO, logMethodName, `response with errors. query parameters: ${JSON.stringify(data)}, response: ${JSON.stringify(response)}`);\r\n }\r\n } else {\r\n alertCenter.showWarning(i18n.getString('GenericErrorMessage_Short'));\r\n instrument.logMessage(instrumentConsts.LOGCATEGORY.ERROR, instrumentConsts.LOGLEVEL.INFO, logMethodName, `response empty: ${JSON.stringify(data)}`);\r\n }\r\n },\r\n onError: (e) => {\r\n alertCenter.showWarning(i18n.getString('GenericErrorMessage_Short'));\r\n instrument.logMessage(instrumentConsts.LOGCATEGORY.ERROR, instrumentConsts.LOGLEVEL.INFO, logMethodName, `response/ajaxPost failed with ${JSON.stringify(e)}`);\r\n },\r\n hideLoadingPanelOnSuccess: true,\r\n });\r\n};\r\n\r\nconst handleErrorMessage = (errors, logMethodName, data) => {\r\n let firstError = _.first(errors);\r\n\r\n if (!_.isEmpty(firstError)) {\r\n let errorCodes = _.map(errors, (error) => error.Code);\r\n\r\n instrument.logMessage(instrumentConsts.LOGCATEGORY.INFO, instrumentConsts.LOGLEVEL.INFO, logMethodName,\r\n `response with errors. query parameters: ${JSON.stringify(data)}, response: Error codes = ${JSON.stringify(errorCodes)}`);\r\n return firstError.Message;\r\n }\r\n\r\n return firstError;\r\n};\r\n\r\nconst postRequestWithBatchErrorHandled = ({ url, data, successCallback, logMethodName }) => {\r\n $.advertiser.ajaxPost({\r\n url,\r\n xhrFields: {\r\n withCredentials: true,\r\n },\r\n contentType: 'application/json',\r\n dataType: 'json',\r\n data: JSON.stringify(data),\r\n onSuccess: (responses) => {\r\n if (responses) {\r\n _.each(responses, (response) => {\r\n const { Value: { IsSuccess: isSuccess, InternalErrors, SenderErrors } = {} } = response;\r\n const isAccountAlreadyHoldOrUnHold = _.isEmpty(InternalErrors) && _.all(SenderErrors, (error) => error.Code === AccountHoldStatus.AccountHoldStatusInvalid);\r\n\r\n if (isSuccess || isAccountAlreadyHoldOrUnHold) {\r\n successCallback(data);\r\n } else {\r\n let showWarning;\r\n\r\n showWarning = handleErrorMessage(InternalErrors, logMethodName, data);\r\n showWarning = handleErrorMessage(SenderErrors, logMethodName, data);\r\n if (_.isEmpty(showWarning)) {\r\n alertCenter.showWarning(i18n.getString('GenericErrorMessage_Short'));\r\n } else {\r\n alertCenter.showWarning(showWarning);\r\n }\r\n }\r\n });\r\n } else {\r\n alertCenter.showWarning(i18n.getString('GenericErrorMessage_Short'));\r\n instrument.logMessage(instrumentConsts.LOGCATEGORY.ERROR, instrumentConsts.LOGLEVEL.INFO, logMethodName, `response empty: ${JSON.stringify(data)}`);\r\n }\r\n },\r\n onError: (e) => {\r\n alertCenter.showWarning(i18n.getString('GenericErrorMessage_Short'));\r\n instrument.logMessage(instrumentConsts.LOGCATEGORY.ERROR, instrumentConsts.LOGLEVEL.INFO, logMethodName, `response/ajaxPost failed with ${JSON.stringify(e)}`);\r\n },\r\n hideLoadingPanelOnSuccess: true,\r\n });\r\n};\r\n\r\nconst fetchAccountsData = (accountIds, successCallback) => {\r\n $.advertiser.ajaxGet({\r\n url: getCCUrl('api/account', { accountIds }),\r\n xhrFields: {\r\n withCredentials: true,\r\n },\r\n contentType: 'application/json',\r\n dataType: 'json',\r\n onSuccess: (response) => {\r\n if (response) {\r\n successCallback(response.value);\r\n }\r\n },\r\n hideLoadingPanelOnSuccess: true,\r\n });\r\n};\r\n\r\nconst postRequestRedirect = (url, data) => {\r\n $.redirect(url, data);\r\n};\r\n\r\nexport function bulkEditAbl({selectedAccounts, customerId, userId}) {\r\n const bulkEditTaxesValidationErrorsSegments = 'accounts/BulkEditTaxesValidationErrors';\r\n const accountsUpdateSegments = 'accounts/update';\r\n const logMethodName = 'BulkEditTaxesValidationErrors';\r\n\r\n const data = {\r\n cid: customerId,\r\n uid: userId,\r\n accountIds: _.pluck(selectedAccounts, 'Id'),\r\n };\r\n\r\n const bulkEditTaxesValidationErrorsUrl = getCCUrl(bulkEditTaxesValidationErrorsSegments);\r\n const accountsUpdateUrl = getCCUrl(accountsUpdateSegments, _.pick(data, 'cid', 'uid'));\r\n\r\n postRequestWithErrorHandled({\r\n url: bulkEditTaxesValidationErrorsUrl,\r\n data,\r\n successCallback: () => {\r\n postRequestRedirect(accountsUpdateUrl, data);\r\n },\r\n logMethodName,\r\n });\r\n}\r\n\r\nexport function bulkEditManualHold({selectedAccounts, isApplyHold, successCallback }) {\r\n const bulkEditManualHoldSegments = 'accounts/BatchAccountManualHold';\r\n const logMethodName = 'BatchAccountManualHold';\r\n\r\n const data = {\r\n accountIds: _.pluck(selectedAccounts, 'Id'),\r\n isApplyHold,\r\n };\r\n const bulkEditManualHoldUrl = getCCUrl(bulkEditManualHoldSegments, data);\r\n\r\n postRequestWithBatchErrorHandled({\r\n url: bulkEditManualHoldUrl,\r\n data,\r\n successCallback,\r\n logMethodName,\r\n });\r\n}\r\n\r\nexport function bulkDeleteAccounts({selectedAccounts, successCallback}) {\r\n const accountsDeleteSegments = 'accounts/Delete';\r\n const logMethodName = 'bulkDeleteAccounts';\r\n\r\n const data = {\r\n accountIds: _.pluck(selectedAccounts, 'Id'),\r\n };\r\n const accountsDeleteUrl = getCCUrl(accountsDeleteSegments);\r\n\r\n if (data.accountIds && data.accountIds.length) {\r\n const dialogView = new BulkDeleteLightbox({\r\n accountsCount: data.accountIds.length,\r\n proceedButtonClickCallback: () => {\r\n postRequestWithErrorHandled({\r\n url: accountsDeleteUrl,\r\n data,\r\n successCallback,\r\n logMethodName,\r\n });\r\n },\r\n });\r\n\r\n dialogView.render();\r\n }\r\n}\r\n\r\nexport function bulkReactivateAccounts({i18n: newI18n, selectedAccounts, successCallback}) {\r\n const accountsReactivateSegments = 'accounts/Reactivate';\r\n const logMethodName = 'bulkReactivateAccounts';\r\n const getABLMissingAccounts = (accounts) => _.filter(accounts, (account) => {\r\n const accountInactiveReasons = _.get(account, 'AccountInactiveReasonsV1', []);\r\n\r\n return Array.isArray(accountInactiveReasons) && accountInactiveReasons.some((reason) => reason.Reason === AccountInactiveReasons.AccountMissingABL);\r\n });\r\n const selectedAccountIds = _.pluck(selectedAccounts, 'Id');\r\n const data = {\r\n accountIds: selectedAccountIds,\r\n };\r\n const accountsReactivateUrl = getCCUrl(accountsReactivateSegments);\r\n\r\n postRequestWithErrorHandled({\r\n url: accountsReactivateUrl,\r\n data,\r\n successCallback: () => {\r\n fetchAccountsData(selectedAccountIds, (accounts) => {\r\n const ABLMissingAccounts = getABLMissingAccounts(accounts);\r\n\r\n if (ABLMissingAccounts.length) {\r\n const ABLMissingAlertView = new BulkReactivateABLMisssingLightbox({\r\n i18n: newI18n,\r\n accountNumbers: _.pluck(ABLMissingAccounts, 'Number'),\r\n onAction: successCallback,\r\n });\r\n\r\n ABLMissingAlertView.render();\r\n } else {\r\n successCallback();\r\n }\r\n });\r\n },\r\n logMethodName,\r\n });\r\n}\r\n","import $ from 'jquery';\r\nimport _ from 'underscore';\r\nimport { queryify } from '@bingads-webui/url-util';\r\nimport state from '@bingads-webui-component-legacy/state/index';\r\nimport $http from '@bingads-webui-component-legacy/http/channel/core';\r\n\r\nconst exclusionUrl = '/Campaign/campaigns/BulkUpdate';\r\n\r\nfunction getUrl() {\r\n return queryify(exclusionUrl, {\r\n cid: state.get('customer_id'),\r\n uid: state.get('user_id'),\r\n aid: state.get('account_id'),\r\n __adcenterAJAX: 'true',\r\n });\r\n}\r\n\r\nexport function exclusionsUpdate(data) {\r\n return $http.post(getUrl(), {\r\n contentType: 'application/x-www-form-urlencoded',\r\n 'data': _.defaults({\r\n __RequestVerificationToken: $('input[name=\"__RequestVerificationToken\"]').val(),\r\n 'CampaignsGrid.Action': 'BulkAction',\r\n }, data),\r\n });\r\n}\r\n","import _ from 'underscore';\r\nimport ko from 'knockout';\r\nimport { CampaignType } from '@bingads-webui-campaign/campaign-ui-common';\r\n\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/feature/bulk-campaign-exclusions');\r\n\r\nconst whitelistCampaignTypesForDefaultSelections = [\r\n CampaignType.None,\r\n CampaignType.Default,\r\n CampaignType.Shopping,\r\n CampaignType.DynamicSearchAds,\r\n CampaignType.Audience,\r\n CampaignType.Smart,\r\n CampaignType.Hotel,\r\n CampaignType.All,\r\n];\r\n\r\nconst defaultSelections = [\r\n {\r\n value: '3',\r\n text: i18n.get('BulkEdit_SiteExclusions_Label'),\r\n label: i18n.get('BulkEdit_SiteExclusions_Label'),\r\n confirmText: i18n.get('BulkEdit_Campaigns_UpdateSiteExclusionConfirmMsg'),\r\n helpTopic: 'Page_CampaignExclusionSettingsPopup_WebsitesToExclude',\r\n name: 'SiteExclusions',\r\n helpAriaLabel: (i18n.get('Click to learn more about {{item}}') || '').replace('{{item}}', i18n.get('BulkEdit_SiteExclusions_Label')),\r\n }, {\r\n value: '5',\r\n text: i18n.get('BulkEdit_IPExclusions_Label'),\r\n label: i18n.get('BulkEdit_IPExclusions_Label'),\r\n confirmText: i18n.get('BulkEdit_Campaigns_UpdateIPExclusionConfirmMsg'),\r\n helpTopic: 'Page_CampaignExclusionSettingsPopup_IPAddressToExclude',\r\n name: 'IPExclusions',\r\n helpAriaLabel: (i18n.get('Click to learn more about {{item}}') || '').replace('{{item}}', i18n.get('BulkEdit_IPExclusions_Label')),\r\n },\r\n];\r\n\r\nconst endDateSelection = {\r\n value: '7',\r\n text: i18n.get('Audience_Campaign_BulkEdit_EndDate'),\r\n label: i18n.get('Audience_Campaign_BulkEdit_EndDate'),\r\n confirmText: i18n.get('Audience_Campaign__BulkEndDate_ConfirmMsg'),\r\n name: 'EndDate',\r\n shouldGridReload: true,\r\n};\r\n\r\nconst adScheduleTimeZoneSelection = {\r\n value: '6',\r\n text: i18n.get('BulkEdit_AdScheduleTimeZone_OptionText'),\r\n label: i18n.get('BulkEdit_AdScheduleTimeZone_Label'),\r\n confirmText: i18n.get('BulkEdit_Campaigns_UpdateAdScheduleTimeZoneConfirmMsg'),\r\n helpTopic: 'pop_BA_Targeting_TimeZone',\r\n name: 'AdScheduleUseSearcherTimeZone',\r\n helpAriaLabel: (i18n.get('Click to learn more about {{item}}') || '').replace('{{item}}', i18n.get('BulkEdit_AdScheduleTimeZone_Label')),\r\n};\r\n\r\nexport default class ViewModel {\r\n constructor(options = {}) {\r\n this.options = options;\r\n this.isForVNext = options.isForVNext;\r\n const selections = _.map(_.includes(whitelistCampaignTypesForDefaultSelections, options.campaignType) ? defaultSelections : [], (defaultSelection) => {\r\n return _.defaults({\r\n textAreaValue: ko.observable(''),\r\n }, defaultSelection);\r\n });\r\n\r\n if (options.campaignLifetimeBudget) {\r\n selections.push(endDateSelection);\r\n }\r\n\r\n if (!_.find(selections, (o) => o.name === 'AdScheduleUseSearcherTimeZone')) {\r\n selections.push(adScheduleTimeZoneSelection);\r\n }\r\n\r\n this.selectedValue = ko.observable([selections[0].value]);\r\n this.selections = selections;\r\n this.learnMoreText = i18n.get('Control_PaneHelp_LearnMore');\r\n this.title = i18n.get('Page_CampSummary_BulkToolTitleText');\r\n this.selectLabel = i18n.get('BulkEdit_Campaigns_BulkEditTitle');\r\n this.applyForThisPageOnlyInfo = i18n.get('BulkEdit_OtherChanges_ApplyForThisPageOnlyInfo');\r\n this.applyButtonText = i18n.get('BulkEdit_ApplyButton');\r\n this.cancelButtonText = i18n.get('BulkEdit_CancelButton');\r\n this.errorMsg = ko.observable('');\r\n }\r\n\r\n getSelection() {\r\n const result = _.find(this.selections, (selection) => {\r\n return selection.value === this.selectedValue()[0];\r\n });\r\n\r\n if (!result) {\r\n throw new Error('Unknown selected value for campaign bulk exclusions.');\r\n }\r\n\r\n return result;\r\n }\r\n\r\n getResult(datePicker) {\r\n const result = {};\r\n const selection = this.getSelection();\r\n\r\n result.SelectedBulkEditOption = selection.value;\r\n if (selection.name === 'EndDate') {\r\n const endDateMachine = datePicker.getSelectedDate();\r\n let endDateUTC = null;\r\n\r\n if (!datePicker.getState().isNodateSelected) {\r\n endDateUTC = i18n.realI18n.parseDate(i18n.realI18n.formatDate(endDateMachine, {\r\n timeZone: null,\r\n }), { timeZone: 'UTC' });\r\n }\r\n\r\n result[selection.name] = endDateUTC === null ? '' : i18n.realI18n.formatDate(endDateUTC, {\r\n timeZone: 'UTC',\r\n culture: this.options.scope && this.options.scope.culture,\r\n });\r\n result.HasEndDate = result[selection.name] === '' ? 'False' : 'True';\r\n } else {\r\n result[selection.name] = selection.textAreaValue();\r\n }\r\n\r\n return result;\r\n }\r\n\r\n getConfirmText() {\r\n return this.getSelection().confirmText;\r\n }\r\n\r\n validate(endDatePicker) {\r\n const selection = this.getSelection();\r\n let isValid = true;\r\n\r\n if (selection.name === 'EndDate') {\r\n const endDate = endDatePicker.getSelectedDate();\r\n\r\n isValid = !!endDate || endDatePicker.getState().isNodateSelected;\r\n }\r\n\r\n if (!isValid) {\r\n this.errorMsg(i18n.get('Validation_EndDateRequired'));\r\n }\r\n\r\n return isValid;\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport Backbone from 'backbone';\r\nimport ko from 'knockout';\r\nimport pageContext from '@bingads-webui-static-legacy/page-context';\r\nimport popup from '@bingads-webui-component-legacy/dialog/popup';\r\nimport { exclusionsUpdate } from '../model/bulk-campaign-exclusions';\r\nimport withUiBlock from '@bingads-webui-component-legacy/uiblocker/index';\r\nimport ViewModel from '../viewmodel/bulk-campaign-exclusions';\r\nimport template from '../template/bulk-campaign-exclusions.pug';\r\nimport instrumentation from '@bingads-webui-campaign-legacy/instrumentation/index';\r\nimport BulkEditAdScheduleTimeZoneView from '@bingads-webui-campaign-legacy/campaign-bulk-edit/view/bulkEditAdScheduleTimeZone';\r\nimport BulkEditAdScheduleTimeZoneModel from '@bingads-webui-campaign-legacy/campaign-bulk-edit/model/bulkEditAdScheduleTimeZone';\r\nimport { CampaignsDatePicker } from '@bingads-webui-campaign/campaigns-date-picker';\r\n\r\nconst i18nGlobal = window.globalLegacyI18n.get('component/i18n/loader!legacy/global');\r\nlet dynamicPermissions = _.result(pageContext.Permissions, 'dynamic', {});\r\nlet currentAlertId = null;\r\n\r\nfunction dismissAlert() {\r\n if (currentAlertId) {\r\n window.App.views.alertCenter.dismiss(currentAlertId);\r\n currentAlertId = null;\r\n }\r\n}\r\n\r\nfunction showAlert(message) {\r\n dismissAlert();\r\n\r\n currentAlertId = window.App.views.alertCenter.show({\r\n message,\r\n level: 'Error',\r\n dismissible: true,\r\n }, currentAlertId);\r\n}\r\n\r\nfunction showUnknownError() {\r\n const unexpectedError = i18nGlobal.getString('ErrorNumber_-1');\r\n\r\n showAlert(unexpectedError);\r\n}\r\n\r\nexport default class View extends Backbone.View {\r\n initialize({ gridView, inlineError, isForVNext, grid, campaignType }) {\r\n this.gridView = gridView;\r\n this.inlineError = inlineError;\r\n this.viewModel = new ViewModel({ isForVNext, campaignType, campaignLifetimeBudget: dynamicPermissions.CampaignLifetimeBudget });\r\n\r\n const senario = instrumentation.bulkEditCampaignExclusions.create();\r\n\r\n this.activity = senario.bulkEditCampaignExclusions.create();\r\n this.activity.start();\r\n\r\n this.endDatePicker = new CampaignsDatePicker({\r\n allowNoDate: true,\r\n noDateLabel: i18nGlobal.getString('noEndDate'),\r\n dateLabel: i18nGlobal.getString('EndBy'),\r\n noDateGroupAriaLabel: i18nGlobal.getString('Audience_Campaign_BulkEdit_EndDate'),\r\n datePickerAriaLabel: i18nGlobal.getString('Audience_Campaign_BulkEdit_EndDate'),\r\n });\r\n\r\n this.endDatePicker.on('dateChanged', () => {\r\n this.viewModel.errorMsg('');\r\n });\r\n\r\n this.adScheduleTimeZoneView = new BulkEditAdScheduleTimeZoneView(_.defaults({\r\n model: new BulkEditAdScheduleTimeZoneModel({ entity: 'Campaign' }),\r\n onOperationSuccess: () => {\r\n this.trigger('hide');\r\n },\r\n }, {\r\n grid,\r\n isForVNext,\r\n }));\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click .btn-primary': 'save',\r\n 'click .btn-default': 'cancel',\r\n 'click .nodate': () => this.viewModel.errorMsg(''),\r\n };\r\n }\r\n\r\n render() {\r\n this.$el.html(template(this.viewModel));\r\n ko.applyBindings(this.viewModel, this.el);\r\n\r\n if (this.adScheduleTimeZoneView) {\r\n this.$('.schedule-timezone-setting-container').append(this.adScheduleTimeZoneView.render().el);\r\n }\r\n\r\n if (dynamicPermissions.CampaignLifetimeBudget && this.endDatePicker) {\r\n this.$('[data-ref=\"childView\"]').append(this.endDatePicker.render().el);\r\n }\r\n return this;\r\n }\r\n\r\n save() {\r\n if (!this.viewModel.validate(this.endDatePicker)) {\r\n return;\r\n }\r\n\r\n if (!popup.confirm(this.viewModel.getConfirmText())) {\r\n return;\r\n }\r\n\r\n dismissAlert();\r\n\r\n if (this.viewModel.getSelection().name === 'AdScheduleUseSearcherTimeZone' &&\r\n this.adScheduleTimeZoneView) {\r\n this.adScheduleTimeZoneView.submitJob();\r\n return;\r\n }\r\n\r\n const selectedIds = this.gridView.selectedKeys() || [];\r\n const idData = _.reduce(selectedIds, (memo, id, index) => {\r\n memo[`CampaignsGrid.SelectedIds[${index}]`] = id;\r\n return memo;\r\n }, {});\r\n const exclusionData = this.viewModel.getResult(this.endDatePicker);\r\n const formData = _.extend({}, idData, exclusionData);\r\n\r\n exclusionsUpdate(formData)\r\n .finally(withUiBlock(this.gridView.$el))\r\n .then((res) => {\r\n if (res && _.isArray(res.Errors) && res.Errors[0] && res.Errors[0].Message) {\r\n this.viewModel.errorMsg(res.Errors[0].Message);\r\n showAlert(res.Errors[0].Message);\r\n } else if (res && res.Records && res.Records.Rows) {\r\n const errors = _.chain(res.Records.Rows)\r\n .map((row) => {\r\n return _.isArray(row.Errors) && row.Errors.length > 0 && row.Errors[0].Message && row.Errors[0].Message.length > 0 ?\r\n [row.Id, [row.Errors[0].Message[0]]] :\r\n null;\r\n })\r\n .compact()\r\n .object()\r\n .value();\r\n\r\n if (_.isEmpty(errors)) {\r\n this.inlineError.clearErrors();\r\n this.gridView.deselectAll();\r\n } else {\r\n this.inlineError.setErrors(errors);\r\n\r\n this.gridView.once('willReload', () => {\r\n this.inlineError.clearErrors();\r\n });\r\n }\r\n\r\n this.trigger('hide');\r\n } else {\r\n showUnknownError();\r\n }\r\n this.activity.stop();\r\n })\r\n .catch(() => {\r\n showUnknownError();\r\n });\r\n }\r\n\r\n cancel() {\r\n this.trigger('hide');\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport getParams from '@bingads-webui-campaign-legacy/bulk-edit/service/get-params';\r\nimport DataStore from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport SummaryDataContextManager from '@bingads-webui-static-legacy/summary/SummaryDataContextManager';\r\n\r\n// Keep it consistent with resourceMap in\r\n// private\\components\\packages\\campaign-cache-manager\\src\\context-manager-bridge.es\r\nconst EntityGridIdMap = {\r\n DsaTarget: 'DsaTargetGrid',\r\n NegativeAdGroupDsaTarget: 'NegativeAdGroupDsaTargetGrid',\r\n NegativeCampaignDsaTarget: 'NegativeCampaignDsaTargetGrid',\r\n};\r\n\r\nconst pollStatus = (taskId, successCb, failedCb) => {\r\n DataStore.BulkEditSession.find(taskId, {cacheResponse: false}).then((response) => {\r\n successCb(response);\r\n })\r\n .catch(failedCb);\r\n};\r\n\r\nconst processResponse = (completeCB, failedCB, progressCB, response) => {\r\n if (_.contains(['Completed', 'CompletedWithErrors'], response.Status)) {\r\n completeCB(response);\r\n } else if (_.contains(['Failed', 'Aborted', 'Expired'], response.Status)) {\r\n failedCB(response);\r\n } else { //task is inprogress or pending\r\n progressCB(response);\r\n setTimeout(_.partial(pollStatus, response.Id, _.partial(processResponse, completeCB, failedCB, progressCB), failedCB), 500);\r\n }\r\n return response;\r\n};\r\n\r\nconst bulkEdit = (options, preview = false) => {\r\n let params = options.params;\r\n\r\n let opt = _.defaults({}, options, {\r\n campaignId: null,\r\n adgroupId: null,\r\n completeCB: _.noop,\r\n failedCB: _.noop,\r\n progressCB: _.noop,\r\n });\r\n\r\n let process = preview ? _.identity : _.partial(processResponse, opt.completeCB, opt.failedCB, opt.progressCB);\r\n\r\n let urlParameters = {$expand: 'BulkEditResults'};\r\n\r\n if (_.isEmpty(params)) {\r\n params = getParams(opt.projection, opt.batchActions, opt.entity, opt.campaignId, opt.adgroupId, preview);\r\n }\r\n\r\n if (preview) {\r\n urlParameters.preview = true;\r\n }\r\n\r\n return DataStore.BulkEditSession.create(params, {\r\n urlParameters,\r\n cacheResponse: false,\r\n }).then((response) => {\r\n if (!preview) {\r\n const { Entity } = response;\r\n const gridId = EntityGridIdMap[Entity];\r\n\r\n if (gridId) {\r\n SummaryDataContextManager.updateContext([gridId]);\r\n }\r\n }\r\n\r\n return response;\r\n })\r\n .then(process)\r\n .catch(opt.failedCB);\r\n};\r\n\r\nexport function bulkEditChange(options) {\r\n return bulkEdit(options);\r\n}\r\n\r\nexport function bulkEditPreview(options) {\r\n return bulkEdit(options, true);\r\n}\r\n","import $ from 'jquery';\r\nimport _ from 'underscore';\r\nimport state from '@bingads-webui-component-legacy/state/index';\r\nimport { convertToOData } from '@bingads-webui/filter-entity';\r\n\r\nconst getDateRange = () => {\r\n try {\r\n let dateRange = state.get('$daterange');\r\n let startdate = (dateRange.start || dateRange.RangeStartDate).toISOString();\r\n let enddate = (dateRange.end || dateRange.RangeEndDate).toISOString();\r\n\r\n return `startdate=${startdate}&enddate=${enddate}`;\r\n } catch (e) {\r\n return '';\r\n }\r\n};\r\n\r\nconst getSelectedIds = (projection) => {\r\n if (!projection) {\r\n return [];\r\n }\r\n\r\n if (!_.isUndefined(projection.selectedIds)) {\r\n return projection.selectedIds;\r\n }\r\n if (_.isFunction(projection.get)) {\r\n //TODO: process select all page\r\n return projection.get('row.check.list');\r\n }\r\n\r\n return [];\r\n};\r\n\r\nconst getQueryStringRaw = (projection) => {\r\n let dateRange = getDateRange();\r\n let query = '';\r\n let selectedIds = getSelectedIds(projection);\r\n\r\n if (_.isEmpty(projection)) {\r\n return dateRange;\r\n }\r\n\r\n if (projection.isSelectAll || _.size(selectedIds) === 0) { //check selectedIds size only for compatible original logic\r\n let projectionFilters = '';\r\n\r\n if (!_.isUndefined(projection.filters)) {\r\n projectionFilters = projection.filters;\r\n } else if (_.isFunction(projection.get)) {\r\n projectionFilters = projection.get('filter');\r\n }\r\n\r\n let filters = convertToOData(projectionFilters, _.defaults({}, projection.filterOptions));\r\n\r\n query = `$filter=${encodeURIComponent(filters)}`;\r\n } else if (_.size(selectedIds) > 0) { //select some ids will distinguish it when new grid support select cross page\r\n let idFilters = _.map(selectedIds, (id) => {\r\n return `Id eq ${id}`;\r\n }).join(' or ');\r\n\r\n query = $.param({$filter: `(${idFilters})`});\r\n }\r\n\r\n return `${query}&${dateRange}`;\r\n};\r\n\r\nconst getQueryString = (projection) => {\r\n const queryString = getQueryStringRaw(projection);\r\n\r\n if (_.isFunction(projection.queryStringProcess)) {\r\n return projection.queryStringProcess(queryString);\r\n }\r\n return queryString;\r\n};\r\n\r\nconst getSelection = (projection, campaignId = null, adgroupId = null) => {\r\n return {\r\n QueryString: getQueryString(projection),\r\n CampaignId: campaignId,\r\n AdGroupId: adgroupId,\r\n };\r\n};\r\n\r\nconst getDescription = (projection) => {\r\n let description = {\r\n idsCount: _.size(getSelectedIds(projection)),\r\n };\r\n\r\n return JSON.stringify(description);\r\n};\r\n\r\nexport default (projection, batchActions, entity, campaignId, adgroupId, preview) => {\r\n const params = {\r\n BatchAction: batchActions,\r\n Description: getDescription(projection),\r\n Entity: entity,\r\n Selection: getSelection(projection, campaignId, adgroupId),\r\n };\r\n\r\n if (preview) {\r\n return _.extend({\r\n PreviewEntityIds: getSelectedIds(projection),\r\n }, params);\r\n }\r\n return params;\r\n};\r\n","/* eslint-disable */\r\nimport backbone from 'backbone';\r\nimport _ from 'underscore';\r\nimport odata from '@bingads-webui-static-legacy/communication/channel/odata';\r\nvar Job = backbone.Model.extend({\r\n defaults: {\r\n Id: null,\r\n Selection: '',\r\n TotalRowCount: 0,\r\n SuccessRowCount: 0,\r\n ErrorRowCount: 0,\r\n Status: '',\r\n CreationTime: '',\r\n ExecutionStartTime: '',\r\n CompletionTime: '',\r\n CreatedBy: '',\r\n BulkEditResults: [],\r\n selectedEntityCount: 0,\r\n PreviewEntityIds: [],\r\n PreviewCompositeIds: []\r\n },\r\n updateSummaryDataContext: function (metadata, action, url) {\r\n var entityType = this.get('Entity');\r\n var isPreviewMode = url.indexOf('preview') > 0;\r\n if (metadata && entityType) {\r\n switch (entityType) {\r\n case 'Campaign':\r\n metadata.gridIds = ['CampaignsGrid'];\r\n if (!isPreviewMode) {\r\n metadata.dependentIds = ['CampaignsGrid', 'AdGroupGrid', 'PagedAdGroupGrid', 'AdGrid', 'KeywordGrid', 'AudiencesAssociationGrid', 'SitePlacementGrid', 'CampaignsSettingsGrid', 'AccountAdExtensionsGrid', 'CampaignAdExtensionsGrid', 'AdGroupAdExtensionsGrid'];\r\n }\r\n break;\r\n case 'AdGroup':\r\n metadata.gridIds = ['AdGroupGrid'];\r\n if (!isPreviewMode) {\r\n metadata.dependentIds = ['CampaignsGrid', 'AdGroupGrid', 'PagedAdGroupGrid', 'AdGrid', 'KeywordGrid', 'AudiencesAssociationGrid', 'SitePlacementGrid', 'AccountAdExtensionsGrid', 'CampaignAdExtensionsGrid', 'AdGroupAdExtensionsGrid'];\r\n }\r\n break;\r\n case 'Keyword':\r\n metadata.gridIds = ['KeywordGrid'];\r\n if (!isPreviewMode) {\r\n metadata.dependentIds = ['KeywordGrid'];\r\n }\r\n break;\r\n case 'Ad':\r\n metadata.gridIds = ['AdGrid'];\r\n if (!isPreviewMode) {\r\n metadata.dependentIds = ['AdGrid'];\r\n }\r\n break;\r\n case 'AudienceAssociation':\r\n case 'AdGroupAudienceAssociation':\r\n metadata.gridIds = ['AudiencesAssociationGrid'];\r\n if (!isPreviewMode) {\r\n metadata.dependentIds = ['AudiencesAssociationGrid'];\r\n }\r\n break;\r\n case 'CampaignCriterion':\r\n metadata.gridIds = ['CampaignSettingsGrid'];\r\n if (!isPreviewMode) {\r\n metadata.dependentIds = ['CampaignSettingsGrid'];\r\n }\r\n break;\r\n case 'AdGroupCriterion':\r\n metadata.gridIds = ['AdGroupSettingsGrid'];\r\n if (!isPreviewMode) {\r\n metadata.dependentIds = ['AdGroupSettingsGrid'];\r\n }\r\n break;\r\n case 'PerformanceTarget':\r\n metadata.gridIds = ['PerformanceTargetsSummaryGrid'];\r\n if (!isPreviewMode) {\r\n metadata.dependentIds = ['PerformanceTargetsSummaryGrid'];\r\n }\r\n break;\r\n }\r\n }\r\n return metadata;\r\n },\r\n parse: function (response) {\r\n if (response) {\r\n return {\r\n Id: response.Id.length > 0 ? response.Id : null,\r\n Selection: response.Selection,\r\n Description: response.Description,\r\n TotalRowCount: response.TotalRowCount,\r\n SuccessRowCount: response.SuccessRowCount,\r\n ErrorRowCount: response.ErrorRowCount,\r\n Status: response.Status,\r\n CreationTime: response.CreationTime,\r\n ExecutionStartTime: response.ExecutionStartTime,\r\n CompletionTime: response.CompletionTime,\r\n CreatedBy: response.CreatedBy,\r\n BulkEditResults: response.BulkEditResults,\r\n UserErrors: response.UserErrors\r\n };\r\n }\r\n return undefined;\r\n },\r\n sync: function (method, model, options) {\r\n var url = _.template(this.url)({\r\n jobId: this.get('Id')\r\n });\r\n if (method === 'create') {\r\n options.type = 'Post';\r\n var data = {\r\n 'Entity': model.get('Entity'),\r\n 'BatchAction': model.get('BatchAction'),\r\n 'Selection': model.get('Selection'),\r\n 'Description': model.get('Description'),\r\n 'PreviewEntityIds': model.get('PreviewEntityIds'),\r\n 'PreviewCompositeIds': model.get('PreviewCompositeIds')\r\n };\r\n if (model.get('RequestProperties')) {\r\n data['RequestProperties'] = model.get('RequestProperties');\r\n }\r\n if (model.get('CurrentCustomerId')) {\r\n data['CurrentCustomerId'] = model.get('CurrentCustomerId');\r\n }\r\n options.data = JSON.stringify(data);\r\n if (model.get('currentCustomerIdFirst')) {\r\n options.currentCustomerIdFirst = true;\r\n }\r\n } else {\r\n options.type = 'Get';\r\n }\r\n return odata.jq_ajax_adapter.call(this, url, options);\r\n },\r\n idAttribute: 'Id'\r\n});\r\nexport default Job;\r\n\r\n","/* eslint-disable */\r\nimport _ from 'underscore';\r\nfunction capValue(value) {\r\n var maxLength = 100;\r\n if (!_.isString(value) || value.length < maxLength) {\r\n return value;\r\n }\r\n return value.substring(0, maxLength);\r\n}\r\nfunction toDescriptionWithDataFilter(filter) {\r\n var expressions = _.without(filter.FilterExpressions, null, undefined);\r\n var idStringExpressions = _.filter(expressions, function (expression) {\r\n return expression.SelectedColumn == 'IdString';\r\n });\r\n var otherExpressions = _.reject(expressions, function (expression) {\r\n return expression.SelectedColumn == 'IdString';\r\n });\r\n var compactOthers = _.map(otherExpressions, function (expr) {\r\n return [expr.SelectedColumn, expr.SelectedOperator, _.map(expr.Values, capValue)];\r\n });\r\n if (idStringExpressions.length != 0) {\r\n var compactIds = [{\r\n idsCount: idStringExpressions[0].Values.length\r\n }];\r\n return JSON.stringify(_.union(compactIds, compactOthers));\r\n } else {\r\n return JSON.stringify(compactOthers);\r\n }\r\n}\r\nfunction toDescription(filter) {\r\n if (!filter || !filter.FilterExpressions) {\r\n return null;\r\n }\r\n var expressions = _.without(filter.FilterExpressions, null, undefined);\r\n if (!_.isArray(expressions) || expressions.length == 0) {\r\n return null;\r\n }\r\n var dataFilterExpressions = _.filter(expressions, function (expression) {\r\n return expression.SelectedColumn === 'Criterion' || expression.SelectedColumn === 'LevelOfDetails';\r\n });\r\n if (dataFilterExpressions.length > 0) {\r\n return toDescriptionWithDataFilter(filter);\r\n } else if (filter.idBased) {\r\n return JSON.stringify({\r\n idsCount: expressions[0].Values.length\r\n });\r\n }\r\n var compact = _.map(expressions, function (expr) {\r\n return [expr.SelectedColumn, expr.SelectedOperator, _.map(expr.Values, capValue)];\r\n });\r\n return JSON.stringify(compact);\r\n}\r\nfunction fromDescription(description) {\r\n var compactFilter, filter;\r\n if (!description) {\r\n return null;\r\n }\r\n var returnDescription = {};\r\n compactFilter = JSON.parse(description);\r\n if (!!compactFilter.idsCount) {\r\n returnDescription.idBased = true;\r\n returnDescription.idsCount = compactFilter.idsCount;\r\n return returnDescription;\r\n } else if (compactFilter && compactFilter.length > 0 && !!compactFilter[0].idsCount) {\r\n returnDescription.idBased = true;\r\n returnDescription.idsCount = compactFilter[0].idsCount;\r\n compactFilter = compactFilter.slice(1);\r\n }\r\n compactFilter = compactFilter && compactFilter.Filter ? compactFilter.Filter : compactFilter;\r\n filter = _.map(compactFilter, _.bind(_.object, _, ['SelectedColumn', 'SelectedOperator', 'Values']));\r\n returnDescription.FilterExpressions = filter;\r\n return returnDescription;\r\n}\r\nfunction toRuleDescription(filter, acrossAllPages, idsCount) {\r\n var expressions;\r\n if (!filter || !filter.FilterExpressions || !_.isArray(filter.FilterExpressions) || filter.FilterExpressions.length == 0) {\r\n return null;\r\n }\r\n expressions = filter.FilterExpressions;\r\n var result = {};\r\n if (filter.idBased) {\r\n result.idsCount = acrossAllPages ? idsCount : expressions[0].Values.length;\r\n }\r\n var expressionsToMap = acrossAllPages ? _.without(expressions, expressions[0]) : expressions;\r\n var compact = _.map(expressionsToMap, function (expr) {\r\n return _.isEmpty(expr.SelectedNames) ? [expr.SelectedColumn, expr.SelectedOperator, _.map(expr.Values, capValue)] : [expr.SelectedColumn, expr.SelectedOperator, _.map(expr.Values, capValue), _.map(expr.SelectedNames, capValue)];\r\n });\r\n result.Filter = compact;\r\n return JSON.stringify(result);\r\n}\r\nfunction fromRuleDescription(description) {\r\n var compact, compactFilter, filter, result = {};\r\n if (!description) {\r\n return null;\r\n }\r\n compact = JSON.parse(description);\r\n if (!!compact.idsCount) {\r\n result = {\r\n idBased: true,\r\n idsCount: compact.idsCount\r\n };\r\n }\r\n compactFilter = compact.Filter ? compact.Filter : compact;\r\n filter = _.map(compactFilter, function (element) {\r\n var mapped = {\r\n 'SelectedColumn': element[0],\r\n 'SelectedOperator': element[1],\r\n 'Values': element[2]\r\n };\r\n if (element[0] === 'Labels' && element.length > 3) {\r\n mapped.SelectedNames = element[3];\r\n }\r\n return mapped;\r\n });\r\n result.FilterExpressions = filter;\r\n return result;\r\n}\r\nfunction toQueryString(filterExpressions) {\r\n var expressionStrings = _.map(filterExpressions, function (expression, index) {\r\n return _.map(expression, function (value, key) {\r\n var template = 'filter[' + index + '].' + key + '=';\r\n return _.isArray(value) ? _.map(value, function (val) {\r\n return template + val;\r\n }).join('&') : template + value;\r\n }).join('&');\r\n });\r\n return expressionStrings.join('&');\r\n}\r\nexport default {\r\n toDescription: toDescription,\r\n fromDescription: fromDescription,\r\n toQueryString: toQueryString,\r\n toRuleDescription: toRuleDescription,\r\n fromRuleDescription: fromRuleDescription\r\n};\r\n\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport Backbone from 'backbone';\r\nimport { Dialog } from '@bingads-webui/dialog';\r\nimport { ARWUnthemedBulkErrorView } from '@bingads-webui-campaign-react/account-reparenting-errors';\r\nimport messageTemplate from './template/bulk-transfer-lightbox-message.pug';\r\n\r\nconst i18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/feature/bulk-transfer-accounts');\r\n\r\nexport class MessageView extends Backbone.View {\r\n initialize({message}) {\r\n this.message = message;\r\n }\r\n\r\n render() {\r\n this.$el.html(messageTemplate({message: this.message}));\r\n return this;\r\n }\r\n}\r\n\r\nexport default class View extends Backbone.View {\r\n initialize({\r\n buttonEvent,\r\n accountsCount,\r\n errorDetails,\r\n isBlocking = false,\r\n }) {\r\n this.errorDetails = errorDetails;\r\n if (accountsCount > 20) {\r\n // block single reparenting jobs with more than 20 accounts due to possible backend processing freezing\r\n this.errorDetails = { ReparentingNotAllowedForAccountsMaxLimit: [] };\r\n }\r\n this.buttonEvent = buttonEvent;\r\n this.accountsCount = accountsCount;\r\n let buttons = [{\r\n text: i18n.getString('BulkAccountTransfer_Proceed'),\r\n name: 'primaryButton',\r\n class: 'btn btn-primary lightboxPrimary',\r\n disabled: accountsCount <= 0 || accountsCount > 20 || isBlocking,\r\n }, {\r\n text: i18n.getString('BulkAccountTransfer_Goback'),\r\n name: 'defaultButton',\r\n class: 'btn btn-default lightboxDefault',\r\n }];\r\n\r\n this.lightboxDiv = new Dialog({ className: 'bulk-transfer-dialog', showCloseButton: false });\r\n this.lightboxDiv.setContent(new MessageView({message: i18n.getString('BulkAccountTransfer_Body').replace(/\\{0\\}/g, this.accountsCount)}));\r\n this.lightboxDiv.setState({\r\n title: i18n.getString('BulkAccountTransfer_Title'),\r\n buttons,\r\n });\r\n this.lightboxDiv.on('clickedButton', (name) => {\r\n if (name === 'primaryButton') {\r\n this.buttonEvent();\r\n }\r\n this.lightboxDiv.remove();\r\n });\r\n document.body.appendChild(this.lightboxDiv.el);\r\n }\r\n\r\n render() {\r\n this.lightboxDiv.show();\r\n if (this.errorDetails) {\r\n ReactDOM.render(React.createElement(ARWUnthemedBulkErrorView, { i18n, errorDetails: this.errorDetails, classes: {} }), document.getElementById('transfer-errors'));\r\n }\r\n return this;\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport $ from 'jquery';\r\nimport BulkTransferLightbox from './bulk-transfer-lightbox';\r\nimport instrument from '@bingads-webui-static-legacy/instrumentation/index';\r\nimport instrumentConsts from '@bingads-webui-static-legacy/instrumentation/constants';\r\nimport { getCCUrl } from '@bingads-webui-component-legacy/bingads-grid/shared/clientcenter-url-helper';\r\n\r\nconst i18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/feature/bulk-transfer-accounts');\r\n\r\nconst transferAccountsUrlConfirmation = 'managers/bulktransferaccountsconfirmation';\r\nconst reparentingJobAddUrl = 'reparenting/jobadd';\r\n\r\nconst reparentingJobAddHandler = ({ customerId, userId, accountIds, successCallback }) => {\r\n $.advertiser.ajaxPost({\r\n url: getCCUrl(reparentingJobAddUrl, { cid: customerId, uid: userId }),\r\n xhrFields: {\r\n withCredentials: true,\r\n },\r\n data: { accountIds },\r\n traditional: true,\r\n onSuccess: (data) => successCallback({ reparentingId: data.id }),\r\n });\r\n};\r\n\r\nexport default function bulkTransferAccounts({\r\n selectedAccounts,\r\n i18n: newI18n,\r\n customerId,\r\n userId,\r\n onSuccessCallBack,\r\n}) {\r\n // select only Advertiser account entities\r\n let accounts = _.filter(selectedAccounts, (account) => account.accountType === 'AdAccount');\r\n\r\n accounts = _.map(selectedAccounts, (account) => {\r\n return {\r\n id: account.Id,\r\n };\r\n });\r\n const bulkTransferModel = { accounts };\r\n const transferConfirmationUrl = getCCUrl(transferAccountsUrlConfirmation);\r\n\r\n $.advertiser.ajaxPost({\r\n url: transferConfirmationUrl,\r\n xhrFields: {\r\n withCredentials: true,\r\n },\r\n data: {cid: customerId, uid: userId, transferacc: JSON.stringify(bulkTransferModel)},\r\n onSuccess: (model) => {\r\n if (model && model.accounts) {\r\n const accountIds = _.map(model.accounts, (acc) => acc.id);\r\n const dialogView = new BulkTransferLightbox({\r\n newI18n,\r\n accountsCount: accountIds.length,\r\n errorDetails: model.errorDetails,\r\n isBlocking: model.isBlocking,\r\n buttonEvent: () => {\r\n const successCallback = ({ reparentingId }) => {\r\n if (_.isFunction(onSuccessCallBack) && _.isNumber(reparentingId)) {\r\n onSuccessCallBack({\r\n accounts: model.accounts,\r\n rpid: reparentingId,\r\n });\r\n }\r\n };\r\n\r\n reparentingJobAddHandler({ customerId, userId, accountIds, successCallback });\r\n },\r\n });\r\n\r\n dialogView.render();\r\n }\r\n },\r\n onError: (e) => {\r\n $.advertiser.appendErrorSummary(i18n.getString('GenericErrorMessage_Short'));\r\n instrument.logMessage(instrumentConsts.LOGCATEGORY.ERROR, instrumentConsts.LOGLEVEL.INFO, `bulktransferaccounts/ajaxPost failed with ${JSON.stringify(e)}`, JSON.stringify(bulkTransferModel));\r\n },\r\n hideLoadingPanelOnSuccess: true,\r\n });\r\n}\r\n","import Backbone from 'backbone';\r\nimport { Dialog } from '@bingads-webui/dialog';\r\nimport messageTemplate from './template/bulk-unlink-lightbox-message.pug';\r\n\r\nconst i18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/feature/bulk-unlink-accounts');\r\n\r\nexport class MessageView extends Backbone.View {\r\n initialize({message}) {\r\n this.message = message;\r\n }\r\n\r\n render() {\r\n this.$el.html(messageTemplate({message: this.message}));\r\n return this;\r\n }\r\n}\r\n\r\nexport default class View extends Backbone.View {\r\n initialize({\r\n buttonEvent,\r\n accountsCount,\r\n }) {\r\n this.buttonEvent = buttonEvent;\r\n this.accountsCount = accountsCount;\r\n let buttons = [{\r\n text: i18n.getString('Hierarchy_BulkUnlink_Proceed'),\r\n name: 'primaryButton',\r\n class: 'btn btn-primary lightboxPrimary',\r\n disabled: accountsCount <= 0,\r\n }, {\r\n text: i18n.getString('Hierarchy_BulkUnlink_Goback'),\r\n name: 'defaultButton',\r\n class: 'btn btn-default lightboxDefault',\r\n }];\r\n\r\n this.lightboxDiv = new Dialog({ className: 'bulk-unlink-dialog', showCloseButton: false });\r\n this.lightboxDiv.setContent(new MessageView({message: i18n.getString('Hierarchy_BulkUnlink_Body').replace(/\\{0\\}/g, this.accountsCount)}));\r\n this.lightboxDiv.setState({\r\n title: i18n.getString('Hierarchy_BulkUnlink_Title'),\r\n buttons,\r\n });\r\n this.lightboxDiv.on('clickedButton', (name) => {\r\n if (name === 'primaryButton') {\r\n this.buttonEvent();\r\n }\r\n this.lightboxDiv.remove();\r\n });\r\n document.body.appendChild(this.lightboxDiv.el);\r\n }\r\n\r\n render() {\r\n this.lightboxDiv.show();\r\n return this;\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport $ from 'jquery';\r\nimport { Constants } from '@bingads-webui-clientcenter/entity-utils';\r\nimport BulkUnlinkLightbox from './bulk-unlink-lightbox';\r\nimport instrument from '@bingads-webui-static-legacy/instrumentation/index';\r\nimport instrumentConsts from '@bingads-webui-static-legacy/instrumentation/constants';\r\nimport { getCCUrl } from '@bingads-webui-component-legacy/bingads-grid/shared/clientcenter-url-helper';\r\n\r\nconst i18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/feature/bulk-unlink-accounts');\r\n\r\nconst unlinkaccountsUrl = 'managers/bulkunlinkaccounts';\r\nconst unlinkaccountsUrlConfirmation = 'managers/bulkunlinkaccountsconfirmation';\r\nconst { HierarchyAccountTypeValue } = Constants;\r\n\r\nexport default function bulkUnlinkAccounts({selectedAccounts, customerId, userId, onConfirm}) {\r\n const bulkUnlinkModel = {\r\n accounts: _.map(selectedAccounts, (account) => {\r\n return {\r\n number: account.AccountNumber,\r\n name: account.Name,\r\n type: HierarchyAccountTypeValue[account.AccountType] || HierarchyAccountTypeValue.Unknown,\r\n id: account.Id,\r\n managers: _.map(account.ManagerAccounts, (manager) => {\r\n return {\r\n name: manager.Name,\r\n number: manager.CustomerNumber,\r\n id: manager.Id,\r\n };\r\n }),\r\n };\r\n }),\r\n };\r\n const unlinkConfirmationUrl = getCCUrl(unlinkaccountsUrlConfirmation);\r\n\r\n $.advertiser.ajaxPost({\r\n url: unlinkConfirmationUrl,\r\n xhrFields: {\r\n withCredentials: true,\r\n },\r\n data: {cid: customerId, uid: userId, unlinkacc: JSON.stringify(bulkUnlinkModel)},\r\n onSuccess: (model) => {\r\n if (model && model.accounts) {\r\n const dialogView = new BulkUnlinkLightbox({\r\n accountsCount: model.accounts.length,\r\n buttonEvent: () => {\r\n const revisedModel = {accounts: model.accounts, returnUrl: window.location.href };\r\n const redirectUri = getCCUrl(unlinkaccountsUrl, { cid: customerId, uid: userId });\r\n\r\n onConfirm(revisedModel, redirectUri);\r\n },\r\n });\r\n\r\n dialogView.render();\r\n } else {\r\n $.advertiser.appendErrorSummary(i18n.getString('GenericErrorMessage_Short'));\r\n instrument.logMessage(instrumentConsts.LOGCATEGORY.ERROR, instrumentConsts.LOGLEVEL.INFO, 'bulkunlinkaccounts empty model', JSON.stringify(bulkUnlinkModel));\r\n }\r\n },\r\n onError: (e) => {\r\n $.advertiser.appendErrorSummary(i18n.getString('GenericErrorMessage_Short'));\r\n instrument.logMessage(instrumentConsts.LOGCATEGORY.ERROR, instrumentConsts.LOGLEVEL.INFO, `bulkunlinkaccounts/ajaxPost failed with ${JSON.stringify(e)}`, JSON.stringify(bulkUnlinkModel));\r\n },\r\n hideLoadingPanelOnSuccess: true,\r\n });\r\n}\r\n","import _ from 'underscore';\r\nimport BaseModel from '@bingads-webui-campaign-legacy/bulk-operation/util/bulk-edit-job';\r\n\r\nexport default class AdScheduleTimeZoneModel extends BaseModel {\r\n // entity is Campaign or AdGroup\r\n initialize(entity) {\r\n this.defaults = _.extend({}, BaseModel.prototype.defaults, {\r\n Entity: entity,\r\n BatchAction: {\r\n Actions: [{\r\n '@odata.type': '#Model.TextAction',\r\n 'Property': 'AdScheduleUseSearcherTimeZone',\r\n 'ActionType': 'Set',\r\n 'Value': false,\r\n 'SearchString': '',\r\n 'Options': 'None',\r\n }],\r\n },\r\n });\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport BaseModel from '@bingads-webui-campaign-legacy/bulk-operation/util/bulk-edit-job';\r\n\r\nexport default class ChangeLanguageModel extends BaseModel {\r\n\r\n initialize() {\r\n this.defaults = _.extend({}, BaseModel.prototype.defaults, {\r\n Entity: 'Campaign',\r\n BatchAction: {\r\n Actions: [{\r\n '@odata.type': '#Model.TextAction',\r\n 'Property': 'Languages',\r\n 'ActionType': 'Set',\r\n 'Value': '',\r\n 'SearchString': '',\r\n 'Options': 'None',\r\n }],\r\n },\r\n });\r\n }\r\n}\r\n","import ko from 'knockout';\r\nimport BaseViewModel from '@bingads-webui-static-legacy/bulk-edit/viewmodel/bulkEditJob';\r\nimport timeZoneMapper from '@bingads-webui-component-legacy/timezonemapper/index';\r\n\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/feature/bulk-campaign-exclusions');\r\n\r\nexport default class ViewModel {\r\n constructor() {\r\n BaseViewModel.call(this);\r\n\r\n this.adScheduleUseSearcherTimeZone = ko.observable(false);\r\n this.adScheduleUseSearcherTimeZoneEdit = ko.computed({\r\n read() {\r\n return this.adScheduleUseSearcherTimeZone().toString();\r\n },\r\n write(value) {\r\n this.adScheduleUseSearcherTimeZone(value === 'true');\r\n },\r\n }, this);\r\n\r\n this.timeZoneText = timeZoneMapper.getAccountTimeZoneText();\r\n this.i18n = i18n;\r\n }\r\n}\r\n","import filterHelper from '@bingads-webui-static-legacy/bulk-edit/view/filterHelper';\r\nimport BaseView from '@bingads-webui-static-legacy/bulk-edit/view/bulkEditJob';\r\nimport template from '@bingads-webui-campaign-legacy/campaign-bulk-edit/template/bulkEditAdScheduleTimeZone.pug';\r\nimport ViewModel from '@bingads-webui-campaign-legacy/campaign-bulk-edit/viewmodel/bulkEditAdScheduleTimeZone';\r\n\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!legacy/global');\r\n\r\nexport default class View extends BaseView {\r\n initialize(options) {\r\n super.initialize(options);\r\n this.template = template;\r\n this.options = options;\r\n this.onOperationSuccess = options.onOperationSuccess;\r\n // eslint-disable-next-line camelcase\r\n this.ko_model = new ViewModel(this.model);\r\n }\r\n\r\n attributes() {\r\n return {\r\n 'class': 'schedule-timezone-setting',\r\n };\r\n }\r\n\r\n render() {\r\n super.render();\r\n\r\n return this;\r\n }\r\n\r\n setAction() {\r\n const action = {\r\n Actions: [{\r\n '@odata.type': '#Model.TextAction',\r\n Property: 'AdScheduleUseSearcherTimeZone',\r\n ActionType: 'Set',\r\n Value: this.ko_model.adScheduleUseSearcherTimeZone().toString(),\r\n SearchString: '',\r\n Options: 'None',\r\n }],\r\n };\r\n\r\n this.model.set('BatchAction', action);\r\n this.model.set('Entity', this.model.attributes.entity);\r\n }\r\n\r\n getIdFilter() {\r\n return filterHelper.getIdFilter(this.grid, this.model.attributes.entity);\r\n }\r\n\r\n getProgressText() {\r\n return i18n.getString('BulkEdit_Campaigns_ProgressText');\r\n }\r\n}\r\n","import ko from 'knockout';\r\nimport BaseViewModel from '@bingads-webui-static-legacy/bulk-edit/viewmodel/bulkEditJob';\r\nimport { get as getDefaultLanguage } from '@bingads-webui-component-legacy/language-selector/util/defaultLanguage';\r\n\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!legacy/global');\r\n\r\nexport default class ViewModel {\r\n constructor(model) {\r\n BaseViewModel.call(this);\r\n this.showPreviewButton(false);\r\n this.showPanel = ko.observable(true);\r\n this.selectedEntityCount(model.get('selectedEntityCount'));\r\n this.selectedLanguages = ko.observable([getDefaultLanguage()]);\r\n this.titleText = ko.computed(() => {\r\n const entityCount = this.selectedEntityCount();\r\n\r\n if (entityCount > 1) {\r\n return i18n.getString('EditCampaignsLanguageTitle', entityCount );\r\n }\r\n\r\n return i18n.getString('EditCampaignLanguageTitle', entityCount );\r\n }, this);\r\n\r\n this.errorRole = ko.computed(() => {\r\n const error = this.errorMessage();\r\n\r\n return error === '' ? 'none' : 'alert';\r\n }, this);\r\n\r\n this.validate = () => {\r\n if (this.selectedLanguages().length < 1) {\r\n this.errorMessage(i18n.getString('Campaign_Validation_LanguageSelectionRequired'));\r\n return false;\r\n }\r\n this.errorMessage('');\r\n return true;\r\n };\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { showSuccess as success } from '@bingads-webui-component-legacy/toast/index';\r\nimport { MultiLanguageSelector } from '@bingads-webui-campaign/multi-language-selector';\r\n\r\nimport globalConfig from '@bingads-webui-component-legacy/config/index';\r\nimport filterHelper from '@bingads-webui-static-legacy/bulk-edit/view/filterHelper';\r\nimport BaseView from '@bingads-webui-static-legacy/bulk-edit/view/bulkEditJob';\r\nimport template from '@bingads-webui-campaign-legacy/campaign-bulk-edit/template/bulkEditLanguage.pug';\r\nimport ViewModel from '@bingads-webui-campaign-legacy/campaign-bulk-edit/viewmodel/bulkEditLanguage';\r\n\r\nconst s$AdGroup = window.globalLegacySchema.get('AdGroup');\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!legacy/global');\r\n\r\nconst {\r\n IsSimplifiedChineseLanguageEnabledInMultipleLanguage,\r\n IsAdsGlobalizationPhase1Enabled,\r\n IsAdsGlobalizationPhase2Enabled,\r\n IsAdsGlobalizationPhase6Enabled,\r\n IsAdsGlobalizationPhase2JapanEnabled,\r\n IsDomesticSimplifiedChineseEnabled,\r\n IsAdsGlobalizationPhase9Enabled,\r\n IsAdsGlobalizationPhase9VIEnabled,\r\n} = globalConfig.get('Permissions');\r\n\r\nexport default class View extends BaseView {\r\n initialize(options) {\r\n super.initialize(options);\r\n this.template = template;\r\n // eslint-disable-next-line camelcase\r\n this.ko_model = new ViewModel(this.model);\r\n this.languageSelector = null;\r\n this.onOperationSuccess = () => {\r\n if (this.selectionAcrossPage()) {\r\n success(i18n.getString('campaign_language_association_success'));\r\n } else {\r\n success(i18n.getString('campaign_language_association_success_for_selected_campaigns'));\r\n }\r\n this.deselectAll();\r\n };\r\n }\r\n\r\n render(options) {\r\n super.render(options);\r\n let languages = _.without(s$AdGroup.properties.Language.enum, 'None');\r\n\r\n if (!IsAdsGlobalizationPhase1Enabled) {\r\n languages = _.without(languages, 'Greek', 'Polish', 'Bulgarian', 'Croatian', 'Czech', 'Estonian', 'Hungarian', 'Latvian', 'Lithuanian', 'Maltese', 'Romanian', 'Slovak', 'Slovenian');\r\n }\r\n\r\n if (!IsAdsGlobalizationPhase2Enabled) {\r\n languages = _.without(languages, 'Turkish', 'Serbian', 'Bosnian', 'Albanian', 'Macedonian', 'Icelandic');\r\n }\r\n\r\n if (!IsAdsGlobalizationPhase6Enabled) {\r\n languages = _.without(languages, 'Hebrew', 'Arabic', 'Russian');\r\n }\r\n\r\n if (!IsAdsGlobalizationPhase2JapanEnabled) {\r\n languages = _.without(languages, 'Japanese');\r\n }\r\n\r\n if (!IsAdsGlobalizationPhase9Enabled) {\r\n languages = _.without(languages, 'Hindi', 'Malay', 'Thai', 'Indonesian', 'Tagalog');\r\n }\r\n\r\n if (!IsAdsGlobalizationPhase9VIEnabled) {\r\n languages = _.without(languages, 'Vietnamese');\r\n }\r\n\r\n const languageOptions = {\r\n languages: _.sortBy(languages), // sort languages\r\n inEditMode: true,\r\n selectedLanguages: this.ko_model.selectedLanguages(),\r\n i18n,\r\n };\r\n\r\n if (!IsSimplifiedChineseLanguageEnabledInMultipleLanguage) {\r\n languageOptions.languages = _.without(languageOptions.languages, 'SimplifiedChinese');\r\n }\r\n\r\n if (IsDomesticSimplifiedChineseEnabled) {\r\n languageOptions.languages = ['SimplifiedChinese'];\r\n }\r\n\r\n this.languageSelector = new MultiLanguageSelector(languageOptions);\r\n\r\n this.$('.language-selector-container').html(this.languageSelector.render().el);\r\n\r\n this.languageSelector.on('selectedLanguages:changed', () => {\r\n this.ko_model.selectedLanguages(this.languageSelector.getSelectedLanguages());\r\n });\r\n\r\n return this;\r\n }\r\n\r\n setAction() {\r\n const action = {\r\n Actions: [{\r\n '@odata.type': '#Model.TextAction',\r\n Property: 'Languages',\r\n ActionType: 'Set',\r\n Value: JSON.stringify(this.ko_model.selectedLanguages()),\r\n SearchString: '',\r\n Options: 'None',\r\n }],\r\n };\r\n\r\n this.model.set('BatchAction', action);\r\n this.model.set('Entity', 'Campaign');\r\n }\r\n\r\n selectionAcrossPage() {\r\n const { grid } = this.options;\r\n const { pgridPlugins } = grid;\r\n\r\n return pgridPlugins &&\r\n pgridPlugins.crossPageSelectAll &&\r\n pgridPlugins.crossPageSelectAll.isAllSelected;\r\n }\r\n\r\n deselectAll() {\r\n if (this.selectionAcrossPage()) {\r\n this.options.grid.pgridPlugins.crossPageSelectAll.deselectAll();\r\n } else {\r\n this.options.grid.gridView.deselectAll();\r\n }\r\n }\r\n\r\n getIdFilter() {\r\n return filterHelper.getIdFilter(this.grid, 'Campaign');\r\n }\r\n\r\n getProgressText() {\r\n return i18n.getString('BulkEdit_Campaigns_ProgressText');\r\n }\r\n\r\n formatPreviewOrError(rows) {\r\n // returned values are in this format \"[\\\"English\\\",\\\"French\\\"]\"\r\n // update it to English, French, with localization\r\n const getLanguageString = (returnedValue) => {\r\n if (returnedValue) {\r\n const languages = returnedValue.replace(/\\[|\\]|\"/g, '').split(',');\r\n\r\n return _.map(languages, (lang) => {\r\n return i18n.getString(`Language_${lang}`);\r\n }).join(', ');\r\n }\r\n return returnedValue;\r\n };\r\n\r\n if (rows) {\r\n _.each(rows, (value) => {\r\n value.Entity = _.find(value.EntityKey, (item) => {\r\n return item.Key === 'CampaignName';\r\n });\r\n\r\n value.data = [];\r\n value.data.push({value: value.Entity && value.Entity.Value ? value.Entity.Value : '', isHtml: false});\r\n\r\n if (value.Changes && value.Changes.length) {\r\n //for changeBid we can only have one element in value.Changes array\r\n value.data.push({value: getLanguageString(value.Changes[0].OriginalValue), isHtml: false});\r\n value.data.push({value: getLanguageString(value.Changes[0].NewValue), isHtml: false});\r\n } else {\r\n value.data.push({value: '', isHtml: false});\r\n value.data.push({value: '', isHtml: false});\r\n }\r\n });\r\n }\r\n return rows;\r\n }\r\n\r\n formatErrors(errors) {\r\n return this.formatPreviewOrError(errors);\r\n }\r\n\r\n formatPreviewResults(results) {\r\n return this.formatBid(results);\r\n }\r\n}\r\n","/* eslint-disable */\r\nimport _ from 'underscore';\r\nimport Backbone from 'backbone';\r\nimport $ from 'jquery';\r\nimport summaryDataContextManager from '@bingads-webui-static-legacy/summary/SummaryDataContextManager';\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\nimport pageContext from '@bingads-webui-static-legacy/page-context';\r\nimport constants from '@bingads-webui-static-legacy/constants';\r\nimport StepsWizardView from '@bingads-webui-component-legacy/steps-wizard/view/index';\r\nimport ModalManager from '@bingads-webui-component-legacy/dialog/modalManager';\r\nimport localStorage from '@bingads-webui-component-legacy/storage/localStorage';\r\nimport * as _preferencesService from '@bingads-webui-component-legacy/preference/service/index';\r\nimport CampaignSettingsView from '@bingads-webui-campaign-legacy/crud-campaign/view/create';\r\nimport AdGroupUpdateView from '@bingads-webui-campaign-legacy/crud-adgroup/view/update';\r\nimport popup from '@bingads-webui-component-legacy/dialog/popup';\r\nimport * as instrumentationSvc from '@bingads-webui-campaign-legacy/instrumentation/index';\r\nimport * as keywordAdGroupUpdateDecorator from '@bingads-webui-campaign-legacy/crud-adgroup/view/update-keyword-adgroup-decorator';\r\nimport * as keywordAdGroupInstru from '@bingads-webui-campaign-legacy/crud-adgroup/share/instrumentKeywordAdGroup';\r\nimport * as SuccessDialog from '@bingads-webui-campaign-legacy/campaign-create-advanced/view/success-dialog';\r\nvar i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/campaign-creation-advanced');\r\nvar i18nGlobal = window.globalLegacyI18n.get('component/i18n/loader!legacy/global');\r\nvar preferencesService = _preferencesService.default || _preferencesService;\r\nvar modalManager = new ModalManager(i18n.get('Browser_Reload_AlertMessage'));\r\nvar campaign2ObjectiveMapping = {\r\n 'search': ['WebsiteVisits', 'LocationVisits', 'WebsiteConversions', 'PhoneCalls', 'AppInstalls'],\r\n 'shopping': ['ShoppingCampaign']\r\n};\r\nvar railViewIds = {\r\n 'search': {\r\n step1: 'SearchCampaignCreate_Step1',\r\n step2: 'SearchCampaignCreate_Step2',\r\n step3: 'SearchCampaignCreate_Step3',\r\n step4: 'SearchCampaignCreate_Step4'\r\n }\r\n};\r\nvar View = StepsWizardView.extend({\r\n _exitWithSave: function () {\r\n StepsWizardView.prototype.cancel.call(this).then((function (shouldCancel) {\r\n if (shouldCancel) {\r\n this.logToSubstrate('save and exit: successful');\r\n this.logToSubstrateStop();\r\n this.navigateToCampaignSummaryPage();\r\n } else {\r\n this.logToSubstrate('save and exit: failed');\r\n setTimeout(function () {\r\n popup.alert(i18n.get('CampaignCreation_Cancel_AlertMessage'));\r\n }, 10);\r\n }\r\n }).bind(this));\r\n },\r\n _cancel: function () {\r\n this.logToSubstrate('cancel clicked');\r\n this.logToSubstrateStop();\r\n this.navigateToRoute('campaign');\r\n },\r\n logToSubstrate: function (message) {\r\n var stepIndex = this.ko_model.stepIndex();\r\n var api = 'advanced campaign creation';\r\n this.stepActivities[stepIndex].signal(message, api);\r\n },\r\n logToSubstrateStop: function () {\r\n var stepIndex = this.ko_model.stepIndex();\r\n var api = 'advanced campaign creation';\r\n this.stepActivities[stepIndex].stopSignal('campaign creation end', api);\r\n },\r\n getAdGroupCreateViewFactory: function () {\r\n var permissions = config.get('Permissions');\r\n var isDSAMixedModeCampaignEnabled = permissions.IsDSAMixedModeCampaignEnabled;\r\n var campaignObjective = config.get('CampaignObjective');\r\n var campaignType = this.getCampaignType(campaignObjective);\r\n if (isDSAMixedModeCampaignEnabled && campaignType === 'search') {\r\n return import(/* webpackMode: 'eager' */'@bingads-webui-campaign-legacy/crud-adgroup/view/mixed-mode-create').then(_MixedModeAdGroupView => {\r\n return _MixedModeAdGroupView.default;\r\n });\r\n }\r\n var importPromises = [import(/* webpackMode: 'eager' */'@bingads-webui-campaign-legacy/crud-adgroup/view/create'), import(/* webpackMode: 'eager' */'@bingads-webui-campaign-legacy/crud-adgroup/view/create-keyword-adgroup-decorator')];\r\n return Promise.all(importPromises).spread((_AdGroupView, keywordAdGroupCreateDecorator) => {\r\n return keywordAdGroupCreateDecorator.decorate(_AdGroupView.default);\r\n });\r\n },\r\n getAdCreateViewFactory: function () {\r\n return import(/* webpackMode: 'eager' */'@bingads-webui-campaign-legacy/crud-ad/view/create').then(_AdsCreateView => {\r\n return _AdsCreateView.default;\r\n });\r\n },\r\n getBudgetCreateViewFactory: function () {\r\n return import(/* webpackMode: 'eager' */'@bingads-webui-campaign-legacy/budget/view/create').then(BudgetCreateView => {\r\n return BudgetCreateView.default;\r\n });\r\n },\r\n initialize: function (options) {\r\n if (options && options.perfMarker) {\r\n this.perfMarker = options.perfMarker;\r\n }\r\n var router = _.chain(options.deps).result('router', {}).value();\r\n this.navigateToRoute = router.navigateToRoute || _.noop;\r\n this.eventDelegator = _.result(options.deps, 'eventDelegator', {});\r\n this.isNextButtonEnabled = !(pageContext.Permissions.IsReadOnlyUser || pageContext.CurrentAccountInActive);\r\n var campaignObjective = config.get('CampaignObjective');\r\n var campaignSaved = false;\r\n if (_.isUndefined(campaignObjective)) {\r\n if (localStorage.supportsStorage()) {\r\n campaignObjective = localStorage.get('CampaignObjective');\r\n config.set('CampaignObjective', campaignObjective);\r\n }\r\n if (!_.isString(campaignObjective)) {\r\n this.navigateToRoute('campaign_create_objective');\r\n }\r\n }\r\n var campaignType = this.getCampaignType(campaignObjective);\r\n var defaultBid = 1;\r\n this.campaignType = campaignType;\r\n this.scenario = instrumentationSvc.default[campaignType + 'CampaignCreation'].create();\r\n this.stepActivities = [];\r\n this.stepActivities[0] = this.scenario.campaignCreationStep1.create();\r\n this.stepActivities[1] = this.scenario.campaignCreationStep2.create();\r\n this.stepActivities[2] = this.scenario.campaignCreationStep3.create();\r\n this.stepActivities[3] = this.scenario.campaignCreationStep4.create();\r\n this.stepActivities[0].startSignal();\r\n this.stepActivities[0].start();\r\n this.stepActivities[0].stop();\r\n var permissions = config.get('Permissions');\r\n var isDSAMixedModeCampaignEnabled = permissions.IsDSAMixedModeCampaignEnabled;\r\n var description = null;\r\n var descriptionHelpId = null;\r\n var descriptionHelpText = null;\r\n if (isDSAMixedModeCampaignEnabled) {\r\n description = i18n.get('MixedMode_AdGroupsStepDescription');\r\n } else {\r\n description = i18n.get('AdGroupsKeywordsStepDescription');\r\n descriptionHelpId = 'app54522';\r\n descriptionHelpText = i18n.get('AdGroupsKeywordsStepDescriptionHelpText');\r\n }\r\n _.extend(options || ({}), {\r\n stageStepLoading: true,\r\n contentClass: 'advanced-campaign-creation__wrapper',\r\n enableStepSwitch: true,\r\n steps: [{\r\n title: i18n.get('CampaignSettingsStepTitle'),\r\n pageTitle: i18n.get('CampaignSettingsStep_PageTitle'),\r\n railViewId: _.result(railViewIds[campaignType], 'step1'),\r\n description: i18n.get('CampaignSettingsStepDescription'),\r\n viewFactory: CampaignSettingsView,\r\n options: {\r\n campaignType: campaignType,\r\n showLanguage: true,\r\n perfMarker: options ? options.perfMarker : null,\r\n deps: options ? options.deps : {},\r\n usePanel: options && options.usePanel,\r\n isForVNext: options && options.isForVNext,\r\n activityLogger: this.stepActivities[0],\r\n serverContext: options && options.serverContext,\r\n scope: options && options.scope\r\n }\r\n }, {\r\n title: isDSAMixedModeCampaignEnabled ? i18n.get('MixedMode_AdGroupsStepTitle') : i18n.get('AdGroupsKeywordsStepTitle'),\r\n pageTitle: isDSAMixedModeCampaignEnabled ? i18n.get('MixedMode_AdGroupStep_PageTitle') : i18n.get('AdGroupsKeywordsStep_PageTitle'),\r\n railViewId: _.result(railViewIds[campaignType], 'step2'),\r\n description: description,\r\n descriptionHelpId: descriptionHelpId,\r\n descriptionHelpText: descriptionHelpText,\r\n viewFactory: _.bind(this.getAdGroupCreateViewFactory, this),\r\n options: {\r\n isDelayLoading: true,\r\n isAutoTargetCampaign: false,\r\n UpdateView: keywordAdGroupUpdateDecorator.decorate(AdGroupUpdateView),\r\n instrumentation: keywordAdGroupInstru,\r\n campaignType: campaignType,\r\n defaultBid: defaultBid,\r\n perfMarker: options ? options.perfMarker : null,\r\n usePanel: options && options.usePanel,\r\n isForVNext: options && options.isForVNext,\r\n activityLogger: this.stepActivities[1]\r\n }\r\n }, {\r\n title: i18n.get('AdsAdExtensionStepTitle'),\r\n pageTitle: i18n.get('AdsAdExtensionStep_PageTitle'),\r\n railViewId: _.result(railViewIds[campaignType], 'step3'),\r\n description: i18n.get('AdsAdExtensionStepDescription'),\r\n viewFactory: _.bind(this.getAdCreateViewFactory, this),\r\n options: {\r\n isDelayLoading: true,\r\n campaignType: campaignType,\r\n perfMarker: options ? options.perfMarker : null,\r\n usePanel: options && options.usePanel,\r\n isForVNext: options && options.isForVNext,\r\n adExtensionsDynamicFeatures: options && options.adExtensionsDynamicFeatures,\r\n activityLogger: this.stepActivities[2],\r\n serverContext: options && options.serverContext\r\n }\r\n }, {\r\n title: i18n.get('BudgetBidsStepTitle'),\r\n pageTitle: i18n.get('BudgetBidsStep_PageTitle'),\r\n railViewId: _.result(railViewIds[campaignType], 'step4'),\r\n description: i18n.get('BudgetBidsStepDescription'),\r\n viewFactory: _.bind(this.getBudgetCreateViewFactory, this),\r\n options: {\r\n isDelayLoading: true,\r\n accountCurrencyCode: this.options.accountCurrencyCode,\r\n campaignType: campaignType,\r\n perfMarker: options ? options.perfMarker : null,\r\n isForVNext: options.isForVNext,\r\n activityLogger: this.stepActivities[3],\r\n i18nNewDesign: _.result(options.deps, 'i18nNewDesign')\r\n }\r\n }],\r\n customButtons: [{\r\n key: 'next',\r\n extendDefaultButtons: true,\r\n extendedParameters: {\r\n enable: this.isNextButtonEnabled\r\n }\r\n }, 'finish', 'back', {\r\n key: 'exitWithSave',\r\n cssClass: 'btn-default',\r\n visible: function () {\r\n var isLast = this.isLast();\r\n return !isLast && (campaignSaved || this.maxAvailabeStepIndex() >= 1);\r\n },\r\n Text: i18n.get('Button_SaveAndExit'),\r\n event: _.bind(this._exitWithSave, this)\r\n }, {\r\n key: 'cancel',\r\n cssClass: 'btn-default',\r\n visible: function () {\r\n if (this.maxAvailabeStepIndex() >= 1) {\r\n campaignSaved = true;\r\n }\r\n return !campaignSaved;\r\n },\r\n Text: i18nGlobal.get('Button_Cancel'),\r\n event: _.bind(this._cancel, this)\r\n }]\r\n });\r\n modalManager.on();\r\n StepsWizardView.prototype.initialize.call(this, options);\r\n },\r\n render: function () {\r\n if (_.isFunction(this.options.callbackBeforeRender)) {\r\n this.options.callbackBeforeRender((function () {\r\n StepsWizardView.prototype.render.call(this);\r\n }).bind(this));\r\n } else {\r\n StepsWizardView.prototype.render.call(this);\r\n }\r\n return this;\r\n },\r\n getCampaignType: function (contextValue) {\r\n var campaignType = 'search';\r\n _.each(campaign2ObjectiveMapping, function (map, key) {\r\n if (_.contains(map, contextValue)) {\r\n campaignType = key;\r\n }\r\n });\r\n return campaignType;\r\n },\r\n diaplaySuccessDialog: function () {\r\n var callback = (function (err, doNotShowAgain) {\r\n if (err || !doNotShowAgain) {\r\n var CurrentAccount = config.get('CurrentAccount');\r\n if (_.isObject(CurrentAccount)) {\r\n var aid = CurrentAccount.Id;\r\n var cid = CurrentAccount.AdvertiserCustomerID;\r\n var isPendingPaymentMethod = CurrentAccount.Status === constants.enums.accountStatus.pendingPaymentInstrument;\r\n var isAccountOnHold = CurrentAccount.Status !== constants.enums.accountStatus.active;\r\n var accountPausedReason = constants.enums.accountInactiveReason.notSet;\r\n if (_.isArray(CurrentAccount.InactiveReasons) && CurrentAccount.InactiveReasons.length > 0) {\r\n var accountPausedReasons = [constants.enums.accountInactiveReason.pausedDueToSystemIssue, constants.enums.accountInactiveReason.pausedZeroBalance, constants.enums.accountInactiveReason.pausedNoValidiO];\r\n CurrentAccount.InactiveReasons.some(function (reason) {\r\n if (accountPausedReasons.indexOf(reason) != -1) {\r\n accountPausedReason = reason;\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n });\r\n }\r\n var CurrentUser = config.get('CurrentUser');\r\n var uid = 0;\r\n if (_.isObject(CurrentUser)) {\r\n uid = CurrentUser.Id;\r\n }\r\n this.successDialog = new SuccessDialog.default({\r\n aid: aid,\r\n cid: cid,\r\n uid: uid,\r\n isPendingPaymentMethod: isPendingPaymentMethod,\r\n isAccountOnHold: isAccountOnHold,\r\n accountPausedReason: accountPausedReason\r\n }).show();\r\n }\r\n }\r\n }).bind(this);\r\n preferencesService.initialize().then(function () {\r\n var preference = preferencesService.findByName('WebApp.CampaignUI.successDialog') || ({\r\n Data: {}\r\n });\r\n var doNotShowAgain = preference && preference.Data && preference.Data.doNotShowAgain;\r\n callback(null, doNotShowAgain);\r\n });\r\n },\r\n navigateToCampaignSummaryPage: function () {\r\n summaryDataContextManager.getContext('/campaign/NewCampaign/Create?');\r\n this.navigateToRoute('campaign');\r\n if (!_.isUndefined(pageContext.Permissions) && pageContext.Permissions.IsCampaignCreationSuccessDialogEnabled) {\r\n this.diaplaySuccessDialog();\r\n }\r\n var campaign = this.model.get('Campaign');\r\n if (!_.isEmpty(campaign) && !_.isEmpty(campaign.Id) && !_.isEmpty(campaign.Name) && this.eventDelegator.trigger) {\r\n this.eventDelegator.trigger('campaignReload');\r\n }\r\n },\r\n save: function () {\r\n StepsWizardView.prototype.save.call(this).then((function (shouldNext) {\r\n if (shouldNext) {\r\n this.logToSubstrate('save clicked: successful');\r\n this.logToSubstrateStop();\r\n var activity = this.scenario.campaignCreationFlowFinished.create();\r\n activity.start();\r\n this.navigateToCampaignSummaryPage();\r\n activity.stop();\r\n if (this.perfMarker) {\r\n this.perfMarker.done({\r\n campaignType: this.campaignType\r\n });\r\n }\r\n } else {\r\n this.logToSubstrate('save clicked: failed');\r\n }\r\n }).bind(this));\r\n },\r\n onSwitch: function (args) {\r\n var delta;\r\n if (args.delta) {\r\n delta = args.delta;\r\n } else if (args.direction === 'next') {\r\n delta = 1;\r\n } else {\r\n delta = -1;\r\n }\r\n var stepNumber = args.stepIndex + delta + 1;\r\n var activity = this.scenario['campaignCreationStep' + stepNumber].create();\r\n activity.start();\r\n activity.stop();\r\n this.stepActivities[args.stepIndex].stopSignal();\r\n this.stepActivities[stepNumber - 1].startSignal();\r\n },\r\n onSwitched: function (args) {\r\n var target = args.stepTo.$el.closest('.content.content-container').length > 0 ? args.stepTo.$el.closest('.content.content-container') : args.stepTo.$el;\r\n $('[role=listbox][tabindex=0],:input:enabled,[role=heading][tabindex=-1]', target).filter(':visible:first').focus();\r\n $(window).trigger('scroll.uiBlock');\r\n },\r\n remove: function () {\r\n if (modalManager.active) {\r\n modalManager.off();\r\n }\r\n if (localStorage.supportsStorage()) {\r\n localStorage.invalidate('CampaignObjective');\r\n }\r\n if (_.isFunction(this.options.callbackBeforeRemove)) {\r\n this.options.callbackBeforeRemove();\r\n }\r\n StepsWizardView.prototype.remove.call(this);\r\n }\r\n});\r\nexport default View;\r\n\r\n","import Promise from 'bluebird';\r\nimport pageContext from '@bingads-webui-static-legacy/page-context';\r\nimport odata from '@bingads-webui-component-legacy/http/channel/odata';\r\n\r\nexport function fetchHasAvailableConversionGoals() {\r\n const url = `/Customers(${pageContext.CurrentAccount.AdvertiserCustomerID})/Accounts(${pageContext.CurrentAccount.Id})/ConversionGoalDetails`;\r\n\r\n return odata.get(url, {\r\n path: 'Advertiser/V2',\r\n }).then((response) => {\r\n return response.IsActiveConversionGoalPresent;\r\n });\r\n}\r\n\r\nfunction fetchSmartShoppingCampaignCountIsLessThan100() {\r\n const url = `/Customers(${pageContext.CurrentAccount.AdvertiserCustomerID})/Accounts(${pageContext.CurrentAccount.Id})/Campaigns/Default.GetCampaignsCount(campaignType='Shopping',campaignSubType='ShoppingSmartAds')`;\r\n\r\n return odata.get(url, {\r\n path: 'Advertiser/V2',\r\n }).then((response) => {\r\n return response && response.value && response.value[0] < 100;\r\n });\r\n}\r\n\r\nexport const noSmartShoppingReason = {\r\n NO_AVAILABLE_GOAL: 'NO_AVAILABLE_GOAL',\r\n MORE_THAN_100: 'MORE_THAN_100',\r\n NO_PILOT: 'NO_PILOT',\r\n};\r\n\r\nexport function fetchIsSmartShoppingCampaignSupported() {\r\n const isSmartShoppingCampaignEnabled = pageContext.Permissions.IsSmartShoppingCampaignEnabled;\r\n\r\n if (!isSmartShoppingCampaignEnabled) {\r\n return Promise.resolve({\r\n supported: false,\r\n reason: noSmartShoppingReason.NO_PILOT,\r\n });\r\n }\r\n\r\n return new Promise((resolve) => {\r\n Promise.all([\r\n fetchHasAvailableConversionGoals(),\r\n // fetchHasUETTag(),\r\n fetchSmartShoppingCampaignCountIsLessThan100(),\r\n ]).then(([hasAvailableConversionGoal, isSSCCountLessThan100]) => {\r\n const supported = hasAvailableConversionGoal && isSSCCountLessThan100;\r\n let reason;\r\n\r\n if (!supported) {\r\n if (!hasAvailableConversionGoal) { // eslint-disable-line\r\n reason = noSmartShoppingReason.NO_AVAILABLE_GOAL;\r\n } else {\r\n reason = noSmartShoppingReason.MORE_THAN_100;\r\n }\r\n }\r\n resolve({\r\n supported,\r\n reason,\r\n });\r\n }).catch(() => {\r\n resolve({\r\n supported: false,\r\n reason: null,\r\n });\r\n });\r\n });\r\n}\r\n","import Backbone from 'backbone';\r\nimport ko from 'knockout';\r\nimport _ from 'underscore';\r\nimport URI from 'urijs';\r\nimport dialogTemplateInReview from '@bingads-webui-campaign-legacy/campaign-create-advanced/template/successDialogInReview.pug';\r\nimport dialogTemplatePendingPaymentMethod from '@bingads-webui-campaign-legacy/campaign-create-advanced/template/successDialogPendingPaymentMethod.pug';\r\nimport dialogTemplateAccountOnHold from '@bingads-webui-campaign-legacy/campaign-create-advanced/template/successDialogAccountOnHold.pug';\r\nimport dialogTemplateAccountPaused from '@bingads-webui-campaign-legacy/campaign-create-advanced/template/successDialogAccountPaused.pug';\r\nimport constants from '@bingads-webui-static-legacy/constants';\r\nimport preferencesService from '@bingads-webui-component-legacy/preference/service/index';\r\n\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/campaign-creation-advanced');\r\nconst i18nGlobal = window.globalLegacyI18n.get('component/i18n/loader!legacy/global');\r\n\r\n/**\r\n * @this {Success}\r\n * @returns {void}\r\n**/\r\nfunction close() {\r\n this.trigger('close');\r\n}\r\n\r\n/**\r\n * @this {Success}\r\n * @returns {void}\r\n**/\r\nfunction save() {\r\n preferencesService.setAtUserLevel({\r\n Name: 'WebApp.CampaignUI.successDialog',\r\n Data: { doNotShowAgain: this.viewModel.doNotShowAgain() },\r\n });\r\n}\r\n\r\nexport class Success extends Backbone.View {\r\n initialize({\r\n aid = null,\r\n cid = null,\r\n uid = null,\r\n isPendingPaymentMethod = false,\r\n isAccountOnHold = false,\r\n accountPausedReason = constants.enums.accountInactiveReason.notSet,\r\n } = {}) {\r\n this.isPendingPaymentMethod = isPendingPaymentMethod;\r\n this.isAccountOnHold = isAccountOnHold;\r\n this.accountPausedReason = accountPausedReason;\r\n this.aid = aid;\r\n this.cid = cid;\r\n this.uid = uid;\r\n\r\n this.viewModel = {\r\n doNotShowAgain: ko.observable(false),\r\n };\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click .got-it': close,\r\n 'click .dont-show': save,\r\n };\r\n }\r\n\r\n render() {\r\n if (this.accountPausedReason) {\r\n let reason;\r\n let action;\r\n let link;\r\n\r\n switch (this.accountPausedReason) {\r\n case constants.enums.accountInactiveReason.pausedDueToSystemIssue:\r\n reason = 'SystemIssue';\r\n action = 'ContactSupport';\r\n link = new URI('http://go.microsoft.com/fwlink/?LinkId=258669').toString();\r\n break;\r\n case constants.enums.accountInactiveReason.pausedZeroBalance:\r\n reason = 'ZeroBalance';\r\n action = 'AddFunds';\r\n link = new URI('/cc/Payment/Prepay').setQuery({\r\n aid: this.aid,\r\n cid: this.cid,\r\n uid: this.uid,\r\n }).toString();\r\n break;\r\n case constants.enums.accountInactiveReason.pausedNoValidiO:\r\n reason = 'NoValidIO';\r\n action = 'CreateInsertionOrder';\r\n link = new URI('/cc/InsertionOrder').setQuery({\r\n aid: this.aid,\r\n cid: this.cid,\r\n uid: this.uid,\r\n }).toString();\r\n break;\r\n default:\r\n break;\r\n }\r\n this.$el.html(dialogTemplateAccountPaused({\r\n _,\r\n i18n,\r\n i18nGlobal,\r\n reason,\r\n action,\r\n link,\r\n }));\r\n } else if (this.isPendingPaymentMethod) {\r\n const hrefAddPaymentMethod = new URI('/cc/PaymentMethods').setQuery({\r\n aid: this.aid,\r\n cid: this.cid,\r\n uid: this.uid,\r\n showTaxForm: false,\r\n }).toString();\r\n\r\n this.$el.html(dialogTemplatePendingPaymentMethod({\r\n _,\r\n i18n,\r\n i18nGlobal,\r\n hrefAddPaymentMethod,\r\n }));\r\n } else if (this.isAccountOnHold) {\r\n const hrefFixIt = new URI('/cc/CreditHold/Dashboard').setQuery({\r\n aid: this.aid,\r\n cid: this.cid,\r\n uid: this.uid,\r\n }).toString();\r\n\r\n this.$el.html(dialogTemplateAccountOnHold({\r\n _,\r\n i18n,\r\n i18nGlobal,\r\n hrefFixIt,\r\n }));\r\n } else {\r\n this.$el.html(dialogTemplateInReview({\r\n _,\r\n i18n,\r\n i18nGlobal,\r\n }));\r\n }\r\n ko.applyBindings(this.viewModel, this.el);\r\n\r\n return this;\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport { Dialog } from '@bingads-webui/dialog';\r\nimport { focusLockInstanceDecorator } from '@bingads-webui/focus-lock-decorator';\r\nimport { Success } from './success';\r\n\r\nexport default class SuccessDialog extends Backbone.View {\r\n initialize({\r\n aid,\r\n cid,\r\n uid,\r\n isPendingPaymentMethod,\r\n isAccountOnHold,\r\n accountPausedReason,\r\n lockRegionAriaLabel = '',\r\n }) {\r\n this.dialogView = new Dialog({\r\n className: 'campaign-creation-success-dialog',\r\n });\r\n this.successView = new Success({\r\n aid,\r\n cid,\r\n uid,\r\n isPendingPaymentMethod,\r\n isAccountOnHold,\r\n accountPausedReason,\r\n });\r\n this.dialogView.setContent(this.successView);\r\n\r\n const FocusLockPopupEditor = focusLockInstanceDecorator(this.dialogView, {\r\n onExit: () => this.dialogView.remove(),\r\n lockRegionAriaLabel,\r\n focusFirstItemOnMount: true,\r\n }, {\r\n managed: true,\r\n });\r\n\r\n this.focusLockSuccessPopupEditor = new FocusLockPopupEditor();\r\n\r\n this.successView.on('close', () => {\r\n this.dialogView.remove();\r\n this.focusLockSuccessPopupEditor.remove();\r\n this.focusLockSuccessPopupEditor = null;\r\n });\r\n }\r\n\r\n show() {\r\n this.dialogView.render();\r\n document.body.appendChild(this.focusLockSuccessPopupEditor.render().el);\r\n this.dialogView.$('.modal').modal({\r\n backdrop: this.dialogView.backdrop,\r\n keyboard: this.dialogView.keyboard,\r\n });\r\n this.dialogView.$('.modal').on('focus', () => this.dialogView.$('button.close').focus());\r\n return this;\r\n }\r\n}\r\n","import $ from 'jquery';\r\nimport _ from 'underscore';\r\nimport { showPopup } from '@bingads-webui/automatic-positioning-popover';\r\nimport { DeterministicViewForBackBoneView } from '@bingads-webui/deterministic-wrapper-view';\r\nimport { PopupContentView } from './view';\r\n\r\nlet contentView;\r\nlet timeoutForBudgetLandscapePopover;\r\n\r\nexport function dismissHelpInfo() {\r\n if (contentView) {\r\n contentView.trigger('remove');\r\n }\r\n contentView = null;\r\n}\r\n\r\nexport function getTemplate({\r\n targetEntity,\r\n i18n,\r\n eventName,\r\n isForecasting,\r\n}) {\r\n const view = new PopupContentView({\r\n i18n,\r\n targetEntity,\r\n eventName,\r\n isForecasting,\r\n });\r\n\r\n return view.template();\r\n}\r\n\r\nexport function showHelpInfo({\r\n event,\r\n targetEntity,\r\n i18n,\r\n showSuggestionClickedCallback,\r\n eventName,\r\n isForecasting,\r\n}) {\r\n const container = $('.budget-lanscape-popover-container');\r\n\r\n dismissHelpInfo();\r\n clearTimeout(timeoutForBudgetLandscapePopover);\r\n\r\n timeoutForBudgetLandscapePopover = setTimeout(() => {\r\n const view = new PopupContentView({\r\n i18n,\r\n targetEntity,\r\n eventName,\r\n isForecasting,\r\n });\r\n\r\n if (_.isFunction(showSuggestionClickedCallback)) {\r\n view.on('budget-landscape-action-link:clicked', () => {\r\n dismissHelpInfo();\r\n showSuggestionClickedCallback();\r\n });\r\n }\r\n\r\n contentView = new DeterministicViewForBackBoneView({ view: view.render() });\r\n\r\n return showPopup({\r\n contentView,\r\n i18n,\r\n container,\r\n classes: ['budget-landscape-help-info-container'],\r\n anchor: $(event.target),\r\n });\r\n }, 200);\r\n}\r\n","import _ from 'underscore';\r\nimport Backbone from 'backbone';\r\nimport pageContext from '@bingads-webui-static-legacy/page-context';\r\nimport expDateUtils from '@bingads-webui-campaign-legacy/experiments-tab/experiment-date-utils-loader';\r\nimport template from './template.pug';\r\n\r\nconst isExperimentsOpenBetaEnabled = _.result(pageContext.Permissions, 'IsExperimentsOpenBetaEnabled');\r\n\r\nexport class PopupContentView extends Backbone.View {\r\n initialize({ targetEntity, i18n, eventName = '', isForecasting = false}) {\r\n this.entity = targetEntity;\r\n this.i18n = i18n;\r\n this.eventName = eventName;\r\n this.isForecasting = isForecasting;\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click .budget-landscape-action-link': 'actionClicked',\r\n };\r\n }\r\n\r\n actionClicked(event) {\r\n this.trigger('budget-landscape-action-link:clicked', {event});\r\n }\r\n\r\n template() {\r\n const params = {\r\n i18n: this.i18n,\r\n deliveryStatus: this.entity.DeliveryStatus,\r\n landscapeDisabled: this.entity.landscapeDisabled,\r\n eventName: this.eventName,\r\n isForecasting: this.isForecasting,\r\n };\r\n\r\n if (isExperimentsOpenBetaEnabled && this.entity.ExperimentId && this.entity.AssociatedExperiment) {\r\n params.ExperimentId = this.entity.ExperimentId;\r\n params.AssociatedExperiment = this.entity.AssociatedExperiment;\r\n params.percentSymbol = pageContext.DecimalFormatter.percentSymbol;\r\n params.expDateUtils = expDateUtils;\r\n }\r\n\r\n return template(params);\r\n }\r\n\r\n render () {\r\n this.$el.html(this.template());\r\n\r\n return this;\r\n }\r\n}\r\n","import ko from 'knockout';\r\n\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/feature/budgetlandscape');\r\n\r\nexport default class ViewModel {\r\n constructor() {\r\n this.isThumbVisible = ko.observable(true);\r\n this.isSelected = false;\r\n\r\n this.isLikeVisible = ko.observable(true);\r\n this.isLikeSolidVisible = ko.observable(false);\r\n this.isDislikeVisible = ko.observable(true);\r\n this.isDislikeSolidVisible = ko.observable(false);\r\n\r\n this.isRecommendedPageLinkVisible = ko.observable(false);\r\n\r\n this.feedbackComment = ko.observable(i18n.get('Budget_Landscape_Feedback_IsHelpful'));\r\n\r\n this.overLike = () => {\r\n if (!this.isSelected) {\r\n this.isLikeVisible(false);\r\n this.isLikeSolidVisible(true);\r\n }\r\n };\r\n\r\n this.overLikeOut = () => {\r\n if (!this.isSelected) {\r\n this.isLikeVisible(true);\r\n this.isLikeSolidVisible(false);\r\n }\r\n };\r\n\r\n this.overDislike = () => {\r\n if (!this.isSelected) {\r\n this.isDislikeVisible(false);\r\n this.isDislikeSolidVisible(true);\r\n }\r\n };\r\n\r\n this.overDislikeOut = () => {\r\n if (!this.isSelected) {\r\n this.isDislikeVisible(true);\r\n this.isDislikeSolidVisible(false);\r\n }\r\n };\r\n\r\n this.onClickLike = () => {\r\n this.isSelected = true;\r\n this.isThumbVisible(false);\r\n this.feedbackComment(i18n.get('Budget_Landscape_Feedback_Thanks'));\r\n };\r\n\r\n this.onClickDislike = () => {\r\n this.isSelected = true;\r\n this.isThumbVisible(false);\r\n };\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport ko from 'knockout';\r\nimport Backbone from 'backbone';\r\nimport template from '@bingads-webui-campaign-legacy/budgetlandscape/template/budgetLandscapeViewRecommendation.pug';\r\nimport { BudgetLandScapeTable, BudgetLandScapeChart } from '@bingads-webui-campaign/recommendation-inline-budget-view';\r\nimport { showDismissFeedbackPopupForBudgetLandscape } from '@bingads-webui-campaign-react/recommendation-dismiss-feedback';\r\nimport { NAVIGATE_REASON } from '@bingads-webui-campaign-react/recommendation-feedback-modal';\r\nimport pageContext from '@bingads-webui-static-legacy/page-context';\r\nimport ViewModel from '@bingads-webui-campaign-legacy/budgetlandscape/viewModel/viewModel';\r\nimport {\r\n RECOMMENDATION_TYPES,\r\n formatLocaledSeasonalEventType,\r\n ADINSIGHT_LOG_API_NAME,\r\n RECOMMENDATION_IDS,\r\n ADINSIGHT_LOG_ACTION_TYPE,\r\n CHANNEL_TYPES,\r\n RecommendationService,\r\n schema,\r\n TYPE_DESCRIPTION_TABLE,\r\n} from '@bingads-webui-campaign/recommendation-core';\r\nimport { levelAtConstant } from '@bingads-webui-campaign/scope-constants';\r\n// eslint-disable-next-line\r\nimport _bingads_webui_component_legacy_legacy_router_index from '@bingads-webui-component-legacy/legacy-router/index';\r\n// eslint-disable-next-line\r\nconst { legacyRouter } = _bingads_webui_component_legacy_legacy_router_index;\r\nimport instrumentation from '@bingads-webui-campaign-legacy/instrumentation/index';\r\nimport appConfig from '@bingads-webui-component-legacy/config/index';\r\nimport preferencesService from '@bingads-webui-component-legacy/preference/service/index';\r\nimport {\r\n logBudgetLandScapeForSharedBudgetCampaignView,\r\n logBudgetLandScapeForSharedBudgetCampaignAdoption,\r\n} from '@bingads-webui-campaign-legacy/budget/shared/log';\r\n\r\nconst activity = instrumentation.campaignTab.create().budgetLandscape.create();\r\nconst Permissions = appConfig.get('Permissions');\r\nconst context = {\r\n Level: levelAtConstant.ACCOUNT,\r\n CampaignIds: [],\r\n AdGroupIds: [],\r\n};\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!campaignui/feature/budgetlandscape');\r\nconst i18nRecommendation = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/feature/competition-tab');\r\nconst preferenceName = 'WebApp.CampaignUI.BudgetLandscape.DataVersionFeedback';\r\n\r\nexport class BudgetLandscapeView extends Backbone.View {\r\n initialize(options) {\r\n this.viewModel = new ViewModel();\r\n this.options = options || {};\r\n this.opportunityData = options.data;\r\n this.i18n = i18n;\r\n this.el = this.options.el;\r\n this.parentItem = this.options.parentItem || {};\r\n this.seasonalEvents = this.opportunityData.SeasonalEvents || [];\r\n this.campaignId = options.campaignId;\r\n this.dataVersion = this.opportunityData.Version;\r\n this.opportunityId = options.opportunityId;\r\n this.appConfig = appConfig;\r\n this.isForVNext = options.isForVNext;\r\n this.isInProductFeedbackLoopOn = Permissions && Permissions.IsRecommendationInProductFeedbackLoopEnabled && this.isForVNext;\r\n this.navigateToType = null;\r\n\r\n if (this.isInProductFeedbackLoopOn) {\r\n const preference = preferencesService.findByName(preferenceName) || {};\r\n\r\n this.preferenceData = preference.Data || {};\r\n this.generateScope();\r\n this.initializeInstrumentation();\r\n this.dataService = new RecommendationService({\r\n scope: this.scope,\r\n currentScenario: this.currentScenario,\r\n currentActivity: this.currentActivity,\r\n odataPath: appConfig.get('adinsight.odata.url'),\r\n permissions: Permissions,\r\n lcid: pageContext.CultureLcid,\r\n ccJsData: null,\r\n isNoExpand: true,\r\n });\r\n\r\n if (this.preferenceData[this.campaignId] === this.dataVersion) {\r\n this.viewModel.feedbackComment(i18n.get('Budget_Landscape_Feedback_Thanks'));\r\n this.viewModel.isThumbVisible(false);\r\n }\r\n }\r\n\r\n const isForecasting = this.opportunityData.IsForecasting || false;\r\n\r\n this.showForecastingMessage = isForecasting && this.options.campaignOutOfBudget;\r\n if (this.options.data.IsShared) {\r\n this.budgetTitle = i18n.get('Details_View_Increase_Shared_Budget').replace('{{entity_name}}', this.opportunityData.Shared.BudgetName);\r\n } else {\r\n this.budgetTitle = i18n.get('BudgetLandscape_Title').replace('{0}', _.result(this.parentItem, 'CampaignName') || '');\r\n }\r\n\r\n const conversionSummaryStatus = this.opportunityData.ConversionStatus || 0;\r\n\r\n this.tableView = new BudgetLandScapeTable({\r\n i18n: i18nRecommendation,\r\n conversionSummaryStatus,\r\n opportunityData: this.opportunityData,\r\n appConfig: options.appConfig,\r\n fromCampaignTab: true,\r\n currentBudget: options.currentBudget,\r\n isSharedBudget: this.options.data.IsShared,\r\n permissions: Permissions,\r\n });\r\n this.chartView = new BudgetLandScapeChart({\r\n tableViewmodel: this.tableView.getViewModel(),\r\n i18n: i18nRecommendation,\r\n conversionSummaryStatus,\r\n legacyRouter: options.legacyRouter,\r\n });\r\n this.tableView.on('selectedRowChanged selectedColumnChanged estimationChanged', () => {\r\n this.chartView.redraw();\r\n });\r\n this.chartView.on('close_poputil', () => {\r\n this.onCancel();\r\n });\r\n const hasData = !_.isEmpty(this.tableView.getViewModel().rawLandscapeData);\r\n const notExceed = !this.opportunityData.currentLargerThanMax;\r\n\r\n this.showData = hasData && notExceed;\r\n\r\n if (this.options.campaignOutOfBudget) {\r\n this.helpText = i18n.get('BudgetLandscape_HelpText_OutofBudget');\r\n } else if (this.seasonalEvents.length > 0) {\r\n const name = formatLocaledSeasonalEventType(this.i18n, _.first(this.seasonalEvents).Name);\r\n\r\n this.helpText = (isForecasting ? i18n.get('BudgetLandscape_HelpText_Forecasting_Seasonal_Strong') : i18n.get('BudgetLandscape_HelpText_Recovery_Seasonal_Strong')).replace('{0}', name);\r\n } else {\r\n this.helpText = isForecasting ? i18n.get('BudgetLandscape_HelpText_Forecasting_Non_Seasonal') : i18n.get('BudgetLandscape_HelpText_Recovery_Non_Seasonal');\r\n }\r\n\r\n // this.options.data.Shared.BudgetId\r\n if (this.options.data.IsShared) {\r\n logBudgetLandScapeForSharedBudgetCampaignView(\r\n this.options.data.Shared.BudgetId,\r\n 'bingadsweb[incontextrecommendation]',\r\n this.opportunityId,\r\n _.result(_.find(this.opportunityData.Landscapes, (i) => i.Comment === 'Suggested'), 'EstimatedBudget'),\r\n i18nRecommendation.currency,\r\n activity\r\n );\r\n } else {\r\n this.logAdInsight(ADINSIGHT_LOG_ACTION_TYPE.VIEW);\r\n this.logAdInsight(ADINSIGHT_LOG_ACTION_TYPE.IMPRESSION);\r\n }\r\n }\r\n\r\n generateScope() {\r\n const campaignId = this.campaignId;\r\n\r\n this.scope = {\r\n customerId: _.result(this.parentItem, 'CustomerId') || '0',\r\n accountId: _.result(this.parentItem, 'AcctId') || '0',\r\n campaignId,\r\n campaignName: _.result(appConfig.get('CurrentCampaign'), 'Name'),\r\n token: appConfig.get('Token'),\r\n levelAt: levelAtConstant.CAMPAIGN,\r\n entityIds: [campaignId],\r\n };\r\n }\r\n\r\n initializeInstrumentation() {\r\n instrumentation.addScenario(schema);\r\n this.currentScenario = instrumentation.loadRecommendationTab.create();\r\n this.currentActivity = this.currentScenario.loadRecommendationTab.create();\r\n }\r\n\r\n logUserFeedback(formattedReason, isLike = false) {\r\n const type = RECOMMENDATION_TYPES.BUDGET_OPPORTUNITY;\r\n\r\n activity.trace({\r\n type,\r\n action: ADINSIGHT_LOG_ACTION_TYPE.FEEDBACK,\r\n campaignId: this.campaignId,\r\n input: {\r\n isLike,\r\n formattedReason: _.isNull(formattedReason) ? null : {\r\n reason: JSON.parse(formattedReason.reason),\r\n },\r\n },\r\n context: _.extend(context, { opportunityId: this.opportunityId }),\r\n });\r\n }\r\n\r\n logAdInsight(action) {\r\n const type = RECOMMENDATION_TYPES.BUDGET_OPPORTUNITY;\r\n // now budget landscape could only show in campaign tab\r\n // so, level can only by account\r\n\r\n activity.trace({\r\n id: this.opportunityId,\r\n type,\r\n typeId: RECOMMENDATION_IDS[type],\r\n action,\r\n campaignId: this.campaignId,\r\n channel: CHANNEL_TYPES.INCONTEXT,\r\n context: JSON.stringify(context),\r\n }, ADINSIGHT_LOG_API_NAME.RECOMMENDATION);\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click .apply': 'onApply',\r\n 'click #budget-landscape-cancel': 'onCancel',\r\n 'click #budget-landscape-close-image': 'onCancel',\r\n 'click .more-suggestion': 'onCancel',\r\n 'click .more-recommendation a': this.gotoRecommendationTab,\r\n 'click .budget-landscape-dislike': this.handleFeedbackDislike,\r\n 'click .budget-landscape-like': this.handleFeedbackLike,\r\n 'click .navigate-to-recommended-page-link': this.gotoCustomizedRecommendationTab,\r\n };\r\n }\r\n\r\n onSubmitFeedback(formattedReason, reasonId) {\r\n this.logUserFeedback(formattedReason);\r\n\r\n switch (reasonId) {\r\n case NAVIGATE_REASON.NoBudget: // navigate to different recommendation detail page for certain reason\r\n this.navigateToType = RECOMMENDATION_TYPES.REALLOCATE_BUDGET;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n if (this.navigateToType) {\r\n this.dataService.getSummary({\r\n channel: CHANNEL_TYPES.RECOMMENDATION,\r\n ignoreCoupons: true,\r\n type: this.navigateToRoute,\r\n }).then((opt) => {\r\n this.oppo = opt.data.value;\r\n const recommendationTypeAvailable = _.map(this.oppo, (ele) => {\r\n return ele.OpportunityType;\r\n });\r\n\r\n if (recommendationTypeAvailable.includes(this.navigateToType)) {\r\n this.viewModel.feedbackComment(i18n.get('Budget_Landscape_Feedback_SuggestRecommendation', { recommendationDescription: TYPE_DESCRIPTION_TABLE[this.navigateToType] }));\r\n this.viewModel.isRecommendedPageLinkVisible(true);\r\n }\r\n });\r\n }\r\n }\r\n\r\n saveDataVersionPreference() {\r\n preferencesService.set({\r\n Name: preferenceName,\r\n Data: _.extend(this.preferenceData, {\r\n [this.campaignId]: this.dataVersion,\r\n }),\r\n });\r\n }\r\n\r\n handleFeedbackDislike() {\r\n this.viewModel.feedbackComment(i18n.get('Budget_Landscape_Feedback_Thanks'));\r\n showDismissFeedbackPopupForBudgetLandscape({\r\n i18n: i18nRecommendation,\r\n permissions: Permissions,\r\n onSubmit: (formattedReason, reasonId) => this.onSubmitFeedback(formattedReason, reasonId),\r\n isForVNext: this.isForVNext,\r\n el: '.popup-container .budget-landscape-container-outer',\r\n });\r\n this.logUserFeedback(null, false);\r\n this.saveDataVersionPreference();\r\n }\r\n\r\n handleFeedbackLike() {\r\n this.logUserFeedback(null, true);\r\n this.saveDataVersionPreference();\r\n }\r\n\r\n prepareView() {\r\n this.$el.append(\r\n template({\r\n Id: this.parentItem.Id,\r\n CustomerId: _.result(this.parentItem, 'CustomerId') || '0',\r\n AcctId: _.result(this.parentItem, 'AcctId') || '0',\r\n BudgetTypeString: this.parentItem.IsDailyBudgt ? i18n.get('BudgetLimitType_Daily') : i18n.get('BudgetLimitType_Monthly'),\r\n hasEvent: this.seasonalEvents.length > 0,\r\n showData: this.showData,\r\n i18n: this.i18n,\r\n helpId: _.result(this.options, 'helpId') || '',\r\n helpText: this.helpText,\r\n isForward: this.showForecastingMessage,\r\n budgetTitle: this.budgetTitle,\r\n isInProductFeedbackLoopOn: this.isInProductFeedbackLoopOn,\r\n })\r\n );\r\n }\r\n\r\n render() {\r\n this.prepareView();\r\n this.$('.landscape-table').html(this.tableView.render().el);\r\n this.$('.landscape-chart').html(this.chartView.render().el);\r\n\r\n if (this.showData) {\r\n ko.applyBindings(this.tableView.getViewModel(), this.$('.budget-landscape-actions')[0]);\r\n }\r\n if (this.isInProductFeedbackLoopOn) {\r\n ko.applyBindings(this.viewModel, this.$('.budget-landscape-feedback-actions')[0]);\r\n }\r\n return this;\r\n }\r\n\r\n onApply() {\r\n if (this.tableView.isValid()) {\r\n const newBudget = this.tableView.getSelectedNewBudget();\r\n\r\n if (this.options.data.IsShared) {\r\n logBudgetLandScapeForSharedBudgetCampaignAdoption(\r\n this.options.data.Shared.BudgetId,\r\n 'bingadsweb[incontextrecommendation]',\r\n this.opportunityId,\r\n _.result(_.find(this.opportunityData.Landscapes, (i) => i.Comment === 'Suggested'), 'EstimatedBudget'),\r\n newBudget,\r\n i18nRecommendation.currency,\r\n activity\r\n );\r\n }\r\n\r\n this.trigger('apply', { newBudget });\r\n }\r\n }\r\n\r\n onCancel() {\r\n this.trigger('cancel');\r\n }\r\n\r\n close() {\r\n this.remove();\r\n }\r\n\r\n remove() {\r\n this.chartView.remove();\r\n this.tableView.remove();\r\n super.remove();\r\n }\r\n\r\n gotoRecommendationTab(e) {\r\n e.preventDefault();\r\n this.appConfig.set('recsrc', CHANNEL_TYPES.INCONTEXT);\r\n\r\n legacyRouter.navigateToRoute('campaign_recommendation_details', {\r\n type: RECOMMENDATION_TYPES.BUDGET_OPPORTUNITY,\r\n 'campaign_id': this.campaignId,\r\n });\r\n }\r\n\r\n gotoCustomizedRecommendationTab() {\r\n this.onCancel();\r\n legacyRouter.navigateToRoute('campaign_recommendation_details', {\r\n type: this.navigateToType,\r\n 'campaign_id': this.campaignId,\r\n });\r\n }\r\n}\r\n","import $ from 'jquery';\r\nimport _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport config from '@bingads-webui-component-legacy/config/index';\r\nimport { show as showPopup, dismiss } from '@bingads-webui-component-legacy/popup/view/index';\r\nimport { dismissHelpInfo, showHelpInfo, getTemplate } from '@bingads-webui-campaign-legacy/campaigns-tab-campaigns/grid/budgetlandscape/popover/index';\r\nimport odata from '@bingads-webui-component-legacy/http/channel/odata';\r\nimport popupUtil from '@bingads-webui-static-legacy/popup';\r\nimport jsData from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport state from '@bingads-webui-component-legacy/state/index';\r\nimport withUiBlock from '@bingads-webui-component-legacy/uiblocker/index';\r\nimport { BudgetLandscapeView } from '@bingads-webui-campaign-legacy/budgetlandscape/view/budgetlandscape';\r\nimport { getBudgetRange } from '@bingads-webui-campaign-legacy/common-grid-config/budget/get-budget-range';\r\nimport constants from '@bingads-webui-static-legacy/instrumentation/constants';\r\nimport logger from '@bingads-webui-static-legacy/instrumentation/logger';\r\nimport decimalNumber from '@bingads-webui-component-legacy/humanize/decimal';\r\n// eslint-disable-next-line\r\nimport _bingads_webui_component_legacy_legacy_router_index from '@bingads-webui-component-legacy/legacy-router/index';\r\n// eslint-disable-next-line\r\nconst { legacyRouter } = _bingads_webui_component_legacy_legacy_router_index;\r\nimport { formatLocaledSeasonalEventType } from '@bingads-webui-campaign/recommendation-core';\r\nimport dataContextManager from '@bingads-webui-static-legacy/summary/SummaryDataContextManager';\r\n\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!legacy/global');\r\n\r\nconst COMMENT_TYPES = {\r\n SUGGESTED: 'Suggested',\r\n CURRENT: 'Current',\r\n MAXVALUE: 'MaxValue',\r\n OTHER: 'Other',\r\n};\r\n\r\nfunction isSharedBudgetCampaign(entity) {\r\n const budget = _.result(entity, 'Budget');\r\n const budgetName = _.result(budget, 'Name');\r\n\r\n return !_.isEmpty(budgetName);\r\n}\r\n\r\nfunction isSharedBudgetRecommendation(budgetLandscapeView) {\r\n const options = _.result(budgetLandscapeView, 'options');\r\n const data = _.result(options, 'data');\r\n\r\n return _.result(data, 'IsShared');\r\n}\r\n\r\nfunction fetchBudgetLandscape(campaign) {\r\n let uri;\r\n const odataPath = config.get('adinsight.odata.url');\r\n\r\n if (isSharedBudgetCampaign(campaign)) {\r\n uri = `Customers(:customer_id)/Accounts(:account_id)/Recommendation.GetSharedBudgetLandscape(SharedBudgetId=${campaign.Budget.Id})`;\r\n } else {\r\n uri = `Customers(:customer_id)/Accounts(:account_id)/Campaigns(${campaign.Id})/Opportunity.GetBudgetLandscape`;\r\n }\r\n\r\n return odata.get(uri, {\r\n path: 'AdInsight/V2/',\r\n host: odataPath,\r\n });\r\n}\r\n\r\nlet currentAlertId = null;\r\n\r\nfunction dismissAlert() {\r\n if (currentAlertId) {\r\n window.App.views.alertCenter.dismiss(currentAlertId);\r\n currentAlertId = null;\r\n }\r\n}\r\n\r\nfunction showAlert(message) {\r\n dismissAlert();\r\n\r\n currentAlertId = window.App.views.alertCenter.show({\r\n message,\r\n level: 'Error',\r\n dismissible: true,\r\n }, currentAlertId);\r\n}\r\n\r\n// Process budget landscape data for rendering by recommention-inline-budget-view\r\n/*\r\n 1. check if the current budget is the suggested budget, if so, do not show the landscape\r\n 2. change the indicator of current budget according to campaign current budget\r\n*/\r\nfunction processBudgetLandscapeResult(res, currentBudget) {\r\n const opportunityData = _.chain(res)\r\n .result('value').first()\r\n .value();\r\n\r\n if (!opportunityData || _.isEmpty(opportunityData)) {\r\n return {};\r\n } else {\r\n const landscapes = opportunityData.Landscapes;\r\n const maxBudgetInLandscape = _.max(_.map(landscapes, (landscape) => {\r\n return landscape.EstimatedBudget;\r\n }));\r\n const currentLargerThanMax = currentBudget >= maxBudgetInLandscape;\r\n\r\n const processedLandscapes = _.map(landscapes, (landscape) => {\r\n let { Comment } = landscape;\r\n const { EstimatedBudget } = landscape;\r\n const isCurrent = EstimatedBudget === currentBudget;\r\n\r\n if (Comment !== COMMENT_TYPES.MAXVALUE && Comment !== COMMENT_TYPES.SUGGESTED) {\r\n Comment = isCurrent ? COMMENT_TYPES.CURRENT : COMMENT_TYPES.OTHER;\r\n }\r\n return _.extend({}, landscape, { Comment });\r\n });\r\n\r\n return _.extend({ currentLargerThanMax }, opportunityData, { 'Landscapes': processedLandscapes });\r\n }\r\n}\r\n\r\nfunction getEventForecasting(res) {\r\n const opportunityData = _.chain(res)\r\n .result('value').first()\r\n .value();\r\n\r\n if (!opportunityData || _.isEmpty(opportunityData)) {\r\n return {\r\n eventName: '',\r\n isForecasting: false,\r\n };\r\n }\r\n return {\r\n eventName: opportunityData.SeasonalEvents.length > 0 ?\r\n formatLocaledSeasonalEventType(i18n, opportunityData.SeasonalEvents[0].Name) : '',\r\n isForecasting: opportunityData.IsForecasting,\r\n };\r\n}\r\n\r\nfunction onAction(event) {\r\n const action = event.currentTarget.attributes['data-action'].value;\r\n\r\n dismiss(action);\r\n}\r\n\r\nfunction onNoBudgetLandscapeForCampaignOutOfBudget(e, grid, isForVNext = false) {\r\n return showPopup(_.extend({},\r\n {\r\n positioningMethod: isForVNext ? 'fixed' : 'fit',\r\n positioningOptions: {\r\n positionAttribute: isForVNext ? 'fixed' : 'absolute',\r\n threshold: 0.5,\r\n },\r\n classes: ['popup--labels'],\r\n events: {\r\n 'click .action': onAction,\r\n },\r\n template: () => i18n.getString('BudgetLandscape_NoBudget_InCampaignOutOfBudget'),\r\n },\r\n {\r\n container: grid.gridView.$el,\r\n anchor: $(e.target),\r\n }));\r\n}\r\n\r\nfunction p$updateBudget(update) {\r\n if (isSharedBudgetCampaign(update)) {\r\n return jsData.Budget.update(update.Budget.Id, _.pick(update.Budget, 'Amount'), { adapter: 'bulk', cacheResponse: false });\r\n } else {\r\n return jsData.Campaign.update(update.Id, update, { adapter: 'bulk', cacheResponse: false });\r\n }\r\n}\r\n\r\nfunction notifyAdInsight(id, budgetAmount, opportunityId) {\r\n const uri = 'Customers(:customer_id)/Accounts(:account_id)/Opportunity.Track',\r\n odataPath = config.get('adinsight.odata.url');\r\n const params = {\r\n 'Request': {\r\n '@odata.type': '#Microsoft.Advertiser.AdInsight.Opportunity.Core.Adoption.Interface.Entity.ApplyBulkOpportunitiesRequest',\r\n 'CampaignAdGroups': [{\r\n Key: id,\r\n Value: [],\r\n }],\r\n 'Channel': 'incontextrecommendation',\r\n 'OpportunityType': 'BudgetOpportunity',\r\n 'UserAction': 'Accept',\r\n 'UserInputs': [{\r\n '@odata.type': '#Microsoft.Advertiser.AdInsight.Opportunity.Core.Adoption.Interface.Entity.ApplyBudgetOpportunityUserInputV2',\r\n 'NewBudget': budgetAmount,\r\n 'OpportunityId': opportunityId,\r\n }],\r\n },\r\n };\r\n\r\n return odata.post(uri, {\r\n path: 'AdInsight/V2/',\r\n host: odataPath,\r\n data: params,\r\n }).then(() => {\r\n logger.logMessage([constants.LOGCATEGORY.TRACE], constants.LOGLEVEL.INFO, 'afterApplyBugetLandscape', 'Apply budget landscape success and notify ad insight finished');\r\n }).catch(() => {\r\n logger.logMessage([constants.LOGCATEGORY.TRACE], constants.LOGLEVEL.INFO, 'afterApplyBugetLandscape', 'Apply budget landscape success but notify ad insight fail');\r\n });\r\n}\r\n\r\nfunction acceptBudgtLandscapeSuggestions(grid, campaign, newBudget, budgetLandscapeView, opportunityId) {\r\n // Convert localized value to float\r\n const budgetAmount = decimalNumber.fromLocalToFloat(newBudget);\r\n\r\n dismissAlert();\r\n\r\n p$updateBudget({\r\n Id: campaign.Id,\r\n Budget: _.defaults({ Amount: budgetAmount }, campaign.Budget),\r\n }).finally(withUiBlock(budgetLandscapeView.$el.closest('.popup-container')))\r\n .finally(() => {\r\n popupUtil.close();\r\n })\r\n .then((response) => {\r\n if (response.Errors) {\r\n return Promise.reject(response);\r\n } else {\r\n jsData.Campaign.findAll({\r\n limit: 1,\r\n select: ['DeliveryStatus', 'DeliveryStatusDetails'],\r\n where: { Id: { $eq: campaign.Id } },\r\n }).then((res) => {\r\n if (res.length && res.length > 0) {\r\n if (isSharedBudgetCampaign(campaign)) {\r\n dataContextManager.updateContext(['CampaignsGrid']);\r\n grid.gridView.refresh(true);\r\n } else {\r\n grid.gridView.trigger('didEdit', _.defaults({\r\n Budget: _.defaults({ Amount: budgetAmount }, campaign.Budget),\r\n DeliveryStatus: res[0].DeliveryStatus,\r\n DeliveryStatusDetail: res[0].DeliveryStatusDetail,\r\n }, campaign));\r\n grid.gridView.refresh(true);\r\n }\r\n } else {\r\n throw new Error('empty res from jsdata');\r\n }\r\n }).catch(() => {\r\n if (isSharedBudgetCampaign(campaign)) {\r\n dataContextManager.updateContext(['CampaignsGrid']);\r\n grid.gridView.refresh(true);\r\n } else {\r\n grid.gridView.trigger('didEdit', _.defaults({\r\n Budget: _.defaults({ Amount: budgetAmount }, campaign.Budget),\r\n }, campaign));\r\n }\r\n });\r\n\r\n if (!isSharedBudgetRecommendation(budgetLandscapeView)) {\r\n notifyAdInsight(campaign.Id, budgetAmount, opportunityId);\r\n }\r\n\r\n return Promise.resolve();\r\n }\r\n })\r\n .catch((response) => {\r\n if (response.Errors != null && response.Errors.length > 0 && response.Errors[0].Message != null) {\r\n showAlert(response.Errors[0].Message);\r\n } else {\r\n showAlert(i18n.getString('ErrorNumber_-1'));\r\n }\r\n });\r\n}\r\n\r\nfunction onFetchBudgetLandscapeSuccess(grid, campaign, data, event, isForVNext = false) {\r\n const parentItem = {\r\n CustomerId: state.get('customer_id'),\r\n AcctId: state.get('account_id'),\r\n CampaignName: campaign.Name,\r\n IsDailyBudgt: false,\r\n };\r\n\r\n if (campaign.Budget && campaign.Budget.Amount) {\r\n const budgetRange = getBudgetRange(config.get('AccountCurrencyCode'));\r\n\r\n parentItem.currentBudget = campaign.Budget.Amount;\r\n if (campaign.Budget.Type === 'Monthly') {\r\n parentItem.minBudget = budgetRange.Monthly.Min;\r\n parentItem.maxBudget = budgetRange.Monthly.Max;\r\n } else {\r\n parentItem.IsDailyBudgt = true;\r\n parentItem.minBudget = budgetRange.Daily.Min;\r\n parentItem.maxBudget = budgetRange.Daily.Max;\r\n }\r\n }\r\n const processedData = processBudgetLandscapeResult(data, parentItem.currentBudget);\r\n\r\n if ((!processedData || _.isEmpty(processedData)) && (campaign.DeliveryStatus === 'CampaignBudgetPaused')) {\r\n onNoBudgetLandscapeForCampaignOutOfBudget(event, grid, isForVNext);\r\n return;\r\n }\r\n\r\n const container = $('');\r\n\r\n let budgetLandscapeView = new BudgetLandscapeView({\r\n el: container[0],\r\n campaignOutOfBudget: campaign.DeliveryStatus && campaign.DeliveryStatus === 'CampaignBudgetPaused',\r\n parentItem,\r\n helpId: 'app51009',\r\n data: processedData,\r\n appConfig: config,\r\n legacyRouter,\r\n campaignId: campaign.Id,\r\n opportunityId: _.result(processedData, 'OpportunityId'),\r\n currentBudget: parentItem.currentBudget,\r\n isForVNext,\r\n });\r\n\r\n budgetLandscapeView.on('cancel', () => {\r\n popupUtil.close();\r\n });\r\n budgetLandscapeView.on('apply', ({ newBudget }) => {\r\n acceptBudgtLandscapeSuggestions(\r\n grid,\r\n campaign,\r\n newBudget,\r\n budgetLandscapeView,\r\n _.result(processedData, 'OpportunityId'),\r\n );\r\n });\r\n\r\n budgetLandscapeView.render();\r\n popupUtil.render(container);\r\n}\r\n\r\n/**\r\n * show budget landscape panel, and bind alll related actions including apply/cancel\r\n *\r\n * @param {Object} event - The backbone click event from where the quality score cell was clicked.\r\n * @param {Object} campaign - campaign entity that triggered this call, currently this status should only happen in campagin grid\r\n * @param {Object} grid - The grid where the call was triggered\r\n * @param {Boolean} isForVNext - Is new ui or not.\r\n * @returns {undefined}.\r\n*/\r\nexport function openBudgetLandscapePanel(event, campaign, grid, isForVNext = false) {\r\n //close previous one, and stop other bindings\r\n popupUtil.close();\r\n event.stopPropagation();\r\n $('.budget-lanscape-popover-container').hide();\r\n\r\n fetchBudgetLandscape(campaign).then((res) => {\r\n onFetchBudgetLandscapeSuccess(grid, campaign, res, event, isForVNext);\r\n }).catch(() => {\r\n onNoBudgetLandscapeForCampaignOutOfBudget(event, grid, isForVNext);\r\n }).finally(withUiBlock($(event.target).parent()));\r\n}\r\n\r\nexport function showBudgetLandscapeHelpInfo(event, campaign, grid, isForVNext = false) {\r\n const container = $('.budget-lanscape-popover-container');\r\n\r\n container.show();\r\n if (container.data('campaignId') !== campaign.Id || container.find('.budget-landscape-help-info-container').length === 0) {\r\n container.data('campaignId', campaign.Id);\r\n fetchBudgetLandscape(campaign).then((res) => {\r\n const { eventName, isForecasting } = getEventForecasting(res);\r\n\r\n showHelpInfo({\r\n event,\r\n targetEntity: campaign,\r\n i18n,\r\n eventName,\r\n isForecasting,\r\n showSuggestionClickedCallback: () => {\r\n openBudgetLandscapePanel(event, campaign, grid, isForVNext);\r\n },\r\n });\r\n }).catch(() => {\r\n showHelpInfo({\r\n event,\r\n targetEntity: campaign,\r\n i18n,\r\n eventName: '',\r\n isForecasting: false,\r\n showSuggestionClickedCallback: () => {\r\n openBudgetLandscapePanel(event, campaign, grid, isForVNext);\r\n },\r\n });\r\n });\r\n }\r\n}\r\n\r\nexport function getBudgetLandscapeHelpInfoTemplate(campaign) {\r\n return fetchBudgetLandscape(campaign).then((res) => {\r\n const { eventName, isForecasting } = getEventForecasting(res);\r\n\r\n return getTemplate({\r\n targetEntity: campaign,\r\n i18n,\r\n eventName,\r\n isForecasting,\r\n });\r\n }).catch(() => {\r\n return getTemplate({\r\n targetEntity: campaign,\r\n i18n,\r\n eventName: '',\r\n isForecasting: false,\r\n });\r\n });\r\n}\r\n\r\nexport function showBidLandscapeHelpInfo(event, campaign) {\r\n const container = $('.budget-lanscape-popover-container');\r\n\r\n if (container) {\r\n container.data('campaignId', null);\r\n }\r\n\r\n showHelpInfo({\r\n event,\r\n targetEntity: campaign,\r\n i18n,\r\n eventName: null,\r\n isForecasting: false,\r\n showSuggestionClickedCallback: _.noop,\r\n });\r\n}\r\n\r\nexport function dismissBudgetLandscapeHelpInfo() {\r\n return dismissHelpInfo();\r\n}\r\n","/* global _TL_ */\r\nimport Backbone from 'backbone';\r\nimport _ from 'underscore';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { ThemeProvider } from 'react-jss';\r\nimport { getBudgetRange, MinXandrDailyBudgetRangePerCurrency } from '@bingads-webui-campaign-legacy/common-grid-config/budget/get-budget-range';\r\nimport { InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { ComponentSettings, ThemeFluent } from '@bingads-webui-theme-2018/theme-fluent';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { ScopeContext } from '@bingads-webui-react/scope-service';\r\nimport { BudgetSuggestionDialog } from '@bingads-webui-campaign-react/budget-suggestion-v2';\r\nimport { FluentProvider, webLightTheme } from '@fluentui/react-components';\r\nimport { Scenario, Activity } from '@bingads-webui-react/hoc-with-signal';\r\nimport { isXandrServing } from '@bingads-webui-campaign-react/constants';\r\n\r\nexport class BudgetSuggestionContainer extends Backbone.View {\r\n initialize({\r\n scope,\r\n campaignId,\r\n serverContext,\r\n i18n,\r\n CustomerId,\r\n AcctId,\r\n currency,\r\n budget,\r\n activity,\r\n campaign,\r\n grid,\r\n instrumentation,\r\n }) {\r\n this.scope = scope;\r\n this.campaignId = campaignId;\r\n this.serverContext = serverContext;\r\n this.i18n = i18n;\r\n this.currency = currency;\r\n this.CustomerId = CustomerId;\r\n this.AcctId = AcctId;\r\n this.budget = budget;\r\n this.parentRemove = super.remove;\r\n this.activity = activity;\r\n this.scenario = 'Edit-DisplayAds';\r\n this.campaign = campaign;\r\n this.grid = grid;\r\n this.instrumentation = instrumentation;\r\n this.showDialog = true;\r\n this.budgetRange = getBudgetRange(this.currency);\r\n\r\n if (campaign.Budget.Type === 'Monthly') {\r\n this.minBudget = this.budgetRange.Monthly.Min;\r\n this.maxBudget = this.budgetRange.Monthly.Max;\r\n } else {\r\n this.IsDailyBudgt = true;\r\n this.minBudget = this.budgetRange.Daily.Min;\r\n this.maxBudget = this.budgetRange.Daily.Max;\r\n }\r\n\r\n const { CampaignSubType, CampaignSettings } = this.campaign;\r\n\r\n if (isXandrServing(CampaignSubType, CampaignSettings) && MinXandrDailyBudgetRangePerCurrency[this.currency]) {\r\n this.minBudget = MinXandrDailyBudgetRangePerCurrency[this.currency];\r\n }\r\n\r\n this.render();\r\n }\r\n\r\n refreshGrid() {\r\n this.grid.gridView.refresh({force: true});\r\n }\r\n\r\n onTriggerDialog() {\r\n this.showDialog = !this.showDialog;\r\n this.render();\r\n }\r\n\r\n render() {\r\n const scenarioName = 'BudgetSuggestionEditing';\r\n const activityName = 'Grid';\r\n\r\n ReactDOM.render(\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ,\r\n this.el,\r\n );\r\n return this;\r\n }\r\n}\r\n","import $ from 'jquery';\r\nimport _ from 'underscore';\r\nimport pageContext from '@bingads-webui-static-legacy/page-context';\r\nimport expDateUtils from '@bingads-webui-campaign-legacy/experiments-tab/experiment-date-utils-loader';\r\n\r\nimport { DeliveryStatusPopupFactory } from '@bingads-webui-campaign-legacy/common-grid-config/column/delivery-status/index';\r\nimport { openInlineOpportunitiesPanel } from '@bingads-webui-campaign-legacy/campaigns-tab-campaigns/grid/inlineopportunity/index';\r\n\r\nimport {\r\n dismissBudgetLandscapeHelpInfo,\r\n showBudgetLandscapeHelpInfo,\r\n showBidLandscapeHelpInfo,\r\n openBudgetLandscapePanel,\r\n getBudgetLandscapeHelpInfoTemplate,\r\n} from '@bingads-webui-campaign-legacy/campaigns-tab-campaigns/grid/budgetlandscape/index';\r\nimport deliverStatusDetailTemplate from '@bingads-webui-campaign-legacy/common-grid-config/column/delivery-status/popup/delivery-status-details-popup.pug';\r\nimport { BLACKLIST } from '@bingads-webui-campaign/delivery-status-popup-factory';\r\nimport {openBudgetSuggestionDialog} from '../budget-suggestion/index';\r\n\r\nimport autobiddingTemplate from './autobidding-popover-template.pug';\r\n\r\nconst i18nGlobal = window.globalLegacyI18n.get('component/i18n/loader!legacy/global');\r\n\r\nconst isExperimentsOpenBetaEnabled = _.result(pageContext.Permissions, 'IsExperimentsOpenBetaEnabled');\r\nconst isReadOnlyUser = _.result(pageContext.Permissions, 'IsReadOnlyUser');\r\nconst showBudgetSuggestion = _.result(pageContext.Permissions.dynamic, 'EnableBudgetSuggestion');\r\n\r\nlet showCampaignRejectionReasons = (event, campaign) => {\r\n return () => {\r\n const blackList = [\r\n 'InlineOpportunity',\r\n 'BudgetSuggestions',\r\n 'CampaignBudgetPaused',\r\n ];\r\n const details = _.difference(campaign.DeliveryStatusDetails, blackList);\r\n\r\n /**\r\n * Below code is added for in-context repair recommmendation feature in old UI.\r\n * For the following 3 delivery status, it needs to add a link in the popup content for\r\n * new UI, but the pure text for old UI. So, we provide different i18n string saperately\r\n * for new UI and old UI.\r\n * 'deliveryStatus' is to get the i18n string with link.\r\n * 'deliveryStatus_WithoutLink' is to get the pure text i18n string without link.\r\n */\r\n const toBeUpdated = ['NoEligibleAdGroups', 'NoEligibleAds', 'NoEligibleKeywords'];\r\n\r\n toBeUpdated.forEach((NoEligible) => {\r\n const findIndex = details.indexOf(NoEligible);\r\n\r\n if (findIndex >= 0) {\r\n details.splice(findIndex, 1, `${NoEligible}_WithoutLink`);\r\n }\r\n });\r\n\r\n const params = {\r\n i18n: i18nGlobal,\r\n DeliveryStatusDetails: details,\r\n collectionSize: details.length > 3 ?\r\n 3 : details.length, // max of 3 reasons shown, as in other grids\r\n $,\r\n };\r\n\r\n if (isExperimentsOpenBetaEnabled && campaign.ExperimentId && campaign.AssociatedExperiment) {\r\n params.ExperimentId = campaign.ExperimentId;\r\n params.AssociatedExperiment = campaign.AssociatedExperiment;\r\n params.statusForCombinedPopup = campaign.statusForCombinedPopup;\r\n params.percentSymbol = pageContext.DecimalFormatter.percentSymbol;\r\n params.expDateUtils = expDateUtils;\r\n }\r\n\r\n const detailsHtml = deliverStatusDetailTemplate(params);\r\n\r\n $.gridPopup.Callback(detailsHtml); // eslint-disable-line new-cap\r\n };\r\n};\r\n\r\n/**\r\n * Manages creation of delivery status column popups for the Campaigns grid\r\n */\r\nclass CampaignDeliveryStatusPopupFactory extends DeliveryStatusPopupFactory {\r\n constructor({\r\n grid,\r\n perfMarker,\r\n scope,\r\n instrumentation,\r\n }) {\r\n super({\r\n grid,\r\n handler: showCampaignRejectionReasons,\r\n });\r\n\r\n this.perfMarker = perfMarker;\r\n this.scope = scope;\r\n this.instrumentation = instrumentation;\r\n }\r\n /**\r\n * Creates campaign entity object from event target using the grid associated with the factory.\r\n *\r\n * @param {Object} event - The backbone click event from where the quality score cell was clicked.\r\n * @returns {Object} campaign entity - An object with properties containing Campaign Id and Name.\r\n */\r\n getEventTargetEntity(event) {\r\n const model = this.getEventTargetModel(event);\r\n\r\n const result = {\r\n Id: model.Id,\r\n Name: model.Name,\r\n Budget: model.Budget,\r\n DeliveryStatus: model.DeliveryStatus,\r\n DeliveryStatusDetails: _.clone(model.DeliveryStatusDetails),\r\n };\r\n\r\n if (isExperimentsOpenBetaEnabled && model.ExperimentId && model.AssociatedExperiment) {\r\n result.ExperimentId = model.ExperimentId;\r\n result.AssociatedExperiment = model.AssociatedExperiment;\r\n result.statusForCombinedPopup = [\r\n 'CampaignUserPaused',\r\n 'InvalidFinancialStatusOther',\r\n 'CampaignSuspended',\r\n 'AutoBiddingLimitedByNotEnoughConversions',\r\n ];\r\n\r\n if ($(event.target).hasClass('experiment-delivery-status-override') ||\r\n _.contains(['Promoted', 'Graduated', 'Ended'], model.AssociatedExperiment.Status)\r\n ) {\r\n // Show experiment info only\r\n result.DeliveryStatusDetails = ['ExperimentInfo'];\r\n } else if (!_.contains(result.statusForCombinedPopup, result.DeliveryStatus)) {\r\n // Show original info and experiment info in different pages\r\n result.DeliveryStatusDetails = _.union(result.DeliveryStatusDetails, ['ExperimentInfo']);\r\n }\r\n // Otherwise show original info combined with experiment info within the same page\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * show budget landscape\r\n *\r\n * @param {Object} event - The backbone click event from where the quality score cell was clicked.\r\n * @param {Boolean} isForVNext - Is new ui or not.\r\n * @param {Object} serverContext - Server Context\r\n * @param {Object} activity - Activity logger.\r\n * @param {Object} newI18n - new I18n Localization component\r\n * @returns {undefined}.\r\n */\r\n showBudgetLandscapePopup(event, isForVNext = false, serverContext = null, activity = null, newI18n = {}) {\r\n dismissBudgetLandscapeHelpInfo();\r\n const entity = this.getEventTargetModel(event);\r\n\r\n if (showBudgetSuggestion) {\r\n return openBudgetSuggestionDialog(event, entity, this.grid, serverContext, activity, newI18n, this.instrumentation);\r\n } else {\r\n return openBudgetLandscapePanel(event, entity, this.grid, isForVNext);\r\n }\r\n }\r\n\r\n /**\r\n * show inilne opportunity\r\n *\r\n * @param {Object} event - The backbone click event from where the quality score cell was clicked.\r\n * @param {Boolean} isForVNext - Is new ui or not.\r\n * @returns {undefined}.\r\n */\r\n showInlineOpportunityPanel(event, isForVNext) {\r\n let deliveryStatusPopupPerfMarker;\r\n\r\n if (this.perfMarker) {\r\n deliveryStatusPopupPerfMarker = this.perfMarker.createChild('Delivery_Status_Opportunity_Popup');\r\n }\r\n\r\n const entity = this.getEventTargetEntity(event);\r\n\r\n return openInlineOpportunitiesPanel(event, entity, this.grid, isForVNext, deliveryStatusPopupPerfMarker);\r\n }\r\n\r\n showBudgetLandscapeHelpInfo(event, isForVNext = false) {\r\n const entity = this.getEventTargetModel(event);\r\n\r\n return showBudgetLandscapeHelpInfo(event, entity, this.grid, isForVNext);\r\n }\r\n\r\n getBudgetLandscapeHelpInfoTemplate(event) {\r\n const entity = this.getEventTargetModel(event);\r\n\r\n return getBudgetLandscapeHelpInfoTemplate(entity);\r\n }\r\n\r\n getAutobiddingLimitedHelpInfoTemplate(deliveryStatus, index, event) {\r\n const entity = this.getEventTargetModel(event);\r\n const campaignDeliveryStatusDetails = _.filter(entity.CampaignDeliveryStatusDetails, (detail) => !_.contains(BLACKLIST, detail.Status));\r\n const detail = campaignDeliveryStatusDetails && campaignDeliveryStatusDetails[index];\r\n const isPortfolio = detail && detail.Entity === 'PortfolioBidStrategy';\r\n let suggestedValue = detail && detail.RecommendedValue;\r\n const targetType = entity.BiddingScheme.Type;\r\n const showApply = !isPortfolio && deliveryStatus !== 'AutoBiddingLimitedInventoryLimit' && deliveryStatus !== 'AutoBiddingPortfolioBidStrategyTrainingStatus' && deliveryStatus !== 'AutoBiddingLimitedUnAttainableTarget';\r\n const applyStringMap = {\r\n AutoBiddingLimitedMaxCPCRestriction: 'ApplyRecommendedCPC',\r\n AutoBiddingLimitedBudgetRestriction: 'ApplyRecommendedBudget',\r\n AutoBiddingLimitedUnAttainableTarget: 'ApplyRecommendedTarget',\r\n };\r\n\r\n suggestedValue = suggestedValue || 0;\r\n\r\n let formattedSuggestedValue = i18nGlobal.realI18n.formatDecimal(suggestedValue, {\r\n minimumFractionDigits: 2,\r\n maximumFractionDigits: 2,\r\n });\r\n\r\n let detailMessage = i18nGlobal.getString(`Message_DeliveryStatus_${deliveryStatus}${isPortfolio ? '_Portfolio' : ''}`).replace('{suggestedValue}', formattedSuggestedValue);\r\n\r\n if (deliveryStatus === 'AutoBiddingLimitedUnAttainableTarget') {\r\n switch (targetType) {\r\n case 'MaxConversions':\r\n case 'TargetCpa':\r\n detailMessage = i18nGlobal.getString('Message_DeliveryStatus_AutoBiddingLimitedUnAttainableTarget_TCPA');\r\n break;\r\n case 'MaxConversionValue':\r\n case 'TargetRoas':\r\n detailMessage = i18nGlobal.getString('Message_DeliveryStatus_AutoBiddingLimitedUnAttainableTarget_TROAS');\r\n break;\r\n case 'TargetImpressionShare': // no support from backend\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n const activity = this.instrumentation && this.instrumentation.autobiddingLimitedStatus.create().hoverDeliveryStatus.create();\r\n\r\n if (activity) {\r\n activity.trace(JSON.stringify({\r\n campaignId: entity.Id,\r\n deliveryStatus,\r\n suggestedValue,\r\n isPortfolio,\r\n }));\r\n }\r\n\r\n return autobiddingTemplate({\r\n deliveryStatus,\r\n detailMessage,\r\n learnMoreString: i18nGlobal.getString('LearnMoreAboutThisStatus'),\r\n showApply,\r\n applyString: showApply ? i18nGlobal.getString(applyStringMap[deliveryStatus]) : '',\r\n enableApply: !isReadOnlyUser,\r\n });\r\n }\r\n\r\n showLandscapeDisabledHelpInfo(event) {\r\n const entity = this.getEventTargetModel(event);\r\n const { DeliveryStatus } = entity;\r\n\r\n return showBidLandscapeHelpInfo(event, { landscapeDisabled: true, DeliveryStatus });\r\n }\r\n\r\n dismissLandscapeDisabledHelpInfo() {\r\n dismissBudgetLandscapeHelpInfo();\r\n }\r\n}\r\n\r\nexport { CampaignDeliveryStatusPopupFactory };\r\n","import config from '@bingads-webui-component-legacy/config/index';\r\nimport state from '@bingads-webui-component-legacy/state/index';\r\nimport { BudgetSuggestionContainer } from './container';\r\n\r\n/**\r\n * show budget landscape panel, and bind alll related actions including apply/cancel\r\n *\r\n * @param {Object} event - The backbone click event from where the quality score cell was clicked.\r\n * @param {Object} campaign - campaign entity that triggered this call, currently this status should only happen in campagin grid\r\n * @param {Object} grid - The grid where the call was triggered\r\n * @param {Object} serverContext - Server Context\r\n * @param {Object} activity - Activity logger.\r\n * @param {Object} newI18n - new I18n Localization component\r\n * @param {Object} instrumentation - instrumentation object\r\n * @returns {undefined}.\r\n*/\r\nexport function openBudgetSuggestionDialog(event, campaign, grid, serverContext = null, activity = null, newI18n = {}, instrumentation = {}) {\r\n new BudgetSuggestionContainer({\r\n i18n: newI18n,\r\n campaign,\r\n campaignId: campaign.Id,\r\n campaignType: campaign.CampaignType,\r\n budget: campaign.Budget,\r\n currency: config.get('AccountCurrencyCode'),\r\n CustomerId: state.get('customer_id'),\r\n AcctId: state.get('account_id'),\r\n serverContext,\r\n activity,\r\n grid,\r\n instrumentation,\r\n });\r\n}\r\n","import { openInlineOpportunityForCampaign } from '@bingads-webui-campaign-legacy/inline-opportunity/view/panel-manager';\r\n\r\n/**\r\n * show inline opportunity, and bind all related actions including apply/cancel\r\n * todo: update it after migrate budget landscape part\r\n *\r\n * @param {Object} event - The backbone click event from where the quality score cell was clicked.\r\n * @param {Object} campaign - campaign entity that triggered this call, currently this status should only happen in campagin grid\r\n * @param {Object} grid - projection grid instance\r\n * @param {Boolean} isForVNext - Is new ui or not.\r\n * @param {Object} perfMarker performance marker\r\n * @returns {undefined}.\r\n */\r\nexport function openInlineOpportunitiesPanel(event, campaign, grid, isForVNext, perfMarker) {\r\n event.stopImmediatePropagation();\r\n\r\n openInlineOpportunityForCampaign(event, campaign.Id, campaign.Name, isForVNext, perfMarker);\r\n}\r\n","import _ from 'underscore';\r\nimport appConfig from '@bingads-webui-component-legacy/config/index';\r\nimport headerTemplate from '@bingads-webui-component-legacy/bingads-grid/template/header.pug';\r\n\r\nconst permissions = appConfig.get('Permissions') || {};\r\n\r\n/**\r\n * Abstracts a grid column configuration for projection grid.\r\n *\r\n * See {@link https://microsoft.github.io/projection-grid/} for description of the fields provided\r\n * by the getters and setters here.\r\n */\r\nclass BaseGridColumn {\r\n /**\r\n * Constructs a GridColumn object.\r\n */\r\n constructor() {\r\n this.model = {\r\n // This must use an arrow function in order to bind 'this'\r\n template: (local) => {\r\n return this.template(local.value);\r\n },\r\n };\r\n }\r\n\r\n /**\r\n * Method Can be override by child class to provide a template for the grid cell.\r\n * If subclass already set formatter, then this is not required\r\n *\r\n * @returns {String} the template HTML text.\r\n */\r\n template() {\r\n throw new Error('Error: a subclass of GridColumn must implement the abstract template method.');\r\n }\r\n\r\n setName(name) {\r\n this.model.name = name;\r\n }\r\n\r\n get name() {\r\n return this.model.name;\r\n }\r\n\r\n setTitle(title) {\r\n this.model.title = title;\r\n if (!_.has(this.model.headAttributes, 'title')) {\r\n this.setTooltip(title);\r\n }\r\n }\r\n\r\n get title() {\r\n return this.model.title;\r\n }\r\n\r\n setSortable(sortable) {\r\n this.model.sortable = sortable;\r\n }\r\n\r\n setEditable(editable) {\r\n if (permissions.IsReadOnlyUser) {\r\n return;\r\n }\r\n\r\n this.model.editable = editable;\r\n }\r\n\r\n setBodyClasses(classes) {\r\n this.model.bodyClasses = classes;\r\n }\r\n\r\n setHeadClasses(classes) {\r\n this.model.headClasses = classes;\r\n }\r\n\r\n setField(field) {\r\n this.model.field = field;\r\n }\r\n\r\n setHelpId(helpId) {\r\n this.model.helpId = helpId;\r\n }\r\n\r\n setType(type) {\r\n this.model.type = type;\r\n }\r\n\r\n /**\r\n * Method sets column property. By default, the whole model is passed\r\n * back from property.get()\r\n *\r\n * @param {Array} properties List of properties to expose to plugins\r\n * @returns {void}\r\n */\r\n setProperties(properties) {\r\n this.model.property = {\r\n get(model) {\r\n return model;\r\n },\r\n key: properties,\r\n };\r\n }\r\n\r\n setHeaderHtml(headerHtml) {\r\n this.model.html = headerHtml;\r\n }\r\n\r\n setTooltip(tooltip) {\r\n this.model.headAttributes = _.defaults({\r\n title: tooltip,\r\n }, this.model.headAttributes);\r\n }\r\n\r\n getConfig() {\r\n if (_.isEmpty(this.model.html) && !_.isEmpty(this.model.helpId)) {\r\n this.model.html = headerTemplate(this.model); // udpate header to support popupHelp\r\n }\r\n\r\n return this.model;\r\n }\r\n\r\n toJSON() {\r\n return this.getConfig();\r\n }\r\n\r\n /**\r\n * Make a grid columns config from a list of column classes.\r\n *\r\n * @param {Array} columnClasses An array of column classes.\r\n * @param {Object} view Has a grid created by pgrid.factory().create()\r\n * @returns {Array} a grid columns config array.\r\n */\r\n static newColumnsConfig(columnClasses, view) {\r\n const columnsConfig = _.map(columnClasses, (Column) => new Column(view).getConfig());\r\n\r\n return columnsConfig;\r\n }\r\n\r\n /**\r\n * Make a list of column names from a list of column classes.\r\n *\r\n * @param {Array} columnClasses An array of column classes.\r\n * @returns {Array} an array of column names.\r\n */\r\n static getColumnNames(columnClasses) {\r\n const columnsConfig = BaseGridColumn.newColumnsConfig(columnClasses);\r\n\r\n return _.map(columnsConfig, (columnConfig) => columnConfig.name);\r\n }\r\n}\r\n\r\nexport { BaseGridColumn };\r\n","import _ from 'underscore';\r\nimport pageContext from '@bingads-webui-static-legacy/page-context';\r\n\r\nimport { BaseGridColumn } from '../base-grid-column';\r\nimport deliveryStatusTemplate from './delivery-status-template.pug';\r\nimport { deliveryStatusBaseColumn } from '@bingads-webui-campaign-legacy/campaigns-tab-campaigns/grid/columns-config-base';\r\n\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!legacy/global');\r\n\r\nclass DeliveryStatusColumn extends BaseGridColumn {\r\n constructor() {\r\n super();\r\n\r\n const deliveryStatusColumn = deliveryStatusBaseColumn();\r\n\r\n this.setName(deliveryStatusColumn.name);\r\n this.setSortable('DeliveryStatus');\r\n this.setTitle(i18n.get('ColumnName_DeliveryStatus'));\r\n this.setProperties(deliveryStatusColumn.property);\r\n this.setHelpId('Page_CampaignGrids_Delivery');\r\n }\r\n\r\n template(model) {\r\n let name = model.Name;\r\n\r\n if (_.isUndefined(name) && !_.isUndefined(model.AdGroup)) {\r\n name = model.AdGroup.Name;\r\n }\r\n if (_.isUndefined(name) && !_.isUndefined(model.Campaign)) {\r\n name = model.Campaign.Name;\r\n }\r\n\r\n this.campaignEntityObject = {\r\n Name: name,\r\n Id: model.Id,\r\n };\r\n\r\n const params = {\r\n Id: model.Id,\r\n DeliveryStatus: model.DeliveryStatus,\r\n i18n,\r\n Budget: model.Budget,\r\n IsAppealable: model.IsAppealable,\r\n };\r\n\r\n if (_.result(pageContext.Permissions, 'IsExperimentsOpenBetaEnabled') && model.ExperimentId && model.AssociatedExperiment) {\r\n params.showEllipsisForExperiment = true;\r\n }\r\n\r\n return deliveryStatusTemplate(params);\r\n }\r\n}\r\n\r\nexport { DeliveryStatusColumn };\r\n","import $ from 'jquery';\r\nimport _ from 'underscore';\r\n\r\n/**\r\n * Manages creation of delivery status column popups\r\n */\r\nclass DeliveryStatusPopupFactory {\r\n /**\r\n * Constructs the factory, associating with a grid and rejection view handler\r\n * @param {Object} grid - The grid to which this factory will be associated\r\n * @param {Object} handler - Rejection view handler\r\n */\r\n constructor({\r\n grid,\r\n handler,\r\n }) {\r\n this.grid = grid;\r\n this.handler = handler;\r\n }\r\n /**\r\n * Creates entity object from event target using the grid associated with the factory.\r\n *\r\n * @param {Object} event - The backbone click event from where the quality score cell was clicked.\r\n * @returns {Object} entity - An object which contains Id as property.\r\n */\r\n getEventTargetEntity(event) {\r\n const model = this.getEventTargetModel(event);\r\n\r\n return {\r\n Id: model.Id,\r\n };\r\n }\r\n /**\r\n * Gets model object from event target using the grid associated with the factory.\r\n *\r\n * @param {Object} event - The backbone click event from where the quality score cell was clicked.\r\n * @returns {Object} model - Model associated with the entity targeted by the event passed as an argument.\r\n */\r\n getEventTargetModel(event) {\r\n const key = this.grid.gridView.keyOfElement(event.target);\r\n\r\n return this.grid.gridView.itemWithKey(key);\r\n }\r\n /**\r\n * show campaign reject reasons\r\n * Todo: apjia:update after odata side support return status details, or have new interface that do this\r\n * Todo: if each entity return same StatusDeliveryDetails, then merge different handlers into one\r\n *\r\n * @param {Object} event - The backbone click event from where the quality score cell was clicked.\r\n * @returns {undefined}.\r\n */\r\n showRejectionPopup(event) {\r\n const entity = this.getEventTargetEntity(event);\r\n\r\n if (!_.isUndefined(this.handler)) {\r\n $.gridPopup.clickEvent(event,\r\n this.handler(event, entity),\r\n 'rejectionContainer',\r\n '',\r\n true);\r\n }\r\n\r\n // return popup container to allow view to hide popup\r\n return $('#rejectionContainer');\r\n }\r\n\r\n /**\r\n * close rejection popup handler\r\n * call this function to close closest rejection container\r\n * @param {Object} event the backbone click event from where the click from\r\n * @returns {undefined}\r\n */\r\n closeRejectionPopup(event) {\r\n if (!$(event.target).closest('#rejectionContainer').length) {\r\n if (document.getElementById('rejectionContainer').style.display !== 'none') {\r\n $('#rejectionContainer').css('display', 'none');\r\n $.gridPopup.ResetImage(event); //eslint-disable-line\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport { DeliveryStatusPopupFactory };\r\n","import $ from 'jquery';\r\n\r\nconst i18n = window.globalLegacyI18n.get('component/i18n/loader!legacy/global');\r\n\r\n/**\r\n * show the quality score detail in the dialog next to it\r\n *\r\n * @param {Object} event - The backbone click event from where the quality score cell was clicked.\r\n * @param {Object} qualityScore - The qualityscore detailed object.\r\n * @param {String} qsContainerId - The container id to show the quality score detail info.\r\n * @returns {undefined}.\r\n */\r\nexport function showQualityScoreDetail(event, qualityScore, qsContainerId) {\r\n const {\r\n KeywordRelevance,\r\n LandingPageQuality,\r\n LandingPageRelevance,\r\n OverallQualityScore,\r\n } = qualityScore || {};\r\n\r\n $.gridPopup.clickEvent(event, () => {\r\n $.advertiser.controls.qualityscore.DisplayQsFlyout( // eslint-disable-line new-cap\r\n KeywordRelevance || 0,\r\n LandingPageQuality || 0,\r\n LandingPageRelevance || 0,\r\n OverallQualityScore || 0);\r\n },\r\n qsContainerId,\r\n `${i18n.getString('QualityScoreFlyOut_TotalScoreHeading')} ${OverallQualityScore} ${i18n.getString('QualityScoreFlyOut_TotalScore')}`);\r\n}\r\n","import _ from 'underscore';\r\nimport globalConfig from '@bingads-webui-component-legacy/config/index';\r\nimport * as putil from '@bingads-webui-universal/primitive-utilities';\r\nimport preferenceService from '@bingads-webui-component-legacy/preference/service/index';\r\nimport {\r\n initialize, updateEntitySchemaForSOV,\r\n updateEntitySchemaForRemovedPerformanceMetrics,\r\n enableForAudienceSOVFeatures,\r\n} from '@bingads-webui-campaign/common-grid-config';\r\n\r\ninitialize({ globalConfig, preferenceService });\r\n\r\nexport { updateEntitySchemaForSOV, updateEntitySchemaForRemovedPerformanceMetrics, enableForAudienceSOVFeatures };\r\n\r\nconst Permissions = globalConfig.get('Permissions');\r\n\r\n// get whether feature is enabled by property name\r\nfunction getFeaturePermissionByPropertyName(propertyName) {\r\n switch (propertyName.toLowerCase()) {\r\n case 'campaigntype':\r\n return !Permissions.IsEnhancedShoppingCampaignAllowed &&\r\n !Permissions.IsDynamicSearchAdsV1Enabled &&\r\n !Permissions.IsAIMCampaignEnabled;\r\n\r\n case 'associationscount':\r\n case 'trackingstatus':\r\n return Permissions.IsAudienceGridNewColumnsSupported;\r\n\r\n case 'audiencetrackingstatus':\r\n return Permissions.IsAIMCampaignEnabled ||\r\n Permissions.IsRemarketingSimilarAudienceAllowed ||\r\n (Permissions.IsCustomerHierarchyEnabled && Permissions.IsSharedLibraryPhase1Enabled);\r\n\r\n case 'aimreach':\r\n return Permissions.IsAudienceListSizeEnabled;\r\n\r\n case 'isexperiment':\r\n return Permissions.IsExperimentsEnabled &&\r\n // only enable experiment filter in account scope\r\n !globalConfig.get('CurrentCampaign');\r\n\r\n case 'ismainconversiongoal':\r\n return true; // [hagu1]todo: skip this method for 'ismainconversiongoal'\r\n\r\n default:\r\n return false;\r\n }\r\n}\r\n\r\nfunction removeEnumValuesFromProperty(schema, propertyName, removeEnumArray, depth = 0) {\r\n if (depth > 1) {\r\n return schema;\r\n }\r\n\r\n if (!_.isEmpty(schema.properties[propertyName])) {\r\n schema.properties[propertyName].enum = _.difference(schema.properties[propertyName].enum, removeEnumArray);\r\n }\r\n\r\n _.each(schema.properties, (property) => {\r\n if (_.has(property, 'schema')) {\r\n removeEnumValuesFromProperty(property.schema, propertyName, removeEnumArray, depth + 1);\r\n }\r\n });\r\n\r\n return schema;\r\n}\r\n\r\nfunction updateEnumValueSets(schema) {\r\n const entityName = schema.name.toLowerCase();\r\n\r\n // Listing here all the enum valus to remove in different pilots (or always remove)\r\n const disabledTargets = [\r\n {\r\n disabled: !Permissions.IsDynamicSearchAdsV1Enabled && (entityName === 'ad'),\r\n property: 'Type',\r\n enumValueSets: ['DynamicSearch'], // this will not used in any where in filter options\r\n },\r\n {\r\n disabled: !Permissions.IsDynamicSearchAdsV1Enabled && (entityName === 'campaign'),\r\n property: 'CampaignType',\r\n enumValueSets: ['DynamicSearchAds'], // remove dynamic search ads from other entity\r\n },\r\n {\r\n // Bug 1692445: BetaProd: [Campaigns] Some check box conditions are not shown for filter of Campaign status/Campaign type/Bid strategy type on prod.\r\n // This should be controlled by pilot\r\n disabled: !Permissions.IsSmartCampaignPhase2Enabled && (entityName === 'campaign'),\r\n property: 'CampaignType',\r\n enumValueSets: ['Smart'],\r\n },\r\n {\r\n disabled: entityName === 'campaign' && !Permissions.IsSmartCampaignPhase2Enabled,\r\n property: 'Status',\r\n enumValueSets: ['InProgress'], // remove this when there are localized strings for this enum value\r\n },\r\n {\r\n disabled: true,\r\n property: 'Delivery',\r\n enumValueSets: ['CampaignInProgress'],\r\n },\r\n {\r\n disabled: !Permissions.IsSmartCampaignPhase2Enabled,\r\n property: 'DeliveryStatus',\r\n enumValueSets: ['CampaignInProgress'],\r\n },\r\n {\r\n disabled: true,\r\n property: 'Type',\r\n enumValueSets: ['HotelBookingGoal'],\r\n },\r\n {\r\n disabled: true,\r\n property: 'DisplayBiddingStrategyType',\r\n enumValueSets: ['InheritFromParent', 'MaxRoas', 'TargetCostPerSale'], // this will not used in any where in filter options\r\n },\r\n {\r\n disabled: !(Permissions.IsCampaignTargetROASBidStrategyEnabled ||\r\n Permissions.IsNewCampaignTargetROASBidStrategyEnabled),\r\n property: 'DisplayBiddingStrategyType',\r\n enumValueSets: ['TargetRoas'],\r\n },\r\n {\r\n disabled: !Permissions.IsMaximizeConversionValueEnabled && !Permissions.IsSmartShoppingCampaignEnabled,\r\n property: 'DisplayBiddingStrategyType',\r\n enumValueSets: ['MaxConversionValue'],\r\n },\r\n {\r\n disabled: !Permissions.IsCostPerSaleEnabled,\r\n property: 'DisplayBiddingStrategyType',\r\n enumValueSets: ['CostPerSale'],\r\n },\r\n {\r\n disabled: !Permissions.IsTargetImpressionShareEnabled,\r\n property: 'DisplayBiddingStrategyType',\r\n enumValueSets: ['TargetImpressionShare'],\r\n },\r\n {\r\n disabled: !Permissions.IsAIMCampaignEnabled && (entityName === 'campaign'),\r\n property: 'CampaignType',\r\n enumValueSets: ['Audience'], // remove audience campaign from other entity\r\n },\r\n {\r\n disabled: !(Permissions.IsCustomerHierarchyEnabled && Permissions.IsSharedLibraryPhase1Enabled),\r\n property: 'AudienceTrackingStatus',\r\n enumValueSets: ['InactiveDueToTagUnavailable'],\r\n },\r\n {\r\n disabled: !Permissions.IsAdsGlobalizationPhase1Enabled,\r\n property: 'Language',\r\n enumValueSets: ['Greek', 'Polish', 'Bulgarian', 'Croatian', 'Czech', 'Estonian', 'Hungarian', 'Latvian', 'Lithuanian', 'Maltese', 'Romanian', 'Slovak', 'Slovenian'],\r\n },\r\n {\r\n disabled: !Permissions.IsAdsGlobalizationPhase2Enabled,\r\n property: 'Language',\r\n enumValueSets: ['Turkish', 'Serbian', 'Bosnian', 'Albanian', 'Macedonian', 'Icelandic'],\r\n },\r\n {\r\n disabled: !Permissions.IsAdsGlobalizationPhase6Enabled,\r\n property: 'Language',\r\n enumValueSets: ['Arabic', 'Hebrew', 'Russian'],\r\n },\r\n {\r\n disabled: !Permissions.IsAdsGlobalizationPhase2JapanEnabled,\r\n property: 'Language',\r\n enumValueSets: ['Japanese'],\r\n },\r\n {\r\n disabled: !Permissions.IsAdsGlobalizationPhase9Enabled,\r\n property: 'Language',\r\n enumValueSets: ['Hindi', 'Malay', 'Thai', 'Indonesian', 'Tagalog'],\r\n },\r\n {\r\n disabled: !Permissions.IsAdsGlobalizationPhase9VIEnabled,\r\n property: 'Language',\r\n enumValueSets: ['Vietnamese'],\r\n },\r\n ];\r\n\r\n _.chain(disabledTargets)\r\n .filter({disabled: true})\r\n .each((target) => {\r\n removeEnumValuesFromProperty(schema, target.property, target.enumValueSets);\r\n });\r\n}\r\n\r\nexport function enableForExperimentFeature(schema) {\r\n const isInPilot = Permissions.IsExperimentsEnabled;\r\n const campaignProperty = schema.properties.Campaign;\r\n const isExperimentProperty = putil.get(campaignProperty, 'schema.properties.IsExperiment');\r\n\r\n if (isInPilot && campaignProperty && isExperimentProperty) {\r\n isExperimentProperty.filterable = true;\r\n }\r\n\r\n return schema;\r\n}\r\n\r\nexport function enableForMainGoalSelectionFeature(schema) {\r\n const performanceMetricsProperty = schema.properties.PerformanceMetrics;\r\n const allConvMetrics = [\r\n 'AllConversionCPA',\r\n 'AllConversions',\r\n 'AllConversionRate',\r\n 'AllConversionAdvertiserReportedRevenue',\r\n 'AllConversionRevenueOnAdSpend',\r\n ];\r\n\r\n _.each(allConvMetrics, (allConvMetric) => {\r\n if (performanceMetricsProperty && putil.get(performanceMetricsProperty.schema.properties, allConvMetric)) {\r\n schema.properties.PerformanceMetrics.schema.properties[allConvMetric].filterable = true;\r\n }\r\n });\r\n\r\n return schema;\r\n}\r\n\r\nexport function enableForViewThroughConversionsFeature(schema) {\r\n const {\r\n IsViewThroughConversionEnabled,\r\n IsViewThroughConversionsRevenueEnabled,\r\n } = Permissions;\r\n const performanceMetricsProperty = schema.properties.PerformanceMetrics;\r\n\r\n const viewThroughConvMetrics = [\r\n 'ViewThroughConversions',\r\n ];\r\n\r\n _.each(viewThroughConvMetrics, (viewThroughConvMetric) => {\r\n if (performanceMetricsProperty && putil.get(performanceMetricsProperty.schema.properties, viewThroughConvMetric)) {\r\n schema.properties.PerformanceMetrics.schema.properties[viewThroughConvMetric].filterable = IsViewThroughConversionEnabled || false;\r\n }\r\n });\r\n\r\n const viewThroughConvRevenueMetrics = [\r\n 'ViewThroughConversionsRevenue',\r\n 'ViewThroughConversionsCPA',\r\n 'ViewThroughConversionsReturnOnAdSpend',\r\n 'ViewThroughConversionsRate',\r\n ];\r\n\r\n _.each(viewThroughConvRevenueMetrics, (metric) => {\r\n if (performanceMetricsProperty && putil.get(performanceMetricsProperty.schema.properties, metric)) {\r\n schema.properties.PerformanceMetrics.schema.properties[metric].filterable = IsViewThroughConversionsRevenueEnabled || false;\r\n }\r\n });\r\n\r\n return schema;\r\n}\r\n\r\nfunction enableFilterForPilotProperties(schema, propertyNameArray) {\r\n _.each(propertyNameArray, (propertyName) => {\r\n if (getFeaturePermissionByPropertyName(propertyName) && !_.isEmpty(schema.properties[propertyName])) {\r\n schema.properties[propertyName].filterable = true;\r\n }\r\n });\r\n\r\n return schema;\r\n}\r\n\r\n\r\nexport function updateFilterSchemaForPilotFeatures(originalSchema) {\r\n const schema = putil.cloneDeep(originalSchema);\r\n\r\n // first enable properties (filter type) for features in pilot\r\n updateEntitySchemaForSOV(schema, false);\r\n updateEntitySchemaForRemovedPerformanceMetrics(schema, false);\r\n enableForExperimentFeature(schema);\r\n enableForMainGoalSelectionFeature(schema);\r\n enableForViewThroughConversionsFeature(schema);\r\n enableForAudienceSOVFeatures(schema);\r\n enableFilterForPilotProperties(schema, ['CampaignType', 'AssociationsCount', 'TrackingStatus', 'AudienceTrackingStatus', 'AIMReach', 'IsExperiment', 'IsMainConversionGoal']);\r\n\r\n // enable enum values (filter value set) for features in pilot\r\n updateEnumValueSets(schema);\r\n return schema;\r\n}\r\n","import _ from 'underscore';\r\nimport {\r\n jsdataRawDataPlugin as commonJsdataRawDataPlugin,\r\n} from '@bingads-webui/projection-grid-js-data-raw-data';\r\n\r\nexport const jsdataRawDataPlugin = commonJsdataRawDataPlugin({\r\n getRawData: _.property('raw'),\r\n});\r\n","import AssociationView from '@bingads-webui-static-legacy/bulk-edit/view/label/association';\r\nimport { showError as error, showSuccess as success } from '@bingads-webui-component-legacy/toast/index';\r\nimport template from '@bingads-webui-static-legacy/bulk-edit/template/label/association.pug';\r\nimport globalConfig from '@bingads-webui-component-legacy/config/index';\r\nimport { getLoadDirectlyLinkedAccounts } from '@bingads-webui-component-legacy/bingads-grid/service/linked-accounts-preferences';\r\n\r\nconst i18nGlobal = window.globalLegacyI18n.get('component/i18n/loader!legacy/global');\r\nconst permissions = globalConfig.get('permissions');\r\n\r\nexport class LabelAssociationView extends AssociationView {\r\n initialize({\r\n el,\r\n stats,\r\n selectionInfo,\r\n grid,\r\n isForVNext,\r\n gridName,\r\n disableDeselectAll = false,\r\n isManagementRequest = undefined,\r\n }) {\r\n this.selectionInfo = selectionInfo;\r\n this.grid = grid;\r\n this.disableDeselectAll = disableDeselectAll;\r\n const loadDirectlyLinkedAccountsObj = getLoadDirectlyLinkedAccounts(gridName);\r\n const loadDirectlyLinkedAccountsValue = loadDirectlyLinkedAccountsObj ? loadDirectlyLinkedAccountsObj.loadDirectlyLinkedAccounts : 'false';\r\n const loadDirectlyLinkedAccounts = loadDirectlyLinkedAccountsValue === true || loadDirectlyLinkedAccountsValue === 'true' ? 'true' : 'false';\r\n\r\n const options = {\r\n el,\r\n template,\r\n entity: this.selectionInfo.entityType,\r\n stats,\r\n onOperationSuccess: this.onOperationSuccess(this.selectionInfo.selectedRowCount),\r\n onOperationFailure: () => error(i18nGlobal.getString('label_association_error')),\r\n grid,\r\n isForVNext,\r\n loadDirectlyLinkedAccounts,\r\n };\r\n\r\n if (permissions && permissions.IsAccountLabelsEnabled && this.selectionInfo.entityType === 'Account') {\r\n options.scope = 'Customer';\r\n options.isManagementRequest = isManagementRequest;\r\n }\r\n super.initialize(options);\r\n }\r\n\r\n render() {\r\n if (this.selectionInfo.allPages) {\r\n this.ko_model.showProgress(true);\r\n this.ko_model.showButtonBar(false);\r\n } else {\r\n this.ko_model.showPanel = false;\r\n }\r\n this.renderBulkEditJobView();\r\n this.submitJob();\r\n return this;\r\n }\r\n\r\n onOperationSuccess(num) {\r\n return () => {\r\n success(i18nGlobal.getString('label_association_success', num));\r\n if (!this.disableDeselectAll) {\r\n if (this.grid.pgridPlugins && this.grid.pgridPlugins.crossPageSelectAll) {\r\n this.grid.pgridPlugins.crossPageSelectAll.deselectAll();\r\n } else {\r\n this.grid.gridView.deselectAll();\r\n }\r\n }\r\n };\r\n }\r\n}\r\n","import { isFunction } from 'underscore';\r\nimport { applyBindings } from 'knockout';\r\nimport koSchema from '@bingads-webui-component-legacy/ko-schema/index';\r\n\r\n/**\r\n * The base class of the viewModels in the page\r\n * Provide the functionalities including ko-schema hooking-up, common error hanlding logic, etc.\r\n */\r\nclass CommonViewModel {\r\n configSchema(schema = null, keys = [], model = null, customValidators = {}) {\r\n koSchema.properties(this, schema, keys, model, customValidators);\r\n }\r\n\r\n set el(el) {\r\n this.bindEl(el);\r\n }\r\n\r\n bindEl(el) {\r\n applyBindings(this, el);\r\n }\r\n\r\n showGenericErrors() {\r\n if (this.errors && isFunction(this.errors.add)) {\r\n this.errors.add();\r\n }\r\n }\r\n}\r\n\r\nexport default CommonViewModel;\r\n","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (ariaLabel, disableItem, hideAddToList, i18n, value) {if (hideAddToList) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"col-sm-7\\\"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = value) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-5\\\"\\u003E\\u003Ca href=\\\"javascript:void(0)\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('DSA_AutoTargets_Category_Grid_Row_Select')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cdiv class=\\\"col-sm-8\\\"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = value) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-3\\\"\\u003E\";\nif (disableItem) {\npug_html = pug_html + \"\\u003Cspan class=\\\"enabled arrow-button form-control-disabled\\\"\\u003E\\u003C\\u002Fspan\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cspan\" + (\" class=\\\"enabled arrow-button clickable\\\"\"+pug.attr(\"aria-label\", ariaLabel, true, true)+\" role=\\\"button\\\"\") + \"\\u003E\\u003C\\u002Fspan\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\n}}.call(this,\"ariaLabel\" in locals_for_with?locals_for_with.ariaLabel:typeof ariaLabel!==\"undefined\"?ariaLabel:undefined,\"disableItem\" in locals_for_with?locals_for_with.disableItem:typeof disableItem!==\"undefined\"?disableItem:undefined,\"hideAddToList\" in locals_for_with?locals_for_with.hideAddToList:typeof hideAddToList!==\"undefined\"?hideAddToList:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"value\" in locals_for_with?locals_for_with.value:typeof value!==\"undefined\"?value:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n) {pug_html = pug_html + \"\\u003Cdiv class=\\\"panel-form noPadding grid-container\\\"\\u003E\\u003Cdiv class=\\\"panel-heading\\\"\\u003E\\u003Ch3 class=\\\"panel-title\\\"\\u003E\\u003Cspan class=\\\"h5 type-bold\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('DSA_Target_Category_Container_Title')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fh3\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"panel-body noPadding\\\"\\u003E\\u003Cdiv class=\\\"row\\\"\\u003E\\u003Cdiv class=\\\"autoSuggSearchBoxContainer col-sm-7\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"grid-table\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"pager\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"alert alert-danger category-error\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('DSA_Dynamic_AutoTargets_Error_Category_Load_Failed')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";}.call(this,\"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/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (ariaLabel, categoryNames, isParent) {pug_html = pug_html + \"\\u003Cdiv class=\\\"col-sm-1\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-8\\\"\\u003E\";\n// iterate categoryNames\n;(function(){\n var $$obj = categoryNames;\n if ('number' == typeof $$obj.length) {\n for (var pug_index0 = 0, $$l = $$obj.length; pug_index0 < $$l; pug_index0++) {\n var item = $$obj[pug_index0];\nif (item.isTail) {\npug_html = pug_html + \"\\u003Cdiv\\u003E\";\nif (isParent) {\npug_html = pug_html + \"\\u003Ca\" + (\" class=\\\"next-level\\\"\"+\" href=\\\"javascript:void(0)\\\"\"+pug.attr(\"aria-label\", ariaLabel, true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = item.name) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = item.name) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cspan class=\\\"inactive\\\"\\u003E\" + (pug.escape(null == (pug_interp = item.name) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\n}\n }\n } else {\n var $$l = 0;\n for (var pug_index0 in $$obj) {\n $$l++;\n var item = $$obj[pug_index0];\nif (item.isTail) {\npug_html = pug_html + \"\\u003Cdiv\\u003E\";\nif (isParent) {\npug_html = pug_html + \"\\u003Ca\" + (\" class=\\\"next-level\\\"\"+\" href=\\\"javascript:void(0)\\\"\"+pug.attr(\"aria-label\", ariaLabel, true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = item.name) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = item.name) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cspan class=\\\"inactive\\\"\\u003E\" + (pug.escape(null == (pug_interp = item.name) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\n}\n }\n }\n}).call(this);\n\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";}.call(this,\"ariaLabel\" in locals_for_with?locals_for_with.ariaLabel:typeof ariaLabel!==\"undefined\"?ariaLabel:undefined,\"categoryNames\" in locals_for_with?locals_for_with.categoryNames:typeof categoryNames!==\"undefined\"?categoryNames:undefined,\"isParent\" in locals_for_with?locals_for_with.isParent:typeof isParent!==\"undefined\"?isParent:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n, title) {pug_html = pug_html + \"\\u003Cdiv class=\\\"col-sm-1\\\"\\u003E\\u003Cspan\" + (\" class=\\\"glyphicon glyphicon-arrow-left clickable\\\"\"+\" tabindex=\\\"0\\\" role=\\\"button\\\"\"+pug.attr(\"aria-label\", i18n.get('DSA_AutoTargets_Category_Grid_To_Previous_Level'), true, true)) + \"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-8\\\"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = title) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"title\" in locals_for_with?locals_for_with.title:typeof title!==\"undefined\"?title:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n) {pug_html = pug_html + \"\\u003Cdiv class=\\\"panel-form noPadding\\\"\\u003E\\u003Cdiv class=\\\"panel-heading\\\"\\u003E\\u003Ch3 class=\\\"panel-title\\\"\\u003E\\u003Cspan class=\\\"h5 type-bold\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get(\"DSA_Target_AllWebpage_Container_Title\")) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fh3\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"panel-body\\\"\\u003E\\u003Cdiv class=\\\"dlb-source-container\\\"\\u003E\\u003Cdiv class=\\\"select\\\"\\u003E\\u003Cdiv class=\\\"col-sm-11\\\"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.get(\"DSA_AutoTargets_All_Webpage\")) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-1\\\"\\u003E\\u003Cspan\" + (\" class=\\\"enabled arrow-button clickable\\\"\"+\" role=\\\"button\\\"\"+pug.attr(\"aria-label\", i18n.get('DSA_AutoTargets_Editor_Add_All_Webpages'), true, true)+\" tabindex=\\\"0\\\"\") + \"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"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/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n) {pug_mixins[\"koValidationError\"] = pug_interp = function(item, id){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cul\" + (pug.attr(\"data-bind\", 'visible: !' + item + '.isValid(), foreach: ' + item + '.errors, attr: {\"aria-hidden\": ' + item + '.isValid()}', true, true)+pug.attr(\"id\", id ? id : item + 'ValidationError', true, true)+\" role=\\\"alert\\\"\") + \"\\u003E\\u003Cli role=\\\"presentation\\\"\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"html: $data\\\" role=\\\"alert\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fli\\u003E\\u003C\\u002Ful\\u003E\";\n};\npug_html = pug_html + \"\\u003Cdiv class=\\\"panel-form noPadding\\\"\\u003E\\u003Cdiv class=\\\"panel-heading\\\"\\u003E\\u003Ch3 class=\\\"panel-title\\\"\\u003E\\u003Cspan class=\\\"h5 type-bold\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get(\"DSA_Target_CustomLabel_Container_Title\")) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fh3\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"panel-body\\\"\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Cdiv class=\\\"col-sm-11\\\"\\u003E\\u003Cdiv class=\\\"col-sm-5 form-control-static custom-label-form-label\\\"\\u003E\\u003Clabel\\u003E\" + (pug.escape(null == (pug_interp = i18n.get(\"DSA_Target_CustomLabel_Label\")) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-7 custom-label-input\\\"\\u003E\\u003Cinput\" + (\" class=\\\"form-control\\\"\"+\" data-bind=\\\"valueUpdate: "input", value: ArgumentOperand, attr: { maxlength: ArgumentOperand.maxLength }, css: {error: !ArgumentOperand.isValid()}\\\"\"+pug.attr(\"aria-label\", i18n.get('DSA_AutoTargets_Specific_Target_Operand_Custom_Label'), true, true)) + \"\\u003E\\u003Cdiv class=\\\"remaining-hint help-block\\\" data-bind=\\\"text: ArgumentOperand.char_rem\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\npug_mixins[\"koValidationError\"]('ArgumentOperand');\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-1 form-control-static\\\"\\u003E\\u003Cspan\" + (\" class=\\\"enabled arrow-button clickable\\\"\"+\" role=\\\"button\\\" tabindex=\\\"0\\\"\"+pug.attr(\"aria-label\", i18n.get('DSA_AutoTargets_Editor_Add_Custom_Label'), true, true)) + \"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"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/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (containerTitle, i18n) {pug_html = pug_html + \"\\u003Cdiv class=\\\"panel-form noPadding\\\"\\u003E\\u003Cdiv class=\\\"panel-heading\\\"\\u003E\\u003Ch3 class=\\\"panel-title\\\"\\u003E\\u003Cspan class=\\\"h5 type-bold\\\"\\u003E\" + (pug.escape(null == (pug_interp = containerTitle) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fh3\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"panel-body\\\"\\u003E\\u003Cdiv class=\\\"exact-urls-container\\\"\\u003E\\u003Cdiv class=\\\"web-condition\\\"\\u003E\\u003Cspan class=\\\"operand\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('DSA_AutoTargets_Specific_Target_Operand_URL')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"operator\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('DSA_AutoTargets_Specific_Target_Equals')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Ctextarea\" + (\" class=\\\"form-control exacturl-textarea\\\"\"+\" data-bind=\\\"value: urls, valueUpdate:'input'\\\"\"+pug.attr(\"placeholder\", i18n.get('DSA_AutoTargets_Editor_Add_Exact_URLs_TextareaDefault'), true, true)) + \"\\u003E\\u003C\\u002Ftextarea\\u003E\\u003Cdiv class=\\\"alert alert-danger url-equals-error\\\" data-bind=\\\"visible: hasError\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('DSA_AutoTargets_Invalid_Url')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"addall\\\"\\u003E\\u003Ca class=\\\"enabled addall-button clickable\\\" href=\\\"javascript:void(0)\\\" role=\\\"button\\\" tabindex=\\\"0\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('DSA_AutoTargets_Specific_Target_AddAll')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"containerTitle\" in locals_for_with?locals_for_with.containerTitle:typeof containerTitle!==\"undefined\"?containerTitle: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/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (appendLearnMoreLink, domainName, hideWebsiteLabel, i18n, showHeader, showPillControl) {pug_html = pug_html + \"\\u003Cdiv class=\\\"panel authoring-container\\\"\\u003E\";\nif (showHeader) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"panel-heading\\\" role=\\\"heading\\\" aria-level=\\\"2\\\"\\u003E\\u003Cdiv class=\\\"panel-title\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('Grid_AddAsDATButtonText')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"panel-body\\\"\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Cdiv class=\\\"row\\\"\\u003E\\u003Cdiv class=\\\"col-sm-12\\\"\\u003E\\u003Cspan\\u003E\" + (null == (pug_interp = appendLearnMoreLink(i18n.get('DSA_AutoTargets_Explanatory_Info'), 'app54494')) ? \"\" : pug_interp) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003Cdiv class=\\\"panel-body form-horizontal\\\"\\u003E\\u003Cdiv class=\\\"form-group col-sm-12\\\"\\u003E\";\nif (!hideWebsiteLabel) {\npug_html = pug_html + \"\\u003Cspan class=\\\"type-bold\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('DSA_Dynamic_AutoTargets_Website')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\n}\npug_html = pug_html + \"\\u003Cspan class=\\\"domain-name\\\"\\u003E\" + (pug.escape(null == (pug_interp = domainName) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group col-sm-6\\\"\\u003E\\u003Cdiv class=\\\"target-type-radiogroup\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\nif (showPillControl) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"pill-control\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003Cdiv class=\\\"form-group doubleListBox\\\"\\u003E\\u003Cdiv class=\\\"col-sm-7\\\"\\u003E\\u003Cdiv class=\\\"category-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"allwebpage-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"specificwebpage-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"mixedspecificwebpage-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"autotarget-customlabel-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"selected-targets-container col-sm-5\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"appendLearnMoreLink\" in locals_for_with?locals_for_with.appendLearnMoreLink:typeof appendLearnMoreLink!==\"undefined\"?appendLearnMoreLink:undefined,\"domainName\" in locals_for_with?locals_for_with.domainName:typeof domainName!==\"undefined\"?domainName:undefined,\"hideWebsiteLabel\" in locals_for_with?locals_for_with.hideWebsiteLabel:typeof hideWebsiteLabel!==\"undefined\"?hideWebsiteLabel:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"showHeader\" in locals_for_with?locals_for_with.showHeader:typeof showHeader!==\"undefined\"?showHeader:undefined,\"showPillControl\" in locals_for_with?locals_for_with.showPillControl:typeof showPillControl!==\"undefined\"?showPillControl:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"rules-container\\\" id=\\\"auto-target-rules-panel\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"exacturls-container\\\" id=\\\"auto-target-exacturls-panel\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv role=\\\"radiogroup\\\" data-bind=\\\"foreach: radiogroup\\\"\\u003E\\u003Clabel class=\\\"radio cursor-pointer\\\"\\u003E\\u003Cinput type=\\\"radio\\\" data-bind=\\\"value: value, checked: $parent.selectedItem, disable: isDisabled\\\"\\u003E\\u003Cspan class=\\\"type-normal\\\" data-bind=\\\"text: text\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C!-- ko if: popupId --\\u003E\\u003Ca class=\\\"helpbutton\\\" data-bind=\\\"attr: {topic: popupId}\\\" type=\\\"helppopup\\\" data-help onclick=\\\"PopupController.PopupJsClick(this)\\\" href=\\\"javascript:void(0);\\\" aria-label=\\\"Learn more\\\"\\u003E\\u003C\\u002Fa\\u003E\\u003C!-- \\u002Fko --\\u003E\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (accountCurrencyCode, i18n, isForVNext, isNegativeAutoTarget, popupId) {pug_mixins[\"koErrors\"] = pug_interp = function(id, cssClass){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cul\" + (pug.attr(\"class\", pug.classes([cssClass ? cssClass : 'alert alert-danger'], [true]), false, true)+\" data-bind=\\\"visible: errors().length > 0, foreach: errors, attr: {"aria-hidden": errors().length == 0}\\\"\"+pug.attr(\"id\", id ? id : 'KoErrors', true, true)) + \"\\u003E\\u003Cli\\u003E\\u003Cdiv data-bind=\\\"html: $data\\\" role=\\\"alert\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fli\\u003E\\u003C\\u002Ful\\u003E\";\n};\npug_mixins[\"koValidationError\"] = pug_interp = function(item, id){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cul\" + (pug.attr(\"data-bind\", 'visible: !' + item + '.isValid(), foreach: ' + item + '.errors, attr: {\"aria-hidden\": ' + item + '.isValid()}', true, true)+pug.attr(\"id\", id ? id : item + 'ValidationError', true, true)+\" role=\\\"alert\\\"\") + \"\\u003E\\u003Cli role=\\\"presentation\\\"\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"html: $data\\\" role=\\\"alert\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fli\\u003E\\u003C\\u002Ful\\u003E\";\n};\npug_mixins[\"popupHelp\"] = pug_interp = function(popupId, ariaLabelContext, i18n){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\nvar templateString = (i18n && i18n.get && i18n.get('Click to learn more about {{item}}')) || (i18n && i18n.getString && i18n.getString('Click to learn more about {{item}}')) || null\npug_html = pug_html + \"\\u003Ca\" + (\" class=\\\"helpbutton\\\"\"+\" type=\\\"helppopup\\\" role=\\\"button\\\"\"+pug.attr(\"topic\", popupId, true, true)+pug.attr(\"data-help\", true, true, true)+\" onclick=\\\"PopupController.PopupJsClick(this)\\\" href=\\\"javascript:void(0);\\\"\"+pug.attr(\"aria-label\", templateString ? templateString.replace('{{item}}', ariaLabelContext) : ariaLabelContext, true, true)) + \"\\u003E\\u003C\\u002Fa\\u003E\";\n};\npug_html = pug_html + \"\\u003Cdiv class=\\\"panel-form noPadding\\\"\\u003E\\u003Cdiv class=\\\"panel-heading\\\"\\u003E\\u003Ch3 class=\\\"panel-title\\\"\\u003E\\u003Cdiv class=\\\"row\\\"\\u003E\\u003Cdiv class=\\\"col-sm-8 selected-header\\\"\\u003E\\u003Cspan class=\\\"h5 type-bold\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('DSA_AutoTargets_Select_Title')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\npug_mixins[\"popupHelp\"](popupId, i18n.get('DSA_AutoTargets_Select_Title'), i18n);\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\nif (!isNegativeAutoTarget) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"col-sm-4 h5\\\"\\u003E\\u003Ca class=\\\"pull-right\\\" data-bind=\\\"click:resetBids\\\" role=\\\"button\\\" href=\\\"javascript:void(0)\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('DSA_Authoring_Remove_Bids')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\nif (!isNegativeAutoTarget) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"row\\\"\\u003E\\u003Cdiv class=\\\"col-sm-12 selected-description\\\"\\u003E\\u003Cspan class=\\\"h5\\\" data-bind=\\\"text: description\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fh3\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"panel-body noPadding\\\"\\u003E\\u003Cdiv class=\\\"dlb-selected-container\\\"\\u003E\\u003Cdiv class=\\\"dlb-selected dlb-selected-list\\\" data-bind=\\\"css: {"validation-error": errors().length > 0}\\\"\\u003E\\u003Cdiv class=\\\"panel-body form-control-static inactive\\\" data-bind=\\\"visible: items().length === 0\\\"\\u003E\" + (pug.escape(null == (pug_interp = isForVNext ? i18n.get('DSA_Dynamic_AutoTargets_Selected_Placeholder_ForVNext') : i18n.get('DSA_Dynamic_AutoTargets_Selected_Placeholder')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"remove-all\\\"\\u003E\\u003Ca class=\\\"arrow-button remove a11y-k-listview-button col-sm-1\\\" data-bind=\\\"click: clear, visible: items().length > 0\\\"\\u003E\\u003C\\u002Fa\\u003E\\u003Ca class=\\\"col-sm-5\\\" href=\\\"#\\\" role=\\\"button\\\" data-bind=\\\"click: clear, visible: items().length > 0\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('DSA_Authoring_Remove_Targets')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cul data-bind=\\\"foreach: items\\\"\\u003E\\u003Cli\\u003E\\u003Cdiv class=\\\"dlbItem\\\"\\u003E\\u003Cdiv class=\\\"dlbItem-content\\\"\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"col-sm-7\",\"targetName\",isNegativeAutoTarget? 'negative-targetName': ''], [false,false,true]), false, true)) + \"\\u003E\\u003Cdiv class=\\\"category\\\" data-bind=\\\"if:type==='category'\\\"\\u003E\\u003Cdiv\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('DSA_Target_Selected_Category_Header')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"truncated\\\"\\u003E\\u003Cspan data-bind=\\\"text:conditions[0].ArgumentOperand\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"allwebpage\\\" data-bind=\\\"if:type==='allwebpage'\\\"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('DSA_AutoTargets_All_Webpage')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"specificpage preview\\\" data-bind=\\\"if:type==='specificpage', attr: { 'data-conditions': serializedConditions }\\\"\\u003E\\u003Cdiv\\u003E\\u003Cspan class=\\\"operand\\\" data-bind=\\\"text:conditions[0].DisplayOperand\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"operator\\\" data-bind=\\\"text:conditions[0].DisplayOperator\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cdiv class=\\\"preview-operand\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"truncated\\\"\\u003E\\u003Ca\" + (\" class=\\\"argument clickable\\\"\"+\" href=\\\"javascript:void(0)\\\" data-bind=\\\"text:conditions[0].ArgumentOperand().concat(conditions.length > 1 ? "..." : "")\\\" role=\\\"button\\\"\"+pug.attr(\"aria-label\", i18n.get('DSA_AutoTargets_Editor_Show_Preview_Popup'), true, true)) + \"\\u003E\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"exacturls preview\\\" data-bind=\\\"if:type==='exacturls', attr: { 'data-conditions': serializedConditions }\\\"\\u003E\\u003Cdiv\\u003E\\u003Cspan class=\\\"operand\\\" data-bind=\\\"text:conditions[0].DisplayOperand\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"operator\\\" data-bind=\\\"text:conditions[0].DisplayOperator\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cdiv class=\\\"preview-operand\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"truncated\\\"\\u003E\\u003Ca\" + (\" class=\\\"argument clickable\\\"\"+\" href=\\\"javascript:void(0)\\\" data-bind=\\\"text:conditions[0].ArgumentOperand\\\" role=\\\"button\\\"\"+pug.attr(\"aria-label\", i18n.get('DSA_AutoTargets_Editor_Show_Preview_Popup'), true, true)) + \"\\u003E\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\nif (!isNegativeAutoTarget) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"col-sm-4\\\"\\u003E\\u003Cdiv class=\\\"input-group\\\"\\u003E\\u003Cinput\" + (\" class=\\\"form-control\\\"\"+\" type=\\\"text\\\" data-bind=\\\"valueUpdate: "input", value:Bid.string, hasFocus: Bid.editing, css: {error: !Bid.isValid()}\\\"\"+pug.attr(\"aria-label\", i18n.get('DSA_AutoTargets_Bid_Input_Label'), true, true)) + \"\\u003E\\u003Cspan class=\\\"input-group-addon\\\"\\u003E\" + (pug.escape(null == (pug_interp = accountCurrencyCode) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003Ca\" + (\" class=\\\"arrow-button remove a11y-k-listview-button clickable\\\"\"+\" data-bind=\\\"click: $parent.remove\\\"\"+pug.attr(\"aria-label\", i18n.getString('DSA_AutoTargets_Exclusion_Target_Grid_Toolbar_Remove'), true, true)+\" role=\\\"button\\\"\") + \"\\u003E\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"indented-section\\\"\\u003E\";\npug_mixins[\"koValidationError\"]('Bid');\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\npug_mixins[\"koErrors\"]();\npug_html = pug_html + \"\\u003C\\u002Fli\\u003E\\u003C\\u002Ful\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\npug_mixins[\"koErrors\"]();}.call(this,\"accountCurrencyCode\" in locals_for_with?locals_for_with.accountCurrencyCode:typeof accountCurrencyCode!==\"undefined\"?accountCurrencyCode:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"isForVNext\" in locals_for_with?locals_for_with.isForVNext:typeof isForVNext!==\"undefined\"?isForVNext:undefined,\"isNegativeAutoTarget\" in locals_for_with?locals_for_with.isNegativeAutoTarget:typeof isNegativeAutoTarget!==\"undefined\"?isNegativeAutoTarget:undefined,\"popupId\" in locals_for_with?locals_for_with.popupId:typeof popupId!==\"undefined\"?popupId:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n) {pug_html = pug_html + \"\\u003Cdiv class=\\\"panel-form noPadding\\\"\\u003E\\u003Cdiv class=\\\"panel-heading\\\"\\u003E\\u003Ch3 class=\\\"panel-title\\\"\\u003E\\u003Cspan class=\\\"h5 type-bold\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('DSA_Target_SpecificWebPage_Container_Title')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fh3\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"panel-body condition-container\\\"\\u003E\\u003Cdiv class=\\\"conditions\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"summary container-fluid\\\"\\u003E\\u003Cdiv class=\\\"row\\\"\\u003E\\u003Cdiv class=\\\"preview col-sm-11\\\" data-bind=\\\"if: items().length>1||items()[0].ArgumentOperand\\\"\\u003E\\u003Cdiv class=\\\"preview-operand\\\"\\u003E\\u003Cspan class=\\\"operand\\\" data-bind=\\\"text:items()[0].DisplayOperand\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"operator\\\" data-bind=\\\"text:items()[0].DisplayOperator\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"truncated\\\"\\u003E\\u003Ca href=\\\"javascript:void(0)\\\" data-bind=\\\"text:items()[0].ArgumentOperand\\\"\\u003E\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-1\\\"\\u003E\\u003Cspan\" + (\" class=\\\"enabled arrow-button clickable\\\"\"+\" role=\\\"button\\\" tabindex=\\\"0\\\"\"+pug.attr(\"aria-label\", i18n.get('DSA_AutoTargets_Editor_Add_Specific_Webpage'), true, true)) + \"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"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/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (containerTitle, i18n) {pug_html = pug_html + \"\\u003Cdiv class=\\\"panel-form noPadding\\\"\\u003E\\u003Cdiv class=\\\"panel-heading\\\"\\u003E\\u003Ch3 class=\\\"panel-title\\\"\\u003E\\u003Cspan class=\\\"h5 type-bold\\\"\\u003E\" + (pug.escape(null == (pug_interp = containerTitle) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fh3\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"panel-body condition-container\\\"\\u003E\\u003Cdiv class=\\\"conditions\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"addall\\\"\\u003E\\u003Ca\" + (\" class=\\\"enabled addall-button clickable\\\"\"+\" href=\\\"javascript:void(0)\\\" role=\\\"button\\\" tabindex=\\\"0\\\"\"+pug.attr(\"aria-label\", i18n.get('DSA_AutoTargets_Editor_Add_Specific_Webpage'), true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('DSA_AutoTargets_Specific_Target_AddAll')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"containerTitle\" in locals_for_with?locals_for_with.containerTitle:typeof containerTitle!==\"undefined\"?containerTitle: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/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"conditions\\\" data-bind=\\\"foreach: conditions\\\"\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Cspan class=\\\"operand\\\" data-bind=\\\"text: DisplayOperand\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"operator\\\" data-bind=\\\"text: DisplayOperator\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cdiv class=\\\"argument\\\"\\u003E\\u003Cspan data-bind=\\\"text: ArgumentOperand\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"itemTemplate-text\\\"\\u003E\\u003Cspan\\u003E#:data.Name#\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n) {pug_html = pug_html + \"\\u003Cdiv role=\\\"radiogroup\\\" data-bind=\\\"foreach: radioList\\\"\\u003E\\u003Clabel class=\\\"radio cursor-pointer\\\"\\u003E\\u003Cinput type=\\\"radio\\\" data-bind=\\\"checked: $parent.source, value: value\\\"\\u003E\\u003Cspan class=\\\"type-normal\\\" data-bind=\\\"text: text\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"pagefeed-selector-container\\\" data-bind=\\\"visible: showPagefeedSelector\\\"\\u003E\\u003Cspan class=\\\"pagefeed-selector-description\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('Campaign_TargetingSource_Page_Selector_Title')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cdiv\" + (\" class=\\\"doubleListBox\\\"\"+pug.attr(\"data-bind\", \"doubleListBox: selectedFeeds,\\\n dlbData: { sourceItems: allFeeds, itemIdField: 'Id', pageSize: 10, itemFilterField: 'Name', useCallbackForFetchOnly:false },\\\n dlbItemActions: {},\\\n dlbFeatures: {selectAll: false, deselectAll: false, paging: true, dragAndDrop: true},\\\n dlbTemplates: {sourceItemContentTemplate: itemTemplate, selectedItemContentTemplate: itemTemplate },\\\n dlbStrings: {sourceItems: '\" + i18n.get('Campaign_TargetingSource_Page_Selector_Source') + \"',\\\n selectedItems: '\" + i18n.get('Campaign_TargetingSource_Page_Selector_Selected') + \"',\\\n filterWatermark: '\" + i18n.get('Campaign_TargetingSource_Page_Selector_Search') + \"'}\", true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cul data-bind=\\\"foreach: errors\\\"\\u003E\\u003Cli\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"text: $data\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fli\\u003E\\u003C\\u002Ful\\u003E\";}.call(this,\"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/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n, showAND) {pug_mixins[\"koValidationError\"] = pug_interp = function(item, id){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cul\" + (pug.attr(\"data-bind\", 'visible: !' + item + '.isValid(), foreach: ' + item + '.errors, attr: {\"aria-hidden\": ' + item + '.isValid()}', true, true)+pug.attr(\"id\", id ? id : item + 'ValidationError', true, true)+\" role=\\\"alert\\\"\") + \"\\u003E\\u003Cli role=\\\"presentation\\\"\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"html: $data\\\" role=\\\"alert\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fli\\u003E\\u003C\\u002Ful\\u003E\";\n};\npug_html = pug_html + \"\\u003Cdiv class=\\\"specific-target-container container-fluid\\\"\\u003E\\u003Cdiv class=\\\"specific-target-conditions-container form-horizontal\\\" data-bind=\\\"foreach: items\\\"\\u003E\\u003Cdiv class=\\\"specific-target-condition form-group row\\\"\\u003E\\u003C!-- ko if: $index()\\u003E0 --\\u003E\\u003Cdiv class=\\\"col-sm-12\\\"\\u003E\\u003Clabel\\u003E\" + (pug.escape(null == (pug_interp = showAND?i18n.get('DSA_AutoTargets_Specific_Target_And_Capitalization'):i18n.get('DSA_AutoTargets_Specific_Target_And')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003C!-- \\u002Fko --\\u003E\\u003Cdiv class=\\\"col-sm-4\\\"\\u003E\\u003Cselect\" + (\" class=\\\"form-control\\\"\"+\" data-bind=\\\"options: $parent.operandOptions, value: $data.Operand, optionsText: "text", optionsValue: "value" \\\"\"+pug.attr(\"aria-label\", i18n.get('DSA_AutoTargets_Editor_Select_Operand'), true, true)) + \"\\u003E\\u003C\\u002Fselect\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-2 form-control-static\\\"\\u003E\\u003Clabel data-bind=\\\"text: $data.DisplayOperator, visible: showOperatorAndValue\\\"\\u003E\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-5\\\"\\u003E\\u003C!-- ko if: $data.showSelect --\\u003E\\n\\u003C!-- ko if: $parent.isCategoriesEmpty --\\u003E\\u003Clabel\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('DSA_AutoTargets_Specific_Target_Operand_Category_Empty')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C!-- \\u002Fko --\\u003E\\n\\u003C!-- \\u002Fko --\\u003E\\n\\u003C!-- ko ifnot: $data.showSelect --\\u003E\\u003Cinput\" + (\" class=\\\"form-control\\\"\"+\" data-bind=\\\"valueUpdate: "input", value: ArgumentOperand, attr: { maxlength: ArgumentOperand.maxLength }, css: {error: !ArgumentOperand.isValid()}\\\"\"+pug.attr(\"aria-label\", i18n.get('DSA_AutoTargets_Editor_Operand_Contains'), true, true)) + \"\\u003E\\u003Cdiv class=\\\"remaining-hint help-block\\\" data-bind=\\\"text: ArgumentOperand.char_rem\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\npug_mixins[\"koValidationError\"]('ArgumentOperand');\npug_html = pug_html + \"\\u003C!-- \\u002Fko --\\u003E\\n\\u003C!-- ko if: $data.showSelect --\\u003E\\u003Cdiv class=\\\"form-control-static\\\"\\u003E\\u003Cspan data-bind=\\\"text: ArgumentOperand\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"edit-category-icon glyphicon glyphicon-pencil cursor-pointer\\\" data-bind=\\\"visible: showOperatorAndValue\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C!-- \\u002Fko --\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-1 form-control-static\\\" data-bind=\\\"click: $parent.deleteItem, visible: $parent.isConditionDeleteEnabled\\\"\\u003E\\u003Ca\" + (\" class=\\\"spritedimage closeimage clickable\\\"\"+\" role=\\\"button\\\"\"+pug.attr(\"title\", i18n.get('Remove'), true, true)+pug.attr(\"aria-label\", i18n.get('Remove'), true, true)+\" tabindex=\\\"0\\\"\") + \"\\u003E\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"category-container col-sm-11\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Ca class=\\\"add-row clickable\\\" data-bind=\\\"click: addItem, visible: isConditionAddEnabled\\\" role=\\\"button\\\" tabindex=\\\"0\\\"\\u003E\" + (pug.escape(null == (pug_interp = showAND?i18n.get('DSA_AutoTargets_Specific_Target_And_Capitalization'):i18n.get('DSA_AutoTargets_Specific_Target_Add')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"showAND\" in locals_for_with?locals_for_with.showAND:typeof showAND!==\"undefined\"?showAND:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (bidAdjustmentHeader, i18n, percentSymbol, rows, showBidAdjustment, targetDescription, targetHeader, targetPopupId, targetType) {pug_mixins[\"koErrors\"] = pug_interp = function(id, cssClass){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cul\" + (pug.attr(\"class\", pug.classes([cssClass ? cssClass : 'alert alert-danger'], [true]), false, true)+\" data-bind=\\\"visible: errors().length > 0, foreach: errors, attr: {"aria-hidden": errors().length == 0}\\\"\"+pug.attr(\"id\", id ? id : 'KoErrors', true, true)) + \"\\u003E\\u003Cli\\u003E\\u003Cdiv data-bind=\\\"html: $data\\\" role=\\\"alert\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fli\\u003E\\u003C\\u002Ful\\u003E\";\n};\npug_mixins[\"koValidationError\"] = pug_interp = function(item, id){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cul\" + (pug.attr(\"data-bind\", 'visible: !' + item + '.isValid(), foreach: ' + item + '.errors, attr: {\"aria-hidden\": ' + item + '.isValid()}', true, true)+pug.attr(\"id\", id ? id : item + 'ValidationError', true, true)+\" role=\\\"alert\\\"\") + \"\\u003E\\u003Cli role=\\\"presentation\\\"\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"html: $data\\\" role=\\\"alert\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fli\\u003E\\u003C\\u002Ful\\u003E\";\n};\npug_mixins[\"popupHelp\"] = pug_interp = function(popupId, ariaLabelContext, i18n){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\nvar templateString = (i18n && i18n.get && i18n.get('Click to learn more about {{item}}')) || (i18n && i18n.getString && i18n.getString('Click to learn more about {{item}}')) || null\npug_html = pug_html + \"\\u003Ca\" + (\" class=\\\"helpbutton\\\"\"+\" type=\\\"helppopup\\\" role=\\\"button\\\"\"+pug.attr(\"topic\", popupId, true, true)+pug.attr(\"data-help\", true, true, true)+\" onclick=\\\"PopupController.PopupJsClick(this)\\\" href=\\\"javascript:void(0);\\\"\"+pug.attr(\"aria-label\", templateString ? templateString.replace('{{item}}', ariaLabelContext) : ariaLabelContext, true, true)) + \"\\u003E\\u003C\\u002Fa\\u003E\";\n};\npug_mixins[\"adGroupOverrideInformation\"] = pug_interp = function(target){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cdiv class=\\\"alert alert-info form-group\\\" data-bind=\\\"visible: showAdGroupOverrideInformation\\\" role=\\\"alert\\\"\\u003E\\u003Cdiv class=\\\"alert-image\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"alert-info-inline\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Target_Settings_Override_Information_Line1', target)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"alert-info-inline indent\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Target_Settings_Override_Information_Line2', target)) ? \"\" : pug_interp)) + \" \\u003Ca class=\\\"HelpTopic\\\" query=\\\"help:app54638\\\" href=\\\"javascript:void(0);\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Learn_more_link_text')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n};\npug_mixins[\"koErrors\"]();\npug_html = pug_html + \"\\u003C!--ko if: level === 'adgroup'--\\u003E\";\npug_mixins[\"adGroupOverrideInformation\"](i18n.getString('Target_Settings_Override_Device_Target'));\npug_html = pug_html + \"\\u003C!--ko if: isForVNext()--\\u003E\\u003Clabel class=\\\"control-label\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('TargetingSettings_Devices')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C!-- \\u002Fko--\\u003E\\u003Clabel class=\\\"type-normal\\\" id=\\\"base-use-campaign-settings\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('CreationWorkflowsInheritanceFlagLabel')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003Cdiv class=\\\"toggle-campaign-settings-switch form-control-static\\\" data-bind=\\\"checked: useCampaignSettings\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C!-- \\u002Fko--\\u003E\\u003Cdiv class=\\\"form-control-static\\\"\\u003E\" + (pug.escape(null == (pug_interp = targetDescription) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Ctable\" + (\" class=\\\"advance-targeting-grid table new-advance-target-grid-container\\\"\"+pug.attr(\"target-type\", targetType, true, true)+\" data-bind=\\\"css: {showCashbackPercent:supportCashbackSettings}\\\"\") + \"\\u003E\\u003Cthead\\u003E\\u003Ctr\\u003E\\u003Cth class=\\\"col-sm-4\\\"\\u003E\" + (pug.escape(null == (pug_interp = targetHeader) ? \"\" : pug_interp)) + \"\\u003C\\u002Fth\\u003E\";\nif (showBidAdjustment) {\npug_html = pug_html + (\"\\u003Cth class=\\\"col-sm-3\\\" colspan=\\\"2\\\"\\u003E\" + (pug.escape(null == (pug_interp = bidAdjustmentHeader) ? \"\" : pug_interp)));\nif (targetPopupId) {\npug_mixins[\"popupHelp\"](targetPopupId, bidAdjustmentHeader, i18n);\n}\npug_html = pug_html + \"\\u003C\\u002Fth\\u003E\";\n}\npug_html = pug_html + \"\\u003C!-- ko if: $root.supportCashbackSettings()--\\u003E\\u003Cth class=\\\"cashback-percent-head\\\" colspan=\\\"2\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Campaign_Maximum_Cashback_Offer')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fth\\u003E\\u003C!-- \\u002Fko--\\u003E\\u003C\\u002Ftr\\u003E\\u003C\\u002Fthead\\u003E\\u003Ctbody\\u003E\";\n// iterate rows\n;(function(){\n var $$obj = rows;\n if ('number' == typeof $$obj.length) {\n for (var index = 0, $$l = $$obj.length; index < $$l; index++) {\n var row = $$obj[index];\npug_html = pug_html + \"\\u003Ctr\" + (pug.attr(\"data-index\", (index + 1), true, true)) + \"\\u003E\\u003Ctd\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = row.targetName) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Ftd\\u003E\";\nif (showBidAdjustment) {\npug_html = pug_html + \"\\u003Ctd\\u003E\\u003Cselect\" + (\" class=\\\"form-control\\\"\"+pug.attr(\"data-bind\", 'options: rows['+index+'].bidAdjustmentOptions, optionsText: \"text\", optionsValue: \"value\", value: rows['+index+'].selectedBidAdjustmentOption, disable: rows['+index+'].readonly ? \"true\" : readonlyBid', true, true)+pug.attr(\"aria-label\", i18n.getString('BidAdjustment_Options'), true, true)) + \"\\u003E\\u003C\\u002Fselect\\u003E\\u003C\\u002Ftd\\u003E\\u003Ctd\\u003E\\u003Cinput\" + (\" class=\\\"form-control display-inline bidBoost-percentValue\\\"\"+\" type=\\\"text\\\"\"+pug.attr(\"data-bind\", 'value: rows['+index+'].bidAdjustmentValue, valueUpdate: \"input\", disable: readonlyBid, css: {\"validation-error\": !' + row.koErrorObservable + '.isValid() && '+row.koErrorType+'() === \"BID\"}', true, true)+pug.attr(\"aria-label\", i18n.getString('BidAdjustment_BidMultiplier'), true, true)) + \"\\u003E\\u003Cspan class=\\\"bidBoost-percent\\\"\\u003E\" + (pug.escape(null == (pug_interp = percentSymbol) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Ftd\\u003E\";\n}\npug_html = pug_html + \"\\u003C!-- ko if: $root.supportCashbackSettings()--\\u003E\\u003Ctd class=\\\"cashback-option-select-col\\\"\\u003E\\u003Cselect\" + (\" class=\\\"cashback-option-select form-control\\\"\"+pug.attr(\"data-bind\", 'options: rows['+index+'].cashbackOptions, optionsText:\"text\", optionsValue: \"value\", value: rows['+index+'].selectedCashbackOption, disable: readonlyBid', true, true)) + \"\\u003E\\u003C\\u002Fselect\\u003E\\u003C\\u002Ftd\\u003E\\u003Ctd class=\\\"cashback-value-col\\\"\\u003E\\u003Cspan\" + (\" class=\\\"inherit-cashback-value\\\"\"+pug.attr(\"data-bind\", 'visible: rows['+index+'].selectedCashbackOption() === \"inherit\"', true, true)) + \"\\u003E\\u003Cinput\" + (\" class=\\\"form-control display-inline cashback-percent-value\\\"\"+\" type=\\\"text\\\"\"+pug.attr(\"data-bind\", 'value: rows['+index+'].cashbackInheritValue, valueUpdate: \"input\", disable: true, css: {\"validation-error\": !' + row.koErrorObservable + '.isValid() && '+row.koErrorType+'() === \"CASHBACK\"}', true, true)+pug.attr(\"aria-label\", i18n.getString('Campaign_Maximum_Cashback_Offer'), true, true)) + \"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('Campaign_Discount')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan\" + (\" class=\\\"cashback-input-container\\\"\"+pug.attr(\"data-bind\", 'visible: rows['+index+'].selectedCashbackOption() === \"override\"', true, true)) + \"\\u003E\\u003Cinput\" + (\" class=\\\"form-control display-inline cashback-percent-value\\\"\"+\" type=\\\"text\\\"\"+pug.attr(\"data-bind\", 'value: rows['+index+'].cashbackPercentValue, valueUpdate: \"input\", disable: readonlyBid, css: {\"validation-error\": !' + row.koErrorObservable + '.isValid() && '+row.koErrorType+'() === \"CASHBACK\"}', true, true)+pug.attr(\"aria-label\", i18n.getString('Campaign_Maximum_Cashback_Offer'), true, true)) + \"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('Campaign_Discount')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Ftd\\u003E\\u003C!-- \\u002Fko--\\u003E\\u003C\\u002Ftr\\u003E\";\nif (row.tipText) {\npug_html = pug_html + \"\\u003Ctr class=\\\"table-row__tip-text\\\"\\u003E\\u003Ctd\\u003E\\u003C\\u002Ftd\\u003E\\u003Ctd colspan=\\\"2\\\"\\u003E\\u003Cspan class=\\\"row-tip\\\"\\u003E\" + (pug.escape(null == (pug_interp = row.tipText) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Ftd\\u003E\\u003C\\u002Ftr\\u003E\";\n}\npug_html = pug_html + \"\\u003Ctr\\u003E\\u003Ctd colspan=\\\"3\\\"\\u003E\";\npug_mixins[\"koValidationError\"](row.koErrorObservable);\npug_html = pug_html + \"\\u003C\\u002Ftd\\u003E\\u003C\\u002Ftr\\u003E\";\n }\n } else {\n var $$l = 0;\n for (var index in $$obj) {\n $$l++;\n var row = $$obj[index];\npug_html = pug_html + \"\\u003Ctr\" + (pug.attr(\"data-index\", (index + 1), true, true)) + \"\\u003E\\u003Ctd\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = row.targetName) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Ftd\\u003E\";\nif (showBidAdjustment) {\npug_html = pug_html + \"\\u003Ctd\\u003E\\u003Cselect\" + (\" class=\\\"form-control\\\"\"+pug.attr(\"data-bind\", 'options: rows['+index+'].bidAdjustmentOptions, optionsText: \"text\", optionsValue: \"value\", value: rows['+index+'].selectedBidAdjustmentOption, disable: rows['+index+'].readonly ? \"true\" : readonlyBid', true, true)+pug.attr(\"aria-label\", i18n.getString('BidAdjustment_Options'), true, true)) + \"\\u003E\\u003C\\u002Fselect\\u003E\\u003C\\u002Ftd\\u003E\\u003Ctd\\u003E\\u003Cinput\" + (\" class=\\\"form-control display-inline bidBoost-percentValue\\\"\"+\" type=\\\"text\\\"\"+pug.attr(\"data-bind\", 'value: rows['+index+'].bidAdjustmentValue, valueUpdate: \"input\", disable: readonlyBid, css: {\"validation-error\": !' + row.koErrorObservable + '.isValid() && '+row.koErrorType+'() === \"BID\"}', true, true)+pug.attr(\"aria-label\", i18n.getString('BidAdjustment_BidMultiplier'), true, true)) + \"\\u003E\\u003Cspan class=\\\"bidBoost-percent\\\"\\u003E\" + (pug.escape(null == (pug_interp = percentSymbol) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Ftd\\u003E\";\n}\npug_html = pug_html + \"\\u003C!-- ko if: $root.supportCashbackSettings()--\\u003E\\u003Ctd class=\\\"cashback-option-select-col\\\"\\u003E\\u003Cselect\" + (\" class=\\\"cashback-option-select form-control\\\"\"+pug.attr(\"data-bind\", 'options: rows['+index+'].cashbackOptions, optionsText:\"text\", optionsValue: \"value\", value: rows['+index+'].selectedCashbackOption, disable: readonlyBid', true, true)) + \"\\u003E\\u003C\\u002Fselect\\u003E\\u003C\\u002Ftd\\u003E\\u003Ctd class=\\\"cashback-value-col\\\"\\u003E\\u003Cspan\" + (\" class=\\\"inherit-cashback-value\\\"\"+pug.attr(\"data-bind\", 'visible: rows['+index+'].selectedCashbackOption() === \"inherit\"', true, true)) + \"\\u003E\\u003Cinput\" + (\" class=\\\"form-control display-inline cashback-percent-value\\\"\"+\" type=\\\"text\\\"\"+pug.attr(\"data-bind\", 'value: rows['+index+'].cashbackInheritValue, valueUpdate: \"input\", disable: true, css: {\"validation-error\": !' + row.koErrorObservable + '.isValid() && '+row.koErrorType+'() === \"CASHBACK\"}', true, true)+pug.attr(\"aria-label\", i18n.getString('Campaign_Maximum_Cashback_Offer'), true, true)) + \"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('Campaign_Discount')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan\" + (\" class=\\\"cashback-input-container\\\"\"+pug.attr(\"data-bind\", 'visible: rows['+index+'].selectedCashbackOption() === \"override\"', true, true)) + \"\\u003E\\u003Cinput\" + (\" class=\\\"form-control display-inline cashback-percent-value\\\"\"+\" type=\\\"text\\\"\"+pug.attr(\"data-bind\", 'value: rows['+index+'].cashbackPercentValue, valueUpdate: \"input\", disable: readonlyBid, css: {\"validation-error\": !' + row.koErrorObservable + '.isValid() && '+row.koErrorType+'() === \"CASHBACK\"}', true, true)+pug.attr(\"aria-label\", i18n.getString('Campaign_Maximum_Cashback_Offer'), true, true)) + \"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('Campaign_Discount')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Ftd\\u003E\\u003C!-- \\u002Fko--\\u003E\\u003C\\u002Ftr\\u003E\";\nif (row.tipText) {\npug_html = pug_html + \"\\u003Ctr class=\\\"table-row__tip-text\\\"\\u003E\\u003Ctd\\u003E\\u003C\\u002Ftd\\u003E\\u003Ctd colspan=\\\"2\\\"\\u003E\\u003Cspan class=\\\"row-tip\\\"\\u003E\" + (pug.escape(null == (pug_interp = row.tipText) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Ftd\\u003E\\u003C\\u002Ftr\\u003E\";\n}\npug_html = pug_html + \"\\u003Ctr\\u003E\\u003Ctd colspan=\\\"3\\\"\\u003E\";\npug_mixins[\"koValidationError\"](row.koErrorObservable);\npug_html = pug_html + \"\\u003C\\u002Ftd\\u003E\\u003C\\u002Ftr\\u003E\";\n }\n }\n}).call(this);\n\npug_html = pug_html + \"\\u003C\\u002Ftbody\\u003E\\u003C\\u002Ftable\\u003E\";}.call(this,\"bidAdjustmentHeader\" in locals_for_with?locals_for_with.bidAdjustmentHeader:typeof bidAdjustmentHeader!==\"undefined\"?bidAdjustmentHeader:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"percentSymbol\" in locals_for_with?locals_for_with.percentSymbol:typeof percentSymbol!==\"undefined\"?percentSymbol:undefined,\"rows\" in locals_for_with?locals_for_with.rows:typeof rows!==\"undefined\"?rows:undefined,\"showBidAdjustment\" in locals_for_with?locals_for_with.showBidAdjustment:typeof showBidAdjustment!==\"undefined\"?showBidAdjustment:undefined,\"targetDescription\" in locals_for_with?locals_for_with.targetDescription:typeof targetDescription!==\"undefined\"?targetDescription:undefined,\"targetHeader\" in locals_for_with?locals_for_with.targetHeader:typeof targetHeader!==\"undefined\"?targetHeader:undefined,\"targetPopupId\" in locals_for_with?locals_for_with.targetPopupId:typeof targetPopupId!==\"undefined\"?targetPopupId:undefined,\"targetType\" in locals_for_with?locals_for_with.targetType:typeof targetType!==\"undefined\"?targetType:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n, percentSymbol, showBidAdjustment, showLevelToggle, targetType) {pug_mixins[\"koError\"] = pug_interp = function(item, id){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"data-bind\", 'if: ' + item + '().length > 0, attr: {\"aria-hidden\": ' + item + '().length == 0}', true, true)+pug.attr(\"id\", id ? id : item, true, true)+\" role=\\\"alert\\\"\") + \"\\u003E\\u003Cdiv\" + (\" class=\\\"error\\\"\"+pug.attr(\"data-bind\", 'html: ' + item, true, true)+\" role=\\\"alert\\\"\") + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n};\npug_mixins[\"popupHelp\"] = pug_interp = function(popupId, ariaLabelContext, i18n){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\nvar templateString = (i18n && i18n.get && i18n.get('Click to learn more about {{item}}')) || (i18n && i18n.getString && i18n.getString('Click to learn more about {{item}}')) || null\npug_html = pug_html + \"\\u003Ca\" + (\" class=\\\"helpbutton\\\"\"+\" type=\\\"helppopup\\\" role=\\\"button\\\"\"+pug.attr(\"topic\", popupId, true, true)+pug.attr(\"data-help\", true, true, true)+\" onclick=\\\"PopupController.PopupJsClick(this)\\\" href=\\\"javascript:void(0);\\\"\"+pug.attr(\"aria-label\", templateString ? templateString.replace('{{item}}', ariaLabelContext) : ariaLabelContext, true, true)) + \"\\u003E\\u003C\\u002Fa\\u003E\";\n};\npug_mixins[\"adGroupOverrideInformation\"] = pug_interp = function(target){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cdiv class=\\\"alert alert-info form-group\\\" data-bind=\\\"visible: showAdGroupOverrideInformation\\\" role=\\\"alert\\\"\\u003E\\u003Cdiv class=\\\"alert-image\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"alert-info-inline\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Target_Settings_Override_Information_Line1', target)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"alert-info-inline indent\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Target_Settings_Override_Information_Line2', target)) ? \"\" : pug_interp)) + \" \\u003Ca class=\\\"HelpTopic\\\" query=\\\"help:app54638\\\" href=\\\"javascript:void(0);\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Learn_more_link_text')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n};\npug_html = pug_html + \"\\u003C!--ko if: level === 'adgroup'--\\u003E\";\npug_mixins[\"adGroupOverrideInformation\"](i18n.getString('Target_Settings_Override_DeviceOS_Target'));\npug_html = pug_html + \"\\u003C!--ko if: isForVNext()--\\u003E\\u003Clabel class=\\\"control-label\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('TargetingSettings_Devices')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C!-- \\u002Fko--\\u003E\";\nif (showLevelToggle === true) {\npug_html = pug_html + \"\\u003Clabel class=\\\"type-normal\\\" id=\\\"base-use-campaign-settings\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('CreationWorkflowsInheritanceFlagLabel')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003Cdiv class=\\\"toggle-campaign-settings-switch form-control-static\\\" data-bind=\\\"checked: useCampaignSettings\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C!-- \\u002Fko--\\u003E\\u003C!--ko if: level === 'campaign'--\\u003E\\u003C!--ko if: isForVNext()--\\u003E\\u003Clabel class=\\\"control-label\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('TargetingSettings_Devices')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C!-- \\u002Fko--\\u003E\\u003C!-- \\u002Fko--\\u003E\\u003Cdiv class=\\\"form-control-static\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('DeviceType_Description')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Ctable\" + (\" class=\\\"advance-targeting-grid table new-advance-target-grid-container\\\"\"+pug.attr(\"target-type\", targetType, true, true)) + \"\\u003E\\u003Cthead\\u003E\\u003Ctr\\u003E\\u003Cth class=\\\"col-sm-4\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('DeviceType_Header')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fth\\u003E\";\nif (showBidAdjustment) {\npug_html = pug_html + (\"\\u003Cth class=\\\"col-sm-3\\\" colspan=\\\"2\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('Target_ColumnHeaderBidAdjustment')) ? \"\" : pug_interp)));\npug_mixins[\"popupHelp\"]('pop_BA_TargetingSettingsPopup_TargetTablet', i18n.get('Target_ColumnHeaderBidAdjustment'), i18n);\npug_html = pug_html + \"\\u003C\\u002Fth\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Ftr\\u003E\\u003C\\u002Fthead\\u003E\\u003Ctbody data-bind=\\\"foreach: devices\\\"\\u003E\\u003Ctr class=\\\"deviceSettings target\\\" data-bind=\\\"attr:{'data-index': $index()+1}\\\"\\u003E\\u003Ctd\\u003E\\u003Cdiv class=\\\"checkbox\\\"\\u003E\\u003Cspan class=\\\"checkbox-label\\\" data-bind=\\\"text: displayName\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cinput class=\\\"targetDevice target\\\" type=\\\"checkbox\\\" data-bind=\\\"checked: isSelected, click: onClick, disable: readonlyBid\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\\u003E\\u003Cspan class=\\\"OSDisplayName\\\" data-bind=\\\"text: osSelected\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"device-separator\\\"\\u003E\" + (pug.escape(null == (pug_interp = ' | ') ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Ca class=\\\"link expander2 collapsed\\\" data-bind=\\\"attr:{'data-target':'#os'+$index(),'data-toggle':'collapse'}, click: changeText, text: expandLinkText\\\"\\u003E\\u003C\\u002Fa\\u003E\\u003Cdiv class=\\\"advanced-targeting-section OSBox collapse\\\" data-bind=\\\"attr:{id:'os'+$index()}\\\"\\u003E\\u003Cspan class=\\\"item-description type-bold\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('Targeting_TargetOSTitle')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cdiv class=\\\"OSList\\\"\\u003E\\u003Cdiv data-bind=\\\"foreach: operatingSystems\\\"\\u003E\\u003Cdiv class=\\\"checkbox checkbox-label\\\" data-bind=\\\"attr:{name: name}\\\"\\u003E\\u003Cspan data-bind=\\\"text: displayName\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cinput type=\\\"checkbox\\\" data-bind=\\\"checked: isSelected, click: onClick, disable: $parent.readonlyBid\\\" style=\\\"margin: 4px 0px 0px 10px\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Ftd\\u003E\";\nif (showBidAdjustment) {\npug_html = pug_html + \"\\u003Ctd\\u003E\\u003Cselect\" + (\" class=\\\"form-control\\\"\"+\" data-bind=\\\"options: bidAdjustmentOptions, optionsText: "text", optionsValue: "value", value: selectedBidAdjustmentOption, disable: readonlyBid\\\"\"+pug.attr(\"aria-label\", i18n.getString('BidAdjustment_Options'), true, true)) + \"\\u003E\\u003C\\u002Fselect\\u003E\\u003C\\u002Ftd\\u003E\\u003Ctd\\u003E\\u003Cinput\" + (\" class=\\\"form-control display-inline bidBoost-percentValue\\\"\"+\" type=\\\"text\\\" data-bind=\\\"value: bidAdjustmentValue, valueUpdate: "input", disable: readonlyBid\\\"\"+pug.attr(\"aria-label\", i18n.getString('BidAdjustment_BidMultiplier'), true, true)) + \"\\u003E\\u003Cspan class=\\\"bidBoost-percent\\\"\\u003E\" + (pug.escape(null == (pug_interp = percentSymbol) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Ftd\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Ftr\\u003E\\u003Ctr\\u003E\\u003Ctd colspan=\\\"3\\\"\\u003E\";\npug_mixins[\"koError\"]('error');\npug_html = pug_html + \"\\u003C\\u002Ftd\\u003E\\u003C\\u002Ftr\\u003E\\u003C\\u002Ftbody\\u003E\\u003C\\u002Ftable\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"percentSymbol\" in locals_for_with?locals_for_with.percentSymbol:typeof percentSymbol!==\"undefined\"?percentSymbol:undefined,\"showBidAdjustment\" in locals_for_with?locals_for_with.showBidAdjustment:typeof showBidAdjustment!==\"undefined\"?showBidAdjustment:undefined,\"showLevelToggle\" in locals_for_with?locals_for_with.showLevelToggle:typeof showLevelToggle!==\"undefined\"?showLevelToggle:undefined,\"targetType\" in locals_for_with?locals_for_with.targetType:typeof targetType!==\"undefined\"?targetType:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"update-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (PageContext, i18n, popupIds, prefixBiddingScheme) {pug_mixins[\"popupHelp\"] = pug_interp = function(popupId, ariaLabelContext, i18n){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\nvar templateString = (i18n && i18n.get && i18n.get('Click to learn more about {{item}}')) || (i18n && i18n.getString && i18n.getString('Click to learn more about {{item}}')) || null\npug_html = pug_html + \"\\u003Ca\" + (\" class=\\\"helpbutton\\\"\"+\" type=\\\"helppopup\\\" role=\\\"button\\\"\"+pug.attr(\"topic\", popupId, true, true)+pug.attr(\"data-help\", true, true, true)+\" onclick=\\\"PopupController.PopupJsClick(this)\\\" href=\\\"javascript:void(0);\\\"\"+pug.attr(\"aria-label\", templateString ? templateString.replace('{{item}}', ariaLabelContext) : ariaLabelContext, true, true)) + \"\\u003E\\u003C\\u002Fa\\u003E\";\n};\npug_html = pug_html + \"\\u003Cdiv class=\\\"bid-strategy-container\\\" data-bind=\\\"visible: showBidStrategySection()\\\"\\u003E\\u003Cdiv class=\\\"bid-strategy-selection-container form-group\\\" data-bind=\\\"visible: showBidStrategySelection\\\"\\u003E\\u003Cdiv class=\\\"form-control-static\\\" data-bind=\\\"visible: shouldDisplayNotification()\\\"\\u003E\\u003Cdiv class=\\\"alert alert-coupon\\\"\\u003E\\u003Cdiv class=\\\"alert-image\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"alert-info-inline\\\"\\u003E\\u003Cspan class=\\\"title\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BidStrategySettings_Auto_Bid_Coupon_Title')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"description\\\" data-bind=\\\"text: autoBiddingCouponDescription()\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Ca class=\\\"alert-dismiss-button\\\" data-bind=\\\"click: dismissCouponNotification\\\"\\u003E\\u003Cdiv class=\\\"alert-dismiss\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Ch2 class=\\\"control-label col-sm-2\\\" data-bind=\\\"visible: showHeader\\\"\\u003E\\u003Clabel id=\\\"BidStrategySetting_BidStrategy_Label\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BidStrategySetting_Label_BidStrategy')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\";\npug_mixins[\"popupHelp\"](popupIds.BidStrategy, i18n.getString('BidStrategySetting_Label_BidStrategy'), i18n);\npug_html = pug_html + (\"\\u003C\\u002Fh2\\u003E\\u003Cdiv class=\\\"col-sm-6\\\"\\u003E\\u003C!-- ko if: !isBidStrategyReadonly()--\\u003E\\u003Cdiv class=\\\"form-control-static\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BidStrategySetting_OptionQuestion')) ? \"\" : pug_interp)) + \" \\u003Ca\" + (\" class=\\\"HelpTopic\\\"\"+\" query=\\\"56786\\\" href=\\\"javascript:void(0);\\\"\"+pug.attr(\"aria-label\", (i18n.getString('Click to learn more about {{item}}') || '').replace('{{item}}', i18n.getString('BidStrategySetting_OptionQuestion')), true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('LearnMore')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\\u003E\\u003Cselect\" + (\" class=\\\"form-control form-group-subset\\\"\"+\" data-bind=\\\"options:strategyOptions, optionsText: "Text", optionsValue: "Value", value: selectedBidStrategy, disable: isReadOnly\\\"\"+pug.attr(\"name\", prefixBiddingScheme + 'BiddingScheme.Type', true, true)+pug.attr(\"aria-label\", i18n.getString('BidStrategySetting_OptionQuestion'), true, true)) + \"\\u003E\\u003C\\u002Fselect\\u003E\\u003C\\u002Fdiv\\u003E\\u003C!--\\u002Fko--\\u003E\\u003C!-- ko if: isBidStrategyReadonly()--\\u003E\\u003Cdiv class=\\\"form-text form-group-subset\\\"\\u003E\\u003Cp\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BidStrategy_Option_MaxConversionValue')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fp\\u003E\\u003C\\u002Fdiv\\u003E\\u003C!--\\u002Fko--\\u003E\\u003Cspan class=\\\"form-text form-group-subset\\\" data-bind=\\\"visible: showConversionChecking\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BidStrategySetting_Message_NoConversionTracking')) ? \"\" : pug_interp)) + \"\\u003Ca class=\\\"HelpTopic\\\" query=\\\"56680\\\" href=\\\"javascript:void(0);\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('LearnMore')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"form-text form-group-subset error\\\" data-bind=\\\"if: !showRevenueCheckErrorMessage(), visible: showConversionCountCheckErrorMessage\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BidStrategySetting_Message_ActiveConversionGoalPresent')) ? \"\" : pug_interp)) + \"\\u003Ca\" + (\" class=\\\"HelpTopic\\\"\"+\" query=\\\"app54720\\\" href=\\\"javascript:void(0);\\\"\"+pug.attr(\"aria-label\", i18n.getString('BidStrategySetting_Message_ActiveConversionGoalPresent') + ' ' + i18n.getString('LearnMore'), true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('LearnMore')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"form-text form-group-subset error\\\" data-bind=\\\"visible: showRevenueCheckErrorMessage\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BidStrategySetting_Message_ActiveConversionGoalPresentWithValidRevenueValue')) ? \"\" : pug_interp)) + \"\\u003Ca\" + (\" class=\\\"HelpTopic\\\"\"+\" query=\\\"app54721\\\" href=\\\"javascript:void(0);\\\"\"+pug.attr(\"aria-label\", i18n.getString('BidStrategySetting_Message_ActiveConversionGoalPresentWithValidRevenueValue') + ' ' + i18n.getString('LearnMore'), true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('LearnMore')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fspan\\u003E\\u003Cdiv id=\\\"broadOnlyRestrictionError\\\"\\u003E\\u003Cspan class=\\\"form-text form-group-subset error\\\" data-bind=\\\"visible: showBroadOnlyErrorMessage\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BidStrategySetting_Message_BroadOnlyErrorMessage')) ? \"\" : pug_interp)) + \"\\u003Ca\" + (\" class=\\\"HelpTopic\\\"\"+\" query=\\\"app54760\\\" href=\\\"javascript:void(0);\\\"\"+pug.attr(\"aria-label\", i18n.getString('BidStrategySetting_Message_BroadOnlyErrorMessage') + ' ' + i18n.getString('LearnMore'), true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('LearnMore')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-control-static\\\" data-bind=\\\"visible: showSwitchStrategyWarningMessage\\\"\\u003E\\u003Cdiv class=\\\"alert alert-warning\\\"\\u003E\\u003Cdiv class=\\\"alert-image\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"alert-warning-inline\\\"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BidStrategySetting_Message_SwitchStrategyWarning')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C!--ko if: selectedBidStrategy() === \\\"MaxConversionValue\\\"--\\u003E\\u003Cdiv class=\\\"form-control-static\\\" data-bind=\\\"visible: showMaxConversionValueLocationTargetMessage\\\"\\u003E\\u003Cdiv class=\\\"alert alert-info\\\"\\u003E\\u003Cdiv class=\\\"alert-image\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"alert-info-inline\\\"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BidStrategySetting_Message_MaxConversionValueGoal_LocationTarget')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C!--\\u002Fko--\\u003E\\u003Cdiv class=\\\"form-control-static\\\" data-bind=\\\"visible: showAutobiddingChangeAlert\\\"\\u003E\\u003Cdiv class=\\\"alert alert-info\\\"\\u003E\\u003Cdiv class=\\\"alert-image\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"alert-info-inline\\\"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BidStrategySetting_Message_ChangeAlert')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"checkbox troas-container\\\" data-bind=\\\"visible: showTargetRoasCheckbox\\\"\\u003E\\u003Clabel\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BidStrategySetting_Checkbox_Label_TargetROAS')) ? \"\" : pug_interp)) + \"\\u003Cinput type=\\\"checkbox\\\" data-bind=\\\"css: { checked: isTargetRoasCheckboxSelected }, checked: isTargetRoasCheckboxSelected\\\"\\u003E\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"checkbox tcpa-container\\\" data-bind=\\\"visible: showTargetCpaCheckbox\\\"\\u003E\\u003Clabel\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BidStrategySetting_Checkbox_Label_TargetCPA')) ? \"\" : pug_interp)) + \"\\u003Cinput type=\\\"checkbox\\\" data-bind=\\\"css: { checked: isTargetCpaCheckboxSelected }, checked: isTargetCpaCheckboxSelected\\\"\\u003E\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"bid-strategy-details-container form-group\\\" data-bind=\\\"visible: showTargetCPA() || showCPC() || showTargetROAS() || showPortfolioSection() || showCostPerSale() || showCommissionRate() || showTargetRoasCheckbox()\\\"\\u003E\\u003Clabel class=\\\"control-label col-sm-2\\\"\\u003E\\u003Cspan data-bind=\\\"visible: showTargetCPA\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BidStrategySetting_Label_CPA')) ? \"\" : pug_interp)));\npug_mixins[\"popupHelp\"]('pop_BA_Settings_TargetCPA', i18n.getString('BidStrategySetting_Label_CPA'), i18n);\npug_html = pug_html + (\"\\u003C\\u002Fspan\\u003E\\u003Cspan data-bind=\\\"visible: showTargetROAS\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BidStrategySetting_Label_TargetROAS')) ? \"\" : pug_interp)));\npug_mixins[\"popupHelp\"]('pop_BA_Settings_TargetROAS', i18n.getString('BidStrategySetting_Label_TargetROAS'), i18n);\npug_html = pug_html + (\"\\u003C\\u002Fspan\\u003E\\u003Cspan data-bind=\\\"visible: showCostPerSale\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BidStrategySetting_Label_CostPerSale') || 'Cost per Sale') ? \"\" : pug_interp)));\npug_mixins[\"popupHelp\"]('pop_BA_CampaignCreate_Settings_PP_Cost', i18n.getString('BidStrategySetting_Label_CostPerSale'), i18n);\npug_html = pug_html + (\"\\u003C\\u002Fspan\\u003E\\u003Cspan data-bind=\\\"visible: showCommissionRate\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BidStrategySetting_Label_CommissionRate')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Flabel\\u003E\\u003Cdiv class=\\\"col-sm-6\\\"\\u003E\\u003Cdiv class=\\\"form-control-static\\\" data-bind=\\\"visible: showCostPerSale\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BidStrategySetting_CostPerSalePrefix') || \"My target CPS is\") ? \"\" : pug_interp)) + \"\\u003Cinput\" + (\" class=\\\"form-control builkEdit-bid custom-param__key-field\\\"\"+\" type=\\\"text\\\" data-bind=\\\"value: costPerSale, valueUpdate: "input"\\\" aria-describedby=\\\"setCostPerSaleBidError currencyLabelCostPerSale\\\"\"+pug.attr(\"name\", prefixBiddingScheme + 'BiddingScheme.CostPerSale', true, true)+pug.attr(\"aria-label\", i18n.getString('BidStrategySetting_CostPerSalePrefix'), true, true)) + \"\\u003E\\u003Cspan class=\\\"control-label\\\" id=\\\"currencyLabelCostPerSale\\\"\\u003E\" + (pug.escape(null == (pug_interp = PageContext.AccountCurrencyCode) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cdiv id=\\\"setCostPerSaleBidError\\\" role=\\\"alert\\\"\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"html: errorMessageCostPerSale\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"alert alert-info\\\" data-bind=\\\"visible: showCostPerSaleDefaultValueAlert\\\"\\u003E\\u003Cdiv class=\\\"alert-image\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cspan data-bind=\\\"html: costPerSaleDefaultValueAlertMessge\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"checkbox target-roas-container\\\" data-bind=\\\"visible: !showBidStrategySelection && showTargetRoasCheckbox\\\"\\u003E\\u003Clabel\\u003E\\u003Cinput type=\\\"checkbox\\\" data-bind=\\\"css: { checked: isTargetRoasCheckboxSelected }, checked: isTargetRoasCheckboxSelected\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BidStrategySetting_Checkbox_Label_TargetROAS')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-control-static\\\" data-bind=\\\"visible: showTargetROAS\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BidStrategySetting_TargetROASPrefix')) ? \"\" : pug_interp)) + \"\\u003Cinput\" + (\" class=\\\"form-control builkEdit-bid custom-param__key-field\\\"\"+\" type=\\\"text\\\" data-bind=\\\"value: targetRoas, valueUpdate: "input"\\\" aria-describedby=\\\"setTargetRoasBidError currencyLabelTargetRoas\\\"\"+pug.attr(\"name\", prefixBiddingScheme + 'BiddingScheme.TargetRoas', true, true)+pug.attr(\"aria-label\", i18n.getString('BidStrategySetting_TargetROASPrefix'), true, true)) + \"\\u003E\\u003Cspan class=\\\"control-label\\\" id=\\\"currencyLabelTargetRoas\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BidStrategySetting_TargetROASPercent')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cdiv id=\\\"setTargetRoasBidError\\\" role=\\\"alert\\\"\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"html: errorMessageTargetRoas\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"alert alert-info\\\" data-bind=\\\"visible: showTargetRoasDefaultValueAlert\\\"\\u003E\\u003Cdiv class=\\\"alert-image\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cspan data-bind=\\\"html: targetRoasDefaultValueAlertMessge\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-control-static\\\" data-bind=\\\"visible: showTargetImpressionShare\\\"\\u003E\\u003Cdiv class=\\\"form-control-static description\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BidStrategySetting_TargetImpressionShare_AdPosition_Header')) ? \"\" : pug_interp)));\npug_mixins[\"popupHelp\"]('pop_BA_Settings_TargetImpSh_Where', i18n.getString('BidStrategySetting_TargetImpressionShare_AdPosition_Header'), i18n);\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"target-impression-share-positions\\\"\\u003E\\u003Cdiv class=\\\"radio\\\"\\u003E\\u003Clabel\\u003E\\u003Cinput type=\\\"radio\\\" name=\\\"targetImpressionAdPositionAnywhereOnThePage\\\" value=\\\"FirstPage\\\" data-bind=\\\"checked: targetImpressionShareAdPositionUpdate\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BidStrategySetting_TargetImpressionShare_AdPosition_AnywhereOnThePage')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"radio\\\"\\u003E\\u003Clabel\\u003E\\u003Cinput type=\\\"radio\\\" name=\\\"targetImpressionAdPositionTopOfThePage\\\" value=\\\"MainLine\\\" data-bind=\\\"checked: targetImpressionShareAdPositionUpdate\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BidStrategySetting_TargetImpressionShare_AdPosition_TopOfThePage')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"radio\\\"\\u003E\\u003Clabel\\u003E\\u003Cinput type=\\\"radio\\\" name=\\\"targetImpressionAdPositionAbsoluteTopOfThePage\\\" value=\\\"MainLine1\\\" data-bind=\\\"checked: targetImpressionShareAdPositionUpdate\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BidStrategySetting_TargetImpressionShare_AdPosition_AbsoluteTopOfThePage')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-control-static\\\"\\u003E\\u003Cspan class=\\\"description\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BidStrategySetting_TargetImpressionShare_SharePercent_Header')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cinput class=\\\"form-control custom-param__key-field target-impression-share-percent-field\\\" type=\\\"text\\\" data-bind=\\\"value: targetImpressionShare, valueUpdate: "input"\\\" aria-describedby=\\\"setTargetCpaBidError currencyLabelTargetCpa\\\"\\u003E\\u003Cspan class=\\\"target-impression-share-percent\\\"\\u003E\" + (pug.escape(null == (pug_interp = '%') ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv id=\\\"setTargetImpressionShareError\\\" role=\\\"alert\\\"\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"html: errorMessageTargetImpressionSharePercent\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-control-static target-cpc-container\\\" data-bind=\\\"visible: showTargetCPA\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BidStrategySetting_TargetCPAPrefix')) ? \"\" : pug_interp)) + \"\\u003Cinput\" + (\" class=\\\"form-control builkEdit-bid custom-param__key-field\\\"\"+\" type=\\\"text\\\" data-bind=\\\"value: targetCpa, valueUpdate: "input"\\\" aria-describedby=\\\"setTargetCpaBidError currencyLabelTargetCpa\\\"\"+pug.attr(\"name\", prefixBiddingScheme + 'BiddingScheme.TargetCpa', true, true)+pug.attr(\"aria-label\", i18n.getString('BidStrategySetting_TargetCPAPrefix'), true, true)) + \"\\u003E\\u003Cspan class=\\\"control-label\\\" id=\\\"currencyLabelTargetCpa\\\"\\u003E\" + (pug.escape(null == (pug_interp = PageContext.AccountCurrencyCode) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cdiv id=\\\"setTargetCpaBidError\\\" role=\\\"alert\\\"\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"html: errorMessageTargetCpa\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"alert alert-info\\\" data-bind=\\\"visible: showTargetCpaDefaultValueAlert\\\"\\u003E\\u003Cdiv class=\\\"alert-image\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cspan data-bind=\\\"html: targetCpaDefaultValueAlertMessge\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"checkbox max-cpc-container\\\" data-bind=\\\"visible: showCPC\\\"\\u003E\\u003Clabel\\u003E\\u003Cinput type=\\\"checkbox\\\" data-bind=\\\"css: { checked: checkCPC }, checked: checkCPC\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BidStrategySetting_SetMaxCPC')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\";\npug_mixins[\"popupHelp\"]('pop_BA_Settings_MaxCPC', i18n.getString('BidStrategySetting_SetMaxCPC'), i18n);\npug_html = pug_html + (\"\\u003Cdiv class=\\\"form-control-static\\\" data-bind=\\\"visible: checkCPC\\\"\\u003E\\u003Cdiv class=\\\"row max-cpc-input-row\\\"\\u003E\\u003Cdiv class=\\\"col-sm-3 input-group\\\"\\u003E\\u003Cinput\" + (\" class=\\\"form-control builkEdit-bid\\\"\"+\" type=\\\"text\\\" data-bind=\\\"value: maxCpc, valueUpdate: "input"\\\"\"+pug.attr(\"aria-label\", i18n.getString('BidStrategy_MaxCPC_Label'), true, true)+\" aria-describedby=\\\"setMaxCpcBidError currencyLabelMaxCpc\\\"\"+pug.attr(\"name\", prefixBiddingScheme + 'BiddingScheme.MaxCpc.Amount', true, true)) + \"\\u003E\\u003Cspan class=\\\"input-group-addon\\\" id=\\\"currencyLabelMaxCpc\\\"\\u003E\" + (pug.escape(null == (pug_interp = PageContext.AccountCurrencyCode) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv id=\\\"setMaxCpcBidError\\\" role=\\\"alert\\\"\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"html: errorMessageMaxCpc\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"alert alert-info\\\" data-bind=\\\"visible: showMaxCpcDefaultValueAlert\\\"\\u003E\\u003Cdiv class=\\\"alert-image\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cspan data-bind=\\\"html: maxCpcDefaultValueAlertMessge\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-control-static\\\" data-bind=\\\"visible: showPortfolioSection\\\"\\u003E\\u003Cdiv class=\\\"original-portfolio-strategy-container\\\" data-bind=\\\"visible: !showPortfolioSelector()\\\"\\u003E\\u003Cspan class=\\\"original-portfolio-bid-strategy\\\" data-bind=\\\"text: originalPortfolioBidStrategy\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Ca class=\\\"portfolio-bid-strategy-edit\\\" style=\\\"vertical-align:middle;\\\" href=\\\"javascript:void(0);\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Edit')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"portfolio-selector-container\\\" data-bind=\\\"visible: showPortfolioSelector\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv id=\\\"setPortfolioBidStrategyError\\\"\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"html: errorMessagePortfolioBidStrategy\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-control-static\\\" data-bind=\\\"visible: showCommissionRate\\\"\\u003E\\u003Cinput\" + (\" class=\\\"form-control builkEdit-bid custom-param__key-field\\\"\"+\" type=\\\"text\\\" data-bind=\\\"value: targetCommissionRate, valueUpdate: "input"\\\" aria-describedby=\\\"setTargetCommissionRateError currencyLabelTargetCommissionRate\\\"\"+pug.attr(\"name\", prefixBiddingScheme + 'BiddingScheme.TargetCommissionRate', true, true)) + \"\\u003E\\u003Cspan class=\\\"control-label\\\" id=\\\"currencyLabelTargetCommissionRate\\\"\\u003E\" + (pug.escape(null == (pug_interp = '%') ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cdiv id=\\\"setTargetCommissionRateError\\\" role=\\\"alert\\\"\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"html: errorMessageTargetCommissionRate\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"alert alert-info\\\" data-bind=\\\"visible: showTargetCommissionRateDefaultValueAlert\\\"\\u003E\\u003Cdiv class=\\\"alert-image\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cspan data-bind=\\\"html: targetCommissionRateDefaultValueAlertMessge\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"predictive-targeting-container form-group\\\" data-bind=\\\"visible: showAutoTargeting\\\"\\u003E\\u003Clabel class=\\\"control-label col-sm-2\\\"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BidStrategySetting_Label_Auto_Targeting')) ? \"\" : pug_interp)));\npug_mixins[\"popupHelp\"]('pop_BA_CampaignCreate_PredictiveTargeting', i18n.getString('BidStrategySetting_AutoTargeting'), i18n);\npug_html = pug_html + (\"\\u003C\\u002Fspan\\u003E\\u003C\\u002Flabel\\u003E\\u003Cdiv class=\\\"col-sm-6\\\"\\u003E\\u003Cdiv class=\\\"checkbox auto-targeting-container\\\"\\u003E\\u003Clabel\\u003E\\u003Cinput type=\\\"checkbox\\\" data-bind=\\\"css: { checked: checkAutoTargeting }, checked: checkAutoTargeting\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BidStrategySetting_AutoTargeting')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"predictive-matching-container form-group\\\" data-bind=\\\"visible: showPredictiveMatching\\\"\\u003E\\u003Clabel class=\\\"control-label col-sm-2\\\"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('AdvancedSetting_PredictiveMatching_Header')) ? \"\" : pug_interp)));\npug_mixins[\"popupHelp\"]('pop_BA_Keywords_PredictiveMatching', i18n.getString('AdvancedSetting_PredictiveMatching_Header'), i18n);\npug_html = pug_html + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Flabel\\u003E\\u003Cdiv class=\\\"col-sm-6\\\"\\u003E\\u003Cdiv class=\\\"checkbox predictive-matching-container\\\"\\u003E\\u003Clabel\\u003E\\u003Cinput type=\\\"checkbox\\\" data-bind=\\\"css: { checked: predictiveMatchingChecked }, checked: predictiveMatchingChecked\\\"\\u003E\\u003Cb\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('AdvancedSetting_PredictiveMatching_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fb\\u003E\\u003Cdiv style=\\\"padding-left: 8px;\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('AdvancedSetting_PredictiveMatching_Description')) ? \"\" : pug_interp)) + \" \\u003Ca class=\\\"HelpTopic\\\" href=\\\"javascript:void(0);\\\" query=\\\"help:app54583\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('LearnMoreLinkText')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"PageContext\" in locals_for_with?locals_for_with.PageContext:typeof PageContext!==\"undefined\"?PageContext:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"popupIds\" in locals_for_with?locals_for_with.popupIds:typeof popupIds!==\"undefined\"?popupIds:undefined,\"prefixBiddingScheme\" in locals_for_with?locals_for_with.prefixBiddingScheme:typeof prefixBiddingScheme!==\"undefined\"?prefixBiddingScheme:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n) {pug_html = pug_html + \"\\u003Cdiv class=\\\"clear\\\" data-bind=\\\"visible: !inSimpleMode()&& hasData()\\\"\\u003E\\u003Cdiv class=\\\"bidlandscape-action padding-bottom-fifteen\\\" id=\\\"applyButtonsDiv\\\"\\u003E\\u003Cinput\" + (\" class=\\\"btn btn-primary\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"value\", i18n.get('Save'), true, true)+\" data-bind=\\\"enable:inputValid()\\\"\") + \"\\u003E\\u003Cinput\" + (\" class=\\\"btn btn-default\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"value\", i18n.get('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));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n) {pug_html = pug_html + \"\\u003Ctable class=\\\"bidlandscape-detail-table table-full text-right vertical-align-middle\\\"\\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\\u003Ccol class=\\\"bid-landscape__col bid-landscape__col--bi\\\"\\u003E\\u003C!-- ko if: $root.entityType() != 'product-partition'--\\u003E\\u003Ccol class=\\\"bid-landscape__col bid-landscape__col--bi\\\"\\u003E\\u003C!-- \\u002Fko--\\u003E\\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.get('KPI_EstCost')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fth\\u003E\\u003Cth class=\\\"text-right bold\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('KPI_EstClick')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fth\\u003E\\u003C!-- \\u002Fko--\\u003E\\u003Cth class=\\\"text-right bold\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('KPI_EstImp')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fth\\u003E\\u003C!-- ko if: $root.entityType() != 'product-partition'--\\u003E\\u003Cth class=\\\"text-right bold\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('KPI_EstMlImp')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fth\\u003E\\u003C!-- \\u002Fko--\\u003E\\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() && _.size($root.customBidCurrentPoint()) \\u003E0--\\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.get('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\\u003Ctd data-bind=\\\"text:$root.customBidCurrentPoint().impressionsStr\\\"\\u003E\\u003C\\u002Ftd\\u003E\\u003C!-- ko if: $root.entityType() != 'product-partition'--\\u003E\\u003Ctd data-bind=\\\"text:$root.customBidCurrentPoint().mlImpressionsStr\\\"\\u003E\\u003C\\u002Ftd\\u003E\\u003C!-- \\u002Fko--\\u003E\\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\\\" data-bind=\\\"value:$index(), checked:$root.currentSelectedId(), attr:{name:$root.radioName(),id:$root.radioName()+$index(), "aria-label":"Bid "+bidStr}\\\"\\u003E\\u003C\\u002Ftd\\u003E\\u003Ctd class=\\\"text-left\\\"\\u003E\\u003Clabel class=\\\"bidlandscape-label vertical-align-middle type-normal\\\" data-bind=\\\"attr:{'for':$root.radioName()+$index()}, 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\\u003Ctd data-bind=\\\"text:impressionsStr\\\"\\u003E\\u003C\\u002Ftd\\u003E\\u003C!-- ko if: $root.entityType() != 'product-partition'--\\u003E\\u003Ctd data-bind=\\\"text:mlImpressionsStr\\\"\\u003E\\u003C\\u002Ftd\\u003E\\u003C!-- \\u002Fko--\\u003E\\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\\\" data-bind=\\\"value:landscapePointsLength(), checked:currentSelectedId(), attr:{name:radioName()}\\\"\\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\\\" id=\\\"otherbidlabel\\\" data-bind=\\\"attr:{for:dataArray().length}\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('BidLandscape_CustomInputText')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003Cinput class=\\\"bid-landscape__input form-control\\\" aria-labelledby=\\\"otherbidlabel\\\" data-bind=\\\"attr:{id:radioName()+'RadioInput'}, 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,\"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/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (EntityName, i18n) {pug_mixins[\"fwLink\"] = pug_interp = function(linkId, displayText, ariaLabelContext){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Ca\" + (pug.attr(\"href\", 'https://go.microsoft.com/fwlink/?linkid=' + linkId, true, true)+\" target=\\\"_blank\\\"\"+pug.attr(\"aria-label\", (ariaLabelContext || '') + ' ' + displayText, true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = displayText) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\";\n};\npug_html = pug_html + (\"\\u003Cdiv class=\\\"bid-landscape\\\" name=\\\"KeywordlandscapeContainer4Bid\\\" data-bind=\\\"css :{"bidlandscape-smiple-version":inSimpleMode() && hasData(), "panel-form modal-body bid-landscape-normal-version":!inSimpleMode()&& hasData()}, attr: { "data-type": entityType }\\\"\\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.get('BidLandscape_Title').replace('{0}', EntityName)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (\" class=\\\"close closeimage clickable\\\"\"+\" onclick=\\\"$(document).click()\\\" tabindex=\\\"0\\\" role=\\\"button\\\"\"+pug.attr(\"aria-label\", i18n.get('Close'), true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"clear bidlandscape-subTitle\\\" data-bind=\\\"visible:hasData()\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('Bidlandscape_SubTitleText')) ? \"\" : pug_interp)));\npug_mixins[\"fwLink\"]('403679', i18n.get('LearnMore'), i18n.get('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(\"./bidlandscapeTable.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\" + (\" class=\\\"close closeimage clickable\\\"\"+\" onclick=\\\"$(document).click()\\\" tabindex=\\\"0\\\" role=\\\"button\\\"\"+pug.attr(\"aria-label\", i18n.get('Close'), true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('Keyword_NoBidLandscapeText')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\" + (null == (pug_interp = require(\"./actionPanel.pug\").call(this, locals)) ? \"\" : pug_interp) + \"\\u003Cdiv class=\\\"clear bidlandscape-footer type-normal\\\" data-bind=\\\"visible: !inSimpleMode() && hasData(), html: i18n.get('bidlandscapeHelpText').replace('{0}', '').replace('{1}','').replace('{2}', '<b>'+startDateString()+'<\\u002Fb>').replace('{3}','<b>'+endDateString()+'<\\u002Fb>')\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"EntityName\" in locals_for_with?locals_for_with.EntityName:typeof EntityName!==\"undefined\"?EntityName: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/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (className, type, value) {var cls = [];\nif (className) {\ncls.push(className)\n}\nif (type == 'integer' || type == 'number') {\ncls.push('grid-cell-number')\n}\nelse {\ncls.push('grid-cell-text')\n}\ncls = cls.join(' ')\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([cls], [true]), false, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = value) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";}.call(this,\"className\" in locals_for_with?locals_for_with.className:typeof className!==\"undefined\"?className:undefined,\"type\" in locals_for_with?locals_for_with.type:typeof type!==\"undefined\"?type:undefined,\"value\" in locals_for_with?locals_for_with.value:typeof value!==\"undefined\"?value:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"alert alert-danger\\\" data-bind=\\\"visible: showError\\\" role=\\\"alert\\\"\\u003E\\u003Cdiv data-bind=\\\"text: errorMessage\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"alert alert-info\\\" data-bind=\\\"visible: showInfo\\\" role=\\\"alert\\\"\\u003E\\u003Cspan data-bind=\\\"html: infoMessageWithLearnMore\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"grid bingadsgrid\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (_TL_, i18n) {pug_html = pug_html + \"\\u003Cdiv class=\\\"raise-bid-popup-content normal-low-bid\\\"\\u003E\\u003Cspan\" + (\" class=\\\"closeimage close-button clickable\\\"\"+\" role=\\\"button\\\" tabindex=\\\"0\\\"\"+pug.attr(\"aria-label\", i18n.get('Button_Close'), true, true)) + \"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cdiv class=\\\"normal-low-bid-content\\\"\\u003E\\u003Cstrong class=\\\"normal-low-bid-title\\\"\\u003E\" + (pug.escape(null == (pug_interp = 'Recommended ad group bid') ? \"\" : pug_interp)) + \"\\u003C\\u002Fstrong\\u003E\\u003Cdiv class=\\\"normal-low-bid-subcontent\\\"\\u003E\\u003Cspan class=\\\"bid-suggestion\\\" data-bind=\\\"text: normalBidSuggestion()\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"normal-low-bid-footer\\\"\\u003E\\u003Ca class=\\\"apply-link\\\" href=\\\"javascript:void(0);\\\"\\u003E\" + (pug.escape(null == (pug_interp = 'Apply') ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E |\\u003Ca class=\\\"cancel-link\\\" href=\\\"javascript:void(0);\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString(_TL_('Cancel'))) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"_TL_\" in locals_for_with?locals_for_with._TL_:typeof _TL_!==\"undefined\"?_TL_: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/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (value) {pug_html = pug_html + \"\\u003Cdiv class=\\\"input-group\\\"\\u003E\\u003Cinput\" + (\" class=\\\"form-control input-bid\\\"\"+pug.attr(\"value\", value.Bid, true, true)+pug.attr(\"disabled\", !value.isBidEditable(), true, true)+pug.attr(\"aria-label\", value.i18n.get('Label_Bid'), true, true)) + \"\\u003E\\u003Cspan class=\\\"input-group-addon\\\"\\u003E\" + (pug.escape(null == (pug_interp = value.currency) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"value\" in locals_for_with?locals_for_with.value:typeof value!==\"undefined\"?value:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (adGroupType, bid, bidHintKey, bidStatus, bidStatusENUM, currency, i18n, isBidEditable, lowBidBtnText, suggestedBid, suggestionEnabled) {var inputClass = suggestionEnabled ? 'col-sm-10' : 'col-sm-9'\npug_html = pug_html + \"\\u003Cdiv class=\\\"status-row row\\\"\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([inputClass], [true]), false, true)) + \"\\u003E\\u003Cdiv class=\\\"input-group\\\"\\u003E\\u003Cinput\" + (pug.attr(\"class\", pug.classes([\"form-control\",\"input-bid\",bidStatus === 'error' ? 'error' : ''], [false,false,true]), false, true)+pug.attr(\"value\", bid, true, true)+pug.attr(\"disabled\", !isBidEditable(), true, true)+pug.attr(\"aria-label\", i18n.get('Label_Bid'), true, true)) + \"\\u003E\\u003Cspan class=\\\"input-group-addon\\\"\\u003E\" + (pug.escape(null == (pug_interp = currency) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-1 bid-status-icon\\\"\\u003E\";\nif (adGroupType !== 'SearchDynamic') {\npug_html = pug_html + \"\\u003Cdiv class=\\\"status-icon\\\"\\u003E\";\nswitch (bidStatus){\ncase bidStatusENUM.Good:\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"status_success\",\"spritedimagealign\",suggestionEnabled ? 'margin-left-1' : ''], [false,false,true]), false, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\";\n break;\ncase bidStatusENUM.Warning:\nif (suggestionEnabled) {\npug_html = pug_html + \"\\u003Cdiv\" + (\" class=\\\"status_warning spritedimagealign low_bid clickable\\\"\"+\" role=\\\"button\\\" tabindex=\\\"0\\\"\"+pug.attr(\"aria-label\", i18n.get('Creation_Workflow_Bid_Suggestion_Title'), true, true)) + \"\\u003E\\u003Cdiv\" + (\" class=\\\"raise-bid-popup-container\\\"\"+pug.attr(\"data-suggested_bid\", suggestedBid, true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\nif (bidHintKey == 'TrafficEstimation_Hint_CriticalLowBid') {\npug_html = pug_html + \"\\u003Cdiv class=\\\"status_warning spritedimagealign\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cdiv\" + (\" class=\\\"span iconba iconba-Lightbulb spritedimagealign low_bid clickable\\\"\"+\" role=\\\"button\\\" tabindex=\\\"0\\\"\"+pug.attr(\"aria-label\", i18n.get('Creation_Workflow_Bid_Suggestion_Title'), true, true)) + \"\\u003E\\u003Cdiv\" + (\" class=\\\"raise-bid-popup-container\\\"\"+pug.attr(\"data-suggested_bid\", suggestedBid, true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\n}\n break;\ncase bidStatusENUM.Error:\npug_html = pug_html + \"\\u003Cdiv class=\\\"status_error spritedimagealign\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n break;\ndefault:\npug_html = pug_html + \"\\u003Cdiv class=\\\"spritedimagealign\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n break;\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\nif (!suggestionEnabled) {\nif (bidHintKey == 'TrafficEstimation_Hint_CriticalLowBid') {\npug_html = pug_html + \"\\u003Cdiv class=\\\"col-sm-2 bid-hint-text\\\"\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"status-image\",bidStatus === bidStatusENUM.Error || bidStatus === bidStatusENUM.Warning ? '' : 'displayNone'], [false,true]), false, true)) + \"\\u003E\\u003Cdiv\" + (\" class=\\\"span iconba critical-low-bid icon-info clickable\\\"\"+pug.attr(\"data-hint-key\", bidHintKey, true, true)+\" role=\\\"button\\\" tabindex=\\\"0\\\" aria-label=\\\"Low bid\\\"\") + \"\\u003E\" + (pug.escape(null == (pug_interp = lowBidBtnText) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";}.call(this,\"adGroupType\" in locals_for_with?locals_for_with.adGroupType:typeof adGroupType!==\"undefined\"?adGroupType:undefined,\"bid\" in locals_for_with?locals_for_with.bid:typeof bid!==\"undefined\"?bid:undefined,\"bidHintKey\" in locals_for_with?locals_for_with.bidHintKey:typeof bidHintKey!==\"undefined\"?bidHintKey:undefined,\"bidStatus\" in locals_for_with?locals_for_with.bidStatus:typeof bidStatus!==\"undefined\"?bidStatus:undefined,\"bidStatusENUM\" in locals_for_with?locals_for_with.bidStatusENUM:typeof bidStatusENUM!==\"undefined\"?bidStatusENUM:undefined,\"currency\" in locals_for_with?locals_for_with.currency:typeof currency!==\"undefined\"?currency:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"isBidEditable\" in locals_for_with?locals_for_with.isBidEditable:typeof isBidEditable!==\"undefined\"?isBidEditable:undefined,\"lowBidBtnText\" in locals_for_with?locals_for_with.lowBidBtnText:typeof lowBidBtnText!==\"undefined\"?lowBidBtnText:undefined,\"suggestedBid\" in locals_for_with?locals_for_with.suggestedBid:typeof suggestedBid!==\"undefined\"?suggestedBid:undefined,\"suggestionEnabled\" in locals_for_with?locals_for_with.suggestionEnabled:typeof suggestionEnabled!==\"undefined\"?suggestionEnabled:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (applyBtnText, bidHintKey, contentText, hintKey, i18n, lowBidBtnContent, lowBidBtnTitle) {pug_html = pug_html + \"\\u003Cdiv class=\\\"low-bid-popup\\\"\\u003E\\u003Cdiv class=\\\"close close-button closeimage clickable\\\" role=\\\"button\\\" aria-label=\\\"Close\\\" tabindex=\\\"0\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\nswitch (hintKey){\ncase bidHintKey.CriticalLowBid:\npug_html = pug_html + \"\\u003Cdiv class=\\\"low-bid-title\\\"\\u003E\" + (pug.escape(null == (pug_interp = lowBidBtnTitle) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"low-bid-subcontent\\\"\\u003E\" + (pug.escape(null == (pug_interp = lowBidBtnContent) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n break;\ndefault:\npug_html = pug_html + \"\\u003Cp\\u003E\" + (pug.escape(null == (pug_interp = contentText) ? \"\" : pug_interp)) + \"\\u003C\\u002Fp\\u003E\";\n break;\n}\npug_html = pug_html + \"\\u003Cdiv class=\\\"footer\\\"\\u003E\\u003Ca class=\\\"apply-link\\\" href=\\\"javascript:void(0);\\\"\\u003E\" + (pug.escape(null == (pug_interp = applyBtnText) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E |\\u003Ca class=\\\"cancel-link\\\" href=\\\"javascript:void(0);\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('Cancel')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"applyBtnText\" in locals_for_with?locals_for_with.applyBtnText:typeof applyBtnText!==\"undefined\"?applyBtnText:undefined,\"bidHintKey\" in locals_for_with?locals_for_with.bidHintKey:typeof bidHintKey!==\"undefined\"?bidHintKey:undefined,\"contentText\" in locals_for_with?locals_for_with.contentText:typeof contentText!==\"undefined\"?contentText:undefined,\"hintKey\" in locals_for_with?locals_for_with.hintKey:typeof hintKey!==\"undefined\"?hintKey:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"lowBidBtnContent\" in locals_for_with?locals_for_with.lowBidBtnContent:typeof lowBidBtnContent!==\"undefined\"?lowBidBtnContent:undefined,\"lowBidBtnTitle\" in locals_for_with?locals_for_with.lowBidBtnTitle:typeof lowBidBtnTitle!==\"undefined\"?lowBidBtnTitle:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n) {pug_html = pug_html + \"\\u003Cdiv class=\\\"budget-editor\\\" data-bind=\\\"visible: isEditing()\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-control-static\\\" data-bind=\\\"visible: !isEditing()\\\"\\u003E\\u003Cdiv class=\\\"col-sm-fluid col-sm-fluid__no-padding-left\\\" data-bind=\\\"text: amount\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-fluid col-sm-fluid__no-padding-left\\\" data-bind=\\\"text: accountCurrencyCode\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-fluid link-edit\\\"\\u003E\\u003Ca href=\\\"javascript:void(0);\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('EditLink')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"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/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (accountCurrencyCode, currencySymbol, i18n, isDailyStandardName, isForVNext, minimumBudget) {pug_mixins[\"koError\"] = pug_interp = function(item, id){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"data-bind\", 'if: ' + item + '().length > 0, attr: {\"aria-hidden\": ' + item + '().length == 0}', true, true)+pug.attr(\"id\", id ? id : item, true, true)+\" role=\\\"alert\\\"\") + \"\\u003E\\u003Cdiv\" + (\" class=\\\"error\\\"\"+pug.attr(\"data-bind\", 'html: ' + item, true, true)+\" role=\\\"alert\\\"\") + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n};\n\n\n\n\npug_mixins[\"koValidationError\"] = pug_interp = function(item, id){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cul\" + (pug.attr(\"data-bind\", 'visible: !' + item + '.isValid(), foreach: ' + item + '.errors, attr: {\"aria-hidden\": ' + item + '.isValid()}', true, true)+pug.attr(\"id\", id ? id : item + 'ValidationError', true, true)+\" role=\\\"alert\\\"\") + \"\\u003E\\u003Cli role=\\\"presentation\\\"\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"html: $data\\\" role=\\\"alert\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fli\\u003E\\u003C\\u002Ful\\u003E\";\n};\npug_html = pug_html + \"\\u003Cdiv class=\\\"container-budget\\\"\\u003E\\u003Cdiv class=\\\"row\\\"\\u003E\\u003Cdiv class=\\\"col-sm-3\\\" role=\\\"presentation\\\"\\u003E\\u003Cdiv class=\\\"input-group\\\" role=\\\"presentation\\\"\\u003E\\u003Cinput class=\\\"budget-amount form-control\\\" type=\\\"text\\\" data-bind=\\\"textInput: Amount.string, hasFocus: Amount.editing, attr: {placeholder: budgetAmountPlaceholder, "aria-invalid": budgetInvalid, "aria-label": budgetLabel, "disabled": readOnly }, css: {"validation-error": budgetInvalid}\\\" aria-required=\\\"true\\\" aria-describedby=\\\"budgetError\\\"\\u003E\\u003C!-- ko if: showBudgetTypeSelectionOptions --\\u003E\\u003Cspan class=\\\"budget-currency input-group-addon lifetime-currency\\\"\\u003E\" + (pug.escape(null == (pug_interp = accountCurrencyCode) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C!-- \\u002Fko --\\u003E\\n\\u003C!-- ko ifnot: showBudgetTypeSelectionOptions --\\u003E\\u003Cspan class=\\\"budget-currency input-group-addon\\\"\\u003E\" + (pug.escape(null == (pug_interp = accountCurrencyCode) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C!-- \\u002Fko --\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C!-- ko ifnot: showBudgetTypeSelectionOptions --\\u003E\\u003Cdiv class=\\\"col-sm-3 form-control-static\\\"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('Control_CampaignBudgetControl_DailyBudgetOption')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C!-- \\u002Fko --\\u003E\\n\\u003C!-- ko if: showBudgetTypeSelectionOptions --\\u003E\\u003Cdiv class=\\\"col-sm-3\\\"\\u003E\\u003Cselect class=\\\"form-control\\\" id=\\\"budget-type\\\" data-bind=\\\"options: budgetTypeSelectionOptions, optionsText: "text", optionsValue: "value", value: selectedBudgetType, disable: !allowBudgetTypeSelection, attr: {"aria-label": budgetTypeLabel}\\\" aria-required=\\\"true\\\"\\u003E\\u003C\\u002Fselect\\u003E\\u003C\\u002Fdiv\\u003E\\u003C!-- \\u002Fko --\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"row\\\"\\u003E\\u003Cdiv class=\\\"col-sm-12\\\"\\u003E\";\npug_mixins[\"koError\"]('budgetError');\npug_mixins[\"koValidationError\"]('Amount', 'Campaigns_InlineValidBudgetInputMsg');\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"row\\\" data-bind=\\\"visible: showSuggestedBudget()\\\"\\u003E\\u003Cdiv class=\\\"col-sm-12\\\"\\u003E\\u003Cdiv class=\\\"budget-suggestion-container alert-info\\\"\\u003E\";\nif (isForVNext) {\npug_html = pug_html + \"\\u003Cspan class=\\\"iconba iconba-Lightbulb\\\"\\u003E\\u003C\\u002Fspan\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cspan class=\\\"infomark\\\"\\u003E\\u003C\\u002Fspan\\u003E\";\n}\npug_html = pug_html + \"\\u003Cspan class=\\\"budget-suggestion\\\" data-bind=\\\"text: budgetSuggestion()\\\"\\u003E\\u003C\\u002Fspan\\u003E\";\nif (isForVNext) {\npug_html = pug_html + \"\\u003Cbutton class=\\\"btn use-suggested-budget\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('Creation_Workflow_Use_Budget_Suggestion')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fbutton\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Ca class=\\\"link use-suggested-budget\\\" href=\\\"javascript:void(0);\\\" role=\\\"button\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('Creation_Workflow_Use_Budget_Suggestion')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"row\\\" data-bind=\\\"visible: BudgetScope() === "Daily" && !hideDailyBudgetOptions\\\"\\u003E\\u003Cdiv class=\\\"col-sm-12\\\"\\u003E\\u003Ca class=\\\"link expander expander-dailyType\\\" id=\\\"CampaignSettings_AdvancedBudgetOptions_Label\\\" href=\\\"javascript:void(0);\\\" data-bind=\\\"attr: {"aria-expanded": isDailyBudgetExpanded() ? "true" : "false"}\\\" role=\\\"button\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('CampaignSettings_AdvancedBudgetOptions')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-12 expandable displayNone\\\" id=\\\"AdvancedBudgetOptions\\\" role=\\\"radiogroup\\\" aria-labelledby=\\\"CampaignSettings_AdvancedBudgetOptions_Label\\\"\\u003E\\u003Cdiv class=\\\"radio\\\"\\u003E\\u003Clabel\\u003E\\u003Cinput\" + (\" type=\\\"radio\\\"\"+pug.attr(\"name\", isDailyStandardName, true, true)+\" value=\\\"true\\\" data-bind=\\\"checked:isDailyStandard.forEditing\\\"\") + \"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('BudgetDistribution_Standard')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003C!-- ko ifnot: hideAcceleratedBudgetOption() --\\u003E\\u003Cdiv class=\\\"radio\\\"\\u003E\\u003Clabel\\u003E\\u003Cinput\" + (\" type=\\\"radio\\\"\"+pug.attr(\"name\", isDailyStandardName, true, true)+\" value=\\\"false\\\" data-bind=\\\"checked:isDailyStandard.forEditing\\\"\") + \"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('BudgetDistribution_Accelerated')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003C!-- \\u002Fko --\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"alert alert-info budget-alert\\\" data-bind=\\\"visible: showFACHint()\\\"\\u003E\\u003Cdiv class=\\\"alert-image\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"alert-info-inline\\\"\\u003E\\u003Cspan data-bind=\\\"text: featureAdoptionCouponHint()\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"alert alert-info budget-alert\\\" data-bind=\\\"visible: showBudgetMinRecommend()\\\"\\u003E\\u003Cdiv class=\\\"alert-image\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"alert-info-inline\\\"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('AdjustmentForCampaignBudgets_AlertMessage')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"bold\\\"\\u003E\" + (pug.escape(null == (pug_interp = currencySymbol+minimumBudget) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = '.') ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"alert-budget-button\\\"\\u003E\\u003Cbutton class=\\\"btn btn-default apply-budget\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('AdjustmentForCampaignBudgets_ApplyRecommendationButton')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"accountCurrencyCode\" in locals_for_with?locals_for_with.accountCurrencyCode:typeof accountCurrencyCode!==\"undefined\"?accountCurrencyCode:undefined,\"currencySymbol\" in locals_for_with?locals_for_with.currencySymbol:typeof currencySymbol!==\"undefined\"?currencySymbol:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"isDailyStandardName\" in locals_for_with?locals_for_with.isDailyStandardName:typeof isDailyStandardName!==\"undefined\"?isDailyStandardName:undefined,\"isForVNext\" in locals_for_with?locals_for_with.isForVNext:typeof isForVNext!==\"undefined\"?isForVNext:undefined,\"minimumBudget\" in locals_for_with?locals_for_with.minimumBudget:typeof minimumBudget!==\"undefined\"?minimumBudget:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n, isShowDisclaimerBannerEnabled) {pug_mixins[\"popupHelp\"] = pug_interp = function(popupId, ariaLabelContext, i18n){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\nvar templateString = (i18n && i18n.get && i18n.get('Click to learn more about {{item}}')) || (i18n && i18n.getString && i18n.getString('Click to learn more about {{item}}')) || null\npug_html = pug_html + \"\\u003Ca\" + (\" class=\\\"helpbutton\\\"\"+\" type=\\\"helppopup\\\" role=\\\"button\\\"\"+pug.attr(\"topic\", popupId, true, true)+pug.attr(\"data-help\", true, true, true)+\" onclick=\\\"PopupController.PopupJsClick(this)\\\" href=\\\"javascript:void(0);\\\"\"+pug.attr(\"aria-label\", templateString ? templateString.replace('{{item}}', ariaLabelContext) : ariaLabelContext, true, true)) + \"\\u003E\\u003C\\u002Fa\\u003E\";\n};\npug_mixins[\"koErrors\"] = pug_interp = function(id, cssClass){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cul\" + (pug.attr(\"class\", pug.classes([cssClass ? cssClass : 'alert alert-danger'], [true]), false, true)+\" data-bind=\\\"visible: errors().length > 0, foreach: errors, attr: {"aria-hidden": errors().length == 0}\\\"\"+pug.attr(\"id\", id ? id : 'KoErrors', true, true)) + \"\\u003E\\u003Cli\\u003E\\u003Cdiv data-bind=\\\"html: $data\\\" role=\\\"alert\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fli\\u003E\\u003C\\u002Ful\\u003E\";\n};\npug_html = pug_html + \"\\u003Cdiv class=\\\"form-horizontal row budget-bid-settings\\\"\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\";\npug_mixins[\"koErrors\"]();\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Ch2 class=\\\"control-label col-sm-2\\\"\\u003E\\u003Clabel\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('Label_Budget')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\";\npug_mixins[\"popupHelp\"]('pop_BA_CampaignCreate_Budget_SharedBudget', i18n.get('Label_Budget'), i18n);\npug_html = pug_html + \"\\u003C\\u002Fh2\\u003E\\u003Cdiv class=\\\"col-sm-10 budget\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"bidding-strategy__container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group\\\" data-bind=\\\"visible: showPerformanceGrid || showAdgroupBidGrid\\\"\\u003E\\u003Ch2 class=\\\"control-label col-sm-2\\\"\\u003E\\u003Clabel\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('AdGroup_Bid')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\";\npug_mixins[\"popupHelp\"]('pop_BA_CampaignCreate_Budget_Bid', i18n.get('AdGroup_Bid'), i18n);\npug_html = pug_html + \"\\u003C\\u002Fh2\\u003E\\u003Cdiv class=\\\"form-control-static col-sm-10\\\" data-bind=\\\"visible: showPerformanceGrid\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('AdGroup_Bid_Description')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-control-static col-sm-10\\\" data-bind=\\\"visible: showAdgroupBidGrid\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('AdGroup_Bid_Description_No_Estimation')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group\\\" data-bind=\\\"visible: showPerformanceGrid\\\"\\u003E\\u003Cdiv class=\\\"col-sm-offset-2 col-sm-10 performance-grid\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group\\\" data-bind=\\\"visible: showAdgroupBidGrid\\\"\\u003E\\u003Cdiv class=\\\"col-sm-offset-2 col-sm-5 adgroupbid-grid\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group\\\" data-bind=\\\"visible: isCampaignLevelGoalEnabled\\\"\\u003E\\u003Ch2 class=\\\"control-label col-sm-2\\\"\\u003E\\u003Clabel\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('Campaign_Goals_Section_Title')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fh2\\u003E\\u003Cdiv class=\\\"form-control-static col-sm-10\\\" data-bind=\\\"visible: isCampaignLevelGoalEnabled\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('Campaign_Goals_Help_Text')) ? \"\" : pug_interp)) + (pug.escape(null == (pug_interp = ' ') ? \"\" : pug_interp)) + \"\\u003Ca class=\\\"HelpTopic\\\" href=\\\"javascript:void(0);\\\" query=\\\"help:app54814\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('LearnMoreLinkText')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-10 conversion-goal-selector\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Ca class=\\\"col-sm-12\\\" data-toggle=\\\"collapse\\\" data-target=\\\".campaign-targets\\\" href=\\\"javascript:void(0);\\\" data-bind=\\\"attr: {"aria-expanded": isCampaignTargetsExpanded() ? "true" : "false"}\\\" role=\\\"button\\\"\\u003E\\u003Cspan class=\\\"bedded-icon-marker spritedimagealign\\\" data-bind=\\\"css: isCampaignTargetsExpanded() ? "expandedImage" : "expanderImage"\\\"\\u003E\\u003C\\u002Fspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('SectionTitle_CampaignTargets')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003Cdiv class=\\\"collapse campaign-targets col-sm-12\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"advanced-settings-section\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\nif (isShowDisclaimerBannerEnabled) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"alert alert-info\\\"\\u003E\\u003Cdiv class=\\\"alert-image\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"alert-info-inline\\\"\\u003E\" + (null == (pug_interp = i18n.get('Targeting_Disclaimer')) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"isShowDisclaimerBannerEnabled\" in locals_for_with?locals_for_with.isShowDisclaimerBannerEnabled:typeof isShowDisclaimerBannerEnabled!==\"undefined\"?isShowDisclaimerBannerEnabled:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (bidHintKey, bidStatus, estimatedNum) {pug_html = pug_html + \"\\u003Cdiv class=\\\"estimated-num\\\"\\u003E\";\nif (bidHintKey === 'TrafficEstimation_Hint_CriticalLowBid' && bidStatus === 'warning') {\npug_html = pug_html + \"\\u003Cspan class=\\\"status-icon status_warning spritedimagealign\\\"\\u003E\\u003C\\u002Fspan\\u003E\";\n}\npug_html = pug_html + \"\\u003Cspan class=\\\"estimated-num-val\\\"\\u003E\" + (pug.escape(null == (pug_interp = estimatedNum) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"bidHintKey\" in locals_for_with?locals_for_with.bidHintKey:typeof bidHintKey!==\"undefined\"?bidHintKey:undefined,\"bidStatus\" in locals_for_with?locals_for_with.bidStatus:typeof bidStatus!==\"undefined\"?bidStatus:undefined,\"estimatedNum\" in locals_for_with?locals_for_with.estimatedNum:typeof estimatedNum!==\"undefined\"?estimatedNum:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (currencySymbol, currencySymbolClassName, i18n, i18nGlobal, minimumBudget) {pug_mixins[\"koErrors\"] = pug_interp = function(id, cssClass){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cul\" + (pug.attr(\"class\", pug.classes([cssClass ? cssClass : 'alert alert-danger'], [true]), false, true)+\" data-bind=\\\"visible: errors().length > 0, foreach: errors, attr: {"aria-hidden": errors().length == 0}\\\"\"+pug.attr(\"id\", id ? id : 'KoErrors', true, true)) + \"\\u003E\\u003Cli\\u003E\\u003Cdiv data-bind=\\\"html: $data\\\" role=\\\"alert\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fli\\u003E\\u003C\\u002Ful\\u003E\";\n};\npug_mixins[\"koValidationError\"] = pug_interp = function(item, id){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cul\" + (pug.attr(\"data-bind\", 'visible: !' + item + '.isValid(), foreach: ' + item + '.errors, attr: {\"aria-hidden\": ' + item + '.isValid()}', true, true)+pug.attr(\"id\", id ? id : item + 'ValidationError', true, true)+\" role=\\\"alert\\\"\") + \"\\u003E\\u003Cli role=\\\"presentation\\\"\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"html: $data\\\" role=\\\"alert\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fli\\u003E\\u003C\\u002Ful\\u003E\";\n};\n\n\n\n\npug_html = pug_html + \"\\u003Cdiv class=\\\"inline-budget-editor\\\" style=\\\"max-width:500px\\\"\\u003E\\u003Cdiv class=\\\"title-container\\\"\\u003E\\u003Cdiv class=\\\"title\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('Inline_Budget_Editor_Title')) ? \"\" : 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.get('Button_Close'), true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"input-budget-container\\\"\\u003E\\u003Cspan class=\\\"budgetText\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('Inline_Budget_Editor_Budget_Text')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cdiv class=\\\"input-box\\\"\\u003E\\u003Cspan\" + (pug.attr(\"class\", pug.classes([\"currency-symbol\",currencySymbolClassName], [false,true]), false, true)+\" data-bind=\\\"css: {error: !Amount.isValid()}\\\"\") + \"\\u003E\" + (pug.escape(null == (pug_interp = currencySymbol) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cinput class=\\\"inline-budget-edit-value form-control grid-error-field\\\" type=\\\"text\\\" data-bind=\\\"textInput: Amount.string, hasFocus: Amount.editing, css: {error: !Amount.isValid()}\\\" maxlength=\\\"15\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"alert alert-info budget-alert\\\" data-bind=\\\"visible: showBudgetMinRecommend()\\\"\\u003E\\u003Cdiv class=\\\"alert-image\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"alert-info-inline\\\"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('AdjustmentForCampaignBudgets_AlertMessage')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"bold\\\"\\u003E\" + (pug.escape(null == (pug_interp = currencySymbol+minimumBudget) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = '.') ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"alert-budget-button\\\"\\u003E\\u003Cbutton class=\\\"btn btn-default apply-budget\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('AdjustmentForCampaignBudgets_ApplyRecommendationButton')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\npug_mixins[\"koValidationError\"]('Amount');\npug_mixins[\"koErrors\"]();\npug_html = pug_html + \"\\u003Cdiv class=\\\"budget-landscape-container\\\"\\u003E\\u003Cdiv class=\\\"landscape-table\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"select-budget-container\\\"\\u003E\\u003Cspan class=\\\"budgetType\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('Inline_Budget_Editor_Budget_Type')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cselect class=\\\"inline-budget-edit-type form-control grid-error-field\\\" data-bind=\\\"options: budgetTypes, optionsText: "text", value: selectedType, disable: "true"\\\"\\u003E\\u003C\\u002Fselect\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"inline-budget-editor-actions\\\"\\u003E\\u003Cinput\" + (\" class=\\\"grid-edit-menu save btn btn-primary\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"value\", i18nGlobal.get('Grid_SaveButtonText'), true, true)) + \"\\u003E\\u003Cinput\" + (\" class=\\\"cancel btn btn-default grid-edit-menu\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"value\", i18nGlobal.get('Grid_CancelButtonText'), true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"currencySymbol\" in locals_for_with?locals_for_with.currencySymbol:typeof currencySymbol!==\"undefined\"?currencySymbol:undefined,\"currencySymbolClassName\" in locals_for_with?locals_for_with.currencySymbolClassName:typeof currencySymbolClassName!==\"undefined\"?currencySymbolClassName:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"i18nGlobal\" in locals_for_with?locals_for_with.i18nGlobal:typeof i18nGlobal!==\"undefined\"?i18nGlobal:undefined,\"minimumBudget\" in locals_for_with?locals_for_with.minimumBudget:typeof minimumBudget!==\"undefined\"?minimumBudget:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18nGlobal) {pug_mixins[\"koErrors\"] = pug_interp = function(id, cssClass){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cul\" + (pug.attr(\"class\", pug.classes([cssClass ? cssClass : 'alert alert-danger'], [true]), false, true)+\" data-bind=\\\"visible: errors().length > 0, foreach: errors, attr: {"aria-hidden": errors().length == 0}\\\"\"+pug.attr(\"id\", id ? id : 'KoErrors', true, true)) + \"\\u003E\\u003Cli\\u003E\\u003Cdiv data-bind=\\\"html: $data\\\" role=\\\"alert\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fli\\u003E\\u003C\\u002Ful\\u003E\";\n};\npug_mixins[\"koValidationError\"] = pug_interp = function(item, id){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cul\" + (pug.attr(\"data-bind\", 'visible: !' + item + '.isValid(), foreach: ' + item + '.errors, attr: {\"aria-hidden\": ' + item + '.isValid()}', true, true)+pug.attr(\"id\", id ? id : item + 'ValidationError', true, true)+\" role=\\\"alert\\\"\") + \"\\u003E\\u003Cli role=\\\"presentation\\\"\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"html: $data\\\" role=\\\"alert\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fli\\u003E\\u003C\\u002Ful\\u003E\";\n};\n\n\n\n\npug_html = pug_html + \"\\u003Cdiv class=\\\"inline-budget-editor\\\" style=\\\"max-width:500px\\\"\\u003E\\u003Cdiv class=\\\"display-inline\\\"\\u003E\\u003Cinput class=\\\"inline-budget-edit-value form-control grid-error-field\\\" type=\\\"text\\\" data-bind=\\\"textInput: Amount.string, hasFocus: Amount.editing, css: {error: !Amount.isValid()}\\\" maxlength=\\\"15\\\"\\u003E\\u003Cselect class=\\\"inline-budget-edit-type form-control grid-error-field\\\" data-bind=\\\"options: budgetTypes, optionsText: "text", value: selectedType, disable: "true"\\\"\\u003E\\u003C\\u002Fselect\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cinput\" + (\" class=\\\"grid-edit-menu save btn btn-primary\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"value\", i18nGlobal.get('Grid_SaveButtonText'), true, true)) + \"\\u003E\\u003Cinput\" + (\" class=\\\"cancel btn btn-default grid-edit-menu\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"value\", i18nGlobal.get('Grid_CancelButtonText'), true, true)) + \"\\u003E\";\npug_mixins[\"koValidationError\"]('Amount');\npug_mixins[\"koErrors\"]();\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";}.call(this,\"i18nGlobal\" in locals_for_with?locals_for_with.i18nGlobal:typeof i18nGlobal!==\"undefined\"?i18nGlobal:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (budgetTitle, hasEvent, helpId, helpText, i18n, isForward, isInProductFeedbackLoopOn, showData) {pug_mixins[\"seemore\"] = pug_interp = function(){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Ca href=\\\"javascript:;\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('BudgetRecommendation_StatusLink')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\";\n};\npug_html = pug_html + \"\\u003Cdiv class=\\\"budget-landscape-container-outer\\\"\\u003E\";\nif (hasEvent && showData) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"budgetlandscape-seasonal-title\\\"\\u003E\\u003Ch5 class=\\\"budgetlandscape-seasonal-title-text col-xs-11 padding-zero margin-zero bold\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('BudgetLandscape_Seaonal_Recommendation')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fh5\\u003E\\u003Cdiv\" + (\" class=\\\"iconba iconba-Cancel close closeimage clickable\\\"\"+\" id=\\\"budget-landscape-close-image\\\" onclick=\\\"$(document).click()\\\" tabindex=\\\"0\\\" role=\\\"button\\\"\"+pug.attr(\"aria-label\", i18n.get('Close'), true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nif (showData) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"budget-landscape panel panel-white panel-default padding-zero budgetlandscape-normal-view\\\"\\u003E\\u003Cdiv class=\\\"panel-outer-body\\\"\\u003E\\u003Ch2 class=\\\"budgetlandscape-title col-xs-11 padding-zero margin-zero bold\\\"\\u003E\" + (pug.escape(null == (pug_interp = budgetTitle) ? \"\" : pug_interp)) + \"\\u003C\\u002Fh2\\u003E\";\nif (!hasEvent) {\npug_html = pug_html + \"\\u003Cdiv\" + (\" class=\\\"iconba iconba-Cancel close closeimage clickable\\\"\"+\" onclick=\\\"$(document).click()\\\" tabindex=\\\"0\\\" role=\\\"button\\\"\"+pug.attr(\"aria-label\", i18n.get('Close'), true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003Cdiv class=\\\"panel-body padding-zero clear\\\"\\u003E\\u003Ch5 class=\\\"clear budgetlandscape-helptext margin-zero\\\"\\u003E\\u003Cspan\\u003E\" + (null == (pug_interp = helpText) ? \"\" : pug_interp) + \"\\u003C\\u002Fspan\\u003E\";\nif (isForward) {\npug_html = pug_html + \"\\u003Cspan class=\\\"bold\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('BudgetLandscape_ForecastingText')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\n}\npug_html = pug_html + \"\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = ' ') ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Ca\" + (\" class=\\\"HelpTopic\\\"\"+pug.attr(\"query\", 'help:'+helpId, true, true)+\" href=\\\"javascript:void(0);\\\"\") + \"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('LearnMore')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fh5\\u003E\\u003Cdiv class=\\\"budget-landscape-div clear\\\"\\u003E\\u003Cdiv class=\\\"budget-landscape-container\\\"\\u003E\\u003Cdiv class=\\\"landscape-table\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"landscape-chart\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\nif (!isInProductFeedbackLoopOn) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"pull-left more-suggestion more-recommendation\\\"\\u003E\";\npug_mixins[\"seemore\"]();\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003Cdiv class=\\\"clear\\\"\\u003E\";\nif (!isInProductFeedbackLoopOn) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"bidlandscape-footer padding-zero margin-top-ten\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('BudgetLandscape_Note')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"with-feedback-footer\\\"\\u003E\\u003Cdiv class=\\\"budget-landscape-actions\\\"\\u003E\\u003Cbutton class=\\\"btn btn-hero btn-primary apply\\\" data-bind=\\\"disable: isCurrentDataRowSelected() || showErrorMessage()\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('Save')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fbutton\\u003E\\u003Cbutton class=\\\"btn btn-default cancel\\\" id=\\\"budget-landscape-cancel\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('Cancel')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fdiv\\u003E\";\nif (isInProductFeedbackLoopOn) {\npug_html = pug_html + \"\\u003Cspan class=\\\"budget-landscape-feedback-actions\\\"\\u003E\\u003Cspan class=\\\"feedback-comment\\\" data-bind=\\\"text: feedbackComment\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = ' ') ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Ca class=\\\"navigate-to-recommended-page-link\\\" data-bind=\\\"visible: isRecommendedPageLinkVisible\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('Budget_Landscape_Feedback_GiveItTry')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003Cspan class=\\\"thumb-action\\\" data-bind=\\\"visible: isThumbVisible\\\"\\u003E\\u003Cspan class=\\\"iconba iconba-Like budget-landscape-like\\\" role=\\\"button\\\" data-bind=\\\"visible: isLikeVisible, event: { mouseover: overLike, mouseout: overLikeOut}, click: onClickLike\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"iconba iconba-LikeSolid budget-landscape-like\\\" role=\\\"button\\\" data-bind=\\\"visible: isLikeSolidVisible, event: { mouseover: overLike, mouseout: overLikeOut}, click: onClickLike\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"iconba iconba-Like budget-landscape-dislike\\\" role=\\\"button\\\" data-bind=\\\"visible: isDislikeVisible, event: { mouseover: overDislike, mouseout: overDislikeOut}, click: onClickDislike\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"iconba iconba-LikeSolid budget-landscape-dislike\\\" role=\\\"button\\\" data-bind=\\\"visible: isDislikeSolidVisible, event: { mouseover: overDislike, mouseout: overDislikeOut}, click: onClickDislike\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fspan\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nif (!showData) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"budget-landscape panel panel-default col-xs-10 col-xs-pull-1 col-xs-push-1\\\"\\u003E\\u003Cdiv class=\\\"panel-heading margin-top-ten\\\"\\u003E\\u003Cdiv\" + (\" class=\\\"iconba iconba-Cancel close closeimage clickable\\\"\"+\" onclick=\\\"$(document).click()\\\" tabindex=\\\"0\\\" role=\\\"button\\\"\"+pug.attr(\"aria-label\", i18n.get('Close'), true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"panel-body\\\"\\u003E\\u003Ch4\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('BudgetRecommendation_ErrorText')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fh4\\u003E\\u003Cdiv class=\\\"budget-status-link more-suggestion more-recommendation\\\"\\u003E\";\npug_mixins[\"seemore\"]();\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"clear margin-top-ten\\\"\\u003E\\u003Cbutton class=\\\"btn btn-default cancel\\\" id=\\\"budget-landscape-cancel\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('Close')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";}.call(this,\"budgetTitle\" in locals_for_with?locals_for_with.budgetTitle:typeof budgetTitle!==\"undefined\"?budgetTitle:undefined,\"hasEvent\" in locals_for_with?locals_for_with.hasEvent:typeof hasEvent!==\"undefined\"?hasEvent:undefined,\"helpId\" in locals_for_with?locals_for_with.helpId:typeof helpId!==\"undefined\"?helpId:undefined,\"helpText\" in locals_for_with?locals_for_with.helpText:typeof helpText!==\"undefined\"?helpText:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"isForward\" in locals_for_with?locals_for_with.isForward:typeof isForward!==\"undefined\"?isForward:undefined,\"isInProductFeedbackLoopOn\" in locals_for_with?locals_for_with.isInProductFeedbackLoopOn:typeof isInProductFeedbackLoopOn!==\"undefined\"?isInProductFeedbackLoopOn:undefined,\"showData\" in locals_for_with?locals_for_with.showData:typeof showData!==\"undefined\"?showData:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (message) {pug_html = pug_html + \"\\u003Cp class=\\\"lightbox-sub-message\\\"\\u003E\" + (null == (pug_interp = message) ? \"\" : pug_interp) + \"\\u003C\\u002Fp\\u003E\";}.call(this,\"message\" in locals_for_with?locals_for_with.message:typeof message!==\"undefined\"?message:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (applyButtonText, applyForThisPageOnlyInfo, cancelButtonText, isForVNext, selectLabel, title) {pug_html = pug_html + \"\\u003Cdiv class=\\\"form-horizontal panel\\\"\\u003E\\u003Cdiv class=\\\"panel-heading\\\" role=\\\"heading\\\" aria-level=\\\"2\\\"\\u003E\\u003Cdiv class=\\\"panel-title\\\"\\u003E\" + (pug.escape(null == (pug_interp = title) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"panel-body\\\"\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Clabel class=\\\"col-sm-2 control-label\\\" id=\\\"CampaignExclusionCampaignSettingsLabel\\\"\\u003E\" + (pug.escape(null == (pug_interp = selectLabel) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003Cdiv class=\\\"col-sm-4\\\"\\u003E\\u003Cselect class=\\\"form-control\\\" id=\\\"SelectedBulkEditOption\\\" autocomplete=\\\"off\\\" autofocus=\\\"autofocus\\\" name=\\\"SelectedBulkEditOption\\\" aria-labelledby=\\\"CampaignExclusionCampaignSettingsLabel\\\" data-bind=\\\"options: selections, optionsText: "text", optionsValue: "value", selectedOptions: selectedValue\\\"\\u003E\\u003C\\u002Fselect\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C!--ko foreach: selections--\\u003E\\u003Cform data-bind=\\\"visible: $root.selectedValue()[0] === value\\\"\\u003E\\u003Cdiv class=\\\"form-group row\\\"\\u003E\\u003C!--ko if: name !== 'AdScheduleUseSearcherTimeZone' && name !== 'EndDate'--\\u003E\\u003Clabel class=\\\"col-sm-2 control-label\\\"\\u003E\\u003Cspan data-bind=\\\"text: label, attr: { id: "CampaignExclusionInputAreaLabel_" + $index() }\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Ca class=\\\"helpbutton\\\" id=\\\"exclusionHelp\\\" data-bind=\\\"attr: {topic: helpTopic, "aria-label": helpAriaLabel}\\\" type=\\\"helppopup\\\" href=\\\"javascript:void(0);\\\" onclick=\\\"PopupController.PopupJsClick(this)\\\" role=\\\"button\\\"\\u003E\\u003C\\u002Fa\\u003E\\u003C\\u002Flabel\\u003E\\u003Cdiv class=\\\"col-sm-4 exclusion-textarea-container\\\"\\u003E\\u003Ctextarea class=\\\"form-control\\\" data-bind=\\\"attr: { name: name, "aria-labelledby": "CampaignExclusionInputAreaLabel_" + $index() }, textInput: textAreaValue\\\" rows=\\\"6\\\"\\u003E\\u003C\\u002Ftextarea\\u003E\\u003C\\u002Fdiv\\u003E\\u003C!--\\u002Fko--\\u003E\\u003C!--ko if: name == 'AdScheduleUseSearcherTimeZone'--\\u003E\\u003Clabel class=\\\"col-sm-2 control-label\\\"\\u003E\\u003Cspan data-bind=\\\"text: label, attr: { id: "CampaignExclusionInputAreaLabel_" + $index() }\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Ca class=\\\"helpbutton\\\" id=\\\"exclusionHelp\\\" data-bind=\\\"attr: {topic: helpTopic, "aria-label": helpAriaLabel}\\\" type=\\\"helppopup\\\" href=\\\"javascript:void(0);\\\" onclick=\\\"PopupController.PopupJsClick(this)\\\" role=\\\"button\\\"\\u003E\\u003C\\u002Fa\\u003E\\u003C\\u002Flabel\\u003E\\u003Cdiv class=\\\"col-sm-4 schedule-timezone-setting-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C!--\\u002Fko--\\u003E\\u003C!--ko if: name === 'EndDate'--\\u003E\\u003Clabel class=\\\"col-sm-2 control-label\\\"\\u003E\\u003Cspan data-bind=\\\"text: label, attr: { id: "CampaignExclusionInputAreaLabel_" + $index() }\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Flabel\\u003E\\u003Cdiv class=\\\"col-sm-4 checkbox form-inline\\\" id=\\\"endDateContainer\\\"\\u003E\\u003Cdiv data-ref=\\\"childView\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"font-error\\\"\\u003E\\u003Cdiv data-bind=\\\"text: $root.errorMsg\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C!--\\u002Fko--\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fform\\u003E\\u003C!--\\u002Fko--\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Ci class=\\\"infomark spritedimage\\\"\\u003E\\u003C\\u002Fi\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = applyForThisPageOnlyInfo) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"panel-footer save-bar\\\"\\u003E\";\nif (isForVNext) {\npug_html = pug_html + \"\\u003Cbutton class=\\\"btn btn-primary\\\" id=\\\"save\\\"\\u003E\" + (pug.escape(null == (pug_interp = applyButtonText) ? \"\" : pug_interp)) + \"\\u003C\\u002Fbutton\\u003E\\u003Cbutton class=\\\"btn btn-default\\\" id=\\\"cancel\\\"\\u003E\" + (pug.escape(null == (pug_interp = cancelButtonText) ? \"\" : pug_interp)) + \"\\u003C\\u002Fbutton\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cinput\" + (\" class=\\\"btn btn-primary\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"value\", applyButtonText, true, true)) + \"\\u003E\\u003Cinput\" + (\" class=\\\"btn btn-default\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"value\", cancelButtonText, true, true)) + \"\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"applyButtonText\" in locals_for_with?locals_for_with.applyButtonText:typeof applyButtonText!==\"undefined\"?applyButtonText:undefined,\"applyForThisPageOnlyInfo\" in locals_for_with?locals_for_with.applyForThisPageOnlyInfo:typeof applyForThisPageOnlyInfo!==\"undefined\"?applyForThisPageOnlyInfo:undefined,\"cancelButtonText\" in locals_for_with?locals_for_with.cancelButtonText:typeof cancelButtonText!==\"undefined\"?cancelButtonText:undefined,\"isForVNext\" in locals_for_with?locals_for_with.isForVNext:typeof isForVNext!==\"undefined\"?isForVNext:undefined,\"selectLabel\" in locals_for_with?locals_for_with.selectLabel:typeof selectLabel!==\"undefined\"?selectLabel:undefined,\"title\" in locals_for_with?locals_for_with.title:typeof title!==\"undefined\"?title:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (message) {pug_html = pug_html + \"\\u003Cdiv\\u003E\\u003Cp class=\\\"lightbox-sub-message\\\"\\u003E\" + (null == (pug_interp = message) ? \"\" : pug_interp) + \"\\u003C\\u002Fp\\u003E\\u003Cdiv id=\\\"transfer-errors\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cbr\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"message\" in locals_for_with?locals_for_with.message:typeof message!==\"undefined\"?message:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (message) {pug_html = pug_html + \"\\u003Cp class=\\\"lightbox-sub-message\\\"\\u003E\" + (null == (pug_interp = message) ? \"\" : pug_interp) + \"\\u003C\\u002Fp\\u003E\";}.call(this,\"message\" in locals_for_with?locals_for_with.message:typeof message!==\"undefined\"?message:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n) {pug_html = pug_html + \"\\u003Cdiv class=\\\"radio\\\"\\u003E\\u003Clabel class=\\\"schedule-timezone-setting-account\\\"\\u003E\\u003Cinput type=\\\"radio\\\" name=\\\"adScheduleUseSearcherTimeZone\\\" value=\\\"false\\\" data-bind=\\\"checked: adScheduleUseSearcherTimeZoneEdit\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('ImprovedAdScheduling_TimeZone_LocationOfYourAccount')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"schedule-timezone-setting-text\\\" data-bind=\\\"text: timeZoneText\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"radio\\\"\\u003E\\u003Clabel class=\\\"schedule-timezone-setting-viewer\\\"\\u003E\\u003Cinput type=\\\"radio\\\" name=\\\"adScheduleUseSearcherTimeZone\\\" value=\\\"true\\\" data-bind=\\\"checked: adScheduleUseSearcherTimeZoneEdit\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('ImprovedAdScheduling_TimeZone_LocationOfPerson')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"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/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n) {pug_mixins[\"previewGrid\"] = pug_interp = function(columns){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cdiv class=\\\"panel-footer\\\" data-bind=\\\"visible: showPreview\\\"\\u003E\\u003Cdiv data-bind=\\\"html: changeText\\\" role=\\\"alert\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"previewTable grid\\\" data-bind=\\\"if: results().length > 0, visible: results().length > 0\\\"\\u003E\\u003Ctable\\u003E\\u003Cthead\\u003E\\u003C!--ko if: $root.previewGrids--\\u003E\\u003Ctr class=\\\"grid-header-row\\\" data-bind=\\\"foreach: previewGrids\\\"\\u003E\\u003Cth class=\\\"grid-header-cell grid-disabledsort\\\"\\u003E\\u003Cdiv class=\\\"grid-header-textcontainer\\\"\\u003E\\u003Ca class=\\\"grid-header-text\\\" data-bind=\\\"text: $data\\\"\\u003E\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fth\\u003E\\u003C\\u002Ftr\\u003E\\u003C!--\\u002Fko--\\u003E\\u003C!--ko ifnot: $root.previewGrids--\\u003E\\u003Ctr class=\\\"grid-header-row\\\"\\u003E\";\n// iterate columns\n;(function(){\n var $$obj = columns;\n if ('number' == typeof $$obj.length) {\n for (var pug_index0 = 0, $$l = $$obj.length; pug_index0 < $$l; pug_index0++) {\n var column = $$obj[pug_index0];\npug_html = pug_html + \"\\u003Cth class=\\\"grid-header-cell grid-disabledsort\\\"\\u003E\\u003Cdiv class=\\\"grid-header-textcontainer\\\"\\u003E\\u003Ca class=\\\"grid-header-text\\\"\\u003E\" + (pug.escape(null == (pug_interp = column) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fth\\u003E\";\n }\n } else {\n var $$l = 0;\n for (var pug_index0 in $$obj) {\n $$l++;\n var column = $$obj[pug_index0];\npug_html = pug_html + \"\\u003Cth class=\\\"grid-header-cell grid-disabledsort\\\"\\u003E\\u003Cdiv class=\\\"grid-header-textcontainer\\\"\\u003E\\u003Ca class=\\\"grid-header-text\\\"\\u003E\" + (pug.escape(null == (pug_interp = column) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fth\\u003E\";\n }\n }\n}).call(this);\n\npug_html = pug_html + \"\\u003C\\u002Ftr\\u003E\\u003C!--\\u002Fko--\\u003E\\u003C\\u002Fthead\\u003E\\u003Ctbody data-bind=\\\"foreach: results\\\"\\u003E\\u003Ctr class=\\\"grid-row\\\" data-bind=\\\"foreach: $data.data\\\"\\u003E\\u003Ctd class=\\\"grid-cell\\\"\\u003E\\u003C!-- ko if: $data.isHtml--\\u003E\\u003Cdiv class=\\\"grid-content-container\\\" data-bind=\\\"html: $data.value\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C!-- \\u002Fko--\\u003E\\u003C!-- ko if: !$data.isHtml--\\u003E\\u003Cdiv class=\\\"grid-content-container\\\" data-bind=\\\"text: $data.value\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C!-- \\u002Fko--\\u003E\\u003C\\u002Ftd\\u003E\\u003C\\u002Ftr\\u003E\\u003C\\u002Ftbody\\u003E\\u003C\\u002Ftable\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n};\npug_mixins[\"errorsGrid\"] = pug_interp = function(columns, errorColumnIsHtml){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cdiv class=\\\"panel-footer\\\" data-bind=\\\"visible: showErrors() && !isCampaignAdGroupCopyPasteOperation()\\\"\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"html: errorCountString\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Ca class=\\\"errorCountLink\\\" data-bind=\\\"html: errorCountLinkText\\\" href=\\\"javascript:void(0)\\\"\\u003E\\u003C\\u002Fa\\u003E\\u003Cbr\\u003E\\u003Cdiv class=\\\"previewTable grid\\\" data-bind=\\\"visible: showErrorGrid\\\"\\u003E\\u003Ctable\\u003E\\u003Cthead\\u003E\\u003C!--ko if: $root.errorsGrids--\\u003E\\u003Ctr class=\\\"grid-header-row\\\" data-bind=\\\"foreach: errorsGrids\\\"\\u003E\\u003Cth class=\\\"grid-header-cell grid-disabledsort\\\"\\u003E\\u003Cdiv class=\\\"grid-header-textcontainer\\\"\\u003E\\u003Ca class=\\\"grid-header-text\\\" data-bind=\\\"text: $data\\\"\\u003E\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fth\\u003E\\u003C!--ko if: $index() === $parent.errorsGrids().length - 1--\\u003E\\u003Cth class=\\\"grid-header-cell grid-disabledsort\\\"\\u003E\\u003Cdiv class=\\\"grid-header-textcontainer\\\"\\u003E\\u003Ca class=\\\"grid-header-text\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BulkEdit_InlineError_ErrorHeader')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fth\\u003E\\u003C!--\\u002Fko--\\u003E\\u003C\\u002Ftr\\u003E\\u003C!--\\u002Fko--\\u003E\\u003C!--ko ifnot: $root.errorsGrids--\\u003E\\u003Ctr class=\\\"grid-header-row\\\"\\u003E\";\n// iterate columns\n;(function(){\n var $$obj = columns;\n if ('number' == typeof $$obj.length) {\n for (var pug_index1 = 0, $$l = $$obj.length; pug_index1 < $$l; pug_index1++) {\n var column = $$obj[pug_index1];\npug_html = pug_html + \"\\u003Cth class=\\\"grid-header-cell grid-disabledsort\\\"\\u003E\\u003Cdiv class=\\\"grid-header-textcontainer\\\"\\u003E\\u003Ca class=\\\"grid-header-text\\\"\\u003E\" + (pug.escape(null == (pug_interp = column) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fth\\u003E\";\n }\n } else {\n var $$l = 0;\n for (var pug_index1 in $$obj) {\n $$l++;\n var column = $$obj[pug_index1];\npug_html = pug_html + \"\\u003Cth class=\\\"grid-header-cell grid-disabledsort\\\"\\u003E\\u003Cdiv class=\\\"grid-header-textcontainer\\\"\\u003E\\u003Ca class=\\\"grid-header-text\\\"\\u003E\" + (pug.escape(null == (pug_interp = column) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fth\\u003E\";\n }\n }\n}).call(this);\n\npug_html = pug_html + \"\\u003Cth class=\\\"grid-header-cell grid-disabledsort\\\"\\u003E\\u003Cdiv class=\\\"grid-header-textcontainer\\\"\\u003E\\u003Ca class=\\\"grid-header-text\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BulkEdit_InlineError_ErrorHeader')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fth\\u003E\\u003C\\u002Ftr\\u003E\\u003C!--\\u002Fko--\\u003E\\u003C\\u002Fthead\\u003E\\u003Ctbody data-bind=\\\"foreach: inlineErrors\\\"\\u003E\\u003Ctr class=\\\"grid-row\\\"\\u003E\\u003C!-- ko foreach: $data.data--\\u003E\\u003Ctd class=\\\"grid-cell\\\"\\u003E\\u003C!-- ko if: $data.isHtml--\\u003E\\u003Cdiv class=\\\"grid-content-container\\\" data-bind=\\\"html: $data.value\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C!-- \\u002Fko--\\u003E\\u003C!-- ko if: !$data.isHtml--\\u003E\\u003Cdiv class=\\\"grid-content-container\\\" data-bind=\\\"text: $data.value\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C!-- \\u002Fko--\\u003E\\u003C\\u002Ftd\\u003E\\u003C!-- \\u002Fko--\\u003E\\u003Ctd class=\\\"grid-cell\\\"\\u003E\\u003Cdiv class=\\\"grid-content-container\\\" role=\\\"alert\\\"\\u003E\\u003C!-- ko foreach: $data.combinedErrors --\\u003E\";\nif (errorColumnIsHtml) {\npug_html = pug_html + \"\\u003Cspan data-bind=\\\"html: $data\\\"\\u003E\\u003C\\u002Fspan\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cspan data-bind=\\\"text: $data\\\"\\u003E\\u003C\\u002Fspan\\u003E\";\n}\npug_html = pug_html + \"\\u003Cbr\\u003E\\u003C!-- \\u002Fko --\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Ftd\\u003E\\u003C\\u002Ftr\\u003E\\u003C\\u002Ftbody\\u003E\\u003C\\u002Ftable\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"panel-footer\\\" data-bind=\\\"visible: showErrors() && isCampaignAdGroupCopyPasteOperation()\\\"\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"html: completedWithErrorsBulkEditResultsString\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n};\npug_html = pug_html + (\"\\u003Cdiv class=\\\"panel\\\" data-bind=\\\"visible: showPanel\\\"\\u003E\\u003Cdiv class=\\\"panel-heading\\\" role=\\\"heading\\\" aria-level=\\\"2\\\"\\u003E\\u003Cdiv class=\\\"panel-title\\\" data-bind=\\\"html: titleText\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"panel-body form-horizontal\\\"\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('SetCampaignLanguageTo')) ? \"\" : pug_interp)) + \"\\u003Cspan class=\\\"updateLanguage\\\"\\u003E\\u003Cdiv class=\\\"language-selector-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"div\\\" data-bind=\\\"attr: { role: errorRole }\\\"\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"html: errorMessage\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\" + (null == (pug_interp = require(\"../../../@bingads-webui-static-legacy/bulk-edit/template/status.pug\").call(this, locals)) ? \"\" : pug_interp));\nvar header1 = i18n.getString('BulkEdit_Campaign_EntityNameHeader')\nvar header2 = i18n.getString('BulkEdit_Campaign_OldLanguageHeader')\nvar header3 = i18n.getString('BulkEdit_Campaign_NewLanguageHeader')\npug_mixins[\"previewGrid\"]([header1, header2, header3]);\nvar header5 = i18n.getString('BulkEdit_Campaign_EntityNameHeader')\nvar header6 = i18n.getString('BulkEdit_Campaign_OldLanguageHeader')\nvar header7 = i18n.getString('BulkEdit_Campaign_AttemptedLanguageHeader')\npug_mixins[\"errorsGrid\"]([header5, header6, header7]);\npug_html = pug_html + (null == (pug_interp = require(\"../../../@bingads-webui-static-legacy/bulk-edit/template/footer.pug\").call(this, locals)) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\";}.call(this,\"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/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (hrefFixIt, i18n) {pug_html = pug_html + \"\\u003Cdiv class=\\\"success-dialog\\\"\\u003E\\u003Cdiv class=\\\"success-dialog__header\\\"\\u003E\\u003Ch2\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('CampaignCreationSuccessDialog_OnHold_Title')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fh2\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"success-dialog__content\\\"\\u003E\\u003Cspan class=\\\"content-line\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('CampaignCreationSuccessDialog_OnHold_DescriptionLine1')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"content-line\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('CampaignCreationSuccessDialog_OnHold_DescriptionLine2')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cdiv class=\\\"dialog-diagram\\\"\\u003E\\u003Cdiv class=\\\"dialog-diagram__bar\\\"\\u003E\\u003Cspan class=\\\"campaign-creation-status-icon-active\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cdiv class=\\\"horizontal-line-1of3rd horizontal-line-success\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cspan class=\\\"campaign-creation-status-icon-danger\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cdiv class=\\\"horizontal-line-1of3rd\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cspan class=\\\"campaign-creation-status-icon-inactive\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cdiv class=\\\"horizontal-line-1of3rd\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cspan class=\\\"campaign-creation-status-icon-inactive\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"dialog-diagram__row\\\"\\u003E\\u003Cspan class=\\\"dialog-diagram__row__cell campaign-creation-status-text-active\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('CampaignCreationSuccessDialog_Progress_CreateCampaign')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"dialog-diagram__row__cell campaign-creation-status-text-danger\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('CampaignCreationSuccessDialog_Progress_AccountOnHold')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"dialog-diagram__row__cell\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('CampaignCreationSuccessDialog_Progress_InReview')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"dialog-diagram__row__cell\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('CampaignCreationSuccessDialog_Progress_Approved')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"dialog-form\\\"\\u003E\\u003Cdiv class=\\\"dialog-form__row\\\"\\u003E\\u003Cdiv class=\\\"dialog-form__row__cell\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"dialog-form__row__cell\\\"\\u003E\\u003Ca\" + (\" class=\\\"btn btn-default\\\"\"+pug.attr(\"href\", hrefFixIt, true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('CampaignCreationSuccessDialog_Button_FixIt')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"dialog-form__row__cell\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"success-dialog__footer\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"hrefFixIt\" in locals_for_with?locals_for_with.hrefFixIt:typeof hrefFixIt!==\"undefined\"?hrefFixIt: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/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (action, i18n, link, reason) {pug_html = pug_html + \"\\u003Cdiv class=\\\"success-dialog\\\"\\u003E\\u003Cdiv class=\\\"success-dialog__header\\\"\\u003E\\u003Ch2\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('CampaignCreationSuccessDialog_Paused_Title')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fh2\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"success-dialog__content\\\"\\u003E\\u003Cspan class=\\\"content-line\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('CampaignCreationSuccessDialog_Paused_' + reason + '_DescriptionLine1')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"content-line\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('CampaignCreationSuccessDialog_Paused_' + reason + '_DescriptionLine2')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cdiv class=\\\"dialog-diagram\\\"\\u003E\\u003Cdiv class=\\\"dialog-diagram__bar\\\"\\u003E\\u003Cspan class=\\\"campaign-creation-status-icon-active\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cdiv class=\\\"horizontal-line-1of3rd horizontal-line-success\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cspan class=\\\"campaign-creation-status-icon-danger\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cdiv class=\\\"horizontal-line-1of3rd\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cspan class=\\\"campaign-creation-status-icon-inactive\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cdiv class=\\\"horizontal-line-1of3rd\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cspan class=\\\"campaign-creation-status-icon-inactive\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"dialog-diagram__row\\\"\\u003E\\u003Cspan class=\\\"dialog-diagram__row__cell campaign-creation-status-text-active\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('CampaignCreationSuccessDialog_Progress_CreateCampaign')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"dialog-diagram__row__cell campaign-creation-status-text-danger\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('CampaignCreationSuccessDialog_Progress_AccountOnHold')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"dialog-diagram__row__cell\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('CampaignCreationSuccessDialog_Progress_InReview')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"dialog-diagram__row__cell\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('CampaignCreationSuccessDialog_Progress_Approved')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"dialog-form\\\"\\u003E\\u003Cdiv class=\\\"dialog-form__row\\\"\\u003E\\u003Cdiv class=\\\"dialog-form__row__cell\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"dialog-form__row__cell\\\"\\u003E\\u003Ca\" + (\" class=\\\"btn btn-default\\\"\"+pug.attr(\"href\", link, true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('CampaignCreationSuccessDialog_Button_' + action)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"dialog-form__row__cell\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"success-dialog__footer\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"action\" in locals_for_with?locals_for_with.action:typeof action!==\"undefined\"?action:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"link\" in locals_for_with?locals_for_with.link:typeof link!==\"undefined\"?link:undefined,\"reason\" in locals_for_with?locals_for_with.reason:typeof reason!==\"undefined\"?reason:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n) {var InReviewDescriptionLine3 = i18n.get('CampaignCreationSuccessDialog_InReview_DescriptionLine3', {\nadsApprovalLink: '' + i18n.getString('CampaignCreationSuccessDialog_Link_AdsApproval') + '',\nadsIsRunningLink: '' + i18n.getString('CampaignCreationSuccessDialog_Link_AdsIsRunning') + '',\nperformanceDataLink: '' + i18n.getString('CampaignCreationSuccessDialog_Link_PerformanceData') + '',\ntrackSalesLink: '' + i18n.getString('CampaignCreationSuccessDialog_Link_TrackSales') + '',\ntrackAnalyticsLink: '' + i18n.getString('CampaignCreationSuccessDialog_Link_TrackAnalytics') + '',\n})\npug_html = pug_html + \"\\u003Cdiv class=\\\"success-dialog\\\"\\u003E\\u003Cdiv class=\\\"success-dialog__header\\\"\\u003E\\u003Ch2\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('CampaignCreationSuccessDialog_InReview_Title')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fh2\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"success-dialog__content\\\"\\u003E\\u003Cspan class=\\\"content-line\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('CampaignCreationSuccessDialog_InReview_DescriptionLine1')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"content-line\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('CampaignCreationSuccessDialog_InReview_DescriptionLine2')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cdiv class=\\\"dialog-diagram\\\"\\u003E\\u003Cdiv class=\\\"dialog-diagram__bar\\\"\\u003E\\u003Cspan class=\\\"campaign-creation-status-icon-active\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cdiv class=\\\"horizontal-line-1of2rd horizontal-line-success\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cspan class=\\\"campaign-creation-status-icon-active\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cdiv class=\\\"horizontal-line-1of2rd\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cspan class=\\\"campaign-creation-status-icon-inactive\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"dialog-diagram__row\\\"\\u003E\\u003Cspan class=\\\"dialog-diagram__row__cell campaign-creation-status-text-active\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('CampaignCreationSuccessDialog_Progress_CreateCampaign')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"dialog-diagram__row__cell campaign-creation-status-text-active\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('CampaignCreationSuccessDialog_Progress_InReview')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"dialog-diagram__row__cell\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('CampaignCreationSuccessDialog_Progress_Approved')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"dialog-form\\\"\\u003E\\u003Cdiv class=\\\"dialog-form__row\\\"\\u003E\\u003Cdiv class=\\\"dialog-form__row__cell\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"dialog-form__row__cell\\\"\\u003E\\u003Cbutton class=\\\"btn btn-default got-it\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('CampaignCreationSuccessDialog_Button_GotIt')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"dialog-form__row__cell\\\"\\u003E\\u003Cdiv class=\\\"checkbox dont-show\\\"\\u003E\\u003Clabel\\u003E\\u003Cinput type=\\\"checkbox\\\" data-bind=\\\"checked: doNotShowAgain\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('CampaignCreationSuccessDialog_CheckBox_DoNotShowAgain')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"success-dialog__footer\\\"\\u003E\\u003Cp\\u003E\" + (null == (pug_interp = InReviewDescriptionLine3) ? \"\" : pug_interp) + \"\\u003C\\u002Fp\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"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/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (hrefAddPaymentMethod, i18n) {pug_html = pug_html + \"\\u003Cdiv class=\\\"success-dialog\\\"\\u003E\\u003Cdiv class=\\\"success-dialog__header\\\"\\u003E\\u003Ch2\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('CampaignCreationSuccessDialog_AddPaymentMethod_Title')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fh2\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"success-dialog__content\\\"\\u003E\\u003Cspan class=\\\"content-line\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('CampaignCreationSuccessDialog_AddPaymentMethod_DescriptionLine1')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"content-line\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('CampaignCreationSuccessDialog_AddPaymentMethod_DescriptionLine2')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cdiv class=\\\"dialog-diagram\\\"\\u003E\\u003Cdiv class=\\\"dialog-diagram__bar\\\"\\u003E\\u003Cspan class=\\\"campaign-creation-status-icon-active\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cdiv class=\\\"horizontal-line-1of3rd horizontal-line-success\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cspan class=\\\"campaign-creation-status-icon-warning\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cdiv class=\\\"horizontal-line-1of3rd\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cspan class=\\\"campaign-creation-status-icon-inactive\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cdiv class=\\\"horizontal-line-1of3rd\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cspan class=\\\"campaign-creation-status-icon-inactive\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"dialog-diagram__row\\\"\\u003E\\u003Cspan class=\\\"dialog-diagram__row__cell campaign-creation-status-text-active\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('CampaignCreationSuccessDialog_Progress_CreateCampaign')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"dialog-diagram__row__cell campaign-creation-status-text-warning\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('CampaignCreationSuccessDialog_Progress_AddPaymentMethod')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"dialog-diagram__row__cell\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('CampaignCreationSuccessDialog_Progress_InReview')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"dialog-diagram__row__cell\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('CampaignCreationSuccessDialog_Progress_Approved')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"dialog-form\\\"\\u003E\\u003Cdiv class=\\\"dialog-form__row\\\"\\u003E\\u003Cdiv class=\\\"dialog-form__row__cell\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"dialog-form__row__cell\\\"\\u003E\\u003Ca\" + (\" class=\\\"btn btn-default button-add-payment-method\\\"\"+pug.attr(\"href\", hrefAddPaymentMethod, true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('CampaignCreationSuccessDialog_Button_AddPaymentMethod')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"dialog-form__row__cell\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"success-dialog__footer\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"hrefAddPaymentMethod\" in locals_for_with?locals_for_with.hrefAddPaymentMethod:typeof hrefAddPaymentMethod!==\"undefined\"?hrefAddPaymentMethod: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/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (AssociatedExperiment, ExperimentId, deliveryStatus, eventName, expDateUtils, i18n, isForecasting, landscapeDisabled, percentSymbol) {pug_mixins[\"experimentInfo\"] = pug_interp = function(){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cp\\u003E\\u003Cb\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Experiment_Status_Long_' + AssociatedExperiment.Status)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fb\\u003E\\u003C\\u002Fp\\u003E\\u003Cp\\u003E\\u003Cdiv\\u003E\\u003Cb\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Experiment_DeliveryStatus_StartDate')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fb\\u003E\" + (pug.escape(null == (pug_interp = ' ') ? \"\" : pug_interp)) + (pug.escape(null == (pug_interp = expDateUtils.reformatDate(AssociatedExperiment.StartDate)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv\\u003E\\u003Cb\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Experiment_DeliveryStatus_EndDate')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fb\\u003E\" + (pug.escape(null == (pug_interp = ' ') ? \"\" : pug_interp)) + (pug.escape(null == (pug_interp = expDateUtils.reformatDate(AssociatedExperiment.EndDate)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fp\\u003E\\u003Cdiv\\u003E\\u003Cb\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Experiment_DeliveryStatus_Split')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fb\\u003E\" + (pug.escape(null == (pug_interp = ' ') ? \"\" : pug_interp)) + (pug.escape(null == (pug_interp = AssociatedExperiment.TrafficSplitPercent) ? \"\" : pug_interp)) + (pug.escape(null == (pug_interp = percentSymbol) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n};\nvar descriptionKey = 'BudgetLandscape_'+deliveryStatus+'_HelpText';\nvar actionKey = 'BudgetLandscape_'+deliveryStatus+'_ActionText';\nif (landscapeDisabled) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"description-text bold margin-zero\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Campaign_BidLandscape_Disabled_Title')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"description-text margin-zero\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Campaign_BidLandscape_Disabled_Desc_'+deliveryStatus)||i18n.getString('Campaign_BidLandscape_Disabled_Desc')+i18n.getString('Label_DeliveryStatus_' + deliveryStatus)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n}\nelse\nif (ExperimentId && AssociatedExperiment) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"description-text margin-zero\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Experiment_DeliveryStatus_' + deliveryStatus)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Chr\\u003E\";\npug_mixins[\"experimentInfo\"]();\n}\nelse\nif (deliveryStatus === 'CampaignBudgetPaused') {\nvar actionStringWithFormat = ''+i18n.getString(actionKey)+'';\npug_html = pug_html + \"\\u003Cdiv class=\\\"description-text\\\"\\u003E\" + (null == (pug_interp = i18n.getString(descriptionKey).replace('{0}', actionStringWithFormat)) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\nif (eventName.length > 0) {\nif (isForecasting) {\npug_html = pug_html + \"\\u003Cstrong\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BudgetLandscape_BudgetSuggestions_ActionText_Forecasting_Seasonal').replace('{0}', eventName)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fstrong\\u003E\\u003Cdiv class=\\\"description-text margin-zero\\\"\\u003E\" + (null == (pug_interp = i18n.getString('BudgetLandscape_BudgetSuggestions_HelpText_Forecasting_Seasonal_Strong').replace('{0}', eventName)) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cdiv class=\\\"description-text margin-zero\\\"\\u003E\" + (null == (pug_interp = i18n.getString('BudgetLandscape_BudgetSuggestions_HelpText_Recovery_Seasonal_Strong').replace('{0}', eventName)) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\";\n}\n}\nelse {\nif (isForecasting) {\npug_html = pug_html + \"\\u003Cstrong\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('BudgetLandscape_BudgetSuggestions_ActionText_Forecasting_Non_Seasonal')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fstrong\\u003E\\u003Cdiv class=\\\"description-text margin-zero\\\"\\u003E\" + (null == (pug_interp = i18n.getString('BudgetLandscape_BudgetSuggestions_HelpText_Forecasting_Non_Seasonal')) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cdiv class=\\\"description-text margin-zero\\\"\\u003E\" + (null == (pug_interp = i18n.getString('BudgetLandscape_BudgetSuggestions_HelpText_Recovery_Non_Seasonal')) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\";\n}\n}\n}}.call(this,\"AssociatedExperiment\" in locals_for_with?locals_for_with.AssociatedExperiment:typeof AssociatedExperiment!==\"undefined\"?AssociatedExperiment:undefined,\"ExperimentId\" in locals_for_with?locals_for_with.ExperimentId:typeof ExperimentId!==\"undefined\"?ExperimentId:undefined,\"deliveryStatus\" in locals_for_with?locals_for_with.deliveryStatus:typeof deliveryStatus!==\"undefined\"?deliveryStatus:undefined,\"eventName\" in locals_for_with?locals_for_with.eventName:typeof eventName!==\"undefined\"?eventName:undefined,\"expDateUtils\" in locals_for_with?locals_for_with.expDateUtils:typeof expDateUtils!==\"undefined\"?expDateUtils:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"isForecasting\" in locals_for_with?locals_for_with.isForecasting:typeof isForecasting!==\"undefined\"?isForecasting:undefined,\"landscapeDisabled\" in locals_for_with?locals_for_with.landscapeDisabled:typeof landscapeDisabled!==\"undefined\"?landscapeDisabled:undefined,\"percentSymbol\" in locals_for_with?locals_for_with.percentSymbol:typeof percentSymbol!==\"undefined\"?percentSymbol:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (applyString, deliveryStatus, detailMessage, enableApply, learnMoreString, showApply) {pug_html = pug_html + (\"\\u003Ctable class=\\\"reasonDiv\\\"\\u003E\\u003Ctr\\u003E\\u003Ctd class=\\\"reason\\\"\\u003E\\u003Cdiv\\u003E\\u003Cdiv\" + (\" class=\\\"gridPopup-reasonList autobidding-suggestion\\\"\"+pug.attr(\"data-delivery-status\", deliveryStatus, true, true)) + \"\\u003E\" + (null == (pug_interp = detailMessage) ? \"\" : pug_interp) + (null == (pug_interp = ' ') ? \"\" : pug_interp));\nif (showApply) {\nif (enableApply) {\npug_html = pug_html + \"\\u003Ca\" + (pug.attr(\"class\", pug.classes([\"ms-Link\",\"apply\",deliveryStatus], [false,false,true]), false, true)+\" role=\\\"button\\\" href=\\\"#!\\\"\") + \"\\u003E\" + (pug.escape(null == (pug_interp = applyString) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Ca class=\\\"ms-Link disabled\\\" role=\\\"button\\\" href=\\\"#!\\\" aria-disabled=\\\"true\\\"\\u003E\" + (pug.escape(null == (pug_interp = applyString) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\";\n}\n}\npug_html = pug_html + \"\\u003Cdiv\\u003E\\u003Ca href=\\\"http:\\u002F\\u002Fgo.microsoft.com\\u002Ffwlink?LinkId=2285976\\\" target=\\\"_blank\\\"\\u003E\" + (pug.escape(null == (pug_interp = learnMoreString) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Ftd\\u003E\\u003C\\u002Ftr\\u003E\\u003C\\u002Ftable\\u003E\";}.call(this,\"applyString\" in locals_for_with?locals_for_with.applyString:typeof applyString!==\"undefined\"?applyString:undefined,\"deliveryStatus\" in locals_for_with?locals_for_with.deliveryStatus:typeof deliveryStatus!==\"undefined\"?deliveryStatus:undefined,\"detailMessage\" in locals_for_with?locals_for_with.detailMessage:typeof detailMessage!==\"undefined\"?detailMessage:undefined,\"enableApply\" in locals_for_with?locals_for_with.enableApply:typeof enableApply!==\"undefined\"?enableApply:undefined,\"learnMoreString\" in locals_for_with?locals_for_with.learnMoreString:typeof learnMoreString!==\"undefined\"?learnMoreString:undefined,\"showApply\" in locals_for_with?locals_for_with.showApply:typeof showApply!==\"undefined\"?showApply:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (Budget, DeliveryStatus, GeoCodeStatus, Id, i18n, showEllipsisForExperiment) {pug_mixins[\"ellipsis\"] = pug_interp = function(forExperiment){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cdiv class=\\\"status-image\\\"\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"status_icon\",\"gridDetailsImage\",\"spritedimagealign\",\"clickable\",\"delivery_status_with_reject_reasons\",forExperiment ? 'experiment-delivery-status-override' : ''], [false,false,false,false,false,true]), false, true)+pug.attr(\"title\", i18n.getString('Page_Keywords_DeliveryStatusDetails'), true, true)+pug.attr(\"aria-label\", i18n.getString('Page_Keywords_DeliveryStatusDetails'), true, true)+pug.attr(\"id\", 'reasonImage' + Id, true, true)+\" tabindex=\\\"0\\\" role=\\\"button\\\"\") + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n};\nif (DeliveryStatus) {\nvar showBudgetLandscape = (DeliveryStatus === 'BudgetSuggestions' || DeliveryStatus === 'CampaignBudgetPaused') && !!Budget;\nvar className= showBudgetLandscape ? 'layout-marked-element status-row budget-landscape-row' : 'layout-marked-element status-row';\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([className], [true]), false, true)) + \"\\u003E\\u003Cdiv class=\\\"mark-container\\\"\\u003E\";\nif (DeliveryStatus != 'Eligible' && DeliveryStatus != 'EditorialApprovedLimited' && DeliveryStatus != 'Incomplete' && DeliveryStatus != 'InlineOpportunity' && DeliveryStatus != 'AdGroupAudienceAssociationPaused' && DeliveryStatus != 'AdGroupAudienceAssociationExcluded') {\npug_html = pug_html + \"\\u003Cdiv class=\\\"status-icon\\\"\\u003E\";\nif (DeliveryStatus === 'CreditCardExpired' || DeliveryStatus === 'IOExceeded' || DeliveryStatus === 'PaymentInformationMissing' || DeliveryStatus === 'InvalidFinancialStatusOther' || DeliveryStatus === 'MigrationPaused' || DeliveryStatus === 'CampaignDeleted' || DeliveryStatus === 'CampaignBudgetPaused' || DeliveryStatus === 'AdGroupDeleted' || DeliveryStatus === 'CamAssetRejected' || DeliveryStatus === 'EditorialRejected') {\npug_html = pug_html + \"\\u003Cdiv\" + (\" class=\\\"status_error spritedimagealign\\\"\"+pug.attr(\"title\", i18n.getString('DeliveryStatusIcon_Tooltip_Error'), true, true)+pug.attr(\"aria-label\", i18n.getString('DeliveryStatusIcon_Tooltip_Error'), true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cdiv\" + (\" class=\\\"status_warning spritedimagealign\\\"\"+pug.attr(\"title\", i18n.getString('DeliveryStatusIcon_Tooltip_Warning'), true, true)+pug.attr(\"aria-label\", i18n.getString('DeliveryStatusIcon_Tooltip_Warning'), true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"decorated-element\\\"\\u003E\";\nif (DeliveryStatus === 'GeoCodingIncomplete') {\npug_html = pug_html + \"\\u003Cdiv class=\\\"status-column\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Label_DeliveryStatus_1101_' + GeoCodeStatus)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cdiv class=\\\"status-column\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Label_DeliveryStatus_' + DeliveryStatus)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"glyph-container\\\"\\u003E\";\nif (DeliveryStatus !== 'Eligible' && DeliveryStatus !== 'BudgetSuggestions' && DeliveryStatus !== 'Incomplete' && DeliveryStatus !== 'GeoCodingIncomplete' && DeliveryStatus !== 'CampaignBudgetPaused' && DeliveryStatus !== 'InlineOpportunity') {\npug_mixins[\"ellipsis\"]();\n}\nelse\nif (showBudgetLandscape) {\npug_html = pug_html + \"\\u003Cdiv\" + (\" class=\\\"bidlandscape_icon gridDetailsImage spritedimagealign clickable delivery_status_with_budget_suggestions\\\"\"+pug.attr(\"data-entityId\", Id, true, true)+\" title=\\\"\\\"\"+pug.attr(\"id\", 'BudgetImage' + Id, true, true)+\" tabindex=\\\"0\\\" role=\\\"button\\\"\"+pug.attr(\"aria-label\", i18n.getString('BidLandscape_ClickableIconText'), true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse\nif (DeliveryStatus === 'InlineOpportunity') {\npug_html = pug_html + \"\\u003Cdiv class=\\\"inline-opportunity-status\\\"\\u003E\\u003Cdiv\" + (\" class=\\\"inline-recommendation-grid-icon clickable delivery_status_with_inline_opportunities\\\"\"+pug.attr(\"data-entityId\", Id, true, true)+pug.attr(\"title\", i18n.getString('InlineOpportunity_Bubble_TooltipText'), true, true)+pug.attr(\"aria-label\", i18n.getString('InlineOpportunity_Bubble_TooltipText'), true, true)+pug.attr(\"id\", 'InlineOpportunity' + Id, true, true)+\" tabindex=\\\"0\\\" role=\\\"button\\\"\") + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse\nif (showEllipsisForExperiment) {\npug_mixins[\"ellipsis\"](true);\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + (pug.escape(null == (pug_interp = ' ') ? \"\" : pug_interp));\n}}.call(this,\"Budget\" in locals_for_with?locals_for_with.Budget:typeof Budget!==\"undefined\"?Budget:undefined,\"DeliveryStatus\" in locals_for_with?locals_for_with.DeliveryStatus:typeof DeliveryStatus!==\"undefined\"?DeliveryStatus:undefined,\"GeoCodeStatus\" in locals_for_with?locals_for_with.GeoCodeStatus:typeof GeoCodeStatus!==\"undefined\"?GeoCodeStatus:undefined,\"Id\" in locals_for_with?locals_for_with.Id:typeof Id!==\"undefined\"?Id:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"showEllipsisForExperiment\" in locals_for_with?locals_for_with.showEllipsisForExperiment:typeof showEllipsisForExperiment!==\"undefined\"?showEllipsisForExperiment:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (AssociatedExperiment, DeliveryStatusDetails, ExperimentId, collectionSize, expDateUtils, i18n, percentSymbol, statusForCombinedPopup) {pug_mixins[\"experimentInfo\"] = pug_interp = function(){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cp\\u003E\\u003Cb\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Experiment_Status_Long_' + AssociatedExperiment.Status)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fb\\u003E\\u003C\\u002Fp\\u003E\\u003Cp\\u003E\\u003Cdiv\\u003E\\u003Cb\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Experiment_DeliveryStatus_StartDate')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fb\\u003E\" + (pug.escape(null == (pug_interp = ' ') ? \"\" : pug_interp)) + (pug.escape(null == (pug_interp = expDateUtils.reformatDate(AssociatedExperiment.StartDate)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv\\u003E\\u003Cb\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Experiment_DeliveryStatus_EndDate')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fb\\u003E\" + (pug.escape(null == (pug_interp = ' ') ? \"\" : pug_interp)) + (pug.escape(null == (pug_interp = expDateUtils.reformatDate(AssociatedExperiment.EndDate)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fp\\u003E\\u003Cdiv\\u003E\\u003Cb\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Experiment_DeliveryStatus_Split')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fb\\u003E\" + (pug.escape(null == (pug_interp = ' ') ? \"\" : pug_interp)) + (pug.escape(null == (pug_interp = AssociatedExperiment.TrafficSplitPercent) ? \"\" : pug_interp)) + (pug.escape(null == (pug_interp = percentSymbol) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n};\npug_html = pug_html + \"\\u003Cdiv class=\\\"gridPopup type5\\\" id=\\\"gridPopup\\\"\\u003E\\u003Cdiv class=\\\"gridPopup-body\\\" id=\\\"gridPopup-body\\\"\\u003E\\u003Cdiv class=\\\"gridPopup-outerBox\\\"\\u003E\\u003Cdiv class=\\\"gridPopup-close\\\"\\u003E\\u003Cdiv\" + (\" class=\\\"closeimage spritedimage spritedimagealign clickable\\\"\"+\" tabindex=\\\"0\\\" role=\\\"button\\\" onclick=\\\"$(document).click()\\\"\"+pug.attr(\"aria-label\", i18n.getString('CampaignImport_ButtonFinish'), true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\nif (collectionSize > 0) {\n// iterate DeliveryStatusDetails\n;(function(){\n var $$obj = DeliveryStatusDetails;\n if ('number' == typeof $$obj.length) {\n for (var index = 0, $$l = $$obj.length; index < $$l; index++) {\n var deliveryStatus = $$obj[index];\nvar clName = 'gridPopup-reasonDiv-' + index\nif (index != 0) {\nvar st = 'display:none'\n}\nelse {\nvar st = ''\n}\npug_html = pug_html + \"\\u003Ctable\" + (\" class=\\\"reasonDiv\\\"\"+pug.attr(\"id\", clName, true, true)+pug.attr(\"style\", pug.style(st), true, true)) + \"\\u003E\\u003Ctr\\u003E\\u003Ctd class=\\\"reason\\\" id=\\\"gridPopup-reasonValue-top\\\"\\u003E\\u003Cdiv\\u003E\\u003Cdiv class=\\\"gridPopup-reasonList\\\"\\u003E\";\nif (deliveryStatus == '') {\npug_html = pug_html + (pug.escape(null == (pug_interp = i18n.getString('NoRejectionReasonFound')) ? \"\" : pug_interp));\n}\nelse\nif ((ExperimentId && AssociatedExperiment)) {\nif ((deliveryStatus === 'ExperimentInfo')) {\npug_mixins[\"experimentInfo\"]();\n}\nelse\nif ((statusForCombinedPopup.indexOf(deliveryStatus) > -1)) {\npug_html = pug_html + \"\\u003Cp\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Experiment_DeliveryStatus_' + deliveryStatus)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fp\\u003E\\u003Chr\\u003E\";\npug_mixins[\"experimentInfo\"]();\n}\nelse {\npug_html = pug_html + (null == (pug_interp = i18n.getString('Experiment_DeliveryStatus_' + deliveryStatus) || i18n.getString('Message_DeliveryStatus_' + deliveryStatus)) ? \"\" : pug_interp);\n}\n}\nelse {\npug_html = pug_html + (null == (pug_interp = i18n.getString('Message_DeliveryStatus_' + deliveryStatus)) ? \"\" : pug_interp);\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Ftd\\u003E\\u003C\\u002Ftr\\u003E\\u003C\\u002Ftable\\u003E\";\n }\n } else {\n var $$l = 0;\n for (var index in $$obj) {\n $$l++;\n var deliveryStatus = $$obj[index];\nvar clName = 'gridPopup-reasonDiv-' + index\nif (index != 0) {\nvar st = 'display:none'\n}\nelse {\nvar st = ''\n}\npug_html = pug_html + \"\\u003Ctable\" + (\" class=\\\"reasonDiv\\\"\"+pug.attr(\"id\", clName, true, true)+pug.attr(\"style\", pug.style(st), true, true)) + \"\\u003E\\u003Ctr\\u003E\\u003Ctd class=\\\"reason\\\" id=\\\"gridPopup-reasonValue-top\\\"\\u003E\\u003Cdiv\\u003E\\u003Cdiv class=\\\"gridPopup-reasonList\\\"\\u003E\";\nif (deliveryStatus == '') {\npug_html = pug_html + (pug.escape(null == (pug_interp = i18n.getString('NoRejectionReasonFound')) ? \"\" : pug_interp));\n}\nelse\nif ((ExperimentId && AssociatedExperiment)) {\nif ((deliveryStatus === 'ExperimentInfo')) {\npug_mixins[\"experimentInfo\"]();\n}\nelse\nif ((statusForCombinedPopup.indexOf(deliveryStatus) > -1)) {\npug_html = pug_html + \"\\u003Cp\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Experiment_DeliveryStatus_' + deliveryStatus)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fp\\u003E\\u003Chr\\u003E\";\npug_mixins[\"experimentInfo\"]();\n}\nelse {\npug_html = pug_html + (null == (pug_interp = i18n.getString('Experiment_DeliveryStatus_' + deliveryStatus) || i18n.getString('Message_DeliveryStatus_' + deliveryStatus)) ? \"\" : pug_interp);\n}\n}\nelse {\npug_html = pug_html + (null == (pug_interp = i18n.getString('Message_DeliveryStatus_' + deliveryStatus)) ? \"\" : pug_interp);\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Ftd\\u003E\\u003C\\u002Ftr\\u003E\\u003C\\u002Ftable\\u003E\";\n }\n }\n}).call(this);\n\n}\nelse {\npug_html = pug_html + \"\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('NoRejectionReasonFound')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\nif (collectionSize > 1) {\nvar prevOnClick = \"$.gridPopup.pagePrev('gridPopup-reasonDiv-',\" + collectionSize + \")\"\nvar nextOnClick = \"$.gridPopup.pageNext('gridPopup-reasonDiv-',\" + collectionSize + \")\"\npug_html = pug_html + \"\\u003Cdiv class=\\\"gridPopup-pagination\\\"\\u003E\\u003Cdiv\" + (\" class=\\\"spritedimage grid-previous-disabled clickable\\\"\"+\" id=\\\"gridPopup-Pager-prev\\\"\"+pug.attr(\"onclick\", prevOnClick, true, true)+\" role=\\\"button\\\" tabindex=\\\"-1\\\"\"+pug.attr(\"aria-label\", i18n.getString('Grid_PreviousPage'), true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cspan id=\\\"gridPopup-Pager-cur\\\" data-val=\\\"1\\\"\\u003E\" + (pug.escape(null == (pug_interp = 1) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = 'of') ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cspan id=\\\"gridPopup-Pager-tot\\\"\\u003E\" + (pug.escape(null == (pug_interp = collectionSize) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cdiv\" + (\" class=\\\"spritedimage grid-next clickable\\\"\"+\" id=\\\"gridPopup-Pager-next\\\"\"+pug.attr(\"onclick\", nextOnClick, true, true)+\" role=\\\"button\\\" tabindex=\\\"0\\\"\"+pug.attr(\"aria-label\", i18n.getString('Grid_NextPage'), true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";}.call(this,\"AssociatedExperiment\" in locals_for_with?locals_for_with.AssociatedExperiment:typeof AssociatedExperiment!==\"undefined\"?AssociatedExperiment:undefined,\"DeliveryStatusDetails\" in locals_for_with?locals_for_with.DeliveryStatusDetails:typeof DeliveryStatusDetails!==\"undefined\"?DeliveryStatusDetails:undefined,\"ExperimentId\" in locals_for_with?locals_for_with.ExperimentId:typeof ExperimentId!==\"undefined\"?ExperimentId:undefined,\"collectionSize\" in locals_for_with?locals_for_with.collectionSize:typeof collectionSize!==\"undefined\"?collectionSize:undefined,\"expDateUtils\" in locals_for_with?locals_for_with.expDateUtils:typeof expDateUtils!==\"undefined\"?expDateUtils:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"percentSymbol\" in locals_for_with?locals_for_with.percentSymbol:typeof percentSymbol!==\"undefined\"?percentSymbol:undefined,\"statusForCombinedPopup\" in locals_for_with?locals_for_with.statusForCombinedPopup:typeof statusForCombinedPopup!==\"undefined\"?statusForCombinedPopup:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (value) {if (value) {\nif (value.OverallQualityScore && value.OverallQualityScore > 0) {\npug_html = pug_html + \"\\u003Cspan class=\\\"noWrap\\\"\\u003E\" + (pug.escape(null == (pug_interp = value.OverallQualityScore + '/10 ') ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cdiv\" + (\" class=\\\"status-image status_icon gridDetailsImage spritedimagealign quality-score-detail\\\"\"+pug.attr(\"title\", value.title, true, true)+pug.attr(\"id\", 'qsImage' + value.Id, true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cspan class=\\\"noWrap\\\"\\u003E\" + (pug.escape(null == (pug_interp = '-') ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\n}\n}\nelse {\npug_html = pug_html + (pug.escape(null == (pug_interp = ' ') ? \"\" : pug_interp));\n}}.call(this,\"value\" in locals_for_with?locals_for_with.value:typeof value!==\"undefined\"?value:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (direction, html) {pug_html = pug_html + \"\\u003Cdiv class=\\\"column-header-container\\\"\\u003E\";\nif (direction < 0) {\npug_html = pug_html + \"\\u003Cspan class=\\\"sort-indicator glyphicon glyphicon-arrow-down\\\"\\u003E\\u003C\\u002Fspan\\u003E\";\n}\nelse\nif (direction > 0) {\npug_html = pug_html + \"\\u003Cspan class=\\\"sort-indicator glyphicon glyphicon-arrow-up\\\"\\u003E\\u003C\\u002Fspan\\u003E\";\n}\npug_html = pug_html + (null == (pug_interp = html) ? \"\" : pug_interp) + \"\\u003C\\u002Fdiv\\u003E\";}.call(this,\"direction\" in locals_for_with?locals_for_with.direction:typeof direction!==\"undefined\"?direction:undefined,\"html\" in locals_for_with?locals_for_with.html:typeof html!==\"undefined\"?html:undefined));;return pug_html;};\nmodule.exports = template;"],"names":["AimAudienceAssociationView","_AudienceAssociationV","_classCallCheck","_callSuper","arguments","_inherits","_createClass","key","value","_ref","_ref$campaignId","campaignId","_ref$adGroupId","adGroupId","_ref$isShoppingCampai","isShoppingCampaign","_ref$customizedTempla","customizedTemplates","_ref$deps","deps","_ref$isForVNext","isForVNext","_ref$perfMarker","perfMarker","_ref$isAudienceCreati","isAudienceCreationWorkflow","_ref$isFromAudienceDa","isFromAudienceDashboard","_ref$campaignSubType","campaignSubType","_ref$hideExclusion","hideExclusion","_ref$hideAssociationH","hideAssociationHeader","biddingScheme","campaignSettings","_ref$isIMARedesignEna","isIMARedesignEnabled","_ref$hideCustomSegmen","hideCustomSegmentsOption","this","_superPropGet","campaignType","campaignTypes","audience","associationType","AssociationTypes","Aim","refreshOnInitialize","shouldShowUiBlockOnRender","isNewUI","isAIMAudienceAssociationView","canExpandAssociation","canExpandExclusion","resetSelectionListBox","doubleListBoxViewModel","setSelectedCategory","audienceType","Product","selectedBidType","bidTypes","TargetAndBid","remove","_this","_this$getLists","getLists","associationList","exclusionList","jsonify","isTargeting","originalAssociations","_","item","Criterion","AudienceCriterion","association","Id","AudienceId","bidMultiplier","result","cashbackPercent","associationId","status","audienceStatus","Active","Excluded","Paused","BidType","Status","AudienceName","Name","AudienceType","Type","BidMultiplier","pageContext","Permissions","IsPersonalizedOffersEnabled","CashbackPercent","parseInt","selectedAdgroupId","selectedCampaignId","selectedAdgroupName","selectedCampaignName","AudienceAssociationView","Model","_BaseModel","get","$","BaseModel","defaults","Entity","BatchAction","Actions","BidOnly","i18n","window","globalLegacyI18n","View","_CommonAssociationVie","options","template","validate","validateCPSelection","onSuccessCallback","_onSuccess","formatAssociation","formatCampaignAssociation","entityLevel","levelAtConstant","CAMPAIGN","cpValidationEnum","App","trigger","rows","EntityKey","Key","data","push","Value","isHtml","Changes","length","NewValue","selectedListsCount","results","doubleListBoxView","clearAllErrors","error","NoChosenList","_this$doubleListBoxVi","associationListIds","exclusionListIds","allListIds","allList","conflictList","intersection","map","id","pluck","ListConflicting","param","gridHelper","getSelectedRowsCount","grid","config","BulkAudienceCriterionMaxLimit","TooManyAssociations","IsAIMCampaignEnabled","scope","currentScope","DeliveryChannel","showErrorMessage","anyCriticalErrors","validationResults","validationResult","maxAudienceCriterionMaxLimit","limitMessage","replace","decimalUtil","fromFloatToString","limitError","AssociationError","errorEnum","ExceedMaxLimit","isCritical","level","addError","noChosenError","messageContent","errormessagetemp","AdgroupTargeting","concat","AdgroupExclusions","message","join","conflictingError","IsProductAudienceForSearchEnabled","CommonAssociationView","BulkAssociationSectionView","fromBulkEdit","readOnlyMode","Bulk","currentCampaign","newI18n","associationInfoText","isNewAudienceEnabled","exclusionInfoText","associationInfoTextCampaign","bulkEditIntro","getString","assoicationQueryLink","exclusionQueryLink","initCashbackPercentControlView","bidType","action","supportCashbackSettings","cashbackPercentControlView","getCashbackPercentValue","CashbackAdjustment","instrumentationSvc","logMessage","configSettings","setting","instrumentConsts","LOGCATEGORY","TRACE","LOGLEVEL","INFO","JSON","stringify","type","targeting","selectedLists","exclusion","errors","clearAll","add","property","isBidPercentageValid","getBidPercentage","$el","find","focus","ViewModel","Base","call","showPreviewButton","ko","IsNewAudienceEnabled","_BaseView","scopeService","getScope","ko_model","BulkEditAssociationViewModel","router","on","cancelJob","_this2","willRender","func","after","render","el","show","removeAttr","validateSelection","asLoggingStart","instrumentSetting","ACTIVITYNAME","LoadBulkEditTargetingExclusionByDmp","LoadBulkEditTargetingExclusion","SCENARIONAME","BulkEditTargetingExclusionByDmp","BulkEditTargetingExclusion","DmpEnabled","jobSucceeded","validateBidPercentage","validateCustomRestriction","validateCashbackPercent","_this3","getAction","model","set","SaveBulkEditTargetingExclusionByDmp","SaveBulkEditTargetingExclusion","filterHelper","getAdGroupIdFilterExcludingContentOnly","_formatAssociation","BaseView","DependencyResolver","preferences","SharedBudgetView","Budget","jsdata","Campaign","AdGroup","ResponsiveAd","timeZoneMapper","LocationTargetsView","UrlEditor","i18nErrors","UrlOptions","ShoppingCampaign","ShoppingSettingsView","biddingStrategyTypes","BiddingStrategyView","BudgetPanel","AdScheduleView","state","odata","Searchbox","pgrid","bingadsGridColumn","targetConstants","BaseTargetUpdateView","targetTypes","CurrentAccount","CurrentCustomerId","CurrentCustomer","isFilterCriterionLevelAdGroup","Constants","SuccessDialog","stateManager","CopySettings","criterionLoader","AdvancedSettingsUrlOptions","urlOptionsTemplate","AdRotationView","exclusionRepository","BaseExclusionView","edmCampaign","summaryDataContextManager","instrumentation","ToggleView","eventDispatcher","TestUurl","ko_schema","decimal","CopyCampaignSetting","ActionLanguageAdapter","ActionTypeAdapter","loadResponsiveAdEditorPromise","loadResponsiveAdEditorAsync","Promise","resolve","then","ResponsiveAdEditorModule","ResponsiveAdEditor","definePlugin","gridView","projection","paginationConfig","pluginsConfig","pagination","container","pageNumberLabelText","pageSize","pageable","availablePageSizes","pageSizeText","totalPageCountText","pageNumber","previousPageText","nextPageText","enableRandomPage","pager","PaginationView","itemCount","hide","preferencesService","Data","rowsPerPage","singleLine","categoryName","RegExp","multiLine","split","_Backbone$View","undefined","searchBox","defaultText","append","dataSource","categories","kendoAutoComplete","kendoData","DataSource","serverFiltering","schema","parse","pattern","test","CategoryName","dataTextField","highlightFirst","height","convert","toString","select","e","name","sender","dataItem","index","Backbone","searchbox","autoSuggestionSearchBox","$or","$startswith","$contains","languageCodeMap","Abkhazian","Afar","Afrikaans","Albanian","Amharic","Arabic","Armenian","Assamese","Aymara","Azerbaijani","Bashkir","Basque","Bengali","Bhutani","Bihari","Bislama","Bosnian","Breton","Bulgarian","Burmese","Byelorussian","Cambodian","Catalan","Chinese","Corsican","Croatian","Czech","Danish","Dari","Dutch","English","Esperanto","Estonian","Faeroese","Fiji","Finnish","French","Frisian","Galician","Georgian","German","Greek","Greenlandic","Guarani","Gujarati","Hausa","Hebrew","Hindi","Hungarian","Icelandic","Indonesian","Interlingua","Interlingue","Inupiak","Irish","Italian","Japanese","Javanese","Kannada","Kashmiri","Kazakh","Kinyarwanda","Kirghiz","Kirundi","Korean","Kurdish","Laothian","Latin","Latvian","Lingala","Lithuanian","Macedonian","Malagasy","Malay","Malayalam","Maltese","Maori","Marathi","Moldavian","Mongolian","Nauru","Nepali","Norwegian","Occitan","Oriya","Pashto","Persian","Polish","Portuguese","Punjabi","Quechua","Romanian","Russian","Samoan","Sangro","Sanskrit","Serbian","Sesotho","Setswana","Shona","Sindhi","Singhalese","Siswati","Slovak","Slovenian","Somali","Spanish","Sundanese","Swahili","Swedish","Tagalog","Tajik","Tamil","Tatar","Telugu","Thai","Tibetan","Tigrinya","Tsonga","Turkish","Turkmen","Twi","Ukrainian","Urdu","Uzbek","Vietnamese","Volapuk","Welsh","Wolof","Xhosa","Yiddish","Yoruba","Zulu","categorySchema","globalLegacySchema","Categories","previousCategoryScope","currentCategoryScope","odataQuery","_convert2JSDataQuery","odataOptions","path","url","isInternalUpdate","isContainerHidden","_ref$Language","Language","_ref$DomainName","DomainName","domainName","toLowerCase","languageCode","self","instrumentationService","instrumentationSettings","DynamicSearchAd","LoadCategoryGrid","html","$grid","use","paginationPlugin","searhBoxPlugin","create","resource","jsdataCampaign","CategoryTarget","query","columns","sortable","filterable","headerAttributes","popupId","headerTemplate","categoryNameHeaderTmpl","title","local","categoryNameTmpl","isParent","categoryNames","line","list","isTail","ariaLabel","addToListTmpl","Coverage","fromFloatToPercentString","hideAddToList","disableItem","selected","conditions","ArgumentOperand","stack","Error","logError","findAll","$select","$top","cacheResponse","paginationTemplate","_gridClicked","bind","uiBlockerToken","uiBlocker","block","event","target","closest","attr","once","targetColumn","dir","isAsc","isDesc","subscribe","newValue","a11yHacker","DoubleListA11yHacker","rootSelector","listViewSelector","itemSelector","interactableElementSelector","listAriaLabel","refresh","totalRecordCount","attributes","count","searchText","isCategoriesEmpty","NoCategoryLoadedForWebsite","constants","setTimeout","unblock","$prevLevelIcon","css","fetch","load","catch","category","pop","stopPropagation","className","indexOf","_convertToTarget","column","Operand","urls","values","items","Operator","DisplayOperator","DisplayOperand","reset","hasError","isValidUrlWithComma","contains","isValidUrl","viewmodel","tmpl","containerTitle","isExclude","validUrls","filter","invalidUrls","difference","condition","shouldCheckArgumentOperandFormat","startsWith","isValid","specificTarget","SpecificTargetView","isShowUrlOnly","targetClass","previewView","close","TargetPreviewView","viewModel","_ref$setting","selectedItem","disabledItems","enableCustomLabel","campaignSetting","Source","permissions","urlEqualsEnabled","dynamic","DSAUrlEquals","radiogroup","text","isDisabled","radios","DropdownView","learnMore","webpageCondition","koSchema","properties","toObject","defaultTarget","viewSelection","instance","ExactURLsView","toggleTarget","view","selectedType","createChild","willInit","updateDomain","showHeader","hideWebsiteLabel","changes","isViewHidden","appendLearnMoreLink","showPillControl","targetSwitcher","PillControl","tabPanelId","selectedTargetsView","SelectedTargetsView","defaultBid","activityLogger","isNegativeAutoTarget","CategoryView","selectedItems","AllWebpageTargetView","MixedSpecificWebPageView","CustomeLabelView","isValidate","onChange","getChanges","uniqueConditions","addBatch","signal","done","RadioGroupView","hideViewSelection","clear","toggleView","shouldReserveSelectedItems","bid","adGroupBid","setErrors","adgroupName","campaignName","DsaTargets","AdGroupName","CampaignName","targets","updateViewModels","hasChanges","s$DsaTarget","keyToItemMapping","logActivity","dsaTarget","generateDSATarget","conditionsWithOperator","conditionsWithoutOperator","conditionsWithoutDisplayValue","conditionWithOperator","checkArgumentOperandFormat","serializedConditions","Bid","WebPage","Parameter","Conditions","hasErrors","underlyingArray","valueHasMutated","update","removedItems","resetBids","_string","notifySubscribers","isListEmpty","description","amount","currency","argumentOperand","hasComma","hasDoubleQuote","resultArgumentOperand","includes","replaceAll","savedTargets","doubleListA11yHacker","accountCurrencyCode","targetPreviewView","currentTarget","targetSaved","targetToSave","keysOfDeletedTargets","getKey","targetInVm","isCampaignApiError","previouslySavedTarget","viewModelItems","errorItems","needRemovedItems","i","TargetPreview","onEscClick","popover","content","placement","_bindEvents","evt","keyCode","document","off","parents","FOCUS_CLASS","SELECT_CLASS","_options$rootSelector","$lastFocusedElement","rowPositions","rowHeights","vh","maxScrollTop","$interactableElements","_onListViewKeyDown","_onListViewClick","_onListViewBlur","_onListViewFocus","$root","innerHeight","$listView","role","tabindex","addClass","$rows","each","$row","eq","position","top","outerHeight","_initializeEvents","defer","first","focusRow","blurAll","isDescendantOfInteractableEle","has","isInteractableEle","is","currentIndex","newIndex","preventDefault","focusRowAtIndex","scrollToCenter","selectRowAtIndex","deselectAll","removeClass","selectRow","rowIndex","rowPos","rowHeight","centerOffset","scrollTop","source","loadSource","radioList","originSelectedFeeds","selectedFeeds","allFeeds","itemTemplate","showPagefeedSelector","targetingSource","updateSelectedFeedsByCampaignId","newCampaignId","associateList","originList","selectedList","originSelectedIdList","selectedIdList","ret","isEditing","DataStore","FeedAssociation","skip","limit","entitySet","currentAccount","Campaigns","$withKey","FeedAssociations","val","FeedId","FeedName","ERROR","VERBOSE","TargetingSource","koModel","request","cb","params","where","filterText","FeedCategoryFilter","$eq","offset","take","Feed","Feeds","filterOptions","custom","total","totalCount","finally","withUIBlocker","EntityId","String","disAssociateList","requests","AssociationType","Associations","cast","Condition","showSelect","showOperatorAndValue","operatorMap","operandMap","cond","isCustomLabelEnabled","operandOptions","operands","Url","Category","PageTitle","PageContent","CustomLabel","isConditionDeleteEnabled","isConditionAddEnabled","trim","addItem","deleteItem","updateCategories","categoryViews","newValues","refreshCategoryView","showAND","uuid","removeCategoryView","$eventTarget","_this4","$container","getCategoryContainer","children","child","_this5","clearCategoryView","CategoryGridView","addCategoryView","validateBid","isDecimal","Number","isNonNegative","bidStr","isNotEmpty","isEndingWithDigit","isNaN","slice","adgroupId","typesToLoad","filterString","schemaName","AdGroups","$filter","bypassCache","headers","lcid","CultureLcid","BaseTargetViewModel","targetTypePrefix","targetRowKeys","criterionType","criterionTypeTarget","MTBidAdjustmentErrorCode","MTBidAdjustmentErrorNumber","targetPopupId","rowExtenders","targetDescription","targetHeader","bidAdjustmentHeader","useCampaignSettings","onCampaignSettingsCheckChange","showAdGroupOverrideInformation","readonlyBid","computeReadonlyBid","targetTypeToErrorProperty","logInteraction","targetType","IsPersonalizedOffersV3Enabled","currentAdGroup","populateRows","dataset","targetRowKey","row","targetKey","targetName","bidAdjustmentOptions","multimediaBidAdjustmentOptions","selectedBidAdjustmentOption","getSelectedBidAdjustmentOption","bidAdjustmentValue","getBidAdjustmentValue","koErrorObservable","cashbackPercentValue","koErrorType","campaignCashbackPercent","adGroupCashbackPercent","extend","currentRow","anyAdGroupValue","targetHasValue","scenario","targetRow","isCashbackValueEmpty","setShowAdGroupOverrideInformation","setupCashbackValuesForAllRows","resetCashbackInheritInfoInAllRows","setCashbackInheritInfo","cashbackOptions","getCashbackOptions","selectedCashbackOption","getSelectedCashbackOption","cashbackInheritValue","getCashbackInheritValue","snapshotOverrideCashbackPercent","currentSelectedOption","selectedOption","entity","CriterionType","Device","DeviceCriterion","DeviceName","Age","AgeCriterion","Target","Gender","GenderCriterion","updatingEntity","updatingEntityRowKey","findTargetKey","levelText","bidAdjustmentIncreaseValue","bidAdjustmentDecreaseValue","Math","abs","multimediaAdDefaultBid","_this6","criterion","levelPrefix","anyDeviceChange","findIfThereIsAnyDeviceChange","rowBidAdjustment","rowCashbackPercent","addEntry","isCashbackValuesEqual","_this7","rowBid","maximumBid","minimumBid","_this8","bidErrors","cashbackErrors","isInRange","_validateBid","bidValid","cashbackPercentValidated","isCashbackPercentValid","ErrorNumber","Property","errorMessage","getCashbackPercentValidationError","getBulkApiErrors","populateErrorMessageConstants","v","v1","v2","inheritInfo","_this9","AdGroupCashback","Percent","CampaignCashback","campaignCashbackInheritOptions","getCashbackInheritOptions","viewContext","readonly","adGroupCashbackInheritOptions","inheritValue","_this10","bidError","bulkResponse","_this11","remainingErrors","criterionErrors","errorEntity","CampaignCriterions","campaignCriterion","response","criterionErrorExtracts","extractTargetingErrors","criterionResponseErrors","DeviceViewModel","_BaseTargetViewModel","rowKeys","mapping","rawMessage","checked","fromSettingsGrid","i18nApiError","fn","subscribeChanged","callback","observable","previousValue","_previousValue","latestValue","device","displayName","expandLinkText","showLevelToggle","isParentView","helper","originalCampaignBidAdjustmentValue","originalAdgroupBidAdjustmentValue","CampaignBidId","AdgroupBidId","selectedOsCount","isSelected","oldValue","selectedDeviceCount","_shouldSelectTarget","onClick","operatingSystems","os","_countValidatedDevices","changeText","currentDevice","osName","parentName","osSelected","_onCampaignSettingsCheckChange","devices","_populatedevices","anyAdgroupBidAdjustment","deviceKey","osNames","_ifAnyAdgroupBidAdjustment","_selectAll","shouldSelectDevice","shouldSelectOs","subScenario","deviceName","bidAdjustment","isDelete","BidAdjustment","OSName","_getCriterion","valid","forEach","deviceRow","getValues","DeviceType_Smartphones","_deleteCriterionWhenAppropriate","_addOrUpdateCriterion","deviceToUpdate","apiErrors","criterionEntities","AdGroupCriterions","failedDevice","errorWithMes","apiError","code","AgeViewModel","GenderViewModel","NativeAdViewModel","NativeAd","isNativeAdsRebrandingEnabled","NativeBidAdjustment","NativeAdTypeNativeAdsBidsRow","MultimediaAdViewModel","MultimediaAd","MultimediaAdBidAdjustment","MultimediaAdTypeMultimediaAdsBidsRow","targetTypeToViewModel","DeviceTargetViewModel","OriginalDevice","OriginalDeviceTargetViewModel","AgeTargetViewModel","GenderTargetViewModel","targetTypeToTmpl","originalDeviceTargetTmpl","TargetViewModelFactory","DeviceTypeTabletsCampaignBidAdjustment","DeviceTypeTabletsAndroidCampaignBidAdjustment","DeviceTypeTabletsBlackBerryCampaignBidAdjustment","DeviceTypeTabletsiOSCampaignBidAdjustment","DeviceTypeTabletsWindowsCampaignBidAdjustment","DeviceTypeTabletsOtherCampaignBidAdjustment","DeviceTypeSmartphonesAndroidCampaignBidAdjustment","DeviceTypeSmartphonesBlackBerryCampaignBidAdjustment","DeviceTypeSmartphonesiOSCampaignBidAdjustment","DeviceTypeSmartphonesCampaignBidAdjustment","DeviceTypeSmartphonesWindowsCampaignBidAdjustment","DeviceTypeSmartphonesOtherCampaignBidAdjustment","DeviceTypeComputersCampaignBidAdjustment","DeviceTypeComputersWindowsCampaignBidAdjustment","AgeTypeEighteenToTwentyFiveCampaignBidAdjustment","AgeTypeTwentyFiveToThirtyFiveCampaignBidAdjustment","AgeTypeThirtyFiveToFiftyCampaignBidAdjustment","AgeTypeFiftyToSixtyFiveCampaignBidAdjustment","AgeTypeSixtyFiveAndAboveCampaignBidAdjustment","GenderTypeMaleCampaignBidAdjustment","GenderTypeFemaleCampaignBidAdjustment","DeviceTypeTabletsAdgroupBidAdjustment","DeviceTypeTabletsAndroidAdgroupBidAdjustment","DeviceTypeTabletsBlackBerryAdgroupBidAdjustment","DeviceTypeTabletsiOSAdgroupBidAdjustment","DeviceTypeTabletsWindowsAdgroupBidAdjustment","DeviceTypeTabletsOtherAdgroupBidAdjustment","DeviceTypeSmartphonesAdgroupBidAdjustment","DeviceTypeSmartphonesAndroidAdgroupBidAdjustment","DeviceTypeSmartphonesBlackBerryAdgroupBidAdjustment","DeviceTypeSmartphonesiOSAdgroupBidAdjustment","DeviceTypeSmartphonesWindowsAdgroupBidAdjustment","DeviceTypeSmartphonesOtherAdgroupBidAdjustment","DeviceTypeComputersAdgroupBidAdjustment","DeviceTypeComputersWindowsAdgroupBidAdjustment","AgeTypeEighteenToTwentyFiveAdgroupBidAdjustment","AgeTypeTwentyFiveToThirtyFiveAdgroupBidAdjustment","AgeTypeThirtyFiveToFiftyAdgroupBidAdjustment","AgeTypeFiftyToSixtyFiveAdgroupBidAdjustment","AgeTypeSixtyFiveAndAboveAdgroupBidAdjustment","GenderTypeMaleAdgroupBidAdjustment","GenderTypeFemaleAdgroupBidAdjustment","NativeAdTypeNativeAdsBidsCampaignBidAdjustment","NativeAdTypeNativeAdsBidsAdgroupBidAdjustment","MultimediaAdTypeMultimediaAdsBidsCampaignBidAdjustment","MultimediaAdTypeMultimediaAdsBidsAdgroupBidAdjustment","IsNativeAdsRebrandingEnabled","CurrentCampaign","CurrentAdGroup","populateCashbackProperties","isMSANBoostEnabled","IsAmplifyEnabled","isHideBidAdjustmentForBoostEnabled","HideBidAdjustmentForBoost","toggleText","labelledbyId","setToggleState","listenTo","toggleState","Object","keys","search","cashbackKey","originalValue","percentSymbol","showBidAdjustment","setLevel","handleErrors","_len","args","Array","_key","targetsView","BaseTargetsView","jsData","CampaignCriterion","getCriterionFilter","targetKeys","entry","element","targetTypeToFilterProperty","CriterionBid","Multiplier","setData","isOriginalDeviceTargetingEnabled","isExpandedDeviceTargetingEnabled","bidAdjustmentIncreaseText","bidAdjustmentDecreaseText","ageMaximumBid","deviceTabletsMinimumBid","deviceTabletsMaximumBid","deviceSmartphonesMinimumBid","deviceSmartphonesMaximumBid","specialDeviceSmartphonesBidAdjustmentValue","parent","manual","manualCpv","manualCpm","manualCpa","enhancedCPC","maximizeClicks","maximizeConversions","targetCpa","targetRoas","maxConversionValue","targetImpressionShare","portfolioBidStrategy","costPerSale","percentCpc","commission","biddingStrategyTypeId","InheritFromParent","ManualCpc","MaxClicks","MaxConversions","TargetCpa","EnhancedCpc","TargetRoas","MaxConversionValue","TargetImpressionShare","ManualCpv","ManualCpm","PercentCpc","Commission","CostPerSale","ManualCpa","biddingStrategyType","biddingStrategyOption","defaultPopupIds","BidStrategy","entityType","types","hideHeader","isPortfolioBidStrategyEnabled","PageContext","isPredictiveMatchingEnabled","isRSABidStrategyAutoTargetingEnabled","bidStrategyName","portfolioBidStrategyType","popupIds","shouldSupportCashbackSettings","setPersonalizedOffersOptionsAndValue","enabled","shouldShowSponsoredCampaignCashback","setSponsoredCampaignOptionsAndValue","isSponsoredCampaignCashbackOptedIn","isSponsoredCampaignShowManualCpcOption","withRealTimeUpdates","oldValueTracking","subscribeForRealTimeUpdates","prefixBiddingScheme","triggerChangeEvent","portfolioSelectorView","i18nNewDesign","PortfolioSelectorView","isBulkEdit","needConfirmManagePortfolio","pbs","onSelectPortfolioBidStrategy","empty","selectedPortfolioBidStrategy","ensurePortfolioSelectorView","showPortfolioSelector","selectedBidStrategy","selectedPortfolio","TypeId","showCPC","checkCPC","maxCpc","decimalNumber","fromLocalToFloat","showTargetCPA","showTargetROAS","multiplier","showTargetImpressionShare","targetImpressionShareAdPosition","showCostPerSale","showCommissionRate","targetCommissionRate","showAutoTargeting","checkAutoTargeting","showPredictiveMatching","predictiveMatchingChecked","errorMessages","adGroupType","adGroupstrategyOptions","Text","strategyOptions","unshift","_ref$campaignType","IsPersonalizedOffersV2Enabled","IsCostPerSaleEnabled","isPersonalizedOffersEnabled","_getBidStrategyByCamp","getBidStrategyByCampaignTypeWhenPersonalizedOffersEnabled","isAfterSave","targetBidStrategy","bidStrategyOptions","updateBidStrategy","_ref2","_ref2$isSponsoredCamp","isSponsoredCampaignCashbackEnabled","_ref2$isSponsoredCamp2","isShowManualBidStrategy","isMranEcpcEnabled","isMranTroasEnabled","_getBiddingStrategyFo","getBiddingStrategyForSponsoredCampaign","isMSStoreAdsGAWorkflow","showBidStrategySection","forceReadOnly","forceHideBidStrategySection","isFromInitialization","meetConversionGoal","meetRevenueGoal","isCoOpStore","manualOnlyOption","campaignBiddingStrategyOptions","isCreation","BROAD_ONLY_BID_STRATEGY_OPTIONS","Set","FAC_STATUS","freeze","NOT_IN_PROGRESS","CCUIConstants","RecommendationAdoptionStatus","NotInProgess","ACTIVE","ADOPTED","Adopted","AUTO_BIDDING_FEATURE_IDS","MAX_CLICKS","FAC_FEATURE_ID","AUTO_BIDDING_MAX_CLICKS","MAX_CONVERSIONS","AUTO_BIDDING_MAX_CONVERSIONS","autoBidUpfrontSpendValue","percentageThreshold","NumberRange","minValue","KeywordBidRange","FloorValue","maxValue","CeilingValue","manualCpi","manualCpc","appConfig","maxCpcKeyword","maxCpcProductGroup","ProductGroupBidRange","outOfRangeTemplate","INVALID","validateNumber","excludeMin","excludeMax","lowerThanMin","higherThanMax","outOfRange","countNumberOfDigits","_$result","IsCampaignTargetROASBidStrategyEnabled","IsNewCampaignTargetROASBidStrategyEnabled","IsSmartShoppingCampaignEnabled","IsMaximizeConversionValueEnabled","IsTargetImpressionShareEnabled","IsManualBiddingDeprecationEnabled","IsManualCpmEnabled","IsVideoAdsForCampaignEnabled","IsHideCpmForFeedbasedCampaginEnabled","IsManualCpcForVideoAdsEnabled","IsAudienceCampaignAutoBiddingV2Enabled","IsMSANMaxConversionsEnabled","IsEnabledDeprecateManualCpcForAudienceCampaign","IsDomesticSimplifiedChineseEnabled","IsPortfolioBidStrategyEnabled","IsHotelCampaignEnabled","IsSponsoredPromotionsByBrandsEnabled","IsPersonalizedOffersV4Enabled","IsWindowsStoreAdsManualCPAEnabled","isMaxConversionForSscEnabled","isPredictiveMatchingPilotEnabled","isXandrVideoCampaignEnabled","isMaxConversionValueInSearchShoppingEnabled","isMaxConversionValueInSearchEnabled","isBroadOnlyPilotEnabled","isEnableMSANDisplayCampaignsEnabled","isEnableMSANVideoCampaignsEnabled","isMaximizeConversionValueEnabled","isTargetImpressionShareEnabled","isHotelCampaignEnabled","isCostPerSaleEnabled","globalFilterCampaignType","getCampaignTypeGlobalFilter","CampaignTypeToStringMap","ccJsData","originalBidStrategy","isGlobalFilterAllCampaign","isGlobalFilterAudienceCampaign","isGlobalFilterHotelCampaign","campaignBiddingStrategyType","validateWithBudget","budgetAmount","showBidStrategySelection","isPortfolio","isVideo","isFeedBased","isMicrosoftStoreAd","isSmartShopping","isSmartShoppingWithMaxConversionsForSsc","isSearchShoppingWithMaxConversionValue","isChinaMarketAudienceCampaign","isPmax","isAppAds","isBulkEditWithMaxConversionsForSsc","isCampaignTargetROASBidStrategyEnabled","isEnabledAutoBiddingForAudienceCampaign","CampaignSubTypes","AudienceStatic","AudienceFeedBased","AudienceDynamicFeedBased","BrandAwarenessVideoAds","DisplayAds","isAudienceCampaignMaxConversionsEnabled","isXandrDisplayAdsCampaign","isXandrVideoAdsCampaign","isSearchCampaignMaxConversionValueEnabled","shouldEnableManualBiddingDeprecation","isManualBiddingDeprecationEnabledForCurrentPath","isCampaignTypeSupportedForManualBiddingDeprecation","isBulkEditViaCampaignsGrid","isCPG","CoOpCampaignSubType","isCampaignSettingsWhereCampaignHasManualCPC","determineSupportedCampaignBiddingStrategyOptions","CampaignSubTypeMapping","option","costPerSaleBidStrategy","isXandrServing","_toConsumableArray","adGroupBiddingStrategyOptions","keywordBiddingStrategyOptions","targetImpressionSharePositionOptions","biddingStrategyId","isReadOnly","showTargetCpaCheckbox","actualBidStrategy","isInitialize","isConversionChecking","errorMessageMaxCpc","errorMessageTargetCpa","errorMessageTargetRoas","errorMessageTargetImpressionSharePercent","errorMessageMaxConversionValue","errorMessagePortfolioBidStrategy","errorMessageCostPerSale","errorMessageTargetCommissionRate","maxCpcDefaultValueAlertMessge","targetCpaDefaultValueAlertMessge","targetRoasDefaultValueAlertMessge","targetCommissionRateDefaultValueAlertMessge","costPerSaleDefaultValueAlertMessge","showAutobiddingChangeAlert","isTargetCpaCheckboxSelected","isTargetRoasCheckboxSelected","isBidStrategyReadonly","showTargetRoasCheckbox","showConversionChecking","supportedBidStrategies","autoTargetingEnabled","logMaxCpcChange","imaxCPCBidBase","maxCpcBid","isMaxCpcDirty","read","write","checkConversionCountAndRevenue","owner","showMaxCpcDefaultValueAlert","maxCpcKey","isBidLessThanFiveCentsForShoppingCampaign","realValue","itargetCpaBidBase","targetCpaBid","isTargetCpaDirty","showTargetCpaDefaultValueAlert","targetCommissionRateValue","showTargetCommissionRateDefaultValueAlert","itargetRoasBidBase","targetRoasBid","showTargetRoasDefaultValueAlert","targetAdPosition","targetImpressionShareAdPositionUpdate","targetImpressionSharePercent","showPortfolioSection","originalPortfolioBidStrategy","costPerSaleValue","isRenderedInReact","showCostPerSaleDefaultValueAlert","setConversionChecking","checkConversionTracking","today","Date","startDate","dateUtils","format","kendo","addDays","endDate","AdvertiserCustomerID","dismissCouponNotification","isAutoBiddingCouponNotificationDismissed","getAutoBiddingCoupon","ccJsDataInstance","GetJsDataInfo","cidFetcher","uidFetcher","CurrentUser","willSupportCors","CCBaseUrl","jsDataCcRest","FeatureAdoptionCoupon","aid","coupons","FeatureId","autoBiddingCoupon","autoBidMaxClicksDescription","autoBidMaxConversionsDescription","shouldDisplayNotification","autoBiddingCouponDescription","shouldSkipConversionCheck","checkConversionCountAndRevenueCalled","IsActiveConversionGoalPresent","IsActiveConversionGoalPresentWithValidRevenueValue","utcnow","utcNow","setDate","getDate","PerformanceMetrics","parseFloat","CPA","AverageCPC","RevenueOnAdSpend","checkErrorMessage","meetValue","checkSelectedBidStrategy","showConversionCountCheckErrorMessage","showRevenueCheckErrorMessage","meetMaxConversionValueGoal","showMaxConversionValueLocationTargetMessage","showManualCpcDeprecationBannerForAudienceCampaign","showSwitchStrategyWarningMessage","showBroadOnlyErrorMessage","isBroadMatchOnlyCampaign","_TL_","vCps","vBudget","BidStrategyId","BidStrategyName","MaxCpc","Amount","AutoTargetingEnabled","TargetAdPosition","mtModel","_default","parentItem","parentView","suggestedNewValue","currentValue","dataArray","helpId","showHelp","userInput","validator","currentSelectedId","landscapePointsLength","selectionUpdated","notify","inputInvalidByUser","inputValid","notCustomInput","customInputAndUserNotInvalidIt","inputErrorMessage","radioName","hasData","startDateString","endDateString","inSimpleMode","isClickGraph","valueToApply","updatedSelectedIndex","dataToShow","hasZeroCurrentPoint","landscapePoints","selectedIndex","showClick","currentBid","suggestedBid","BidLandscapePoints","hasClick","CurveType","sortBy","point","uniq","impressions","Impressions","impressionsStr","mlImpressions","MLImpressions","mlImpressionsStr","comment","clicks","Clicks","clicksStr","cost","Cost","costStr","customBidCurrentPoint","ChartData","convertDataFromResposne","StartDateString","EndDateString","_BidLandscapeModel","tableBidText","BidLandscapeModel","colors","getBidlandscapeChartOptions","series","animation","chart","xAxis","allowDecimals","clickGraph","labels","align","y","style","color","fontWeight","fontSize","formatter","showGridlines","gridLineWidth","gridLineColor","lineWidth","lineColor","startOnTick","endOnTick","tickPositioner","positions","tick","dataMin","increment","dataMax","ceil","yAxis","opposite","step","legend","credits","tooltip","crosshairs","dashStyle","plotOptions","dataLabels","marker","enableMouseTracking","grouping","shadow","fillColor","radius","states","hover","borderWidth","pointWidth","events","getMakerSetting","enable","getAdgroupCurrentPointSetting","symbol","percentileCeil","original","floor","BidLandscape","_ref$parentItem","_ref$viewModel","_ref$helpId","_ref$inSimpleMode","_ref$dataToShow","slideChartOptions","TypeError","msg","prepareView","convertDataForBidLandscape","initBidLandscapeCharts","delegateEvents","clickEvent","kpiIndexInSortOrder","highcharts","initSlideChartForBid","pointClicked","tableKPiIndex","getTableKpiIndex4Point","highchartsConfig","click","stopImmediatePropagation","landscapePointClicked","graphPoint","maxIndex","maxX","maxY","minX","minY","xAxisName","toUpperCase","seriesData","x","reverse","extraSeries","prepareExtraSeries","min","max","KeywordBidLandscape","EntityName","KeywordName","handleSortChange","sortInfoKey","orderby","sortableHeader","preference","sortInfo","isDataFetchManagerEnabled","currentsortableHeader","currentQuery","queryFromView","selectorId","defineGridPlugin","toolbar","originalQuery","gridName","plugins","getLoadDirectlyLinkedAccountsPreference","loadDirectlyLinkedAccounts","queryParams","edm","root","identifyEntitySet","toJSON","navigation","parameters","isCustomerHierachyRequest","$call","toolbarEditor","gridToolbarGroup","toolbarWithItem","menuItems","showAllAccounts","showDirectlyLinkedAccounts","button","setLoadDirectlyLinkedAccounts","_ref3","rawValue","customerHierarchySelector","menu","wrapPlugin","originalPlugin","dependencies","globalConfig","_config$plugins$inlin","inlineDownload","isInlineDownloadReportV2Enabled","IsInlineDownloadReportV2Enabled","ReportEmailRule","unset","restDependencies","apply","merge","DownloadView","DownloadViewV2","DownloadViewV1","inlineDownloadPlugin","inlineDownloadWithoutSegmentPlugin","originalInlineDownloadWithoutSegmentPlugin","inlineDownloadWithoutFilterStatePlugin","withoutFilterStatePlugin","pulginConfig","editorContainer","slideUp","ReactDom","existingContainer","prepend","renderPrimaryContactReactComponent","props","React","EditPrimaryContact","renderEditComponent","cid","uid","callBack","contacts","selectedUser","warning","warningMessage","userId","onSubmit","accountIds","postPrimaryContactUpdate","IsSuccess","views","alertCenter","showConfirmation","Message","afterUpdate","onCancel","slideDown","registerToolbar","targetToolbar","isInEditing","getPrimaryContacts","Alert","AlertContent","showWarning","num","monetaryOptions","compact","minimumFractionDigits","maximumFractionDigits","currencyCode","formatCost","formatCurrency","getTrafficEstimationOp","adGroup","budget","adGroupRequests","locationIds","languages","Keywords","keyword","MatchType","targetings","locationId","language","getDailyBudgetAmount","budgetObj","extract","formattedEstimationOp","adGroups","CampaignTrafficEstimate","AdGroupTrafficEstimateParameters","KeywordTrafficEstimateParameters","MaxCPC","adGroupsWithoutBid","Targetings","LocationId","budgetSuggestionOpFormatter","extractedOp","Request","CurrentBudget","InitialBudget","initBudget","Languages","LocationIds","bidSuggestionOpFormatter","bidSuggestionEndpoint","budgetSuggestionEndpoint","getSuggestion","callbacks","timestamp","isBid","endpoint","getTrafficEstimation","getBidSuggestion","getBudgetSuggestion","MAX_KEYWORDS_COUNT","MAX_KEYWORD_LENGTH","MAX_LOCATION_IDS_COUNT","estimationEndpoint","endPoint","opTransformer","odataHost","locations","getSupportedLocationIds","supportedCount","onServiceNotSupported","op","adgroup","isKeywordLengthInvalid","adGroupTrafficEstimateParameters","isDSAMixedModeCampaignEnabled","onSuccess","post","host","dummy","textStatus","xhr","getResponseHeader","suggestedBidRequestId","onRequestError","_len2","_key2","spinner","logBidView","activity","trace","isNKW","AccountCurrencyCode","logBidAdoption","SearchBid","viewedSuggestion","logBudgetView","campaign","suggestedBudget","logBudgetAdoption","logBudgetLandScapeView","clientName","optId","suggestedBudgetValue","logBudgetLandScapeAdoption","userInputBudgetValue","logBudgetLandScapeForSharedBudgetCampaignView","budgetId","logBudgetLandScapeForSharedBudgetCampaignAdoption","weekly2Monthly","weeklyVal","weekly2MonthlyInt","round","bidHintKey","suggestedClicks","impressionsMore","imporessionMore","bidSuggestion","applyBtnText","lowBidBtnTitle","normalBidSuggestion","Scenario","SuggestedBid","OriginalInputBid","EventName","SuggestedBidRequestId","cancel","budgetView","BudgetView","haveBudgetSuggestion","dailyBudget","fromBudgetUpdate","updateSuggestedBudget","enough","getSuggestedBudget","s$Budget","_currenyFormatter","BudgetTypes","BudgetScopes","BudgetTypesToBudgetScope","_defineProperty","BudgetTypeSectionOptions","isDeprecateAcceleratedBudgetEnabled","IsDeprecateAcceleratedBudgetEnabled","IsDeprecateAcceleratedBudgetOptoutEnabled","budgetRangeNew","budgetRangeModule","budgetRange","validationDailyMinBudget","DailyRange","USDefaultBudget","IsDefaultBudgetExperimentationEnabled","realDefaultBudget","Daily","Default","defaultBudget","clicksIncrease","isDailyBudgetExpanded","showFACHint","featureAdoptionCouponValue","budgetTypeSelectionOptions","selectedBudgetType","showBudgetTypeSelectionOptions","showBudgetTypeSelection","allowBudgetTypeSelection","budgetAmountPlaceholder","fromLocalToString","BudgetScope","isDailyStandard","hideDailyBudgetOptions","readOnly","hideAcceleratedBudgetOption","showSuggestedBudget","showBudgetMinRecommend","minimumBudget","budgetSuggestion","increasedClicks","humanizeNumber","forEditing","budgetLimit","LifetimeRange","featureAdoptionCouponHint","amountTypeValidator","validators","amountSizeValidator","computeBudgetError","useSuggestedBudget","applySuggestedBudget","budgetError","budgetInvalid","budgetType","budgetLabel","budgetTypeLabel","prototype","updateFeatureAdoptionCoupon","couponValue","_getSuggestion","_logger","_weeklyToMonthly","sumAdGroupClickList","adGroupClickList","formatAdGroupClickList","memo","initialize","toFixed","currencySymbol","isDailyStandardName","toggleDailyType","toggleClass","budgetChanged","budgetTypeChanged","Intermediate","getAll","clicksAsSuggestedBudget","EstimatedAdGroupClicksAsSuggestedBudget","clicksAsCurrentBudget","EstimatedAdGroupClicksAsCurrentBudget","EstimatedAmountAsSuggestedBudget","isCampaignTargetsExpanded","isCampaignLevelGoalEnabled","isbiddingStrategyTypeCPC","estimateTrafficSupported","showPerformanceGrid","showAdgroupBidGrid","showError","infoMessage","showInfo","hasUnsupportedLocations","showSearchBidValidationError","infoMessageWithLearnMore","linkText","bidLimitations","bidRange","BaseAdGroupBidGrid","_ref$gridColumns","gridColumns","_ref$defaultBid","girdAriaLabel","isBidChanged","vnext","inlineErrorPlugin","errorIconClasses","tableClasses","tableAttributes","primaryKey","bodyRows","classes","bidUpdated","newError","inlineError","newBidFloat","patchError","resetMesages","refreshGrid","isAllBidValid","updateBudget","patch","suggestedAvgCpc","adgroups","NoClicks","CriticalLowBid","NormalLowBid","BidInvalid","BidExceedRange","BidExceedMaxLength","Other","bidStatus","Warning","Suggesiton","Good","getBIValueByAdGroupType","AdGroupType","adGroupTypeEnum","SearchDynamic","PerformanceGridView","_BaseAdGroupBidGrid","isBidEditable","suggestionEnabled","lowBidBtnText","setClarityTag","width","headClasses","bidEditorTemplate","bidStatusENUM","estimatedNumTemplate","estimatedNum","TotalCost","newBidString","itemOfElement","validateResult","fetchEstimate","checkLimitaion","targetAdgroup","calcTraffic","statusUpdate","onNotAllSupported","updateAdGroups","onNonSupported","campaignTrafficEstimate","adGroupResult","pick","suggestedImpressions","InputBid","LowBidAlertType","CampaignId","AdgroupId","CurrencyId","hintKey","contentText","suggestionBid","lowBidBtnContent","bidToolTipLowBid","popoverExtender","decorate","excludeCb","clickCb","closeCb","popup","visibleContent","PopupContentView","$target","Boolean","AdgroupBidGridView","AdgroupBidGrid","_AdgroupBidGrid","BudgetPanelView","_BudgetPanelView","_BiddingStrategyView","AdvancedSettingsView","_AdvancedSettingsView","_SharedBudgetView","PerformanceGrid","_PerformanceGrid","AudienceAdvancedTargetSettings","audienceCampaignLoader","AudienceTargetInfo","getTrafficEstimationWithSuggestedBid","_getBidSuggestion","IsSuggestionInCampaignCreationWorkflowEnabled","IsSuggestionInCampaignCreationWorkflowVNextEnabled","dynamicPermissions","showDisclaimerBanner","campaignInstrumentation","suggestionInCreationWorkflow","campaignCreation","showBudgetAndBidMarker","autoEnd","isSuggestionInCampaignCreationWorkflowEnabled","biddingStrategyView","DefaultBid","performanceGrid","adgroupBidGrid","advancedSettingsView","TimeZone","getAccountTimeZone","updateGrid","removePreviousContent","fetchSuggestedBid","res","AdGroupEstimatedTraffic","reqId","willShow","numKeywords","context","canFetchSuggestion","scrollTo","budgetFactory","newFactory","campaignObj","getAdGroupsData","initialBudget","trafficRequestFormatter","fetchSuggestedBidMarker","willFetchData","BiddingScheme","initCampaignTargets","CampaignType","updateCampaignTargets","subViewsNeedToUpdateCashbackColumn","campaignTargetsView","adScheduleView","locationTargetsView","shouldShowCashbackColumn","POUtils","subView","toggleCashbackPercentColumns","queryParameters","expand","isSPA","CampaignSubType","isCPS","PersonalizedOffersEnabled","MonthlyBudget","campaignGoalSelectionView","goalSelector","realI18n","isMultiMode","isHideSaveBar","BroadOnly","PredictiveMatching","IsBroadMatchOnlyCampaign","onShowCampaignTargets","onHideCampaignTargets","audienceTargetInfo","resourceName","listenToLocationCriterion","useLocationControl","initAudienceAssociationView","currentLevelTargetInfo","criterions","SelectionStatus","locationTargetTypes","createTemplate","isShowDisclaimerBannerEnabled","addEventListener","onSelectedBidStrategyChange","shouldCancel","save","shouldBack","origin","updated","getAdGroups","updatedAdgroup","errorElements","logBidSuggestion","SUBSTRATE","SaveBid","BudgetId","scrollUtil","saveBudgetAndBidMarker","clearApiErrors","campaignToSave","biddingSchema","RSABidStrategyAutoTargeting","advancedSettings","dateSettings","netWorkOptions","populateCriterionCampaignIds","deviceTargets","locationTargets","scheduling","campaignTargetsData","getData","campaignTargetsCriterions","nativeAds","multimediaAds","vanityUrlSettings","AdScheduleUseSearcherTimeZone","CampaignConversionGoalAssociations","convertToMTFormat","adapter","targetToCountMapping","fillCriterionsWithId","withUiBlock","DAILY_BUDGET_TYPE","LIFETIME_BUDGET_TYPE","dailyAcceleratedBudget","lifetimeBudget","budgetTypes","CampaignSettings","createScenarioAndActivity","scenarioName","activityName","nullable","showBudgetMinRecommendation","applySuggestedBudgetLog","module","legacyModule","default","i18nGlobal","BUDGET_SUGGESTION","$elToBlock","importNotificationCallback","landscapeEnabled","IsBudgetInlineSuggestionEnabled","getBudgetRangeOld","LifetimeBudgetAmount","MinXandrDailyBudgetRangePerCurrency","LinkedInBudgetRangePerCurrency","Min","Max","DeliveryStatusDetails","DeliveryStatus","budgetSuggestionPerfMarker","createMarker","i18nForBudgetLandscapePromise","odataPromise","instrumentationPromise","budgetLandScapeTablePromise","_ref4","_slicedToArray","i18nForBudgetLandscape","BudgetLandScapeTable","inlineBudgetEditor","recordBudgetLandscape","odataPath","uri","fetchBudgetLandscape","rawData","tableView","opportunityData","conversionSummaryStatus","ConversionStatus","currentBudget","fromBudgetColumn","fromCampaignTab","OpportunityId","rawSuggestedBudget","templateWithLandscape","currencySymbolClassName","updatedBudget","getSelectedNewBudget","opportunityId","unexpectedError","getErrors","childMarker","MessageView","messageTemplate","_Backbone$View2","proceedButtonClickCallback","accountsCount","buttons","class","disabled","lightboxDiv","Dialog","showCloseButton","setContent","setState","body","appendChild","AlertDialog","CommonDialog","dialogContent","accountNumbersList","_jsxs","_Fragment","_jsx","accountNumbers","onAction","ReactDOM","alertButtonText","AccountHoldStatus","AccountInactiveReasons","AccountMissingABL","postRequestWithErrorHandled","successCallback","logMethodName","ajaxPost","xhrFields","withCredentials","contentType","dataType","instrument","onError","hideLoadingPanelOnSuccess","handleErrorMessage","firstError","errorCodes","Code","postRequestWithBatchErrorHandled","responses","_response$Value","_response$Value2","isSuccess","InternalErrors","SenderErrors","isAccountAlreadyHoldOrUnHold","fetchAccountsData","ajaxGet","getCCUrl","postRequestRedirect","bulkEditAbl","selectedAccounts","customerId","bulkEditTaxesValidationErrorsUrl","accountsUpdateUrl","bulkEditManualHold","isApplyHold","bulkEditManualHoldUrl","bulkDeleteAccounts","_ref5","accountsDeleteUrl","BulkDeleteLightbox","bulkReactivateAccounts","_ref6","selectedAccountIds","accountsReactivateUrl","accounts","ABLMissingAccounts","account","accountInactiveReasons","isArray","some","reason","Reason","getABLMissingAccounts","BulkReactivateABLMisssingLightbox","exclusionsUpdate","$http","queryify","__adcenterAJAX","__RequestVerificationToken","whitelistCampaignTypesForDefaultSelections","None","Shopping","DynamicSearchAds","Audience","Smart","Hotel","All","defaultSelections","label","confirmText","helpTopic","helpAriaLabel","endDateSelection","shouldGridReload","adScheduleTimeZoneSelection","selections","defaultSelection","textAreaValue","campaignLifetimeBudget","o","selectedValue","learnMoreText","selectLabel","applyForThisPageOnlyInfo","applyButtonText","cancelButtonText","errorMsg","selection","datePicker","getSelection","SelectedBulkEditOption","endDateMachine","getSelectedDate","endDateUTC","getState","isNodateSelected","parseDate","formatDate","timeZone","culture","HasEndDate","endDatePicker","currentAlertId","dismissAlert","dismiss","showAlert","dismissible","showUnknownError","CampaignLifetimeBudget","senario","bulkEditCampaignExclusions","start","CampaignsDatePicker","allowNoDate","noDateLabel","dateLabel","noDateGroupAriaLabel","datePickerAriaLabel","adScheduleTimeZoneView","BulkEditAdScheduleTimeZoneView","BulkEditAdScheduleTimeZoneModel","onOperationSuccess","confirm","getConfirmText","submitJob","selectedIds","selectedKeys","idData","exclusionData","getResult","Errors","Records","Rows","object","clearErrors","stop","EntityGridIdMap","DsaTarget","NegativeAdGroupDsaTarget","NegativeCampaignDsaTarget","pollStatus","taskId","successCb","failedCb","BulkEditSession","processResponse","completeCB","failedCB","progressCB","bulkEdit","preview","opt","process","urlParameters","$expand","getParams","batchActions","gridId","SummaryDataContextManager","updateContext","bulkEditChange","bulkEditPreview","getSelectedIds","getQueryStringRaw","dateRange","startdate","RangeStartDate","toISOString","enddate","end","RangeEndDate","getDateRange","isSelectAll","projectionFilters","filters","convertToOData","encodeURIComponent","idFilters","getQueryString","queryString","queryStringProcess","QueryString","AdGroupId","getDescription","idsCount","Description","Selection","PreviewEntityIds","Job","backbone","TotalRowCount","SuccessRowCount","ErrorRowCount","CreationTime","ExecutionStartTime","CompletionTime","CreatedBy","BulkEditResults","selectedEntityCount","PreviewCompositeIds","updateSummaryDataContext","metadata","isPreviewMode","gridIds","dependentIds","UserErrors","sync","method","jobId","currentCustomerIdFirst","jq_ajax_adapter","idAttribute","capValue","substring","toDescription","FilterExpressions","expressions","expression","SelectedColumn","idStringExpressions","otherExpressions","compactOthers","expr","SelectedOperator","Values","compactIds","toDescriptionWithDataFilter","idBased","fromDescription","compactFilter","returnDescription","Filter","toQueryString","filterExpressions","toRuleDescription","acrossAllPages","expressionsToMap","SelectedNames","fromRuleDescription","mapped","buttonEvent","errorDetails","_ref2$isBlocking","isBlocking","ReparentingNotAllowedForAccountsMaxLimit","ARWUnthemedBulkErrorView","getElementById","transferAccountsUrlConfirmation","reparentingJobAddHandler","traditional","reparentingId","bulkTransferAccounts","onSuccessCallBack","bulkTransferModel","accountType","transferConfirmationUrl","transferacc","acc","BulkTransferLightbox","rpid","appendErrorSummary","unlinkaccountsUrl","unlinkaccountsUrlConfirmation","HierarchyAccountTypeValue","bulkUnlinkAccounts","onConfirm","bulkUnlinkModel","number","AccountNumber","AccountType","Unknown","managers","ManagerAccounts","manager","CustomerNumber","unlinkConfirmationUrl","unlinkacc","BulkUnlinkLightbox","revisedModel","returnUrl","location","href","redirectUri","AdScheduleTimeZoneModel","ChangeLanguageModel","BaseViewModel","adScheduleUseSearcherTimeZone","adScheduleUseSearcherTimeZoneEdit","timeZoneText","getAccountTimeZoneText","ActionType","SearchString","Options","getIdFilter","showPanel","selectedLanguages","getDefaultLanguage","titleText","entityCount","errorRole","s$AdGroup","_globalConfig$get","IsSimplifiedChineseLanguageEnabledInMultipleLanguage","IsAdsGlobalizationPhase1Enabled","IsAdsGlobalizationPhase2Enabled","IsAdsGlobalizationPhase6Enabled","IsAdsGlobalizationPhase2JapanEnabled","IsAdsGlobalizationPhase9Enabled","IsAdsGlobalizationPhase9VIEnabled","languageSelector","selectionAcrossPage","success","enum","languageOptions","inEditMode","MultiLanguageSelector","getSelectedLanguages","pgridPlugins","crossPageSelectAll","isAllSelected","getLanguageString","returnedValue","lang","OriginalValue","formatPreviewOrError","formatBid","_preferencesService","modalManager","ModalManager","campaign2ObjectiveMapping","railViewIds","step1","step2","step3","step4","StepsWizardView","_exitWithSave","logToSubstrate","logToSubstrateStop","navigateToCampaignSummaryPage","alert","_cancel","navigateToRoute","stepIndex","stepActivities","stopSignal","getAdGroupCreateViewFactory","IsDSAMixedModeCampaignEnabled","campaignObjective","getCampaignType","_MixedModeAdGroupView","importPromises","all","spread","_AdGroupView","keywordAdGroupCreateDecorator","getAdCreateViewFactory","_AdsCreateView","getBudgetCreateViewFactory","BudgetCreateView","eventDelegator","isNextButtonEnabled","IsReadOnlyUser","CurrentAccountInActive","campaignSaved","localStorage","supportsStorage","campaignCreationStep1","campaignCreationStep2","campaignCreationStep3","campaignCreationStep4","startSignal","descriptionHelpId","descriptionHelpText","stageStepLoading","contentClass","enableStepSwitch","steps","pageTitle","railViewId","viewFactory","CampaignSettingsView","showLanguage","usePanel","serverContext","isDelayLoading","isAutoTargetCampaign","UpdateView","keywordAdGroupUpdateDecorator","AdGroupUpdateView","keywordAdGroupInstru","adExtensionsDynamicFeatures","customButtons","extendDefaultButtons","extendedParameters","cssClass","visible","isLast","maxAvailabeStepIndex","callbackBeforeRender","contextValue","diaplaySuccessDialog","err","doNotShowAgain","isPendingPaymentMethod","enums","accountStatus","pendingPaymentInstrument","isAccountOnHold","active","accountPausedReason","accountInactiveReason","notSet","InactiveReasons","accountPausedReasons","pausedDueToSystemIssue","pausedZeroBalance","pausedNoValidiO","successDialog","findByName","getContext","IsCampaignCreationSuccessDialogEnabled","shouldNext","campaignCreationFlowFinished","onSwitch","delta","direction","stepNumber","onSwitched","stepTo","invalidate","callbackBeforeRemove","fetchHasAvailableConversionGoals","fetchSmartShoppingCampaignCountIsLessThan100","noSmartShoppingReason","NO_AVAILABLE_GOAL","MORE_THAN_100","NO_PILOT","fetchIsSmartShoppingCampaignSupported","hasAvailableConversionGoal","isSSCCountLessThan100","supported","Success","_ref$aid","_ref$cid","_ref$uid","_ref$isPendingPayment","_ref$isAccountOnHold","_ref$accountPausedRea","link","URI","setQuery","dialogTemplateAccountPaused","hrefAddPaymentMethod","showTaxForm","dialogTemplatePendingPaymentMethod","hrefFixIt","dialogTemplateAccountOnHold","dialogTemplateInReview","_ref$lockRegionAriaLa","lockRegionAriaLabel","dialogView","successView","FocusLockPopupEditor","focusLockInstanceDecorator","onExit","focusFirstItemOnMount","managed","focusLockSuccessPopupEditor","modal","backdrop","keyboard","contentView","timeoutForBudgetLandscapePopover","isExperimentsOpenBetaEnabled","targetEntity","_ref$eventName","eventName","_ref$isForecasting","isForecasting","deliveryStatus","landscapeDisabled","ExperimentId","AssociatedExperiment","DecimalFormatter","expDateUtils","dismissHelpInfo","getTemplate","showHelpInfo","showSuggestionClickedCallback","clearTimeout","DeterministicViewForBackBoneView","showPopup","anchor","isThumbVisible","isLikeVisible","isLikeSolidVisible","isDislikeVisible","isDislikeSolidVisible","isRecommendedPageLinkVisible","feedbackComment","overLike","overLikeOut","overDislike","overDislikeOut","onClickLike","onClickDislike","legacyRouter","_bingads_webui_component_legacy_legacy_router_index","campaignTab","budgetLandscape","Level","ACCOUNT","CampaignIds","AdGroupIds","i18nRecommendation","preferenceName","BudgetLandscapeView","seasonalEvents","SeasonalEvents","dataVersion","Version","isInProductFeedbackLoopOn","IsRecommendationInProductFeedbackLoopEnabled","navigateToType","preferenceData","generateScope","initializeInstrumentation","dataService","RecommendationService","currentScenario","currentActivity","isNoExpand","IsForecasting","showForecastingMessage","campaignOutOfBudget","IsShared","budgetTitle","Shared","BudgetName","isSharedBudget","chartView","BudgetLandScapeChart","tableViewmodel","getViewModel","redraw","rawLandscapeData","notExceed","currentLargerThanMax","showData","helpText","formatLocaledSeasonalEventType","Landscapes","Comment","logAdInsight","ADINSIGHT_LOG_ACTION_TYPE","VIEW","IMPRESSION","accountId","token","levelAt","entityIds","addScenario","loadRecommendationTab","formattedReason","isLike","RECOMMENDATION_TYPES","BUDGET_OPPORTUNITY","FEEDBACK","input","typeId","RECOMMENDATION_IDS","channel","CHANNEL_TYPES","INCONTEXT","ADINSIGHT_LOG_API_NAME","RECOMMENDATION","gotoRecommendationTab","handleFeedbackDislike","handleFeedbackLike","gotoCustomizedRecommendationTab","reasonId","logUserFeedback","NAVIGATE_REASON","NoBudget","REALLOCATE_BUDGET","getSummary","ignoreCoupons","oppo","ele","OpportunityType","recommendationDescription","TYPE_DESCRIPTION_TABLE","showDismissFeedbackPopupForBudgetLandscape","onSubmitFeedback","saveDataVersionPreference","CustomerId","AcctId","BudgetTypeString","IsDailyBudgt","hasEvent","isForward","newBudget","COMMENT_TYPES","isSharedBudgetCampaign","budgetName","getEventForecasting","onNoBudgetLandscapeForCampaignOutOfBudget","positioningMethod","positioningOptions","positionAttribute","threshold","acceptBudgtLandscapeSuggestions","budgetLandscapeView","popupUtil","dataContextManager","DeliveryStatusDetail","isSharedBudgetRecommendation","logger","notifyAdInsight","onFetchBudgetLandscapeSuccess","getBudgetRange","minBudget","Monthly","maxBudget","processedData","landscapes","maxBudgetInLandscape","landscape","EstimatedBudget","processedLandscapes","processBudgetLandscapeResult","openBudgetLandscapePanel","dismissBudgetLandscapeHelpInfo","BudgetSuggestionContainer","parentRemove","showDialog","_this$campaign","force","InstrumentationContext","Provider","ThemeProvider","theme","components","ComponentSettings","core","ThemeFluent","FluentProvider","webLightTheme","I18nContext","Activity","ScopeContext","ServerContext","BudgetSuggestionDialog","enableSaving","onGridRefresh","onTriggerDialog","isReadOnlyUser","showBudgetSuggestion","showCampaignRejectionReasons","details","NoEligible","findIndex","splice","collectionSize","statusForCombinedPopup","detailsHtml","deliverStatusDetailTemplate","Callback","CampaignDeliveryStatusPopupFactory","_DeliveryStatusPopupF","handler","getEventTargetModel","hasClass","openBudgetSuggestionDialog","deliveryStatusPopupPerfMarker","openInlineOpportunityForCampaign","openInlineOpportunitiesPanel","getEventTargetEntity","_getEventForecasting","showBudgetLandscapeHelpInfo","_getEventForecasting2","campaignDeliveryStatusDetails","CampaignDeliveryStatusDetails","detail","BLACKLIST","suggestedValue","RecommendedValue","showApply","formattedSuggestedValue","formatDecimal","detailMessage","autobiddingLimitedStatus","hoverDeliveryStatus","autobiddingTemplate","learnMoreString","applyString","AutoBiddingLimitedMaxCPCRestriction","AutoBiddingLimitedBudgetRestriction","AutoBiddingLimitedUnAttainableTarget","enableApply","showBidLandscapeHelpInfo","DeliveryStatusPopupFactory","keyOfElement","itemWithKey","display","ResetImage","showQualityScoreDetail","qualityScore","qsContainerId","KeywordRelevance","LandingPageQuality","LandingPageRelevance","OverallQualityScore","controls","qualityscore","DisplayQsFlyout","preferenceService","removeEnumValuesFromProperty","propertyName","removeEnumArray","depth","updateEnumValueSets","entityName","disabledTargets","IsDynamicSearchAdsV1Enabled","enumValueSets","IsSmartCampaignPhase2Enabled","IsCustomerHierarchyEnabled","IsSharedLibraryPhase1Enabled","enableForExperimentFeature","isInPilot","IsExperimentsEnabled","campaignProperty","isExperimentProperty","putil","enableForMainGoalSelectionFeature","performanceMetricsProperty","allConvMetric","enableForViewThroughConversionsFeature","IsViewThroughConversionEnabled","IsViewThroughConversionsRevenueEnabled","viewThroughConvMetric","metric","enableFilterForPilotProperties","propertyNameArray","IsEnhancedShoppingCampaignAllowed","IsAudienceGridNewColumnsSupported","IsRemarketingSimilarAudienceAllowed","IsAudienceListSizeEnabled","getFeaturePermissionByPropertyName","updateFilterSchemaForPilotFeatures","originalSchema","updateEntitySchemaForSOV","updateEntitySchemaForRemovedPerformanceMetrics","enableForAudienceSOVFeatures","jsdataRawDataPlugin","commonJsdataRawDataPlugin","getRawData","LabelAssociationView","_AssociationView","stats","selectionInfo","_ref$disableDeselectA","disableDeselectAll","_ref$isManagementRequ","isManagementRequest","loadDirectlyLinkedAccountsObj","getLoadDirectlyLinkedAccounts","loadDirectlyLinkedAccountsValue","selectedRowCount","onOperationFailure","IsAccountLabelsEnabled","allPages","showProgress","showButtonBar","renderBulkEditJobView","AssociationView","CommonViewModel","customValidators","bindEl","applyBindings","isFunction","pug","exports","locals","pug_interp","pug_html","locals_for_with","escape","$$obj","pug_index0","$$l","pug_mixins","ariaLabelContext","templateString","tipText","linkId","displayText","cls","inputClass","errorColumnIsHtml","pug_index1","header1","header2","header3","header5","header6","header7","InReviewDescriptionLine3","adsApprovalLink","adsIsRunningLink","performanceDataLink","trackSalesLink","trackAnalyticsLink","reformatDate","StartDate","EndDate","TrafficSplitPercent","descriptionKey","actionKey","actionStringWithFormat","GeoCodeStatus","showEllipsisForExperiment","forExperiment","showBudgetLandscape","clName","st","prevOnClick","nextOnClick"],"sourceRoot":""}